| 1 | SCMCHLS ;BPOI/DJB - PCMM HL7 Segment Utils;12/13/99 | 
|---|
| 2 | ;;5.3;Scheduling;**177,210,212,293,515,524**;08/13/93;Build 29 | 
|---|
| 3 | ; | 
|---|
| 4 | ;Ref rtn: SCDXMSG1 | 
|---|
| 5 | ; | 
|---|
| 6 | ;--> Build HL7 segments | 
|---|
| 7 | BLDEVN ;Build EVN segment | 
|---|
| 8 | S VAFEVN=$$EN^VAFHLEVN(EVNTHL7,EVNTDATE,VAFSTR,HL("Q"),HL("FS")) | 
|---|
| 9 | Q | 
|---|
| 10 | BLDPID ;Build PID segment | 
|---|
| 11 | ;S VAFPID=$$EN^VAFHLPID(DFN,VAFSTR) | 
|---|
| 12 | S VAFPID=$$EN^VAFCPID(DFN,VAFSTR) ;Use CIRN version | 
|---|
| 13 | D SETMAR^SCMSVUT0(.VAFPID,HL("Q"),HL("FS")) | 
|---|
| 14 | Q | 
|---|
| 15 | BLDZPC ;Build ZPC segment | 
|---|
| 16 | ;djb/bp Patch 210. Sequentially number multiple ZPC segments. | 
|---|
| 17 | ;new code begin | 
|---|
| 18 | S SCSEQ=$G(SCSEQ)+1 ;Increment ZPC sequence number. | 
|---|
| 19 | ; S VAFZPC=$$ZPC^SCMCHLZ("",ID,DATA,SCSEQ) | 
|---|
| 20 | S VAFZPC=$$ZPC^SCMCHLZ("",.ID,.DATA,SCSEQ) | 
|---|
| 21 | ;new code end | 
|---|
| 22 | ;old code begin | 
|---|
| 23 | ;S VAFZPC=$$ZPC^SCMCHLZ("",ID,DATA) | 
|---|
| 24 | ;old code end | 
|---|
| 25 | Q | 
|---|
| 26 | ; | 
|---|
| 27 | ;--> Copy HL7 segments into HL7 message | 
|---|
| 28 | CPYEVN ;Copy EVN segment | 
|---|
| 29 | ;Add 1 as 3rd subscript so number of subscripts matches ZPC segment | 
|---|
| 30 | M @XMITARRY@(SUB,SEGNAME,1)=VAFEVN | 
|---|
| 31 | Q | 
|---|
| 32 | CPYPID ;Copy PID segment | 
|---|
| 33 | ;Add 1 as 3rd subscript so number of subscripts matches ZPC segment | 
|---|
| 34 | M @XMITARRY@(SUB,SEGNAME,1)=VAFPID | 
|---|
| 35 | Q | 
|---|
| 36 | CPYZPC ;Copy ZPC segment | 
|---|
| 37 | ; PATCH 515 DLL USE ORIG TRIG | 
|---|
| 38 | ; old code = M @XMITARRY@($P(ID,"-",1),"ZPC",ID)=VAFZPC | 
|---|
| 39 | M @XMITARRY@(SUB,"ZPC",ID)=VAFZPC  ; og/sd/524 | 
|---|
| 40 | Q | 
|---|
| 41 | ; | 
|---|
| 42 | ;--> Delete HL7 segment variables | 
|---|
| 43 | DELEVN ;Delete EVN variable | 
|---|
| 44 | KILL VAFEVN | 
|---|
| 45 | Q | 
|---|
| 46 | DELPID ;Delete PID variable | 
|---|
| 47 | KILL VAFPID | 
|---|
| 48 | Q | 
|---|
| 49 | DELZPC ;Delete ZPC variable | 
|---|
| 50 | KILL VAFZPC | 
|---|
| 51 | Q | 
|---|
| 52 | ; | 
|---|
| 53 | SEGMENTS(EVNTTYPE,SEGARRY) ;Build list of HL7 segments for a given event type | 
|---|
| 54 | ; | 
|---|
| 55 | ; Input: EVNTTYPE - Event type to build list for A08 & A23 are the | 
|---|
| 56 | ;                   only types currently supported. | 
|---|
| 57 | ;                   Default=A08 | 
|---|
| 58 | ;         SEGARRY - Array to place output in (full global reference) | 
|---|
| 59 | ;                   Defaul=^TMP("SCMC SEGMENTS",$J) | 
|---|
| 60 | ;Output: SEGARRY(Seq,Name)=Fields | 
|---|
| 61 | ;             Seq - Sequence number to order segments as they should | 
|---|
| 62 | ;                   be placed in the HL7 message. | 
|---|
| 63 | ;            Name - Name of HL7 segment. | 
|---|
| 64 | ;          Fields - List of fields used by PCMM. VAFSTR would be set | 
|---|
| 65 | ;                   to this value. | 
|---|
| 66 | ;  Note: MSH segment is not included | 
|---|
| 67 | ; | 
|---|
| 68 | ;Check input | 
|---|
| 69 | S EVNTTYPE=$G(EVNTTYPE) | 
|---|
| 70 | S:(EVNTTYPE'="A23") EVNTTYPE="A08" | 
|---|
| 71 | S SEGARRY=$G(SEGARRY) | 
|---|
| 72 | S:(SEGARRY="") SEGARRY="^TMP(""SCMC SEGMENTS"","_$J_")" | 
|---|
| 73 | ; | 
|---|
| 74 | ;Segments used by A08 | 
|---|
| 75 | S @SEGARRY@(1,"EVN")="1,2" | 
|---|
| 76 | S @SEGARRY@(2,"PID")="1,2,3,4,5,6,7,8,10N,11,12,13,14,16,17,19,22" | 
|---|
| 77 | S @SEGARRY@(3,"ZPC")="1,2,3,4,5,6,8" ;bp/ar and alb/rpm Patch 212 | 
|---|
| 78 | Q | 
|---|
| 79 | ; | 
|---|
| 80 | UNWIND(XMITARRY,INSRTPNT) ;Remove all data that was put into transmit array. | 
|---|
| 81 | ; | 
|---|
| 82 | ; Input: XMITARRY - Array containing HL7 message (full global ref). | 
|---|
| 83 | ;                   Default=^TMP("HLS",$J). | 
|---|
| 84 | ;        INSRTPNT - Where to begin deletion from. | 
|---|
| 85 | ;                   Default=1 | 
|---|
| 86 | ;Output: None | 
|---|
| 87 | ; | 
|---|
| 88 | ;Check input | 
|---|
| 89 | S:$G(XMITARRY)="" XMITARRY="^TMP(""HLS"","_$J_")" | 
|---|
| 90 | S:$G(INSRTPNT)="" INSRTPNT=1 | 
|---|
| 91 | ; | 
|---|
| 92 | ;Remove insertion point from array | 
|---|
| 93 | KILL @XMITARRY@(INSRTPNT) | 
|---|
| 94 | ;Remove everything from insertion point to end of array | 
|---|
| 95 | F  S INSRTPNT=$O(@XMITARRY@(INSRTPNT)) Q:INSRTPNT=""  KILL @XMITARRY@(INSRTPNT) | 
|---|
| 96 | ;Done | 
|---|
| 97 | Q | 
|---|
| 98 | COUNT(VALER) ;counts the number of errored encounters found. | 
|---|
| 99 | ; | 
|---|
| 100 | ; Input: VALER - Array containing error messages. | 
|---|
| 101 | ;Output: Number of errors | 
|---|
| 102 | ; | 
|---|
| 103 | NEW VAR,CNT | 
|---|
| 104 | S CNT=0 | 
|---|
| 105 | S VAR="" | 
|---|
| 106 | F  S VAR=$O(@VALER@(VAR)) Q:VAR']""  S CNT=CNT+1 | 
|---|
| 107 | Q CNT | 
|---|