[613] | 1 | ORLP3AUC ; 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 | ;
|
---|
| 18 | EN ; 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 | ;
|
---|