- LR7OU01 ;slc/dcm - Build HL7 Components ;8/11/97
- ;;5.2T9;LR;**1018**;Nov 17, 2004
- ;;5.2;LAB SERVICE;**121,187**;Sep 27, 1994
- ;
- ORC(COUNT) ;ORC segment
- ;X1 = Order Control (SN-backdoor new order, OC-Cancel, SC-on collection
- ; SC-collected, RE-completed) See table 119
- ;X2 = Lab Number
- ;X3 = Order Status (table 38)
- ;X4 = Quantity/Timing - Quantity^Interval^Duration^Start D/T^End D/T^Priority^Condition^Text^Conjunction
- ;X5 = Date ordered/entered
- ;X6 = Provider # (ptr to file 200)
- ;X7 = Order effective D/T
- ;X8 = Order Control Reason
- ;X9 = OE/RR Order #
- ;X10 = Entered by
- N ORC,CTR,ARAY
- S CTR=0,ARAY=""
- D BUILD("ORC|"),BUILD(X1_"|"_$S($L(X9):X9_"^OR",1:"")_"|"),BUILD(X2_"^||"),BUILD(X3_"||"),BUILD(X4_"||"),BUILD(X5_"|"),BUILD($$PERSON(X10)_"||")
- D BUILD($$PERSON(X6)_"|||"),BUILD(X7_"|"),BUILD(X8)
- M @MSG@(COUNT)=ARAY
- Q
- OBR(COUNT) ;OBR segment
- ;COUNT=Current count for MSG array
- ;X1 = Universal ID - ^^^ifn (from file 60)^Test Name^99_SectionID
- ; SectionID: LRT=Chem Hem Tox Micro AP, LRB=Bloodbank
- ;X2 = Observation D/T
- ;X3 = Specimen Action Code (table 65)
- ;X4 = Specimen Recieved D/T
- ;X5 = Specimen Source (table 70)
- ;X6 = Accession (Filler Field 1)
- ;X7 = Results reported or Status changed D/T
- ;X8 = Result Status (table 123)
- ;X9 = Quantity/timing
- ;X10 = Result copies to: location
- ;COBR = OBR counter
- N OBR,CTR,ARAY
- S CTR=0,ARAY=""
- D BUILD("OBR|"),BUILD(COBR_"|||"),BUILD(X1_"|||"),BUILD(X2_"||||"),BUILD(X3_"|||"),BUILD(X4_"|"),BUILD(X5_"|||||")
- D BUILD(X6_"||"),BUILD(X7_"|||"),BUILD(X8_"||"),BUILD(X9_"|"),BUILD(X10)
- M @MSG@(COUNT)=ARAY
- Q
- OBX(COUNT) ;OBX Result segment
- ;X1 = Value type (table 125)
- ;X2 = Observation ID - ^^^ifn (from file 60)^Test Name^99_SectionID
- ;X3 = Observation Sub-ID
- ;X4 = Result
- ;X5 = coded per table 36
- ;X6 = Reference Range
- ;X7 = Abnormal Flag (table 78)
- ;X8 = Observ Result Status (table 85)
- ;COBX = OBX Counter
- ;X10 = User Defined Access Checks
- ;X11 = Verified by
- N OBX,CTR,ARAY
- S CTR=0,ARAY=""
- D BUILD("OBX|"_COBX_"|"),BUILD(X1_"|"),BUILD(X2_"|"),BUILD(X3_"|"),BUILD(X4_"|"),BUILD(X5_"|"),BUILD(X6_"|"),BUILD(X7_"|||"),BUILD(X8_"||"),BUILD(X10_"||"),BUILD($$PERSON(X11))
- M @MSG@(COUNT)=ARAY
- Q
- NTE(ID,SOURCE,NODE,CTR) ;NTE Notes segment
- ;ID=SET ID
- ;SOURCE = Source of comment P=>Placer, L=>Filler, O=>Other system
- ;NODE=Local array with text in the form ARRAY( or ARRAY(I,
- ;CTR=Counter for 1st subscript in MSG(ctr) array
- Q:'$L(NODE) N NTE,FIRST,SUB,X,IFN
- S NTE="NTE|"_ID_"|"_SOURCE,IFN=0,FIRST=1
- F S IFN=$O(@(NODE_IFN_")")) Q:IFN<1 S X=@(NODE_IFN_")") D
- . I X["For Test: " Q ;Screen out unecessary test text
- . I FIRST S @MSG@(CTR)=NTE_"|"_X S FIRST=0,SUB=0 Q
- . S SUB=SUB+1,@MSG@(CTR,SUB)=X
- Q
- PERSON(X) ;Get person in external format
- I '$G(X) Q 0
- I '$D(^VA(200,+X,0)) Q X
- S X=+X_"^"_$P(^VA(200,+X,0),"^")
- Q X
- BUILD(FIELD) ;Build a segment
- ;FIELD=text/field to add to segment
- ;ARAY is built until length is >244 characters then
- ;ARAY(ifn) is created
- S:'$D(ARAY) ARAY="" Q:'$D(FIELD) Q:'$D(CTR)
- N IFN,X
- S X=$S($O(ARAY(0)):$O(ARAY(9999),-1),1:ARAY)
- S:$L(FIELD)>244 FIELD=$E(FIELD,1,244)
- I $L(FIELD)+$L(X)>244 S CTR=CTR+1,ARAY(CTR)=""
- S:CTR=0 ARAY=ARAY_FIELD
- S:CTR ARAY(CTR)=ARAY(CTR)_FIELD
- Q
- LR7OU01 ;slc/dcm - Build HL7 Components ;8/11/97
- +1 ;;5.2T9;LR;**1018**;Nov 17, 2004
- +2 ;;5.2;LAB SERVICE;**121,187**;Sep 27, 1994
- +3 ;
- ORC(COUNT) ;ORC segment
- +1 ;X1 = Order Control (SN-backdoor new order, OC-Cancel, SC-on collection
- +2 ; SC-collected, RE-completed) See table 119
- +3 ;X2 = Lab Number
- +4 ;X3 = Order Status (table 38)
- +5 ;X4 = Quantity/Timing - Quantity^Interval^Duration^Start D/T^End D/T^Priority^Condition^Text^Conjunction
- +6 ;X5 = Date ordered/entered
- +7 ;X6 = Provider # (ptr to file 200)
- +8 ;X7 = Order effective D/T
- +9 ;X8 = Order Control Reason
- +10 ;X9 = OE/RR Order #
- +11 ;X10 = Entered by
- +12 NEW ORC,CTR,ARAY
- +13 SET CTR=0
- SET ARAY=""
- +14 DO BUILD("ORC|")
- DO BUILD(X1_"|"_$SELECT($LENGTH(X9):X9_"^OR",1:"")_"|")
- DO BUILD(X2_"^||")
- DO BUILD(X3_"||")
- DO BUILD(X4_"||")
- DO BUILD(X5_"|")
- DO BUILD($$PERSON(X10)_"||")
- +15 DO BUILD($$PERSON(X6)_"|||")
- DO BUILD(X7_"|")
- DO BUILD(X8)
- +16 MERGE @MSG@(COUNT)=ARAY
- +17 QUIT
- OBR(COUNT) ;OBR segment
- +1 ;COUNT=Current count for MSG array
- +2 ;X1 = Universal ID - ^^^ifn (from file 60)^Test Name^99_SectionID
- +3 ; SectionID: LRT=Chem Hem Tox Micro AP, LRB=Bloodbank
- +4 ;X2 = Observation D/T
- +5 ;X3 = Specimen Action Code (table 65)
- +6 ;X4 = Specimen Recieved D/T
- +7 ;X5 = Specimen Source (table 70)
- +8 ;X6 = Accession (Filler Field 1)
- +9 ;X7 = Results reported or Status changed D/T
- +10 ;X8 = Result Status (table 123)
- +11 ;X9 = Quantity/timing
- +12 ;X10 = Result copies to: location
- +13 ;COBR = OBR counter
- +14 NEW OBR,CTR,ARAY
- +15 SET CTR=0
- SET ARAY=""
- +16 DO BUILD("OBR|")
- DO BUILD(COBR_"|||")
- DO BUILD(X1_"|||")
- DO BUILD(X2_"||||")
- DO BUILD(X3_"|||")
- DO BUILD(X4_"|")
- DO BUILD(X5_"|||||")
- +17 DO BUILD(X6_"||")
- DO BUILD(X7_"|||")
- DO BUILD(X8_"||")
- DO BUILD(X9_"|")
- DO BUILD(X10)
- +18 MERGE @MSG@(COUNT)=ARAY
- +19 QUIT
- OBX(COUNT) ;OBX Result segment
- +1 ;X1 = Value type (table 125)
- +2 ;X2 = Observation ID - ^^^ifn (from file 60)^Test Name^99_SectionID
- +3 ;X3 = Observation Sub-ID
- +4 ;X4 = Result
- +5 ;X5 = coded per table 36
- +6 ;X6 = Reference Range
- +7 ;X7 = Abnormal Flag (table 78)
- +8 ;X8 = Observ Result Status (table 85)
- +9 ;COBX = OBX Counter
- +10 ;X10 = User Defined Access Checks
- +11 ;X11 = Verified by
- +12 NEW OBX,CTR,ARAY
- +13 SET CTR=0
- SET ARAY=""
- +14 DO BUILD("OBX|"_COBX_"|")
- DO BUILD(X1_"|")
- DO BUILD(X2_"|")
- DO BUILD(X3_"|")
- DO BUILD(X4_"|")
- DO BUILD(X5_"|")
- DO BUILD(X6_"|")
- DO BUILD(X7_"|||")
- DO BUILD(X8_"||")
- DO BUILD(X10_"||")
- DO BUILD($$PERSON(X11))
- +15 MERGE @MSG@(COUNT)=ARAY
- +16 QUIT
- NTE(ID,SOURCE,NODE,CTR) ;NTE Notes segment
- +1 ;ID=SET ID
- +2 ;SOURCE = Source of comment P=>Placer, L=>Filler, O=>Other system
- +3 ;NODE=Local array with text in the form ARRAY( or ARRAY(I,
- +4 ;CTR=Counter for 1st subscript in MSG(ctr) array
- +5 IF '$LENGTH(NODE)
- QUIT
- NEW NTE,FIRST,SUB,X,IFN
- +6 SET NTE="NTE|"_ID_"|"_SOURCE
- SET IFN=0
- SET FIRST=1
- +7 FOR
- SET IFN=$ORDER(@(NODE_IFN_")"))
- IF IFN<1
- QUIT
- SET X=@(NODE_IFN_")")
- Begin DoDot:1
- +8 ;Screen out unecessary test text
- IF X["For Test: "
- QUIT
- +9 IF FIRST
- SET @MSG@(CTR)=NTE_"|"_X
- SET FIRST=0
- SET SUB=0
- QUIT
- +10 SET SUB=SUB+1
- SET @MSG@(CTR,SUB)=X
- End DoDot:1
- +11 QUIT
- PERSON(X) ;Get person in external format
- +1 IF '$GET(X)
- QUIT 0
- +2 IF '$DATA(^VA(200,+X,0))
- QUIT X
- +3 SET X=+X_"^"_$PIECE(^VA(200,+X,0),"^")
- +4 QUIT X
- BUILD(FIELD) ;Build a segment
- +1 ;FIELD=text/field to add to segment
- +2 ;ARAY is built until length is >244 characters then
- +3 ;ARAY(ifn) is created
- +4 IF '$DATA(ARAY)
- SET ARAY=""
- IF '$DATA(FIELD)
- QUIT
- IF '$DATA(CTR)
- QUIT
- +5 NEW IFN,X
- +6 SET X=$SELECT($ORDER(ARAY(0)):$ORDER(ARAY(9999),-1),1:ARAY)
- +7 IF $LENGTH(FIELD)>244
- SET FIELD=$EXTRACT(FIELD,1,244)
- +8 IF $LENGTH(FIELD)+$LENGTH(X)>244
- SET CTR=CTR+1
- SET ARAY(CTR)=""
- +9 IF CTR=0
- SET ARAY=ARAY_FIELD
- +10 IF CTR
- SET ARAY(CTR)=ARAY(CTR)_FIELD
- +11 QUIT