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