| 1 | IBCNEDEQ ;DAOU/ALA - Process Transactions continued ;21-AUG-2002
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**184,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 contains some subroutines for processing a transmission
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 | HLER ;  HL7 Creation error message
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;  Called from IBCNEDEP
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ;  Parameters
 | 
|---|
| 13 |  ;    HLRESLT = Error from GENERATE^HLMA call
 | 
|---|
| 14 |  ;    DFN = Patient IEN
 | 
|---|
| 15 |  ;    PAYR = Payer IEN
 | 
|---|
| 16 |  ;    MGRP = Mail group
 | 
|---|
| 17 |  ;    XMSUB = Subject line
 | 
|---|
| 18 |  ;    MSG = Message array
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  S HLRESLT="Error - "_$P(HLRESLT,U,2,99)
 | 
|---|
| 21 |  S MSG(1)=HLRESLT
 | 
|---|
| 22 |  S MSG(2)="occurred when trying to create the outgoing HL7 message for"
 | 
|---|
| 23 |  S MSG(3)="Patient: "_$P($G(^DPT(DFN,0)),U,1)_$$SSN(DFN)_" and Payer: "_$P($G(^IBE(365.12,PAYR,0)),U,1)_"."
 | 
|---|
| 24 |  S MSG(4)="Please log a NOIS for this problem."
 | 
|---|
| 25 |  D TXT^IBCNEUT7("MSG")
 | 
|---|
| 26 |  S XMSUB="IIV HL7 Creation Error"
 | 
|---|
| 27 |  D MSG^IBCNEUT5(MGRP,XMSUB,"MSG(")
 | 
|---|
| 28 |  K XMSUB,MSG,HLRESLT
 | 
|---|
| 29 |  Q
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 | CERR ;  Communication Error Mail Message - No Retries defined
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  ;  Called from IBCNEDEP
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  ;  Parameters
 | 
|---|
| 36 |  ;    DFN = Patient IEN
 | 
|---|
| 37 |  ;    PAYR = Payer IEN
 | 
|---|
| 38 |  ;    FMSG = Failure message flag
 | 
|---|
| 39 |  ;    MGRP = Mail group
 | 
|---|
| 40 |  ;    XMSUB = Subject line
 | 
|---|
| 41 |  ;    MSG = Message array
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  I 'FMSG G CERRQ
 | 
|---|
| 44 |  S XMSUB="IIV Communication Error"
 | 
|---|
| 45 |  S MSG(1)="VistA was unable to electronically confirm insurance for"
 | 
|---|
| 46 |  S MSG(2)="Patient: "_$P($G(^DPT(DFN,0)),U)_$$SSN(DFN)_" and Payer: "_$P($G(^IBE(365.12,PAYR,0)),U)_"."
 | 
|---|
| 47 |  S MSG(3)="A single attempt was made to electronically confirm the insurance"
 | 
|---|
| 48 |  S MSG(4)="with this payer."
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  D TXT^IBCNEUT7("MSG")
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  D MSG^IBCNEUT5(MGRP,XMSUB,"MSG(")
 | 
|---|
| 53 |  K MSG,XMSUB
 | 
|---|
| 54 | CERRQ Q
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | CERE ;  Communication Error Mail Message - Exceeds Retries
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ;  Called from IBCNEDEP
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  ;  Parameters
 | 
|---|
| 61 |  ;    DFN = Patient IEN
 | 
|---|
| 62 |  ;    PAYR = Payer IEN
 | 
|---|
| 63 |  ;    FMSG = Failure message flag
 | 
|---|
| 64 |  ;    MGRP = Mail group
 | 
|---|
| 65 |  ;    XMSUB = Subject line
 | 
|---|
| 66 |  ;    MSG = Message array
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  I 'FMSG G CEREQ
 | 
|---|
| 69 |  S XMSUB="IIV Communication Error"
 | 
|---|
| 70 |  S MSG(1)="VistA was unable to electronically confirm insurance for"
 | 
|---|
| 71 |  S MSG(2)="Patient: "_$P($G(^DPT(DFN,0)),U)_$$SSN(DFN)_" and Payer: "_$P($G(^IBE(365.12,PAYR,0)),U)_"."
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  D TXT^IBCNEUT7("MSG")
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  D MSG^IBCNEUT5(MGRP,XMSUB,"MSG(")
 | 
|---|
| 76 |  K MSG,XMSUB
 | 
|---|
| 77 | CEREQ Q
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | SUB ;  Create HL7 subrecord in TQ file
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  ;  Called from tag SCC within this routine
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ;  Input Parameters
 | 
|---|
| 84 |  ;    IEN = the transmission IEN
 | 
|---|
| 85 |  ;    RSIEN = the response IEN
 | 
|---|
| 86 |  ;    MDTM = the date/time message was created
 | 
|---|
| 87 |  ;    MSGID = the HL7 message ID
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  NEW DIC,DIE,X,DA,DLAYGO,Y
 | 
|---|
| 90 |  S DIC="^IBCN(365.1,"_IEN_",2,",DIE=DIC,X=MDTM,DA(1)=IEN
 | 
|---|
| 91 |  S DLAYGO=365.16,DIC(0)="L",DIC("P")=DLAYGO
 | 
|---|
| 92 |  I '$D(^IBCN(365.1,IEN,2,0)) S ^IBCN(365.1,IEN,2,0)="^365.16D^^"
 | 
|---|
| 93 |  K DD,DO
 | 
|---|
| 94 |  D FILE^DICN
 | 
|---|
| 95 |  K DO
 | 
|---|
| 96 |  S HIEN=+Y
 | 
|---|
| 97 |  S DR=".02////^S X=MSGID;.03////^S X=RSIEN" D ^DIE
 | 
|---|
| 98 |  S DA=HIEN D ^DIE
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  K HIEN,RSIEN,DR,MDTM
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | RESP ;  Create Response Record
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  ;  Called from IBCNEHL3 tag SCC within this routine
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ;  Input Parameters
 | 
|---|
| 108 |  ;    MSGID = Message Control ID (required)
 | 
|---|
| 109 |  ;    MDTM = Message date/time created (optional)
 | 
|---|
| 110 |  ;    DFN = Patient IEN (optional)
 | 
|---|
| 111 |  ;    PAYR = Payer IEN (optional)
 | 
|---|
| 112 |  ;    BUFF = Buffer IEN (optional)
 | 
|---|
| 113 |  ;    IEN = Transmission IEN (optional)
 | 
|---|
| 114 |  ;    RSTYPE = Response Type (O=Original, U=Unsolicited)
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  NEW DIC,DIE,X,DA,DLAYGO,Y,RARRAY
 | 
|---|
| 117 |  S DIC="^IBCN(365,",X=MSGID,DLAYGO=365,DIC(0)="L",DIC("P")=DLAYGO
 | 
|---|
| 118 |  K DD,DO
 | 
|---|
| 119 |  D FILE^DICN
 | 
|---|
| 120 |  K DO
 | 
|---|
| 121 |  S RSIEN=+Y
 | 
|---|
| 122 |  S RARRAY(365,RSIEN_",",.02)=$G(DFN),RARRAY(365,RSIEN_",",.03)=$G(PAYR)
 | 
|---|
| 123 |  I $G(IEN)'="" D
 | 
|---|
| 124 |  . I $P(^IBCN(365.1,IEN,0),U,18)=1 S RARRAY(365,RSIEN_",",.04)=$G(BUFF)
 | 
|---|
| 125 |  S RARRAY(365,RSIEN_",",.05)=$G(IEN)
 | 
|---|
| 126 |  S RARRAY(365,RSIEN_",",.06)=2,RARRAY(365,RSIEN_",",.08)=$G(MDTM)
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  I $G(RSTYPE)="" S RSTYPE="U"
 | 
|---|
| 129 |  S RARRAY(365,RSIEN_",",.1)=RSTYPE
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  D FILE^DIE("I","RARRAY","ERR")
 | 
|---|
| 132 |  I $D(ERR) D
 | 
|---|
| 133 |  . S ERFLG=1,MCT=0,VEN=0
 | 
|---|
| 134 |  . F  S VEN=$O(ERR("DIERR",VEN)) Q:'VEN  D
 | 
|---|
| 135 |  .. S MCT=MCT+1,MSG(MCT)=ERR("DIERR",VEN,"TEXT",1)
 | 
|---|
| 136 |  . ;
 | 
|---|
| 137 |  . S MCT=MCT+1,MSG(MCT)="Please log a NOIS for this problem."
 | 
|---|
| 138 |  . S XMSUB="Error creating Response"
 | 
|---|
| 139 |  . D MSG^IBCNEUT5(MGRP,XMSUB,"MSG(")
 | 
|---|
| 140 |  . K ERR,VEN,MCT
 | 
|---|
| 141 |  Q
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | TMRR ;  Communication Timeout message
 | 
|---|
| 144 |  I 'TMSG Q
 | 
|---|
| 145 |  S XMSUB="IIV Communication Timeout"
 | 
|---|
| 146 |  S MSG(1)="No Response has been received within the defined failure days of "_FAIL_" for "
 | 
|---|
| 147 |  S MSG(3)="Patient: "_$P($G(^DPT(DFN,0)),U,1)_$$SSN(DFN)_" and Payer: "_$P($G(^IBE(365.12,PAYR,0)),U,1)
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  D TXT^IBCNEUT7("MSG")
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |  D MSG^IBCNEUT5(MGRP,XMSUB,"MSG(")
 | 
|---|
| 152 |  K MSG,XMSUB
 | 
|---|
| 153 |  Q
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 | SSN(DFN) ; Retrieve patient's ssn and return last 4 digits
 | 
|---|
| 156 |  ; Subsequently added Date of Birth to display as well
 | 
|---|
| 157 |  Q:'$G(DFN) ""
 | 
|---|
| 158 |  N SSN,DOB
 | 
|---|
| 159 |  S SSN=$$GETSSN^IBCNEDE5(DFN)
 | 
|---|
| 160 |  S DOB=$$GETDOB(DFN)
 | 
|---|
| 161 |  I SSN="",DOB="" Q ""
 | 
|---|
| 162 |  I SSN="" Q " (DOB: "_DOB_")"
 | 
|---|
| 163 |  S SSN=" (SSN: xxx-xx-"_$E(SSN,6,9)
 | 
|---|
| 164 |  I DOB'="" S DOB="  DOB: "_DOB
 | 
|---|
| 165 |  Q SSN_DOB_")"
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | GETDOB(DFN) ;
 | 
|---|
| 168 |  Q:'$G(DFN) "Unknown"
 | 
|---|
| 169 |  N DOB
 | 
|---|
| 170 |  S DOB=$P($G(^DPT(DFN,0)),U,3)
 | 
|---|
| 171 |  S DOB=$S('DOB:"Unknown",1:$$FMTE^XLFDT(DOB,"5Z"))
 | 
|---|
| 172 |  Q DOB
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 | SCC ;  If successfully creates an HL7 msg
 | 
|---|
| 175 |  S MSGID=$P(HLRESLT,U,1),NTRAN=NTRAN+1,MDTM=$$NOW^XLFDT(),IHCNT=IHCNT+1
 | 
|---|
| 176 |  I NTRAN>1 S NRETR=NRETR+1
 | 
|---|
| 177 |  D SST^IBCNEUT2(IEN,2)
 | 
|---|
| 178 |  S DA=IEN,DIE="^IBCN(365.1,",DR=".07////^S X=NTRAN;.08////^S X=NRETR"
 | 
|---|
| 179 |  D ^DIE
 | 
|---|
| 180 |  ;
 | 
|---|
| 181 |  ;  Create Response Record
 | 
|---|
| 182 |  S RSTYPE="O" D RESP
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 |  ;  Create HL7 subrecord
 | 
|---|
| 185 |  D SUB
 | 
|---|
| 186 |  ;
 | 
|---|
| 187 |  ; If a buffer entry exists, set the buffer symbol to a '?'
 | 
|---|
| 188 |  I BUFF'="" D BUFF^IBCNEUT2(BUFF,10)
 | 
|---|
| 189 |  Q
 | 
|---|