| 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 | ; | 
|---|