| 1 | IBBACHRG ;OAK/ELZ - PFSS CHARGE API ;15-MAR-2005
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**286**;21-MAR-94
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | CHARGE(IBBDFN,IBBARFN,IBBCTYPE,IBBUCID,IBBFT1,IBBPR1,IBBDG1,IBBZCL,IBBRXE,IBBORIEN,IBBPROS) ;
|
---|
| 6 | ;add transaction to charge cache
|
---|
| 7 | N IBB,IBBIEN,IBBIENS,IBBERR,FDA,J,J1,X,XX
|
---|
| 8 | N IBBCPTC,IBBCPTDT,IBBCDM,IBBSECVN,IBBTEST
|
---|
| 9 | ;required parameters
|
---|
| 10 | I ('$G(IBBDFN)!'$G(IBBARFN)!'$G(IBBUCID)!($G(IBBCTYPE)="")) D ERRMSG("MISSING DATA") Q 0
|
---|
| 11 | ;add charge record
|
---|
| 12 | L +^IBBAD(373,0):5
|
---|
| 13 | I '$T D ERRMSG("LOCK FAILURE") Q 0
|
---|
| 14 | S IBBIEN=$P(^IBBAD(373,0),U,3)+1,$P(^IBBAD(373,0),U,3)=IBBIEN
|
---|
| 15 | L -^IBBAD(373,0)
|
---|
| 16 | S ^IBBAD(373,IBBIEN,0)=IBBIEN
|
---|
| 17 | S IBBIENS=IBBIEN_","
|
---|
| 18 | S IBBERR="IBB(""DIERR"")"
|
---|
| 19 | S FDA(373,IBBIENS,.02)=IBBARFN
|
---|
| 20 | S FDA(373,IBBIENS,.03)=IBBDFN
|
---|
| 21 | S FDA(373,IBBIENS,.04)=IBBUCID
|
---|
| 22 | S FDA(373,IBBIENS,.05)=IBBCTYPE
|
---|
| 23 | S FDA(373,IBBIENS,.1)=$$NOW^XLFDT()
|
---|
| 24 | D FILE^DIE("","FDA",IBBERR)
|
---|
| 25 | ;exit on error
|
---|
| 26 | I $D(IBB("DIERR")) D ERRMSG("FILEMAN ERROR") Q 0
|
---|
| 27 | ;get service charge code
|
---|
| 28 | S IBBCDM=$G(IBBFT1(7))
|
---|
| 29 | I $G(IBBFT1(13))'=160 D
|
---|
| 30 | .S IBBCPTC=+$G(IBBPR1(3))
|
---|
| 31 | .S IBBCPTDT=+$G(IBBPR1(5)) I 'IBBCPTDT S IBBCPTDT=+$G(IBBFT1(4))
|
---|
| 32 | .S IBBCDM=$P($$GETCODE^IBBACDM(IBBCPTC,IBBCPTDT),U,1)
|
---|
| 33 | ;financial transaction
|
---|
| 34 | I $D(IBBFT1)>1 D
|
---|
| 35 | .S J=0,X="" F S J=$O(IBBFT1(J)) Q:'J S $P(X,U,J)=IBBFT1(J)
|
---|
| 36 | .S $P(X,U,2)="",$P(X,U,6)=IBBCTYPE
|
---|
| 37 | .S XX=+$G(IBBFT1(13)) S XX=$S('XX:999,$L(XX)'=3:999,1:XX)
|
---|
| 38 | .S $P(X,U,7)=XX_IBBCDM
|
---|
| 39 | .S ^IBBAD(373,IBBIEN,"FT1")=X
|
---|
| 40 | ;update PV1.50 for radiology in file #375
|
---|
| 41 | I (",105,109,115,150,151,152,421,703,")[(","_IBBFT1(13)_",") D
|
---|
| 42 | .S XX="",IBBSECVN=""
|
---|
| 43 | .I $G(IBBORIEN) S X=$T(ORACTREF^ORWPFSS) I $E(X,9)="(" D
|
---|
| 44 | ..D ORACTREF^ORWPFSS(.XX,IBBORIEN)
|
---|
| 45 | ..S IBBSECVN=$$EXTNUM^IBBAACCT(IBBDFN,XX)
|
---|
| 46 | ..I IBBSECVN'="" S $P(^IBBAA(375,IBBARFN,"PV1"),U,50)=IBBSECVN_";;;;RAD"
|
---|
| 47 | ;procedure
|
---|
| 48 | I $D(IBBPR1)>1 D
|
---|
| 49 | .I '$G(IBBPR1(5)) S IBBPR1(5)=+$G(IBBFT1(4))
|
---|
| 50 | .S X="" F J=3,5,6,16 S $P(X,U,J)=$G(IBBPR1(J))
|
---|
| 51 | .;surgery-only
|
---|
| 52 | .I $D(IBBPR1(11))>1 D
|
---|
| 53 | ..S $P(X,U,11)=$G(IBBPR1(11,1)),$P(X,U,12)=$G(IBBPR1(11,2))
|
---|
| 54 | .S ^IBBAD(373,IBBIEN,"PR1")=X
|
---|
| 55 | .I $G(IBBPR1(4))'="" S ^IBBAD(373,IBBIEN,11)=IBBPR1(4)
|
---|
| 56 | ;diagnosis
|
---|
| 57 | I $D(IBBDG1)>1 D
|
---|
| 58 | .I $G(IBBDG1(1,3))=+$G(IBBDG1(1,3)) D DX^IBBACHRG(.IBBDG1,IBBIEN)
|
---|
| 59 | ;classification
|
---|
| 60 | I $D(IBBZCL)>1 D
|
---|
| 61 | .S (J,J1)=0 F S J=$O(IBBZCL(J)) Q:'J S J1=J1+1,X=J1_U_$G(IBBZCL(J,2))_U_$G(IBBZCL(J,3)),^IBBAD(373,IBBIEN,"ZCL",J1,0)=X
|
---|
| 62 | .S ^IBBAD(373,IBBIEN,"ZCL",0)="^373.05A^"_J1_U_J1
|
---|
| 63 | ;pharmacy-only
|
---|
| 64 | I $D(IBBRXE)>1 D
|
---|
| 65 | .S J=0,X="" F S J=$O(IBBRXE(J)) Q:'J S $P(X,U,J)=IBBRXE(J)
|
---|
| 66 | .S XX=$P(^IBBAA(375,IBBARFN,"PV1"),U,50) I $P(XX,";",5)="OPP" S XX=+XX,$P(X,U,15)=XX
|
---|
| 67 | .S ^IBBAD(373,IBBIEN,"RXE")=X
|
---|
| 68 | ;prosthetics-only
|
---|
| 69 | I $D(IBBPROS)>1 D
|
---|
| 70 | .S X=$G(IBBPROS(1))_U_$G(IBBPROS(2))
|
---|
| 71 | .I X'=U S ^IBBAD(373,IBBIEN,23)=X
|
---|
| 72 | ;add department, service code, order ien, clinical event id to 0-node
|
---|
| 73 | S X=^IBBAD(373,IBBIEN,0)
|
---|
| 74 | S $P(X,U,6)=$S($G(IBBFT1(13)):IBBFT1(13),1:999),$P(X,U,7)=$G(IBBCDM),$P(X,U,8)=$G(IBBORIEN),$P(X,U,9)=$G(IBBFT1(2))
|
---|
| 75 | S ^IBBAD(373,IBBIEN,0)=X
|
---|
| 76 | ;set "AOX" xref
|
---|
| 77 | S IBBTEST="" D SAOX^IBBAADD(IBBIEN,IBBDFN,.IBBTEST)
|
---|
| 78 | I IBBTEST S $P(^IBBAD(373,IBBIEN,0),U,20)=1
|
---|
| 79 | ;
|
---|
| 80 | Q 1
|
---|
| 81 | ;
|
---|
| 82 | DX(DG1,IEN) ;file diagnosis on subfile #373.04
|
---|
| 83 | N J,IBB,IBBIEN,IBBIENS,IBBERR,FDA
|
---|
| 84 | S J=0 F S J=$O(DG1(J)) Q:'J Q:(DG1(J,3)'=+DG1(J,3)) D
|
---|
| 85 | .S IBBIEN(1)=J
|
---|
| 86 | .S IBBIENS="+1,"_IEN_","
|
---|
| 87 | .S IBBERR="IBB(""DIERR"")"
|
---|
| 88 | .S FDA(373.04,IBBIENS,.01)=J
|
---|
| 89 | .S FDA(373.04,IBBIENS,.03)=DG1(J,3)
|
---|
| 90 | .S FDA(373.04,IBBIENS,.06)=$G(DG1(J,6))
|
---|
| 91 | .D UPDATE^DIE("","FDA","IBBIEN",IBBERR)
|
---|
| 92 | Q
|
---|
| 93 | ;
|
---|
| 94 | GETCHGID() ;
|
---|
| 95 | ;get next unique charge identifier
|
---|
| 96 | N X
|
---|
| 97 | L +^IBBAS(372,1,2):5
|
---|
| 98 | Q:'$T 0
|
---|
| 99 | S X=1+$G(^IBBAS(372,1,2))
|
---|
| 100 | I X>99999999 S X=1
|
---|
| 101 | S ^IBBAS(372,1,2)=X
|
---|
| 102 | L -^IBBAS(372,1,2)
|
---|
| 103 | Q X
|
---|
| 104 | ;
|
---|
| 105 | ERRMSG(MSG) ;generate error msg if charge failure
|
---|
| 106 | N LINE,J,X
|
---|
| 107 | S LINE=0,SETLN="S LINE=LINE+1,^TMP(""PFSS CHG ERROR"",$J,LINE,0)=X"
|
---|
| 108 | I MSG="MISSING DATA" D
|
---|
| 109 | .I '$G(IBBDFN) S MSG=MSG_": DFN" Q
|
---|
| 110 | .I '$G(IBBARFN) S MSG=MSG_": PFSS Account Reference" Q
|
---|
| 111 | .I '$G(IBBUCID) S MSG=MSG_": Unique Charge ID" Q
|
---|
| 112 | .I $G(IBBCTYPE)="" S MSG=MSG_": Charge Type" Q
|
---|
| 113 | I MSG="FILEMAN ERROR" D
|
---|
| 114 | .I $D(IBB("DIERR")) S MSG="FM ERROR: "_$G(IBB("DIERR","DIERR",1,"TEXT",1))
|
---|
| 115 | I MSG="LOCK FAILURE" S MSG="Lock request failure on ^IBBAD(373,0)"
|
---|
| 116 | S X=MSG X SETLN
|
---|
| 117 | S X=" " X SETLN
|
---|
| 118 | S X="Input Parameters" X SETLN
|
---|
| 119 | S X="----------------" X SETLN
|
---|
| 120 | S X="IBBDFN="_$G(IBBDFN) X SETLN
|
---|
| 121 | S X="IBBARFN="_$G(IBBARFN) X SETLN
|
---|
| 122 | S X="IBBCTYPE="_$G(IBBCTYPE) X SETLN
|
---|
| 123 | S X="IBBUCID="_$G(IBBUCID) X SETLN
|
---|
| 124 | I $D(IBBFT1)>1 D
|
---|
| 125 | .S J=0 F S J=$O(IBBFT1(J)) Q:'J S X="IBBFT1("_J_")="_IBBFT1(J) X SETLN
|
---|
| 126 | I $D(IBBPR1)>1 D
|
---|
| 127 | .S J=0 F S J=$O(IBBPR1(J)) Q:'J I J'=11 S X="IBBPR1("_J_")="_IBBPR1(J) X SETLN
|
---|
| 128 | .I $G(IBBPR1(11,1)) S X="IBBPR1(11,1)="_IBBPR1(11,1) X SETLN
|
---|
| 129 | .I $G(IBBPR1(11,2)) S X="IBBPR1(11,2)="_IBBPR1(11,2) X SETLN
|
---|
| 130 | I $D(IBBDG1)>1 D
|
---|
| 131 | .S J=0 F S J=$O(IBBDG1(J)) Q:'J S J1=0 F S J1=$O(IBBDG1(J,J1)) Q:'J1 S X="IBBDG1("_J_","_J1_")="_IBBDG1(J,J1) X SETLN
|
---|
| 132 | I $D(IBBZCL)>1 D
|
---|
| 133 | .S J=0 F S J=$O(IBBZCL(J)) Q:'J S J1=0 F S J1=$O(IBBZCL(J,J1)) Q:'J1 S X="IBBZCL("_J_","_J1_")="_IBBZCL(J,J1) X SETLN
|
---|
| 134 | I $D(IBBRXE)>1 D
|
---|
| 135 | .S J=0 F S J=$O(IBBRXE(J)) Q:'J S X="IBBRXE("_J_")="_IBBRXE(J) X SETLN
|
---|
| 136 | I $G(IBBORIEN) S X="IBBORIEN="_IBBORIEN X SETLN
|
---|
| 137 | I $D(IBBPROS)>1 D
|
---|
| 138 | .S J=0 F S J=$O(IBBPROS(J)) Q:'J S X="IBBPROS("_J_")="_IBBPROS(J) X SETLN
|
---|
| 139 | D MAIL
|
---|
| 140 | Q
|
---|
| 141 | ;
|
---|
| 142 | MAIL ;send error message to mail group
|
---|
| 143 | N MMGROUP,IENS,XMY,XMSUB,XMDUZ,XMTEXT,XMZ
|
---|
| 144 | S XMSUB="IBB CHARGE FAILURE at "_$$NOW^XLFDT(),XMDUZ=.5
|
---|
| 145 | S MMGROUP=$P($G(^IBBAS(372,1,0)),U,6)
|
---|
| 146 | I MMGROUP D
|
---|
| 147 | .S IENS=MMGROUP_","
|
---|
| 148 | .S MMGROUP=$$GET1^DIQ(3.8,IENS,.01)
|
---|
| 149 | .S XMY("G."_MMGROUP_"@"_^XMB("NETNAME"))=""
|
---|
| 150 | S XMTEXT="^TMP(""PFSS CHG ERROR"",$J,"
|
---|
| 151 | D ^XMD
|
---|
| 152 | K ^TMP("PFSS CHG ERROR",$J)
|
---|
| 153 | Q
|
---|