| [613] | 1 | IBNCPLOG ;BHAM ISC/SS - IB ECME EVNT REPORT ;22-MAR-2006 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**342,339,363**;21-MAR-94;Build 35 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ;store data related to the IB calls made by ECME package in the file #366.14 | 
|---|
|  | 6 | ;input: | 
|---|
|  | 7 | ;.IBIBD - (by referrence) IBD array with parameter sent to IB by ECME | 
|---|
|  | 8 | ;DFN patient's ien | 
|---|
|  | 9 | ;IBPROC - type of event. i.e. content of CALL such as BILL, REJECT and so on | 
|---|
|  | 10 | ;IBRESULT - (optional) result of the event processing, format: return_code^message | 
|---|
|  | 11 | ;IBJOB - (optional) job, default = $J | 
|---|
|  | 12 | ;IBDTTM - (optional) datetime, default = "NOW" | 
|---|
|  | 13 | ;IBUSR - (optional) user ID, default = DUZ | 
|---|
|  | 14 | ;output: | 
|---|
|  | 15 | ;none | 
|---|
|  | 16 | LOG(IBIBD,DFN,IBPROC,IBRESULT,IBJOB,IBDTTM,IBUSR) ;Store the data | 
|---|
|  | 17 | N NDX,Z,REF,IBDATE,IBDTIEN,IBEVNIEN,IBIBDTYP,IBRETV | 
|---|
|  | 18 | S IBRESULT=$G(IBRESULT) | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | I '$G(IBJOB) S IBJOB=$J | 
|---|
|  | 21 | I '$G(IBDTTM) S IBDTTM=$$NOW^XLFDT() | 
|---|
|  | 22 | I '$G(IBUSR) S IBUSR=+DUZ | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | S IBDATE=DT | 
|---|
|  | 25 | S IBDTIEN=+$O(^IBCNR(366.14,"B",IBDATE,0)) | 
|---|
|  | 26 | L +^IBCNR(366.14):30 E  Q | 
|---|
|  | 27 | I IBDTIEN=0 S IBDTIEN=+$$ADDDATE(IBDATE) | 
|---|
|  | 28 | ;create an event | 
|---|
|  | 29 | S IBEVNIEN=$$NEWEVENT(IBDTIEN,IBPROC) | 
|---|
|  | 30 | L -^IBCNR(366.14) | 
|---|
|  | 31 | I IBEVNIEN=0 W !,"New event creation Error : LOG^IBNCPLOG",! Q | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | I +$$FILLFLDS^IBNCPUT1(366.141,".03",IBEVNIEN_","_IBDTIEN,DFN) ;DFN | 
|---|
|  | 34 | I +$$FILLFLDS^IBNCPUT1(366.141,".04",IBEVNIEN_","_IBDTIEN,IBJOB) ;JOB | 
|---|
|  | 35 | I +$$FILLFLDS^IBNCPUT1(366.141,".05",IBEVNIEN_","_IBDTIEN,IBDTTM) ;DATETIME | 
|---|
|  | 36 | I +$$FILLFLDS^IBNCPUT1(366.141,".06",IBEVNIEN_","_IBDTIEN,DUZ) ;USER | 
|---|
|  | 37 | I IBRESULT'="" D | 
|---|
|  | 38 | . S IBRETV=+$$FILLFLDS^IBNCPUT1(366.141,".07",IBEVNIEN_","_IBDTIEN,+IBRESULT) ;RESULT | 
|---|
|  | 39 | . S IBRETV=+$$FILLFLDS^IBNCPUT1(366.141,".08",IBEVNIEN_","_IBDTIEN,$P(IBRESULT,U,2)) ;RESULT MESSAGE | 
|---|
|  | 40 | ;store IBIBD array | 
|---|
|  | 41 | S IBIBDTYP="" | 
|---|
|  | 42 | F  S IBIBDTYP=$O(IBIBD(IBIBDTYP)) Q:IBIBDTYP=""  D | 
|---|
|  | 43 | . D IBD(IBDTIEN,IBEVNIEN,IBIBDTYP,$G(IBIBD(IBIBDTYP)),.IBIBD) | 
|---|
|  | 44 | ;store "INS" node of IBIBD array | 
|---|
|  | 45 | I $D(IBIBD("INS")) I $$INS(.IBIBD,IBDTIEN,IBEVNIEN) | 
|---|
|  | 46 | Q | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | ;store IBD array data | 
|---|
|  | 49 | ;IBDTIEN -  ien on top [DATE] level | 
|---|
|  | 50 | ;IBRECNO - ien in [EVENTS] multiple | 
|---|
|  | 51 | ;IBIBDTYP - type subscript in IBD array (BILL, PAID, RESPONSE, etc) | 
|---|
|  | 52 | ;IBVAL - value to store | 
|---|
|  | 53 | ;IBIBD - array with data passed by reference (for efficiency) | 
|---|
|  | 54 | IBD(IBDTIEN,IBRECNO,IBIBDTYP,IBVAL,IBIBD) ; | 
|---|
|  | 55 | N IBFLDNO | 
|---|
|  | 56 | ;W !," - ",IBRECNO," ",IBIBDTYP," = ",IBVAL | 
|---|
|  | 57 | ;free text like "WEBMD: PAID" | 
|---|
|  | 58 | I IBIBDTYP="AUTH #" S IBFLDNO=".11",IBVAL=$E(IBVAL,1,30) G EDITIBD | 
|---|
|  | 59 | ;free text like "0504597;3051229" | 
|---|
|  | 60 | I IBIBDTYP="BCID" S IBFLDNO=".12" G EDITIBD | 
|---|
|  | 61 | ;7 digits ECME number - identifier (stored as a text - might have leading zeroes) | 
|---|
|  | 62 | I IBIBDTYP="CLAIMID" S IBFLDNO=".13" G EDITIBD | 
|---|
|  | 63 | ;pointer to file #2 | 
|---|
|  | 64 | I IBIBDTYP="DFN" S IBFLDNO=".14" G EDITIBD | 
|---|
|  | 65 | ;pointer to file #40.8 | 
|---|
|  | 66 | I IBIBDTYP="DIVISION" S IBFLDNO=".15" G EDITIBD | 
|---|
|  | 67 | ;free text | 
|---|
|  | 68 | I IBIBDTYP="RESPONSE" S IBFLDNO=".16",IBVAL=$E(IBVAL,1,20) G EDITIBD | 
|---|
|  | 69 | ;free text | 
|---|
|  | 70 | I IBIBDTYP="REVERSAL REASON" S IBFLDNO=".17",IBVAL=$E(IBVAL,1,40) G EDITIBD | 
|---|
|  | 71 | ;1 digit number | 
|---|
|  | 72 | I IBIBDTYP="RTS-DEL" S IBFLDNO=".18" G EDITIBD | 
|---|
|  | 73 | ;free text | 
|---|
|  | 74 | I IBIBDTYP="STATUS" S IBFLDNO=".19",IBVAL=$E(IBVAL,1,20) G EDITIBD | 
|---|
|  | 75 | ;Prescription number as a text, might have alpha characters (external value, this is not IEN) | 
|---|
|  | 76 | I IBIBDTYP="RX NO" S IBFLDNO=".202",IBVAL=$E(IBVAL,1,20) G EDITIBD | 
|---|
|  | 77 | ;0 - original, 1,2,3,... - refill number | 
|---|
|  | 78 | I IBIBDTYP="FILL NUMBER" S IBFLDNO=".203" G EDITIBD | 
|---|
|  | 79 | ;internal identifier number for a DRUG | 
|---|
|  | 80 | I IBIBDTYP="DRUG" S IBFLDNO=".204" G EDITIBD | 
|---|
|  | 81 | I IBIBDTYP="NDC" S IBFLDNO=".205" G EDITIBD | 
|---|
|  | 82 | I IBIBDTYP="FILL DATE" S IBFLDNO=".206" G EDITIBD | 
|---|
|  | 83 | I IBIBDTYP="RELEASE DATE" S IBFLDNO=".207" G EDITIBD | 
|---|
|  | 84 | I IBIBDTYP="QTY" S IBFLDNO=".208" G EDITIBD | 
|---|
|  | 85 | I IBIBDTYP="DAYS SUPPLY" S IBFLDNO=".209" G EDITIBD | 
|---|
|  | 86 | I IBIBDTYP="DEA" S IBFLDNO=".21" G EDITIBD | 
|---|
|  | 87 | I IBIBDTYP="FILLED BY" S IBFLDNO=".211" G EDITIBD | 
|---|
|  | 88 | ; for environmental indicators: | 
|---|
|  | 89 | ; if IBIBD("SC/EI OVR")=1 - the user overrides any answers (3) | 
|---|
|  | 90 | ; if $G(IBIBD("SC/EI NO ANSW")) contains the IBIBDTYP - this question was not answered (2) | 
|---|
|  | 91 | ; otherwise - use whatever in the IBVAL (0 - NO, 1 -YES) | 
|---|
|  | 92 | I IBIBDTYP="AO" S IBFLDNO=".401",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 93 | I IBIBDTYP="CV" S IBFLDNO=".402",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 94 | I IBIBDTYP="SWA" S IBFLDNO=".403",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 95 | I IBIBDTYP="IR" S IBFLDNO=".404",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 96 | I IBIBDTYP="MST" S IBFLDNO=".405",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 97 | I IBIBDTYP="HNC" S IBFLDNO=".406",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 98 | I IBIBDTYP="SC" S IBFLDNO=".407",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 99 | I IBIBDTYP="SHAD" S IBFLDNO=".408",IBVAL=$S($G(IBIBD("SC/EI OVR"))=1:3,(","_$G(IBIBD("SC/EI NO ANSW"))_",")[(","_IBIBDTYP_","):2,1:IBVAL) G EDITIBD | 
|---|
|  | 100 | I IBIBDTYP="BILL" S IBFLDNO=".301" G EDITIBD | 
|---|
|  | 101 | I IBIBDTYP="BILLED" S IBFLDNO=".302" G EDITIBD | 
|---|
|  | 102 | I IBIBDTYP="PLAN" S IBFLDNO=".303" G EDITIBD | 
|---|
|  | 103 | I IBIBDTYP="COST" S IBFLDNO=".304" G EDITIBD | 
|---|
|  | 104 | I IBIBDTYP="PAID" S IBFLDNO=".305" G EDITIBD | 
|---|
|  | 105 | I IBIBDTYP="CLOSE COMMENT" S IBFLDNO=".306" G EDITIBD | 
|---|
|  | 106 | I IBIBDTYP="REOPEN COMMENT" S IBFLDNO=".306" G EDITIBD | 
|---|
|  | 107 | I IBIBDTYP="CLOSE REASON" S IBFLDNO=".307" G EDITIBD | 
|---|
|  | 108 | I IBIBDTYP="DROP TO PAPER" S IBFLDNO=".308" G EDITIBD | 
|---|
|  | 109 | I IBIBDTYP="RELEASE COPAY" S IBFLDNO=".309" G EDITIBD | 
|---|
|  | 110 | I IBIBDTYP="USER" S IBFLDNO=".31" G EDITIBD | 
|---|
|  | 111 | I IBIBDTYP="PRESCRIPTION" S IBFLDNO=".201" G EDITIBD | 
|---|
|  | 112 | I IBIBDTYP="IEN" S IBFLDNO=".212" G EDITIBD | 
|---|
|  | 113 | I IBIBDTYP="EPHARM" S IBFLDNO=".09" G EDITIBD | 
|---|
|  | 114 | Q 0 | 
|---|
|  | 115 | EDITIBD ; | 
|---|
|  | 116 | Q +$$FILLFLDS^IBNCPUT1(366.141,IBFLDNO,IBRECNO_","_IBDTIEN,IBVAL) | 
|---|
|  | 117 | ;------ | 
|---|
|  | 118 | ;to store IBD("INS") array data | 
|---|
|  | 119 | ;input: | 
|---|
|  | 120 | ;IBDARR - IBD array by reference | 
|---|
|  | 121 | ;IBDTIEN -  ien on top [DATE] level | 
|---|
|  | 122 | ;IBRECNO - ien in [EVENTS] multiple | 
|---|
|  | 123 | ;output: | 
|---|
|  | 124 | ; record number if success | 
|---|
|  | 125 | ; 0 if failure | 
|---|
|  | 126 | INS(IBDARR,IBDTIEN,IBRECNO) ; | 
|---|
|  | 127 | N IBSET1,IBSET2,IBSET3,IBFLDNO,IBINSNO,RECNO,IBVAL | 
|---|
|  | 128 | S IBINSNO=0 | 
|---|
|  | 129 | F  S IBINSNO=$O(IBDARR("INS",IBINSNO)) Q:+IBINSNO=0  D | 
|---|
|  | 130 | . S IBSET1=$G(IBDARR("INS",IBINSNO,1)) | 
|---|
|  | 131 | . S IBSET2=$G(IBDARR("INS",IBINSNO,2)) | 
|---|
|  | 132 | . S IBSET3=$G(IBDARR("INS",IBINSNO,3)) | 
|---|
|  | 133 | . S RECNO=$$ADDINS(IBDTIEN,IBRECNO) | 
|---|
|  | 134 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.02,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,1)) | 
|---|
|  | 135 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.03,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,2)) | 
|---|
|  | 136 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.04,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,3)) | 
|---|
|  | 137 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.05,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,4)) | 
|---|
|  | 138 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.06,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,5)) | 
|---|
|  | 139 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.07,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,6)) | 
|---|
|  | 140 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.08,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,7)) | 
|---|
|  | 141 | . ; | 
|---|
|  | 142 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.101,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,8)) | 
|---|
|  | 143 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.102,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,9)) | 
|---|
|  | 144 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.103,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,10)) | 
|---|
|  | 145 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.104,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,11)) | 
|---|
|  | 146 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.105,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,12)) | 
|---|
|  | 147 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.106,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,13)) | 
|---|
|  | 148 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.107,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET1,U,14)) | 
|---|
|  | 149 | . ; | 
|---|
|  | 150 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.201,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET2,U,1)) | 
|---|
|  | 151 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.202,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET2,U,2)) | 
|---|
|  | 152 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.203,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET2,U,3)) | 
|---|
|  | 153 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.204,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET2,U,4)) | 
|---|
|  | 154 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.205,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET2,U,5)) | 
|---|
|  | 155 | . ; | 
|---|
|  | 156 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.301,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET3,U,1)) | 
|---|
|  | 157 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.302,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET3,U,2)) | 
|---|
|  | 158 | . I +$$FILLFLDS^IBNCPUT1(366.1412,.303,RECNO_","_IBRECNO_","_IBDTIEN,$P(IBSET3,U,3)) | 
|---|
|  | 159 | Q RECNO | 
|---|
|  | 160 | ;create top level entry in #366.14 | 
|---|
|  | 161 | ;input: | 
|---|
|  | 162 | ; IBDATE - date in FileMan format | 
|---|
|  | 163 | ;output | 
|---|
|  | 164 | ; returns ien created | 
|---|
|  | 165 | ADDDATE(IBDATE) ; | 
|---|
|  | 166 | N IBIEN | 
|---|
|  | 167 | S IBIEN=+$O(^IBCNR(366.14,"B",IBDATE,0)) | 
|---|
|  | 168 | I IBIEN>0 Q IBIEN | 
|---|
|  | 169 | I $$INSITEM^IBNCPUT1(366.14,"",IBDATE,"") | 
|---|
|  | 170 | Q +$O(^IBCNR(366.14,"B",IBDATE,0)) | 
|---|
|  | 171 | ; | 
|---|
|  | 172 | ;create EVENT entry in #366.14 | 
|---|
|  | 173 | ;input: | 
|---|
|  | 174 | ;IBIEN - ien on top [DATE] level | 
|---|
|  | 175 | ;EVNTTYPE event type (value for .01) | 
|---|
|  | 176 | ;returns ien for the event | 
|---|
|  | 177 | ;or 0 if failed | 
|---|
|  | 178 | NEWEVENT(IBIEN,EVNTTYPE) ; | 
|---|
|  | 179 | N EVNTRECN | 
|---|
|  | 180 | S EVNTRECN=$$INSITEM^IBNCPUT1(366.141,IBIEN,$$EXT2INT^IBNCPUT1(EVNTTYPE),"","") | 
|---|
|  | 181 | I EVNTRECN>0 Q EVNTRECN | 
|---|
|  | 182 | Q 0 | 
|---|
|  | 183 | ; | 
|---|
|  | 184 | ;add insurance node | 
|---|
|  | 185 | ;IBDTIEN - ien on top [DATE] level | 
|---|
|  | 186 | ;IBEVIEN - ien in [EVENTS] multiple | 
|---|
|  | 187 | ;returns : | 
|---|
|  | 188 | ; new ien in INSURANCE multiple | 
|---|
|  | 189 | ADDINS(IBDTIEN,IBEVIEN) ; | 
|---|
|  | 190 | N IBX,IBX2 | 
|---|
|  | 191 | F IBX=1:1:99999 I '$D(^IBCNR(366.14,IBDTIEN,1,IBEVIEN,5,IBX)) D  Q | 
|---|
|  | 192 | . S IBX2=$$INSITEM^IBNCPUT1(366.1412,IBEVIEN_","_IBDTIEN,IBX,IBX) | 
|---|
|  | 193 | Q +$O(^IBCNR(366.14,IBDTIEN,1,IBEVIEN,5,"B",IBX,0)) | 
|---|
|  | 194 | ; | 
|---|