已有23人关注
VB调用医保DLL接口程序,(初始化,调用其中的函数,上传数据等)如能给予回答万分感谢
发表在VB答疑区 2010-06-08
是否精华
版块置顶:
一、简介
根据《医院接口方案》的要求,我们对医院端接口进行了定义和说明。为统一和便于各个医院HIS开发商的软件和数据接入,我们采用标准的Windows DLL作为接口程序载体,对各种数据的操作采用函数调用方式进行。在本文中,大部分定义给出了Pascal和C/C++的定义,其他开发语言的定义请参照进行。

二、公用接口
(一)基本结构
1.字符:1个字节(1byte)
Pascal  :char
C/C++  :char
由于Windows中大部分采用的字符串指针类型在使用时需要申请,为避免内存管理的复杂性,我们对字符串的处理采用固定长度的字符串数组,替代字符串指针,在使用前应对该字符串数组进行初始化。下面以Pascal为例进行说明(其它开发语言请参照执行):
在输入住院结帐单信息结构TInBedBillInfo中的管床医生时,如果医生姓名是“王五”应如下方式进行:
AInBedBillInfo: TInBedBillInfo;
FillChar(AInBedBillInfo.INBED_DOCTOR, 100, #0);
StrPCopy(AInBedBillInfo.INBED_DOCTOR, '王五');
2.整数:4个字节的整数
Pascal :integer
C/C++ :int
3.浮点:4个字节的浮点
Pascal : Single
C/C++ :float
4.布尔值:1个字节的布尔值
Pascal :Boolean
C/C++ :BOOLEAN
(二)公共数据结构
以下数据结构的定义我们给出Pascal和C的定义,如果有差异,以Pascal定义为准。
1.字符串
在接口中,所有字符串采用固定大小的静态字符数组,避免了在使用Pchar数据类型的过程中申请和释放内存的过程。其定义如下:
Pascal:
TStringOfChar = array [0..99] of char;
var TempStr : TstringOfChar;
C/C++:
typedef struct StringOfChar
{
char pchr[100];
} STRINGOFCHAR;
STRINGOFCHAR  Tempstr;
2.参保人基本信息
参保人信息采用结构形式获取,其定义如下:
Pascal:
TPersonInfo = record
//以下数据为返回数据
PSN_ID      :   Integer;      //医疗参保ID号
    PSN_No      :   Integer; //参保人编码
    PSN_NAME    :   TStringOfChar;//参保人姓名
    Sex         :   TStringOfChar;//性别
IDCARD      :   TStringOfChar;//身份证号码
    PSN_STS     :   TStringOfChar;//参保人状态
    PSN_TYP     :   TStringOfChar;//人员类别
    UNIT_CODE   :   TStringOfChar;//单位编码
    UNIT_NAME   :   TStringOfChar;//单位名称
    OFFICAL_TYP :   TStringOfChar;//公务员类别
    HAI_TYP     :   TStringOfChar;//补充医保名称
    ACCT_STS    :   TStringOfChar;//医保账户状态
    HI_ACCT_PWD :   TStringOfChar;//医保帐户口令
    SILL_PAY_AMT_TOTAL :   Single;//年内进入门诊特殊疾病支付金额
    SILL_YR_FUND_AMT   :   Single;//年内门诊统筹基金支付金额
    YR_FUND_AMT        :   Single;//年内统筹基金支付金额
    HAI_YR_HIGH_AMT    :   Single;//年内补充高额支付金额
    HAI_YR_INBED_AMT   :   Single;//年内补充住院补助支付金额
    GZ_CUR_AMT         :   Single;//个人账户余额
YR_INBED_CNT       :  integer;//年内住院次数 
Card_No     :   TStringOfChar;//IC卡卡号
end;
C/C++:
struct PersonInfo
{
//以下数据为返回数据
int  PSN_ID;
STRINGOFCHAR PSN_NO;
STRINGOFCHAR PSN_NAME;
STRINGOFCHAR Sex;
STRINGOFCHAR IDCARD;
STRINGOFCHAR PSN_STS; 
STRINGOFCHAR PSN_TYP;
STRINGOFCHAR UNIT_CODE;
STRINGOFCHAR UNIT_NAME;
STRINGOFCHAR OFFICAL_TYP;
STRINGOFCHAR HAI_TYP;
STRINGOFCHAR ACCT_STS;
STRINGOFCHAR HI_ACCT_PWD;
float SILL_PAY_AMT_TOTAL;
float SILL_YR_FUND_AMT;
float YR_FUND_AMT;
float HAI_YR_HIGH_AMT;
float HAI_YR_INBED_AMT;
float GZ_CUR_AMT;
int YR_INBED_CNT;
STRINGOFCHAR Card_No;
};
注:凡是从IC卡中读出信息后如果需访问IC卡号,均应从本结构的Card_No字段获取IC卡号。

3.住院登记数据
Pascal:
  TInBedRegInfo = record
    //以下数据为录入数据
    PSN_ID              : Integer;   //医疗参保人ID号,必须录入
    INBED_SILL_ID       : Integer ;      //住院特殊病种ID
    INBED_NO            : TStringOfChar ;//住院号
    INBED_EXAM          : TStringOfChar ;//入院诊断
    INBED_EXAM_ICD10_NO : TStringOfChar ;//入院诊断ICD10编码
    INBED_DEPT          : TStringOfChar ;//入院科室
    //以下数据为返回数据
    INBED_REG_ID        : TStringOfChar ;//住院登记ID
    //以下数据为录入数据
    INBED_DT            : TStringOfChar ;//入院时间,必须录入
  end;
C/C++:
struct InBedRegInfo
{
    int PSN_ID;
    int INBED_SILL_ID;
    STRINGOFCHAR INBED_NO;
    STRINGOFCHAR INBED_EXAM;
    STRINGOFCHAR INBED_EXAM_ICD10_NO;
    STRINGOFCHAR INBED_DEPT;
    STRINGOFCHAR INBED_REG_ID;
    STRINGOFCHAR INBED_DT;
};
4.住院药品信息数据
Pascal:
  TDrugInfo = record
//以下数据为录入数据
    INBED_REG_ID    : TStringOfChar ; //住院登记ID,必须录入
    RECEIPT_DT      : TStringOfChar ; //收费时间,必须录入
    DRUG_CATALOG_ID : TStringOfChar ;//药品代码参数ID,必须录入
    DRUG_INFO       : TStringOfChar ;//药品信息,必须录入
    UNIT_PRC        : Single ;       //单价,必须录入
    SRVC_CNT        : Single ;       //数量,必须录入
    COST_PRC        : Single ;       //成本单价
    DRUG_TYP        : TStringOfChar ;//药物剂型
    DRUG_SPEC       : TStringOfChar ;//药物规格
    PRODUCE_FACTORY : TStringOfChar ;//生产厂家
    //以下数据为返回数据
    FEE_ITEM_TYP    : TStringOfChar ;//费用项目种类
    FEE_TYP         : TStringOfChar ;//费用种类
    PART_PUB_AMT    : Single ;       //部分公费金额
    PART_SELF_AMT   : Single ;       //部分自费金额
    PUB_PAY_AMT     : Single ;       //公费金额
    SELF_PAY_AMT    : Single ;       //自费金额
    SELF_PAY_PCT    : Single ;       //自费比例
    MAX_RETAIL_PRC  : Single ;       //最高零售价
    DRUG_SPC_FLAG   : Integer;       //特殊用药标志 = 1,0
  end;
C/C++:
struct DrugInfo
{
    STRINGOFCHAR  INBED_REG_ID;
    STRINGOFCHAR  RECEIPT_DT;
    STRINGOFCHAR  DRUG_CATALOG_ID;
    STRINGOFCHAR  DRUG_INFO;
    float UNIT_PRC;
    float SRVC_CNT;
    float COST_PRC;
    STRINGOFCHAR  DRUG_TYP;
    STRINGOFCHAR  DRUG_SPEC;
    STRINGOFCHAR  PRODUCE_FACTORY;
    STRINGOFCHAR  FEE_ITEM_TYP;
    STRINGOFCHAR  FEE_TYP;
    float PART_PUB_AMT;
    float PART_SELF_AMT;
    float PUB_PAY_AMT;
    float SELF_PAY_AMT;
    float SELF_PAY_PCT;
    float MAX_RETAIL_PRC;
   int DRUG_SPC_FLAG ;
};
说明:
DRUG_SPC_FLAG——部分药品一般情况下使用为自费类药品,但是在特殊疾病或特殊情况下,允许按照乙类药品收费,这类药品在药品目录中“特殊用药标志”字段标识为1。当参保人在医院住院使用这类药品时,如果符合特殊疾病或特殊情况要求,可以将录入的记录的DRUG_SPC_FLAG字段取值为1,传递给医院接口后,医保接口会自动按照乙类药品进行处理。

5.诊疗信息数据
Pascal:
  TDiagInfo = record
    //以下数据为录入数据
    INBED_REG_ID   : TStringOfChar;//住院登记ID,必须录入
    RECEIPT_DT     : TStringOfChar;//收费时间,必须录入
    DIAG_CATALOG_ID: TStringOfChar;//诊疗项目代码参数ID,必须录入
    DIAG_ITEM_NAME : TStringOfChar;//诊疗项目名称,必须录入
    UNIT_PRC       : Single ;      //单价,必须录入
    SRVC_CNT       : Single ;      //数量,必须录入
    //以下数据为返回数据
    FEE_ITEM_TYP   : TStringOfChar;//费用项目种类
    FEE_TYP        : TStringOfChar;//费用种类
    PART_PUB_AMT   : Single ;      //部分公费金额
    PART_SELF_AMT  : Single ;      //部分自费金额
    PUB_PAY_AMT    : Single ;      //公费金额
    SELF_PAY_AMT   : Single ;      //自费金额
    SELF_PAY_PCT   : Single ;      //自费比例
    MAX_RETAIL_PRC : Single ;      //最高零售价
  end;
C/C++:
struct DiagInfo
{
    STRINGOFCHAR  INBED_REG_ID;
    STRINGOFCHAR  RECEIPT_DT;
    STRINGOFCHAR  DIAG_CATALOG_ID;
    STRINGOFCHAR  DIAG_ITEM_NAME;
    float UNIT_PRC;
    float SRVC_CNT;
    STRINGOFCHAR  FEE_ITEM_TYP;
    STRINGOFCHAR  FEE_TYP;
    float PART_PUB_AMT;
    float PART_SELF_AMT;
    float PUB_PAY_AMT;
    float SELF_PAY_AMT;
    float SELF_PAY_PCT;
    float MAX_RETAIL_PRC;
};
6.住院服务设施信息数据
Pascal:
  TServiceItemInfo = record
    //以下数据为录入数据
    INBED_REG_ID    : TStringOfChar ; //住院登记ID,必须录入
    RECEIPT_DT      : TStringOfChar ; //收费时间,必须录入
    SRVC_ITEM_ID    : TStringOfChar ; //服务设施ID,必须录入
    SRVC_NAME       : TStringOfChar ; //服务设施名称,必须录入
    UNIT_PRC        : Single ;        //单价,必须录入
    SRVC_CNT        : Single ;        //数量,必须录入
    //以下数据为返回数据
    FEE_ITEM_TYP    : TStringOfChar ; //费用项目种类
    FEE_TYP         : TStringOfChar ; //费用种类
    PART_PUB_AMT    : Single ;        //部分公费金额
    PART_SELF_AMT   : Single ;        //部分自费金额
    PUB_PAY_AMT     : Single ;        //公费金额
    SELF_PAY_AMT    : Single ;        //自费金额
    SELF_PAY_PCT    : Single ;        //自费比例
    MAX_RETAIL_PRC  : Single ;        //最高零售价
  end;
C/C++:
struct ServiceItemInfo
{
    STRINGOFCHAR  INBED_REG_ID;
    STRINGOFCHAR  RECEIPT_DT;
    STRINGOFCHAR  SRVC_ITEM_ID;
    STRINGOFCHAR  SRVC_NAME;
    float UNIT_PRC;
    float SRVC_CNT;
    STRINGOFCHAR  FEE_ITEM_TYP;
    STRINGOFCHAR  FEE_TYP;
    float PART_PUB_AMT;
    float PART_SELF_AMT;
    float PUB_PAY_AMT;
    float SELF_PAY_AMT;
    float SELF_PAY_PCT;
    float MAX_RETAIL_PRC;
};
7.住院结帐单数据
Pascal:
  TInBedBillInfo = record
    //以下数据为录入数据
    INBED_REG_ID      : TStringOfChar ;//住院登记ID,必须录入
EXAM_TYP          : TStringOfChar ;//就诊类别,必须录入
    INBED_STL_TYP     : TStringOfChar ;//住院结帐方式,必须录入
    OUTBED_EXAM       : TStringOfChar ;//出院诊断
    OUTBED_EXAM_ICD10_NO: TStringOfChar;//出院诊断ICD10编码
    OUTBED_DEPT       : TStringOfChar ;//出院科室
    ILL_TRS_STS       : TStringOfChar ;//疾病转归
    INBED_DOCTOR      : TStringOfChar ;//管床医生
    OUTBED_DT         : TStringOfChar ;//出院时间,必须录入
    //以下数据为返回数据
    INBED_DAY_CNT     : integer ;      //住院天数
    FEE_STL_LOC       : TStringOfChar ;//费用结算地点
    EXAM_ADDR         : TStringOfChar;//就诊地点
    INBED_STL_BILL_ID : TStringOfChar;//住院结帐单id
    INBED_STL_BILL_NO : TStringOfChar;//住院结帐单号
    PART_PUB_AMT      : Single; //部分公费金额
    PART_SELF_AMT     : Single; //部分自费金额
    PUB_PAY_AMT       : Single; //公费金额
    SELF_PAY_AMT      : Single; //自费金额
    INBED_FUND_AMT    : Single; //住院统筹支付金额
    INBED_ACCT_AMT    : Single; //住院个账支付金额
    CASH_PAY_AMT      : Single; //现金支付金额
    HAI_INBED_SBS_AMT : Single; //补充住院补助支付金额
    HAI_INBED_AMT     : Single; //补充住院支付金额
    HAI_INBED_REPAY_AMT: Single; //补充住院再次支付金额
    HAI_INBED_HIGH_AMT: Single; //补充住院高额支付金额
    OFFICAL_HIGH_AMT  : Single; //公务员高额补助支付金额
    OFFICAL_INBED_AMT : Single; //公务员住院补助支付金额
    OFFICAL_ACCT_AMT  : Single; //公务员个帐补助支付金额
  end;
C/C++:
struct InBedBillInfo
{
    STRINGOFCHAR  INBED_REG_ID;
    STRINGOFCHAR  EXAM_TYP;
    STRINGOFCHAR  INBED_STL_TYP;
    STRINGOFCHAR  OUTBED_EXAM;
    STRINGOFCHAR  OUTBED_EXAM_ICD10_NO;
    STRINGOFCHAR  OUTBED_DEPT;
    STRINGOFCHAR  ILL_TRS_STS;
    STRINGOFCHAR  INBED_DOCTOR;
    STRINGOFCHAR  OUTBED_DT;
    STRINGOFCHAR  INBED_DAY_CNT;
    STRINGOFCHAR  FEE_STL_LOC;
    STRINGOFCHAR  EXAM_ADDR;
    STRINGOFCHAR  INBED_STL_BILL_ID;
    STRINGOFCHAR  INBED_STL_BILL_NO;
    float PART_PUB_AMT;
    float PART_SELF_AMT;
    float PUB_PAY_AMT;
    float SELF_PAY_AMT ;
    float INBED_FUND_AMT;
    float INBED_ACCT_AMT;
    float CASH_PAY_AMT;
    float HAI_INBED_SBS_AMT ;
    float HAI_INBED_AMT;
    float HAI_INBED_REPAY_AMT;
    float HAI_INBED_HIGH_AMT;
    float OFFICAL_HIGH_AMT;
    float OFFICAL_INBED_AMT;
    float OFFICAL_ACCT_AMT;
};
注意:住院结帐方式只能取以下三个常量值之一,否则将导致结算错误!

Const
//出院结帐方式
  CONST_OUTBED_TYP_CYZJ = '出院结帐';
  CONST_OUTBED_TYP_ZTJZ = '中途暂结帐';
  CONST_OUTBED_TYP_ZYJZ = '转院结帐';
  //就诊类别
  CONST_EXAM_TYP_HI = '医保';

8.门诊结帐单数据
Pascal:
  TExamBillInfo = record
    // 以下数据为录入数据
    PSN_ID           : Integer;          //医疗参保人ID号
    EXAM_TYP         : TStringOfChar;    //就诊类别
    EXAM_DEPT        : TStringOfChar;    //门诊科室
    EXAM_DOCTOR      : TStringOfChar;    //门诊医生
    //以下数据为返回数据
    FEE_STL_LOC      : TStringOfChar;    //费用结算地点
    EXAM_ADDR        : TStringOfChar;    //就诊地点
    EXAM_STL_BILL_ID : TStringOfChar;    //门诊结帐单id
    EXAM_STL_BILL_NO : TStringOfChar;    //门诊结帐单号
    PART_PUB_AMT     : Single;           //部分公费金额
    PART_SELF_AMT    : Single;           //部分自费金额
    PUB_PAY_AMT      : Single;           //公费金额
    SELF_PAY_AMT     : Single;           //自费金额
    EXAM_ACCT_AMT    : Single;           //门诊个账支付金额
    CASH_PAY_AMT     : Single;           //门诊现金支付金额
  end;
C/C++:
    int PSN_ID; 
    STRINGOFCHAR EXAM_TYP; 
    STRINGOFCHAR EXAM_DEPT; 
    STRINGOFCHAR EXAM_DOCTOR; 
    //以下数据为返回数据
    STRINGOFCHAR FEE_STL_LOC; 
    STRINGOFCHAR EXAM_ADDR; 
    STRINGOFCHAR EXAM_STL_BILL_ID;
    STRINGOFCHAR EXAM_STL_BILL_NO;
    float PART_PUB_AMT;
    float PART_SELF_AMT;
    float PUB_PAY_AMT;
    float SELF_PAY_AMT;
    float EXAM_ACCT_AMT; 
    float CASH_PAY_AMT;

(三)测试接口函数
我们提供了动态连接库的一个测试用函数接口,如果该函数调用成功,则说明其他函数的调用方式不会存在问题。
注意:所有函数调用方式采用StandCall方式。所有日期格式采用’yyyy-MM-dd’,如‘2003-09-01’。
函数定义为:
Pascal:
function CheckValid(var strNo: TStringOfChar;//字符串测试
  var Int : Integer ;  //整数测试
  var Money : Single ;  //浮点数测试
  var PsnInfo : TPersonInfo   //记录结构测试
  ) : Boolean; export; stdcall;

C/C++:
BOOLEAN (__stdcall *CheckValid)(
STRINGOFCHAR *strNo,  //字符串测试
int *hdl, //整数测试
float *f, //浮点数测试
struct PersonInfo *pinfo); //记录结构测试
通过判断返回值可以反映函数调用是否成功:
StrNo = '你输入的字符串为“(传入字符串)”'
Int = Int +1
Money = Money + 1
PsnInfo. PSN_ID = 1
PsnInfo.PSN_No = 1
PsnInfo.PSN_NAME = '人员姓名'
PsnInfo.Sex = '性别'
PsnInfo.IDCARD = '123456789012345678'
如果传入的Int 等于 1,则函数返回True,否则False

在以下的函数说明中,我们不再给出C/C++ 的定义,相关定义转换请参见语法书。
1.接口初始化
接口初始化包括了以下几个步骤:
(1)初始化并连接医院端应用服务器
函数定义:
function ConnectServer(AServerName: TStringOfChar): Boolean; export; stdcall;
函数参数:
AServerName  :应用服务器名称(或Ip)
(2)操作员登录
函数定义:
function UserLogin(AUserCode: TStringOfChar; 
 APWD: TStringOfChar  ): Boolean; export; stdcall;
函数参数:
AUserCode : 用户编码,将由社保部门提供
APWD: 用户口令,社保部门提供初始口令,操作员可以自己修改
当程序退出前,进行以下几个步骤:
(3)操作员退出
函数定义:
procedure UserLogout; export; stdcall;
(4)断开服务器
函数定义:
procedure DisConnectServer; export; stdcall;
(5)读取参保人基本信息
函数定义:
function GetPersonInfo(var APersonInfo: TPersonInfo): Boolean; export; stdcall;
函数参数:
APersonInfo :返回的参保人基本信息
说明:接口会自动根据IC卡读卡器设备状态决定是否读卡,或要求操作员输入参保人的身份证号码来录入参保人。
2.其它函数
(1)操作员修改口令
函数定义:
function ChangeUserPwd(AOldPwd,ANewPWD : TStringOfChar) : Boolean; export; stdcall;
函数参数:
AOldPwd:旧口令
ANewPWD:新口令
注意:该函数必须在操作员登录后才能调用,否则无效。
(2)获取最后一次错误的信息
函数定义:
procedure GetErrorMessage(var AErrorMsg: TStringOfChar); export; stdcall;
函数参数:
AerrorMsg : 返回的错误信息
注意:该函数必须在其他函数调用,返回false的情况下立即调用才有效。

三、 住院登记、计费、结帐接口
参保人一次住院消费的完整过程包括:住院登记、住院期间的费用录入和出院结帐三个步骤。
1.住院登记
必须对参保人进行了住院登记,才能对参保人收费和结帐。在调用住院登记函数前必须先调用 GetPersonInfo 确定参保人,然后再填写住院登记所必须的数据并调用函数。如果函数执行成功则在返回的数据结构中包含了住院登记ID,请妥善保存住院登记ID,在以后所有的住院费用操作中,系统将使用该信息作为该参保人本次住院的唯一标识。如果同一个参保人多次住院,其住院登记ID是不同的。
函数定义:
function InBedRegster(Var AInBedRegInfo : TInBedRegInfo ) : Boolean;export; stdcall;
函数参数:
AinBedRegInfo : 住院登记信息
住院收费
住院收费包括以下几个步骤:
 A、得到住院登记的信息;
 B、录入药品、诊疗、服务设施费用;
 C、提交保存费用信息;
以上三个步骤必须依次进行。
(1)得到住院登记信息
函数定义:
function GetInBedRegInfo(AInBedRegID : TStringOfChar) :Boolean ; export; stdcall;
函数参数:
AinBedRegID : 住院登记ID
(2)录入费用
录入费用包括录入药品费用、录入诊疗费用、录入服务设施费用和录入出院带药费用四个函数。这四个函数可以连续、反复调用,没有次序的要求。函数定义如下:
{- 录入药品费用}
function AddDrug(var ADrugInfo : TDrugInfo ) : Boolean; export ; stdcall;
{- 录入诊疗费用}
function AddDiag(var ADiagInfo : TDiagInfo ) : Boolean; export ; stdcall;
{- 录入服务设施费用}
function AddServiceItem(var AServiceItemInfo : TServiceItemInfo ) : Boolean; export ; stdcall;
{- 录入出院带药费用}
function AddOutBedDrug(var ADrugInfo : TDrugInfo ) : Boolean; export ; stdcall;
(3)提交保存费用
在录入费用后,必须通过该函数将费用数据提交到中心数据库,否则数据将丢失。该函数必须与“得到住院登记信息”函数配对使用,否则无效。
函数定义:
function InBedRegApplyUpdates(AInBedRegID : TStringOfChar) : Boolean; export ; stdcall;
函数参数
AinBedRegID : 住院登记ID
3.住院结帐
住院结帐包括三个步骤:
A、 进行住院费用结算;
B、 如果修改了住院结帐单的部分信息,如出院时间、结帐方式等,需要重新进行计算; 
C、 保存结帐单
  
两个函数必须配对使用。
(1)进行住院费用结算
函数定义:
function NewInBedBill(AInBedBillInfo : TInBedBillInfo) :Boolean ; export; stdcall;
函数参数:
AinBedBillInfo : 住院结帐单信息
提示:由于该函数不对数据作任何处理,所以可以通过该函数查看住院费用预结算的信息。
(2)保存住院结帐单
进行住院费用结算运算后,必须调用本函数才能保存数据。
函数定义:
function SaveInBedBill(AInBedBillInfo : TInBedBillInfo) :Boolean ; export; stdcall;
函数参数:
AinBedBillInfo : 住院结帐单信息
注意:住院结帐单信息中的住院结帐方式(INBED_STL_TYP),只能在三个常量中取。(详细见前结构定义)
(3)重新运算住院结帐单
函数定义:
function InbedBillReCalculate(var AInBedBillInfo: TInBedBillInfo): Boolean; export; stdcall;
函数参数:
AinBedBillInfo : 住院结帐单信息
注意:由于NewInBedBill缺省按照出院结帐进行计算,如果是暂结帐,修改AinBedBillInfo. INBED_STL_TYP后,必须调用本函数重新计算。

四、 普通门诊结帐单结算接口
参保人进行一次普通门诊消费的结帐过程,包括以下几个步骤:
A. 读取个人基本信息
B.新建普通门诊结帐单;
C.门诊收费;
D.门诊结帐单计算;
E.门诊结帐单的保存。
以上五个步骤必须依次进行。
1.读取个人基本信息
在新建门诊结帐单前必须调用GetPersonInfo 确定参保人。
2.新建普通门诊结帐单
门诊结帐单和住院结帐单不同,它是在参保人在一次普通门诊消费中的所有费用一次性用一张结帐单录入完毕,所以必须首先新建一张门诊结帐单。
函数定义:
function NewExamBill(var AExamBillInfo: TexamBillInfo): Boolean; export; stdcall;
函数参数
AExamBillInfo:门诊结帐单信息
3.门诊收费
与住院结帐单中录入费用明细类似,录入费用包括录入药品费用、录入诊疗费用和录入服务设施费用三个函数。这三个函数可以连续、反复调用,没有次序的要求。函数定义如下:
{- 录入药品费用}
function AddExamDrug(var AdrugInfo: TdrugInfo): Boolean; export; stdcall;
{- 录入诊疗费用}
function AddExamDiag(var AdiagInfo: TdiagInfo): Boolean; export; stdcall;
{- 录入服务设施费用}
function AddExamServiceItem(var AserviceItemInfo: TserviceItemInfo): Boolean; export; stdcall;
4.门诊结算单计算
将门诊结帐单中的各明细填写完成后,就必须对本结帐单进行计算。函数定义如下:
{- 计算门诊费用}
function ExamBillReCalculate(var AExamBillInfo: TexamBillInfo): Boolean; export; stdcall;

5.门诊结帐单保存
在门诊结帐单计算完成后必须保存以使数据存入医保数据库中。函数定义如下:
{- 保存门诊结帐单}
function SaveExamBill(var AExamBillInfo: TexamBillInfo): Boolean; export; stdcall;
注意:
1.以上的(3)(4)(5)三个步骤必须依次循环进行,即只要进行步骤(3),那么必须进行完步骤(4)才能进行(5)步骤;如果在步骤(3)后立即(5),则保存的是上次计算后的结果,并不是你重新录入(3)后的计算结果。
2.第(3)步门诊收费中的添加药品费用、诊疗费用和服务设施费用中的三个记录结构TdrugInfo、TdiagInfo和TserviceItemInfo中的字段INBED_REG_ID(住院登记ID)和RECEIPT_DT(收费时间)均填写为空或不填。
分享到:
精彩评论 2
vb_music
学分:0 LV1
2010-06-08
沙发
你好:
    你的叙述太长了,你要问什么就直接问吧!
happykid
学分:0 LV1
TA的每日心情
奋斗
2022-10-31 09:55:42
2010-08-19
板凳
函数定义为:
Pascal:
function CheckValid(var strNo: TStringOfChar;//字符串测试
  var Int : Integer ;  //整数测试
  var Money : Single ;  //浮点数测试
  var PsnInfo : TPersonInfo   //记录结构测试
  ) : Boolean; export; stdcall;

C/C++:
BOOLEAN (__stdcall *CheckValid)(
STRINGOFCHAR *strNo,  //字符串测试
int *hdl, //整数测试
float *f, //浮点数测试
struct PersonInfo *pinfo); //记录结构测试
/*
示例:
通过判断返回值可以反映函数调用是否成功:
StrNo = '你输入的字符串为“(传入字符串)”'
Int = Int +1
Money = Money + 1
PsnInfo. PSN_ID = 1
PsnInfo.PSN_No = 1
PsnInfo.PSN_NAME = '人员姓名'
PsnInfo.Sex = '性别'
PsnInfo.IDCARD = '123456789012345678'
如果传入的Int 等于 1,则函数返回True,否则False
*/

PB 中外部函数定义
function BOOLEAN  CheckValid (string inteststring,int intestlong,decimal intestdec,st_inhis inteststr) 
library "sihisinterface.dll"  alias for "CheckValid"
PB 结构定义
global type st_inhis from structure
integer psn_id
integer psn_no
string psn_name
string sex
string idcard
string psn_sts
string psn_typ
string unit_code
string unit_name
string offical_typ
string hai_typ
string acct_sts
string hi_acct_pwd
decimal{0} sill_pay_amt_total
decimal{0} sill_yr_fund_amt
decimal{0} yr_fund_amt
decimal{0} hai_yr_high_amt
decimal{0} hai_yr_inbed_amt
decimal{0} gz_cur_amt
integer yr_inbed_cnt
string card_no
end type

string ls_test_string
int ll_test_long
decimal ldc_test_dec

ls_test_string = space(100)
lst_his.PSN_NAME = space(100)
lst_his.Sex = space(100)
lst_his.IDCARD = space(100)

ll_test_long = 1
ldc_test_dec = 1

lst_his.psn_id = 11
lst_his.psn_no = 22
lst_his.psn_name = '人员姓名'
lst_his.sex = '性别'
lst_his.idcard = '123456789012345678'

if CheckValid (ls_test_string,ll_test_long,ldc_test_dec,lst_his) then
messagebox('提示!','测试结构通过!')
else
messagebox('提示!','测试结构失败!')
end if

---------------------------
pb80.exe - 应用程序错误
---------------------------
"0x04388eb3" 指令引用的 "0x00000001" 内存。该内存不能为 "read"。


要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
---------------------------
确定   取消   
---------------------------

在结构中几乎的函数都试过了,还是报错...
首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照