VistA-WorldVistAEHR/r/GENERIC_CODE_SHEET-GEC/GECSUNUM.m

89 lines
3.0 KiB
Mathematica

GECSUNUM ;WISC/RFJ-get next counter number ;01 Nov 93
;;2.0;GCS;**34**;MAR 14, 1995
Q
;
;
COUNTER(GECSNAME) ; return next counter number
; gecsname=station-batch type-fiscal year
; example for fms: 460-FMS:MO-94
; return next counter number
I $L($G(GECSNAME))<10!($L($G(GECSNAME))>20) Q "invalid format for "_$G(GECSNAME)
N %,DA
;
S DA=+$O(^GECS(2101.5,"B",GECSNAME,0))
I 'DA D
. ; add entry to file
. L +^GECS(2101.5,0)
. ; check to make sure another job did not add entry between locks
. S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) I DA Q
. S %=^GECS(2101.5,0)
. F DA=$P(%,"^",3)+1:1 Q:'$D(^GECS(2101.5,DA))
. S ^GECS(2101.5,DA,0)=GECSNAME_"^0"
. S ^GECS(2101.5,"B",GECSNAME,DA)=""
. S $P(%,"^",3)=DA,$P(%,"^",4)=$P(%,"^",4)+1,^GECS(2101.5,0)=%
. L -^GECS(2101.5,0)
;
L +^GECS(2101.5,DA)
S %=$P(^GECS(2101.5,DA,0),"^",2)+1
I %>9999999 S %=1
I %=0 S %=1
S $P(^GECS(2101.5,DA,0),"^",2)=%
L -^GECS(2101.5,DA)
Q %
;
ACOUNTER(GECSNAME) ; return next alphanumeric counter number
; gecsname=station-batch type-fiscal year
; example for fms: 460-FMS:MO-94
; return next alphanumeric counter number
I $L($G(GECSNAME))<10!($L($G(GECSNAME))>20) Q "invalid format for "_$G(GECSNAME)
N %,DA,GECALPHA,GECCNT,X1,X2,X3
;
S GECALPHA="ABCDEFGHIJKLMNPQRSTUVWXYZA"
S DA=+$O(^GECS(2101.5,"B",GECSNAME,0))
I 'DA D
. ; add entry to file
. L +^GECS(2101.5,0)
. ; check to make sure another job did not add entry between locks
. S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) I DA Q
. S %=^GECS(2101.5,0)
. F DA=$P(%,"^",3)+1:1 Q:'$D(^GECS(2101.5,DA))
. S ^GECS(2101.5,DA,0)=GECSNAME_"^0"
. S ^GECS(2101.5,"B",GECSNAME,DA)=""
. S $P(%,"^",3)=DA,$P(%,"^",4)=$P(%,"^",4)+1,^GECS(2101.5,0)=%
. L -^GECS(2101.5,0)
;
L +^GECS(2101.5,DA)
S %=$P(^GECS(2101.5,DA,0),"^",2)
I %?1N2A D G ACNTEND
. I %="9ZZ"!(%="9zz") S %=1 Q ;Highest value reached, start over at 1
. S X3=$E(%,3)
. S X2=$E(%,2)
. S X1=$E(%,1)
. S X3=$$ALPHA(X3) ;increment 3rd digit alpha
. I X3="A" D ;if 3rd digit alpha equal "A", then increment 2nd digit alpha
.. S X2=$$ALPHA(X2) ; increment 2nd digit alpha
.. I X2="A" S X1=X1+1 ;if 2nd digit alpha equal "A", then increase 1st digit number
. S %=X1_X2_X3
I %?2N1A D G ACNTEND
. I %="99Z"!(%="99z") S %="0AA" Q ;Highest value reached, begin using alpha for 2nd digit
. S X3=$E(%,3)
. S GECCNT=$E(%,1,2)+1 ; increment number by 1
. I GECCNT>99 S GECCNT="00" D ;reset cnt to zero and increment 3rd digit alpha
.. S X3=$$ALPHA(X3) ;increment 3rd digit alpha
. I $L(GECCNT)=1 S GECCNT="0"_GECCNT
. S %=GECCNT_X3
S %=%+1
I %>999 S %="00A" ;Highest all numeric value reached, begin using alpha as 3rd digit
ACNTEND S $P(^GECS(2101.5,DA,0),"^",2)=%
L -^GECS(2101.5,DA)
Q %
;
ALPHA(A) ;Increment alpha character to next letter in the alphabet
; A = Any letter in the alphabet except O to prevent confusion with zero
N X,Y
I A'?1A!(A="") Q "Z" ;when in doubt return "Z"
S X=A X ^%ZOSF("UPPERCASE") S A=Y
I A="O" Q "P"
S A=$E(GECALPHA,$F(GECALPHA,A))
Q A