1 | VSITVID ;ISL/dee - Computes the Visit Id ;4/17/97
|
---|
2 | ;;1.0;PCE PATIENT CARE ENCOUNTER;**76**;Aug 12, 1996
|
---|
3 | ; Patch PX*1*76 changes the 2nd line of all VSIT* routines to reflect
|
---|
4 | ; the incorporation of the module into PCE. For historical reference,
|
---|
5 | ; the old (VISIT TRACKING) 2nd line is included below to reference VSIT
|
---|
6 | ; patches.
|
---|
7 | ;
|
---|
8 | ;;2.0;VISIT TRACKING**2**;;Aug 12, 1996
|
---|
9 | Q
|
---|
10 | ;
|
---|
11 | GETVID() ;Sets the VSIT("VID") node with the next unique Visit Id
|
---|
12 | N LASTONE,LASTSEQ,SITE,LASTUSED,NEXTSEQ
|
---|
13 | ;Lock parameters file
|
---|
14 | L +^DIC(150.9,1,4):1800 E Q -1
|
---|
15 | ;Get the last one from parameters file
|
---|
16 | S LASTONE=^DIC(150.9,1,4)
|
---|
17 | S LASTSEQ=$P(LASTONE,"^",1)
|
---|
18 | S SITE=$P(^VSIT(150.2,$P(LASTONE,"^",2),0),"^",2)
|
---|
19 | ;Get the next one (call the function below)
|
---|
20 | S NEXTSEQ=$$NEXT(LASTSEQ)
|
---|
21 | ;Save new one in parameters file
|
---|
22 | S $P(^DIC(150.9,1,4),"^",1)=NEXTSEQ
|
---|
23 | L -^DIC(150.9,1,4)
|
---|
24 | ;Combine the sequence number and the site to make the new Visit Id
|
---|
25 | Q NEXTSEQ_"-"_SITE
|
---|
26 | ;
|
---|
27 | NEXT(SEQNUMB) ;Pass in the last sequence number and returns the next unique number in the sequence
|
---|
28 | ;This routine adds one to a base 27 number
|
---|
29 | N VSITSTR,VSITPLAC,VSITDIG
|
---|
30 | ;Do not change this string (or the copy of it below in FIXVID):
|
---|
31 | S VSITSTR="0123456789BCDFGHJKMNPQRTVWX0"
|
---|
32 | S VSITPLAC=$L(SEQNUMB)
|
---|
33 | NEXTDIG S VSITDIG=$E(VSITSTR,$F(VSITSTR,$E(SEQNUMB,VSITPLAC)))
|
---|
34 | S SEQNUMB=$E(SEQNUMB,0,VSITPLAC-1)_VSITDIG_$E(SEQNUMB,VSITPLAC+1,99)
|
---|
35 | I VSITDIG=0 S VSITPLAC=VSITPLAC-1 S:VSITPLAC<1 SEQNUMB="0"_SEQNUMB,VSITPLAC=1 G NEXTDIG
|
---|
36 | Q SEQNUMB
|
---|
37 | ;
|
---|
38 | TEST ;This prints every 100,000 number in base 27 then base 10
|
---|
39 | W !,"WARNING, This routine never quits!"
|
---|
40 | S COUNT=0
|
---|
41 | S NUM="0"
|
---|
42 | TESTNEXT S NUM=$$NEXT(NUM)
|
---|
43 | S COUNT=COUNT+1
|
---|
44 | I '(COUNT#100000) W !,NUM," ",COUNT Q
|
---|
45 | G TESTNEXT
|
---|
46 | K COUNT,NUM
|
---|
47 | Q
|
---|
48 | ;
|
---|
49 | FIXVID(VSITIEN) ;If the Visit ID is not valued then get a new id and store it
|
---|
50 | ;Return:
|
---|
51 | ; -2 If called with a bad pointer to Visit
|
---|
52 | ; -1 If could not get a new Visit ID or store it.
|
---|
53 | ; Visit ID If Visit has one or one was added.
|
---|
54 | N VSITVID,VSITTEST
|
---|
55 | Q:$G(VSITIEN)<1 -2
|
---|
56 | Q:'($D(^AUPNVSIT(VSITIEN,0))#2) -2
|
---|
57 | ;Test to see if current Visit ID is good.
|
---|
58 | S VSITVID=$P($G(^AUPNVSIT(VSITIEN,150)),"^",1)
|
---|
59 | ; check against the DD for the field
|
---|
60 | D CHK^DIE(9000010,15001,"",VSITVID,.VSITTEST)
|
---|
61 | ; it is bad if VSITTEST="^"
|
---|
62 | I VSITTEST'="^" D Q:VSITTEST'="^" VSITVID
|
---|
63 | . ;Fileman said it was good now make sure value is valid
|
---|
64 | . ;Do not change this string (it is the same as the one above):
|
---|
65 | . I $TR($P(VSITVID,"-",1),"0123456789BCDFGHJKMNPQRTVWX0")'="" S VSITTEST="^"
|
---|
66 | . E I '$D(^VSIT(150.2,"D",$P(VSITVID,"-",2))) S VSITTEST="^"
|
---|
67 | ;
|
---|
68 | ;Need to get new Visit Id
|
---|
69 | N VSIT
|
---|
70 | S VSIT("VID")=$$GETVID ; Get new Visit ID
|
---|
71 | Q:VSIT("VID")=-1 -1 ; Return -1 if can not get a Visit ID
|
---|
72 | I VSITVID]"" D ; Delete bad Visit ID if there is one
|
---|
73 | . S $P(^AUPNVSIT(VSITIEN,150),"^",1)=""
|
---|
74 | . K ^AUPNVSIT("VID",VSITVID,VSITIEN)
|
---|
75 | S VSIT("IEN")=VSITIEN
|
---|
76 | D UPD^VSIT ; Save new Visit ID
|
---|
77 | I VSIT("VID")=$P($G(^AUPNVSIT(VSITIEN,150)),"^",1) Q VSIT("VID")
|
---|
78 | Q -1
|
---|
79 | ;
|
---|