[613] | 1 | VAFHLZMH ;BAY/JAT - Create HL7 Military History segment (ZMH) ; 11/20/00 2:14pm
|
---|
| 2 | ;;5.3;Registration;**190,314,673**;Aug 13, 1993
|
---|
| 3 | ;
|
---|
| 4 | ; This routine creates HL7 VA-specific Military History ("ZMH") segments
|
---|
| 5 | Q
|
---|
| 6 | ;
|
---|
| 7 | EN(DFN,VAFHMIEN,VAFSTR) ; RAI/MDS Reserved entry point!!
|
---|
| 8 | ; !!!!!!!!!! don't enter here !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
---|
| 9 | ;DFN - Patient Internal Entry Number
|
---|
| 10 | ;VAFHMIEN - Patient Movement Internal Entry Number
|
---|
| 11 | ;VAFSTR - Sequence numbers to be included
|
---|
| 12 | ;
|
---|
| 13 | N VAFHLREC,VAFHA,VAFHSUB,VAFHADD,VAFHLOC S VAFHSUB="" ;Initialize variables
|
---|
| 14 | S $P(VAFHLREC,HL("FS"))="ZMH" ;Set segment ID to ZMH
|
---|
| 15 | S $P(VAFHLREC,HL("FS"),2)=1 ;Set Set ID to 1
|
---|
| 16 | I VAFSTR[",4," S $P(VAFHLREC,HL("FS"),5)=$$HLDATE^HLFNC($$GET1^DIQ(2,DFN,".326","I"))_$E(HL("ECH"))_$$HLDATE^HLFNC($$GET1^DIQ(2,DFN,".327","I")) ;Last Service Entry and Separation dates
|
---|
| 17 | Q VAFHLREC ;Quit and return formatted segment
|
---|
| 18 | ;
|
---|
| 19 | ENTER(DFN,VAFARRAY,VAFTYPE,VAFSTR,VAFHLS,VAFHLC,VAFHLQ) ;
|
---|
| 20 | ; DFN is the only required parameter. Defaults are used if no
|
---|
| 21 | ; values are passed for the other parameters.
|
---|
| 22 | ; Output:
|
---|
| 23 | ; VAFARRAY = array name to hold the "ZMH" segments.
|
---|
| 24 | ; Default is ^TMP("VAFHLZMH",$J)
|
---|
| 25 | ; Input:
|
---|
| 26 | ; DFN = internal entry number (IEN) of Patient (#2) file
|
---|
| 27 | ; VAFTYPE = Military History type desired (separated by commas) where
|
---|
| 28 | ; 1=Last Service branch (SL)
|
---|
| 29 | ; 2=Next to last Service branch (SNL)
|
---|
| 30 | ; 3=Next to next to last Service branch (SNNL)
|
---|
| 31 | ; 4=Prisoner of War Status indicated? (POW)
|
---|
| 32 | ; 5=Combat Service indicated? (COMB)
|
---|
| 33 | ; 6=Vietnam Service indicated? (VIET)
|
---|
| 34 | ; 7=Lebanon Service indicated? (LEBA)
|
---|
| 35 | ; 8=Grenada Service indicated? (GREN)
|
---|
| 36 | ; 9=Panama Service indicated? (PANA)
|
---|
| 37 | ; 10=Persian Gulf Service indicated? (GULF)
|
---|
| 38 | ; 11=Somalia Service indicated? (SOMA)
|
---|
| 39 | ; 12=Yugoslavia Service indicated? (YUGO)
|
---|
| 40 | ; 13=Purple Heart Receipient? (PH)
|
---|
| 41 | ; 14=Operation Enduring/Iraqi Freedom (OEIF)
|
---|
| 42 | ; A range of numbers separated by colons can be sent
|
---|
| 43 | ; (e.g. 1:4,8,10:12)
|
---|
| 44 | ; Default is all(1,2,3...)
|
---|
| 45 | ; VAFSTR = Fields (sequence numbers) desired (separated by comma) where
|
---|
| 46 | ; 3=qualifier #1 (Service branch if VAFTYPE is 1,2 or 3
|
---|
| 47 | ; or Yes/No response if VAFTYPE is 4 thru 13)
|
---|
| 48 | ; qualifier #2 (Service number if VAFTYPE is 1,2 or 3
|
---|
| 49 | ; or Location if VAFTYPE is 4 or 5)
|
---|
| 50 | ; or
|
---|
| 51 | ; qualifier #3 (Service discharge type if VAFTYPE is 1,2
|
---|
| 52 | ; or 3)
|
---|
| 53 | ; 4=From/To Date range for each VAFTYPE
|
---|
| 54 | ; 5=Service Component
|
---|
| 55 | ; Default is 3,4,5
|
---|
| 56 | ; VAFHLS = HL7 field separator (1 character)
|
---|
| 57 | ; Default is ^ (carrot)
|
---|
| 58 | ; VAFHLC = HL7 encoding characters (4 characters must be supplied)
|
---|
| 59 | ; Default is ~|\& (tilde bar backslash ampersand)
|
---|
| 60 | ; VAFHLQ = HL7 null designation
|
---|
| 61 | ; Default is "" (quote quote)
|
---|
| 62 | ;
|
---|
| 63 | ; Check input and apply default values as needed
|
---|
| 64 | S VAFARRAY=$G(VAFARRAY) I VAFARRAY="" S VAFARRAY=$NA(^TMP("VAFHLZMH",$J))
|
---|
| 65 | K @VAFARRAY
|
---|
| 66 | S VAFTYPE=$G(VAFTYPE) I VAFTYPE="" S VAFTYPE="1,2,3,4,5,6,7,8,9,10,11,12,13,14"
|
---|
| 67 | S VAFSTR=$G(VAFSTR) I VAFSTR="" S VAFSTR="3,4,5"
|
---|
| 68 | S VAFHLS=$G(VAFHLS) I VAFHLS="" S VAFHLS="^"
|
---|
| 69 | S:($L(VAFHLS)'=1) VAFHLS="^"
|
---|
| 70 | S VAFHLC=$G(VAFHLC) I VAFHLC="" S VAFHLC="~|\&"
|
---|
| 71 | S:($L(VAFHLC)'=4) VAFHLC="~|\&"
|
---|
| 72 | S:('$D(VAFHLQ)) VAFHLQ=$C(34,34)
|
---|
| 73 | I '$G(DFN) D NOGO Q
|
---|
| 74 | I '$D(^DPT(DFN,0)) D NOGO Q
|
---|
| 75 | S VAFSTR=$TR(VAFSTR,":",",")
|
---|
| 76 | I VAFSTR'=3,VAFSTR'=4,VAFSTR'=5,VAFSTR'="3,4",VAFSTR'="3,5",VAFSTR'="4,5",VAFSTR'="3,4,5" D NOGO Q
|
---|
| 77 | S VAFSTR=","_VAFSTR_","
|
---|
| 78 | I '$$EDIT(VAFTYPE) D NOGO Q
|
---|
| 79 | I VAFTYPE[":" D UNCRUNCH
|
---|
| 80 | ; it's a Go
|
---|
| 81 | N VAFY,VAFX,VAFZ,VAFINDX,VAFTAG
|
---|
| 82 | S VAFINDX=0
|
---|
| 83 | ; set all the Patient file nodes that may be needed
|
---|
| 84 | N VAF32N,VAF321N,VAF322N,VAF52N,VAF53N,VAF3291N
|
---|
| 85 | S VAF32N=$G(^DPT(DFN,.32)) ; used for Service branches
|
---|
| 86 | S VAF321N=$G(^DPT(DFN,.321)) ; used for Vietnam
|
---|
| 87 | S VAF322N=$G(^DPT(DFN,.322)) ; used for minor skirmishes
|
---|
| 88 | S VAF3291N=$G(^DPT(DFN,.3291)) ;used for service component
|
---|
| 89 | S VAF52N=$G(^DPT(DFN,.52)) ; used for POW and Combat
|
---|
| 90 | S VAF53N=$G(^DPT(DFN,.53)) ;used for Purple Heart
|
---|
| 91 | ;used for Operation Enduring/Iraqi Freedom
|
---|
| 92 | N VAFOPS,VAFREC,VAFSUB
|
---|
| 93 | S (VAFREC,VAFSUB)=0
|
---|
| 94 | ;set operations into local array since there may be mult OEIF episodes
|
---|
| 95 | F S VAFREC=$O(^DPT(DFN,.3215,VAFREC)) Q:'$G(VAFREC) D
|
---|
| 96 | . S VAFSUB=VAFSUB+1
|
---|
| 97 | . S VAFOPS(VAFSUB)=$G(^DPT(DFN,.3215,VAFREC,0))
|
---|
| 98 | ;
|
---|
| 99 | D ENTER^VAFHLZM1
|
---|
| 100 | ;
|
---|
| 101 | Q
|
---|
| 102 | ;
|
---|
| 103 | EDIT(X) ; function validates VAFTYP (returns 1 if valid)
|
---|
| 104 | N P,Q,R,CNT,Z,Z1,Z2,ERR S ERR=0
|
---|
| 105 | S X=$G(X)
|
---|
| 106 | I X>0,X<15,X?.N Q 1 ; only 1 number and between 1-14
|
---|
| 107 | I X'[":",X'["," Q 0 ; comma not used as separator
|
---|
| 108 | I X'?.NP Q 0 ; contains letters or control characters
|
---|
| 109 | ; contains punctuation other than comma/colon
|
---|
| 110 | S P="!#$%&'()*+-./;<=>?@[\]^_`{|]~"
|
---|
| 111 | F CNT=1:1 S Z=$E(X,CNT) Q:Z="" I P[Z S ERR=1 Q
|
---|
| 112 | I ERR=1 Q 0
|
---|
| 113 | S Q="",R=""""
|
---|
| 114 | I Q[X!R[X Q 0
|
---|
| 115 | ; checks that numbers are >0<15
|
---|
| 116 | F CNT=1:1 S Z=$P(X,",",CNT) Q:Z="" D
|
---|
| 117 | .I Z'[":",Z>0,Z<15 Q
|
---|
| 118 | .S Z1=$P(Z,":",1),Z2=$P(Z,":",2)
|
---|
| 119 | .I Z1>0,Z1<15,Z2>0,Z2<15 Q
|
---|
| 120 | .S ERR=1
|
---|
| 121 | I ERR=1 Q 0
|
---|
| 122 | Q 1
|
---|
| 123 | ;
|
---|
| 124 | UNCRUNCH ; reformat VAFTYPE by translating any range of numbers,
|
---|
| 125 | ; for example replace "1:3,6,9:11" by "1,2,3,6,9,10,11,"
|
---|
| 126 | N X,Y,Z,A,B S Y=""
|
---|
| 127 | F X=1:1 S Z=$P(VAFTYPE,",",X) Q:Z="" D
|
---|
| 128 | .I Z'[":" S Y=Y_Z_"," Q
|
---|
| 129 | .S A=$P(Z,":",1),B=$P(Z,":",2)
|
---|
| 130 | .S Y=Y_A_","
|
---|
| 131 | .F S A=A+1 Q:A>B S Y=Y_A_","
|
---|
| 132 | S VAFTYPE=Y
|
---|
| 133 | Q
|
---|
| 134 | NOGO ;
|
---|
| 135 | S @VAFARRAY@(1,0)="ZMH"_VAFHLS_1
|
---|
| 136 | Q
|
---|