| 1 | IBCNEHLU ;DAOU/ALA - HL7 Utilities ;10-JUN-2002  ; Compiled December 16, 2004 15:36:12 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**184,300**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | HLP(PROTOCOL) ;  Find the Protocol IEN | 
|---|
| 6 | Q +$O(^ORD(101,"B",PROTOCOL,0)) | 
|---|
| 7 | ; | 
|---|
| 8 | NAME(NM) ;  Convert a name that isn't in standard VISTA format - | 
|---|
| 9 | NEW LNM,FNM,MI | 
|---|
| 10 | ; | 
|---|
| 11 | I NM?." " Q NM | 
|---|
| 12 | ;  LastName,FirstName MI | 
|---|
| 13 | I NM["," Q NM | 
|---|
| 14 | ; | 
|---|
| 15 | ; Remove double-spaces from name | 
|---|
| 16 | F  Q:$L(NM,"  ")<2  S NM=$P(NM,"  ",1)_" "_$P(NM,"  ",2,9999) | 
|---|
| 17 | ; | 
|---|
| 18 | ; Trim leading/trailing spaces | 
|---|
| 19 | S NM=$$TRIM^XLFSTR(NM) | 
|---|
| 20 | ; | 
|---|
| 21 | ; Find number of spaces in name | 
|---|
| 22 | S II=$L(NM," ") | 
|---|
| 23 | ; | 
|---|
| 24 | I II>3 Q NM | 
|---|
| 25 | I II=3 S FNM=$P(NM," ",1),MI=" "_$P(NM," ",2),LNM=$P(NM," ",3) | 
|---|
| 26 | I II=2 S FNM=$P(NM," ",1),LNM=$P(NM," ",2),MI="" | 
|---|
| 27 | I II<2 Q NM | 
|---|
| 28 | Q LNM_","_FNM_MI | 
|---|
| 29 | ; | 
|---|
| 30 | DODCK(DFN,DOD,MGRP,NAME,RIEN,SSN) ;  Date of death check | 
|---|
| 31 | ; | 
|---|
| 32 | ; Input Variables | 
|---|
| 33 | ; DFN, DOD, MGRP, NAME, RIEN, SSN | 
|---|
| 34 | ; | 
|---|
| 35 | N CDOD,CIDDSP,IDDSP,IDSSN,MSG,XMSUB | 
|---|
| 36 | S CDOD=$P($G(^DPT(DFN,.35)),U,1),CIDDSP=$$FMTE^XLFDT(CDOD,"5Z") | 
|---|
| 37 | S IDDSP=$$FMTE^XLFDT(DOD,"5Z") | 
|---|
| 38 | S IDSSN=$E(SSN,$L(SSN)-3,$L(SSN)) | 
|---|
| 39 | ; | 
|---|
| 40 | ; If the two dates of death are the same, quit | 
|---|
| 41 | I CDOD=DOD G DODCKX | 
|---|
| 42 | ; | 
|---|
| 43 | ;  If no current date of death but payer sent one | 
|---|
| 44 | I CDOD="" D  G DODCKX | 
|---|
| 45 | . ;  Send an email message | 
|---|
| 46 | . S XMSUB="Date of Death Received" | 
|---|
| 47 | . S MSG(1)="A Date of Death ("_IDDSP_") was received for patient: "_NAME_"/"_IDSSN_" "_$$GETDOB^IBCNEDEQ(DFN)_" from" | 
|---|
| 48 | . S MSG(2)="payer "_$$GET1^DIQ(365,RIEN,.03,"E")_".  There is no current Date of Death on file for " | 
|---|
| 49 | . S MSG(3)="this patient." | 
|---|
| 50 | . D TXT^IBCNEUT7("MSG") | 
|---|
| 51 | . D MSG^IBCNEUT5(MGRP,XMSUB,"MSG(") | 
|---|
| 52 | ; | 
|---|
| 53 | S XMSUB="Variant Date of Death" | 
|---|
| 54 | S MSG(1)="A Date of Death ("_IDDSP_") was received for patient: "_NAME_"/"_IDSSN_" "_$$GETDOB^IBCNEDEQ(DFN)_" from payer "_$$GET1^DIQ(365,RIEN,.03,"E")_"." | 
|---|
| 55 | S MSG(2)="This Date of Death does not currently match the Date of Death ("_CIDDSP_") on file for this patient. " | 
|---|
| 56 | D TXT^IBCNEUT7("MSG") | 
|---|
| 57 | D MSG^IBCNEUT5(MGRP,XMSUB,"MSG(") | 
|---|
| 58 | DODCKX   ; | 
|---|
| 59 | Q | 
|---|
| 60 | ; | 
|---|
| 61 | SPAR     ;  Segment Parsing | 
|---|
| 62 | ; | 
|---|
| 63 | ; This tag will parse the current segment referenced by the HCT index | 
|---|
| 64 | ; and place the results in the IBSEG array. | 
|---|
| 65 | ; | 
|---|
| 66 | ; Input Variables | 
|---|
| 67 | ; HCT | 
|---|
| 68 | ; | 
|---|
| 69 | ; Output Variables | 
|---|
| 70 | ; IBSEG (ARRAY of fields in segment) | 
|---|
| 71 | ; | 
|---|
| 72 | N II,IJ,IK,IM,IS,ISBEG,ISCT,ISDATA,ISEND,ISPEC,LSDATA,NPC | 
|---|
| 73 | ; | 
|---|
| 74 | ;Reset IBSEG | 
|---|
| 75 | K IBSEG | 
|---|
| 76 | ; | 
|---|
| 77 | S ISCT="",II=0,IS=0 | 
|---|
| 78 | F  S ISCT=$O(^TMP($J,"IBCNEHLI",HCT,ISCT)) Q:ISCT=""  D | 
|---|
| 79 | . S IS=IS+1 | 
|---|
| 80 | . S ISDATA(IS)=$G(^TMP($J,"IBCNEHLI",HCT,ISCT)) | 
|---|
| 81 | . I $O(^TMP($J,"IBCNEHLI",HCT,ISCT))="" S ISDATA(IS)=ISDATA(IS)_HLFS | 
|---|
| 82 | . S ISPEC(IS)=$L(ISDATA(IS),HLFS) | 
|---|
| 83 | ; | 
|---|
| 84 | S IM=0,LSDATA="" | 
|---|
| 85 | LP S IM=IM+1 Q:IM>IS | 
|---|
| 86 | S LSDATA=LSDATA_ISDATA(IM),NPC=ISPEC(IM) | 
|---|
| 87 | F IJ=1:1:NPC-1 D | 
|---|
| 88 | . S II=II+1,IBSEG(II)=$$CLNSTR($P(LSDATA,HLFS,IJ),$E(HL("ECH"),1,2)_$E(HL("ECH"),4),$E(HL("ECH"))) | 
|---|
| 89 | S LSDATA=$P(LSDATA,HLFS,NPC) | 
|---|
| 90 | G LP | 
|---|
| 91 | CLNSTR(STRING,CHARS,SUBSEP)      ; Remove extra trailing components and subcomponents in the HL7 seg | 
|---|
| 92 | ; | 
|---|
| 93 | N NUMPEC,PEC,RTSTRING | 
|---|
| 94 | ; | 
|---|
| 95 | S RTSTRING=$$RTRIMCH(STRING,CHARS) | 
|---|
| 96 | ; Now we have string w/o trailing chars, remove from subs | 
|---|
| 97 | S NUMPEC=$L(RTSTRING,SUBSEP) | 
|---|
| 98 | F PEC=1:1:NUMPEC S $P(RTSTRING,SUBSEP,PEC)=$$RTRIMCH($P(RTSTRING,SUBSEP,PEC),CHARS) | 
|---|
| 99 | Q RTSTRING | 
|---|
| 100 | ; | 
|---|
| 101 | RTRIMCH(STR,CHRS) ; Remove the trailing chars from string | 
|---|
| 102 | ; | 
|---|
| 103 | N R,L | 
|---|
| 104 | ; | 
|---|
| 105 | S L=1,CHRS=$G(CHRS," ") | 
|---|
| 106 | F R=$L(STR):-1:1 Q:CHRS'[$E(STR,R) | 
|---|
| 107 | I L=R,(CHRS[$E(STR)) S STR="" | 
|---|
| 108 | Q $E(STR,L,R) | 
|---|
| 109 | ; | 
|---|
| 110 | ; | 
|---|
| 111 | GTICNM(ICN,NAME) ; Retrieve PID segment and set ICN and patient name | 
|---|
| 112 | ; | 
|---|
| 113 | N HCT,ERFLG,SEG,IBSEG | 
|---|
| 114 | S (HCT,ICN,NAME)="",ERFLG=0 | 
|---|
| 115 | F  S HCT=$O(^TMP($J,"IBCNEHLI",HCT)) Q:HCT=""  D  Q:ERFLG | 
|---|
| 116 | .  D SPAR | 
|---|
| 117 | .  S SEG=$G(IBSEG(1)) Q:SEG'="PID" | 
|---|
| 118 | .  S ICN=$G(IBSEG(4)),NAME=$G(IBSEG(6)),ERFLG=1 | 
|---|
| 119 | Q | 
|---|