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