| 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
 | 
|---|