Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: OCXOHL7

OCXOHL7.m

Go to the documentation of this file.
  1. OCXOHL7 ;SLC/RJS,CLA - External Interface - PROCESS HL7 DATA ARRAY ;4/02/03 13:50
  1. ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32,179**;Dec 17,1997
  1. ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
  1. ;
  1. ;
  1. Q
  1. SILENT(OCXMSG,OUTMSG) ;
  1. ;
  1. N OCXSEG0,OCXRDT,OCXHL7,OCXOZZT
  1. S OCXRDT=($H*86400+$P($H,",",2))
  1. S:'$D(OUTMSG) OUTMSG=""
  1. D CHECK(.OCXMSG,.OUTMSG)
  1. Q
  1. ;
  1. VERBOSE(OCXMSG) ;
  1. ;
  1. N OCXSEG0,OCXX,OUTMSG,OCXHL7,OCXOZZT
  1. S OCXRDT=($H*86400+$P($H,",",2))
  1. S OUTMSG=""
  1. D CHECK(.OCXMSG,.OUTMSG)
  1. W:$O(OUTMSG(0)) !,"Order Check Message: ",$C(7)
  1. S OCXX=0 F S OCXX=$O(OUTMSG(OCXX)) Q:'OCXX W !,OUTMSG(OCXX)
  1. W:$O(OUTMSG(0)) !,$C(7)
  1. Q
  1. ;
  1. CHECK(OCXMSG,OUTMSG) ;
  1. ;
  1. N OCXARY,OCXDFN,OCXEL,OCXODATA,OCXOLOG,OCXOSRC,OCXDSIZE
  1. N OCXOTIME,OCXQUIT,OCXSEG0,OCXSEQ,OCXSUB,OCXTEST,OCXVAR
  1. ;
  1. I $$RTEST D Q
  1. .N OMSG,OTMOUT,OCXM
  1. .S OMSG="^25^^Order Checking is recompiling and momentarily disabled"
  1. .S OCXM=0 F S OCXM=$O(OUTMSG(OCXM)) Q:'OCXM Q:(OUTMSG(OCXM)[OMSG)
  1. .Q:OCXM
  1. .S OUTMSG($O(OUTMSG(""),-1)+1)=OMSG
  1. ;
  1. S OCXARY=$S($L($G(OCXMSG)):OCXMSG,1:"OCXMSG") Q:'$O(@OCXARY@(0))
  1. ;
  1. S (OCXQUIT,OCXSUB)=0 F S OCXSUB=$O(@OCXARY@(OCXSUB)) Q:'OCXSUB I ($P($G(@OCXARY@(OCXSUB)),"|",1)="ORC") D Q
  1. .S:($P($P($G(@OCXARY@(OCXSUB)),"|",2),"^",1)="ZC") OCXQUIT=1
  1. ;
  1. Q:OCXQUIT
  1. ;
  1. S OCXOLOG=$$LOG(OCXARY)
  1. ;
  1. S OCXODATA="",OCXTEST=$G(OCXOVRD)
  1. ;
  1. S OCXVAR("DUZ")=""
  1. S OCXVAR("OCXMSG")=""
  1. S OCXVAR("OCXARY")=""
  1. S OCXOSRC="GENERIC HL7 MESSAGE ARRAY"
  1. ;
  1. S OCXSUB=0 F S OCXSUB=$O(@OCXARY@(OCXSUB)) Q:'OCXSUB D
  1. .N OCXLINE,OCXPC,X,OCXTDAT,OCXCLIN,LASTPC
  1. .S OCXDSIZE=$$ARYSIZE($NAME(@OCXARY@(OCXSUB)))
  1. .;
  1. .I (OCXDSIZE<5000) D Q:'$L($G(OCXLINE(0)))
  1. ..M OCXLINE(0)=@OCXARY@(OCXSUB)
  1. ..S OCXLINE(0,0)=OCXLINE(0) ; This will make first node consistent with continuation lines.
  1. ..S OCXSEG=$P($G(OCXLINE(0)),"|",1)
  1. .;
  1. .I (OCXDSIZE>4999) D Q:'$L($G(^TMP($J,"OCXLDATA",0)))
  1. ..K ^TMP($J,"OCXLDATA")
  1. ..M ^TMP($J,"OCXLDATA",0)=@OCXARY@(OCXSUB)
  1. ..S ^TMP($J,"OCXLDATA",0,0)=^TMP($J,"OCXLDATA",0) ; This will make first node consistent with continuation lines.
  1. ..S OCXSEG=$P($G(^TMP($J,"OCXLDATA",0)),"|",1)
  1. .;
  1. .Q:'$L(OCXSEG)
  1. .;
  1. .I $D(OCXODATA(OCXSEG)) D ; This is another instance of this segment.
  1. ..; Process current OCXODATA and reset OCXODATA for this new instance.
  1. ..; Process OCXODATA
  1. ..S OCXDFN=$$GETDFN(OCXARY) I $G(OCXDFN) D UPDATE^OCXOZ01(+OCXDFN,OCXOSRC,.OUTMSG)
  1. ..;
  1. ..; Reset OCXODATA
  1. ..S OCXSEQ=+$G(OCXODATA(OCXSEG)) F Q:'OCXSEQ D S OCXSEQ=$O(OCXODATA(OCXSEQ))
  1. ...S OCXSEG0=$G(OCXODATA(OCXSEQ)) Q:'$L(OCXSEG0)
  1. ...K OCXODATA(OCXSEQ),OCXODATA(OCXSEG0)
  1. .;
  1. .S OCXODATA(OCXSUB)=OCXSEG ; Set OCXODATA 'cross reference'
  1. .S OCXODATA(OCXSEG)=OCXSUB ; Set OCXODATA 'cross reference'
  1. .;
  1. .; Load this segment instance into OCXODATA
  1. .;
  1. .; OCXPC - Keeps track of which "|" piece we're on
  1. .;
  1. .I (OCXDSIZE<5000) D LOADATA(OCXSEG,"OCXLINE(0)")
  1. .;
  1. .I (OCXDSIZE>4999) D LOADATA(OCXSEG,$NAME(^TMP($J,"OCXLDATA",0)))
  1. ;
  1. S OCXDFN=$$GETDFN(OCXARY)
  1. I $G(OCXDFN) D UPDATE^OCXOZ01(+OCXDFN,OCXOSRC,.OUTMSG) I 1 ; Process OCXODATA for the last segment
  1. ;
  1. D FINISH^OCXOLOG(OCXOLOG)
  1. ;
  1. K ^TMP($J,"OCXLDATA")
  1. ;
  1. Q
  1. ;
  1. LOADATA(OCXSEG,OCXSD) ; Get '|' piece #OCXPC of OCXSD Segment Data array.
  1. ;
  1. N OCXTEXT,OCXPCNT,OCXD0,OCXD1
  1. ;
  1. Q:'$L(OCXSEG)
  1. S OCXPCNT=0,OCXD0="" F S OCXD0=$O(@OCXSD@(OCXD0)) Q:'$L(OCXD0) D
  1. .S OCXTEXT=$G(@OCXSD@(OCXD0))
  1. .F OCXD1=1:1:$L(OCXTEXT) D
  1. ..I ($E(OCXTEXT,OCXD1)="|") S OCXPCNT=OCXPCNT+1 Q
  1. ..I ($L($G(OCXODATA(OCXSEG,OCXPCNT)))<241) S OCXODATA(OCXSEG,OCXPCNT)=$G(OCXODATA(OCXSEG,OCXPCNT))_$E(OCXTEXT,OCXD1)
  1. ;
  1. Q
  1. ;
  1. RTEST() ; Does ^OCXOZ01 exist ?? Is it currently being compiled ??
  1. N DATE,TMOUT
  1. Q:'$L($T(^OCXOZ01)) 1
  1. I '($P($G(^OCXD(861,1,0)),U,1)="SITE PREFERENCES") K ^OCXD(861,1) S ^OCXD(861,1,0)="SITE PREFERENCES"
  1. S DATE=$P($G(^OCXD(861,1,0)),U,3)
  1. I DATE,((+DATE)=(+$H)),(((+$P($H,",",2))-(+$P(DATE,",",2)))<1800) Q 1
  1. Q 0
  1. ;
  1. LOG(OCXARY) ;
  1. ; Log Data Messages
  1. ;
  1. I $G(OCXTRACE),$$CDATA^OCXOZ01 W:$G(OCXTRACE) !," Raw Input Data: ",! D ZW(OCXARY) Q 0
  1. Q:'$L($T(LOG^OCXOZ01)) 0 Q:'$$LOG^OCXOZ01 0
  1. N OCXDFN,OCXNL
  1. I '$O(@OCXARY@(0)) S OCXARY="OCXNL",OCXNL(1)="Null HL7 Data Array Found"
  1. S OCXDFN=$$GETDFN(OCXARY)
  1. Q $$NEW^OCXOLOG(OCXARY,"HL7",+$G(DUZ),+OCXDFN)
  1. ;
  1. ARYSIZE(ARY) ; Get array size (Local or Global)
  1. ;
  1. N ARY1,SIZE
  1. ;
  1. S SIZE=0
  1. ;
  1. I '(ARY["^") F S ARY=$Q(@ARY) Q:'$L(ARY) S SIZE=SIZE+$L(@ARY)
  1. ;
  1. I (ARY["^") D
  1. .S ARY=$NAME(@ARY),ARY1=ARY
  1. .S:($E(ARY,$L(ARY))=")") ARY=$E(ARY,1,$L(ARY)-1)_","
  1. .F S ARY1=$Q(@ARY1) Q:'$L(ARY1) Q:'(ARY1[ARY) S SIZE=SIZE+$L(@ARY1)
  1. ;
  1. Q SIZE
  1. ;
  1. ZW(ARY) ; ZWrite an array (Local or Global)
  1. ;
  1. N ARY1
  1. ;
  1. I '(ARY["^") D Q
  1. .F S ARY=$Q(@ARY) Q:'$L(ARY) W !,ARY," = ",@ARY
  1. ;
  1. I (ARY["^") D Q
  1. .S ARY=$NAME(@ARY),ARY1=ARY
  1. .S:($E(ARY,$L(ARY))=")") ARY=$E(ARY,1,$L(ARY)-1)_","
  1. .F S ARY1=$Q(@ARY1) Q:'$L(ARY1) Q:'(ARY1[ARY) W !,ARY1," = ",@ARY1
  1. ;
  1. Q
  1. ;
  1. ERROR Q
  1. ;
  1. ; **** Old Labels to insure backwards compatibility ****
  1. ;
  1. ;
  1. GETDFN(ARRAY) ; Returns the patient IEN from file 2.
  1. ;
  1. N OCXNDX,OCXARY,OCXP1,OCXP2,OCXP3
  1. S OCXARY=$S($L($G(ARRAY)):ARRAY,1:"ARRAY")
  1. S OCXNDX=0 F S OCXNDX=$O(@OCXARY@(OCXNDX)) Q:'OCXNDX I $P($G(@OCXARY@(OCXNDX)),"|",1)="PID" Q
  1. Q:'OCXNDX 0
  1. ;
  1. S OCXP1=$P($G(@OCXARY@(OCXNDX)),"|",4)
  1. S OCXP2=$P($G(@OCXARY@(OCXNDX)),"|",5)
  1. S OCXP3=$P($G(@OCXARY@(OCXNDX)),"|",6)
  1. ;
  1. Q:(OCXP2["DPT(") +OCXP2
  1. ;
  1. I $L(OCXP3),($P($G(^DPT(+OCXP1,0)),U,1)=OCXP3) Q +OCXP1
  1. ;
  1. Q 0
  1. ;
  1. ; Old line label area.
  1. ;
  1. PROC(OCXMSG,OUTMSG) ;
  1. D SILENT(.OCXMSG,.OUTMSG)
  1. Q
  1. ;
  1. EN(OCXMSG) ;
  1. D VERBOSE(.OCXMSG)
  1. Q
  1. ;