| [613] | 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; | 
|---|