ORWRP4 ; slc/dcm - OE/RR HDR Report Extract Driver;9/21/05 13:21
;;3.0;ORDER ENTRY/RESULTS REPORTING;**215**;Dec 17, 1997
HDR(ROOT,HANDLE,ID) ;Extract/Modify data from the HDR
;HANDLE=Remote Broker ID in ^XTMP(HANDLE,"D",
;ID=Report ID found in field .02 file 101.24
N X,ORIFN,ORID,ORCNT,ORTN,ORENT,ORRTN
S ROOT=""
I $G(HANDLE)="" S ROOT(0)="-1^Bad Handle" Q
I '$D(^XTMP(HANDLE)) S ROOT(0)="-1^Bad Handle" Q
S ORID=$O(^ORD(101.24,"AC",ID,0))
I $G(ORID)="" S ROOT(0)="-1^No ID match" Q
S ORCNT=$O(^ORD(101.24,ORID,3,"C",9999),-1)
I $G(ORCNT)="" S ROOT(0)="-1^No Columns for Report" Q
S ORTN=$P(^ORD(101.24,ORID,4),"^",6),ORENT=$P(^(4),"^",7)
I '$L(ORTN) S ROOT(0)="-1^No HDR Routine exists" Q
S ORRTN=ORENT_"^"_ORTN
I '$L($T(@ORRTN)) S ROOT(0)="-1^HDR Routine non-existant" Q
D @ORRTN
Q
COM(NODE,C) ;Parse Comments
Q:'NODE Q:'$L($G(C))
N I,J,P,D,B,DLIM,DLIM2,X
S DLIM="\X0a\",DLIM2="|"
F I=1:1:$L(C,DLIM) S B=$P(C,DLIM,I) F J=1:1:$L(B,DLIM2) S X=$P(B,DLIM2,J),D="" D
. I $P(X," ")?8N.N1"-"4N S D=$$DATE^ORDVU($$SETDATE($P(X," "))),P=$P(X," ",2,99) D XSET(NODE_"^"_D_" "_P)
. E D XSET(NODE_"^"_X)
Q
ESCP(C) ; De-escape text
Q:'$L($G(C)) ""
N HL,ORFS,ORCS,ORRS,ORES,ORSS
S HL("FS")="^",HL("ECH")="~|\&"
S ORFS=$G(HL("FS")),ORCS=$E($G(HL("ECH")),1),ORRS=$E($G(HL("ECH")),2),ORES=$E($G(HL("ECH")),3),ORSS=$E($G(HL("ECH")),4)
Q $$REMESC(C)
REMESC(ORSTR) ;
; Remove Escape Characters from HL7 Message Text
; Escape Sequence codes:
; F = field separator (ORFS)
; S = component separator (ORCS)
; R = repitition separator (ORRS)
; E = escape character (ORES)
; T = subcomponent separator (ORSS)
; Hex codes:
; Xdddd = Hex Character translated according to ISO 8859-1 character set (1st 255 characters - 8 bit)
N ORC,ORREP,I1,I2,J1,J2,K,VAL
F ORC="F","S","R","E","T" S ORREP(ORES_ORC_ORES)=$S(ORC="F":ORFS,ORC="S":ORCS,ORC="R":ORRS,ORC="E":ORES,ORC="T":ORSS)
S ORREP("|")=" ",ORSTR=$$REPLACE^XLFSTR(ORSTR,.ORREP)
F S I1=$P(ORSTR,ORES_"X") Q:$L(I1)=$L(ORSTR) D
. S I2=$P(ORSTR,ORES_"X",2,99),J1=$P(I2,ORES)
. Q:'$L(J1)
. S J2=$P(I2,ORES,2,99),VAL=$$BASE^XLFUTL($$UP^XLFSTR(J1),16,10),K=$S(VAL>255:"?",1:$C(VAL)),ORSTR=I1_K_J2
Q ORSTR
XSET(X) ;Setup Allergy & Outpatient RX nodes
Q:'$D(X)
S CNT=CNT+1,^TMP("ORXS1",$J,CNT)=$$ESCP(X)
Q
SETDATE(X) ;Convert HDR Date to FM date
Q:'$D(X) ""
Q:'$L(X) ""
N YEAR,DAY,MONTH,TIME,DOT
S YEAR=$E(X,1,4)-1700,MONTH=$E(X,5,6),DAY=$E(X,7,8),TIME=$E(X,9,14),DOT="."
I TIME="0000"!(TIME="") S DOT="",TIME=""
S X=YEAR_MONTH_DAY_DOT_TIME
Q X
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORWRP4 2615 printed Nov 22, 2024@17:47:18 Page 2
ORWRP4 ; slc/dcm - OE/RR HDR Report Extract Driver;9/21/05 13:21
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**215**;Dec 17, 1997
HDR(ROOT,HANDLE,ID) ;Extract/Modify data from the HDR
+1 ;HANDLE=Remote Broker ID in ^XTMP(HANDLE,"D",
+2 ;ID=Report ID found in field .02 file 101.24
+3 NEW X,ORIFN,ORID,ORCNT,ORTN,ORENT,ORRTN
+4 SET ROOT=""
+5 IF $GET(HANDLE)=""
SET ROOT(0)="-1^Bad Handle"
QUIT
+6 IF '$DATA(^XTMP(HANDLE))
SET ROOT(0)="-1^Bad Handle"
QUIT
+7 SET ORID=$ORDER(^ORD(101.24,"AC",ID,0))
+8 IF $GET(ORID)=""
SET ROOT(0)="-1^No ID match"
QUIT
+9 SET ORCNT=$ORDER(^ORD(101.24,ORID,3,"C",9999),-1)
+10 IF $GET(ORCNT)=""
SET ROOT(0)="-1^No Columns for Report"
QUIT
+11 SET ORTN=$PIECE(^ORD(101.24,ORID,4),"^",6)
SET ORENT=$PIECE(^(4),"^",7)
+12 IF '$LENGTH(ORTN)
SET ROOT(0)="-1^No HDR Routine exists"
QUIT
+13 SET ORRTN=ORENT_"^"_ORTN
+14 IF '$LENGTH($TEXT(@ORRTN))
SET ROOT(0)="-1^HDR Routine non-existant"
QUIT
+15 DO @ORRTN
+16 QUIT
COM(NODE,C) ;Parse Comments
+1 if 'NODE
QUIT
if '$LENGTH($GET(C))
QUIT
+2 NEW I,J,P,D,B,DLIM,DLIM2,X
+3 SET DLIM="\X0a\"
SET DLIM2="|"
+4 FOR I=1:1:$LENGTH(C,DLIM)
SET B=$PIECE(C,DLIM,I)
FOR J=1:1:$LENGTH(B,DLIM2)
SET X=$PIECE(B,DLIM2,J)
SET D=""
Begin DoDot:1
+5 IF $PIECE(X," ")?8N.N1"-"4N
SET D=$$DATE^ORDVU($$SETDATE($PIECE(X," ")))
SET P=$PIECE(X," ",2,99)
DO XSET(NODE_"^"_D_" "_P)
+6 IF '$TEST
DO XSET(NODE_"^"_X)
End DoDot:1
+7 QUIT
ESCP(C) ; De-escape text
+1 if '$LENGTH($GET(C))
QUIT ""
+2 NEW HL,ORFS,ORCS,ORRS,ORES,ORSS
+3 SET HL("FS")="^"
SET HL("ECH")="~|\&"
+4 SET ORFS=$GET(HL("FS"))
SET ORCS=$EXTRACT($GET(HL("ECH")),1)
SET ORRS=$EXTRACT($GET(HL("ECH")),2)
SET ORES=$EXTRACT($GET(HL("ECH")),3)
SET ORSS=$EXTRACT($GET(HL("ECH")),4)
+5 QUIT $$REMESC(C)
REMESC(ORSTR) ;
+1 ; Remove Escape Characters from HL7 Message Text
+2 ; Escape Sequence codes:
+3 ; F = field separator (ORFS)
+4 ; S = component separator (ORCS)
+5 ; R = repitition separator (ORRS)
+6 ; E = escape character (ORES)
+7 ; T = subcomponent separator (ORSS)
+8 ; Hex codes:
+9 ; Xdddd = Hex Character translated according to ISO 8859-1 character set (1st 255 characters - 8 bit)
+10 NEW ORC,ORREP,I1,I2,J1,J2,K,VAL
+11 FOR ORC="F","S","R","E","T"
SET ORREP(ORES_ORC_ORES)=$SELECT(ORC="F":ORFS,ORC="S":ORCS,ORC="R":ORRS,ORC="E":ORES,ORC="T":ORSS)
+12 SET ORREP("|")=" "
SET ORSTR=$$REPLACE^XLFSTR(ORSTR,.ORREP)
+13 FOR
SET I1=$PIECE(ORSTR,ORES_"X")
if $LENGTH(I1)=$LENGTH(ORSTR)
QUIT
Begin DoDot:1
+14 SET I2=$PIECE(ORSTR,ORES_"X",2,99)
SET J1=$PIECE(I2,ORES)
+15 if '$LENGTH(J1)
QUIT
+16 SET J2=$PIECE(I2,ORES,2,99)
SET VAL=$$BASE^XLFUTL($$UP^XLFSTR(J1),16,10)
SET K=$SELECT(VAL>255:"?",1:$CHAR(VAL))
SET ORSTR=I1_K_J2
End DoDot:1
+17 QUIT ORSTR
XSET(X) ;Setup Allergy & Outpatient RX nodes
+1 if '$DATA(X)
QUIT
+2 SET CNT=CNT+1
SET ^TMP("ORXS1",$JOB,CNT)=$$ESCP(X)
+3 QUIT
SETDATE(X) ;Convert HDR Date to FM date
+1 if '$DATA(X)
QUIT ""
+2 if '$LENGTH(X)
QUIT ""
+3 NEW YEAR,DAY,MONTH,TIME,DOT
+4 SET YEAR=$EXTRACT(X,1,4)-1700
SET MONTH=$EXTRACT(X,5,6)
SET DAY=$EXTRACT(X,7,8)
SET TIME=$EXTRACT(X,9,14)
SET DOT="."
+5 IF TIME="0000"!(TIME="")
SET DOT=""
SET TIME=""
+6 SET X=YEAR_MONTH_DAY_DOT_TIME
+7 QUIT X