| [613] | 1 | RORX005A ;HCIOFO/BH,SG - INPATIENT UTILIZATION (QUERY) ; 3/13/06 9:25am | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;**1**;Feb 17, 2006;Build 24 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; This routine uses the following IAs: | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ; #92           Read access to the file #45 (controlled) | 
|---|
|  | 7 | ; #557          Read access to the file #40.7 (controlled) | 
|---|
|  | 8 | ; #2438         .01 field and "C" x-ref of file #40.8 (controlled) | 
|---|
|  | 9 | ; #10035        Read access to the file #2 (supported) | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | Q | 
|---|
|  | 12 | ; | 
|---|
|  | 13 | ;***** ADDS THE INPATIENT STAY | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ; DFN           Patient IEN (in file #2) | 
|---|
|  | 16 | ; PTFIEN        IEN of the PTF record | 
|---|
|  | 17 | ; LOS           Length of stay | 
|---|
|  | 18 | ; BSID          Bed section ID | 
|---|
|  | 19 | ; DATE          Movement date/time (FileMan) | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | ADDSTAY(DFN,PTFIEN,LOS,BSID,DATE) ; | 
|---|
|  | 22 | N DST,I,TMP | 
|---|
|  | 23 | S:$G(BSID)="" BSID=0 | 
|---|
|  | 24 | ;--- Number of patients for the bedsection | 
|---|
|  | 25 | I 'BSID  S DST=$NA(@RORDST@("IP",DFN)) | 
|---|
|  | 26 | E  S DST=$NA(@RORDST@("IPB",BSID))  D:'$D(@DST@("P",DFN)) | 
|---|
|  | 27 | . S @DST@("P")=$G(@DST@("P"))+1,@DST@("P",DFN)="" | 
|---|
|  | 28 | ;--- No bed section ID | 
|---|
|  | 29 | S:BSID<0 @RORDST@("IPNOBS",RORPNAME,DATE,PTFIEN,DFN)="" | 
|---|
|  | 30 | ;--- Short stays (visits) | 
|---|
|  | 31 | I LOS'>0  S @DST@("V")=$G(@DST@("V"))+1  Q | 
|---|
|  | 32 | ;--- Days and stays | 
|---|
|  | 33 | S @DST@("D")=$G(@DST@("D"))+LOS | 
|---|
|  | 34 | S @DST@("S")=$G(@DST@("S"))+1 | 
|---|
|  | 35 | ;--- Lengths of stay for median value calculations | 
|---|
|  | 36 | S I=$O(@RORDST@("IPMLOS",BSID,LOS,""),-1)+1 | 
|---|
|  | 37 | S @RORDST@("IPMLOS",BSID,LOS,I)="" | 
|---|
|  | 38 | Q | 
|---|
|  | 39 | ; | 
|---|
|  | 40 | ;***** LOADS AND PROCESSES THE INPATIENT DATA | 
|---|
|  | 41 | ; | 
|---|
|  | 42 | ; DFN           Patient IEN (in file #2) | 
|---|
|  | 43 | ; | 
|---|
|  | 44 | ; Return Values: | 
|---|
|  | 45 | ;       <0  Error code | 
|---|
|  | 46 | ;        0  Ok | 
|---|
|  | 47 | ;       >0  Number of non-fatal errors | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | IPDATA(DFN) ; | 
|---|
|  | 50 | N RORDST        ; Closed reference to the category node in ^TMP | 
|---|
|  | 51 | ; | 
|---|
|  | 52 | N BSID,DATE,DISDT,ENDT,FACILITY,LOS,PTFIEN,RC,RORMSG,STDT,SUFFIX,TMP,VAHOW,VAIP,VAROOT,XDATE | 
|---|
|  | 53 | S RORDST=$NA(^TMP("RORX005",$J)) | 
|---|
|  | 54 | ;--- | 
|---|
|  | 55 | S XDATE=RORSDT | 
|---|
|  | 56 | F  S RC=0  D  Q:RC<2  S XDATE=$O(^DGPT("AAD",DFN,XDATE))  Q:XDATE'>0 | 
|---|
|  | 57 | . I XDATE'<ROREDT1  S RC=1  Q | 
|---|
|  | 58 | . K DATE,LOS,VAIP  S VAIP(16,1)=XDATE | 
|---|
|  | 59 | . F  D  Q:RC | 
|---|
|  | 60 | . . S VAIP("D")=+$G(VAIP(16,1)) | 
|---|
|  | 61 | . . I VAIP("D")'>0  S RC=2  Q | 
|---|
|  | 62 | . . D IN5^VADPT | 
|---|
|  | 63 | . . I $G(VAIP(1))'>0  S RC=2  Q | 
|---|
|  | 64 | . . S DATE=+VAIP(3) | 
|---|
|  | 65 | . . Q:+$G(VAIP(4))=3 | 
|---|
|  | 66 | . . ;--- Check the movement date | 
|---|
|  | 67 | . . I DATE'<ROREDT1  S RC=1  Q | 
|---|
|  | 68 | . . S:DATE<RORSDT DATE=RORSDT | 
|---|
|  | 69 | . . ;--- Check the PTF record | 
|---|
|  | 70 | . . S PTFIEN=+$G(VAIP(12))  Q:PTFIEN'>0 | 
|---|
|  | 71 | . . I '$D(PTFIEN(PTFIEN))  D  Q:RC | 
|---|
|  | 72 | . . . S PTFIEN(PTFIEN)=0 | 
|---|
|  | 73 | . . . Q:$$PTF^RORXU001(PTFIEN,"FP",,,.SUFFIX,,.FACILITY) | 
|---|
|  | 74 | . . . ;--- Check the suffix | 
|---|
|  | 75 | . . . ;I SUFFIX'=""  Q:$$VSUFFIX(SUFFIX)  ; ROR 1.5 | 
|---|
|  | 76 | . . . ;--- Check the division | 
|---|
|  | 77 | . . . S TMP=$$PARAM^RORTSK01("DIVISIONS","ALL") | 
|---|
|  | 78 | . . . I 'TMP  D  Q:'$D(RORTSK("PARAMS","DIVISIONS","C",DIVIEN)) | 
|---|
|  | 79 | . . . . S TMP=FACILITY_SUFFIX | 
|---|
|  | 80 | . . . . S DIVIEN=$S(TMP'="":+$O(^DG(40.8,"C",TMP,"")),1:0) | 
|---|
|  | 81 | . . . S PTFIEN(PTFIEN)=1 | 
|---|
|  | 82 | . . ;--- Skip the PTF record if necessary | 
|---|
|  | 83 | . . Q:'PTFIEN(PTFIEN) | 
|---|
|  | 84 | . . ;--- Process the admission (only once) | 
|---|
|  | 85 | . . I '$D(LOS)  D  Q:RC | 
|---|
|  | 86 | . . . S LOS=$$LOS(+$G(VAIP(13,1)),+$G(VAIP(17,1))) | 
|---|
|  | 87 | . . . D ADDSTAY(DFN,PTFIEN,LOS) | 
|---|
|  | 88 | . . ;--- Process the movement | 
|---|
|  | 89 | . . S ENDT=$G(VAIP(16,1))\1 | 
|---|
|  | 90 | . . S:(ENDT'>0)!(ENDT'<ROREDT1) ENDT=ROREDT,RC=2 | 
|---|
|  | 91 | . . Q:ENDT<RORSDT | 
|---|
|  | 92 | . . S LOS=$$FMDIFF^XLFDT(ENDT,DATE\1,1)  S:LOS'>0 LOS=0 | 
|---|
|  | 93 | . . ;--- Use the IEN in the SPECIALTY file (#42.4) as the Bedsection | 
|---|
|  | 94 | . . ;    ID if it is available (it should be). Otherwise, use the | 
|---|
|  | 95 | . . ;--- IEN in the FACILITY TREATING SPECIALTY file (#45.7). | 
|---|
|  | 96 | . . I $G(VAIP(8))>0  D | 
|---|
|  | 97 | . . . S TMP=$$GET1^DIQ(45.7,+VAIP(8),1,"I",,"RORMSG") | 
|---|
|  | 98 | . . . D:$G(DIERR) DBS^RORERR("RORMSG",-9,,DFN,45.7,+VAIP(8)) | 
|---|
|  | 99 | . . . S BSID=$S(TMP>0:TMP_";42.4",1:+VAIP(8)_";45.7") | 
|---|
|  | 100 | . . E  S BSID=-1 | 
|---|
|  | 101 | . . D ADDSTAY(DFN,PTFIEN,LOS,BSID,+VAIP(3)) | 
|---|
|  | 102 | . S:$G(DATE)>XDATE XDATE=DATE | 
|---|
|  | 103 | ;--- | 
|---|
|  | 104 | Q $S(RC<0:RC,1:0) | 
|---|
|  | 105 | ; | 
|---|
|  | 106 | ;***** CALCULATES THE LENGTH OF STAY | 
|---|
|  | 107 | LOS(STDT,ENDT) ; | 
|---|
|  | 108 | N DAYS | 
|---|
|  | 109 | S:STDT<RORSDT STDT=RORSDT | 
|---|
|  | 110 | S:(ENDT'>0)!(ENDT>ROREDT) ENDT=ROREDT | 
|---|
|  | 111 | S DAYS=$$FMDIFF^XLFDT(ENDT\1,STDT\1,1) | 
|---|
|  | 112 | Q $S(DAYS'<0:DAYS,1:0) | 
|---|
|  | 113 | ; | 
|---|
|  | 114 | ;***** QUERIES THE REGISTRY | 
|---|
|  | 115 | ; | 
|---|
|  | 116 | ; FLAGS         Flags for the $$SKIP^RORXU005 | 
|---|
|  | 117 | ; | 
|---|
|  | 118 | ; Return Values: | 
|---|
|  | 119 | ;       <0  Error code | 
|---|
|  | 120 | ;        0  Ok | 
|---|
|  | 121 | ;       >0  Number of non-fatal errors | 
|---|
|  | 122 | ; | 
|---|
|  | 123 | QUERY(FLAGS) ; | 
|---|
|  | 124 | N ROREDT1       ; Day after the end date | 
|---|
|  | 125 | N RORLAST4      ; Last 4 digits of the current patient's SSN | 
|---|
|  | 126 | N RORPNAME      ; Name of the current patient | 
|---|
|  | 127 | N RORPTN        ; Number of patients in the registry | 
|---|
|  | 128 | ; | 
|---|
|  | 129 | N CNT,ECNT,IEN,IENS,PATIEN,RC,TMP,VA,VADM,XREFNODE | 
|---|
|  | 130 | S XREFNODE=$NA(^RORDATA(798,"AC",+RORREG)) | 
|---|
|  | 131 | S RORPTN=$$REGSIZE^RORUTL02(+RORREG)  S:RORPTN<0 RORPTN=0 | 
|---|
|  | 132 | S ROREDT1=$$FMADD^XLFDT(ROREDT,1) | 
|---|
|  | 133 | S (CNT,ECNT,RC)=0 | 
|---|
|  | 134 | ;--- Browse through the registry records | 
|---|
|  | 135 | S IEN=0 | 
|---|
|  | 136 | F  S IEN=$O(@XREFNODE@(IEN))  Q:IEN'>0  D  Q:RC<0 | 
|---|
|  | 137 | . S TMP=$S(RORPTN>0:CNT/RORPTN,1:"") | 
|---|
|  | 138 | . S RC=$$LOOP^RORTSK01(TMP)  Q:RC<0 | 
|---|
|  | 139 | . S IENS=IEN_",",CNT=CNT+1 | 
|---|
|  | 140 | . ;--- Check if the patient should be skipped | 
|---|
|  | 141 | . Q:$$SKIP^RORXU005(IEN,FLAGS,RORSDT,ROREDT) | 
|---|
|  | 142 | . ; | 
|---|
|  | 143 | . ;--- Get the patient IEN (DFN) | 
|---|
|  | 144 | . S PATIEN=$$PTIEN^RORUTL01(IEN)  Q:PATIEN'>0 | 
|---|
|  | 145 | . ; | 
|---|
|  | 146 | . ;--- Get the patient's data | 
|---|
|  | 147 | . D VADEM^RORUTL05(PATIEN,1) | 
|---|
|  | 148 | . S RORPNAME=VADM(1),RORLAST4=VA("BID") | 
|---|
|  | 149 | . ; | 
|---|
|  | 150 | . ;--- Get the inpatient data | 
|---|
|  | 151 | . S RC=$$IPDATA(PATIEN) | 
|---|
|  | 152 | . I RC  S ECNT=ECNT+1  Q:RC<0 | 
|---|
|  | 153 | . ; | 
|---|
|  | 154 | . ;--- Calculate intermediate totals | 
|---|
|  | 155 | . S RC=$$TOTALS^RORX005B(PATIEN) | 
|---|
|  | 156 | . I RC  S ECNT=ECNT+1  Q:RC<0 | 
|---|
|  | 157 | ;--- | 
|---|
|  | 158 | Q $S(RC<0:RC,1:ECNT) | 
|---|
|  | 159 | ; | 
|---|
|  | 160 | ;***** CHECKS THE SUFFIX FOR VALIDITY | 
|---|
|  | 161 | ; | 
|---|
|  | 162 | ; SUFFIX        Suffix | 
|---|
|  | 163 | ; | 
|---|
|  | 164 | ; Return Values: | 
|---|
|  | 165 | ;        0  Ok | 
|---|
|  | 166 | ;        1  Invalid suffix | 
|---|
|  | 167 | VSUFFIX(SUFFIX) ; | 
|---|
|  | 168 | Q '("9AA,9AB,9AC,9AD,9AE,9BB,A0,A4,A5,BU,BV,PA"[SUFFIX) | 
|---|