| 1 | RORXU001 ;HCIOFO/BH,SG - REPORT UTILITIES  ; 1/24/06 8:14am | 
|---|
| 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
| 3 | ; | 
|---|
| 4 | ; This routine uses the following IAs: | 
|---|
| 5 | ; | 
|---|
| 6 | ; #92           Read access to the file #45 (controlled) | 
|---|
| 7 | ;               fields 3 and 4. | 
|---|
| 8 | ; #1480         Read access to the file #405 (controlled) | 
|---|
| 9 | ; #1894         ENCEVENT^PXKENC (controlled) | 
|---|
| 10 | ; | 
|---|
| 11 | Q | 
|---|
| 12 | ; | 
|---|
| 13 | ;***** DOUBLE CHECKS THE ADMISSION | 
|---|
| 14 | ; | 
|---|
| 15 | ; DFN           Patient IEN | 
|---|
| 16 | ; VAINDT        Admission date | 
|---|
| 17 | ; .DISDT        Discharge date | 
|---|
| 18 | ; | 
|---|
| 19 | ; Return Values: | 
|---|
| 20 | ;        0  Ok | 
|---|
| 21 | ;        1  Invalid admission date | 
|---|
| 22 | ; | 
|---|
| 23 | CHKADM(DFN,VAINDT,DISDT) ; | 
|---|
| 24 | N IEN,RORMSG,VADMVT,VAHOW,VAROOT | 
|---|
| 25 | D ADM^VADPT2  Q:'VADMVT 1 | 
|---|
| 26 | S IEN=+$$GET1^DIQ(405,VADMVT,.17,"I",,"RORMSG") | 
|---|
| 27 | S:IEN>0 DISDT=$$GET1^DIQ(405,IEN_",",.01,"I",,"RORMSG") | 
|---|
| 28 | Q 0 | 
|---|
| 29 | ; | 
|---|
| 30 | ;***** DATE OF THE MOST RECENT VISIT TO ANY OF THE SELECTED CLINICS | 
|---|
| 31 | ; | 
|---|
| 32 | ; PATIEN        Patient IEN (file #2) | 
|---|
| 33 | ; | 
|---|
| 34 | ; .RORCLIN      Reference to a local array of Clinics, the subscripts | 
|---|
| 35 | ;               are IEN's from file #44 or will be a single element | 
|---|
| 36 | ;               array with a subscript of "ALL", which will denote | 
|---|
| 37 | ;               all clinics (i.e. CLIN("ALL")=""). | 
|---|
| 38 | ; | 
|---|
| 39 | ; Return Values: | 
|---|
| 40 | ;        0  The patient has never been seen at any of the given | 
|---|
| 41 | ;           clinics | 
|---|
| 42 | ;       >0  Date of the most recent visit to one of the selected | 
|---|
| 43 | ;           clinics | 
|---|
| 44 | ; | 
|---|
| 45 | LASTVSIT(PATIEN,RORCLIN) ; | 
|---|
| 46 | N QUERY,RORDT,RORLAST | 
|---|
| 47 | S RORDT=$$FMADD^XLFDT($$DT^XLFDT,1),RORLAST=0 | 
|---|
| 48 | ;--- | 
|---|
| 49 | D OPEN^SDQ(.QUERY) | 
|---|
| 50 | D INDEX^SDQ(.QUERY,"PATIENT","SET") | 
|---|
| 51 | D PAT^SDQ(.QUERY,PATIEN,"SET") | 
|---|
| 52 | D SCANCB^SDQ(.QUERY,"D SDQSCAN2^RORXU001(Y,Y0)","SET") | 
|---|
| 53 | D ACTIVE^SDQ(.QUERY,"TRUE","SET") | 
|---|
| 54 | D SCAN^SDQ(.QUERY,"FORWARD") | 
|---|
| 55 | D CLOSE^SDQ(.QUERY) | 
|---|
| 56 | ;--- | 
|---|
| 57 | Q RORLAST | 
|---|
| 58 | ; | 
|---|
| 59 | ;***** LOADS PTF DATA AND CHECKS IF THE RECORD SHOULD BE SKIPPED | 
|---|
| 60 | ; | 
|---|
| 61 | ; PTFIEN        IEN of the PTF record | 
|---|
| 62 | ; | 
|---|
| 63 | ; [FLAGS]       Flags to control processing | 
|---|
| 64 | ;                 F  Skip fee-basis records | 
|---|
| 65 | ;                 P  Skip non-PTF records | 
|---|
| 66 | ; | 
|---|
| 67 | ; [.ADMDT]      Admission date is returned via this parameter | 
|---|
| 68 | ; [.DISDT]      Discharge date is returned via this parameter | 
|---|
| 69 | ; [.SUFFIX]     Suffix is returned via this parameter | 
|---|
| 70 | ; [.STATUS]     Status is returned via this parameter | 
|---|
| 71 | ; [.FACILITY]   Facility number is returned via this parameter | 
|---|
| 72 | ; | 
|---|
| 73 | ; Return Values: | 
|---|
| 74 | ;       <0  Error code | 
|---|
| 75 | ;        0  Ok | 
|---|
| 76 | ;        1  Skip this record | 
|---|
| 77 | ; | 
|---|
| 78 | PTF(PTFIEN,FLAGS,ADMDT,DISDT,SUFFIX,STATUS,FACILITY) ; | 
|---|
| 79 | N FLDLST,IENS,RORBUF,RORMSG | 
|---|
| 80 | S FLAGS=$G(FLAGS),IENS=(+PTFIEN)_"," | 
|---|
| 81 | S FLDLST="2;3;5;6;70" | 
|---|
| 82 | S:FLAGS["F" FLDLST=FLDLST_";4"        ; FEE BASIS | 
|---|
| 83 | S:FLAGS["P" FLDLST=FLDLST_";11"       ; TYPE OF RECORD | 
|---|
| 84 | ;--- Load the data | 
|---|
| 85 | D GETS^DIQ(45,IENS,FLDLST,"I","RORBUF","RORMSG") | 
|---|
| 86 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,45,IENS) | 
|---|
| 87 | ;--- | 
|---|
| 88 | S ADMDT=$G(RORBUF(45,IENS,2,"I"))     ; ADMISSION DATE | 
|---|
| 89 | S FACILITY=$G(RORBUF(45,IENS,3,"I"))  ; FACILITY | 
|---|
| 90 | S SUFFIX=$G(RORBUF(45,IENS,5,"I"))    ; SUFFIX | 
|---|
| 91 | S STATUS=$G(RORBUF(45,IENS,6,"I"))    ; STATUS | 
|---|
| 92 | S DISDT=$G(RORBUF(45,IENS,70,"I"))    ; DISCHARGE DATE | 
|---|
| 93 | Q:ADMDT'>0 1 | 
|---|
| 94 | ;--- Skip a non-PTF record | 
|---|
| 95 | I FLAGS["P"  Q:$G(RORBUF(45,IENS,11,"I"))'=1 1 | 
|---|
| 96 | ;--- Skip a fee basis record | 
|---|
| 97 | I FLAGS["F"  Q:$G(RORBUF(45,IENS,4,"I")) 1 | 
|---|
| 98 | ;--- Success | 
|---|
| 99 | Q 0 | 
|---|
| 100 | ; | 
|---|
| 101 | ;**** CALL-BACK ENTRY POINTS FOR THE SDQ API | 
|---|
| 102 | SDQSCAN1(Y,Y0) ; | 
|---|
| 103 | N TMP | 
|---|
| 104 | ;--- Check the clinic | 
|---|
| 105 | I '$$PARAM^RORTSK01("CLINICS","ALL")  D  Q:'TMP | 
|---|
| 106 | . S TMP=$D(RORTSK("PARAMS","CLINICS","C",+$P(Y0,U,4))) | 
|---|
| 107 | ;--- Count the encounters | 
|---|
| 108 | S RORENCNT=RORENCNT+1 | 
|---|
| 109 | Q | 
|---|
| 110 | ; | 
|---|
| 111 | SDQSCAN2(Y,Y0) ; | 
|---|
| 112 | N DTX,TMP | 
|---|
| 113 | ;--- Check the clinic | 
|---|
| 114 | I '$$PARAM^RORTSK01("CLINICS","ALL")  D  Q:'TMP | 
|---|
| 115 | . S TMP=$D(RORTSK("PARAMS","CLINICS","C",+$P(Y0,U,4))) | 
|---|
| 116 | ;--- Date of the visit | 
|---|
| 117 | S DTX=+$P(Y0,U)  S:(DTX>RORLAST)&(DTX<RORDT) RORLAST=DTX | 
|---|
| 118 | Q | 
|---|
| 119 | ; | 
|---|
| 120 | ;***** CHECKS IF THE PATIENT WAS SEEN AT SELECTED CLINICS | 
|---|
| 121 | ; | 
|---|
| 122 | ; RORSDT        Start Date for search (FileMan). | 
|---|
| 123 | ;               Time is ignored and the beginning of the day is | 
|---|
| 124 | ;               considered as the boundary (ST\1). | 
|---|
| 125 | ; | 
|---|
| 126 | ; ROREDT        End Date for search (FileMan). | 
|---|
| 127 | ;               Time is ignored and the end of the day is | 
|---|
| 128 | ;               considered as the boundary (ED\1+1). | 
|---|
| 129 | ; | 
|---|
| 130 | ; PATIEN        Patient IEN (file #2) | 
|---|
| 131 | ; | 
|---|
| 132 | ; Return Values: | 
|---|
| 133 | ;        0  The patient was not seen at any of the given clinics | 
|---|
| 134 | ;           during the provided time frame | 
|---|
| 135 | ;        1  The patient was seen | 
|---|
| 136 | ; | 
|---|
| 137 | SEEN(RORSDT,ROREDT,PATIEN) ; | 
|---|
| 138 | N QUERY,RORENCNT | 
|---|
| 139 | S RORENCNT=0 | 
|---|
| 140 | ;--- | 
|---|
| 141 | D OPEN^SDQ(.QUERY) | 
|---|
| 142 | D INDEX^SDQ(.QUERY,"PATIENT/DATE","SET") | 
|---|
| 143 | D PAT^SDQ(.QUERY,PATIEN,"SET") | 
|---|
| 144 | D DATE^SDQ(.QUERY,RORSDT\1,$$FMADD^XLFDT(ROREDT\1,1),"SET") | 
|---|
| 145 | D SCANCB^SDQ(.QUERY,"D SDQSCAN1^RORXU001(Y,Y0)","SET") | 
|---|
| 146 | D ACTIVE^SDQ(.QUERY,"TRUE","SET") | 
|---|
| 147 | D SCAN^SDQ(.QUERY,"FORWARD") | 
|---|
| 148 | D CLOSE^SDQ(.QUERY) | 
|---|
| 149 | ;--- | 
|---|
| 150 | Q (RORENCNT>0) | 
|---|