| 1 | IBCNEHLQ ;DAOU/ALA - HL7 RQI Message ;17-JUN-2002
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**184,271,300,361**;21-MAR-94;Build 9
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;**Program Description**
 | 
|---|
| 6 |  ;  This routine builds an IIV Verification (RQI^I01) or
 | 
|---|
| 7 |  ;  Identification (RQI^I03) request
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;**Modified by  Date        Reason
 | 
|---|
| 10 |  ;  DAOU/BHS     10/04/2002  Implementing Transmit SSN logic
 | 
|---|
| 11 |  ;  DAOU/DB      03/19/2004  Stripped dashes from SSN (PID, GT1)
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 | EN ;  Entry Point
 | 
|---|
| 14 |  ;  Variables
 | 
|---|
| 15 |  ;    HLFS = Field Separator
 | 
|---|
| 16 |  ;    DFN = Patient IEN
 | 
|---|
| 17 |  ;    PAYR = Payer IEN
 | 
|---|
| 18 |  ;    BUFF = Buffer IEN
 | 
|---|
| 19 |  ;    FRDT = Freshness Date
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | PID ; Patient Identification Segment
 | 
|---|
| 22 |  NEW VAERR,VAFSTR,VADM,VA,ICN,SNDSSN,NM,I
 | 
|---|
| 23 |  S SNDSSN=$$SNDSSN^IBCNEUT5(PAYR,"IIV")
 | 
|---|
| 24 |  D DEM^VADPT
 | 
|---|
| 25 |  S VAFSTR=",1,7,8,11,"
 | 
|---|
| 26 |  S PID=$$EN^VAFHLPID(DFN,VAFSTR,1)
 | 
|---|
| 27 |  ; Encode special characters into Name and address pieces
 | 
|---|
| 28 |  ; **NOTE: If $$EN^VAFHLPID should, in the future, return more than 11 pieces than the lines below may
 | 
|---|
| 29 |  ;         need to be modified as they currently expect 11 pieces to be returned.
 | 
|---|
| 30 |  S DFN=$G(DFN) I DFN]"" D
 | 
|---|
| 31 |  . S NM("FILE")=2,NM("IENS")=DFN,NM("FIELD")=.01
 | 
|---|
| 32 |  . S NM=$$HLNAME^XLFNAME(.NM,"",$E(HLECH)),NM=$S(NM]"":NM,1:HLQ)
 | 
|---|
| 33 |  . S I=$L(NM,"|"),NM=$$ENCHL7(NM),$P(PID,"|",6,5+I)=NM
 | 
|---|
| 34 |  S $P(PID,"|",12,99)=$$ENCHL7($P(PID,"|",12,99))
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  S ICN=$P($G(^DPT(DFN,"MPI")),U,1)
 | 
|---|
| 37 |  S $P(PID,HLFS,4)=ICN_HLECH_HLECH_HLECH_"USVHA"_HLECH_"NI"_HLECH
 | 
|---|
| 38 |  I DFN S $P(PID,HLFS,4)=$P(PID,HLFS,4)_"~"_DFN_HLECH_HLECH_HLECH_"USVHA"_HLECH_"PI"_HLECH_$P($$SITE^VASITE,U,3)_HLECH
 | 
|---|
| 39 |  I SNDSSN S $P(PID,HLFS,4)=$P(PID,HLFS,4)_"~"_$TR(VA("PID"),"-")_HLECH_HLECH_HLECH_"USSSA"_HLECH_"SS"_HLECH_"USSSA"
 | 
|---|
| 40 |  S FRDT=$$HLDATE^HLFNC($G(FRDT))
 | 
|---|
| 41 |  S $P(PID,HLFS,34)=FRDT
 | 
|---|
| 42 |  Q
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 | GT1 ;  Guarantor Segment
 | 
|---|
| 45 |  NEW WHO,NM,IDOB,ISSN,ISEX,SEX,RLIEN,PER,PLIEN,RDATA,IBSDATA,IBADDR
 | 
|---|
| 46 |  NEW SNDSSN
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  S SNDSSN=$$SNDSSN^IBCNEUT5(PAYR,"IIV")
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  S GT1=""
 | 
|---|
| 51 |  I $G(QUERY)="I" Q
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  ;  If the data was extracted from Buffer get specifics from Buffer file
 | 
|---|
| 54 |  I EXT=1 D
 | 
|---|
| 55 |  . S WHO=$P($G(^IBA(355.33,BUFF,60)),U,5)
 | 
|---|
| 56 |  . I WHO="v"!(WHO="") Q
 | 
|---|
| 57 |  . S NM=$P($G(^IBA(355.33,BUFF,60)),U,7),NM=$$NAME^IBCNEHLU(NM)
 | 
|---|
| 58 |  . S NM=$$HLNAME^HLFNC(NM,HLECH)
 | 
|---|
| 59 |  . S NM=$$ENCHL7(NM)
 | 
|---|
| 60 |  . S $P(GT1,HLFS,3)=NM_HLECH_HLECH_HLECH
 | 
|---|
| 61 |  . S IDOB=$P($G(^IBA(355.33,BUFF,60)),U,8),IDOB=$$HLDATE^HLFNC(IDOB)
 | 
|---|
| 62 |  . S $P(GT1,HLFS,8)=IDOB
 | 
|---|
| 63 |  . S $P(GT1,HLFS,2)=$$ENCHL7($G(SUBID))_HLECH_HLECH_HLECH_HLECH_"HC"
 | 
|---|
| 64 |  . I SNDSSN S $P(GT1,HLFS,12)=$TR($P($G(^IBA(355.33,BUFF,60)),U,9),"-")
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ;  If the data was extracted from non-Buffer, check Patient file
 | 
|---|
| 67 |  I EXT'=1 D
 | 
|---|
| 68 |  . I IRIEN="" Q
 | 
|---|
| 69 |  . S WHO=$P($G(^DPT(DFN,.312,IRIEN,0)),U,6)
 | 
|---|
| 70 |  . I WHO="v"!(WHO="") Q
 | 
|---|
| 71 |  . S NM=$P($G(^DPT(DFN,.312,IRIEN,0)),U,17)
 | 
|---|
| 72 |  . S NM=$$HLNAME^HLFNC(NM,HLECH)
 | 
|---|
| 73 |  . S NM=$$ENCHL7(NM)
 | 
|---|
| 74 |  . S $P(GT1,HLFS,3)=NM_HLECH_HLECH_HLECH
 | 
|---|
| 75 |  . S IDOB=$P($G(^DPT(DFN,.312,IRIEN,3)),U,1),IDOB=$$HLDATE^HLFNC(IDOB)
 | 
|---|
| 76 |  . S $P(GT1,HLFS,8)=IDOB
 | 
|---|
| 77 |  . S $P(GT1,HLFS,2)=$$ENCHL7($G(SUBID))_HLECH_HLECH_HLECH_HLECH_"HC"
 | 
|---|
| 78 |  . ;
 | 
|---|
| 79 |  . S IBSDATA=$G(^DPT(DFN,.312,IRIEN,3))
 | 
|---|
| 80 |  . ;
 | 
|---|
| 81 |  . S ISSN=$P(IBSDATA,U,5)
 | 
|---|
| 82 |  . I SNDSSN S $P(GT1,HLFS,12)=$TR(ISSN,"-")
 | 
|---|
| 83 |  . ;
 | 
|---|
| 84 |  . S IBADDR=$$HLADDR^HLFNC($P(IBSDATA,U,6,7),$P(IBSDATA,U,8,12))
 | 
|---|
| 85 |  . S $P(GT1,HLFS,5)=$$ENCHL7(IBADDR)
 | 
|---|
| 86 |  . ;
 | 
|---|
| 87 |  . D CHK
 | 
|---|
| 88 |  . I $P(GT1,HLFS,8)=""&(IDOB'="") S $P(GT1,HLFS,8)=$$HLDATE^HLFNC(IDOB)
 | 
|---|
| 89 |  . I $P(GT1,HLFS,9)=""&(ISEX'="") S $P(GT1,HLFS,9)=ISEX
 | 
|---|
| 90 |  . I SNDSSN,$P(GT1,HLFS,12)=""&(ISSN'="") S $P(GT1,HLFS,12)=$TR(ISSN,"-")
 | 
|---|
| 91 |  . I $P(GT1,HLFS,9)="",WHO="s" D
 | 
|---|
| 92 |  .. S SEX=$P($G(^DPT(DFN,.312,IRIEN,3)),U,12) ; get policy holder sex
 | 
|---|
| 93 |  .. I SEX="" S SEX=$P(^DPT(DFN,0),U,2),SEX=$S(SEX="M":"F",1:"M") ; if null, use alternative method
 | 
|---|
| 94 |  .. S $P(GT1,HLFS,9)=SEX
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  I GT1="" Q
 | 
|---|
| 97 |  S $P(GT1,HLFS,1)=1
 | 
|---|
| 98 |  S GT1="GT1"_HLFS_GT1
 | 
|---|
| 99 |  Q
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 | IN1 ;  Insurance Segment
 | 
|---|
| 102 |  NEW EFFDT,EXPDT,WHO,ADMN,ADMDT,IENS
 | 
|---|
| 103 |  S IN1="",SRVDT=$$HLDATE^HLFNC(SRVDT)
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  ;  If the data was extracted from Buffer get specifics from Buffer file
 | 
|---|
| 106 |  I EXT=1 D
 | 
|---|
| 107 |  . S $P(IN1,HLFS,2)=$$ENCHL7($G(SUBID))
 | 
|---|
| 108 |  . I PAYR'=$$FIND1^DIC(365.12,"","X","~NO PAYER") D
 | 
|---|
| 109 |  .. S $P(IN1,HLFS,3)=$$ENCHL7($P(^IBE(365.12,PAYR,0),U,2))_HLECH_HLECH_HLECH_"USVHA"_HLECH_"VP"_HLECH
 | 
|---|
| 110 |  .. S $P(IN1,HLFS,4)=$$ENCHL7($P(^IBE(365.12,PAYR,0),U,1))
 | 
|---|
| 111 |  . S $P(IN1,HLFS,8)=$$ENCHL7($P($G(^IBA(355.33,BUFF,40)),U,3))
 | 
|---|
| 112 |  . S $P(IN1,HLFS,9)=$$ENCHL7($P($G(^IBA(355.33,BUFF,40)),U,2))
 | 
|---|
| 113 |  . S EFFDT=$P($G(^IBA(355.33,BUFF,60)),U,2),EFFDT=$$HLDATE^HLFNC(EFFDT)
 | 
|---|
| 114 |  . S EXPDT=$P($G(^IBA(355.33,BUFF,60)),U,3),EXPDT=$$HLDATE^HLFNC(EXPDT)
 | 
|---|
| 115 |  . S $P(IN1,HLFS,12)=EFFDT
 | 
|---|
| 116 |  . S $P(IN1,HLFS,13)=EXPDT
 | 
|---|
| 117 |  . S WHO=$P($G(^IBA(355.33,BUFF,60)),U,5)
 | 
|---|
| 118 |  . S $P(IN1,HLFS,17)=$S(WHO="v":18,WHO="":18,WHO="s":"01",1:34)
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  ;  If the data was extracted from non-Buffer, check Patient file
 | 
|---|
| 121 |  I EXT'=1 D
 | 
|---|
| 122 |  . I IRIEN="" Q
 | 
|---|
| 123 |  . I $G(SUBID)'=$P($G(^DPT(DFN,.312,IRIEN,0)),U,2) Q
 | 
|---|
| 124 |  . S EFFDT=$P($G(^DPT(DFN,.312,IRIEN,0)),U,8),EFFDT=$$HLDATE^HLFNC(EFFDT)
 | 
|---|
| 125 |  . S EXPDT=$P($G(^DPT(DFN,.312,IRIEN,0)),U,4),EXPDT=$$HLDATE^HLFNC(EXPDT)
 | 
|---|
| 126 |  . S $P(IN1,HLFS,12)=EFFDT
 | 
|---|
| 127 |  . S $P(IN1,HLFS,13)=EXPDT
 | 
|---|
| 128 |  . S WHO=$P($G(^DPT(DFN,.312,IRIEN,0)),U,6) I WHO="" Q
 | 
|---|
| 129 |  . S $P(IN1,HLFS,17)=$S(WHO="v":18,WHO="":18,WHO="s":"01",1:34)
 | 
|---|
| 130 |  . S IENS=IRIEN_","_DFN_","
 | 
|---|
| 131 |  . S $P(IN1,HLFS,8)=$$ENCHL7($$GET1^DIQ(2.312,IENS,21,"E"))
 | 
|---|
| 132 |  . S $P(IN1,HLFS,9)=$$ENCHL7($$GET1^DIQ(2.312,IENS,20,"E"))
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  ;  If it's an inquire with 'No Payer', don't send payer info
 | 
|---|
| 135 |  I PAYR'=$$FIND1^DIC(365.12,"","X","~NO PAYER") D
 | 
|---|
| 136 |  . S $P(IN1,HLFS,3)=$$ENCHL7($P(^IBE(365.12,PAYR,0),U,2))_HLECH_HLECH_HLECH_"USVHA"_HLECH_"VP"_HLECH
 | 
|---|
| 137 |  . S $P(IN1,HLFS,4)=$$ENCHL7($P(^IBE(365.12,PAYR,0),U,1))
 | 
|---|
| 138 |  . S $P(IN1,HLFS,2)=$$ENCHL7($G(SUBID))
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  I IN1="" Q
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  I $G(QUERY)="I",$P(IN1,HLFS,17)'=18 S $P(IN1,HLFS,17)=18
 | 
|---|
| 143 |  I $P(IN1,HLFS,17)="" S $P(IN1,HLFS,17)=18
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 |  ;  Set the admission date if patient currently admitted
 | 
|---|
| 146 |  S ADMN=$P($G(^DPT(DFN,.105)),U,1) I ADMN'="" D
 | 
|---|
| 147 |  . S ADMDT=$P(^DGPM(ADMN,0),U,1),ADMDT=$$HLDATE^HLFNC(ADMDT)
 | 
|---|
| 148 |  . S $P(IN1,HLFS,24)=ADMDT
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 |  ;  Set the service date
 | 
|---|
| 151 |  S $P(IN1,HLFS,26)=SRVDT
 | 
|---|
| 152 |  S $P(IN1,HLFS,1)=1
 | 
|---|
| 153 |  S IN1="IN1"_HLFS_IN1
 | 
|---|
| 154 |  Q
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 | CHK ;  Check for spouse or other information in the Patient Relation File
 | 
|---|
| 157 |  ;  DGREL = Relationship (1=Self, 2=Spouse, 3-34,99=Other)
 | 
|---|
| 158 |  NEW IEN,QFL
 | 
|---|
| 159 |  S IEN="",RLIEN="",ISEX="",QFL=0
 | 
|---|
| 160 |  F  S IEN=$O(^DGPR(408.12,"B",DFN,IEN)) Q:IEN=""  D  Q:QFL
 | 
|---|
| 161 |  . S DGREL=$P($G(^DGPR(408.12,IEN,0)),U,2)
 | 
|---|
| 162 |  . ;
 | 
|---|
| 163 |  . ;  If person is veteran, quit
 | 
|---|
| 164 |  . I DGREL=1 Q
 | 
|---|
| 165 |  . ;
 | 
|---|
| 166 |  . ;  If person is spouse, pick that record and quit
 | 
|---|
| 167 |  . I WHO="s",DGREL=2 S RLIEN=IEN,QFL=1 Q
 | 
|---|
| 168 |  . ;
 | 
|---|
| 169 |  . ;  Otherwise it should be an 'other' dependent
 | 
|---|
| 170 |  . S RLIEN=IEN
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  I RLIEN="" Q
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  ;  Check for Sex, SSN, DOB in INCOME PERSON File
 | 
|---|
| 175 |  S PER=$P(^DGPR(408.12,RLIEN,0),U,3)
 | 
|---|
| 176 |  I PER'["DGPR(408.13" Q
 | 
|---|
| 177 |  S PLIEN=$P(PER,";",1)
 | 
|---|
| 178 |  I PLIEN="" Q
 | 
|---|
| 179 |  S RDATA=$G(^DGPR(408.13,PLIEN,0))
 | 
|---|
| 180 |  S ISEX=$P(RDATA,U,2),IDOB=$P(RDATA,U,3),ISSN=$P(RDATA,U,9)
 | 
|---|
| 181 |  I $P(RDATA,U,4)'="" D
 | 
|---|
| 182 |  . NEW DFN
 | 
|---|
| 183 |  . S DFN=$P(RDATA,U,4),ISEX=$P(^DPT(DFN,0),U,2),IDOB=$P(^DPT(DFN,0),U,3)
 | 
|---|
| 184 |  . S ISSN=$P(^DPT(DFN,0),U,9)
 | 
|---|
| 185 |  Q
 | 
|---|
| 186 |  ;
 | 
|---|
| 187 | ENCHL7(STR) ; Encode HL7 escape seqs in data fields
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 |  ; Input:
 | 
|---|
| 190 |  ; STR = Field data possible containing HL7 encoding chars
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 |  ; Output Values
 | 
|---|
| 193 |  ; Fn returns string w/converted escape seqs
 | 
|---|
| 194 |  ;
 | 
|---|
| 195 |  N CHR,NEW,RPLC,CNT,LOOP
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  ; Replace "\" "&" "~" "|" with \F\ \R\ \E\ \T\ respectively
 | 
|---|
| 198 |  F CHR="\","&","~","|" S CNT=$L(STR,CHR) I CNT>1 D
 | 
|---|
| 199 |  . S NEW=$P(STR,CHR)
 | 
|---|
| 200 |  . S RPLC="\"_$TR(CHR,"|~\&","FRET")_"\"
 | 
|---|
| 201 |  . F LOOP=2:1:CNT S NEW=NEW_RPLC_$P(STR,CHR,LOOP)
 | 
|---|
| 202 |  . S STR=NEW
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 |  Q STR
 | 
|---|