| 1 | BPSJZRP ;BHAM ISC/LJF - HL7 Registration ZRP Message ;21-NOV-2003 | 
|---|
| 2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,2**;JUN 2004;Build 12 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | Q | 
|---|
| 6 | ; | 
|---|
| 7 | EN(HL,PHIX,ZRP,NPI,NCP) ; | 
|---|
| 8 | ; ZRP array contains pharmacy registration info | 
|---|
| 9 | N ZRPS,FS,CPS,REP,NDZRO,NDHRS,NDREM,NDREP,NDREP1,NDADD,STATE | 
|---|
| 10 | N VAIX1,VAIX2,VAIXLP,VATLE,CNF,MSGCNT,TCH | 
|---|
| 11 | ; | 
|---|
| 12 | ; Quit if no Pharmacy index provided | 
|---|
| 13 | I '$G(PHIX) Q | 
|---|
| 14 | ; | 
|---|
| 15 | K ZRP S ZRPS="" | 
|---|
| 16 | ; | 
|---|
| 17 | ; Set HL7 Delimiters - use standard defaults if none provided | 
|---|
| 18 | S FS=$G(HL("FS")) I FS="" S FS="|" | 
|---|
| 19 | S CPS=$E($G(HL("ECH"))) I CPS="" S CPS="^" | 
|---|
| 20 | S REP=$E($G(HL("ECH")),2) I REP="" S REP="~" | 
|---|
| 21 | ; | 
|---|
| 22 | S NDZRO=$G(^BPS(9002313.56,PHIX,0)) | 
|---|
| 23 | S NDREM=$G(^BPS(9002313.56,PHIX,"REMIT")) | 
|---|
| 24 | S NDREP=$G(^BPS(9002313.56,PHIX,"REP")) | 
|---|
| 25 | S NDREP1=$G(^BPS(9002313.56,PHIX,"REP1")) | 
|---|
| 26 | S NDADD=$G(^BPS(9002313.56,PHIX,"ADDR")) | 
|---|
| 27 | ; | 
|---|
| 28 | F ZRP=1:1:17 S ZRP(ZRP)="" ;Initialize | 
|---|
| 29 | S (ZRP(2),NCP)=$P(NDZRO,U,2)     ;NCPDP # | 
|---|
| 30 | S ZRP(3)=$P(NDZRO,U)       ;NAME | 
|---|
| 31 | S ZRP(4)=$P(NDZRO,U,3)     ;DEFAULT DEA # | 
|---|
| 32 | ; | 
|---|
| 33 | S ZRP(5)=$$OPHOURS(PHIX) | 
|---|
| 34 | ; | 
|---|
| 35 | I $L($P(NDADD,U,8)) S $P(ZRPS,CPS,1)=$P(NDADD,U,8)  ;SITE ADDRESS NAME | 
|---|
| 36 | I $L($P(NDADD,U,1)) S $P(ZRPS,CPS,1)=$P(ZRPS,CPS,1)_" "_$P(NDADD,U,1)  ;SITE ADDRESS 1 | 
|---|
| 37 | I $L($P(NDADD,U,2)) S $P(ZRPS,CPS,2)=$P(NDADD,U,2)  ;SITE ADDRESS 2 | 
|---|
| 38 | I $L($P(NDADD,U,3)) S $P(ZRPS,CPS,3)=$P(NDADD,U,3)  ;CITY | 
|---|
| 39 | I $L($P(NDADD,U,4)) S STATE=$P(NDADD,U,4) I STATE D  ; State | 
|---|
| 40 | . S STATE=$P($G(^DIC(5,STATE,0)),U,2) | 
|---|
| 41 | . I STATE]"" S $P(ZRPS,CPS,4)=STATE | 
|---|
| 42 | I $L($P(NDADD,U,5)) S $P(ZRPS,CPS,5)=$P(NDADD,U,5)  ;ZIP | 
|---|
| 43 | I ZRPS]"" S ZRP(6)=ZRPS,ZRPS="" | 
|---|
| 44 | ; | 
|---|
| 45 | I $L($P(NDREM,U,1)) S $P(ZRPS,CPS,1)=$P(NDREM,U,1)   ;REMITTANCE ADDRESS NAME | 
|---|
| 46 | I $L($P(NDREM,U,2)) S $P(ZRPS,CPS,1)=$P(ZRPS,CPS,1)_" "_$P(NDREM,U,2)  ;REMIT ADDRESS LINE 1 | 
|---|
| 47 | I $L($P(NDREM,U,3)) S $P(ZRPS,CPS,2)=$P(NDREM,U,3)   ;REMIT ADDRESS LINE 2 | 
|---|
| 48 | I $L($P(NDREM,U,6)) S $P(ZRPS,CPS,3)=$P(NDREM,U,6)   ;CITY | 
|---|
| 49 | I $L($P(NDREM,U,7)) S STATE=$P(NDREM,U,7) I STATE D  ;State | 
|---|
| 50 | . S STATE=$P($G(^DIC(5,STATE,0)),U,2) | 
|---|
| 51 | . I STATE]"" S $P(ZRPS,CPS,4)=STATE | 
|---|
| 52 | I $L($P(NDREM,U,8)) S $P(ZRPS,CPS,5)=$P(NDREM,U,8)  ;ZIP | 
|---|
| 53 | I ZRPS]"" S ZRP(7)=ZRPS,ZRPS="" | 
|---|
| 54 | ; | 
|---|
| 55 | ; Load the Name and Means Fields | 
|---|
| 56 | S VAIX1=$P(NDREP,U,3) | 
|---|
| 57 | S VAIX2=$P(NDREP,U,4) | 
|---|
| 58 | S VAIXLP=$P(NDREP,U,5) | 
|---|
| 59 | ; | 
|---|
| 60 | ; Contact | 
|---|
| 61 | I $G(VAIX1) S VATLE="" D | 
|---|
| 62 | . S CNF=$$VA200NM^BPSJUTL(VAIX1,.VATLE,.HL) I CNF]"" S ZRP(8)=CNF | 
|---|
| 63 | . I VATLE]"" S ZRP(9)=VATLE | 
|---|
| 64 | . S CNF=$$VA20013^BPSJUTL(VAIX1,.HL) I CNF]"" S ZRP(10)=CNF | 
|---|
| 65 | ; | 
|---|
| 66 | ; Alternate Contact | 
|---|
| 67 | I $G(VAIX2) S VATLE="" D | 
|---|
| 68 | . S CNF=$$VA200NM^BPSJUTL(VAIX2,.VATLE,.HL) I CNF]"" S ZRP(11)=CNF | 
|---|
| 69 | . I VATLE]"" S ZRP(12)=VATLE | 
|---|
| 70 | . S CNF=$$VA20013^BPSJUTL(VAIX2,.HL) I CNF]"" S ZRP(13)=CNF | 
|---|
| 71 | ; | 
|---|
| 72 | ; Lead Pharmacist | 
|---|
| 73 | I $G(VAIXLP) S VATLE="" D | 
|---|
| 74 | . S CNF=$$VA200NM^BPSJUTL(VAIXLP,.VATLE,.HL) I CNF]"" S ZRP(14)=CNF | 
|---|
| 75 | . I VATLE]"" S ZRP(15)=VATLE | 
|---|
| 76 | ; | 
|---|
| 77 | ; Pharmacist's License | 
|---|
| 78 | I $L($P(NDREP1,U)) S ZRP(16)=$P(NDREP1,U) | 
|---|
| 79 | ; | 
|---|
| 80 | ; NPI | 
|---|
| 81 | S ZRP(17)=$G(NPI) | 
|---|
| 82 | ; | 
|---|
| 83 | ; Encode special chars. Add Field separators. | 
|---|
| 84 | S TCH("\")="\E\",TCH("&")="\T\",TCH("|")="\F\" | 
|---|
| 85 | S (ZRPS(5),ZRPS(10),ZRPS(13))=1  ;Fields with HL7 repetion chars | 
|---|
| 86 | F ZRP=17:-1:1 D  S ZRP(ZRP)=$$ENCODE^BPSJUTL(ZRP(ZRP),.TCH)_FS | 
|---|
| 87 | . I $G(ZRPS(ZRP)) K TCH("~")  ; don't convert repetion chars | 
|---|
| 88 | . E  S TCH("~")="\R\"         ; ok to convert repetion chars | 
|---|
| 89 | S ZRP="ZRP|" | 
|---|
| 90 | ; | 
|---|
| 91 | Q | 
|---|
| 92 | ; | 
|---|
| 93 | OPHOURS(PHINDEX) ; Operational Hours | 
|---|
| 94 | N DAY,DIX,OPH,RETURN,WEEK,OPDAY,OPHOUR | 
|---|
| 95 | N CLH | 
|---|
| 96 | ; | 
|---|
| 97 | S PHINDEX=+$G(PHINDEX),RETURN="" | 
|---|
| 98 | S WEEK="SUN^MON^TUE^WED^THU^FRI^SAT^" | 
|---|
| 99 | S OPH=$G(^BPS(9002313.56,PHINDEX,"TOPEN")) | 
|---|
| 100 | S CLH=$G(^BPS(9002313.56,PHINDEX,"TCLOSE")) | 
|---|
| 101 | I $G(CPS)="" S CPS=$E($G(HL("ECH"))) I CPS="" S CPS="^" | 
|---|
| 102 | I $G(REP)="" S REP=$E($G(HL("ECH")),2) I REP="" S REP="~" | 
|---|
| 103 | I OPH]"" F DAY=1:1:7 I $P(OPH,U,DAY)]"" D | 
|---|
| 104 | . I RETURN]"" S RETURN=RETURN_REP | 
|---|
| 105 | . S RETURN=RETURN_$P(WEEK,U,DAY)_CPS_$P(WEEK,U,DAY)_CPS | 
|---|
| 106 | . S OPHOUR=$$HOURS($P(OPH,U,DAY)) I OPHOUR<0 S OPHOUR="0000" | 
|---|
| 107 | . S RETURN=RETURN_OPHOUR_CPS | 
|---|
| 108 | . S OPHOUR=$$HOURS($P(CLH,U,DAY)) I OPHOUR<0 S OPHOUR="2359" | 
|---|
| 109 | . S RETURN=RETURN_OPHOUR | 
|---|
| 110 | I RETURN]"" Q RETURN | 
|---|
| 111 | ; | 
|---|
| 112 | S WEEK=U_WEEK | 
|---|
| 113 | S OPH=$G(^BPS(9002313.56,PHINDEX,"HOURS")) | 
|---|
| 114 | S OPDAY=$E($P(OPH,U,2),1,3) | 
|---|
| 115 | ;-if start day unrecognizable force to SUN | 
|---|
| 116 | I WEEK[(U_OPDAY_U) S RETURN=OPDAY_CPS | 
|---|
| 117 | E  S RETURN="SUN"_CPS | 
|---|
| 118 | S OPDAY=$E($P(OPH,U,3),1,3) | 
|---|
| 119 | ;-if end day unrecognizable force to SAT | 
|---|
| 120 | I WEEK[(U_OPDAY_U) S RETURN=RETURN_OPDAY_CPS | 
|---|
| 121 | E  S RETURN=RETURN_"SAT"_CPS | 
|---|
| 122 | ;-if start time unrecognizable force to 0000 | 
|---|
| 123 | S OPHOUR=$$HOURS($E($P(OPH,U,4),1,4)) I OPHOUR<0 S OPHOUR="0000" | 
|---|
| 124 | ;-if end time unrecognizable force to 2359 | 
|---|
| 125 | S OPDAY=$$HOURS($E($P(OPH,U,5),1,4)) I OPDAY<0 S OPDAY="2359" | 
|---|
| 126 | ;-if end time is less than start time force 0000 to 2359 | 
|---|
| 127 | I OPDAY>OPHOUR S RETURN=RETURN_OPHOUR_CPS_OPDAY | 
|---|
| 128 | E  S RETURN=RETURN_"0000"_CPS_"2359" | 
|---|
| 129 | Q RETURN | 
|---|
| 130 | ; | 
|---|
| 131 | HOURS(MIN) ; Validate time 0000 - 2359 | 
|---|
| 132 | N HRS | 
|---|
| 133 | S HRS=$E(MIN,1,2),$E(MIN,1,2)="" | 
|---|
| 134 | I $L(HRS)=2,HRS>-1,HRS<24,$L(MIN)=2,MIN>-1,MIN<60 Q HRS_MIN | 
|---|
| 135 | Q -1 | 
|---|