| [613] | 1 | RORXU005 ;HCIOFO/SG - REPORT BUILDER UTILITIES ; 5/17/06 1:45pm | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;**1**;Feb 17, 2006;Build 24 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; This routine uses the following IAs: | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ; #10035        Direct read of the DOD field of the file #2 | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | Q | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | ;***** CALLBACK FUNCTION FOR DRUG SEARCH API | 
|---|
|  | 11 | REIMBCB(RORDST,ORDER,FLAGS,DRUG,DATE) ; | 
|---|
|  | 12 | S RORDST=1 | 
|---|
|  | 13 | Q 2 | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ;***** RETURNS THE REIMBURSEMENT LEVEL FOR THE PATIENT | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | ; RORIEN        IEN of the patient's record in the registry | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | ; ROR8DRGS      Either closed root of the ARV drug list prepared by | 
|---|
|  | 20 | ;               the $$DRUGLIST^RORUTL16 or the Registry IEN. In the | 
|---|
|  | 21 | ;               latter case, the list will be compiled automatically. | 
|---|
|  | 22 | ; | 
|---|
|  | 23 | ; STDT          Start date | 
|---|
|  | 24 | ; ENDT          End date | 
|---|
|  | 25 | ; | 
|---|
|  | 26 | ; Return Values: | 
|---|
|  | 27 | ;       <0  Error code | 
|---|
|  | 28 | ;        0  Neither Clinical AIDS nor ARV drugs | 
|---|
|  | 29 | ;       10  ARV drugs | 
|---|
|  | 30 | ;       20  Clinical AIDS | 
|---|
|  | 31 | ;       30  Both Clinical AIDS and ARV drugs | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | REIMBLVL(RORIEN,ROR8DRGS,STDT,ENDT) ; | 
|---|
|  | 34 | N PATIEN,RC,RLVL,RORDST | 
|---|
|  | 35 | S RLVL=0 | 
|---|
|  | 36 | ;--- Clinical AIDS | 
|---|
|  | 37 | S:$$CLINAIDS^RORHIVUT(+RORIEN,ENDT) RLVL=RLVL+20 | 
|---|
|  | 38 | ;--- ARV Drugs | 
|---|
|  | 39 | S PATIEN=$$PTIEN^RORUTL01(RORIEN) | 
|---|
|  | 40 | S RORDST("RORCB")="$$REIMBCB^RORXU005" | 
|---|
|  | 41 | S RC=$$RXSEARCH^RORUTL14(PATIEN,ROR8DRGS,.RORDST,"IOV",STDT,ENDT) | 
|---|
|  | 42 | S:$G(RORDST)>0 RLVL=RLVL+10 | 
|---|
|  | 43 | ;--- Reimbursement level | 
|---|
|  | 44 | Q $S(RC<0:RC,1:RLVL) | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | ;***** RETURNS THE PATIENT'S LIST OF RISK FACTORS | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | ; RORIEN        IEN of the patient's record in the registry | 
|---|
|  | 49 | ; | 
|---|
|  | 50 | ; Return Values: | 
|---|
|  | 51 | ;       <0  Error code | 
|---|
|  | 52 | ;       ""  No risk factors have been found | 
|---|
|  | 53 | ;  " ... "  A string containing the risk factor numbers | 
|---|
|  | 54 | ;           separated by commas and spaces | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | RISKS(RORIEN) ; | 
|---|
|  | 57 | Q:'$D(^RORDATA(799.4,+RORIEN,0)) "" | 
|---|
|  | 58 | N FLD,FLDLST,I,RISKLST,RORBUF,RORMSG | 
|---|
|  | 59 | S FLDLST="14.01;14.02;14.03;14.04;14.08;14.07;14.09;14.1;14.11;14.12;14.13;14.16;14.17" | 
|---|
|  | 60 | ;--- Load the risk fields | 
|---|
|  | 61 | S IENS=(+RORIEN)_"," | 
|---|
|  | 62 | D GETS^DIQ(799.4,IENS,FLDLST,"I","RORBUF","RORMSG") | 
|---|
|  | 63 | Q:$G(DIERR) $$DBS^RORERR(799.4,-9,,,799.4,IENS) | 
|---|
|  | 64 | ;--- Process the data | 
|---|
|  | 65 | S RISKLST="" | 
|---|
|  | 66 | F I=1:1  S FLD=$P(FLDLST,";",I)  Q:FLD=""  D:FLD>0 | 
|---|
|  | 67 | . S:$G(RORBUF(799.4,IENS,FLD,"I"))=1 RISKLST=RISKLST_", "_I | 
|---|
|  | 68 | Q $P(RISKLST,", ",2,999) | 
|---|
|  | 69 | ; | 
|---|
|  | 70 | ;***** DETERMINES IF THE PATIENT SHOULD NOT BE INCLUDED IN THE REPORT | 
|---|
|  | 71 | ; | 
|---|
|  | 72 | ; RORIEN        IEN of the patient's record in the registry | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | ; FLAGS         Flags that control the execution (can be combined) | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | ;                 C  Skip confirmed patients | 
|---|
|  | 77 | ;                 G  Skip pending patients | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | ;                 D  Skip deceased patients | 
|---|
|  | 80 | ;                 L  Skip alive patients | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | ;                 P  Skip patients confirmed before the start date | 
|---|
|  | 83 | ;                 N  Skip patients confirmed during the report | 
|---|
|  | 84 | ;                    time frame | 
|---|
|  | 85 | ;                 F  Skip patients added after the end date | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | ;                 O  Process LOCAL_FIELDS | 
|---|
|  | 88 | ;                 R  Process OTHER_REGISTRIES | 
|---|
|  | 89 | ; | 
|---|
|  | 90 | ; [STDT]        Start date of the report (FileMan). | 
|---|
|  | 91 | ;               Time is ignored and the beginning of the day is | 
|---|
|  | 92 | ;               considered as the boundary (STDT\1). | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | ;               If not defined or not greater than 0 then 0 is used. | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ; [ENDT]        End date of the report (FileMan). | 
|---|
|  | 97 | ;               Time is ignored and the end of the day is | 
|---|
|  | 98 | ;               considered as the boundary (ENDT\1+1). | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | ;               If not defined or not greater than 0 then 9999999 | 
|---|
|  | 101 | ;               is used. | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | ; Return Values: | 
|---|
|  | 104 | ;        0  Include the patient's data in the report | 
|---|
|  | 105 | ;        1  Skip the patient | 
|---|
|  | 106 | ; | 
|---|
|  | 107 | SKIP(RORIEN,FLAGS,STDT,ENDT) ; | 
|---|
|  | 108 | N DOD,IEN,MODE,NODE,PTIEN,REGIEN,SKIP,STATUS,TMP | 
|---|
|  | 109 | S SKIP=0 | 
|---|
|  | 110 | ;--- Always skip patients marked for deletion | 
|---|
|  | 111 | Q:$$SKIPNA(RORIEN,FLAGS,.STATUS) 1 | 
|---|
|  | 112 | ;---Include all registry patients if flags are not provided | 
|---|
|  | 113 | Q:FLAGS="" 0 | 
|---|
|  | 114 | ; | 
|---|
|  | 115 | ;--- Confirmed | 
|---|
|  | 116 | I FLAGS["C"  Q:STATUS'=4 1 | 
|---|
|  | 117 | ; | 
|---|
|  | 118 | ;--- Alive/Deceased patients | 
|---|
|  | 119 | S STDT=$S($G(STDT)>0:STDT\1,1:0) | 
|---|
|  | 120 | I $TR(FLAGS,"LD")'=FLAGS  D  Q:$S(TMP:FLAGS["L",1:FLAGS["D") 1 | 
|---|
|  | 121 | . S:'$D(PTIEN) PTIEN=+$$PTIEN^RORUTL01(RORIEN) | 
|---|
|  | 122 | . S DOD=+$P($G(^DPT(PTIEN,.35)),U) | 
|---|
|  | 123 | . S TMP=$S(DOD>0:DOD'<STDT,1:1) | 
|---|
|  | 124 | ; | 
|---|
|  | 125 | ;--- Confirmed before/during/after the date range | 
|---|
|  | 126 | S ENDT=$S($G(ENDT)>0:ENDT\1,1:9999999)+1 | 
|---|
|  | 127 | I $TR(FLAGS,"PNF")'=FLAGS  D  Q:TMP 1 | 
|---|
|  | 128 | . S TMP=+$$CONFDT^RORUTL18(RORIEN)  ; Date Confirmed | 
|---|
|  | 129 | . S TMP=$S(TMP<STDT:FLAGS["P",TMP>ENDT:FLAGS["F",1:FLAGS["N") | 
|---|
|  | 130 | ; | 
|---|
|  | 131 | ;--- Other registries | 
|---|
|  | 132 | I FLAGS["R"  D  Q:SKIP 1 | 
|---|
|  | 133 | . S NODE=$NA(RORTSK("PARAMS","OTHER_REGISTRIES","C")) | 
|---|
|  | 134 | . Q:$D(@NODE)<10 | 
|---|
|  | 135 | . S:'$D(PTIEN) PTIEN=+$$PTIEN^RORUTL01(RORIEN) | 
|---|
|  | 136 | . S REGIEN=0 | 
|---|
|  | 137 | . F  S REGIEN=$O(@NODE@(REGIEN))  Q:REGIEN'>0  D  Q:SKIP | 
|---|
|  | 138 | . . S MODE=+$G(@NODE@(REGIEN))  Q:'MODE | 
|---|
|  | 139 | . . S IEN=$$PRRIEN^RORUTL01(PTIEN,REGIEN) | 
|---|
|  | 140 | . . I IEN'>0  S SKIP=1 | 
|---|
|  | 141 | . . E  S:$$SKIPNA(IEN,FLAGS) SKIP=1 | 
|---|
|  | 142 | . . S:MODE<0 SKIP='SKIP  ; Exclude | 
|---|
|  | 143 | ; | 
|---|
|  | 144 | ;--- Local Fields | 
|---|
|  | 145 | I FLAGS["O"  D  Q:SKIP 1 | 
|---|
|  | 146 | . S NODE=$NA(RORTSK("PARAMS","LOCAL_FIELDS","C")) | 
|---|
|  | 147 | . Q:$D(@NODE)<10 | 
|---|
|  | 148 | . S IEN=0 | 
|---|
|  | 149 | . F  S IEN=$O(@NODE@(IEN))  Q:IEN'>0  D  Q:SKIP | 
|---|
|  | 150 | . . S MODE=+$G(@NODE@(IEN))  Q:'MODE | 
|---|
|  | 151 | . . S:'$D(^RORDATA(798,RORIEN,20,"B",IEN)) SKIP=1 | 
|---|
|  | 152 | . . S:MODE<0 SKIP='SKIP  ; Exclude | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | ;--- Include in the report | 
|---|
|  | 155 | Q 0 | 
|---|
|  | 156 | ; | 
|---|
|  | 157 | ;***** CHECKS STATUS OF THE PATIENT'S REGISTRY RECORD (internal) | 
|---|
|  | 158 | ; | 
|---|
|  | 159 | ; IEN798        IEN of the patient's record in the registry | 
|---|
|  | 160 | ; | 
|---|
|  | 161 | ; FLAGS         Flags that control the execution | 
|---|
|  | 162 | ; | 
|---|
|  | 163 | ; [.STATUS]     Status code is returned via this parameter. | 
|---|
|  | 164 | ; | 
|---|
|  | 165 | ; Return Values: | 
|---|
|  | 166 | ;        0  Continue processing of the patient's data | 
|---|
|  | 167 | ;        1  Skip the patient | 
|---|
|  | 168 | ; | 
|---|
|  | 169 | SKIPNA(IEN798,FLAGS,STATUS) ; | 
|---|
|  | 170 | Q:$$ACTIVE^RORDD(IEN798,,.STATUS) 0  ; Active patient | 
|---|
|  | 171 | Q:(STATUS=5)!(STATUS="") 1           ; Deleted patient | 
|---|
|  | 172 | Q:(STATUS=4)&(FLAGS["G") 1           ; Pending patient | 
|---|
|  | 173 | Q 0 | 
|---|