1 | LRBLB ;AVAMC/REG/CRT - BLOOD BANK BAR CODE READER ; 12/5/00 11:16am
|
---|
2 | ;;5.2;LAB SERVICE**247,267**;Sep 27, 1994
|
---|
3 | ;Per VHA Directive 97-033 this routine should not be modified. Medical Device # BK970021
|
---|
4 | X S X=$E(X,LR,$L(X)),A=$E(X),B=$E(X,$L(X)) Q
|
---|
5 | W W ?32,"(Bar code)" Q
|
---|
6 | STRIP(X) ; Strip off any ISBT-128 barcode identifier characters
|
---|
7 | S X=$TR(X,"=<>&%(","")
|
---|
8 | Q X
|
---|
9 | ;
|
---|
10 | U ;from LRBLDRR, LRBLJLG
|
---|
11 | I $$ISBTUID(.X) Q
|
---|
12 | S X=$$STRIP(X)
|
---|
13 | D X I 'LR(3),X?7N S A=+$E(X,1,2),B=A\20,B=$E("FGKL",B),A=A#20+1,A=$E("CEFGHJKLMNPQRSTVWXYZ",A),A=B_A S X=A_$E(X,3,7)
|
---|
14 | D W W ?45,"UNIT ID: ",X Q
|
---|
15 | Q
|
---|
16 | A ;ABO/RH GROUPING
|
---|
17 | N XX ; used to preserve original value to redisplay if invalid
|
---|
18 | D ISBTBG(X,.LRABO,.LRRH)
|
---|
19 | I LRABO]"" D W,EN^DDIOL("ABO/Rh: "_LRABO_" "_LRRH,"","?47") Q
|
---|
20 | S XX=$$STRIP(.X)
|
---|
21 | D X I X?3N,$E(X,3)=0 S A=$T(@(+$E(X,1,2))),X=$P(A,";",3) I X="" K X W XX Q:'$D(X) D W W ?46,"ABO/Rh: ",X S LRABO=$P(X," "),LRRH=$P(X," ",2) Q
|
---|
22 | Q
|
---|
23 | P ;PRODUCT CODE
|
---|
24 | I $$ISBTPC(.X) Q
|
---|
25 | S X=$$STRIP(X)
|
---|
26 | D X
|
---|
27 | I X?7N&(A=0!(A=3))&(B=3) D
|
---|
28 | .S X=$E(X,2,6),Y=0
|
---|
29 | .D W,C
|
---|
30 | E W X
|
---|
31 | Q
|
---|
32 | C N XX S XX=X K X S X=XX ; need to remove leftover X subnodes!!
|
---|
33 | F A=1:1 S Y=$O(^LAB(66,"D",X,Y)) Q:'Y S X(A)=Y_"^"_^LAB(66,Y,0)
|
---|
34 | I A=2 S W(4)=+X(1),P=$P(X(1),U,2),W(9)=$P(X(1),U,20),LRV=$P(X(1),U,11),LRJ=$P(X(1),U,26),X=P W !?24,P Q
|
---|
35 | W ! S Y=0 F A=0:1 S Y=$O(X(Y)) Q:'Y W !?2,Y,")",?5,$P(X(Y),U,2)
|
---|
36 | I A=0 D K X Q
|
---|
37 | .W !!?28,"Product Code '",X,"' not found."
|
---|
38 | .W !?28,"Please add to the Blood Product File"
|
---|
39 | H W !,"CHOOSE 1-",A,": " R X:DTIME I X=""!(X[U) K X Q
|
---|
40 | I X<1!(X>A) W $C(7) G H
|
---|
41 | S W(4)=+X(X),P=$P(X(X),U,2),W(9)=$P(X(X),U,20),LRV=$P(X(X),U,11),LRJ=$P(X(X),U,26),X=P W ?25,P Q
|
---|
42 | R ;FDA REG #
|
---|
43 | D X I X?9N&(B=1)&(A=0!(A=1)) S X=$E(X,2,8) D W W !?2,"Registration number: ",X Q
|
---|
44 | Q
|
---|
45 | D ;DATE CODE
|
---|
46 | I $$ISBTED(.X) Q
|
---|
47 | S X=$$STRIP(X)
|
---|
48 | D X I X'?6N&(X'?8N) W X Q
|
---|
49 | S %DT="" D ^%DT S W(6)=Y I Y<1 K X Q
|
---|
50 | D D^LRU D W W ?44,"Exp date: ",Y Q
|
---|
51 | BAR ;TEST BAR CODE READER
|
---|
52 | S LR="" W !!?28,"To use BAR CODE READER",!?15,"Pass reader wand over a GROUP-TYPE (ABO/Rh) label",! S X=$$READ("=>",25) Q:X=""!(X["^") W " (bar code)"
|
---|
53 | D ISBTBG(X,.LRABO,.LRRH) I LRABO]"" D Q
|
---|
54 | .S LR=1,LR(2)=""
|
---|
55 | .W " ",LRABO," ",LRRH
|
---|
56 | S X=$$STRIP(X)
|
---|
57 | F A=1:1 S Y=$P($T(G+A),";",4) Q:Y="" S X(1)=$F(X,Y) I X(1),$L(X)<X(1) S LR=$L(X)-3,LR(2)=$E(X,1,LR),LR=LR+1 Q
|
---|
58 | I LR="" W $C(7),!!?28,"Not a GROUP-TYPE label",!?15,"Press <RETURN> key if BAR CODE READER is not used",! G BAR
|
---|
59 | W " ",$P($T(G+A),";",3) K X Q
|
---|
60 | ;
|
---|
61 | T ;from LRBLDRR1, LRBLJLG
|
---|
62 | F A=1:1 S Y=$P($T(G+A),";",3) Q:Y="" S:X=$E(Y,1,$L(X)) X(A)=Y
|
---|
63 | I $D(X)'=11 K X D S Q
|
---|
64 | K Y S Y=0 F A=1:1 S Y=$O(X(Y)) Q:'Y S Y(A)=X(Y) K X(Y)
|
---|
65 | I A=2 S LRABO=$P(Y(1)," ",1),LRRH=$P(Y(1)," ",2) W $E(Y(1),$L(X)+1,$L(Y(1))) Q
|
---|
66 | W ! S Y=0 F A=0:1 S Y=$O(Y(Y)) Q:'Y W !?2,Y,")",?5,Y(Y)
|
---|
67 | AG W !,"CHOOSE 1-",A,": " R X:DTIME I X=""!(X["^") K X Q
|
---|
68 | I X<1!(X>A) W $C(7) G AG
|
---|
69 | W " ",Y(X) S LRABO=$P(Y(X)," ",1),LRRH=$P(Y(X)," ",2) Q
|
---|
70 | S W !!,"Select from (NA=not applicable): " F A=1:1 W !?15,$P($T(G+A),";",3) Q:$T(G+A)=""
|
---|
71 | Q
|
---|
72 | ;
|
---|
73 | ISBTUID(LRBLIN) ; Check for and display valid ISBT-128 Unit Id
|
---|
74 | ; Valid codes are prefixed by "="
|
---|
75 | ;
|
---|
76 | ; INPUT : LRBLIN = input from Unit Id barcode label.
|
---|
77 | ; OUTPUT : Boolean
|
---|
78 | ;
|
---|
79 | Q:$E(LRBLIN,1,2)'?1"="1(1A,1N) 0
|
---|
80 | S LRBLIN=$E(LRBLIN,2,14)
|
---|
81 | S LRBLIN=$$UP^XLFSTR(LRBLIN) ; make uppercase
|
---|
82 | D W
|
---|
83 | D EN^DDIOL("UNIT ID: "_LRBLIN,"","?46")
|
---|
84 | Q 1
|
---|
85 | ;
|
---|
86 | ISBTBG(IN,LRBLABO,LRBLRH) ; Check for ISBT-128 valid Blood Group
|
---|
87 | ; and return ABO & Rh values
|
---|
88 | ; Valid codes are prefixed by "=%"
|
---|
89 | ;
|
---|
90 | ; INPUT : IN = input from Blood Group barcode label.
|
---|
91 | ; OUTPUT : LRBLABO (passed by reference) = ABO value
|
---|
92 | ; LRBLRH (passed by reference) = Rh value
|
---|
93 | ;
|
---|
94 | S (LRBLABO,LRBLRH)=""
|
---|
95 | Q:$L(IN)'>3
|
---|
96 | Q:$E(IN,1,2)'="=%"
|
---|
97 | S IN=$E(IN,3,4)
|
---|
98 | S LRABO=$S(90<IN&(IN<99):"O NEG",46<IN&(IN<55):"O POS",1<IN&(IN<10):"A NEG",57<IN&(IN<66):"A POS",12<IN&(IN<21):"B NEG",68<IN&(IN<77):"B POS",23<IN&(IN<32):"AB NEG",79<IN&(IN<88):"AB POS",1:"")
|
---|
99 | Q:LRABO=""
|
---|
100 | S LRBLRH=$P(LRBLABO," ",2)
|
---|
101 | S LRBLABO=$P(LRBLABO," ")
|
---|
102 | Q
|
---|
103 | ;
|
---|
104 | ISBTPC(LRBLIN) ; Check for and display valid ISBT-128 Product Code
|
---|
105 | ; Valid codes prefixed by "=<"
|
---|
106 | ;
|
---|
107 | ; INPUT : LRBLIN = input from Product Code barcode label
|
---|
108 | ; OUTPUT : Boolean
|
---|
109 | ;
|
---|
110 | Q:$E(LRBLIN,1,2)'="=<" 0
|
---|
111 | S LRBLIN=$E(LRBLIN,3,$L(LRBLIN))
|
---|
112 | S LRBLIN=$$UP^XLFSTR(LRBLIN)
|
---|
113 | S Y=0
|
---|
114 | S X=LRBLIN D W,C
|
---|
115 | ;I A=0 D
|
---|
116 | ;.D EN^DDIOL("Product Code not found.",,"!!?28")
|
---|
117 | ;.D EN^DDIOL("Please add to the Blood Product File",,"!?28")
|
---|
118 | Q 1
|
---|
119 | ;
|
---|
120 | ISBTED(LRBLIN) ; Check for and display valid ISBT-128 Expiration Date
|
---|
121 | ; Valid codes are prefixed by "&>"
|
---|
122 | ;
|
---|
123 | ; INPUT : LRBLIN = input from Expiration Date barcode label
|
---|
124 | ; OUTPUT : Boolean
|
---|
125 | ;
|
---|
126 | N X,Y
|
---|
127 | ;
|
---|
128 | Q:$E(LRBLIN,1,2)'="&>" 0
|
---|
129 | S LRBLIN=$E(LRBLIN,3,$L(LRBLIN))
|
---|
130 | S X=$$JULIAN(LRBLIN)
|
---|
131 | Q:'X 0
|
---|
132 | S (W(6),Y)=$P(X,".")_"."_$S($E(LRBLIN,7,10)]"":$E(LRBLIN,7,10),1:"2359")
|
---|
133 | D D^LRU,W
|
---|
134 | S LRBLIN=$E(Y,1,12)_"@"_$E(Y,14,18) ; Set LRBLIN to valid input
|
---|
135 | D EN^DDIOL("Exp date: "_Y,"","?45")
|
---|
136 | Q 1
|
---|
137 | ;
|
---|
138 | JULIAN(LRBLJD) ;; Julian Date Conversion
|
---|
139 | ;
|
---|
140 | ; INPUT : LRBLJD = Julian Date (format = CYYDDD)
|
---|
141 | ; If C=9 then 19YY, else 2CYY
|
---|
142 | ; DDD=number of days in year (eg 128 = MAY 8)
|
---|
143 | ; OUTPUT : FileMan date or 0 if invalid
|
---|
144 | ;
|
---|
145 | N X,%H,%T,%Y,%
|
---|
146 | ;
|
---|
147 | ; Put year only into FileMan format
|
---|
148 | S X=$S($E(LRBLJD)="9":1900,1:2000+($E(LRBLJD)*100))
|
---|
149 | S X=X+$E(LRBLJD,2,3)
|
---|
150 | S X=X-1700
|
---|
151 | S X=X_"0101"
|
---|
152 | ; Get $H value of Jan 1st
|
---|
153 | D H^%DTC
|
---|
154 | Q:'%H 0
|
---|
155 | ; Add days to $H value
|
---|
156 | S %H=%H+$E(LRBLJD,4,6)-1
|
---|
157 | ; Put date back into FileMan format
|
---|
158 | D YX^%DTC
|
---|
159 | Q +X
|
---|
160 | ;
|
---|
161 | READ(PROMPT,POS) ; This extrinsic function will be used to present a prompt that can receive input from a
|
---|
162 | ; scanner or manual data entry. This function returns the entire value of the input.
|
---|
163 | ;
|
---|
164 | N X
|
---|
165 | S:'$G(POS) POS=0
|
---|
166 | W ?POS,PROMPT
|
---|
167 | R X:DTIME
|
---|
168 | W $C(13),$J("",79),$C(13),$J("",POS),PROMPT
|
---|
169 | Q X
|
---|
170 | G ;;
|
---|
171 | 51 ;;O POS;510
|
---|
172 | 62 ;;A POS;620
|
---|
173 | 73 ;;B POS;730
|
---|
174 | 84 ;;AB POS;840
|
---|
175 | 95 ;;O NEG;950
|
---|
176 | 6 ;;A NEG;060
|
---|
177 | 17 ;;B NEG;170
|
---|
178 | 28 ;;AB NEG;280
|
---|
179 | 55 ;;O;550
|
---|
180 | 66 ;;A;660
|
---|
181 | 77 ;;B;770
|
---|
182 | 88 ;;AB;880
|
---|
183 | ;;NA NA;
|
---|