| 1 | LRWU4 ;DALOI/RWF - READ ACCESSION ;2/7/91  14:49 | 
|---|
| 2 | ;;5.2;LAB SERVICE;**128,153,201,271**;Sep 27, 1994 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Reference to ^DISV("LRACC") global supported by DBIA #510 | 
|---|
| 5 | ; | 
|---|
| 6 | ; Variable LRVBY set/used by routine LRVER to determine if user | 
|---|
| 7 | ; verifying by accession or UID. | 
|---|
| 8 | ; If variable LRVBY evaluates to 1 then only select by accession. | 
|---|
| 9 | ; If LRVBY<1 or undefined then lookup also by UID. | 
|---|
| 10 | ; | 
|---|
| 11 | EN ; | 
|---|
| 12 | N %,DIC,DIR,DIRUT,DUOUT,DTOUT,LRQUIT,LRX | 
|---|
| 13 | ; | 
|---|
| 14 | K LRNATURE | 
|---|
| 15 | S U="^",DT=$$DT^XLFDT,LRQUIT=0 | 
|---|
| 16 | F  D AA Q:LRQUIT | 
|---|
| 17 | Q | 
|---|
| 18 | ; | 
|---|
| 19 | ; | 
|---|
| 20 | AA ; | 
|---|
| 21 | S DIR(0)="FO^1:30",DIR("A")="Select Accession"_$S($G(LRVBY)=1:"",1:" or UID") | 
|---|
| 22 | S DIR("?")="^D QUES^LRWU4" | 
|---|
| 23 | D ^DIR | 
|---|
| 24 | I Y=""!$D(DIRUT) D QUIT Q | 
|---|
| 25 | S LRX=Y | 
|---|
| 26 | ; | 
|---|
| 27 | S:$L(LRX)>2 ^DISV(DUZ,"LRACC")=LRX | 
|---|
| 28 | S:LRX=" " LRX=$S($D(^DISV(DUZ,"LRACC")):^("LRACC"),1:"?") | 
|---|
| 29 | S (LRAA,LRAD,LRAN)=0 | 
|---|
| 30 | ; | 
|---|
| 31 | ; see if entry is UID | 
|---|
| 32 | I $G(LRVBY)<1,$D(^LRO(68,"C",LRX)) D UNIV Q | 
|---|
| 33 | ; | 
|---|
| 34 | ; Parse and process user input. | 
|---|
| 35 | S (X1,X2,X3)="",X1=$P(LRX," ",1),X2=$P(LRX," ",2),X3=$P(LRX," ",3) | 
|---|
| 36 | S:X3=""&(+X2=X2) X3=X2,X2="" | 
|---|
| 37 | I X1'?1A.AN D QUES Q | 
|---|
| 38 | S LRAA=$O(^LRO(68,"B",X1,0)) | 
|---|
| 39 | I LRAA<1 D WLQUES Q:LRAA<1 | 
|---|
| 40 | S %=$P(^LRO(68,LRAA,0),U,14) | 
|---|
| 41 | I $L(%),'$D(^XUSEC(%,DUZ)) D WLQUES Q:LRAA<1 | 
|---|
| 42 | ; | 
|---|
| 43 | S LRX=$G(^LRO(68,LRAA,0)),LRIDIV=$S($L($P(LRX,U,19)):$P(LRX,U,19),1:"CP") | 
|---|
| 44 | W !,$P(LRX,U) | 
|---|
| 45 | ; | 
|---|
| 46 | ; User entered only accession area identifier, no date or number | 
|---|
| 47 | I X2="",X3="" D | 
|---|
| 48 | . N %DT | 
|---|
| 49 | . S %DT="AEP",%DT("A")="  Accession Date: ",%DT("B")="TODAY" | 
|---|
| 50 | . D DATE^LRWU | 
|---|
| 51 | . I $D(DUOUT) D QUIT Q | 
|---|
| 52 | . I Y<1 D QUES Q | 
|---|
| 53 | . S LRAD=Y | 
|---|
| 54 | I LRQUIT Q | 
|---|
| 55 | ; | 
|---|
| 56 | ; Convert middle value to FileMan date | 
|---|
| 57 | ; Adjust for monthly and quarterly formats (MM00) if user enters 4 digit | 
|---|
| 58 | ; number as middle part of accession then convert to appropriate date. | 
|---|
| 59 | I LRAD<1 D | 
|---|
| 60 | . N %DT | 
|---|
| 61 | . I X2="" S X2=DT | 
|---|
| 62 | . I X2?4N D | 
|---|
| 63 | . . S X2=$E(DT,1,3)_X2 | 
|---|
| 64 | . . I X2>DT S X2=X2-10000 | 
|---|
| 65 | . S %DT="EP",X=X2 | 
|---|
| 66 | . D ^%DT | 
|---|
| 67 | . I Y>0 S LRAD=Y Q | 
|---|
| 68 | . D QUES | 
|---|
| 69 | I LRAD<1 Q | 
|---|
| 70 | ; | 
|---|
| 71 | ; Convert date entered to apropriate date for accession area transform | 
|---|
| 72 | S X=$P(^LRO(68,LRAA,0),U,3) | 
|---|
| 73 | S LRAD=$S("D"[X:LRAD,X="Y":$E(LRAD,1,3)_"0000","M"[X:$E(LRAD,1,5)_"00","Q"[X:$E(LRAD,1,3)_"0000"+(($E(LRAD,4,5)-1)\3*300+100),1:LRAD) | 
|---|
| 74 | W:X3>0 "  ",+X3 | 
|---|
| 75 | ; | 
|---|
| 76 | I X3="",$D(LRACC) D | 
|---|
| 77 | . N DIR,DIRUT,DUOUT,DTOUT,X,Y | 
|---|
| 78 | . S DIR(0)="NO^1:999999",DIR("A")="  Number part of Accession" | 
|---|
| 79 | . D ^DIR | 
|---|
| 80 | . I Y=""!$D(DIRUT) Q | 
|---|
| 81 | . S X3=Y | 
|---|
| 82 | ; | 
|---|
| 83 | I X3="",$D(LRACC) D QUIT Q | 
|---|
| 84 | S LRAN=+X3 | 
|---|
| 85 | I LRAN<1,$D(LRACC) D QUES Q | 
|---|
| 86 | I $D(LRACC),'$D(^LRO(68,LRAA,1,LRAD,1,LRAN,0)) D  Q | 
|---|
| 87 | . W !,"ACCESSION: ",$P(^LRO(68,LRAA,0),U,11)," ",$$FMTE^XLFDT(LRAD,"5D")," ",LRAN," DOES NOT EXIST!" | 
|---|
| 88 | ; | 
|---|
| 89 | S LRQUIT=1 | 
|---|
| 90 | Q | 
|---|
| 91 | ; | 
|---|
| 92 | ; | 
|---|
| 93 | QUIT ; | 
|---|
| 94 | S (LRAN,LRAA,LRAD)=-1 | 
|---|
| 95 | END ; | 
|---|
| 96 | K X1,X2,X3,%DT,DIC,LRIDIV | 
|---|
| 97 | S LRQUIT=1 | 
|---|
| 98 | Q | 
|---|
| 99 | ; | 
|---|
| 100 | ; | 
|---|
| 101 | UNIV ; see if entry is UID | 
|---|
| 102 | N LRY | 
|---|
| 103 | S LRY=$$CHECKUID(LRX) | 
|---|
| 104 | I 'LRY S (LRAA,LRAD,LRAN)=0 D QUES Q | 
|---|
| 105 | S LRAA=$P(LRY,"^",2),LRAD=$P(LRY,"^",3),LRAN=$P(LRY,"^",4) | 
|---|
| 106 | S LRQUIT=1 | 
|---|
| 107 | W "  (",$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,.2)),"^"),")" | 
|---|
| 108 | Q | 
|---|
| 109 | ; | 
|---|
| 110 | ; | 
|---|
| 111 | QUES ; | 
|---|
| 112 | W $C(7),!,"Enter the accession number",$S($G(LRVBY)<1:" or the unique identifier (UID)",1:""),"." | 
|---|
| 113 | W !,"If entering the accession number, enter in this format:" | 
|---|
| 114 | W !?5," <ACCESSION AREA> <DATE> <NUMBER>" | 
|---|
| 115 | W !?5," ie.  CH 0426 125 or CH 125 or CH T 125",!?5," or if it's a yearly accession area ie. MICRO 85 30173" | 
|---|
| 116 | W:'$D(LRACC) !?5," or just the Accession area, or area and date." | 
|---|
| 117 | W:$D(LRACC) !?5," Must include the Accession area and the final number part." | 
|---|
| 118 | I $G(LRVBY)<1 W !,"If entering the UID, enter the entire 10-15 characters." | 
|---|
| 119 | Q | 
|---|
| 120 | ; | 
|---|
| 121 | WLQUES ; Ask user if acession area enter does not match any existing entries | 
|---|
| 122 | N DIC,X | 
|---|
| 123 | S X=X1,DIC="^LRO(68,",DIC(0)="EMOQ" | 
|---|
| 124 | S DIC("S")="Q:$D(LREXMPT)  S %=$P(^(0),U,14) X ""I '$L(%)"" Q:$T  S %=$P(^DIC(19.1,%,0),U,1) I $D(^XUSEC(%,DUZ))" | 
|---|
| 125 | W !,X | 
|---|
| 126 | D ^DIC S LRAA=+Y | 
|---|
| 127 | Q | 
|---|
| 128 | ; | 
|---|
| 129 | SELBY(X1) ; Select by accession number or unique identifier (UID) | 
|---|
| 130 | ; Call with X1 = message prompt | 
|---|
| 131 | ;    Returns Y = 0 (abort) | 
|---|
| 132 | ;              = 1 (accession number) | 
|---|
| 133 | ;              = 2 (unique identifier) | 
|---|
| 134 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
| 135 | S X1=$G(X1,"Select UID") | 
|---|
| 136 | S DIR(0)="SO^1:Accession Number;2:Unique Identifier (UID)",DIR("A")=X1,DIR("B")=1 | 
|---|
| 137 | D ^DIR | 
|---|
| 138 | I $D(DIRUT) S Y=0 | 
|---|
| 139 | Q Y | 
|---|
| 140 | ; | 
|---|
| 141 | UID(LRX,LRY) ; Lookup accession by UID | 
|---|
| 142 | ; Call with LRX = message prompt | 
|---|
| 143 | ;           LRY = default UID to display | 
|---|
| 144 | ;     Returns Y = 0 (abort) | 
|---|
| 145 | ;               = UID | 
|---|
| 146 | ; | 
|---|
| 147 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
| 148 | ; | 
|---|
| 149 | S LRX=$G(LRX,"Select UID") | 
|---|
| 150 | S DIR(0)="F^10:10^K:'$D(^LRO(68,""C"",X)) X" | 
|---|
| 151 | S DIR("A")=LRX,DIR("?")="Enter the full 10 character UID" | 
|---|
| 152 | I $L($G(LRY)) S DIR("B")=LRY | 
|---|
| 153 | D ^DIR | 
|---|
| 154 | I $D(DIRUT) S Y=0 | 
|---|
| 155 | Q Y | 
|---|
| 156 | ; | 
|---|
| 157 | ; | 
|---|
| 158 | CHECKUID(LRX) ; Check if UID is valid, accession exists. | 
|---|
| 159 | ; Call with LRX = UID to check | 
|---|
| 160 | ;     Returns Y = 0 (accession does not exist) | 
|---|
| 161 | ;               = 1 (accession exists)^area^date^number | 
|---|
| 162 | ; | 
|---|
| 163 | N LRY,Y | 
|---|
| 164 | ; | 
|---|
| 165 | S LRY=0 | 
|---|
| 166 | S Y=$Q(^LRO(68,"C",LRX)) | 
|---|
| 167 | I $QS(Y,3)=LRX,+$QS(Y,4),+$QS(Y,5),+$QS(Y,6) D | 
|---|
| 168 | . I '$D(^LRO(68,+$QS(Y,4),1,+$QS(Y,5),1,+$QS(Y,6),0)) Q | 
|---|
| 169 | . S LRY=1_"^"_$QS(Y,4)_"^"_$QS(Y,5)_"^"_+$QS(Y,6) | 
|---|
| 170 | Q LRY | 
|---|