[613] | 1 | DGENA5 ;ISA/Zoltan - Enrollment API - CD Processing; 05/11/99
|
---|
| 2 | ;;5.3;Registration;**232**;Aug 13, 1993
|
---|
| 3 | ;Phase II API's Related to Catastrophic Disability.
|
---|
| 4 | ;
|
---|
| 5 | ; The following variable names are used consistently in this routine:
|
---|
| 6 | ; DFN = IEN in PATIENT file (#2).
|
---|
| 7 | ; REASON = IEN in CATASTROPHIC DISABILITY REASONS file (#2).
|
---|
| 8 | ; COND = Sub-ien PATIENT(#2) CD STATUS CONDITIONS field (#.398).
|
---|
| 9 | ; SCORE = Score achieved by veteran on a test (#2, #.398, #1).
|
---|
| 10 | ; PERM = Permanent Indicator (#2, #.398, #2).
|
---|
| 11 | ; D2 = Secondary delimiter (optional.)
|
---|
| 12 | ;
|
---|
| 13 | ; Processing related to a patient (#2).
|
---|
| 14 | VCD(DFN) ; Veteran Catastrophically Disabled? (#.39)
|
---|
| 15 | Q $P($G(^DPT(DFN,.39)),"^",6)
|
---|
| 16 | CONDHELP(DFN,COND) ; Display help text for a condition.
|
---|
| 17 | ; Applies to the PATIENT file (#2) CD STATUS CONDITIONS field (#.398)
|
---|
| 18 | ; Note - Help text stored in 27.17 CD REASONS.
|
---|
| 19 | N REASON
|
---|
| 20 | S REASON=$$REASON(DFN,COND)
|
---|
| 21 | D HELP(REASON)
|
---|
| 22 | Q
|
---|
| 23 | CONDINP(DFN,COND,SCORE) ; Validate a score entered by the user for a PATIENT.
|
---|
| 24 | N REASON
|
---|
| 25 | S REASON=$$REASON(DFN,COND)
|
---|
| 26 | Q $$VALID(REASON,SCORE)
|
---|
| 27 | CONDMET(DFN,COND) ; Determine whether a condition meets the criteria.
|
---|
| 28 | N SCORE,PERM
|
---|
| 29 | S REASON=$$REASON(DFN,COND)
|
---|
| 30 | S SCORE=$$PATSCORE(DFN,COND)
|
---|
| 31 | S PERM=$$PATPERM(DFN,COND)
|
---|
| 32 | Q $$RANGEMET(REASON,SCORE,PERM)
|
---|
| 33 | ; Patient Field Lookup.
|
---|
| 34 | REASON(DFN,COND) ; Get the CD REASON for this patient, for this condition.
|
---|
| 35 | N REASON
|
---|
| 36 | I DFN=""!(COND="") D
|
---|
| 37 | . S REASON=$G(DGCDREAS)
|
---|
| 38 | . I REASON="",$G(ITEM)'="" S REASON=$G(DGCDIS("COND",ITEM))
|
---|
| 39 | E S REASON=$P($G(^DPT(DFN,.398,COND,0)),"^",1)
|
---|
| 40 | Q REASON
|
---|
| 41 | PATSCORE(DFN,COND) ; Get the TEST SCORE for this patient, for this condition.
|
---|
| 42 | N REASON
|
---|
| 43 | I DFN=""!(COND="") Q ""
|
---|
| 44 | S REASON=$P($G(^DPT(DFN,.398,COND,0)),"^",2)
|
---|
| 45 | Q REASON
|
---|
| 46 | PATPERM(DFN,COND) ; Get the PERMANENT INDICATOR for this patient+condition.
|
---|
| 47 | N REASON
|
---|
| 48 | I DFN=""!(COND="") Q ""
|
---|
| 49 | S REASON=$P($G(^DPT(DFN,.398,COND,0)),"^",3)
|
---|
| 50 | Q REASON
|
---|
| 51 | ; Processing related to catastrophic disability reasons (#27.17)
|
---|
| 52 | HELP(REASON) ; Display help text from 27.17 CD REASONS.
|
---|
| 53 | N LINE
|
---|
| 54 | Q:$$TYPE(REASON)'="C"
|
---|
| 55 | S LINE=0
|
---|
| 56 | W !,"HELP TEXT FOR ",$$NAME(REASON),!
|
---|
| 57 | F S LINE=$O(^DGEN(27.17,REASON,3,LINE)) Q:'LINE D
|
---|
| 58 | . W ?3,^DGEN(27.17,REASON,3,LINE,0),!
|
---|
| 59 | Q
|
---|
| 60 | VALID(REASON,SCORE) ; Validate a proposed score for a test.
|
---|
| 61 | N TEST,X
|
---|
| 62 | S TEST=$$VALSCORE(REASON)
|
---|
| 63 | S X=SCORE
|
---|
| 64 | I @TEST Q 1
|
---|
| 65 | Q 0
|
---|
| 66 | RANGEMET(REASON,SCORE,PERM) ; Determine whether this reason is satisfied.
|
---|
| 67 | N TEST
|
---|
| 68 | S TEST=$$RANGE(REASON)
|
---|
| 69 | I @TEST Q 1
|
---|
| 70 | Q 0
|
---|
| 71 | ; APIs to access CD REASONS file.
|
---|
| 72 | NAME(REASON) ; Return NAME (.01) for this CD REASON.
|
---|
| 73 | Q:'REASON ""
|
---|
| 74 | Q $P($G(^DGEN(27.17,REASON,0)),"^",1)
|
---|
| 75 | TYPE(REASON) ; Return TYPE (#1) for this CD REASON.
|
---|
| 76 | Q:'REASON ""
|
---|
| 77 | Q $P($G(^DGEN(27.17,REASON,0)),"^",2)
|
---|
| 78 | VALSCORE(REASON) ; Return VALIDATION (#7) for this CD REASON.
|
---|
| 79 | ; This determines whether a score is valid at all.
|
---|
| 80 | Q $G(^DGEN(27.17,REASON,4))
|
---|
| 81 | RANGE(REASON) ; Return TEST SCORE RANGE (#5) for this CD REASON.
|
---|
| 82 | ; This determines whether the score qualifies for CD.
|
---|
| 83 | Q $G(^DGEN(27.17,REASON,2))
|
---|
| 84 | FILENAME(REASON) ; Return the file name to which this CD Reason points.
|
---|
| 85 | N CODEPTR,DIC,DO
|
---|
| 86 | S U=$G(U,"^")
|
---|
| 87 | S CODEPTR=$$CODEPTR(REASON)
|
---|
| 88 | I CODEPTR="" Q ""
|
---|
| 89 | S DIC="^"_$P(CODEPTR,";",2)
|
---|
| 90 | S DIC(0)=""
|
---|
| 91 | D DO^DIC1
|
---|
| 92 | Q $P(DO,"^",1)
|
---|
| 93 | CODE(REASON) ; Return the HL7 Transmission Code for this CD Reason.
|
---|
| 94 | Q:'REASON ""
|
---|
| 95 | Q $P($G(^DGEN(27.17,REASON,0)),"^",4)
|
---|
| 96 | CODENAME(REASON) ; Return name of code associated with this CD Reason.
|
---|
| 97 | N CODEPTR,CODEIEN,CODEGLO,CODEPC,CODENAME,CODE
|
---|
| 98 | S CODEPTR=$$CODEPTR(REASON)
|
---|
| 99 | I CODEPTR="" Q ""
|
---|
| 100 | S CODEIEN=$P(CODEPTR,";",1)
|
---|
| 101 | S CODEGLO=$P(CODEPTR,";",2)
|
---|
| 102 | S CODEPC=$S(CODEGLO="ICD9(":3,CODEGLO="ICD0(":4,CODEGLO="ICPT(":2)
|
---|
| 103 | S CODEGLO="^"_CODEGLO_CODEIEN_",0)"
|
---|
| 104 | S CODE=$P(@CODEGLO,"^",1)
|
---|
| 105 | S CODENAME=$P(@CODEGLO,"^",CODEPC)
|
---|
| 106 | Q CODENAME
|
---|
| 107 | CODEPTR(REASON) ; Internal label--get pointer to CODE.
|
---|
| 108 | Q $P($G(^DGEN(27.17,REASON,0)),"^",3)
|
---|
| 109 | LSCREEN(LIMBCODE) ; Used to validate LIMB in screen.
|
---|
| 110 | N REASON
|
---|
| 111 | S REASON=""
|
---|
| 112 | I $G(D0)=""!($G(D1)="") D
|
---|
| 113 | . S REASON=$G(DGCDREAS)
|
---|
| 114 | . I REASON="",$G(ITEM)'="" S REASON=$G(DGCDIS("PROC",ITEM))
|
---|
| 115 | E S REASON=$P($G(^DPT(D0,.397,D1,0)),"^",1)
|
---|
| 116 | I REASON="" Q ".RUE.LUE.RLE.LLE."[("."_LIMBCODE_".")
|
---|
| 117 | Q $$LIMBOK(REASON,LIMBCODE)
|
---|
| 118 | LIMBOK(REASON,LIMBCODE) ; Return 1/0 Affected Extremity OK for this REASON.
|
---|
| 119 | N LIMBIEN,VALID
|
---|
| 120 | S VALID=0
|
---|
| 121 | S LIMBIEN=0
|
---|
| 122 | F S LIMBIEN=$$NEXTLIMB(REASON,LIMBIEN) Q:'LIMBIEN D Q:VALID
|
---|
| 123 | . I $$LIMBCODE(REASON,LIMBIEN)=LIMBCODE S VALID=1
|
---|
| 124 | Q VALID
|
---|
| 125 | NEXTLIMB(REASON,LIMBIEN) ; Get next possible limb for this REASON.
|
---|
| 126 | I 'LIMBIEN S LIMBIEN=0
|
---|
| 127 | S LIMBIEN=$O(^DGEN(27.17,REASON,1,LIMBIEN))
|
---|
| 128 | I 'LIMBIEN S LIMBIEN=""
|
---|
| 129 | Q LIMBIEN
|
---|
| 130 | LIMBCODE(REASON,LIMBIEN) ; Return limb code for an affected limb.
|
---|
| 131 | Q $P($G(^DGEN(27.17,REASON,1,LIMBIEN,0)),"^",1)
|
---|
| 132 | ; HL7-related changes.
|
---|
| 133 | HL7TORSN(HL7VAL,D2) ; Return REASON IEN for a HL7 Transmission Value.
|
---|
| 134 | ; This function returns the IEN or 0 if there is none.
|
---|
| 135 | S D2=$S(11[$D(D2):D2,11[$D(HLECH):$E(HLECH),1:"~")
|
---|
| 136 | I $P("KATZ^FOLS^FIM^GAF","^",$P(HL7VAL,D2,1))=$P(HL7VAL,D2,2) D
|
---|
| 137 | . S HL7VAL=$P("KATZ^FOLS^FIM^GAF","^",+HL7VAL)
|
---|
| 138 | E S HL7VAL=$P(HL7VAL,D2)
|
---|
| 139 | Q:HL7VAL="" 0
|
---|
| 140 | Q +$O(^DGEN(27.17,"C",HL7VAL,""))
|
---|
| 141 | RSNTOHL7(REASON,D2) ; Return HL7 Segment Value for this Reason.
|
---|
| 142 | Q:REASON="" 0
|
---|
| 143 | S D2=$S(11[$D(D2):D2,11[$D(HLECH):$E(HLECH),1:"~")
|
---|
| 144 | N NAME,NUMBER,TABLE,FILE,CODE,HL7VAL
|
---|
| 145 | I $$TYPE(REASON)="C" D
|
---|
| 146 | . S CODE=$$CODE(REASON)
|
---|
| 147 | . Q:CODE=""
|
---|
| 148 | . S NUMBER=$L($P("KATZ^FOLS^FIM^GAF^",CODE),"^")
|
---|
| 149 | . Q:NUMBER>4
|
---|
| 150 | . S TABLE="VA0043"
|
---|
| 151 | . S HL7VAL=NUMBER_D2_CODE_D2_TABLE
|
---|
| 152 | E D
|
---|
| 153 | . S NAME=$$NAME(REASON)
|
---|
| 154 | . Q:NAME=""
|
---|
| 155 | . S CODE=$$CODE(REASON)
|
---|
| 156 | . Q:CODE=""
|
---|
| 157 | . S FILE=$$FILENAME(REASON)
|
---|
| 158 | . Q:FILE=""
|
---|
| 159 | . S HL7VAL=CODE_D2_NAME_D2_FILE
|
---|
| 160 | ; NOTE: an undefined variable error on the following line may
|
---|
| 161 | ; result, if someone has tampered with the CATASTROPHIC
|
---|
| 162 | ; DISABILITY REASONS file (#27.17).
|
---|
| 163 | Q HL7VAL
|
---|
| 164 | HLTOLIMB(HLVAL,D2) ; Convert HL7 transmission value to Limb code.
|
---|
| 165 | ; HLVAL = HL7 text of "Affected Extremity" code.
|
---|
| 166 | ; D2 = Secondary delimiter (for future expansion.)
|
---|
| 167 | ; NOTE: D2 Parameter is ignored at present, but may be
|
---|
| 168 | ; required in future if the sequence structure changes.
|
---|
| 169 | Q $P("RUE-RLE-LUE-LLE","-",+HLVAL)
|
---|
| 170 | LIMBTOHL(LIMB,D2) ; Convert Limb code to HL7 transmission value.
|
---|
| 171 | ; LIMB = Affected Extremity code: RUE = Right Upper Extremity;
|
---|
| 172 | ; LLE = Left Lower Extremity; also RLE and LUE.
|
---|
| 173 | ; D2 = Secondary Delimiter to use in this HL7 sequence.
|
---|
| 174 | S D2=$S(11[$D(D2):D2,11[$D(HLECH):$E(HLECH),1:"~")
|
---|
| 175 | N NUMBER,HLVAL
|
---|
| 176 | I "-RUE-RLE-LUE-LLE-"'[("-"_LIMB_"-")!(LIMB["-") Q ""
|
---|
| 177 | S NUMBER=$L($P("-RUE-RLE-LUE-LLE-","-"_LIMB_"-"),"-")
|
---|
| 178 | S HLVAL=NUMBER_D2_LIMB_D2_"VA0042"
|
---|
| 179 | Q HLVAL
|
---|
| 180 | PERMTOHL(NUMBER,D2) ; Convert Permanent Status Indicator to HL7 sequence.
|
---|
| 181 | ; NUMBER = 1 for Permanent, 2 for Not Permanent, 3 for Unknown.
|
---|
| 182 | ; D2 = Secondary Delimiter to use in this HL7 sequence.
|
---|
| 183 | S D2=$S(11[$D(D2):D2,11[$D(HLECH):$E(HLECH),1:"~")
|
---|
| 184 | N PERM,HLVAL
|
---|
| 185 | S PERM=$P("PERMANENT-NOT PERMANENT-UNKNOWN","-",NUMBER)
|
---|
| 186 | I PERM="" Q ""
|
---|
| 187 | S HLVAL=NUMBER_D2_PERM_D2_"VA0045"
|
---|
| 188 | Q HLVAL
|
---|
| 189 | METH2HL7(METHOD,D2) ; Comvert Method of Determination to HL7 Transmission Value.
|
---|
| 190 | S D2=$S(11[$D(D2):D2,11[$D(HLECH):$E(HLECH),1:"~")
|
---|
| 191 | N METHS
|
---|
| 192 | S METHS="AUTOMATED RECORD REVIEW^MEDICAL RECORD REVIEW^PHYSICAL EXAMINATION"
|
---|
| 193 | I ".1.2.3."'[("."_METHOD_".") Q ""
|
---|
| 194 | Q METHOD_D2_$P(METHS,"^",METHOD)_D2_"VA0041"
|
---|