source: WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORLP3AUC.m@ 808

Last change on this file since 808 was 613, checked in by George Lilly, 15 years ago

initial load of WorldVistAEHR

File size: 6.1 KB
Line 
1ORLP3AUC ; SLC/CLA - Automatically load clinic patients into team lists ;9/11/96 [12/28/99 2:45pm]
2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**9,47**;Dec 17, 1997
3 ; Re-created by PKS, 7/99.
4 ;
5 ; This code checks the ^TMP file that is written by the
6 ; SC CLINIC ENROLL/DISCHARGE EVENT DRIVER protocol. That
7 ; protocol in turn calls the protocol ORU AUTOLIST CLINIC,
8 ; which calls this routine. When control is returned to
9 ; SC CLINIC ENROLL/DISCHARGE EVENT DRIVER, the ^TMP entries
10 ; are deleted. They can be viewed by breaking out before
11 ; that point for testing [^TMP($J,"SC CED")].
12 ;
13 ; (NOTE: At the time of re-creation of this routine, existing code
14 ; would not allow a user to enter a clinic enrollment or clinic
15 ; discharge date later than the current day. Thus, no post-date
16 ; checking is included in this routine.)
17 ;
18EN ; Called by protocol: ORU AUTOLIST CLINIC. Updates Team Lists
19 ; where the Autolink is a clinic.
20 ;
21 ; Variables used -
22 ;
23 ; By tags called (in ORLP3AC1):
24 ;
25 ; ORTL = OE/RR TEAM LIST file.
26 ; ORTEAM = Team List.
27 ; ORAL = Team List Autolink.
28 ; ORVAL = Team List Autolink node data value.
29 ; ORTYPE = Type of Autolink.
30 ; ORLINK = Autolink holder variable.
31 ; LNAME = Team List textual name.
32 ; VP = Array for call to PTS^ORLP2.
33 ;
34 ; By this tag (and by tags called as needed):
35 ;
36 ; ORPT = Patient number.
37 ; ORBARY = Array of "B" index clinics.
38 ; ORCL = Clinic.
39 ; ORBRCD = "BEFORE" clinic record number.
40 ; ORARCD = "AFTER" clinic record number.
41 ; ORBLAST = Last record in ^TMP file for "BEFORE" clinic.
42 ; ORALAST = Last record in ^TMP file for "AFTER" clinic.
43 ; ORBEFORE = Data in "BEFORE" record.
44 ; ORAFTER = Data in "AFTER" record.
45 ; ORBEDATE = "BEFORE" clinic enrollment date.
46 ; ORBDDATE = "BEFORE" clinic discharge date.
47 ; ORAEDATE = "AFTER" clinic enrollment date.
48 ; ORADDATE = "AFTER" clinic discharge date.
49 ;
50 N ORTL,ORPT,ORBARY,ORCL,ORBRCD,ORARCD,ORBLAST,ORALAST,ORBEFORE,ORAFTER,ORBEDATE,ORBDDATE,ORAEDATE,ORADDATE
51 S ORTL="100.21" ; Assign for use by ADD and DELETE tags.
52 ;
53 ; Check for existence of ^TMP entries:
54 I '$D(^TMP($J,"SC CED")) Q
55 ;
56 ; Process each patient in the ^TMP file:
57 S ORPT=0 ; Initialize.
58 F S ORPT=$O(^TMP($J,"SC CED",ORPT)) Q:'ORPT D
59 .;
60 .; Build an array of clinics for each patient in the ^TMP file:
61 .K ORBARY ; Clean up each time through.
62 .;
63 .; Order through the "B" index records for this patient:
64 .S ORCL=0 ; Initialize.
65 .F S ORCL=$O(^TMP($J,"SC CED",ORPT,"BEFORE","B",ORCL)) Q:'+ORCL DO ; Each "BEFORE" "B" record for clinics.
66 ..S ORBARY(ORCL)="" ; Set array element for each "BEFORE" clinic.
67 .S ORCL=0 ; Re-initialize.
68 .F S ORCL=$O(^TMP($J,"SC CED",ORPT,"AFTER","B",ORCL)) Q:'+ORCL D ; Each "AFTER" "B" record for clinics.
69 ..S ORBARY(ORCL)="" ; Set array element for each "AFTER" clinic.
70 .; The previous array should contain only one entry for each clinic,
71 .; whether from "BEFORE" or "AFTER" entries - (dupes overwritten).
72 .;
73 .; Check for valid data again:
74 .I '$D(ORBARY) Q ; If nothing to process, done.
75 .;
76 .; Write data entries for "BEFORE" and "AFTER" based on ^TMP data:
77 .S ORCL=0 ; Initialize.
78 .F S ORCL=$O(ORBARY(ORCL)) Q:'+ORCL D ; Array entries.
79 ..I $D(^TMP($J,"SC CED",ORPT,"BEFORE","B",ORCL)) S ORBARY(ORCL)=$O(^TMP($J,"SC CED",ORPT,"BEFORE","B",ORCL,"")) ; Set array element to ^TMP "BEFORE" "B" x-ref record number.
80 ..S ORBARY(ORCL)=ORBARY(ORCL)_"^" ; Add delimiter.
81 ..I $D(^TMP($J,"SC CED",ORPT,"AFTER","B",ORCL)) S ORBARY(ORCL)=ORBARY(ORCL)_$O(^TMP($J,"SC CED",ORPT,"AFTER","B",ORCL,"")) ; Set array element to ^TMP "AFTER" "B" x-ref record number.
82 .;
83 .; Array entries like the following should now exist:
84 .;
85 .; ORBARY(5)=1^1 | Clinic 5 has "BEFORE" and "AFTER" entries.
86 .; ORBARY(16)=^3 | Clinic 16 has only an "AFTER" entry.
87 .; (Etc.)
88 .; ORBARY(11)=2^ | No "AFTER" entry - should never happen!
89 .;
90 .; Process each clinic listed for this patient:
91 .S ORCL=0 ; Initialize.
92 .F S ORCL=$O(ORBARY(ORCL)) Q:'+ORCL D ; Each clinic.
93 ..;
94 ..; Check for no "AFTER" records:
95 ..;I $P($G(ORBARY(ORCL)),"^",2)="" Q ; Shouldn't happen!
96 ..;
97 ..; Get "BEFORE" and "AFTER" record entries for this clinic:
98 ..S ORBRCD="",ORARCD="" ; Initialize.
99 ..S ORBRCD=$P(ORBARY(ORCL),"^") ; Assign "BEFORE" record number, if any.
100 ..S ORARCD=$P(ORBARY(ORCL),"^",2) ; Assign "AFTER" record number, if any.
101 ..;
102 ..; Find the last records for each case, as applicable:
103 ..S ORBLAST="",ORALAST="" ; Initialize.
104 ..I $G(ORBRCD) S ORBLAST=$O(^TMP($J,"SC CED",ORPT,"BEFORE",ORBRCD,1,ORBLAST),-1) ; Last "BEFORE" record.
105 ..I $G(ORARCD) S ORALAST=$O(^TMP($J,"SC CED",ORPT,"AFTER",ORARCD,1,ORALAST),-1) ; Last "AFTER" record.
106 ..;
107 ..; Get BEFORE and AFTER data from last records for each clinic:
108 ..S ORBEFORE="",ORAFTER="" ; Initialize.
109 ..I $G(ORBLAST) S ORBEFORE=$G(^TMP($J,"SC CED",ORPT,"BEFORE",ORBRCD,1,ORBLAST,0)) ; Get "BEFORE" data.
110 ..I $G(ORALAST) S ORAFTER=$G(^TMP($J,"SC CED",ORPT,"AFTER",ORARCD,1,ORALAST,0)) ; Get "AFTER" data.
111 ..;
112 ..; With "BEFORE" and "AFTER" data, process Team Lists -
113 ..;
114 ..; If no changes, there's nothing to do for this clinic:
115 ..I ORBEFORE=ORAFTER Q
116 ..;
117 ..; Get date information in each case as applicable:
118 ..S ORBEDATE=$P($G(ORBEFORE),"^") ; "BEFORE" enroll date.
119 ..S ORBEDATE=$P($G(ORBEDATE),".") ; Remove time, if any.
120 ..S ORBDDATE=$P($G(ORBEFORE),"^",3) ; "BEFORE" d/c date.
121 ..S ORAEDATE=$P($G(ORAFTER),"^") ; "AFTER" date.
122 ..S ORAEDATE=$P($G(ORAEDATE),".") ; Remove time, if any.
123 ..S ORADDATE=$P($G(ORAFTER),"^",3) ; "AFTER" d/c date.
124 ..; (All four dates should now be set, even if to null.)
125 ..;
126 ..; Now call the ADD or DELETE tags in ORLP3AC1 as appropriate -
127 ..;
128 ..; If no "AFTER" d/c and enroll <> "BEFORE" enroll, call add:
129 ..I (ORADDATE="")&(ORAEDATE'=ORBEDATE) D ADD^ORLP3AC1
130 ..;
131 ..; If "AFTER" d/c exists and <> "BEFORE" d/c, call delete:
132 ..I (ORADDATE'="")&(ORADDATE'=ORBDDATE) D DELETE^ORLP3AC1
133 ;
134 K ORBARY ; Clean up.
135 Q
136 ;
Note: See TracBrowser for help on using the repository browser.