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