[613] | 1 | IBCNEHLT ;DAOU/ALA - HL7 Process Incoming MFN Messages ; 09 Dec 2005 3:30 PM
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**184,251,271,300**;21-MAR-94
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | ;**Program Description**
|
---|
| 6 | ; This program will process incoming MFN messages and
|
---|
| 7 | ; update the appropriate tables
|
---|
| 8 | ;
|
---|
| 9 | EN ; Entry Point
|
---|
| 10 | NEW AIEN,APIEN,APP,D0,D,DESC,DQ,DR,FILE,FLN,HEDI,ID,IEN
|
---|
| 11 | NEW PEDI,SEG,STAT,HCT,NEWID,TSSN,USSN,REQSUB,NAFLG,NPFLG
|
---|
| 12 | NEW IBCNACT,IBCNADT,FSVDY,PSVDY
|
---|
| 13 | NEW BPSIEN,CMIEN,DATA,DATAAP,DATABPS,DATACM,DATE,ERROR,FIELDNO,FILENO
|
---|
| 14 | NEW IBSEG,MSG,BUFF
|
---|
| 15 | NEW X12TABLE,BADFMT
|
---|
| 16 | ;
|
---|
| 17 | ; BADFMT is true if a site with patch 300 receives an IIV message in the previous HL7 interface structure (pre-300)
|
---|
| 18 | ;
|
---|
| 19 | ; Build local table of file numbers to determine if response is IIV or ePHARM
|
---|
| 20 | F D=11:1:18,21 S X12TABLE("365.0"_D)=""
|
---|
| 21 | ;
|
---|
| 22 | ; Decide if message belongs to "E-Pharm" or "IIV"
|
---|
| 23 | S APP=""
|
---|
| 24 | S HCT=0,ERFLG=0
|
---|
| 25 | F S HCT=$O(^TMP($J,"IBCNEHLI",HCT)) Q:HCT="" D SPAR^IBCNEHLU I $G(IBSEG(1))="MFI" S FILE=$G(IBSEG(2)),FLN=$P(FILE,$E(HLECH,1),1) Q
|
---|
| 26 | I ",366.01,366.02,366.03,365.12,355.3,"[(","_FLN_",") S APP="E-PHARM"
|
---|
| 27 | I FLN=365.12 D
|
---|
| 28 | . S HCT=0,BADFMT=0
|
---|
| 29 | . F S HCT=$O(^TMP($J,"IBCNEHLI",HCT)) Q:HCT="" D Q:(APP="IIV")!BADFMT
|
---|
| 30 | .. D SPAR^IBCNEHLU
|
---|
| 31 | .. I $G(IBSEG(1))="MFE",$P($G(IBSEG(5)),$E(HLECH,1),3)'="" D Q
|
---|
| 32 | ... S BADFMT=1,APP=""
|
---|
| 33 | ... S MSG(1)="Log a Remedy Ticket for this issue."
|
---|
| 34 | ... S MSG(2)="Please include in the Remedy Ticket that the IIV payer tables may be out"
|
---|
| 35 | ... S MSG(3)="of sync with the master list and will need a new copy of the payer table"
|
---|
| 36 | ... S MSG(4)="from Austin."
|
---|
| 37 | ... D MSG^IBCNEUT5($$MGRP^IBCNEUT5(),"IIV payer tables may be out of synch with master list","MSG(")
|
---|
| 38 | .. I $G(IBSEG(1))="ZPA" S APP="IIV"
|
---|
| 39 | I $D(X12TABLE(FLN)) S APP="IIV"
|
---|
| 40 | ; If neither IIV or ePHARM then quit
|
---|
| 41 | I APP="" Q
|
---|
| 42 | ;
|
---|
| 43 | S HCT=1,NAFLG=0,NPFLG=0,D=""
|
---|
| 44 | F S HCT=$O(^TMP($J,"IBCNEHLI",HCT)) Q:HCT="" D Q:ERFLG
|
---|
| 45 | . D SPAR^IBCNEHLU
|
---|
| 46 | . S SEG=$G(IBSEG(1))
|
---|
| 47 | . ;
|
---|
| 48 | . I APP="E-PHARM" D
|
---|
| 49 | .. I SEG="MFI" D
|
---|
| 50 | ... S FILE=$G(IBSEG(2))
|
---|
| 51 | ... S FLN=$P(FILE,$E(HLECH,1),1)
|
---|
| 52 | ... ;
|
---|
| 53 | ... ; Initialize MFK Message (Application Acknowledgement) variables
|
---|
| 54 | ... ; Master File Identifier
|
---|
| 55 | ... S DATAMFK("MFI-1")=$G(IBSEG(2))
|
---|
| 56 | ... ;
|
---|
| 57 | ... ; File-Level Event Code
|
---|
| 58 | ... S DATAMFK("MFI-3")=$G(IBSEG(4))
|
---|
| 59 | .. ;
|
---|
| 60 | .. I SEG="MFE" D
|
---|
| 61 | ... I $G(FLN)="" S ERFLG=1,MSG(1)="File Number not found in MFN message" Q
|
---|
| 62 | ... I '$$VFILE^DILFD(FLN) S ERFLG=1,MSG(1)="File "_FLN_" not found in the Data Dictionary" Q
|
---|
| 63 | ... ;
|
---|
| 64 | ... ; Initialize MFK Message (Application Acknowledgement) variables
|
---|
| 65 | ... ; Record-Level Event Code
|
---|
| 66 | ... S DATAMFK("MFE-1")=$G(IBSEG(2))
|
---|
| 67 | ... ;
|
---|
| 68 | ... ; Primary Key Value
|
---|
| 69 | ... S DATAMFK("MFE-4")=$G(IBSEG(5))
|
---|
| 70 | ... ;
|
---|
| 71 | ... ; Primary Key Value Type
|
---|
| 72 | ... S DATAMFK("MFE-5")=$G(IBSEG(6))
|
---|
| 73 | ... ;
|
---|
| 74 | ... ; Transfer control to e-Pharmacy
|
---|
| 75 | ... D ^IBCNRHLT Q
|
---|
| 76 | .. ;
|
---|
| 77 | .. ; Transfer control on other segments
|
---|
| 78 | .. I ",ZCM,ZP0,ZPB,ZPL,ZPT,ZRX,"[(","_SEG_",") D ^IBCNRHLT
|
---|
| 79 | . ;
|
---|
| 80 | . ;
|
---|
| 81 | . I APP="IIV" D
|
---|
| 82 | .. I SEG="MFI" D
|
---|
| 83 | ... S FILE=$G(IBSEG(2))
|
---|
| 84 | ... S FLN=$P(FILE,$E(HLECH,1),1)
|
---|
| 85 | .. ;
|
---|
| 86 | .. I SEG="MFE" D
|
---|
| 87 | ... I $G(FLN)="" S ERFLG=1,MSG(1)="File Number not found in MFN message" Q
|
---|
| 88 | ... I '$$VFILE^DILFD(FLN) S ERFLG=1,MSG(1)="File "_FLN_" not found in the Data Dictionary" Q
|
---|
| 89 | ... ;
|
---|
| 90 | ... I FLN'=365.12 D Q
|
---|
| 91 | .... S DATA=$G(IBSEG(5))
|
---|
| 92 | .... S ID=$$DECHL7^IBCNEHL2($P(DATA,$E(HLECH,1),1)),DESC=$$DECHL7^IBCNEHL2($P(DATA,$E(HLECH,1),2))
|
---|
| 93 | .... D TFIL
|
---|
| 94 | ... ;
|
---|
| 95 | ... ; Pull the action code
|
---|
| 96 | ... S IBCNACT=$G(IBSEG(2))
|
---|
| 97 | ... ; Effective Date
|
---|
| 98 | ... S IBCNADT=$G(IBSEG(4))
|
---|
| 99 | .. ;
|
---|
| 100 | .. I SEG="ZP0" D
|
---|
| 101 | ... S ID=$$DECHL7^IBCNEHL2(IBSEG(3)),NEWID=$$DECHL7^IBCNEHL2(IBSEG(4))
|
---|
| 102 | ... S DESC=$$DECHL7^IBCNEHL2(IBSEG(5)),HEDI=$$DECHL7^IBCNEHL2(IBSEG(6)),PEDI=$$DECHL7^IBCNEHL2(IBSEG(7))
|
---|
| 103 | .. ;
|
---|
| 104 | .. I SEG="ZPA" D
|
---|
| 105 | ... S STAT=IBSEG(4),STAT=$S(STAT="Y":"Active",1:"Not Active")
|
---|
| 106 | ... S TSSN=IBSEG(5),USSN=IBSEG(6),REQSUB=IBSEG(7)
|
---|
| 107 | ... S FSVDY=IBSEG(8),PSVDY=IBSEG(9)
|
---|
| 108 | ... D PFIL
|
---|
| 109 | Q
|
---|
| 110 | ;
|
---|
| 111 | PFIL ; Payer Table Filer
|
---|
| 112 | ; Set the action:
|
---|
| 113 | ; MAD=Add, MUP=Update, MDC=Deactivate, MAC=Reactivate
|
---|
| 114 | S IBCNADT=$$FMDATE^HLFNC(IBCNADT)
|
---|
| 115 | I IBCNADT="" S IBCNADT=$$NOW^XLFDT()
|
---|
| 116 | ; If the action is MAD - Add the payer as new
|
---|
| 117 | N IBNOK,IBAPP,IBID,IBDESC,IBSTR
|
---|
| 118 | S IBNOK=0,IBAPP=($TR(APP," ")="")
|
---|
| 119 | I IBCNACT="MAD" D I IBNOK G PFILX
|
---|
| 120 | . ; Check certain required fields: Application, VA National & Payer Name
|
---|
| 121 | . ; If not populated, send MailMan message.
|
---|
| 122 | . S IBID=($TR(ID," ")=""),IBDESC=($TR(DESC," ")="")
|
---|
| 123 | . S IBNOK=IBAPP!IBID!IBDESC
|
---|
| 124 | . I 'IBNOK D MAD(DESC) Q
|
---|
| 125 | . S IBSTR="" I IBAPP S IBSTR="Application"
|
---|
| 126 | . I IBID S:IBSTR]"" IBSTR=IBSTR_", " S IBSTR=IBSTR_"VA National"
|
---|
| 127 | . I IBDESC S:IBSTR]"" IBSTR=IBSTR_", " S IBSTR=IBSTR_"Payer Name"
|
---|
| 128 | . S MSG(1)="MAD action received. "_IBSTR_" unknown."
|
---|
| 129 | I IBCNACT'="MAD" D FND
|
---|
| 130 | N IBCNTYPE
|
---|
| 131 | I IEN<1!IBAPP D G PFILX
|
---|
| 132 | . S IBCNTYPE=$S(IBCNACT="MAD":"Add",IBCNACT="MUP":"Update",IBCNACT="MDC":"Deactivate",IBCNACT="MAC":"Reactivate",1:"Unknown")
|
---|
| 133 | . S MSG(1)=IBCNTYPE_" ("_IBCNACT_") action received. Payer and/or Application may be unknown."
|
---|
| 134 | . S MSG(2)=""
|
---|
| 135 | . S MSG(3)="VA National : "_ID
|
---|
| 136 | . S MSG(4)="Payer Name : "_DESC
|
---|
| 137 | . S MSG(5)="Application : "_APP
|
---|
| 138 | . S MSG(6)=""
|
---|
| 139 | . S MSG(7)="Log a Remedy Ticket for this issue."
|
---|
| 140 | . S MSG(8)=""
|
---|
| 141 | . S MSG(9)="Please include in the Remedy Ticket that VISTA did not receive the required"
|
---|
| 142 | . S MSG(10)="information or the accurate information to add/update this Payer."
|
---|
| 143 | . D MSG^IBCNEUT5($$MGRP^IBCNEUT5(),"IIV payer tables may be out of synch with master list","MSG(")
|
---|
| 144 | ;
|
---|
| 145 | S DESC=$E(DESC,1,80) ;restriction of the field in the DD
|
---|
| 146 | S DIC=$$ROOT^DILFD(FLN)
|
---|
| 147 | S DR=".01///^S X=DESC;.02////^S X=NEWID;.05////^S X=PEDI;.06////^S X=HEDI"
|
---|
| 148 | ;
|
---|
| 149 | ; If new payer, add the Date/Time created
|
---|
| 150 | I NPFLG S DR=DR_";.04///^S X=$$NOW^XLFDT()"
|
---|
| 151 | S DIE=DIC,DA=IEN D ^DIE
|
---|
| 152 | ;
|
---|
| 153 | ; Check for application
|
---|
| 154 | S DIC="^IBE(365.13,",DIC(0)="X",X=APP D ^DIC
|
---|
| 155 | S AIEN=+Y I AIEN<1 D
|
---|
| 156 | . S DLAYGO=365.13,DIC(0)="L",DIC("P")=DLAYGO
|
---|
| 157 | . S DIE=DIC,X=APP
|
---|
| 158 | . K DD,DO
|
---|
| 159 | . D FILE^DICN
|
---|
| 160 | . K DO
|
---|
| 161 | . S AIEN=+Y
|
---|
| 162 | ;
|
---|
| 163 | S APIEN=$O(^IBE(365.12,IEN,1,"B",AIEN,""))
|
---|
| 164 | I APIEN="" D
|
---|
| 165 | . S DLAYGO=365.121,DIC(0)="L",DIC("P")=DLAYGO,DA(1)=IEN,X=AIEN
|
---|
| 166 | . S DIC="^IBE(365.12,"_DA(1)_",1,",DIE=DIC
|
---|
| 167 | . I '$D(^IBE(365.12,IEN,1,0)) S ^IBE(365.12,IEN,1,0)="^365.121P^^"
|
---|
| 168 | . K DD,DO
|
---|
| 169 | . D FILE^DICN
|
---|
| 170 | . K DO
|
---|
| 171 | . S APIEN=+Y,NAFLG=1
|
---|
| 172 | ;
|
---|
| 173 | I $G(STAT)="" S STAT=$P(^IBE(365.12,IEN,1,APIEN,0),U,2)
|
---|
| 174 | ;
|
---|
| 175 | S DA(1)=IEN,DA=APIEN,DIC="^IBE(365.12,"_DA(1)_",1,",DR=""
|
---|
| 176 | ;
|
---|
| 177 | I IBCNACT="MDC" S DR=DR_".11///^S X=1;.12////^S X=IBCNADT;",STAT=0
|
---|
| 178 | I IBCNACT="MAC" S DR=DR_".11///^S X=0;.12///@;"
|
---|
| 179 | S DR=DR_".02///^S X=STAT;.06///^S X=$$NOW^XLFDT()"
|
---|
| 180 | I IBCNACT'="MDC" S DR=DR_";.08///^S X=REQSUB;.09///^S X=USSN;.1///^S X=TSSN;.14///^S X=FSVDY;.15///^S X=PSVDY"
|
---|
| 181 | ;
|
---|
| 182 | ; If new application, add the Date/Time created
|
---|
| 183 | I NAFLG S DR=DR_";.13///^S X=$$NOW^XLFDT()"
|
---|
| 184 | ;
|
---|
| 185 | S DIE=DIC D ^DIE
|
---|
| 186 | I IBCNACT="MDC" D MDC Q
|
---|
| 187 | PFILX ;
|
---|
| 188 | Q
|
---|
| 189 | ;
|
---|
| 190 | TFIL ; Non Payer Tables Filer
|
---|
| 191 | NEW DIC,DIE,X,DA,DLAYGO,Y,DR,IEN
|
---|
| 192 | S DIC(0)="X",X=ID,DIC=$$ROOT^DILFD(FLN)
|
---|
| 193 | D ^DIC S IEN=+Y
|
---|
| 194 | ;
|
---|
| 195 | S DESC=$E(DESC,1,80) ;restriction of the field in the DD
|
---|
| 196 | ;
|
---|
| 197 | ; If no matching entry found, add it to table
|
---|
| 198 | I IEN<1 D
|
---|
| 199 | . S DLAYGO=FLN,DIC(0)="L",DIC("P")=DLAYGO,DIE=DIC
|
---|
| 200 | . K DD,DO
|
---|
| 201 | . D FILE^DICN S IEN=+Y
|
---|
| 202 | . K DO
|
---|
| 203 | ;
|
---|
| 204 | S DR=".02///^S X=DESC",DA=IEN,DIE=DIC D ^DIE
|
---|
| 205 | Q
|
---|
| 206 | ;
|
---|
| 207 | MAD(X) ; Add an entry
|
---|
| 208 | D FND
|
---|
| 209 | I IEN>0 G MADX
|
---|
| 210 | NEW DIC,DIE,DA,DLAYGO,Y,DR
|
---|
| 211 | S DIC=$$ROOT^DILFD(FLN)
|
---|
| 212 | S DLAYGO=FLN,DIC(0)="L",DIC("P")=DLAYGO,DIE=DIC
|
---|
| 213 | K DD,DO
|
---|
| 214 | D FILE^DICN
|
---|
| 215 | K DO
|
---|
| 216 | S IEN=+Y,NPFLG=1
|
---|
| 217 | MADX ;
|
---|
| 218 | Q
|
---|
| 219 | ;
|
---|
| 220 | FND ; Find an existing Payer entry
|
---|
| 221 | NEW DIC,DIE,X,DA,DLAYGO,Y,DR
|
---|
| 222 | S X=ID,DIC(0)="X",D="C",DIC=$$ROOT^DILFD(FLN)
|
---|
| 223 | ;
|
---|
| 224 | ; Do a lookup with the "C" cross-reference
|
---|
| 225 | D IX^DIC
|
---|
| 226 | S IEN=+Y
|
---|
| 227 | Q
|
---|
| 228 | ;
|
---|
| 229 | MDC ; Check for active transmissions and cancel
|
---|
| 230 | NEW STA,HIEN,RIEN,TQIEN
|
---|
| 231 | F STA=1,2,4,6 S TQIEN="" D
|
---|
| 232 | . F S TQIEN=$O(^IBCN(365.1,"AC",STA,TQIEN)) Q:TQIEN="" D
|
---|
| 233 | .. ;
|
---|
| 234 | .. ; If the record doesn't match the payer, quit
|
---|
| 235 | .. I $P(^IBCN(365.1,TQIEN,0),U,3)'=IEN Q
|
---|
| 236 | .. ;
|
---|
| 237 | .. ; Set the status to 'Cancelled'
|
---|
| 238 | .. D SST^IBCNEUT2(TQIEN,7)
|
---|
| 239 | .. ;
|
---|
| 240 | .. ; If a buffer entry, set to ! (bang)
|
---|
| 241 | .. S BUFF=$P(^IBCN(365.1,TQIEN,0),U,5)
|
---|
| 242 | .. I BUFF'="" D BUFF^IBCNEUT2(BUFF,17)
|
---|
| 243 | .. ;
|
---|
| 244 | .. ; Change any responses status also
|
---|
| 245 | .. S HIEN=0 F S HIEN=$O(^IBCN(365.1,TQIEN,2,HIEN)) Q:'HIEN D
|
---|
| 246 | ... S RIEN=$P(^IBCN(365.1,TQIEN,2,HIEN,0),U,3)
|
---|
| 247 | ... ; If the Response status is 'Response Received', don't change it
|
---|
| 248 | ... I $P(^IBCN(365,RIEN,0),U,6)=3 Q
|
---|
| 249 | ... D RSP^IBCNEUT2(RIEN,7)
|
---|
| 250 | Q
|
---|