1 | VSITGET ;ISD/RJP - Visit Return Search and Match Logic of a Visit ;6/20/96
|
---|
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;;Aug 12, 1996;
|
---|
9 | ;
|
---|
10 | Q ; - not an entry point
|
---|
11 | ;
|
---|
12 | LST(VDT,DFN,PRAM,VSIT,VSITGET) ; - search for matches
|
---|
13 | ; - called by ^VSIT and Supported Direct Call
|
---|
14 | ;
|
---|
15 | ; - VSIT & VSITGET are passed by reference
|
---|
16 | ; - pass {VDT/VSIT("VDT")} = <FM date [and time]>
|
---|
17 | ; {DFN/VSIT("PAT")} = <patient pointer>
|
---|
18 | ; [PRAM/VSIT(0)] = <param string>
|
---|
19 | ; [VSIT("xxx")] = <used in matching logic if VSIT(0)["M">
|
---|
20 | ; [<fld-value>[^...]] for multiple values
|
---|
21 | ; .VSITGET = <array passed by reference>
|
---|
22 | ; - rtns .VSITGET = <number of matches>
|
---|
23 | ; .VSITGET(<ien>) = <sorted by visit date>
|
---|
24 | ; (array of selected visits)
|
---|
25 | K VSITGET
|
---|
26 | S VSITGET=0
|
---|
27 | ;
|
---|
28 | S:$G(VDT)]"" VSIT("VDT")=VDT
|
---|
29 | S:$G(DFN) VSIT("PAT")=+DFN
|
---|
30 | S:$G(PRAM)]"" VSIT(0)=PRAM
|
---|
31 | I '+$G(VSIT("VDT"))!('+$G(VSIT("PAT"))) G QUIT
|
---|
32 | ;
|
---|
33 | I '($D(^TMP("VSITDD",$J))\10) D FLD^VSITFLD
|
---|
34 | N NOD,IEN,VSITDAT,VSITBEG,VSITEND,VSITSORT,VSITIPV
|
---|
35 | ;
|
---|
36 | D:$G(VSIT("SVC"))="" CKIP(VSIT("VDT"),VSIT("PAT"))
|
---|
37 | ;
|
---|
38 | D RANGE
|
---|
39 | S VSITDAT=VSITBEG
|
---|
40 | F S VSITDAT=$O(^AUPNVSIT("AA",+VSIT("PAT"),VSITDAT)) Q:VSITDAT'>0!(VSITDAT>VSITEND) D
|
---|
41 | . D:$G(VSIT("SVC"))="" CKIP(9999999-$P(VSITDAT,"."),VSIT("PAT"))
|
---|
42 | . S IEN=0
|
---|
43 | . F S IEN=$O(^AUPNVSIT("AA",+VSIT("PAT"),VSITDAT,IEN)) Q:IEN'>0 D
|
---|
44 | .. S NOD=$$MATCH(IEN)
|
---|
45 | .. S:NOD]"" VSITSORT($P(NOD,"^"),$P(NOD,"^",2),IEN)=IEN_"|"_NOD
|
---|
46 | .. K:$D(VSITIPV(IEN)) VSITIPV(IEN)
|
---|
47 | ;
|
---|
48 | S VSITIPV=0 F S VSITIPV=$O(VSITIPV(VSITIPV)) Q:VSITIPV="" D
|
---|
49 | . S IEN=VSITIPV
|
---|
50 | . S NOD=$$MATCH(IEN)
|
---|
51 | . S:NOD]"" VSITSORT($P(NOD,"^"),$P(NOD,"^",2),IEN)=IEN_"|"_NOD
|
---|
52 | ;
|
---|
53 | ;Put into VSITGET in sorted order
|
---|
54 | S VSITGET=0
|
---|
55 | S NOD=$Q(VSITSORT(0,0,0))
|
---|
56 | G:NOD="" QUIT ;no visit found
|
---|
57 | ;Set first one
|
---|
58 | S VSITGET=VSITGET+1
|
---|
59 | S VSITGET(VSITGET)=@NOD
|
---|
60 | ;Set rest
|
---|
61 | I NOD]"" F S NOD=$Q(@NOD) Q:NOD="" S VSITGET=VSITGET+1,VSITGET(VSITGET)=@NOD
|
---|
62 | ;
|
---|
63 | QUIT ; - exit
|
---|
64 | ;
|
---|
65 | Q
|
---|
66 | ;
|
---|
67 | CKIP(DATE,PAT) ; - check to see if inpatient over date range but admitted earlier
|
---|
68 | ;
|
---|
69 | N IPM,IPV
|
---|
70 | S IPM=$$IP^VSITCK1(DATE,PAT)
|
---|
71 | I +IPM,'$P($G(^DIC(150.9,1,0)),"^",5) D
|
---|
72 | . S IPV=+$P($G(^DGPM(IPM,0)),"^",27)
|
---|
73 | . S:'$D(VSITIPV(IPV)) VSITIPV(IPV)=""
|
---|
74 | Q
|
---|
75 | ;
|
---|
76 | MATCH(IEN) ; - screen matches using visit array
|
---|
77 | ;
|
---|
78 | ; - pass IEN = <internal entry number of visit node>
|
---|
79 | ; - rtns NOD = <zero node of ien record or null>
|
---|
80 | ;
|
---|
81 | Q:'IEN ""
|
---|
82 | S NOD=$G(^AUPNVSIT(IEN,0))
|
---|
83 | Q:+$P(NOD,"^",11) ""
|
---|
84 | I $G(VSIT(0))["M" D
|
---|
85 | . N X,VSITI,VSITM
|
---|
86 | . F X="DSS","LOC","INS","TYP" D:$G(VSIT(X))]"" Q:NOD=""
|
---|
87 | .. S VSITM=0
|
---|
88 | .. F VSITI=1:1:$L(VSIT(X),"^") S:$P(VSIT(X),"^",VSITI)=$P(NOD,"^",$P(^TMP("VSITDD",$J,X),";",4)) VSITM=1
|
---|
89 | .. S:'VSITM NOD=""
|
---|
90 | Q NOD
|
---|
91 | ;
|
---|
92 | RANGE ; - date range
|
---|
93 | ;
|
---|
94 | ; - pass VSIT("VDT") = <FM date [and time]>
|
---|
95 | ; VSIT(0) = <param string> ; will assume D1 if not specified
|
---|
96 | ; - rtns VSITBEG = 9's complement of FM search start date
|
---|
97 | ; VSITEND = 9's complement of FM search end date
|
---|
98 | ;
|
---|
99 | N X,X1,X2
|
---|
100 | S X1=+VSIT("VDT")
|
---|
101 | S X2=$F($G(VSIT(0)),"D")
|
---|
102 | I X2>1 S X2=$E($G(VSIT(0)),$F($G(VSIT(0)),"D"),99),X2=$S(X2>0:-(X2-1),1:0)
|
---|
103 | E S X2=0
|
---|
104 | D C^%DTC
|
---|
105 | S VSITBEG=9999999-$P(+VSIT("VDT"),".")+$S(+$F($G(VSIT(0)),"D0"):"."_$P(+VSIT("VDT"),".",2)-.0000001,1:"-.0000001")
|
---|
106 | S VSITEND=9999999-$P(+X,".")_$S(+$F($G(VSIT(0)),"D0"):"."_$P(+VSIT("VDT"),".",2)+.0000001,1:".999999")
|
---|
107 | Q
|
---|