| [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
 | 
|---|