├── AlgorexCore.py ├── CMS-sas ├── AGESEXV2.SAS ├── F211690R.ICD10.SAS ├── F211690R.ICD9.SAS ├── SCOREVAR.SAS ├── V20H87H1.SAS ├── V20H87L1.SAS ├── V2116H1M.SAS ├── V2116H1P.SAS ├── V21I0ED1.SAS └── V21I9ED1.SAS ├── Diagram.png ├── HCC Library Demonstration.ipynb ├── README.md ├── coefficients.txt ├── execution-of-model.png ├── framework.png ├── hcc.py ├── icd10.txt ├── icd9.txt ├── legend.png └── model.png /AlgorexCore.py: -------------------------------------------------------------------------------- 1 | import random 2 | from bokeh.palettes import Spectral11, small_palettes, plasma, BrBG, viridis, magma 3 | # give me 100 patient ids 4 | ids = range(1, 101) 5 | 6 | 7 | pareto = [random.paretovariate(7) for x in ids] 8 | 9 | expo = [random.expovariate(1) for x in range(5)] 10 | # my = Model Year and all these arrays are empty to be populated for visualizations 11 | myHCCRisk =[] 12 | mySocialRisk = [] 13 | myHouseRisk = [] 14 | pyFullRisk = [] # py == Predicted Year full risk 15 | 16 | for x in ids: 17 | var = random.expovariate(1.4) # this is our fake HCC... or our base variable 18 | sox = var * random.expovariate(.8) #expo == exponential distribution with a lambda of 0.8 19 | # sox == Social 20 | hous = var * random.expovariate(.8) 21 | # hous == Housing 22 | myHCCRisk.append(var) 23 | mySocialRisk.append(sox) 24 | myHouseRisk.append(hous) 25 | pyFullRisk.append(var+sox+hous) 26 | # this is all the randomization for the "parallel coordinates" graph 27 | 28 | riskRand = [random.expovariate(2) + random.random() for x in ids] 29 | 30 | HCCRisk = {'2015':riskRand,'2016':[abs(random.uniform(-2,1) + x) for x in riskRand]} 31 | SocialRisk = {'2015':[x + random.expovariate(4) for x in riskRand]} 32 | 33 | # #riskRand = [random.normalvariate(5,2) for x in ids] 34 | # riskRand = myHCCRisk 35 | # #HCCRisk = {'2015':riskRand,'2016':[x - abs(random.expovariate(1) ) for x in riskRand]} 36 | # HCCRisk = {'2015':riskRand,'2016':[x - random.random() for x in riskRand]} 37 | 38 | #SocialRisk = {'2015':[abs(random.expovariate(4) + 1 + x) for x in riskRand]} 39 | 40 | import pandas as pd 41 | from decimal import * 42 | getcontext().prec = 2 43 | TotalMembership = 45000.0 44 | TotalExpense = TotalMembership*10000 45 | HospitalCare = TotalExpense * .3396 46 | ProfessionalServices = TotalExpense * .2754 47 | PrimaryCare = ProfessionalServices *.253 48 | AmbulatorySurgery = ProfessionalServices *14 49 | SpecialtyObservation = ProfessionalServices -AmbulatorySurgery -PrimaryCare 50 | HomeHealth = TotalExpense * .0291 51 | RxDrug = TotalExpense * .106 52 | DME = TotalExpense *.0159 53 | LongTermCare = TotalExpense * .1055 54 | Radiology = TotalExpense * .0755 55 | EmergencyCare = (TotalExpense - .0843) 56 | Other = TotalExpense - HospitalCare - ProfessionalServices - HomeHealth - RxDrug -DME- LongTermCare- Radiology - EmergencyCare 57 | 58 | d = {'Total Membership':TotalMembership, 'Expenses':{'Hospital Care':HospitalCare, 59 | 'Professional Services': 60 | {'Primary Care':PrimaryCare, 61 | 'Ambulatory Surgery':AmbulatorySurgery, 62 | 'Specialty':SpecialtyObservation, 63 | 'Total':ProfessionalServices}, 64 | 'HomeHealth':HomeHealth, 65 | 'RxDrug':RxDrug, 66 | 'DME':DME,'LongTermCare':LongTermCare, 67 | 'Radiology':Radiology, 68 | 'Emergency':EmergencyCare, 69 | 'Other':Other, 70 | 'Total':TotalExpense } 71 | 72 | } 73 | 74 | ClaimsSummary = pd.DataFrame(d) 75 | 76 | 77 | 78 | 79 | 80 | def getColor(count): 81 | colors = viridis(256) 82 | colors = colors * 40 83 | z = colors[0:count] 84 | return z 85 | 86 | 87 | 88 | 89 | 90 | def dbConnect(constring): 91 | return True 92 | 93 | def cursor(query): 94 | return range(int(TotalMembership * 2.4)) 95 | 96 | def width_calc(value): 97 | width = value*5 98 | if width > 25: 99 | return 25 100 | elif width < 2: 101 | return 2 102 | else: 103 | return width 104 | 105 | def name_hcc(label): 106 | try: 107 | var = hcc_labels[label][0:8] 108 | return var 109 | except: 110 | return label[0:8] 111 | 112 | 113 | hcc_labels = {'HCC1':"AIDS", 114 | 'HCC2':"Septicemia", 115 | 'HCC6':"Opportunistic_Infections", 116 | 'HCC8':"Metastatic_Cancer", 117 | 'HCC9':"Lung_Cancers", 118 | 'HCC10':"Lymphoma", 119 | 'HCC11':"Colorectal_Cancers", 120 | 'HCC12':"Breast_Prostate_Tumors", 121 | 'HCC17':"Diabetes_Acute_Complications", 122 | 'HCC18':"Diabetes_Chronic", 123 | 'HCC19':"Diabetes", 124 | 'HCC21':"Malnutrition", 125 | 'HCC22':"Obesity", 126 | 'HCC23':"Endocrine", 127 | 'HCC27':"ESLD", 128 | 'HCC28':"Cirrhosis", 129 | 'HCC29':"Hepatitis", 130 | 'HCC33':"Intestinal_Obstruction", 131 | 'HCC34':"Pancreatitis", 132 | 'HCC35':"IBD", 133 | 'HCC39':"BJM_Infections", 134 | 'HCC40':"Rheumatoid_Arthritis", 135 | 'HCC46':"Hematology_Disorders", 136 | 'HCC47':"Immunity_Disorders", 137 | 'HCC48':"Coagulation_Defects", 138 | 'HCC54':"Substance_Psychosis", 139 | 'HCC55':"Substance_Dependence", 140 | 'HCC57':"Schizophrenia", 141 | 'HCC58':"Deppresion_Bipolar", 142 | 'HCC70':"Quadriplegia", 143 | 'HCC71':"Paraplegia", 144 | 'HCC72':"Spinal_Cord_Disorders", 145 | 'HCC73':"ALS", 146 | 'HCC74':"Cerebral_Palsy", 147 | 'HCC75':"Myasthenia", 148 | 'HCC76':"Muscular_Dystrophy", 149 | 'HCC77':"Multiple_Sclerosis", 150 | 'HCC78':"Parkinson_Huntington", 151 | 'HCC79':"Seizures", 152 | 'HCC80':"Coma", 153 | 'HCC82':"Respirator_Dependence", 154 | 'HCC83':"Respiratory-Arrest", 155 | 'HCC84':"Cardio-Respiratory-Failure", 156 | 'HCC85':"CHF", 157 | 'HCC86':"AMI", 158 | 'HCC87':"IVD", 159 | 'HCC88':"Angina_Pectoris", 160 | 'HCC96':"Arrhythmias", 161 | 'HCC99':"Cerebral_Hemorrhage", 162 | 'HCC100':"Stroke", 163 | 'HCC103':"Hemiplegia", 164 | 'HCC104':"Monoplegia", 165 | 'HCC106':"Gangrene", 166 | 'HCC107':"Vascular_Disease_Complications", 167 | 'HCC108':"Vascular_Disease", 168 | 'HCC110':"Cystic_Fibrosis", 169 | 'HCC111':"COPD", 170 | 'HCC112':"Fibrosis_Lung", 171 | 'HCC114':"Pneumonias", 172 | 'HCC115':"Pneumococcal", 173 | 'HCC122':"Retinopathy", 174 | 'HCC124':"Macular_Degeneration", 175 | 'HCC134':"Dialysis_Status", 176 | 'HCC135':"Acute_Renal_Failure", 177 | 'HCC136':"CKD5", 178 | 'HCC137':"CKD6", 179 | 'HCC157':"Ulcer_Necrosis", 180 | 'HCC158':"Ulcer_Skin_Loss", 181 | 'HCC161':"Ulcer_Chronic", 182 | 'HCC162':"Burn", 183 | 'HCC166':"Head_Injury_Severe", 184 | 'HCC167':"Head_Injury", 185 | 'HCC169':"Spinal_Cord", 186 | 'HCC170':"Hip_Fracture", 187 | 'HCC173':"Amputation", 188 | 'HCC176':"Graft_Implant", 189 | 'HCC186':"Organ_Transplant", 190 | 'HCC188':"Artifical_Opening", 191 | 'HCC189':"Amputation_Complicated"} 192 | 193 | 194 | office =['99201','99202','99203','99204','99205','99211','99212','99213','99214','99215'] 195 | nursing_facility = ['99304','99304','99305','99306','99307','99308','99309','99310', '99315','99316','99318'] 196 | rest_home = ['99324','99325','99326','99327','99328','99334','99335','99336','99337','99339','99340'] 197 | home_services = ['99341','99342','99343','99344','99345','99347','99348','99349','99350','99490','99495','99496'] 198 | wellness_visits = ['G0402','G0438','G0439'] 199 | preven_codes = [x for x in [office, nursing_facility, rest_home, wellness_visits]] 200 | 201 | -------------------------------------------------------------------------------- /CMS-sas/AGESEXV2.SAS: -------------------------------------------------------------------------------- 1 | %MACRO AGESEXV2(AGEF=, SEX=, OREC=); 2 | %********************************************************************** 3 | *********************************************************************** 4 | 1 MACRO NAME: AGESEXV2 5 | 2 PURPOSE: create demographic variables used in regressions. 6 | 3 PARAMETERS: 7 | AGEF - age variable (integer) 8 | SEX - sex variable (character) 9 | OREC - original reason for entitlement 10 | variable from Denominator (character) 11 | 4 CREATED VARIABLES: 12 | ORIGDS - originally disabled dummy variable 13 | DISABL - disabled dummy variable 14 | 24 dummy agesex variables for all models except 15 | "new enrollee": 16 | F0_34 F35_44 F45_54 F55_59 F60_64 F65_69 17 | F70_74 F75_79 F80_84 F85_89 F90_94 F95_GT 18 | M0_34 M35_44 M45_54 M55_59 M60_64 M65_69 19 | M70_74 M75_79 M80_84 M85_89 M90_94 M95_GT 20 | 32 dummy agesex variables for "new enrollee" model: 21 | NEF0_34 NEF35_44 NEF45_54 NEF55_59 NEF60_64 22 | NEF65 NEF66 NEF67 NEF68 NEF69 23 | NEF70_74 NEF75_79 NEF80_84 NEF85_89 NEF90_94 24 | NEF95_GT 25 | NEM0_34 NEM35_44 NEM45_54 NEM55_59 NEM60_64 26 | NEM65 NEM66 NEM67 NEM68 NEM69 27 | NEM70_74 NEM75_79 NEM80_84 NEM85_89 NEM90_94 28 | NEM95_GT 29 | ***********************************************************************; 30 | LENGTH 31 | /* for all score variables except "NEW ENROLLEE" */ 32 | F0_34 F35_44 F45_54 F55_59 F60_64 F65_69 33 | F70_74 F75_79 F80_84 F85_89 F90_94 F95_GT 34 | M0_34 M35_44 M45_54 M55_59 M60_64 M65_69 35 | M70_74 M75_79 M80_84 M85_89 M90_94 M95_GT 36 | DISABL 37 | ORIGDS 38 | /* for "NEW ENROLLEE" score variable */ 39 | NEF0_34 NEF35_44 NEF45_54 NEF55_59 NEF60_64 40 | NEF65 NEF66 NEF67 NEF68 NEF69 41 | NEF70_74 NEF75_79 NEF80_84 NEF85_89 NEF90_94 42 | NEF95_GT 43 | NEM0_34 NEM35_44 NEM45_54 NEM55_59 NEM60_64 44 | NEM65 NEM66 NEM67 NEM68 NEM69 45 | NEM70_74 NEM75_79 NEM80_84 NEM85_89 NEM90_94 46 | NEM95_GT 47 | 3.; 48 | 49 | /* for all score variables except "NEW ENROLLEE" */ 50 | ARRAY CELL(24) 51 | F0_34 F35_44 F45_54 F55_59 F60_64 F65_69 52 | F70_74 F75_79 F80_84 F85_89 F90_94 F95_GT 53 | M0_34 M35_44 M45_54 M55_59 M60_64 M65_69 54 | M70_74 M75_79 M80_84 M85_89 M90_94 M95_GT 55 | ; 56 | /* for "NEW ENROLLEE" score variable */ 57 | ARRAY NECELL(32) 58 | NEF0_34 NEF35_44 NEF45_54 NEF55_59 NEF60_64 59 | NEF65 NEF66 NEF67 NEF68 NEF69 60 | NEF70_74 NEF75_79 NEF80_84 NEF85_89 NEF90_94 NEF95_GT 61 | NEM0_34 NEM35_44 NEM45_54 NEM55_59 NEM60_64 62 | NEM65 NEM66 NEM67 NEM68 NEM69 63 | NEM70_74 NEM75_79 NEM80_84 NEM85_89 NEM90_94 NEM95_GT 64 | ; 65 | %********************************************************************** 66 | * disabled, originally disabled variables 67 | ***********************************************************************; 68 | 69 | %* disabled; 70 | DISABL = (&AGEF < 65 & &OREC ne "0"); 71 | %* originally disabled: CHANGED FIRST TIME FOR THIS SOFTWARE; 72 | ORIGDS = (&OREC = '1')*(DISABL = 0); 73 | 74 | %********************************************************************** 75 | * variables for all models exept "new enrollee" 76 | ***********************************************************************; 77 | 78 | SELECT; 79 | WHEN(&SEX='2' & 0<= &AGEF <=34) _AGESEX = 1; 80 | WHEN(&SEX='2' & 34< &AGEF <=44) _AGESEX = 2; 81 | WHEN(&SEX='2' & 44< &AGEF <=54) _AGESEX = 3; 82 | WHEN(&SEX='2' & 54< &AGEF <=59) _AGESEX = 4; 83 | WHEN(&SEX='2' & 59< &AGEF <=64) _AGESEX = 5; 84 | WHEN(&SEX='2' & 64< &AGEF <=69) _AGESEX = 6; 85 | WHEN(&SEX='2' & 69< &AGEF <=74) _AGESEX = 7; 86 | WHEN(&SEX='2' & 74< &AGEF <=79) _AGESEX = 8; 87 | WHEN(&SEX='2' & 79< &AGEF <=84) _AGESEX = 9; 88 | WHEN(&SEX='2' & 84< &AGEF <=89) _AGESEX = 10; 89 | WHEN(&SEX='2' & 89< &AGEF <=94) _AGESEX = 11; 90 | WHEN(&SEX='2' & &AGEF >94) _AGESEX = 12; 91 | WHEN(&SEX='1' & 0<= &AGEF <=34) _AGESEX = 13; 92 | WHEN(&SEX='1' & 34< &AGEF <=44) _AGESEX = 14; 93 | WHEN(&SEX='1' & 44< &AGEF <=54) _AGESEX = 15; 94 | WHEN(&SEX='1' & 54< &AGEF <=59) _AGESEX = 16; 95 | WHEN(&SEX='1' & 59< &AGEF <=64) _AGESEX = 17; 96 | WHEN(&SEX='1' & 64< &AGEF <=69) _AGESEX = 18; 97 | WHEN(&SEX='1' & 69< &AGEF <=74) _AGESEX = 19; 98 | WHEN(&SEX='1' & 74< &AGEF <=79) _AGESEX = 20; 99 | WHEN(&SEX='1' & 79< &AGEF <=84) _AGESEX = 21; 100 | WHEN(&SEX='1' & 84< &AGEF <=89) _AGESEX = 22; 101 | WHEN(&SEX='1' & 89< &AGEF <=94) _AGESEX = 23; 102 | WHEN(&SEX='1' & &AGEF > 94) _AGESEX = 24; 103 | OTHERWISE; 104 | END; 105 | DO _I=1 TO 24; 106 | CELL(_I) = (_AGESEX = _I); 107 | END; 108 | 109 | %********************************************************************** 110 | * age/sex vars for "new enrollee" model 111 | ***********************************************************************; 112 | SELECT; 113 | WHEN(&SEX='2' & 0<= &AGEF <=34) NE_AGESEX = 1; 114 | WHEN(&SEX='2' & 34< &AGEF <=44) NE_AGESEX = 2; 115 | WHEN(&SEX='2' & 44< &AGEF <=54) NE_AGESEX = 3; 116 | WHEN(&SEX='2' & 54< &AGEF <=59) NE_AGESEX = 4; 117 | WHEN(&SEX='2' & 59< &AGEF <=63) NE_AGESEX = 5; 118 | WHEN(&SEX='2' & &AGEF=64 & &OREC NE '0') NE_AGESEX = 5; 119 | WHEN(&SEX='2' & &AGEF=64 & &OREC='0') NE_AGESEX = 6; 120 | WHEN(&SEX='2' & &AGEF =65) NE_AGESEX = 6; 121 | WHEN(&SEX='2' & &AGEF =66) NE_AGESEX = 7; 122 | WHEN(&SEX='2' & &AGEF =67) NE_AGESEX = 8; 123 | WHEN(&SEX='2' & &AGEF =68) NE_AGESEX = 9; 124 | WHEN(&SEX='2' & &AGEF =69) NE_AGESEX = 10; 125 | WHEN(&SEX='2' & 69< &AGEF <=74) NE_AGESEX = 11; 126 | WHEN(&SEX='2' & 74< &AGEF <=79) NE_AGESEX = 12; 127 | WHEN(&SEX='2' & 79< &AGEF <=84) NE_AGESEX = 13; 128 | WHEN(&SEX='2' & 84< &AGEF <=89) NE_AGESEX = 14; 129 | WHEN(&SEX='2' & 89< &AGEF <=94) NE_AGESEX = 15; 130 | WHEN(&SEX='2' & &AGEF >94) NE_AGESEX = 16; 131 | WHEN(&SEX='1' & 0<= &AGEF <=34) NE_AGESEX = 17; 132 | WHEN(&SEX='1' & 34< &AGEF <=44) NE_AGESEX = 18; 133 | WHEN(&SEX='1' & 44< &AGEF <=54) NE_AGESEX = 19; 134 | WHEN(&SEX='1' & 54< &AGEF <=59) NE_AGESEX = 20; 135 | WHEN(&SEX='1' & 59< &AGEF <=63) NE_AGESEX = 21; 136 | WHEN(&SEX='1' & &AGEF=64 & &OREC NE '0') NE_AGESEX = 21; 137 | WHEN(&SEX='1' & &AGEF=64 & &OREC='0') NE_AGESEX = 22; 138 | WHEN(&SEX='1' & &AGEF =65) NE_AGESEX = 22; 139 | WHEN(&SEX='1' & &AGEF =66) NE_AGESEX = 23; 140 | WHEN(&SEX='1' & &AGEF =67) NE_AGESEX = 24; 141 | WHEN(&SEX='1' & &AGEF =68) NE_AGESEX = 25; 142 | WHEN(&SEX='1' & &AGEF =69) NE_AGESEX = 26; 143 | WHEN(&SEX='1' & 69< &AGEF <=74) NE_AGESEX = 27; 144 | WHEN(&SEX='1' & 74< &AGEF <=79) NE_AGESEX = 28; 145 | WHEN(&SEX='1' & 79< &AGEF <=84) NE_AGESEX = 29; 146 | WHEN(&SEX='1' & 84< &AGEF <=89) NE_AGESEX = 30; 147 | WHEN(&SEX='1' & 89< &AGEF <=94) NE_AGESEX = 31; 148 | WHEN(&SEX='1' & &AGEF >94) NE_AGESEX = 32; 149 | OTHERWISE; 150 | END; 151 | DO _I=1 TO 32; 152 | NECELL(_I)=(NE_AGESEX=_I); 153 | END; 154 | 155 | %**********************************************************************; 156 | LABEL 157 | ORIGDS ="originally disabled dummy variable" 158 | DISABL ="disabled dummy variable" 159 | ; 160 | 161 | %MEND AGESEXV2; -------------------------------------------------------------------------------- /CMS-sas/SCOREVAR.SAS: -------------------------------------------------------------------------------- 1 | %MACRO SCOREVAR( PVAR=, RLIST=, CPREF=); 2 | %********************************************************************** 3 | *********************************************************************** 4 | 1 MACRO NAME: SCOREVAR 5 | 2 PURPOSE: calculate SCORE variable 6 | 3 PARAMETERS: 7 | PVAR - SCORE variable name 8 | RLIST - regression variables list 9 | CPREF - coefficients Prefix: coefficients name 10 | are the same as corresponding variable 11 | name with thei prefix 12 | ***********************************************************************; 13 | %LOCAL I; 14 | %LET I=1; 15 | &PVAR=0; 16 | %DO %UNTIL(%SCAN(&RLIST,&I)=); 17 | &PVAR = &PVAR + %SCAN(&RLIST,&I)*&CPREF%SCAN(&RLIST,&I); 18 | %LET I=%EVAL(&I+1); 19 | %END; 20 | 21 | %MEND SCOREVAR; 22 | -------------------------------------------------------------------------------- /CMS-sas/V20H87H1.SAS: -------------------------------------------------------------------------------- 1 | %MACRO V20H87H1; /* HIERARCHIES */; 2 | %********************************************************************** 3 | *********************************************************************** 4 | 5 | 1 MACRO NAME: V20H87H1 6 | 2 PURPOSE: HCC HIERARCHIES: version 20 of HCCs 7 | only 87 CMS HCCs are included 8 | 3 COMMENT: it is assumed that: 9 | -MAX number of CCs are placed into global macro 10 | variable N_CC in the main program: 11 | -the following arrays are set in the main program 12 | ARRAY C(&N_CC) CC1-CC&N_CC 13 | ARRAY HCC(&N_CC) HCC1-HCC&N_CC 14 | -format ICD to CC creates only 87 out of &N_CC CMS 15 | CCs 16 | 17 | **********************************************************************; 18 | %* set to 0 HCCs in HIER parameter - taken from HIERARv20092 variable; 19 | %MACRO SET0( CC=, HIER= ); 20 | IF HCC&CC=1 THEN DO I = &HIER; HCC(I) = 0; END; 21 | %MEND SET0; 22 | 23 | %*to copy CC into HCC; 24 | DO K=1 TO &N_CC; 25 | HCC(K)=C(K); 26 | END; 27 | %*imposing hierarchies; 28 | /*Neoplasm 1 */ %SET0(CC=8 , HIER=%STR(9,10,11,12 )); 29 | /*Neoplasm 2 */ %SET0(CC=9 , HIER=%STR(10,11,12 )); 30 | /*Neoplasm 3 */ %SET0(CC=10 , HIER=%STR(11,12 )); 31 | /*Neoplasm 4 */ %SET0(CC=11 , HIER=%STR(12 )); 32 | /*Diabetes 1 */ %SET0(CC=17 , HIER=%STR(18,19 )); 33 | /*Diabetes 2 */ %SET0(CC=18 , HIER=%STR(19 )); 34 | /*Liver 1 */ %SET0(CC=27 , HIER=%STR(28,29,80 )); 35 | /*Liver 2 */ %SET0(CC=28 , HIER=%STR(29 )); 36 | /*Blood 1 */ %SET0(CC=46 , HIER=%STR(48 )); 37 | /*Cognitive 2 */ %SET0(CC=51 , HIER=%STR(52 )); 38 | /*SA1 */ %SET0(CC=54 , HIER=%STR(55 )); 39 | /*Psychiatric 1 */%SET0(CC=57 , HIER=%STR(58 )); 40 | /*Spinal 1 */ %SET0(CC=70 , HIER=%STR(71,72,103,104,169 )); 41 | /*Spinal 2 */ %SET0(CC=71 , HIER=%STR(72,104,169 )); 42 | /*Spinal 3 */ %SET0(CC=72 , HIER=%STR(169 )); 43 | /*Arrest 1 */ %SET0(CC=82 , HIER=%STR(83,84 )); 44 | /*Arrest 2 */ %SET0(CC=83 , HIER=%STR(84 )); 45 | /*Heart 2 */ %SET0(CC=86 , HIER=%STR(87,88 )); 46 | /*Heart 3 */ %SET0(CC=87 , HIER=%STR(88 )); 47 | /*CVD 1 */ %SET0(CC=99 , HIER=%STR(100 )); 48 | /*CVD 5 */ %SET0(CC=103 , HIER=%STR(104 )); 49 | /*Vascular 1 */ %SET0(CC=106 , HIER=%STR(107,108,161,189 )); 50 | /*Vascular 2 */ %SET0(CC=107 , HIER=%STR(108 )); 51 | /*Lung 1 */ %SET0(CC=110 , HIER=%STR(111,112 )); 52 | /*Lung 2 */ %SET0(CC=111 , HIER=%STR(112 )); 53 | /*Lung 5 */ %SET0(CC=114 , HIER=%STR(115 )); 54 | /*Kidney 3 */ %SET0(CC=134 , HIER=%STR(135,136,137,138,139,140,141)); 55 | /*Kidney 4 */ %SET0(CC=135 , HIER=%STR(136,137,138,139,140,141 )); 56 | /*Kidney 5 */ %SET0(CC=136 , HIER=%STR(137,138,139,140,141 )); 57 | /*Kidney 6 */ %SET0(CC=137 , HIER=%STR(138,139,140,141 )); 58 | /*Kidney 7 */ %SET0(CC=138 , HIER=%STR(139,140,141 )); 59 | /*Kidney 8 */ %SET0(CC=139 , HIER=%STR(140,141 )); 60 | /*Kidney 9 */ %SET0(CC=140 , HIER=%STR(141 )); 61 | /*Skin 1 */ %SET0(CC=157 , HIER=%STR(158,159,160,161 )); 62 | /*Skin 2 */ %SET0(CC=158 , HIER=%STR(159,160,161 )); 63 | /*Skin 3 */ %SET0(CC=159 , HIER=%STR(160,161 )); 64 | /*Skin 4 */ %SET0(CC=160 , HIER=%STR(161 )); 65 | /*Injury 1 */ %SET0(CC=166 , HIER=%STR(80,167 )); 66 | 67 | %MEND V20H87H1; -------------------------------------------------------------------------------- /CMS-sas/V20H87L1.SAS: -------------------------------------------------------------------------------- 1 | %MACRO V20H87L1; 2 | %*********************************************************************** 3 | ************************************************************************ 4 | 5 | 1 MACRO NAME: V20H87L1 6 | 2 PURPOSE: HCC version 20 labels for 87 HCCs 7 | ***********************************************************************; 8 | LABEL 9 | HCC1 ="HIV/AIDS" 10 | HCC2 ="Septicemia, Sepsis, Systemic Inflammatory Response Syndrome/Shock" 11 | HCC6 ="Opportunistic Infections" 12 | HCC8 ="Metastatic Cancer and Acute Leukemia" 13 | HCC9 ="Lung and Other Severe Cancers" 14 | HCC10 ="Lymphoma and Other Cancers" 15 | HCC11 ="Colorectal, Bladder, and Other Cancers" 16 | HCC12 ="Breast, Prostate, and Other Cancers and Tumors" 17 | HCC17 ="Diabetes with Acute Complications" 18 | HCC18 ="Diabetes with Chronic Complications" 19 | HCC19 ="Diabetes without Complication" 20 | HCC21 ="Protein-Calorie Malnutrition" 21 | HCC22 ="Morbid Obesity" 22 | HCC23 ="Other Significant Endocrine and Metabolic Disorders" 23 | HCC27 ="End-Stage Liver Disease" 24 | HCC28 ="Cirrhosis of Liver" 25 | HCC29 ="Chronic Hepatitis" 26 | HCC33 ="Intestinal Obstruction/Perforation" 27 | HCC34 ="Chronic Pancreatitis" 28 | HCC35 ="Inflammatory Bowel Disease" 29 | HCC39 ="Bone/Joint/Muscle Infections/Necrosis" 30 | HCC40 ="Rheumatoid Arthritis and Inflammatory Connective Tissue Disease" 31 | HCC46 ="Severe Hematological Disorders" 32 | HCC47 ="Disorders of Immunity" 33 | HCC48 ="Coagulation Defects and Other Specified Hematological Disorders" 34 | HCC51 ="Dementia With Complications" 35 | HCC52 ="Dementia Without Complication" 36 | HCC54 ="Drug/Alcohol Psychosis" 37 | HCC55 ="Drug/Alcohol Dependence" 38 | HCC57 ="Schizophrenia" 39 | HCC58 ="Major Depressive, Bipolar, and Paranoid Disorders" 40 | HCC70 ="Quadriplegia" 41 | HCC71 ="Paraplegia" 42 | HCC72 ="Spinal Cord Disorders/Injuries" 43 | HCC73 ="Amyotrophic Lateral Sclerosis and Other Motor Neuron Disease" 44 | HCC74 ="Cerebral Palsy" 45 | HCC75 ="Polyneuropathy" 46 | HCC76 ="Muscular Dystrophy" 47 | HCC77 ="Multiple Sclerosis" 48 | HCC78 ="Parkinson's and Huntington's Diseases" 49 | HCC79 ="Seizure Disorders and Convulsions" 50 | HCC80 ="Coma, Brain Compression/Anoxic Damage" 51 | HCC82 ="Respirator Dependence/Tracheostomy Status" 52 | HCC83 ="Respiratory Arrest" 53 | HCC84 ="Cardio-Respiratory Failure and Shock" 54 | HCC85 ="Congestive Heart Failure" 55 | HCC86 ="Acute Myocardial Infarction" 56 | HCC87 ="Unstable Angina and Other Acute Ischemic Heart Disease" 57 | HCC88 ="Angina Pectoris" 58 | HCC96 ="Specified Heart Arrhythmias" 59 | HCC99 ="Cerebral Hemorrhage" 60 | HCC100 ="Ischemic or Unspecified Stroke" 61 | HCC103 ="Hemiplegia/Hemiparesis" 62 | HCC104 ="Monoplegia, Other Paralytic Syndromes" 63 | HCC106 ="Atherosclerosis of the Extremities with Ulceration or Gangrene" 64 | HCC107 ="Vascular Disease with Complications" 65 | HCC108 ="Vascular Disease" 66 | HCC110 ="Cystic Fibrosis" 67 | HCC111 ="Chronic Obstructive Pulmonary Disease" 68 | HCC112 ="Fibrosis of Lung and Other Chronic Lung Disorders" 69 | HCC114 ="Aspiration and Specified Bacterial Pneumonias" 70 | HCC115 ="Pneumococcal Pneumonia, Empyema, Lung Abscess" 71 | HCC122 ="Proliferative Diabetic Retinopathy and Vitreous Hemorrhage" 72 | HCC124 ="Exudative Macular Degeneration" 73 | HCC134 ="Dialysis Status" 74 | HCC135 ="Acute Renal Failure" 75 | HCC136 ="Chronic Kidney Disease, Stage 5" 76 | HCC137 ="Chronic Kidney Disease, Severe (Stage 4)" 77 | HCC138 ="Chronic Kidney Disease, Moderate (Stage 3)" 78 | HCC139 = 79 | "Chronic Kidney Disease, Mild or Unspecified (Stages 1-2 or Unspecified)" 80 | HCC140 ="Unspecified Renal Failure" 81 | HCC141 ="Nephritis" 82 | HCC157 = 83 | "Pressure Ulcer of Skin with Necrosis Through to Muscle, Tendon, or Bone" 84 | HCC158 ="Pressure Ulcer of Skin with Full Thickness Skin Loss" 85 | HCC159 ="Pressure Ulcer of Skin with Partial Thickness Skin Loss" 86 | HCC160 ="Pressure Pre-Ulcer Skin Changes or Unspecified Stage" 87 | HCC161 ="Chronic Ulcer of Skin, Except Pressure" 88 | HCC162 ="Severe Skin Burn or Condition" 89 | HCC166 ="Severe Head Injury" 90 | HCC167 ="Major Head Injury" 91 | HCC169 ="Vertebral Fractures without Spinal Cord Injury" 92 | HCC170 ="Hip Fracture/Dislocation" 93 | HCC173 ="Traumatic Amputations and Complications" 94 | HCC176 ="Complications of Specified Implanted Device or Graft" 95 | HCC186 ="Major Organ Transplant or Replacement Status" 96 | HCC188 ="Artificial Openings for Feeding or Elimination" 97 | HCC189 ="Amputation Status, Lower Limb/Amputation Complications" 98 | ; 99 | %MEND V20H87L1; -------------------------------------------------------------------------------- /CMS-sas/V2116H1M.SAS: -------------------------------------------------------------------------------- 1 | %MACRO V2116H1M(INP=, IND=, OUTDATA=, IDVAR=, KEEPVAR=, SEDITS=, 2 | DATE_ASOF=, 3 | FMNAME9=V21Y15RC, FMNAME0=V21Y16RC, 4 | AGEFMT9=I9AGEY15MCE, SEXFMT9=I9SEXY15MCE, 5 | AGEFMT0=I0AGEY16MCE, SEXFMT0=I0SEXY16MCE, DF=1, 6 | AGESEXMAC=AGESEXV2, EDITMAC9=V21I9ED1, 7 | EDITMAC0=V21I0ED1, LABELMAC=V20H87L1, 8 | HIERMAC=V20H87H1, SCOREMAC=SCOREVAR); 9 | %********************************************************************** 10 | * V2116H1M creates HCC and score variables for each person who is 11 | * present in a person file. 12 | * If a person has at least one diagnosis in DIAG file then HCCs are 13 | * created, otherwise HCCs are set to 0. 14 | * Score variables are created using coefficients from 3 final 15 | * models: community, institutional, new enrollees. 16 | * 17 | * Assumptions about input files: 18 | * - both files are sorted by person ID 19 | * - person level file has the following variables: 20 | * :&IDVAR - person ID variable (it is a macro parameter) 21 | * :DOB - date of birth 22 | * :SEX - sex 23 | * :OREC - original reason for entitlement 24 | * :MCAID - Medicaid dummy variable 25 | * :NEMCAID - Medicaid dummy variable for new enrollees 26 | * 27 | * - diagnosis level file has the following variables: 28 | * :&IDVAR - person ID variable (it is a macro parameter) 29 | * :DIAG - diagnosis 30 | * :DIAG_TYPE - '9' for ICD9, '0' for ICD10 31 | * 32 | * Parameters: 33 | * INP - input person dataset 34 | * IND - input diagnosis dataset 35 | * OUTDATA - output dataset 36 | * IDVAR - name of person id variable (HICNO for Medicare data) 37 | * KEEPVAR - variables to keep in the output file 38 | * SEDITS - a switch that controls whether to perform MCE 39 | * edits on ICD9 and ICD10: 1-YES, 0-NO 40 | * DATE_ASOF - reference date to calculate age. Set to February 1 41 | * of the payment year for consistency with CMS. 42 | * FMNAME9 - format name (crosswalk ICD9 to V21 CCs) 43 | * FMNAME0 - format name (crosswalk ICD10 to V21 CCs) 44 | * AGEFMT9 - format name (crosswalk ICD9 to acceptable age range 45 | * in case MCE edits on diags are to be performed) 46 | * AGEFMT0 - format name (crosswalk ICD10 to acceptable age range 47 | * in case MCE edits on diags are to be performed) 48 | * SEXFMT9 - format name (crosswalk ICD9 to acceptable sex in 49 | * case MCE edits on diags are to be performed) 50 | * SEXFMT0 - format name (crosswalk ICD10 to acceptable sex in 51 | * case MCE edits on diags are to be performed) 52 | * DF - normalization factor. 53 | * Default=1 54 | * AGESEXMAC - external macro name: create age/sex, 55 | * originally disabled, disabled vars 56 | * EDITMAC9 - external macro name: perform edits to ICD9 57 | * EDITMAC0 - external macro name: perform edits to ICD10 58 | * LABELMAC - external macro name: assign labels to HCCs 59 | * HIERMAC - external macro name: set HCC=0 according to 60 | * hierarchies 61 | * SCOREMAC - external macro name: calculate a score variable 62 | **********************************************************************; 63 | 64 | %********************************************************************** 65 | * step1: include external macros 66 | **********************************************************************; 67 | %IF "&AGESEXMAC" ne "" %THEN %DO; 68 | %INCLUDE IN0(&AGESEXMAC) /SOURCE2; %* create demographic variables; 69 | %END; 70 | %IF "&EDITMAC9" ne "" %THEN %DO; 71 | %INCLUDE IN0(&EDITMAC9) /SOURCE2; %* perform edits on ICD9; 72 | %END; 73 | %IF "&EDITMAC0" ne "" %THEN %DO; 74 | %INCLUDE IN0(&EDITMAC0) /SOURCE2; %* perform edits on ICD10; 75 | %END; 76 | %IF "&LABELMAC" ne "" %THEN %DO; 77 | %INCLUDE IN0(&LABELMAC) /SOURCE2; %* hcc labels; 78 | %END; 79 | %IF "&HIERMAC" ne "" %THEN %DO; 80 | %INCLUDE IN0(&HIERMAC) /SOURCE2; %* hierarchies; 81 | %END; 82 | %IF "&SCOREMAC" ne "" %THEN %DO; 83 | %INCLUDE IN0(&SCOREMAC) /SOURCE2; %* calculate score variable; 84 | %END; 85 | 86 | %********************************************************************** 87 | * step2: define internal macro variables 88 | **********************************************************************; 89 | 90 | %LET N_CC=201; %*max # of HCCs; 91 | 92 | %* age/sex variables for community and insititutional regression; 93 | %LET AGESEXV= F0_34 F35_44 F45_54 F55_59 F60_64 F65_69 94 | F70_74 F75_79 F80_84 F85_89 F90_94 F95_GT 95 | M0_34 M35_44 M45_54 M55_59 M60_64 M65_69 96 | M70_74 M75_79 M80_84 M85_89 M90_94 M95_GT; 97 | 98 | 99 | %* diagnostic categories necessary to create interaction variables; 100 | %LET DIAG_CAT= CANCER DIABETES IMMUNE CHF CARD_RESP_FAIL 101 | COPD RENAL COMPL SEPSIS PRESSURE_ULCER; 102 | 103 | 104 | %*interaction variables for Community regression; 105 | %LET INTERRACC_VARS = %STR(DISABLED_HCC6 DISABLED_HCC34 106 | DISABLED_HCC46 DISABLED_HCC54 107 | DISABLED_HCC55 DISABLED_HCC110 108 | DISABLED_HCC176 SEPSIS_CARD_RESP_FAIL 109 | CANCER_IMMUNE DIABETES_CHF 110 | CHF_COPD CHF_RENAL 111 | COPD_CARD_RESP_FAIL); 112 | 113 | %*variables for Community regression ; 114 | %LET COMM_REG= %STR(&AGESEXV 115 | MCAID_Female_Aged MCAID_Female_Disabled 116 | MCAID_Male_Aged MCAID_Male_Disabled 117 | OriginallyDisabled_Female OriginallyDisabled_Male 118 | &INTERRACC_VARS 119 | &HCCV21_list87); 120 | 121 | 122 | %*interaction variables for Institutional regression; 123 | %LET INTERRACI_VARS = %STR(DISABLED_HCC85 DISABLED_PRESSURE_ULCER 124 | DISABLED_HCC161 DISABLED_HCC39 125 | DISABLED_HCC77 DISABLED_HCC6 126 | CHF_COPD COPD_CARD_RESP_FAIL 127 | SEPSIS_PRESSURE_ULCER 128 | SEPSIS_ARTIF_OPENINGS 129 | ART_OPENINGS_PRESSURE_ULCER 130 | DIABETES_CHF 131 | COPD_ASP_SPEC_BACT_PNEUM 132 | ASP_SPEC_BACT_PNEUM_PRES_ULC 133 | SEPSIS_ASP_SPEC_BACT_PNEUM 134 | SCHIZOPHRENIA_COPD 135 | SCHIZOPHRENIA_CHF 136 | SCHIZOPHRENIA_SEIZURES); 137 | 138 | %*variables for Institutional regression; 139 | %LET INST_REG = %STR(&AGESEXV 140 | MCAID ORIGDS 141 | &INTERRACI_VARS 142 | &HCCV21_list87); 143 | 144 | 145 | %*variables for New Enrollees regression ; 146 | %LET NE_REG=%STR(NEF0_34 NEF35_44 NEF45_54 NEF55_59 NEF60_64 147 | NEF65 NEF66 NEF67 NEF68 NEF69 148 | NEF70_74 NEF75_79 NEF80_84 NEF85_89 NEF90_94 NEF95_GT 149 | NEM0_34 NEM35_44 NEM45_54 NEM55_59 NEM60_64 150 | NEM65 NEM66 NEM67 NEM68 NEM69 151 | NEM70_74 NEM75_79 NEM80_84 NEM85_89 NEM90_94 NEM95_GT 152 | MCAID_FEMALE0_64 MCAID_FEMALE65 MCAID_FEMALE66_69 153 | MCAID_FEMALE70_74 MCAID_FEMALE75_GT 154 | MCAID_MALE0_64 MCAID_MALE65 MCAID_MALE66_69 155 | MCAID_MALE70_74 MCAID_MALE75_GT 156 | Origdis_female65 Origdis_female66_69 157 | Origdis_female70_74 Origdis_female75_GT 158 | Origdis_male65 Origdis_male66_69 159 | Origdis_male70_74 Origdis_male75_GT); 160 | 161 | 162 | 163 | %********************************************************************** 164 | * step3: merge person and diagnosis files outputting one record 165 | * per person with score and HCC variables for each input person 166 | * level record 167 | ***********************************************************************; 168 | 169 | DATA &OUTDATA(KEEP=&KEEPVAR ); 170 | %**************************************************** 171 | * step3.1: declaration section 172 | ****************************************************; 173 | 174 | %IF "&LABELMAC" ne "" %THEN %&LABELMAC; *HCC labels; 175 | 176 | %* length of new variables (length for other age/sex vars is set in 177 | &AGESEXMAC macro); 178 | LENGTH CC $4. AGEF 3. 179 | MCAID_Female_Aged MCAID_Female_Disabled 180 | MCAID_Male_Aged MCAID_Male_Disabled 181 | OriginallyDisabled_Female OriginallyDisabled_Male 182 | MCAID_FEMALE0_64 MCAID_FEMALE65 MCAID_FEMALE66_69 183 | MCAID_FEMALE70_74 MCAID_FEMALE75_GT 184 | MCAID_MALE0_64 MCAID_MALE65 MCAID_MALE66_69 185 | MCAID_MALE70_74 MCAID_MALE75_GT 186 | Origdis_female65 Origdis_female66_69 187 | Origdis_female70_74 Origdis_female75_GT 188 | Origdis_male65 Origdis_male66_69 189 | Origdis_male70_74 Origdis_male75_GT 190 | CC1-CC&N_CC 191 | HCC1-HCC&N_CC 192 | &DIAG_CAT 193 | &INTERRACC_VARS 194 | &INTERRACI_VARS 3.; 195 | 196 | %*retain cc vars; 197 | RETAIN CC1-CC&N_CC 0 AGEF 198 | ; 199 | %*arrays; 200 | ARRAY C(&N_CC) CC1-CC&N_CC; 201 | ARRAY HCC(&N_CC) HCC1-HCC&N_CC; 202 | %*interaction vars; 203 | ARRAY RV &INTERRACC_VARS &INTERRACI_VARS &DIAG_CAT; 204 | 205 | %*************************************************** 206 | * step3.2: to bring in regression coefficients 207 | ****************************************************; 208 | IF _N_ = 1 THEN SET INCOEF.HCCCOEFN; 209 | %*************************************************** 210 | * step3.3: merge 211 | ****************************************************; 212 | MERGE &INP(IN=IN1) 213 | &IND(IN=IN2); 214 | BY &IDVAR; 215 | 216 | IF IN1 THEN DO; 217 | 218 | %******************************************************* 219 | * step3.4: for the first record for a person set CC to 0 220 | ********************************************************; 221 | 222 | IF FIRST.&IDVAR THEN DO; 223 | %*set ccs to 0; 224 | DO I=1 TO &N_CC; 225 | C(I)=0; 226 | END; 227 | %* age; 228 | AGEF =FLOOR((INTCK( 229 | 'MONTH',DOB,&DATE_ASOF)-(DAY(&DATE_ASOF)0); 316 | MCAID_female65 =(SEX="2" & NEF65 & NEMCAID>0); 317 | MCAID_female66_69 =(SEX="2" & 318 | sum(NEF66,NEF67,NEF68,NEF69) & NEMCAID>0); 319 | MCAID_female70_74 =(SEX="2" & 70<=AGEF <75 & NEMCAID>0); 320 | MCAID_female75_GT =(SEX="2" & AGEF >74 & NEMCAID>0); 321 | 322 | MCAID_male0_64 =(SEX="1" & 0<=AGEF <65 & NEM65=0 323 | & NEMCAID>0); 324 | MCAID_male65 =(SEX="1" & NEM65 & NEMCAID>0); 325 | MCAID_male66_69 =(SEX="1" & 326 | sum(NEM66,NEM67,NEM68,NEM69) & NEMCAID>0); 327 | MCAID_male70_74 =(SEX="1" & 70<=AGEF <75 328 | & NEMCAID>0); 329 | MCAID_male75_GT =(SEX="1" & AGEF >74 & NEMCAID>0); 330 | 331 | Origdis_female65 =(ORIGDS & NEF65 & SEX='2'); 332 | Origdis_female66_69 =(ORIGDS & 333 | sum(NEF66,NEF67,NEF68,NEF69) & SEX='2'); 334 | Origdis_female70_74 =(ORIGDS & 70 <= AGEF <75 & SEX='2'); 335 | Origdis_female75_GT =(ORIGDS & AGEF >74 & SEX='2'); 336 | 337 | Origdis_male65 =(ORIGDS & NEM65 & SEX='1'); 338 | Origdis_male66_69 =(ORIGDS & 339 | sum(NEM66,NEM67,NEM68,NEM69) & SEX='1'); 340 | Origdis_male70_74 =(ORIGDS & 70 <= AGEF <75 & SEX='1'); 341 | Origdis_male75_GT =(ORIGDS & AGEF >74 & SEX='1'); 342 | 343 | IF IN1 & IN2 THEN DO; 344 | %********************** 345 | * hierarchies 346 | **********************; 347 | %IF "&HIERMAC" ne "" %THEN %&HIERMAC; 348 | %************************ 349 | * interaction variables 350 | *************************; 351 | %*community model diagnostic categories; 352 | CANCER = MAX(HCC8, HCC9, HCC10, HCC11, HCC12); 353 | DIABETES = MAX(HCC17, HCC18, HCC19); 354 | IMMUNE = HCC47; 355 | CARD_RESP_FAIL = MAX(HCC82, HCC83, HCC84); 356 | CHF = HCC85; 357 | COPD = MAX(HCC110, HCC111); 358 | RENAL = MAX(HCC134, HCC135, HCC136, HCC137, 359 | HCC138, HCC139, HCC140, HCC141); 360 | COMPL = HCC176; 361 | SEPSIS = HCC2; 362 | %*interactions ; 363 | SEPSIS_CARD_RESP_FAIL = SEPSIS*CARD_RESP_FAIL; 364 | CANCER_IMMUNE = CANCER*IMMUNE; 365 | DIABETES_CHF = DIABETES*CHF ; 366 | CHF_COPD = CHF*COPD ; 367 | CHF_RENAL = CHF*RENAL ; 368 | COPD_CARD_RESP_FAIL = COPD*CARD_RESP_FAIL ; 369 | %*interactions with disabled ; 370 | DISABLED_HCC6 = DISABL*HCC6; %*Opportunistic Infections; 371 | DISABLED_HCC34 = DISABL*HCC34; %*Chronic Pancreatitis; 372 | DISABLED_HCC46 = DISABL*HCC46; %*Severe Hematol Disorders; 373 | DISABLED_HCC54 = DISABL*HCC54; %*Drug/Alcohol Psychosis; 374 | DISABLED_HCC55 = DISABL*HCC55; %*Drug/Alcohol Dependence; 375 | DISABLED_HCC110 = DISABL*HCC110; %*Cystic Fibrosis; 376 | DISABLED_HCC176 = DISABL*HCC176; %* added 7/2009; 377 | 378 | %*institutional model; 379 | PRESSURE_ULCER = MAX(HCC157, HCC158, HCC159, HCC160); 380 | SEPSIS_PRESSURE_ULCER = SEPSIS*PRESSURE_ULCER; 381 | SEPSIS_ARTIF_OPENINGS = SEPSIS*(HCC188); 382 | ART_OPENINGS_PRESSURE_ULCER = (HCC188)*PRESSURE_ULCER; 383 | DIABETES_CHF = DIABETES*CHF; 384 | COPD_ASP_SPEC_BACT_PNEUM = COPD*(HCC114); 385 | ASP_SPEC_BACT_PNEUM_PRES_ULC = (HCC114)*PRESSURE_ULCER; 386 | SEPSIS_ASP_SPEC_BACT_PNEUM = SEPSIS*(HCC114); 387 | SCHIZOPHRENIA_COPD = (HCC57)*COPD; 388 | SCHIZOPHRENIA_CHF= (HCC57)*CHF; 389 | SCHIZOPHRENIA_SEIZURES = (HCC57)*(HCC79); 390 | 391 | DISABLED_HCC85 = DISABL*(HCC85); 392 | DISABLED_PRESSURE_ULCER = DISABL*PRESSURE_ULCER; 393 | DISABLED_HCC161 = DISABL*(HCC161); 394 | DISABLED_HCC39 = DISABL*(HCC39); 395 | DISABLED_HCC77 = DISABL*(HCC77); 396 | 397 | END; *there are some diagnoses for a person; 398 | ELSE DO; 399 | DO I=1 TO &N_CC; 400 | HCC(I)=0; 401 | END; 402 | DO OVER RV; 403 | RV=0; 404 | END; 405 | END; 406 | 407 | %*score calculation; 408 | 409 | /***************************/ 410 | /* community model */ 411 | /***************************/; 412 | 413 | %IF "&SCOREMAC" ne "" %THEN %DO; 414 | %&SCOREMAC(PVAR=SCORE_COMMUNITY, RLIST=&COMM_REG, CPREF=CE_); 415 | 416 | /***************************/ 417 | /* institutional model */ 418 | /***************************/; 419 | 420 | %&SCOREMAC(PVAR=SCORE_INSTITUTIONAL, RLIST=&INST_REG, CPREF=INS_); 421 | 422 | /***************************/ 423 | /* new enrollees model */ 424 | /***************************/; 425 | 426 | %&SCOREMAC(PVAR=SCORE_NEW_ENROLLEE, RLIST=&NE_REG, CPREF=NE_); 427 | %END; 428 | 429 | /****************************/ 430 | /* normalize the scores */ 431 | /***************************/; 432 | SCORE_COMMUNITY = SCORE_COMMUNITY *&DF; 433 | SCORE_INSTITUTIONAL = SCORE_INSTITUTIONAL*&DF; 434 | SCORE_NEW_ENROLLEE = SCORE_NEW_ENROLLEE *&DF; 435 | 436 | OUTPUT &OUTDATA; 437 | END; %*last record for a person; 438 | END; %*there is a person record; 439 | RUN; 440 | 441 | %********************************************************************** 442 | * step4: data checks and proc contents 443 | ***********************************************************************; 444 | PROC PRINT U DATA=&OUTDATA(OBS=46); 445 | TITLE '*** V2116H1M output file ***'; 446 | RUN ; 447 | PROC CONTENTS DATA=&OUTDATA; 448 | RUN; 449 | 450 | %MEND V2116H1M; -------------------------------------------------------------------------------- /CMS-sas/V2116H1P.SAS: -------------------------------------------------------------------------------- 1 | options mlogic mcompile; 2 | /* 3 | The following is JCL if you are using an IBM-type mainframe: 4 | 5 | //JOBCARD 6 | //V2116H1P EXEC SAS94,REGION=8M, 7 | // OPTIONS='ERRORS=0,NOCENTER,NEWS' 8 | //WORK DD SPACE=(CYL,(1000,2)) 9 | //WORK1 DD SPACE=(CYL,(2000,2)) 10 | //* user-defined the location of formats 11 | //LIBRARY DD DISP=SHR,DSN=XXXX.XXXXXXX 12 | //*user-defined the location of macros 13 | //IN0 DD DISP=SHR,DSN=XXXX.XXXXXX 14 | //*the location of person-level file 15 | //IN1 DD DISP=SHR,DSN=XXXX.PERSON 16 | //*the location of the diagnosis file 17 | //IN2 DD DISP=SHR,DSN=XXXX.DIAG 18 | //*the location of the file containing all coefficients 19 | //INCOEF DD DISP=SHR,DSN=XXXX.HCCCOEFN 20 | //*the output file containing person-level scores 21 | //OUT DD DISP=(NEW,CATLG,KEEP), 22 | // DSN=XXX.V2116H1P.PERSON, 23 | // SPACE=(TRK,(20,10),RLSE) 24 | //SYSIN DD * 25 | 26 | ****************************************************************** 27 | If you are using PC-SAS, you must specify the location of the files 28 | on your PC in a libname/filename statement. 29 | 30 | LIBNAME LIBRARY "location of formats"; 31 | FILENAME IN0 "location of macros"; 32 | LIBNAME IN1 "location of person-level file"; 33 | LIBNAME IN2 "location of diagnosis file"; 34 | LIBNAME INCOEF "location of the coefficients file"; 35 | LIBNAME OUT "location for the output file"; 36 | */ 37 | LIBNAME LIBRARY "/folders/myfolders/algorex"; 38 | FILENAME IN0 "/folders/myfolders/CMS-HCC software V2116.87.H1"; 39 | LIBNAME IN1 "/folders/myfolders/algorex"; 40 | LIBNAME IN2 "/folders/myfolders/algorex"; 41 | LIBNAME INCOEF "/folders/myfolders/algorex"; 42 | LIBNAME OUT "/folders/myfolders/output"; 43 | *********************************************************************** 44 | * 45 | * DESCRIPTION: 46 | * 47 | * V2116H1P program creates eighty seven HCC variables version 21 48 | * (&HCCV21_list87) and three score variables for each person who is 49 | * present in a person file (supplied by a user). 50 | * If a person has at least one diagnosis in DIAG file (supplied by a 51 | * user) then HCC variables are created, otherwise HCCs are set to 0. 52 | * Score variables are created using coefficients from 3 final 53 | * models: community, institutional, new enrollees. 54 | * 55 | * Assumptions about input files: 56 | * - both files are sorted by person ID 57 | * 58 | * - person level file has the following variables: 59 | * :&IDVAR - person ID variable (it is a macro parameter, HICNO 60 | * for Medicare data) 61 | * :DOB - date of birth 62 | * :SEX - sex 63 | * :OREC - original reason for entitlement 64 | * :MCAID - Medicaid dummy variable (base year) 65 | * :NEMCAID - Medicaid dummy variable for new enrollees (predicted 66 | * year) 67 | * 68 | * - diagnosis level file has the following vars: 69 | * :&IDVAR - person ID variable (it is a macro parameter, HICNO 70 | * for Medicare data) 71 | * :DIAG - diagnosis 72 | * :DIAG_TYPE - diagnosis version ('9' for ICD9 and '0' for ICD10) 73 | * 74 | * The program supplies parameters to a main macro %V2116H1M that calls 75 | * other external macros specific to V21 HCCs: 76 | * 77 | * %AGESEXV2 - create age/sex, originally disabled, disabled vars 78 | * %V21I9ED1 - perform edits to ICD9 diagnosis 79 | * %V21I0ED1 - perform edits to ICD10 diagnosis 80 | * %V20H87L1 - assign labels to HCCs 81 | * %V20H87H1 - set HCC=0 according to hierarchies 82 | * %SCOREVAR - calculate a score variable 83 | * 84 | * Program steps: 85 | * step1: include external macros 86 | * step2: define internal macro variables 87 | * step3: merge person and diagnosis files outputting one 88 | * record per person for each input person level record 89 | * step3.1: declaration section 90 | * step3.2: bring regression coefficients 91 | * step3.3: merge person and diagnosis file 92 | * step3.4: for the first record for a person set CC to 0 93 | * and calculate age 94 | * step3.5: if there are any diagnoses for a person 95 | * then do the following: 96 | * - perform ICD9 edits using V21I9ED1 macro or 97 | * perform ICD10 edits using V21I0ED1 macro 98 | * - create CC using provided format 99 | * - create additional CC using additional formats 100 | * step3.6: for the last record for a person do the 101 | * following: 102 | * - create demographic variables needed 103 | * for regressions (macro AGESEXV2) 104 | * - create HCC using hierarchies (macro V20H87H1) 105 | * - create HCC interaction variables 106 | * - create HCC and DISABL interaction variables 107 | * - set HCCs and interaction vars to zero if there 108 | * are no diagnoses for a person 109 | * - create score for community model 110 | * - create score for institutional model 111 | * - create score for new enrollee model 112 | * - normalize score if needed 113 | * step4: data checks and proc contents 114 | * 115 | * USER CUSTOMIZATION: 116 | * 117 | * A user must supply 2 files with the variables described above and 118 | * set the following parameters: 119 | * INP - SAS input person dataset 120 | * IND - SAS input diagnosis dataset 121 | * OUTDATA - SAS output dataset 122 | * IDVAR - name of person id variable (HICNO for medicare data) 123 | * KEEPVAR - variables to keep in the output dataset 124 | * SEDITS - a switch that controls whether to perform MCE edits 125 | * on ICD9 and ICD10: 1-YES, 0-NO 126 | * DATE_ASOF- reference date to calculate age. Set to February 1 127 | * of the payment year for consistency with CMS. 128 | * DF - normalization factor (set to 1 by default) 129 | ***********************************************************************; 130 | 131 | %LET INPUTVARS=%STR(SEX DOB MCAID NEMCAID OREC); 132 | 133 | %*demographic variables; 134 | %LET DEMVARS =%STR(AGEF ORIGDS DISABL 135 | F0_34 F35_44 F45_54 F55_59 F60_64 F65_69 136 | F70_74 F75_79 F80_84 F85_89 F90_94 F95_GT 137 | M0_34 M35_44 M45_54 M55_59 M60_64 M65_69 138 | M70_74 M75_79 M80_84 M85_89 M90_94 M95_GT 139 | NEF0_34 NEF35_44 NEF45_54 NEF55_59 NEF60_64 140 | NEF65 NEF66 NEF67 NEF68 NEF69 141 | NEF70_74 NEF75_79 NEF80_84 NEF85_89 NEF90_94 142 | NEF95_GT 143 | NEM0_34 NEM35_44 NEM45_54 NEM55_59 NEM60_64 144 | NEM65 NEM66 NEM67 NEM68 NEM69 145 | NEM70_74 NEM75_79 NEM80_84 NEM85_89 NEM90_94 146 | NEM95_GT); 147 | 148 | %*list of HCCs included in models; 149 | %LET HCCV21_list87 = %STR( 150 | HCC1 HCC2 HCC6 HCC8 HCC9 HCC10 HCC11 HCC12 151 | HCC17 HCC18 HCC19 HCC21 HCC22 HCC23 HCC27 HCC28 152 | HCC29 HCC33 HCC34 HCC35 HCC39 HCC40 HCC46 HCC47 153 | HCC48 HCC51 HCC52 HCC54 HCC55 HCC57 HCC58 HCC70 154 | HCC71 HCC72 HCC73 HCC74 HCC75 HCC76 HCC77 HCC78 155 | HCC79 HCC80 HCC82 HCC83 HCC84 HCC85 HCC86 HCC87 156 | HCC88 HCC96 HCC99 HCC100 HCC103 HCC104 HCC106 HCC107 157 | HCC108 HCC110 HCC111 HCC112 HCC114 HCC115 HCC122 HCC124 158 | HCC134 HCC135 HCC136 HCC137 HCC138 HCC139 HCC140 HCC141 159 | HCC157 HCC158 HCC159 HCC160 HCC161 HCC162 HCC166 HCC167 160 | HCC169 HCC170 HCC173 HCC176 HCC186 HCC188 HCC189 161 | ); 162 | 163 | %*list of CCs that correspond to model HCCs; 164 | %LET CCV21_list87 = %STR( 165 | CC1 CC2 CC6 CC8 CC9 CC10 CC11 CC12 166 | CC17 CC18 CC19 CC21 CC22 CC23 CC27 CC28 167 | CC29 CC33 CC34 CC35 CC39 CC40 CC46 CC47 168 | CC48 CC51 CC52 CC54 CC55 CC57 CC58 CC70 169 | CC71 CC72 CC73 CC74 CC75 CC76 CC77 CC78 170 | CC79 CC80 CC82 CC83 CC84 CC85 CC86 CC87 171 | CC88 CC96 CC99 CC100 CC103 CC104 CC106 CC107 172 | CC108 CC110 CC111 CC112 CC114 CC115 CC122 CC124 173 | CC134 CC135 CC136 CC137 CC138 CC139 CC140 CC141 174 | CC157 CC158 CC159 CC160 CC161 CC162 CC166 CC167 175 | CC169 CC170 CC173 CC176 CC186 CC188 CC189 176 | ); 177 | 178 | %LET SCOREVARS=%STR(SCORE_COMMUNITY 179 | SCORE_INSTITUTIONAL 180 | SCORE_NEW_ENROLLEE); 181 | 182 | %* include main macro; 183 | %INCLUDE IN0(V2116H1M)/SOURCE2; 184 | 185 | %V2116H1M(INP =IN1._2010bene, 186 | IND =IN2._2010diag, 187 | OUTDATA =OUT._2010results, 188 | IDVAR =HICNO, 189 | KEEPVAR =HICNO &INPUTVARS &SCOREVARS &DEMVARS 190 | &HCCV21_list87 &CCV21_list87, 191 | SEDITS =1, 192 | DATE_ASOF="1FEB2016"D); -------------------------------------------------------------------------------- /CMS-sas/V21I0ED1.SAS: -------------------------------------------------------------------------------- 1 | %MACRO V21I0ED1(AGE=, SEX=, ICD10= ); 2 | %********************************************************************** 3 | *********************************************************************** 4 | 1 MACRO NAME: V21I0ED1 5 | 2 PURPOSE: age/sex edits on ICD10: some edits are mandatory, 6 | others - are based on MCE list to check 7 | if age or sex for a beneficiary is within the 8 | range of acceptable age/sex, if not- CC is set to 9 | -1.0 - invalid 10 | 3 PARAMETERS: AGE - beneficiary age variable calculated by DOB 11 | from a person level file 12 | SEX - beneficiary SEX variable in a person level file 13 | ICD10 - diagnosis variable in a diagnosis file 14 | 15 | 4 COMMENTS: 1. Age format AGEFMT0 and sex format SEXFMT0 are 16 | parameters in the main macro. They have to 17 | correspond to the years of data 18 | 19 | 2. If ICD10 code does not have any restriction on age 20 | or sex then the corresponding format puts it in "-1" 21 | 22 | 3. AGEL format sets lower limits for age 23 | AGEU format sets upper limit for age 24 | for specific edit categories: 25 | "0"= "0 newborn (age 0) " 26 | "1"= "1 pediatric (age 0 -17)" 27 | "2"= "2 maternity (age 12-55)" 28 | "3"= "3 adult (age 14+) " 29 | 30 | 4. SEDITS - parameter for the main macro 31 | **********************************************************************; 32 | %* reset of CCs that is based on beneficiary age or sex; 33 | IF &SEX="2" AND &ICD10 IN ("D66", "D67") THEN CC="48"; 34 | ELSE 35 | IF &AGE < 18 AND &ICD10 IN ("J410", "J411", "J418", "J42", "J430", 36 | "J431", "J432", "J438", "J439", "J440", 37 | "J441", "J449", "J982", "J983") 38 | THEN CC="112"; 39 | 40 | %* MCE edits if needed (should be decided by a user by setting 41 | parameter SEDITS); 42 | %IF &SEDITS = 1 %THEN %DO; 43 | %* check if Age is within acceptable range; 44 | _TAGE=PUT(&ICD10, $&AGEFMT0..); 45 | IF _TAGE NE "-1" AND 46 | (&AGE < INPUT(PUT(_TAGE, $AGEL.),8.) OR 47 | &AGE > INPUT(PUT(_TAGE, $AGEU.),8.)) THEN CC='-1.0'; 48 | 49 | %* check if Sex for a person is the one in the MCE file; 50 | _TSEX=PUT(&ICD10, $&SEXFMT0..); 51 | IF _TSEX NE "-1" & _TSEX NE &SEX THEN CC='-1.0'; 52 | 53 | %END; 54 | %MEND V21I0ED1; -------------------------------------------------------------------------------- /CMS-sas/V21I9ED1.SAS: -------------------------------------------------------------------------------- 1 | %MACRO V21I9ED1(AGE=, SEX=, ICD9= ); 2 | %********************************************************************** 3 | *********************************************************************** 4 | 1 MACRO NAME: V21I9ED1 5 | 2 PURPOSE: age/sex edits on ICD9: some edits are mandatory, 6 | others - are based on MCE list to check 7 | if age or sex for a beneficiary is within the 8 | range of acceptable age/sex, if not- CC is set to 9 | -1.0 - invalid 10 | 3 PARAMETERS: AGE - beneficiary age variable calculated by DOB 11 | from a person level file 12 | SEX - beneficiary SEX variable in a person level file 13 | ICD9 - diagnosis variable in a diagnosis file 14 | 15 | 4 COMMENTS: 1. Age format AGEFMT9 and sex format SEXFMT9 are 16 | parameters in the main macro. They have to 17 | correspond to the years of data 18 | 19 | 2. If ICD9 code does not have any restriction on age 20 | or sex then the corresponding format puts it in "-1" 21 | 22 | 3. AGEL format sets lower limits for age 23 | AGEU format sets upper limit for age 24 | for specific edit categories: 25 | "0"= "0 newborn (age 0) " 26 | "1"= "1 pediatric (age 0 -17)" 27 | "2"= "2 maternity (age 12-55)" 28 | "3"= "3 adult (age 14+) " 29 | 30 | 4. SEDITS - parameter for the main macro 31 | **********************************************************************; 32 | %* reset of CCs that is based on beneficiary age or sex; 33 | /* Hemophilia for women*/ 34 | IF &SEX="2" AND &ICD9 IN ("2860", "2861") THEN CC="48"; 35 | ELSE 36 | /*emphysema/chronic bronchitis */ 37 | IF &AGE < 18 AND &ICD9 IN ("4910", "4911", "49120", "49121", "49122", 38 | "4918", "4919", "4920", "4928", "496", 39 | "5181", "5182") THEN CC="112"; 40 | ELSE 41 | /*chronic obstructive asthma */ 42 | IF &AGE < 18 AND &ICD9 IN ("49320", "49321", "49322") 43 | THEN CC="-1.0"; 44 | 45 | %* MCE edits if needed (should be decided by a user by setting 46 | parameter SEDITS); 47 | %IF &SEDITS = 1 %THEN %DO; 48 | %* check if Age is within acceptable range; 49 | _TAGE=PUT(&ICD9, $&AGEFMT9..); 50 | IF _TAGE NE "-1" AND 51 | (&AGE < INPUT(PUT(_TAGE, $AGEL.),8.) OR 52 | &AGE > INPUT(PUT(_TAGE, $AGEU.),8.)) THEN CC='-1.0'; 53 | 54 | %* check if Sex for a person is the one in the MCE file; 55 | _TSEX=PUT(&ICD9, $&SEXFMT9..); 56 | IF _TSEX NE "-1" & _TSEX NE &SEX THEN CC='-1.0'; 57 | 58 | %END; 59 | %MEND V21I9ED1; -------------------------------------------------------------------------------- /Diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlgorexHealth/hcc-python/cd3797dbcb0e0d830bba44f6ab75c53b6c891cc9/Diagram.png -------------------------------------------------------------------------------- /HCC Library Demonstration.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "deletable": true, 7 | "editable": true 8 | }, 9 | "source": [ 10 | "# Algorex HCC Library\n", 11 | "This notebook provides a demonstration of the Algorex HCC library. In developing this library we priortized three main features:\n", 12 | "\n", 13 | "1. Return an accurate set of risk scores using the HCC Algorithim for all available models. \n", 14 | "2. Provide easy inputs so that the library can be integrated in a range of analytical or other applications. \n", 15 | "3. Give analyst/developer a rich interface into the underlying mechanics of the risk adjusment algorithim. Whether to the codes, their mappings, and their coefficients. \n" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": null, 21 | "metadata": { 22 | "collapsed": false, 23 | "deletable": true, 24 | "editable": true, 25 | "hide_input": true 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "from bokeh.plotting import figure, output_notebook, show, output_file\n", 30 | "from bokeh.palettes import Blues, BuGn, viridis, Paired, plasma, PuBuGn\n", 31 | "from bokeh.models import FixedTicker, FactorRange,Color,CustomJS, HoverTool,CategoricalAxis, LabelSet, Label, ColumnDataSource, widgets,CategoricalColorMapper,LinearInterpolator, LinearColorMapper, LogColorMapper\n", 32 | "from bokeh.models import (GMapPlot, GMapOptions, Range1d, PanTool, WheelZoomTool, BoxSelectTool, HoverTool, ResetTool, ZoomInTool, ZoomOutTool)\n", 33 | "from bokeh.layouts import row, column, widgetbox\n", 34 | "from bokeh.models.glyphs import Patches, Line, Circle\n", 35 | "from bokeh.charts import Histogram, output_file, show, Bar, color, Scatter\n", 36 | "from bokeh.resources import CDN\n", 37 | "import sklearn\n", 38 | "from sklearn.utils.validation import check_array\n", 39 | "import random\n", 40 | "import squarify\n", 41 | "import pandas as pd\n", 42 | "import numpy as np\n", 43 | "\n", 44 | "\n", 45 | "output_notebook()\n", 46 | "\n", 47 | "\n", 48 | "%load_ext sql\n", 49 | "%sql sqlite:///mit-poster.db\n", 50 | "%sql ATTACH '../jupyterdemo/claims.db' as mem;\n" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 1, 56 | "metadata": { 57 | "collapsed": false, 58 | "deletable": true, 59 | "editable": true, 60 | "hide_input": false 61 | }, 62 | "outputs": [ 63 | { 64 | "name": "stdout", 65 | "output_type": "stream", 66 | "text": [ 67 | "bottom\n" 68 | ] 69 | } 70 | ], 71 | "source": [ 72 | "import AlgorexCore as rex\n", 73 | "from hcc import *\n", 74 | "cvars= community_regression()" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": { 80 | "deletable": true, 81 | "editable": true 82 | }, 83 | "source": [ 84 | "## Loading Data\n", 85 | "For the use of the demonstration, we are using a deidentifed claims data warehouse embedded in this notebook for the tutorial. This simulates exactly how you can integrate this library with other data warehouses or databases. \n", 86 | "\n", 87 | "In the cell below, we are selecting the diagnosis codes for one patient in one year and then we select the same patient in the next year. \n", 88 | "\n" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": { 95 | "collapsed": false, 96 | "deletable": true, 97 | "editable": true 98 | }, 99 | "outputs": [], 100 | "source": [ 101 | "yr1_diags = %sql SELECT DISTINCT Diagnosis From diagnoses where PatientID = '0220F11E0B2EC004' and ClaimFromDate like '2008%';\n", 102 | "yr2_diags = %sql SELECT DISTINCT Diagnosis From diagnoses where PatientID = '0220F11E0B2EC004' and ClaimFromDate like '2009%';" 103 | ] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": { 108 | "deletable": true, 109 | "editable": true, 110 | "variables": { 111 | "len(yr1_diags)": "203", 112 | "len(yr2_diags)": "216" 113 | } 114 | }, 115 | "source": [ 116 | "To load the data into the HCC library, you create beneficiary objects and add the diagnosis codes. Our example patient has **{{len(yr1_diags)}}** seperate diagnosis codes to be added in year 1 and **{{len(yr2_diags)}}** in year 2. \n", 117 | "\n", 118 | "The same use case can be used for whenever users have diagnosis codes from multiple sources such as from:\n", 119 | "* at-home assesments from a third-party\n", 120 | "* mined medical records\n", 121 | "* other sources based on outreach efforts.\n", 122 | "\n", 123 | "The library allows the developer/analyst to compare the output of the sources and compare the uplift(or downlift). \n", 124 | "\n", 125 | "Our example patient here is being named 'Jane'. \n" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": { 132 | "collapsed": false, 133 | "deletable": true, 134 | "editable": true 135 | }, 136 | "outputs": [], 137 | "source": [ 138 | "jane = Beneficiary(hicno='0220F11E0B2EC004', sex='female', dob='19480601')\n", 139 | "jane_alt = Beneficiary(hicno='0220F11E0B2EC004', sex='male', dob='19480601')\n", 140 | "\n", 141 | "#antonio.add_diagnosis(Diagnosis(antonio,\"49320\",ICDType.NINE))\n", 142 | "\n", 143 | "\n", 144 | "for icd9 in yr1_diags:\n", 145 | " code = icd9[0]\n", 146 | " #print(type(code), code)\n", 147 | " jane.add_diagnosis(Diagnosis(jane,code, int(ICDType.NINE)))\n", 148 | "\n", 149 | "for icd9 in yr1_diags + yr2_diags:\n", 150 | " code = icd9[0]\n", 151 | " #print(type(code), code)\n", 152 | " jane.add_diagnosis(Diagnosis(jane_alt,code, int(ICDType.NINE)))" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": { 158 | "deletable": true, 159 | "editable": true 160 | }, 161 | "source": [ 162 | "The library can output scores across all of the CMS-HCC models including instituional, new enrollee, and community rated groups. For 2017, there will be nine seperate models and will update to allow for that. " 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": { 169 | "collapsed": false, 170 | "deletable": true, 171 | "editable": true 172 | }, 173 | "outputs": [], 174 | "source": [ 175 | "beneficiary_has_hcc(jane, X)\n", 176 | "\n", 177 | "print(score(jane,X,Score))\n", 178 | "print(score(jane_alt,X,Score))" 179 | ] 180 | }, 181 | { 182 | "cell_type": "markdown", 183 | "metadata": { 184 | "deletable": true, 185 | "editable": true 186 | }, 187 | "source": [ 188 | "## Understand the Mechanics\n", 189 | "\n", 190 | "Getting the score is just one data point, what about how that score worked? the HCC models consists over close to 190 disease categories and complex disease interactions. With our library, the analyst can access the underlying coefficients that are used for this patient. \n", 191 | "\n", 192 | "In the example below, we are using our sample patient 'Jane' and asking the system to obtain all the indicator variables this patient is eligible. We can also see all the parts that lead up to this score. \n", 193 | "\n", 194 | "![diagram](./diagram.png)\n", 195 | "\n", 196 | "The query below is based on this idea. Identify all indicators and underlying categories and codes that are true for this patient. " 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": null, 202 | "metadata": { 203 | "collapsed": false, 204 | "deletable": true, 205 | "editable": true 206 | }, 207 | "outputs": [], 208 | "source": [ 209 | "\n", 210 | "results = indicator(jane,CC) & beneficiary_icd(jane,ICD,Type) & CC.in_(cvars) & coefficient(\"CE_\"+CC,Coef) \n", 211 | "print(results[0:30])" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": null, 217 | "metadata": { 218 | "collapsed": false, 219 | "deletable": true, 220 | "editable": true, 221 | "hide_input": false 222 | }, 223 | "outputs": [], 224 | "source": [ 225 | "x = 0\n", 226 | "y = 0\n", 227 | "width = 40\n", 228 | "height = 40\n", 229 | "jane_coefs = indicator(jane,CC) & CC.in_(cvars) & coefficient(\"CE_\"+CC,Coef)\n", 230 | "jane_coefs = sorted(jane_coefs,key= lambda val: val[1], reverse=True)\n", 231 | "\n", 232 | "normed = squarify.normalize_sizes([value for name, value in jane_coefs], width, height)\n", 233 | "rects = squarify.squarify(normed, x, y, width, height)\n", 234 | "shapes = []\n", 235 | "annotations = []\n", 236 | "counter = 0\n", 237 | "for r in rects:\n", 238 | " name, value = jane_coefs[counter]\n", 239 | " shapes.append(\n", 240 | " dict(\n", 241 | " x0 = r['x'] + r['dx']/2 ,\n", 242 | " y0 = r['y'] + r['dy']/2 , \n", 243 | " width = r['dx'],\n", 244 | " height = r['dy'],\n", 245 | " color=random.choice(Paired[12]),\n", 246 | " text=name,\n", 247 | " score=value,\n", 248 | " x1 = r['x'],\n", 249 | " y1 = r['y']\n", 250 | " ) \n", 251 | " )\n", 252 | " counter = counter + 1\n", 253 | "\n", 254 | "mapper = LinearColorMapper(palette=['#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#08589e'])\n", 255 | "\n", 256 | "r_data = ColumnDataSource(ColumnDataSource.from_df(pd.DataFrame.from_dict(shapes)))\n", 257 | "r_data.data['text'] = [rex.name_hcc(label) for label in r_data.data['text']]\n", 258 | "\n", 259 | "q = figure(x_range=Range1d(x, width), y_range=Range1d(y, height), title='Condition Contribution to Jane Risk Score in Year 1')\n", 260 | "q.rect( x='x0', y='y0', width='width', height='height', fill_color={'field':'score', 'transform':mapper},\n", 261 | " line_alpha=1, line_color='#FFFFFF', source=r_data)\n", 262 | "q.text(x='x1', y='y1', text='text', source=r_data, x_offset=3, y_offset=1\n", 263 | " , text_font_size='8pt')\n", 264 | "q.xaxis.visible = False\n", 265 | "q.yaxis.visible = False\n", 266 | "\n", 267 | "\n", 268 | "\n" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": null, 274 | "metadata": { 275 | "collapsed": false, 276 | "deletable": true, 277 | "editable": true 278 | }, 279 | "outputs": [], 280 | "source": [ 281 | "\n", 282 | "janealt_coefs = indicator(jane_alt,CC) & CC.in_(cvars) & coefficient(\"CE_\"+CC,Coef)\n", 283 | "janealt_coefs = sorted(janealt_coefs,key= lambda val: val[1], reverse=True)\n", 284 | "normed_alt = squarify.normalize_sizes([value for name, value in janealt_coefs], width, height)\n", 285 | "rects_alt = squarify.squarify(normed_alt, x, y, width, height)\n", 286 | "shapes_alt = []\n", 287 | "\n", 288 | "counter_alt = 0\n", 289 | "for r in rects_alt:\n", 290 | " name, value = janealt_coefs[counter_alt]\n", 291 | " shapes_alt.append(\n", 292 | " dict(\n", 293 | " x0 = r['x'] + r['dx']/2 ,\n", 294 | " y0 = r['y'] + r['dy']/2 , \n", 295 | " width = r['dx'],\n", 296 | " height = r['dy'],\n", 297 | " color=random.choice(Paired[12]),\n", 298 | " text=name,\n", 299 | " score=value,\n", 300 | " x1 = r['x'],\n", 301 | " y1 = r['y']\n", 302 | " ) \n", 303 | " )\n", 304 | " counter_alt = counter_alt + 1\n", 305 | "\n", 306 | "z_data = ColumnDataSource(ColumnDataSource.from_df(pd.DataFrame.from_dict(shapes_alt)))\n", 307 | "z_data.data['text'] = [rex.name_hcc(label) for label in z_data.data['text']]\n", 308 | "\n", 309 | "z = figure(x_range=Range1d(x, width), y_range=Range1d(y, height), title=\"Condition Contribution to Risk Score for Jane over multiple years\")\n", 310 | "z.rect( x='x0', y='y0', width='width', height='height', fill_color={'field':'score', 'transform':mapper},\n", 311 | " line_alpha=1, line_color='#FFFFFF', source=z_data)\n", 312 | "z.text(x='x1', y='y1', text='text', source=z_data, x_offset=3, y_offset=1\n", 313 | " , text_font_size='8pt')\n", 314 | "z.xaxis.visible = False\n", 315 | "z.yaxis.visible = False\n", 316 | "\n", 317 | "\n", 318 | "\n", 319 | "\n" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": null, 325 | "metadata": { 326 | "collapsed": false, 327 | "deletable": true, 328 | "editable": true 329 | }, 330 | "outputs": [], 331 | "source": [ 332 | "show(row(q,z))\n" 333 | ] 334 | }, 335 | { 336 | "cell_type": "markdown", 337 | "metadata": { 338 | "deletable": true, 339 | "editable": true 340 | }, 341 | "source": [ 342 | "## Scaling Up\n", 343 | "\n", 344 | "So far we have been focused on doing this with only one patient but it is also possible for us to scale up the calculation (all the way to a full population). Here we will do 100 patients. " 345 | ] 346 | }, 347 | { 348 | "cell_type": "code", 349 | "execution_count": null, 350 | "metadata": { 351 | "collapsed": false, 352 | "deletable": true, 353 | "editable": true 354 | }, 355 | "outputs": [], 356 | "source": [ 357 | "cohort_study = %sql \\\n", 358 | " SELECT d.PatientID, p.SEX, p.DOB \\\n", 359 | " from diagnoses d join mem.patients p\\\n", 360 | " on d.PatientID = p.PATIENT_ID\\\n", 361 | " group by PatientID,p.SEX, p.DOB\\\n", 362 | " having COUNT(*) > 20\\\n", 363 | " order by Count(*) desc\\\n", 364 | " limit 100;" 365 | ] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "execution_count": null, 370 | "metadata": { 371 | "collapsed": false, 372 | "deletable": true, 373 | "editable": true 374 | }, 375 | "outputs": [], 376 | "source": [ 377 | "def gender(l):\n", 378 | " if l == 'M':\n", 379 | " return 'male'\n", 380 | " else:\n", 381 | " return 'female'\n", 382 | "\n", 383 | "\n", 384 | "cohort_patients = [Beneficiary(hicno=row[0], sex=gender(row[1]), dob=str(row[2])) for row in cohort_study[1:]]\n" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": null, 390 | "metadata": { 391 | "collapsed": false, 392 | "deletable": true, 393 | "editable": true 394 | }, 395 | "outputs": [], 396 | "source": [ 397 | "hicno = [pat.hicno for pat in cohort_patients]\n", 398 | "hicno = tuple(hicno)\n", 399 | "diags = %sql SELECT DISTINCT PatientID, Diagnosis from diagnoses where PatientID in $hicno\n", 400 | "diags = diags.DataFrame().set_index('PatientId')\n", 401 | "\n", 402 | "for pat in cohort_patients:\n", 403 | " pat_diags = diags['Diagnosis'].loc[pat.hicno].tolist()\n", 404 | " for code in pat_diags:\n", 405 | " pat.add_diagnosis(Diagnosis(pat,code,ICDType.NINE))" 406 | ] 407 | }, 408 | { 409 | "cell_type": "markdown", 410 | "metadata": { 411 | "deletable": true, 412 | "editable": true 413 | }, 414 | "source": [ 415 | "Here is the average score for this cohort. \n" 416 | ] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "execution_count": null, 421 | "metadata": { 422 | "collapsed": false, 423 | "deletable": true, 424 | "editable": true 425 | }, 426 | "outputs": [], 427 | "source": [ 428 | "cohort_score = [score(pat,\"community\",Score)[0][0] for pat in cohort_patients[0:5]]\n", 429 | "np.mean(cohort_score)" 430 | ] 431 | }, 432 | { 433 | "cell_type": "code", 434 | "execution_count": null, 435 | "metadata": { 436 | "collapsed": false, 437 | "deletable": true, 438 | "editable": true 439 | }, 440 | "outputs": [], 441 | "source": [ 442 | "#indicator(X,CC) & CC.in_(cvars) & coefficient(\"CE_\"+CC,Coef) & X.in_(cohort_patients[0:2])" 443 | ] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "execution_count": null, 448 | "metadata": { 449 | "collapsed": true, 450 | "deletable": true, 451 | "editable": true 452 | }, 453 | "outputs": [], 454 | "source": [ 455 | "indicator(X,CC) & X.in_([daniel,jane]) " 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": null, 461 | "metadata": { 462 | "collapsed": true 463 | }, 464 | "outputs": [], 465 | "source": [] 466 | } 467 | ], 468 | "metadata": { 469 | "kernelspec": { 470 | "display_name": "Python 3", 471 | "language": "python", 472 | "name": "python3" 473 | }, 474 | "language_info": { 475 | "codemirror_mode": { 476 | "name": "ipython", 477 | "version": 3 478 | }, 479 | "file_extension": ".py", 480 | "mimetype": "text/x-python", 481 | "name": "python", 482 | "nbconvert_exporter": "python", 483 | "pygments_lexer": "ipython3", 484 | "version": "3.5.2" 485 | } 486 | }, 487 | "nbformat": 4, 488 | "nbformat_minor": 2 489 | } 490 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hcc-python 2 | An implementation of the HCC Risk Adjustment Algorithm in Python and pyDatalog. 3 | 4 | 5 | ![ explanation ](execution-of-model.png) 6 | 7 | ## Motivation: 8 | CMS Publishes code for health systems and other interested parties to run their population against an 9 | HCC Risk model. Although this model is 'free' as it is published by CMS [ here ](https://www.cms.gov/Medicare/Health-Plans/MedicareAdvtgSpecRateStats/Risk-Adjustors-Items/Risk2016.html?DLPage=1&DLEntries=10&DLSort=0&DLSortDir=descending), it comes with an implicit tax by 10 | being published in SAS: 11 | * SAS is not open-source and has a high yearly seat-license cost 12 | * SAS is NOT a useful language in the sense of other useful general purpose or stastitcal langugages 13 | 14 | Our hope with this repository is to engage the community by providing a free version of this algorithm in Python (specifically Python3). 15 | 16 | This repository is **not** a means by which to generate a linear regression model. It is instead the code to run 17 | the pre-existing HCC model (which had been generated against a national medicare population) against a list of beneficiaries and their diagnoses. 18 | 19 | ## Contents 20 | This repository contains the `hcc.py` library which implements the HCC summing algorithm. It also contains a mapping from ICD codes (both 9 and 10) to code categories, and mappings of code categories over others (called hierarchies). All of these data files must be present to work properly. 21 | 22 | Other files in this repository are expository (pngs, reference SAS code, and jupyter notebooks). 23 | 24 | In summary, the following files are critical for running HCC on your own using python. 25 | * hcc.py 26 | * icd10.txt 27 | * icd9.txt 28 | * coefficients.txt 29 | 30 | ## Background 31 | The HCC Risk Adjustment algorithm is a linear regression model summing hundreds of independent variables to a single dependent variable called a risk score. 32 | These independent variables are either engaged or not, and their associated coefficients are either added to the ongoing sum or not. We show this diagramatically as such: 33 | 34 | ![ explanation ](model.png) 35 | 36 | As you can see, the model (community in this case) is merely a sum of coefficients. If a beneficiary and their diagnoses triggers one of these independent variables, it will add an incremental value to their risk score. That incremental value is the calculated coefficient for that effect. 37 | 38 | The following legend gives names to these components: 39 | 40 | ![ explanation ](legend.png) 41 | 42 | To reiterate but in the language of the diagram and this legend, these models 43 | are a collection of indicator/coefficient pairs. 44 | ``` 45 | model := [ ]+ 46 | indicator-coefficient-pair := ( , ) 47 | ``` 48 | 49 | An `indicator` is a predicate 50 | function, i.e. a function that returns either true or false. If the function 51 | returns true, then the coefficient is added to the running total that is this 52 | patient/beneficiary's risk score. Each model is a *different* collection of 53 | indicator/coefficient pairs that are relevant to the model's calculation (thus, 54 | the **new-enrollee model** only uses demographic variables for its indicator 55 | functions and not diagnoses). As stated, an indicator function is a predicate 56 | function (sometimes called an indicator or dummy variable in statistics 57 | parlance), but what is it a function of? The answer is "of a beneficiary and 58 | their diagnoses", as shown in the following diagram. 59 | 60 | 61 | ![ explanation ](execution-of-model.png) 62 | 63 | Given this abstraction, which is implemented in SAS by using multiplication and 64 | addition of numeric variables to represent **falsehood** (zero) and **truth** 65 | (any non-zero integer), we have chosen to implement this functionality in a 66 | unique way that emphasizes the rules, rather than a more imperative technique 67 | standard with procedural and object-oriented languages. 68 | 69 | 70 | # Implementation 71 | 72 | ## Abstract Rules 73 | We have used a packade called `pyDatalog` to capture the rules that may trigger an indicator function to contribute its coefficient to the 74 | ongoing risk score. For instance, 75 | 76 | ```python 77 | indicator(B,'MCAID_Male_Aged') <= medicaid(B) & ~disabled(B) & male(B) 78 | indicator(B,'COPD_ASP_SPEC_BACT_PNEUM') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & copd_asp_spec_bact_pneum(CC,CC2) 79 | ``` 80 | 81 | These two lines of pure python code, are also an embedabble DSL for datalog that capture the 82 | logical rules that **relate** a beneficiary to this indicator. 83 | 84 | You may read these rules as such, (in order): 85 | * the MCAID_Male_Aged indicator is **true** for this beneficiary B `indicator(B,'MCAID_Male_Aged')` **if** `<=` it is **true** that this beneficiary is on medicaid `medicaid(B)` **and** that this beneficiary is not disabled `~disabled(B)` **and** this beneficiary is male `male(B)` 86 | * the COPD_ASP_SPEC_BACT_PNEUM indicator is true if this beneficiary has two cost categories (CC and CC2) that are related to each other by the sub-rule `copd_asp_spec_bact_pneum(CC,CC2)` (i.e. this sub-rule returns **true**) 87 | 88 | For programmers familiar with standard imperative techniques (or even functional), this might seem new as it encapsulates the logic 89 | of *what* declaratively and eschews an imperative *how* for the datalog engine. 90 | 91 | This effective severing of knowledge from implemenation can yield surprising smaller code which may have higher maintenance characteristics. 92 | Consider these rules which effectively capture the notion of hierarchicalization (the 'H' in HCC): 93 | 94 | ```python 95 | beneficiary_icd(B,ICD,Type) <= (Diag.beneficiary[D] == B) & (Diag.icdcode[D]==ICD) & (Diag.codetype[D]==Type) 96 | beneficiary_has_cc(B,CC) <= beneficiary_icd(B,ICD,Type) & edit(ICD,Type,B,CC) & ~(excised(ICD,Type,B)) 97 | beneficiary_has_cc(B,CC) <= beneficiary_icd(B,ICD,Type) & \ 98 | cc(ICD,CC,Type) & ~(edit(ICD,Type,B,CC2)) & ~(excised(ICD,Type,B)) 99 | 100 | has_cc_that_overrides_this_one(B,CC) <= beneficiary_has_cc(B,OT) & overrides(OT,CC) 101 | beneficiary_has_hcc(B,CC) <= beneficiary_has_cc(B,CC) & ~( has_cc_that_overrides_this_one(B,CC)) 102 | ``` 103 | 104 | Though these rules depend on facts (**cc** and **Beneficiary** and **Diagnosis**) and other rules (`excised,edit,overrides`), 105 | these few lines capture all the logic in relating beneficiaries to ICDs, and to cost categories, and hierarchical cost categories. 106 | 107 | In the end, we are left with a database (or knowledegebase of facts and rules) which are formal encapsulations of our problem domain. 108 | These facts and rules operate to answer queries on our data. 109 | 110 | ## Usage 111 | At this time, this library is provided as a means for an experienced Python programmer to integrate into their codebase. 112 | Thusly, such a programmer must import this library and be responsible for the de-serialization of their data 113 | into the Python objects. These classes (`Beneficiary` and `Diagnosis`) are the effective API of this package, and their code is shown 114 | here to show how simple they are, and what little data is needed by the HCC indicator set to trigger these coefficients: 115 | 116 | ```python 117 | class Diagnosis(pyDatalog.Mixin): 118 | def __init__(self, 119 | beneficiary, 120 | icdcode, 121 | codetype=ICDType.NINE): 122 | super().__init__() 123 | self.beneficiary = beneficiary 124 | self.icdcode = icdcode 125 | self.codetype = codetype 126 | 127 | def __repr__(self): # specifies how to display an Employee 128 | return str(self.beneficiary) + str(self.icdcode) + str(self.codetype) 129 | 130 | class Beneficiary(pyDatalog.Mixin): 131 | def __init__(self, 132 | hicno,sex,dob, 133 | original_reason_entitlement=EntitlementReason.OASI, 134 | medicaid=False, 135 | newenrollee_medicaid=False,): 136 | super().__init__() 137 | self.hicno = hicno 138 | self.sex = sex 139 | self.dob = datetime.strptime(dob,"%Y%m%d") 140 | self.age = age_as_of(self.dob,datetime.now()) 141 | self.medicaid = medicaid 142 | self.newenrollee_medicaid = newenrollee_medicaid 143 | self.original_reason_entitlement = original_reason_entitlement 144 | self.diagnoses = [] 145 | 146 | ``` 147 | The key takeaway of this is that these objects are **automatically** integrated into pyDatalog as **facts** (the ground terms 148 | for a logical set of clauses). As a Python programmer creates these objects, they become available to querying by 149 | the other high-level API, the `score` datalog rule: 150 | 151 | ```python 152 | score(B,"community",Score) <= (community_score[B] == Score) 153 | score(B,"institutional",Score) <= (institutional_score[B] == Score) 154 | score(B,"new_enrollee",Score) <= (new_enrollee_score[B] == Score) 155 | ``` 156 | Though we show the **definition** of these rules above, the acutal usage would be 157 | to call the score directly from your code: 158 | ```python 159 | pyDatalog.create_terms("X") 160 | for b in beneficiary_list: 161 | score(b,"community",X) # where b is just the Beneficiary object, "community" is one of the three models you want scored, and X is a relvar 162 | ``` 163 | 164 | The **relvar** X will be populated with the values that make this relation/predicate true, that is to say, the score. 165 | 166 | 167 | ## Remaining Items 168 | 169 | This code is fresh off the presses. In the following weeks we plan on adding the following: 170 | 171 | * Capture ICD specific upper/lower age limits for executing cost-category edits 172 | * provide useful wrapper code to run CSV files with a well-known format for beneficiary/diagnosis data 173 | * provide test harness to show how the SAS code and this code produce the exact same scores for all the models for a large representative data set 174 | * improve performance by exploring other rules-driven technologies 175 | * rules engine (Rete algorithm) 176 | * planners/solvers/answer-set stuff? 177 | * external prolog with better tabling characteristics (XSD?, SWI-PROLOG?) 178 | * Refactor to provide an API and SPI for rolling in **other** risk adjustment models (and even different versions of the same model) 179 | ![ explanation ](framework.png) 180 | -------------------------------------------------------------------------------- /coefficients.txt: -------------------------------------------------------------------------------- 1 | CE_F0_34, 0.198 2 | CE_F35_44, 0.212 3 | CE_F45_54, 0.274 4 | CE_F55_59, 0.359 5 | CE_F60_64, 0.416 6 | CE_F65_69, 0.283 7 | CE_F70_74, 0.346 8 | CE_F75_79, 0.428 9 | CE_F80_84, 0.517 10 | CE_F85_89, 0.632 11 | CE_F90_94, 0.755 12 | CE_F95_GT, 0.775 13 | CE_M0_34, 0.079 14 | CE_M35_44, 0.119 15 | CE_M45_54, 0.165 16 | CE_M55_59, 0.292 17 | CE_M60_64, 0.332 18 | CE_M65_69, 0.309 19 | CE_M70_74, 0.378 20 | CE_M75_79, 0.464 21 | CE_M80_84, 0.565 22 | CE_M85_89, 0.647 23 | CE_M90_94, 0.776 24 | CE_M95_GT, 0.963 25 | CE_MCAID_Female_Aged, 0.213 26 | CE_MCAID_Female_Disabled, 0.104 27 | CE_MCAID_Male_Aged, 0.21 28 | CE_MCAID_Male_Disabled, 0.113 29 | CE_OriginallyDisabled_Female, 0.244 30 | CE_OriginallyDisabled_Male, 0.171 31 | CE_HCC1, 0.492 32 | CE_HCC2, 0.52 33 | CE_HCC6, 0.557 34 | CE_HCC8, 2.425 35 | CE_HCC9, 1.006 36 | CE_HCC10, 0.695 37 | CE_HCC11, 0.33 38 | CE_HCC12, 0.18 39 | CE_HCC17, 0.344 40 | CE_HCC18, 0.344 41 | CE_HCC19, 0.124 42 | CE_HCC21, 0.653 43 | CE_HCC22, 0.342 44 | CE_HCC23, 0.24 45 | CE_HCC27, 1.003 46 | CE_HCC28, 0.425 47 | CE_HCC29, 0.313 48 | CE_HCC33, 0.337 49 | CE_HCC34, 0.257 50 | CE_HCC35, 0.279 51 | CE_HCC39, 0.423 52 | CE_HCC40, 0.376 53 | CE_HCC46, 1.078 54 | CE_HCC47, 0.306 55 | CE_HCC48, 0.258 56 | CE_HCC51, 0.616 57 | CE_HCC52, 0.343 58 | CE_HCC54, 0.358 59 | CE_HCC55, 0.358 60 | CE_HCC57, 0.471 61 | CE_HCC58, 0.318 62 | CE_HCC70, 1.075 63 | CE_HCC71, 0.868 64 | CE_HCC72, 0.441 65 | CE_HCC73, 1.016 66 | CE_HCC74, 0.036 67 | CE_HCC75, 0.281 68 | CE_HCC76, 0.46 69 | CE_HCC77, 0.482 70 | CE_HCC78, 0.555 71 | CE_HCC79, 0.252 72 | CE_HCC80, 0.533 73 | CE_HCC82, 1.732 74 | CE_HCC83, 0.769 75 | CE_HCC84, 0.326 76 | CE_HCC85, 0.361 77 | CE_HCC86, 0.283 78 | CE_HCC87, 0.283 79 | CE_HCC88, 0.21 80 | CE_HCC96, 0.276 81 | CE_HCC99, 0.371 82 | CE_HCC100, 0.333 83 | CE_HCC103, 0.481 84 | CE_HCC104, 0.212 85 | CE_HCC106, 1.313 86 | CE_HCC107, 0.417 87 | CE_HCC108, 0.288 88 | CE_HCC110, 0.388 89 | CE_HCC111, 0.388 90 | CE_HCC112, 0.294 91 | CE_HCC114, 0.691 92 | CE_HCC115, 0.212 93 | CE_HCC122, 0.223 94 | CE_HCC124, 0.248 95 | CE_HCC134, 0.617 96 | CE_HCC135, 0.617 97 | CE_HCC136, 0.227 98 | CE_HCC137, 0.227 99 | CE_HCC138, 0.227 100 | CE_HCC139, 0.227 101 | CE_HCC140, 0.227 102 | CE_HCC141, 0.075 103 | CE_HCC157, 1.071 104 | CE_HCC158, 1.071 105 | CE_HCC160, 1.071 106 | CE_HCC161, 0.473 107 | CE_HCC162, 0.458 108 | CE_HCC166, 0.533 109 | CE_HCC167, 0.141 110 | CE_HCC169, 0.441 111 | CE_HCC170, 0.363 112 | CE_HCC173, 0.379 113 | CE_HCC176, 0.555 114 | CE_HCC186, 1.032 115 | CE_HCC188, 0.609 116 | CE_HCC189, 0.804 117 | CE_SEPSIS_CARD_RESP_FAIL, 0.634 118 | CE_CANCER_IMMUNE, 1.101 119 | CE_DIABETES_CHF, 0.237 120 | CE_CHF_COPD, 0.255 121 | CE_CHF_RENAL, 0.201 122 | CE_COPD_CARD_RESP_FAIL, 0.42 123 | CE_DISABLED_HCC6, 0.564 124 | CE_DISABLED_HCC34, 0.757 125 | CE_DISABLED_HCC46, 0.818 126 | CE_DISABLED_HCC54, 0.432 127 | CE_DISABLED_HCC55, 0.147 128 | CE_DISABLED_HCC110, 2.397 129 | CE_DISABLED_HCC176, 0.495 130 | CE_HCC159, 1.071 131 | INS_F0_34, 0.783 132 | INS_F35_44, 0.723 133 | INS_F45_54, 0.7 134 | INS_F55_59, 0.805 135 | INS_F60_64, 0.773 136 | INS_F65_69, 1.004 137 | INS_F70_74, 0.947 138 | INS_F75_79, 0.874 139 | INS_F80_84, 0.792 140 | INS_F85_89, 0.699 141 | INS_F90_94, 0.594 142 | INS_F95_GT, 0.465 143 | INS_M0_34, 0.994 144 | INS_M35_44, 0.658 145 | INS_M45_54, 0.687 146 | INS_M55_59, 0.814 147 | INS_M60_64, 0.877 148 | INS_M65_69, 1.148 149 | INS_M70_74, 1.195 150 | INS_M75_79, 1.168 151 | INS_M80_84, 1.104 152 | INS_M85_89, 1.046 153 | INS_M90_94, 0.928 154 | INS_M95_GT, 0.842 155 | INS_MCAID, 0.126 156 | INS_ORIGDS, 0.026 157 | INS_HCC1, 1.374 158 | INS_HCC2, 0.471 159 | INS_HCC6, 0.541 160 | INS_HCC8, 0.928 161 | INS_HCC9, 0.61 162 | INS_HCC10, 0.363 163 | INS_HCC11, 0.255 164 | INS_HCC12, 0.165 165 | INS_HCC17, 0.434 166 | INS_HCC18, 0.434 167 | INS_HCC19, 0.187 168 | INS_HCC21, 0.343 169 | INS_HCC22, 0.353 170 | INS_HCC23, 0.248 171 | INS_HCC27, 0.637 172 | INS_HCC28, 0.343 173 | INS_HCC29, 0.343 174 | INS_HCC33, 0.302 175 | INS_HCC34, 0.175 176 | INS_HCC35, 0.25 177 | INS_HCC39, 0.386 178 | INS_HCC40, 0.222 179 | INS_HCC46, 0.638 180 | INS_HCC47, 0.436 181 | INS_HCC48, 0.197 182 | INS_HCC51, 0 183 | INS_HCC52, 0 184 | INS_HCC54, 0.051 185 | INS_HCC55, 0.051 186 | INS_HCC57, 0.274 187 | INS_HCC58, 0.274 188 | INS_HCC70, 0.497 189 | INS_HCC71, 0.497 190 | INS_HCC72, 0.191 191 | INS_HCC73, 0.294 192 | INS_HCC74, 0 193 | INS_HCC75, 0.256 194 | INS_HCC76, 0.247 195 | INS_HCC77, 0 196 | INS_HCC78, 0.11 197 | INS_HCC79, 0.173 198 | INS_HCC80, 0.103 199 | INS_HCC82, 1.567 200 | INS_HCC83, 0.611 201 | INS_HCC84, 0.346 202 | INS_HCC85, 0.226 203 | INS_HCC86, 0.394 204 | INS_HCC87, 0.394 205 | INS_HCC88, 0.366 206 | INS_HCC96, 0.227 207 | INS_HCC99, 0.175 208 | INS_HCC100, 0.175 209 | INS_HCC103, 0.063 210 | INS_HCC104, 0.063 211 | INS_HCC106, 0.773 212 | INS_HCC107, 0.257 213 | INS_HCC108, 0.146 214 | INS_HCC110, 0.323 215 | INS_HCC111, 0.323 216 | INS_HCC112, 0.252 217 | INS_HCC114, 0.239 218 | INS_HCC115, 0.194 219 | INS_HCC122, 0.366 220 | INS_HCC124, 0.178 221 | INS_HCC134, 0.538 222 | INS_HCC135, 0.538 223 | INS_HCC136, 0.304 224 | INS_HCC137, 0.304 225 | INS_HCC138, 0.304 226 | INS_HCC139, 0.304 227 | INS_HCC140, 0.304 228 | INS_HCC141, 0.235 229 | INS_HCC157, 0.284 230 | INS_HCC158, 0.284 231 | INS_HCC160, 0.284 232 | INS_HCC161, 0.226 233 | INS_HCC162, 0 234 | INS_HCC166, 0.103 235 | INS_HCC167, 0 236 | INS_HCC169, 0.179 237 | INS_HCC170, 0 238 | INS_HCC173, 0.067 239 | INS_HCC176, 0.369 240 | INS_HCC186, 1.12 241 | INS_HCC188, 0.658 242 | INS_HCC189, 0.384 243 | INS_CHF_COPD, 0.159 244 | INS_COPD_CARD_RESP_FAIL, 0.524 245 | INS_SEPSIS_PRESSURE_ULCER, 0.538 246 | INS_SEPSIS_ARTIF_OPENINGS, 0.453 247 | INS_ART_OPENINGS_PRESSURE_ULCER, 0.361 248 | INS_DIABETES_CHF, 0.143 249 | INS_COPD_ASP_SPEC_BACT_PNEUM, 0.249 250 | INS_ASP_SPEC_BACT_PNEUM_PRES_ULC, 0.325 251 | INS_SEPSIS_ASP_SPEC_BACT_PNEUM, 0.387 252 | INS_SCHIZOPHRENIA_COPD, 0.187 253 | INS_SCHIZOPHRENIA_CHF, 0.22 254 | INS_SCHIZOPHRENIA_SEIZURES, 0.303 255 | INS_DISABLED_HCC85, 0.32 256 | INS_DISABLED_PRESSURE_ULCER, 0.421 257 | INS_DISABLED_HCC161, 0.337 258 | INS_DISABLED_HCC39, 0.624 259 | INS_DISABLED_HCC77, 0.344 260 | INS_DISABLED_HCC6, 0.914 261 | INS_HCC159, 0.284 262 | NE_NEF0_34, 0.453 263 | NE_NEF35_44, 0.601 264 | NE_NEF45_54, 0.81 265 | NE_NEF55_59, 0.977 266 | NE_NEF60_64, 1.082 267 | NE_NEF65, 0.501 268 | NE_NEF66, 0.543 269 | NE_NEF67, 0.579 270 | NE_NEF68, 0.598 271 | NE_NEF69, 0.624 272 | NE_NEF70_74, 0.737 273 | NE_NEF75_79, 0.941 274 | NE_NEF80_84, 1.116 275 | NE_NEF85_89, 1.28 276 | NE_NEF90_94, 1.372 277 | NE_NEF95_GT, 1.247 278 | NE_NEM0_34, 0.243 279 | NE_NEM35_44, 0.45 280 | NE_NEM45_54, 0.633 281 | NE_NEM55_59, 0.825 282 | NE_NEM60_64, 0.956 283 | NE_NEM65, 0.542 284 | NE_NEM66, 0.601 285 | NE_NEM67, 0.631 286 | NE_NEM68, 0.659 287 | NE_NEM69, 0.68 288 | NE_NEM70_74, 0.818 289 | NE_NEM75_79, 1.056 290 | NE_NEM80_84, 1.275 291 | NE_NEM85_89, 1.446 292 | NE_NEM90_94, 1.622 293 | NE_NEM95_GT, 1.689 294 | NE_MCAID_FEMALE0_64, 0.331 295 | NE_MCAID_FEMALE65, 0.513 296 | NE_MCAID_FEMALE66_69, 0.474 297 | NE_MCAID_FEMALE70_74, 0.497 298 | NE_MCAID_FEMALE75_GT, 0.425 299 | NE_MCAID_MALE0_64, 0.419 300 | NE_MCAID_MALE65, 0.554 301 | NE_MCAID_MALE66_69, 0.554 302 | NE_MCAID_MALE70_74, 0.553 303 | NE_MCAID_MALE75_GT, 0.513 304 | NE_ORIGDIS_FEMALE65, 0.623 305 | NE_ORIGDIS_FEMALE66_69, 0.649 306 | NE_ORIGDIS_FEMALE70_74, 0.59 307 | NE_ORIGDIS_FEMALE75_GT, 0.562 308 | NE_ORIGDIS_MALE65, 0.566 309 | NE_ORIGDIS_MALE66_69, 0.521 310 | NE_ORIGDIS_MALE70_74, 0.519 311 | NE_ORIGDIS_MALE75_GT, 0.441 312 | -------------------------------------------------------------------------------- /execution-of-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlgorexHealth/hcc-python/cd3797dbcb0e0d830bba44f6ab75c53b6c891cc9/execution-of-model.png -------------------------------------------------------------------------------- /framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlgorexHealth/hcc-python/cd3797dbcb0e0d830bba44f6ab75c53b6c891cc9/framework.png -------------------------------------------------------------------------------- /hcc.py: -------------------------------------------------------------------------------- 1 | from enum import Enum,IntEnum 2 | from functools import reduce 3 | from datetime import datetime 4 | from pyDatalog import pyDatalog 5 | import os 6 | 7 | pyDatalog.create_terms(""" 8 | output,Col,Val,score_em,Score,score,Scores,NE,INS,CE,institutional_score,age_range, 9 | new_enrollee_score,community_score,Pair,Coef,coefficient,b,dc,overrides,wrap, 10 | has_cc_that_overrides_this_one,beneficiary_has_hcc,Type,OT,beneficiary_has_cc,cc,CC,CC2, 11 | ICD,edit,male,B,Diag,Ben,female,medicaid,age,A,old_age_entitled,new_enrollee,D,ben_hcc, 12 | sepsis_card_resp_fail,cancer_immune,diabetes_chf,chf_copd,chf_renal,copd_card_resp_fail, 13 | sepsis_pressure_ulcer, sepsis_artif_openings,art_openings_pressure_ulcer, diabetes_chf, 14 | copd_asp_spec_bact_pneum,asp_spec_bact_pneum_pres_ulc, sepsis_asp_spec_bact_pneum, 15 | schizophrenia_copd,schizophrenia_chf,schizophrenia_seizures,sex_age_range,U,L,disabled, 16 | originally_disabled,ben_hcc,sex_age,MF,indicator,excised,beneficiary_icd,CC,B, 17 | valid_community_variables,valid_institutional_variables,valid_new_enrollee_variables,indicator 18 | """) 19 | pyDatalog.create_terms("X,Y,Z") 20 | 21 | 22 | def age_as_of(dob,date_as_of): 23 | return date_as_of.year - dob.year - ((date_as_of.month, date_as_of.day) < (dob.month, dob.day)) 24 | 25 | class EntitlementReason(IntEnum): 26 | OASI=0 27 | DIB=1 28 | ESRD=2 29 | DIB_AND_ESRD = 3 30 | 31 | class ICDType(IntEnum): 32 | NINE = 9 33 | TEN = 0 34 | 35 | class Diagnosis(pyDatalog.Mixin): 36 | def __init__(self, 37 | beneficiary, 38 | icdcode, 39 | codetype=ICDType.NINE): 40 | super().__init__() 41 | self.beneficiary = beneficiary 42 | self.icdcode = icdcode 43 | self.codetype = codetype 44 | 45 | def __repr__(self): # specifies how to display an Employee 46 | return str(self.beneficiary) + str(self.icdcode) + str(self.codetype) 47 | 48 | class Beneficiary(pyDatalog.Mixin): 49 | def __init__(self, 50 | hicno,sex,dob, 51 | original_reason_entitlement=EntitlementReason.OASI, 52 | medicaid=False, 53 | newenrollee_medicaid=False,): 54 | super().__init__() 55 | self.hicno = hicno 56 | self.sex = sex 57 | self.dob = datetime.strptime(dob,"%Y%m%d") 58 | self.age = age_as_of(self.dob,datetime.now()) 59 | self.medicaid = medicaid 60 | self.newenrollee_medicaid = newenrollee_medicaid 61 | self.original_reason_entitlement = original_reason_entitlement 62 | self.diagnoses = [] 63 | 64 | def __repr__(self): # specifies how to display an Employee 65 | return "ID:" + str(self.hicno) + ",DOB:" + str(self.dob) 66 | 67 | def add_diagnosis(self,diag): 68 | self.diagnoses.append(diag) 69 | 70 | # lines 352 - 361 71 | def load_diagnostic_category_facts(): 72 | diagnostic_categories = [ 73 | ("cancer",["8","9","10","11","12"]), 74 | ("diabetes",["17","18","19"]), 75 | ("immune",["47"]), 76 | ("card_resp_fail",["82","83","84"]), 77 | ("chf",["85"]), 78 | ("copd",["110","111"]), 79 | ("renal",[str(x) for x in range(134,142)]), 80 | ("compl",["176"]), 81 | ("pressure_ulcer",["157","158","159","160"]), 82 | ("sepsis",["2"]) ] 83 | for dcE, ccs in diagnostic_categories: 84 | for ccE in ccs: 85 | + dc(dcE,ccE) 86 | 87 | def load_coefficients(f): 88 | dir = os.path.dirname(__file__) 89 | file = open(os.path.join(dir,f), 'r') 90 | for line in file: 91 | vals = list(map(lambda s: s.strip(),line.split(","))) 92 | label,coeff = vals 93 | + coefficient(label,float(coeff)) 94 | + coefficient('starting',0.00) 95 | 96 | def load_cc_facts(f,icdcodetype): 97 | dir = os.path.dirname(__file__) 98 | file = open(os.path.join(dir,f), 'r') 99 | for line in file: 100 | vals = line.split() 101 | if len(vals) == 2: 102 | icdE,ccE = vals 103 | elif len(vals) == 3: 104 | icdE,ccE,_ = vals 105 | + cc(icdE,ccE,icdcodetype) 106 | 107 | def load_hcc_facts(): 108 | overriders = [ 109 | ("8",["9","10","11","12" ]), 110 | ("9",["10","11","12" ]), 111 | ("10",["11","12" ]), 112 | ("11",["12" ]), 113 | ("17",["18","19" ]), 114 | ("18",["19" ]), 115 | ("27",["28","29","80" ]), 116 | ("28",["29" ]), 117 | ("46",["48" ]), 118 | ("51",["52" ]), 119 | ("54",["55" ]), 120 | ("57",["58" ]), 121 | ("70",["71","72","103","104","169" ]), 122 | ("71",["72","104","169" ]), 123 | ("72",["169" ]), 124 | ("82",["83","84" ]), 125 | ("83",["84" ]), 126 | ("86",["87","88" ]), 127 | ("87",["88" ]), 128 | ("99",["100" ]), 129 | ("103",["104" ]), 130 | ("106",["107","108","161","189" ]), 131 | ("107",["108" ]), 132 | ("110",["111","112" ]), 133 | ("111",["112" ]), 134 | ("114",["115" ]), 135 | ("134",["135","136","137","138","139","140","141"]), 136 | ("135",["136","137","138","139","140","141" ]), 137 | ("136",["137","138","139","140","141" ]), 138 | ("137",["138","139","140","141" ]), 139 | ("138",["139","140","141" ]), 140 | ("139",["140","141" ]), 141 | ("140",["141" ]), 142 | ("157",["158","159","160","161" ]), 143 | ("158",["159","160","161" ]), 144 | ("159",["160","161" ]), 145 | ("160",["161" ]), 146 | ("166",["80","167" ]) 147 | ] 148 | for overrider, overridees in overriders: 149 | for overridee in overridees: 150 | + overrides(overrider,overridee) 151 | 152 | def load_facts(): 153 | 154 | load_cc_facts("icd10.txt",0) 155 | load_cc_facts("icd9.txt",9) 156 | load_hcc_facts() 157 | load_diagnostic_category_facts() 158 | load_coefficients("coefficients.txt") 159 | 160 | def community_regression(): 161 | # &COMM_REG 162 | reg_vars = ["F0_34","F35_44", "F45_54", "F55_59", "F60_64", "F65_69", 163 | "F70_74", "F75_79", "F80_84", "F85_89", "F90_94", "F95_GT", 164 | "M0_34","M35_44", "M45_54", "M55_59", "M60_64", "M65_69", 165 | "M70_74", "M75_79", "M80_84", "M85_89", "M90_94", "M95_GT", 166 | "MCAID_Female_Aged","MCAID_Female_Disabled", 167 | "MCAID_Male_Aged","MCAID_Male_Disabled", 168 | "OriginallyDisabled_Female","OriginallyDisabled_Male", 169 | "DISABLED_HCC6", "DISABLED_HCC34", "DISABLED_HCC46","DISABLED_HCC54", 170 | "DISABLED_HCC55","DISABLED_HCC110", "DISABLED_HCC176", "SEPSIS_CARD_RESP_FAIL", 171 | "CANCER_IMMUNE", "DIABETES_CHF", "CHF_COPD","CHF_RENAL", "COPD_CARD_RESP_FAIL", 172 | "HCC1","HCC2","HCC6","HCC8","HCC9","HCC10", "HCC11", "HCC12", 173 | "HCC17", "HCC18", "HCC19", "HCC21", "HCC22", "HCC23", "HCC27", "HCC28", 174 | "HCC29", "HCC33", "HCC34", "HCC35", "HCC39", "HCC40", "HCC46", "HCC47", 175 | "HCC48", "HCC51", "HCC52", "HCC54", "HCC55", "HCC57", "HCC58", "HCC70", 176 | "HCC71", "HCC72", "HCC73", "HCC74", "HCC75", "HCC76", "HCC77", "HCC78", 177 | "HCC79", "HCC80", "HCC82", "HCC83", "HCC84", "HCC85", "HCC86", "HCC87", 178 | "HCC88", "HCC96", "HCC99", "HCC100","HCC103","HCC104","HCC106","HCC107", 179 | "HCC108","HCC110","HCC111","HCC112","HCC114","HCC115","HCC122","HCC124", 180 | "HCC134","HCC135","HCC136","HCC137","HCC138","HCC139","HCC140","HCC141", 181 | "HCC157","HCC158","HCC159","HCC160","HCC161","HCC162","HCC166","HCC167", 182 | "HCC169","HCC170","HCC173","HCC176","HCC186","HCC188","HCC189" ] 183 | return reg_vars 184 | 185 | def new_enrollee_regression(): 186 | reg_vars = ["NEF0_34","NEF35_44", "NEF45_54", "NEF55_59", "NEF60_64", 187 | "NEF65","NEF66","NEF67","NEF68","NEF69", 188 | "NEF70_74", "NEF75_79", "NEF80_84", "NEF85_89", "NEF90_94", "NEF95_GT", 189 | "NEM0_34","NEM35_44", "NEM45_54", "NEM55_59", "NEM60_64", 190 | "NEM65","NEM66","NEM67","NEM68","NEM69", 191 | "NEM70_74", "NEM75_79", "NEM80_84", "NEM85_89", "NEM90_94", "NEM95_GT", 192 | "MCAID_FEMALE0_64","MCAID_FEMALE65","MCAID_FEMALE66_69", 193 | "MCAID_FEMALE70_74", "MCAID_FEMALE75_GT", 194 | "MCAID_MALE0_64","MCAID_MALE65","MCAID_MALE66_69", 195 | "MCAID_MALE70_74", "MCAID_MALE75_GT", 196 | "Origdis_female65", "Origdis_female66_69", 197 | "Origdis_female70_74","Origdis_female75_GT", 198 | "Origdis_male65", "Origdis_male66_69", 199 | "Origdis_male70_74","Origdis_male75_GT"] 200 | return reg_vars 201 | 202 | def institutional_regression(): 203 | reg_vars = ["F0_34","F35_44", "F45_54", "F55_59", "F60_64", "F65_69", 204 | "F70_74", "F75_79", "F80_84", "F85_89", "F90_94", "F95_GT", 205 | "M0_34","M35_44", "M45_54", "M55_59", "M60_64", "M65_69", 206 | "M70_74", "M75_79", "M80_84", "M85_89", "M90_94", "M95_GT", 207 | "MCAID","ORIGDS", "DISABLED_HCC85", "DISABLED_PRESSURE_ULCER", 208 | "DISABLED_HCC161","DISABLED_HCC39", "DISABLED_HCC77", "DISABLED_HCC6", 209 | "CHF_COPD", "COPD_CARD_RESP_FAIL", "SEPSIS_PRESSURE_ULCER", "SEPSIS_ARTIF_OPENINGS", 210 | "ART_OPENINGS_PRESSURE_ULCER", "DIABETES_CHF", "COPD_ASP_SPEC_BACT_PNEUM", "ASP_SPEC_BACT_PNEUM_PRES_ULC", 211 | "SEPSIS_ASP_SPEC_BACT_PNEUM", "SCHIZOPHRENIA_COPD", "SCHIZOPHRENIA_CHF", "SCHIZOPHRENIA_SEIZURES", 212 | "HCC1","HCC2","HCC6","HCC8","HCC9","HCC10", "HCC11", "HCC12", 213 | "HCC17", "HCC18", "HCC19", "HCC21", "HCC22", "HCC23", "HCC27", "HCC28", 214 | "HCC29", "HCC33", "HCC34", "HCC35", "HCC39", "HCC40", "HCC46", "HCC47", 215 | "HCC48", "HCC51", "HCC52", "HCC54", "HCC55", "HCC57", "HCC58", "HCC70", 216 | "HCC71", "HCC72", "HCC73", "HCC74", "HCC75", "HCC76", "HCC77", "HCC78", 217 | "HCC79", "HCC80", "HCC82", "HCC83", "HCC84", "HCC85", "HCC86", "HCC87", 218 | "HCC88", "HCC96", "HCC99", "HCC100","HCC103","HCC104","HCC106","HCC107", 219 | "HCC108","HCC110","HCC111","HCC112","HCC114","HCC115","HCC122","HCC124", 220 | "HCC134","HCC135","HCC136","HCC137","HCC138","HCC139","HCC140","HCC141", 221 | "HCC157","HCC158","HCC159","HCC160","HCC161","HCC162","HCC166","HCC167", 222 | "HCC169","HCC170","HCC173","HCC176","HCC186","HCC188","HCC189" ] 223 | return reg_vars 224 | 225 | def load_rules(): 226 | Ben = Beneficiary 227 | Diag = Diagnosis 228 | 229 | male(B) <= (Ben.sex[B] == "male") 230 | female(B) <= (Ben.sex[B] == "female") 231 | medicaid(B) <= (Ben.medicaid[B] == True) 232 | age(B,A) <= (Ben.age[B] == A) 233 | old_age_entitled(B) <= (Ben.original_reason_entitlement[B] == EntitlementReason.OASI) 234 | new_enrollee(B) <= (Ben.newenrollee_medicaid[B] == True) 235 | 236 | # %* disabled; 237 | # DISABL = (&AGEF < 65 & &OREC ne "0"); 238 | disabled(B) <= (Ben.age[B] < 65) & ~(old_age_entitled(B)) 239 | # %* originally disabled: CHANGED FIRST TIME FOR THIS SOFTWARE; 240 | # ORIGDS = (&OREC = '1')*(DISABL = 0); 241 | originally_disabled(B) <= (Ben.original_reason_entitlement[B] == EntitlementReason.DIB) & ~(disabled(B)) 242 | 243 | edit(ICD,9,B,"48") <= female(B) & (ICD.in_(["2860", "2861"])) 244 | edit(ICD,9,B,"112") <= age(B,A) & (A < 18) & \ 245 | (ICD.in_(["4910", "4911", "49120", "49121", "49122", 246 | "4918", "4919", "4920", "4928", "496", 247 | "5181", "5182"])) 248 | edit(ICD,0,B,"48") <= female(B) & (ICD.in_(["D66", "D67"])) 249 | edit(ICD,0,B,"112") <= age(B,A) & (A < 18) & (ICD.in_(["J410", 250 | "J411", "J418", "J42", "J430", 251 | "J431", "J432", "J438", "J439", "J440", 252 | "J441", "J449", "J982", "J983"])) 253 | 254 | #IF &AGE < 18 AND &ICD9 IN ("49320", "49321", "49322") 255 | # THEN CC="-1.0"; 256 | excised(ICD,9,B) <= age(B,A) & (A < 18) & (ICD.in_(["49320", "49321", "49322"])) 257 | 258 | beneficiary_icd(B,ICD,Type) <= (Diag.beneficiary[D] == B) & (Diag.icdcode[D]==ICD) & (Diag.codetype[D]==Type) 259 | beneficiary_has_cc(B,CC) <= beneficiary_icd(B,ICD,Type) & edit(ICD,Type,B,CC) & ~(excised(ICD,Type,B)) 260 | beneficiary_has_cc(B,CC) <= beneficiary_icd(B,ICD,Type) & \ 261 | cc(ICD,CC,Type) & ~(edit(ICD,Type,B,CC2)) & ~(excised(ICD,Type,B)) 262 | 263 | has_cc_that_overrides_this_one(B,CC) <= beneficiary_has_cc(B,OT) & overrides(OT,CC) 264 | beneficiary_has_hcc(B,CC) <= beneficiary_has_cc(B,CC) & ~( has_cc_that_overrides_this_one(B,CC)) 265 | 266 | ben_hcc(B,CC) <= beneficiary_has_hcc(B,CC) 267 | 268 | # lines 363 - 368 269 | sepsis_card_resp_fail(CC,CC2) <= dc("sepsis",CC) & dc("card_resp_fail",CC2) 270 | cancer_immune(CC,CC2) <= dc("cancer",CC) & dc("immune",CC2) 271 | diabetes_chf(CC,CC2) <= dc("diabetes",CC) & dc("chf",CC2) 272 | chf_copd(CC,CC2) <= dc("chf",CC) & dc("copd",CC2) 273 | chf_renal(CC,CC2) <= dc("chf",CC) & dc("renal",CC2) 274 | copd_card_resp_fail(CC,CC2) <= dc("copd",CC) & dc("card_resp_fail",CC2) 275 | 276 | # PRESSURE_ULCER = MAX(HCC157, HCC158, HCC159, HCC160); 277 | sepsis_pressure_ulcer(CC,CC2) <= dc("sepsis",CC) & dc("pressure_ulcer",CC2) 278 | sepsis_artif_openings(CC,"188") <= dc("sepsis",CC) 279 | art_openings_pressure_ulcer(CC,"188") <= dc("pressure_ulcer",CC) 280 | diabetes_chf(CC,CC2) <= dc("diabetes",CC) & dc("chf",CC2) 281 | copd_asp_spec_bact_pneum(CC,"114") <= dc("copd",CC) 282 | asp_spec_bact_pneum_pres_ulc(CC,"114") <= dc("pressure_ulcer",CC) 283 | sepsis_asp_spec_bact_pneum(CC,"114") <= dc("sepsis",CC) 284 | schizophrenia_copd(CC,"57") <= dc("copd",CC) 285 | schizophrenia_chf(CC,"57") <= dc("chf",CC) 286 | schizophrenia_seizures("79",CC) <= (CC == "57") 287 | 288 | # these predicates will be used to generate 289 | # more specific predicates like "F0_34" 290 | age_range(B,L,U) <= age(B,A) & (A <= U) & (A > L) 291 | age_range(B,L,-1.0) <= age(B,A) & (A > L) 292 | sex_age_range("male",B,L,U) <= male(B) & age_range(B,L,U) 293 | sex_age_range("female",B,L,U) <= female(B) & age_range(B,L,U) 294 | sex_age(MF,B,A) <= sex_age_range(MF,B,(A+1),A) 295 | 296 | indicator(B,'ART_OPENINGS_PRESSURE_ULCER') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & art_openings_pressure_ulcer(CC,CC2) 297 | indicator(B,'ASP_SPEC_BACT_PNEUM_PRES_ULC') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & asp_spec_bact_pneum_pres_ulc(CC,CC2) 298 | indicator(B,'CANCER_IMMUNE') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & cancer_immune(CC,CC2) 299 | indicator(B,'CHF_COPD') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & chf_copd(CC,CC2) 300 | indicator(B,'CHF_RENAL') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & chf_renal(CC,CC2) 301 | indicator(B,'COPD_ASP_SPEC_BACT_PNEUM') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & copd_asp_spec_bact_pneum(CC,CC2) 302 | indicator(B,'COPD_CARD_RESP_FAIL') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & copd_card_resp_fail(CC,CC2) 303 | indicator(B,'DIABETES_CHF') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & diabetes_chf(CC,CC2) 304 | indicator(B,'DISABLED_HCC110') <= ben_hcc(B,'110') & disabled(B) 305 | indicator(B,'DISABLED_HCC161') <= ben_hcc(B,'161') & disabled(B) 306 | indicator(B,'DISABLED_HCC176') <= ben_hcc(B,'176') & disabled(B) 307 | indicator(B,'DISABLED_HCC34') <= ben_hcc(B,'34') & disabled(B) 308 | indicator(B,'DISABLED_HCC39') <= ben_hcc(B,'39') & disabled(B) 309 | indicator(B,'DISABLED_HCC46') <= ben_hcc(B,'46') & disabled(B) 310 | indicator(B,'DISABLED_HCC54') <= ben_hcc(B,'54') & disabled(B) 311 | indicator(B,'DISABLED_HCC55') <= ben_hcc(B,'55') & disabled(B) 312 | indicator(B,'DISABLED_HCC6') <= ben_hcc(B,'6') & disabled(B) 313 | indicator(B,'DISABLED_HCC77') <= ben_hcc(B,'77') & disabled(B) 314 | indicator(B,'DISABLED_HCC85') <= ben_hcc(B,'85') & disabled(B) 315 | indicator(B,'DISABLED_PRESSURE_ULCER') <= ben_hcc(B,CC) & dc(CC,'pressure_ulcer') & disabled(B) 316 | indicator(B,'F0_34') <= sex_age_range('female',B,0,34) 317 | indicator(B,'F35_44') <= sex_age_range('female',B,35,44) 318 | indicator(B,'F45_54') <= sex_age_range('female',B,45,54) 319 | indicator(B,'F55_59') <= sex_age_range('female',B,55,59) 320 | indicator(B,'F60_64') <= sex_age_range('female',B,60,64) 321 | indicator(B,'F65_69') <= sex_age_range('female',B,65,69) 322 | indicator(B,'F70_74') <= sex_age_range('female',B,70,74) 323 | indicator(B,'F75_79') <= sex_age_range('female',B,75,79) 324 | indicator(B,'F80_84') <= sex_age_range('female',B,80,84) 325 | indicator(B,'F85_89') <= sex_age_range('female',B,85,89) 326 | indicator(B,'F90_94') <= sex_age_range('female',B,90,94) 327 | indicator(B,'F95_GT') <= sex_age_range('female',B,95,-1.0) 328 | hccees = [ 329 | '100', '103', '104', '106', '107', '108', '10', '110', '111', '112', '114', '115', 330 | '11', '122', '124', '12', '134', '135', '136', '137', '138', '139', '140', '141', 331 | '157', '158', '159', '160', '161', '162', '166', '167', '169', '170', '173', '176', 332 | '17', '186', '188', '189', '18', '19', '1', '21', '22', '23', '27', '28', '29', '2', 333 | '33', '34', '35', '39', '40', '46', '47', '48', '51', '52', '54', '55', '57', '58', 334 | '6', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '82', '83', 335 | '84', '85', '86', '87', '88', '8', '96', '99', '9'] 336 | for i in hccees: 337 | indicator(B,'HCC' + i ) <= ben_hcc(B,i) 338 | indicator(B,'M0_34') <= sex_age_range('male',B,0,34) 339 | indicator(B,'M35_44') <= sex_age_range('male',B,35,44) 340 | indicator(B,'M45_54') <= sex_age_range('male',B,45,54) 341 | indicator(B,'M55_59') <= sex_age_range('male',B,55,59) 342 | indicator(B,'M60_64') <= sex_age_range('male',B,60,64) 343 | indicator(B,'M65_69') <= sex_age_range('male',B,65,69) 344 | indicator(B,'M70_74') <= sex_age_range('male',B,70,74) 345 | indicator(B,'M75_79') <= sex_age_range('male',B,75,79) 346 | indicator(B,'M80_84') <= sex_age_range('male',B,80,84) 347 | indicator(B,'M85_89') <= sex_age_range('male',B,85,89) 348 | indicator(B,'M90_94') <= sex_age_range('male',B,90,94) 349 | indicator(B,'M95_GT') <= sex_age_range('male',B,95,-1.0) 350 | 351 | # THESE NEED TO CHANGE 352 | indicator(B,'MCAID_FEMALE0_64') <= medicaid(B) & sex_age_range('female',B,0,64) 353 | indicator(B,'MCAID_FEMALE65') <= medicaid(B) & sex_age('female',B,65) 354 | indicator(B,'MCAID_FEMALE66_69') <= medicaid(B) & sex_age_range('female',B,66,69) 355 | indicator(B,'MCAID_FEMALE70_74') <= medicaid(B) & sex_age_range('female',B,70,74) 356 | indicator(B,'MCAID_FEMALE75_GT') <= medicaid(B) & sex_age_range('female',B,75,-1.0) 357 | indicator(B,'MCAID_Female_Aged') <= medicaid(B) & ~disabled(B) & female(B) 358 | indicator(B,'MCAID_Female_Disabled') <= medicaid(B) & disabled(B) & female(B) 359 | indicator(B,'MCAID') <= medicaid(B) 360 | indicator(B,'MCAID_MALE0_64') <= medicaid(B) & sex_age_range('male',B,0,64) 361 | indicator(B,'MCAID_MALE65') <= medicaid(B) & sex_age('male',B,65) 362 | indicator(B,'MCAID_MALE66_69') <= medicaid(B) & sex_age_range('male',B,66,69) 363 | indicator(B,'MCAID_MALE70_74') <= medicaid(B) & sex_age_range('male',B,70,74) 364 | indicator(B,'MCAID_MALE75_GT') <= medicaid(B) & sex_age_range('male',B,75,-1.0) 365 | indicator(B,'MCAID_Male_Aged') <= medicaid(B) & ~disabled(B) & male(B) 366 | indicator(B,'MCAID_Male_Disabled') <= medicaid(B) & disabled(B) & male(B) 367 | # -- UNTIL HERE... need to add NEF65 indicator stuff instead of sex_age_range 368 | 369 | indicator(B,'NEM0_34') <= sex_age_range("male",B,0,34) 370 | indicator(B,'NEM35_44') <= sex_age_range("male",B,35,44) 371 | indicator(B,'NEM45_54') <= sex_age_range("male",B,45,54) 372 | indicator(B,'NEM55_59') <= sex_age_range("male",B,55,59) 373 | indicator(B,'NEM60_64') <= sex_age_range("male",B,60,63) 374 | # WHEN(&SEX='2' & &AGEF=64 & &OREC NE '0') NE_AGESEX = 5; 375 | # WHEN(&SEX='2' & &AGEF=64 & &OREC='0') NE_AGESEX = 6; 376 | indicator(B,'NEM60_64') <= sex_age("male",B,64) & ~(old_age_entitled(B)) 377 | indicator(B,'NEM65') <= sex_age("male",B,64) & old_age_entitled(B) 378 | indicator(B,'NEM65') <= sex_age("male",B,65) 379 | indicator(B,'NEM66') <= sex_age("male",B,66) 380 | indicator(B,'NEM67') <= sex_age("male",B,67) 381 | indicator(B,'NEM68') <= sex_age("male",B,68) 382 | indicator(B,'NEM69') <= sex_age("male",B,69) 383 | indicator(B,'NEM70_74') <= sex_age_range("male",B,70,74) 384 | indicator(B,'NEM75_79') <= sex_age_range("male",B,75,79) 385 | indicator(B,'NEM80_84') <= sex_age_range("male",B,80,84) 386 | indicator(B,'NEM85_89') <= sex_age_range("male",B,85,89) 387 | indicator(B,'NEM90_94') <= sex_age_range("male",B,90,94) 388 | indicator(B,'NEM95_GT') <= sex_age_range("male",B,95,-1.0) 389 | indicator(B,'NEF0_34') <= sex_age_range("female",B,0,34) 390 | indicator(B,'NEF35_44') <= sex_age_range("female",B,35,44) 391 | indicator(B,'NEF45_54') <= sex_age_range("female",B,45,54) 392 | indicator(B,'NEF55_59') <= sex_age_range("female",B,55,59) 393 | indicator(B,'NEF60_64') <= sex_age_range("female",B,60,63) 394 | # WHEN(&SEX='2' & &AGEF=64 & &OREC NE '0') NE_AGESEX = 5; 395 | # WHEN(&SEX='2' & &AGEF=64 & &OREC='0') NE_AGESEX = 6; 396 | indicator(B,'NEF60_64') <= sex_age("female",B,64) & ~(old_age_entitled(B)) 397 | indicator(B,'NEF65') <= sex_age("female",B,64) & old_age_entitled(B) 398 | indicator(B,'NEF65') <= sex_age("female",B,65) 399 | indicator(B,'NEF66') <= sex_age("female",B,66) 400 | indicator(B,'NEF67') <= sex_age("female",B,67) 401 | indicator(B,'NEF68') <= sex_age("female",B,68) 402 | indicator(B,'NEF69') <= sex_age("female",B,69) 403 | indicator(B,'NEF70_74') <= sex_age_range("female",B,70,74) 404 | indicator(B,'NEF75_79') <= sex_age_range("female",B,75,79) 405 | indicator(B,'NEF80_84') <= sex_age_range("female",B,80,84) 406 | indicator(B,'NEF85_89') <= sex_age_range("female",B,85,89) 407 | indicator(B,'NEF90_94') <= sex_age_range("female",B,90,94) 408 | indicator(B,'NEF95_GT') <= sex_age_range("female",B,95,-1.0) 409 | indicator(B,'Origdis_female65') <= originally_disabled(B) & indicator(B, 'NEF65') 410 | indicator(B,'Origdis_female66_69') <= originally_disabled(B) & indicator(B, 'NEF66') 411 | indicator(B,'Origdis_female66_69') <= originally_disabled(B) & indicator(B, 'NEF67') 412 | indicator(B,'Origdis_female66_69') <= originally_disabled(B) & indicator(B, 'NEF68') 413 | indicator(B,'Origdis_female66_69') <= originally_disabled(B) & indicator(B, 'NEF69') 414 | indicator(B,'Origdis_female70_74') <= originally_disabled(B) & indicator(B, 'NEF70_74') 415 | indicator(B,'Origdis_female75_GT') <= originally_disabled(B) & sex_age_range("female",B,74,-1.0) 416 | indicator(B,'Origdis_male65') <= originally_disabled(B) & indicator(B, 'NEM65') 417 | indicator(B,'Origdis_male66_69') <= originally_disabled(B) & indicator(B, 'NEM66') 418 | indicator(B,'Origdis_male66_69') <= originally_disabled(B) & indicator(B, 'NEM67') 419 | indicator(B,'Origdis_male66_69') <= originally_disabled(B) & indicator(B, 'NEM68') 420 | indicator(B,'Origdis_male66_69') <= originally_disabled(B) & indicator(B, 'NEM69') 421 | indicator(B,'Origdis_male70_74') <= originally_disabled(B) & indicator(B, 'NEM70_74') 422 | indicator(B,'Origdis_male75_GT') <= originally_disabled(B) & sex_age_range("male",B,74,-1.0) 423 | indicator(B,'ORIGDS') <= originally_disabled(B) 424 | indicator(B,'OriginallyDisabled_Female') <= originally_disabled(B) & female(B) 425 | indicator(B,'OriginallyDisabled_Male') <= originally_disabled(B) & male(B) 426 | indicator(B,'SCHIZOPHRENIA_CHF') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & schizophrenia_chf(CC,CC2) 427 | indicator(B,'SCHIZOPHRENIA_COPD') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & schizophrenia_copd(CC,CC2) 428 | indicator(B,'SCHIZOPHRENIA_SEIZURES') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & schizophrenia_seizures(CC,CC2) 429 | indicator(B,'SEPSIS_ARTIF_OPENINGS') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & sepsis_artif_openings(CC,CC2) 430 | indicator(B,'SEPSIS_ASP_SPEC_BACT_PNEUM') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & sepsis_asp_spec_bact_pneum(CC,CC2) 431 | indicator(B,'SEPSIS_CARD_RESP_FAIL') <= ben_hcc(B,CC) & ben_hcc(B,CC2) & sepsis_card_resp_fail(CC,CC2) 432 | 433 | # the following 3 lines are plain python 434 | cvars = community_regression() 435 | ivars = institutional_regression() 436 | nevars = new_enrollee_regression() 437 | allvars = list(set().union(cvars,ivars,nevars)) 438 | 439 | (valid_community_variables[B] == concat_(CC,key=CC,sep=',')) <= indicator(B,CC) & CC.in_(cvars) 440 | (valid_institutional_variables[B] == concat_(CC,key=CC,sep=',')) <= indicator(B,CC) & CC.in_(ivars) 441 | (valid_new_enrollee_variables[B] == concat_(CC,key=CC,sep=',')) <= indicator(B,CC) & CC.in_(nevars) 442 | 443 | (new_enrollee_score[B] == sum_(Coef,key=Coef)) <= indicator(B,CC) \ 444 | & CC.in_(nevars) & coefficient("NE_"+CC,Coef) 445 | (institutional_score[B] == sum_(Coef,key=Coef)) <= indicator(B,CC) \ 446 | & CC.in_(ivars) & coefficient("INS_"+CC,Coef) 447 | (community_score[B] == sum_(Coef,key=Coef)) <= indicator(B,CC) \ 448 | & CC.in_(cvars) & coefficient("CE_"+CC,Coef) 449 | 450 | score(B,"community",Score) <= (community_score[B] == Score) 451 | score(B,"institutional",Score) <= (institutional_score[B] == Score) 452 | score(B,"new_enrollee",Score) <= (new_enrollee_score[B] == Score) 453 | output(B,Col,Val) <= score(B,Col,Val) 454 | output(B,Col,0) <= Col.in_(allvars) & ~(indicator(B,Col)) 455 | output(B,Col,1) <= indicator(B,Col) 456 | output(B,"sex",Val) <= (Ben.sex[B]==Val) 457 | output(B,"age",Val) <= age(B,Val) 458 | 459 | 460 | load_facts() 461 | load_rules() 462 | 463 | 464 | #################################################### 465 | jane = Beneficiary(2,"female","19740824",EntitlementReason.DIB,True) 466 | jane.add_diagnosis(Diagnosis(jane,"D66",ICDType.TEN)) 467 | jane.add_diagnosis(Diagnosis(jane,"C182",ICDType.TEN)) 468 | 469 | daniel = Beneficiary(1,"male","19740824",EntitlementReason.DIB) 470 | daniel.add_diagnosis(Diagnosis(daniel,"A0223",ICDType.TEN)) # 51 471 | daniel.add_diagnosis(Diagnosis(daniel,"A0224",ICDType.TEN)) # 52 472 | daniel.add_diagnosis(Diagnosis(daniel,"D66",ICDType.TEN)) 473 | daniel.add_diagnosis(Diagnosis(daniel,"C163",ICDType.TEN)) 474 | daniel.add_diagnosis(Diagnosis(daniel,"C163",ICDType.TEN)) 475 | daniel.add_diagnosis(Diagnosis(daniel,"C182",ICDType.TEN)) 476 | daniel.add_diagnosis(Diagnosis(daniel,"C800",ICDType.TEN)) 477 | daniel.add_diagnosis(Diagnosis(daniel,"A072",ICDType.TEN)) 478 | 479 | bob = Beneficiary(3,"male","20040824",EntitlementReason.DIB,True) 480 | bob.add_diagnosis(Diagnosis(bob,"A0223",ICDType.TEN)) 481 | bob.add_diagnosis(Diagnosis(bob,"A0224",ICDType.TEN)) 482 | 483 | jacob = Beneficiary(4,"male","1940824",EntitlementReason.DIB,True) 484 | 485 | antonio = Beneficiary(3,"male","20040824",EntitlementReason.DIB,True) 486 | antonio.add_diagnosis(Diagnosis(antonio,"A0223",ICDType.TEN)) 487 | antonio.add_diagnosis(Diagnosis(antonio,"49320",ICDType.NINE)) 488 | 489 | john = Beneficiary(5,"male","19920824",EntitlementReason.DIB,True) 490 | john.add_diagnosis(Diagnosis(john,"A0223",ICDType.TEN)) 491 | john.add_diagnosis(Diagnosis(john,"49320",ICDType.NINE)) 492 | 493 | #################################################### 494 | -------------------------------------------------------------------------------- /icd9.txt: -------------------------------------------------------------------------------- 1 | 0031 2 2 | 00322 115 3 | 00323 39 4 | 00324 39 5 | 0064 115 6 | 0074 6 7 | 0202 2 8 | 0203 115 9 | 0204 115 10 | 0205 115 11 | 0212 115 12 | 0221 115 13 | 0223 2 14 | 0310 6 15 | 0312 6 16 | 03283 33 17 | 0362 2 18 | 0363 23 19 | 03682 39 20 | 0380 2 21 | 03810 2 22 | 03811 2 23 | 03812 2 24 | 03819 2 25 | 0382 2 26 | 0383 2 27 | 03840 2 28 | 03841 2 29 | 03842 2 30 | 03843 2 31 | 03844 2 32 | 03849 2 33 | 0388 2 34 | 0389 2 35 | 0391 115 36 | 0400 106 37 | 04082 2 38 | 042 1 39 | 0460 52 40 | 04611 52 41 | 04619 52 42 | 0462 52 43 | 0463 52 44 | 04671 52 45 | 04672 52 46 | 04679 52 47 | 0468 52 48 | 0469 52 49 | 0522 72 50 | 05314 72 51 | 0545 2 52 | 05474 72 53 | 05671 39 54 | 07022 29 55 | 07023 29 56 | 07032 29 57 | 07033 29 58 | 07044 29 59 | 07054 29 60 | 0785 6 61 | 0786 141 62 | 07953 1 63 | 09487 99 64 | 09850 39 65 | 09851 39 66 | 09852 39 67 | 09853 39 68 | 09859 39 69 | 09886 33 70 | 0993 40 71 | 1026 39 72 | 1124 6 73 | 1125 6 74 | 11284 6 75 | 1140 115 76 | 1144 115 77 | 1145 115 78 | 11505 115 79 | 11515 115 80 | 11595 115 81 | 1173 6 82 | 1175 6 83 | 1177 6 84 | 118 6 85 | 1212 115 86 | 1221 115 87 | 1300 6 88 | 1304 6 89 | 1308 6 90 | 135 112 91 | 1361 40 92 | 1363 6 93 | 1410 11 94 | 1411 11 95 | 1412 11 96 | 1413 11 97 | 1414 11 98 | 1415 11 99 | 1416 11 100 | 1418 11 101 | 1419 11 102 | 1420 11 103 | 1421 11 104 | 1422 11 105 | 1428 11 106 | 1429 11 107 | 1430 11 108 | 1431 11 109 | 1438 11 110 | 1439 11 111 | 1440 11 112 | 1441 11 113 | 1448 11 114 | 1449 11 115 | 1450 11 116 | 1451 11 117 | 1452 11 118 | 1453 11 119 | 1454 11 120 | 1455 11 121 | 1456 11 122 | 1458 11 123 | 1459 11 124 | 1460 11 125 | 1461 11 126 | 1462 11 127 | 1463 11 128 | 1464 11 129 | 1465 11 130 | 1466 11 131 | 1467 11 132 | 1468 11 133 | 1469 11 134 | 1470 11 135 | 1471 11 136 | 1472 11 137 | 1473 11 138 | 1478 11 139 | 1479 11 140 | 1480 11 141 | 1481 11 142 | 1482 11 143 | 1483 11 144 | 1488 11 145 | 1489 11 146 | 1490 11 147 | 1491 11 148 | 1498 11 149 | 1499 11 150 | 1500 9 151 | 1501 9 152 | 1502 9 153 | 1503 9 154 | 1504 9 155 | 1505 9 156 | 1508 9 157 | 1509 9 158 | 1510 9 159 | 1511 9 160 | 1512 9 161 | 1513 9 162 | 1514 9 163 | 1515 9 164 | 1516 9 165 | 1518 9 166 | 1519 9 167 | 1520 9 168 | 1521 9 169 | 1522 9 170 | 1523 9 171 | 1528 9 172 | 1529 9 173 | 1530 11 174 | 1531 11 175 | 1532 11 176 | 1533 11 177 | 1534 11 178 | 1535 11 179 | 1536 11 180 | 1537 11 181 | 1538 11 182 | 1539 11 183 | 1540 11 184 | 1541 11 185 | 1542 11 186 | 1543 11 187 | 1548 11 188 | 1550 9 189 | 1551 9 190 | 1552 9 191 | 1560 9 192 | 1561 9 193 | 1562 9 194 | 1568 9 195 | 1569 9 196 | 1570 9 197 | 1571 9 198 | 1572 9 199 | 1573 9 200 | 1574 9 201 | 1578 9 202 | 1579 9 203 | 1580 9 204 | 1588 9 205 | 1589 9 206 | 1590 11 207 | 1591 11 208 | 1598 11 209 | 1599 11 210 | 1600 11 211 | 1601 11 212 | 1602 11 213 | 1603 11 214 | 1604 11 215 | 1605 11 216 | 1608 11 217 | 1609 11 218 | 1610 11 219 | 1611 11 220 | 1612 11 221 | 1613 11 222 | 1618 11 223 | 1619 11 224 | 1620 9 225 | 1622 9 226 | 1623 9 227 | 1624 9 228 | 1625 9 229 | 1628 9 230 | 1629 9 231 | 1630 9 232 | 1631 9 233 | 1638 9 234 | 1639 9 235 | 1640 11 236 | 1641 11 237 | 1642 11 238 | 1643 11 239 | 1648 11 240 | 1649 11 241 | 1650 11 242 | 1658 11 243 | 1659 11 244 | 1700 10 245 | 1701 10 246 | 1702 10 247 | 1703 10 248 | 1704 10 249 | 1705 10 250 | 1706 10 251 | 1707 10 252 | 1708 10 253 | 1709 10 254 | 1710 10 255 | 1712 10 256 | 1713 10 257 | 1714 10 258 | 1715 10 259 | 1716 10 260 | 1717 10 261 | 1718 10 262 | 1719 10 263 | 1720 12 264 | 1721 12 265 | 1722 12 266 | 1723 12 267 | 1724 12 268 | 1725 12 269 | 1726 12 270 | 1727 12 271 | 1728 12 272 | 1729 12 273 | 1740 12 274 | 1741 12 275 | 1742 12 276 | 1743 12 277 | 1744 12 278 | 1745 12 279 | 1746 12 280 | 1748 12 281 | 1749 12 282 | 1750 12 283 | 1759 12 284 | 1760 10 285 | 1761 10 286 | 1762 10 287 | 1763 10 288 | 1764 10 289 | 1765 10 290 | 1768 10 291 | 1769 10 292 | 179 12 293 | 1800 11 294 | 1801 11 295 | 1808 11 296 | 1809 11 297 | 181 10 298 | 1820 12 299 | 1821 12 300 | 1828 12 301 | 1830 10 302 | 1832 10 303 | 1833 10 304 | 1834 10 305 | 1835 10 306 | 1838 10 307 | 1839 10 308 | 1840 11 309 | 1841 11 310 | 1842 11 311 | 1843 11 312 | 1844 11 313 | 1848 11 314 | 1849 11 315 | 185 12 316 | 1860 12 317 | 1869 12 318 | 1871 12 319 | 1872 12 320 | 1873 12 321 | 1874 12 322 | 1875 12 323 | 1876 12 324 | 1877 12 325 | 1878 12 326 | 1879 12 327 | 1880 11 328 | 1881 11 329 | 1882 11 330 | 1883 11 331 | 1884 11 332 | 1885 11 333 | 1886 11 334 | 1887 11 335 | 1888 11 336 | 1889 11 337 | 1890 11 338 | 1891 11 339 | 1892 11 340 | 1893 11 341 | 1894 11 342 | 1898 11 343 | 1899 11 344 | 1900 12 345 | 1901 12 346 | 1902 12 347 | 1903 12 348 | 1904 12 349 | 1905 12 350 | 1906 12 351 | 1907 12 352 | 1908 12 353 | 1909 12 354 | 1910 10 355 | 1911 10 356 | 1912 10 357 | 1913 10 358 | 1914 10 359 | 1915 10 360 | 1916 10 361 | 1917 10 362 | 1918 10 363 | 1919 10 364 | 1920 10 365 | 1921 10 366 | 1922 10 367 | 1923 10 368 | 1928 10 369 | 1929 10 370 | 193 12 371 | 1940 10 372 | 1941 12 373 | 1943 10 374 | 1944 10 375 | 1945 12 376 | 1946 12 377 | 1948 12 378 | 1949 12 379 | 1950 12 380 | 1951 12 381 | 1952 12 382 | 1953 12 383 | 1954 12 384 | 1955 12 385 | 1958 12 386 | 1960 8 387 | 1961 8 388 | 1962 8 389 | 1963 10 390 | 1965 8 391 | 1966 8 392 | 1968 8 393 | 1969 10 394 | 1970 8 395 | 1971 8 396 | 1972 8 397 | 1973 8 398 | 1974 8 399 | 1975 8 400 | 1976 8 401 | 1977 8 402 | 1978 8 403 | 1980 8 404 | 1981 8 405 | 1982 10 406 | 1983 8 407 | 1984 8 408 | 1985 8 409 | 1986 8 410 | 1987 8 411 | 19881 10 412 | 19882 10 413 | 19889 8 414 | 1990 8 415 | 1991 12 416 | 1992 12 417 | 20000 10 418 | 20001 10 419 | 20002 10 420 | 20003 10 421 | 20004 10 422 | 20005 10 423 | 20006 10 424 | 20007 10 425 | 20008 10 426 | 20010 10 427 | 20011 10 428 | 20012 10 429 | 20013 10 430 | 20014 10 431 | 20015 10 432 | 20016 10 433 | 20017 10 434 | 20018 10 435 | 20020 10 436 | 20021 10 437 | 20022 10 438 | 20023 10 439 | 20024 10 440 | 20025 10 441 | 20026 10 442 | 20027 10 443 | 20028 10 444 | 20030 10 445 | 20031 10 446 | 20032 10 447 | 20033 10 448 | 20034 10 449 | 20035 10 450 | 20036 10 451 | 20037 10 452 | 20038 10 453 | 20040 10 454 | 20041 10 455 | 20042 10 456 | 20043 10 457 | 20044 10 458 | 20045 10 459 | 20046 10 460 | 20047 10 461 | 20048 10 462 | 20050 10 463 | 20051 10 464 | 20052 10 465 | 20053 10 466 | 20054 10 467 | 20055 10 468 | 20056 10 469 | 20057 10 470 | 20058 10 471 | 20060 10 472 | 20061 10 473 | 20062 10 474 | 20063 10 475 | 20064 10 476 | 20065 10 477 | 20066 10 478 | 20067 10 479 | 20068 10 480 | 20070 10 481 | 20071 10 482 | 20072 10 483 | 20073 10 484 | 20074 10 485 | 20075 10 486 | 20076 10 487 | 20077 10 488 | 20078 10 489 | 20080 10 490 | 20081 10 491 | 20082 10 492 | 20083 10 493 | 20084 10 494 | 20085 10 495 | 20086 10 496 | 20087 10 497 | 20088 10 498 | 20100 10 499 | 20101 10 500 | 20102 10 501 | 20103 10 502 | 20104 10 503 | 20105 10 504 | 20106 10 505 | 20107 10 506 | 20108 10 507 | 20110 10 508 | 20111 10 509 | 20112 10 510 | 20113 10 511 | 20114 10 512 | 20115 10 513 | 20116 10 514 | 20117 10 515 | 20118 10 516 | 20120 10 517 | 20121 10 518 | 20122 10 519 | 20123 10 520 | 20124 10 521 | 20125 10 522 | 20126 10 523 | 20127 10 524 | 20128 10 525 | 20140 10 526 | 20141 10 527 | 20142 10 528 | 20143 10 529 | 20144 10 530 | 20145 10 531 | 20146 10 532 | 20147 10 533 | 20148 10 534 | 20150 10 535 | 20151 10 536 | 20152 10 537 | 20153 10 538 | 20154 10 539 | 20155 10 540 | 20156 10 541 | 20157 10 542 | 20158 10 543 | 20160 10 544 | 20161 10 545 | 20162 10 546 | 20163 10 547 | 20164 10 548 | 20165 10 549 | 20166 10 550 | 20167 10 551 | 20168 10 552 | 20170 10 553 | 20171 10 554 | 20172 10 555 | 20173 10 556 | 20174 10 557 | 20175 10 558 | 20176 10 559 | 20177 10 560 | 20178 10 561 | 20190 10 562 | 20191 10 563 | 20192 10 564 | 20193 10 565 | 20194 10 566 | 20195 10 567 | 20196 10 568 | 20197 10 569 | 20198 10 570 | 20200 10 571 | 20201 10 572 | 20202 10 573 | 20203 10 574 | 20204 10 575 | 20205 10 576 | 20206 10 577 | 20207 10 578 | 20208 10 579 | 20210 10 580 | 20211 10 581 | 20212 10 582 | 20213 10 583 | 20214 10 584 | 20215 10 585 | 20216 10 586 | 20217 10 587 | 20218 10 588 | 20220 10 589 | 20221 10 590 | 20222 10 591 | 20223 10 592 | 20224 10 593 | 20225 10 594 | 20226 10 595 | 20227 10 596 | 20228 10 597 | 20230 10 598 | 20231 10 599 | 20232 10 600 | 20233 10 601 | 20234 10 602 | 20235 10 603 | 20236 10 604 | 20237 10 605 | 20238 10 606 | 20240 10 607 | 20241 10 608 | 20242 10 609 | 20243 10 610 | 20244 10 611 | 20245 10 612 | 20246 10 613 | 20247 10 614 | 20248 10 615 | 20250 10 616 | 20251 10 617 | 20252 10 618 | 20253 10 619 | 20254 10 620 | 20255 10 621 | 20256 10 622 | 20257 10 623 | 20258 10 624 | 20260 10 625 | 20261 10 626 | 20262 10 627 | 20263 10 628 | 20264 10 629 | 20265 10 630 | 20266 10 631 | 20267 10 632 | 20268 10 633 | 20270 10 634 | 20271 10 635 | 20272 10 636 | 20273 10 637 | 20274 10 638 | 20275 10 639 | 20276 10 640 | 20277 10 641 | 20278 10 642 | 20280 10 643 | 20281 10 644 | 20282 10 645 | 20283 10 646 | 20284 10 647 | 20285 10 648 | 20286 10 649 | 20287 10 650 | 20288 10 651 | 20290 10 652 | 20291 10 653 | 20292 10 654 | 20293 10 655 | 20294 10 656 | 20295 10 657 | 20296 10 658 | 20297 10 659 | 20298 10 660 | 20300 9 661 | 20301 9 662 | 20302 9 663 | 20310 9 664 | 20311 9 665 | 20312 9 666 | 20380 9 667 | 20381 9 668 | 20382 9 669 | 20400 8 670 | 20401 8 671 | 20402 8 672 | 20410 10 673 | 20411 10 674 | 20412 10 675 | 20420 10 676 | 20421 10 677 | 20422 10 678 | 20480 10 679 | 20481 10 680 | 20482 10 681 | 20490 10 682 | 20491 10 683 | 20492 10 684 | 20500 8 685 | 20501 8 686 | 20502 8 687 | 20510 9 688 | 20511 9 689 | 20512 9 690 | 20520 9 691 | 20521 9 692 | 20522 9 693 | 20530 9 694 | 20531 9 695 | 20532 9 696 | 20580 9 697 | 20581 9 698 | 20582 9 699 | 20590 9 700 | 20591 9 701 | 20592 9 702 | 20600 8 703 | 20601 8 704 | 20602 8 705 | 20610 9 706 | 20611 9 707 | 20612 9 708 | 20620 9 709 | 20621 9 710 | 20622 9 711 | 20680 9 712 | 20681 9 713 | 20682 9 714 | 20690 9 715 | 20691 9 716 | 20692 9 717 | 20700 8 718 | 20701 8 719 | 20702 8 720 | 20710 9 721 | 20711 9 722 | 20712 9 723 | 20720 9 724 | 20721 9 725 | 20722 9 726 | 20780 9 727 | 20781 9 728 | 20782 9 729 | 20800 8 730 | 20801 8 731 | 20802 8 732 | 20810 10 733 | 20811 10 734 | 20812 10 735 | 20820 10 736 | 20821 10 737 | 20822 10 738 | 20880 10 739 | 20881 10 740 | 20882 10 741 | 20890 10 742 | 20891 10 743 | 20892 10 744 | 20900 12 745 | 20901 12 746 | 20902 12 747 | 20903 12 748 | 20910 12 749 | 20911 12 750 | 20912 12 751 | 20913 12 752 | 20914 12 753 | 20915 12 754 | 20916 12 755 | 20917 12 756 | 20920 12 757 | 20921 12 758 | 20922 12 759 | 20923 12 760 | 20924 12 761 | 20925 12 762 | 20926 12 763 | 20927 12 764 | 20929 12 765 | 20930 12 766 | 20931 12 767 | 20932 12 768 | 20933 12 769 | 20934 12 770 | 20935 12 771 | 20936 12 772 | 20970 8 773 | 20971 8 774 | 20972 8 775 | 20973 8 776 | 20974 8 777 | 20975 8 778 | 20979 8 779 | 2250 12 780 | 2251 12 781 | 2252 12 782 | 2253 12 783 | 2254 12 784 | 2258 12 785 | 2259 12 786 | 2273 12 787 | 2274 12 788 | 22802 12 789 | 2370 12 790 | 2371 12 791 | 2373 12 792 | 2375 12 793 | 2376 12 794 | 23770 12 795 | 23771 12 796 | 23772 12 797 | 23773 12 798 | 23779 12 799 | 2379 12 800 | 2384 48 801 | 23871 48 802 | 23872 46 803 | 23873 46 804 | 23874 46 805 | 23875 46 806 | 23876 46 807 | 23877 48 808 | 23879 48 809 | 2396 12 810 | 24900 19 811 | 24901 19 812 | 24910 17 813 | 24911 17 814 | 24920 17 815 | 24921 17 816 | 24930 17 817 | 24931 17 818 | 24940 18 819 | 24941 18 820 | 24950 18 821 | 24951 18 822 | 24960 18 823 | 24961 18 824 | 24970 18 825 | 24971 18 826 | 24980 18 827 | 24981 18 828 | 24990 18 829 | 24991 18 830 | 25000 19 831 | 25001 19 832 | 25002 19 833 | 25003 19 834 | 25010 17 835 | 25011 17 836 | 25012 17 837 | 25013 17 838 | 25020 17 839 | 25021 17 840 | 25022 17 841 | 25023 17 842 | 25030 17 843 | 25031 17 844 | 25032 17 845 | 25033 17 846 | 25040 18 847 | 25041 18 848 | 25042 18 849 | 25043 18 850 | 25050 18 851 | 25051 18 852 | 25052 18 853 | 25053 18 854 | 25060 18 855 | 25061 18 856 | 25062 18 857 | 25063 18 858 | 25070 18 859 | 25071 18 860 | 25072 18 861 | 25073 18 862 | 25080 18 863 | 25081 18 864 | 25082 18 865 | 25083 18 866 | 25090 18 867 | 25091 18 868 | 25092 18 869 | 25093 18 870 | 2510 23 871 | 25200 23 872 | 25201 23 873 | 25202 23 874 | 25208 23 875 | 2521 23 876 | 2528 23 877 | 2529 23 878 | 2530 23 879 | 2531 23 880 | 2532 23 881 | 2533 23 882 | 2534 23 883 | 2535 23 884 | 2536 23 885 | 2537 23 886 | 2538 23 887 | 2539 23 888 | 2540 23 889 | 2541 23 890 | 2548 23 891 | 2549 23 892 | 2550 23 893 | 25510 23 894 | 25511 23 895 | 25512 23 896 | 25513 23 897 | 25514 23 898 | 2552 23 899 | 2553 23 900 | 25541 23 901 | 25542 23 902 | 2555 23 903 | 2556 23 904 | 2558 23 905 | 2559 23 906 | 25801 23 907 | 25802 23 908 | 25803 23 909 | 2581 23 910 | 2588 23 911 | 2589 23 912 | 2592 12 913 | 260 21 914 | 261 21 915 | 262 21 916 | 2630 21 917 | 2631 21 918 | 2632 21 919 | 2638 21 920 | 2639 21 921 | 2700 23 922 | 2701 23 923 | 2702 23 924 | 2703 23 925 | 2704 23 926 | 2705 23 927 | 2706 23 928 | 2707 23 929 | 2708 23 930 | 2709 23 931 | 2710 23 932 | 2711 23 933 | 2714 23 934 | 2718 23 935 | 2719 23 936 | 2727 23 937 | 2732 23 938 | 2733 23 939 | 2734 23 940 | 27501 23 941 | 27700 110 942 | 27701 110 943 | 27702 110 944 | 27703 110 945 | 27709 110 946 | 2771 23 947 | 2772 23 948 | 27730 23 949 | 27731 23 950 | 27739 23 951 | 2775 23 952 | 2776 23 953 | 27781 23 954 | 27782 23 955 | 27783 23 956 | 27784 23 957 | 27785 23 958 | 27786 23 959 | 27787 23 960 | 27789 23 961 | 27801 22 962 | 27803 22 963 | 27900 47 964 | 27901 47 965 | 27902 47 966 | 27903 47 967 | 27904 47 968 | 27905 47 969 | 27906 47 970 | 27909 47 971 | 27910 47 972 | 27911 47 973 | 27912 47 974 | 27913 47 975 | 27919 47 976 | 2792 47 977 | 2793 47 978 | 27941 47 979 | 27949 47 980 | 27950 47 981 | 27951 47 982 | 27952 47 983 | 27953 47 984 | 2798 47 985 | 2799 47 986 | 2820 48 987 | 2821 48 988 | 2822 48 989 | 2823 48 990 | 28241 46 991 | 28242 46 992 | 28243 48 993 | 28244 48 994 | 28245 48 995 | 28247 48 996 | 28249 48 997 | 2825 48 998 | 28260 46 999 | 28261 46 1000 | 28262 46 1001 | 28263 46 1002 | 28264 46 1003 | 28268 46 1004 | 28269 46 1005 | 2827 48 1006 | 2828 48 1007 | 2829 48 1008 | 2830 46 1009 | 28310 46 1010 | 28311 46 1011 | 28319 46 1012 | 2832 46 1013 | 2839 46 1014 | 28401 46 1015 | 28409 46 1016 | 28411 47 1017 | 28412 47 1018 | 28419 47 1019 | 2842 46 1020 | 28481 46 1021 | 28489 46 1022 | 2849 46 1023 | 2850 48 1024 | 2860 46 1025 | 2861 46 1026 | 2862 48 1027 | 2863 48 1028 | 2864 48 1029 | 28652 48 1030 | 28653 48 1031 | 28659 48 1032 | 2866 48 1033 | 2867 48 1034 | 2869 48 1035 | 2870 48 1036 | 2871 48 1037 | 2872 48 1038 | 28730 48 1039 | 28731 48 1040 | 28732 48 1041 | 28733 48 1042 | 28739 48 1043 | 2875 48 1044 | 2878 48 1045 | 2879 48 1046 | 28800 47 1047 | 28801 47 1048 | 28802 47 1049 | 28803 47 1050 | 28804 47 1051 | 28809 47 1052 | 2881 47 1053 | 2882 47 1054 | 2884 47 1055 | 28952 46 1056 | 28981 48 1057 | 28982 48 1058 | 28983 46 1059 | 28984 48 1060 | 2900 52 1061 | 29010 52 1062 | 29011 51 1063 | 29012 51 1064 | 29013 51 1065 | 29020 51 1066 | 29021 51 1067 | 2903 51 1068 | 29040 52 1069 | 29041 51 1070 | 29042 51 1071 | 29043 51 1072 | 2908 52 1073 | 2909 52 1074 | 2910 54 1075 | 2911 54 1076 | 2912 54 1077 | 2913 54 1078 | 2914 54 1079 | 2915 54 1080 | 29181 54 1081 | 29182 54 1082 | 29189 54 1083 | 2919 54 1084 | 2920 54 1085 | 29211 54 1086 | 29212 54 1087 | 2922 54 1088 | 29281 54 1089 | 29282 54 1090 | 29283 54 1091 | 29284 54 1092 | 29285 54 1093 | 29289 54 1094 | 2929 54 1095 | 2940 52 1096 | 29410 52 1097 | 29411 51 1098 | 29420 52 1099 | 29421 51 1100 | 2948 52 1101 | 2949 52 1102 | 29500 57 1103 | 29501 57 1104 | 29502 57 1105 | 29503 57 1106 | 29504 57 1107 | 29505 57 1108 | 29510 57 1109 | 29511 57 1110 | 29512 57 1111 | 29513 57 1112 | 29514 57 1113 | 29515 57 1114 | 29520 57 1115 | 29521 57 1116 | 29522 57 1117 | 29523 57 1118 | 29524 57 1119 | 29525 57 1120 | 29530 57 1121 | 29531 57 1122 | 29532 57 1123 | 29533 57 1124 | 29534 57 1125 | 29535 57 1126 | 29540 57 1127 | 29541 57 1128 | 29542 57 1129 | 29543 57 1130 | 29544 57 1131 | 29545 57 1132 | 29550 57 1133 | 29551 57 1134 | 29552 57 1135 | 29553 57 1136 | 29554 57 1137 | 29555 57 1138 | 29560 57 1139 | 29561 57 1140 | 29562 57 1141 | 29563 57 1142 | 29564 57 1143 | 29565 57 1144 | 29570 57 1145 | 29571 57 1146 | 29572 57 1147 | 29573 57 1148 | 29574 57 1149 | 29575 57 1150 | 29580 57 1151 | 29581 57 1152 | 29582 57 1153 | 29583 57 1154 | 29584 57 1155 | 29585 57 1156 | 29590 57 1157 | 29591 57 1158 | 29592 57 1159 | 29593 57 1160 | 29594 57 1161 | 29595 57 1162 | 29600 58 1163 | 29601 58 1164 | 29602 58 1165 | 29603 58 1166 | 29604 58 1167 | 29605 58 1168 | 29606 58 1169 | 29610 58 1170 | 29611 58 1171 | 29612 58 1172 | 29613 58 1173 | 29614 58 1174 | 29615 58 1175 | 29616 58 1176 | 29620 58 1177 | 29621 58 1178 | 29622 58 1179 | 29623 58 1180 | 29624 58 1181 | 29625 58 1182 | 29626 58 1183 | 29630 58 1184 | 29631 58 1185 | 29632 58 1186 | 29633 58 1187 | 29634 58 1188 | 29635 58 1189 | 29636 58 1190 | 29640 58 1191 | 29641 58 1192 | 29642 58 1193 | 29643 58 1194 | 29644 58 1195 | 29645 58 1196 | 29646 58 1197 | 29650 58 1198 | 29651 58 1199 | 29652 58 1200 | 29653 58 1201 | 29654 58 1202 | 29655 58 1203 | 29656 58 1204 | 29660 58 1205 | 29661 58 1206 | 29662 58 1207 | 29663 58 1208 | 29664 58 1209 | 29665 58 1210 | 29666 58 1211 | 2967 58 1212 | 29680 58 1213 | 29681 58 1214 | 29682 58 1215 | 29689 58 1216 | 29690 58 1217 | 29699 58 1218 | 2970 58 1219 | 2971 58 1220 | 2972 58 1221 | 2973 58 1222 | 2978 58 1223 | 2979 58 1224 | 30300 55 1225 | 30301 55 1226 | 30302 55 1227 | 30303 55 1228 | 30390 55 1229 | 30391 55 1230 | 30392 55 1231 | 30393 55 1232 | 30400 55 1233 | 30401 55 1234 | 30402 55 1235 | 30403 55 1236 | 30410 55 1237 | 30411 55 1238 | 30412 55 1239 | 30413 55 1240 | 30420 55 1241 | 30421 55 1242 | 30422 55 1243 | 30423 55 1244 | 30430 55 1245 | 30431 55 1246 | 30432 55 1247 | 30433 55 1248 | 30440 55 1249 | 30441 55 1250 | 30442 55 1251 | 30443 55 1252 | 30450 55 1253 | 30451 55 1254 | 30452 55 1255 | 30453 55 1256 | 30460 55 1257 | 30461 55 1258 | 30462 55 1259 | 30463 55 1260 | 30470 55 1261 | 30471 55 1262 | 30472 55 1263 | 30473 55 1264 | 30480 55 1265 | 30481 55 1266 | 30482 55 1267 | 30483 55 1268 | 30490 55 1269 | 30491 55 1270 | 30492 55 1271 | 30493 55 1272 | 3210 6 1273 | 32302 72 1274 | 32342 72 1275 | 32352 72 1276 | 32363 72 1277 | 32372 72 1278 | 32382 72 1279 | 3300 52 1280 | 3301 52 1281 | 3302 52 1282 | 3303 52 1283 | 3308 52 1284 | 3309 52 1285 | 3310 52 1286 | 33111 52 1287 | 33119 52 1288 | 3312 52 1289 | 3313 51 1290 | 3314 51 1291 | 3315 51 1292 | 3316 52 1293 | 3317 52 1294 | 33181 52 1295 | 33182 52 1296 | 33189 52 1297 | 3319 52 1298 | 3320 78 1299 | 3321 78 1300 | 3330 78 1301 | 3334 78 1302 | 33371 74 1303 | 3340 72 1304 | 3341 72 1305 | 3342 72 1306 | 3343 72 1307 | 3344 72 1308 | 3348 72 1309 | 3349 72 1310 | 3350 72 1311 | 33510 72 1312 | 33511 72 1313 | 33519 72 1314 | 33520 73 1315 | 33521 73 1316 | 33522 73 1317 | 33523 73 1318 | 33524 73 1319 | 33529 73 1320 | 3358 72 1321 | 3359 72 1322 | 3360 72 1323 | 3361 72 1324 | 3362 72 1325 | 3363 72 1326 | 3368 72 1327 | 3369 72 1328 | 33700 75 1329 | 33701 75 1330 | 33709 75 1331 | 3371 75 1332 | 33720 75 1333 | 33721 75 1334 | 33722 75 1335 | 33729 75 1336 | 3373 75 1337 | 3379 75 1338 | 340 77 1339 | 3410 77 1340 | 3411 77 1341 | 34120 72 1342 | 34121 72 1343 | 34122 72 1344 | 3418 77 1345 | 3419 77 1346 | 34200 103 1347 | 34201 103 1348 | 34202 103 1349 | 34210 103 1350 | 34211 103 1351 | 34212 103 1352 | 34280 103 1353 | 34281 103 1354 | 34282 103 1355 | 34290 103 1356 | 34291 103 1357 | 34292 103 1358 | 3430 74 1359 | 3431 74 1360 | 3432 74 1361 | 3433 74 1362 | 3434 74 1363 | 3438 74 1364 | 3439 74 1365 | 34400 70 1366 | 34401 70 1367 | 34402 70 1368 | 34403 70 1369 | 34404 70 1370 | 34409 70 1371 | 3441 71 1372 | 3442 104 1373 | 34430 104 1374 | 34431 104 1375 | 34432 104 1376 | 34440 104 1377 | 34441 104 1378 | 34442 104 1379 | 3445 104 1380 | 34460 72 1381 | 34461 72 1382 | 34481 104 1383 | 34489 104 1384 | 3449 104 1385 | 34500 79 1386 | 34501 79 1387 | 34510 79 1388 | 34511 79 1389 | 3452 79 1390 | 3453 79 1391 | 34540 79 1392 | 34541 79 1393 | 34550 79 1394 | 34551 79 1395 | 34560 79 1396 | 34561 79 1397 | 34570 79 1398 | 34571 79 1399 | 34580 79 1400 | 34581 79 1401 | 34590 79 1402 | 34591 79 1403 | 3481 80 1404 | 3484 80 1405 | 3485 80 1406 | 3491 176 1407 | 3536 189 1408 | 3560 75 1409 | 3561 75 1410 | 3562 75 1411 | 3563 75 1412 | 3564 75 1413 | 3568 75 1414 | 3569 75 1415 | 3570 75 1416 | 3571 75 1417 | 3572 18 1418 | 3572 75 D 1419 | 3573 75 1420 | 3574 75 1421 | 3575 75 1422 | 3576 75 1423 | 3577 75 1424 | 35781 75 1425 | 35782 75 1426 | 35789 75 1427 | 3579 75 1428 | 35800 75 1429 | 35801 75 1430 | 3581 75 1431 | 3582 75 1432 | 35830 75 1433 | 35831 75 1434 | 35839 75 1435 | 3588 75 1436 | 3589 75 1437 | 3590 76 1438 | 3591 76 1439 | 35921 76 1440 | 35922 75 1441 | 35923 75 1442 | 35924 75 1443 | 35929 75 1444 | 3593 75 1445 | 3594 75 1446 | 3595 75 1447 | 3596 75 1448 | 35971 75 1449 | 35979 75 1450 | 35981 75 1451 | 35989 75 1452 | 3599 75 1453 | 36201 18 1454 | 36202 18 D 1455 | 36202 122 1456 | 36203 18 1457 | 36204 18 1458 | 36205 18 1459 | 36206 18 1460 | 36207 18 1461 | 36252 124 1462 | 36641 18 1463 | 37923 122 1464 | 39891 85 1465 | 40201 85 1466 | 40211 85 1467 | 40291 85 1468 | 40300 139 1469 | 40301 136 1470 | 40310 139 1471 | 40311 136 1472 | 40390 139 1473 | 40391 136 1474 | 40400 139 1475 | 40401 85 1476 | 40401 139 D 1477 | 40402 136 1478 | 40403 85 D 1479 | 40403 136 1480 | 40410 139 1481 | 40411 85 1482 | 40411 139 D 1483 | 40412 136 1484 | 40413 85 D 1485 | 40413 136 1486 | 40490 139 1487 | 40491 85 1488 | 40491 139 D 1489 | 40492 136 1490 | 40493 85 D 1491 | 40493 136 1492 | 41000 87 1493 | 41001 86 1494 | 41002 87 1495 | 41010 87 1496 | 41011 86 1497 | 41012 87 1498 | 41020 87 1499 | 41021 86 1500 | 41022 87 1501 | 41030 87 1502 | 41031 86 1503 | 41032 87 1504 | 41040 87 1505 | 41041 86 1506 | 41042 87 1507 | 41050 87 1508 | 41051 86 1509 | 41052 87 1510 | 41060 87 1511 | 41061 86 1512 | 41062 87 1513 | 41070 87 1514 | 41071 86 1515 | 41072 87 1516 | 41080 87 1517 | 41081 86 1518 | 41082 87 1519 | 41090 87 1520 | 41091 86 1521 | 41092 87 1522 | 4110 87 1523 | 4111 87 1524 | 41181 87 1525 | 41189 87 1526 | 4130 88 1527 | 4131 88 1528 | 4139 88 1529 | 4150 85 1530 | 41511 107 1531 | 41512 107 1532 | 41513 107 1533 | 41519 107 1534 | 4160 85 1535 | 4161 85 1536 | 4162 107 1537 | 4168 85 1538 | 4169 85 1539 | 4170 85 1540 | 4171 85 1541 | 4178 85 1542 | 4179 85 1543 | 4250 85 1544 | 42511 85 1545 | 42518 85 1546 | 4252 85 1547 | 4253 85 1548 | 4254 85 1549 | 4255 85 1550 | 4257 85 1551 | 4258 85 1552 | 4259 85 1553 | 4260 96 1554 | 4270 96 1555 | 4271 96 1556 | 4272 96 1557 | 42731 96 1558 | 42732 96 1559 | 42741 84 1560 | 42742 84 1561 | 4275 84 1562 | 42781 96 1563 | 4280 85 1564 | 4281 85 1565 | 42820 85 1566 | 42821 85 1567 | 42822 85 1568 | 42823 85 1569 | 42830 85 1570 | 42831 85 1571 | 42832 85 1572 | 42833 85 1573 | 42840 85 1574 | 42841 85 1575 | 42842 85 1576 | 42843 85 1577 | 4289 85 1578 | 4290 85 1579 | 4291 85 1580 | 4295 86 1581 | 4296 86 1582 | 430 99 1583 | 431 99 1584 | 4320 99 1585 | 4321 99 1586 | 4329 99 1587 | 43301 100 1588 | 43311 100 1589 | 43321 100 1590 | 43331 100 1591 | 43381 100 1592 | 43391 100 1593 | 43401 100 1594 | 43411 100 1595 | 43491 100 1596 | 436 100 1597 | 43820 103 1598 | 43821 103 1599 | 43822 103 1600 | 43830 104 1601 | 43831 104 1602 | 43832 104 1603 | 43840 104 1604 | 43841 104 1605 | 43842 104 1606 | 43850 104 1607 | 43851 104 1608 | 43852 104 1609 | 43853 104 1610 | 4400 108 1611 | 4401 108 1612 | 44020 108 1613 | 44021 108 1614 | 44022 108 1615 | 44023 106 1616 | 44024 106 1617 | 44029 108 1618 | 44030 108 1619 | 44031 108 1620 | 44032 108 1621 | 4404 108 1622 | 44100 107 1623 | 44101 107 1624 | 44102 107 1625 | 44103 107 1626 | 4411 107 1627 | 4412 108 1628 | 4413 107 1629 | 4414 108 1630 | 4415 107 1631 | 4416 107 1632 | 4417 108 1633 | 4419 108 1634 | 4420 108 1635 | 4421 108 1636 | 4422 108 1637 | 4423 108 1638 | 44281 108 1639 | 44282 108 1640 | 44283 108 1641 | 44284 108 1642 | 44289 108 1643 | 4429 108 1644 | 4431 108 1645 | 44321 107 1646 | 44322 107 1647 | 44323 107 1648 | 44324 107 1649 | 44329 107 1650 | 44381 108 1651 | 44382 108 1652 | 44389 108 1653 | 4439 108 1654 | 44401 107 1655 | 44409 107 1656 | 4441 107 1657 | 44421 107 1658 | 44422 107 1659 | 44481 107 1660 | 44489 107 1661 | 4449 107 1662 | 44501 107 1663 | 44502 107 1664 | 44581 107 1665 | 44589 107 1666 | 4460 40 1667 | 4461 40 1668 | 44620 40 1669 | 44621 40 1670 | 44629 40 1671 | 4463 40 1672 | 4464 40 1673 | 4465 40 1674 | 4466 40 1675 | 4467 40 1676 | 4470 108 1677 | 4471 108 1678 | 4472 108 1679 | 4473 108 1680 | 4474 108 1681 | 4475 108 1682 | 4476 108 1683 | 44770 108 1684 | 44771 108 1685 | 44772 108 1686 | 44773 108 1687 | 4478 108 1688 | 4479 108 1689 | 4480 108 1690 | 449 107 1691 | 45111 108 1692 | 45119 108 1693 | 45181 108 1694 | 45183 108 1695 | 4530 108 1696 | 4532 108 1697 | 4533 108 1698 | 45340 108 1699 | 45341 108 1700 | 45342 108 1701 | 45350 108 1702 | 45351 108 1703 | 45352 108 1704 | 45372 108 1705 | 45374 108 1706 | 45375 108 1707 | 45376 108 1708 | 45377 108 1709 | 45382 108 1710 | 45384 108 1711 | 45385 108 1712 | 45386 108 1713 | 45387 108 1714 | 4540 107 1715 | 4542 107 1716 | 4560 27 1717 | 4561 27 1718 | 45620 27 1719 | 45621 27 1720 | 45911 107 1721 | 45913 107 1722 | 45931 107 1723 | 45933 107 1724 | 481 115 1725 | 4820 114 1726 | 4821 114 1727 | 4822 115 1728 | 48230 115 1729 | 48231 115 1730 | 48232 115 1731 | 48239 115 1732 | 48240 114 1733 | 48241 114 1734 | 48242 114 1735 | 48249 114 1736 | 48281 114 1737 | 48282 114 1738 | 48283 114 1739 | 48284 114 1740 | 48289 114 1741 | 4841 6 1742 | 4846 6 1743 | 4847 115 1744 | 4910 111 1745 | 4911 111 1746 | 49120 111 1747 | 49121 111 1748 | 49122 111 1749 | 4918 111 1750 | 4919 111 1751 | 4920 111 1752 | 4928 111 1753 | 49320 111 1754 | 49321 111 1755 | 49322 111 1756 | 4940 112 1757 | 4941 112 1758 | 4950 112 1759 | 4951 112 1760 | 4952 112 1761 | 4953 112 1762 | 4954 112 1763 | 4955 112 1764 | 4956 112 1765 | 4957 112 1766 | 4958 112 1767 | 4959 112 1768 | 496 111 1769 | 500 112 1770 | 501 112 1771 | 502 112 1772 | 503 112 1773 | 504 112 1774 | 505 112 1775 | 5060 112 1776 | 5061 112 1777 | 5062 112 1778 | 5063 112 1779 | 5064 112 1780 | 5069 112 1781 | 5070 114 1782 | 5071 114 1783 | 5078 114 1784 | 5080 112 1785 | 5081 112 1786 | 5082 112 1787 | 5088 112 1788 | 5089 112 1789 | 5100 115 1790 | 5109 115 1791 | 5130 115 1792 | 5131 115 1793 | 515 112 1794 | 5160 112 1795 | 5161 112 1796 | 5162 112 1797 | 51630 112 1798 | 51631 112 1799 | 51632 112 1800 | 51633 112 1801 | 51634 112 1802 | 51635 112 1803 | 51636 112 1804 | 51637 112 1805 | 5164 112 1806 | 5165 112 1807 | 51661 112 1808 | 51662 112 1809 | 51663 112 1810 | 51664 112 1811 | 51669 112 1812 | 5168 112 1813 | 5169 112 1814 | 5171 112 1815 | 5172 112 1816 | 5173 46 1817 | 5178 112 1818 | 5181 111 1819 | 5182 111 1820 | 5183 112 1821 | 5184 84 1822 | 51851 84 1823 | 51852 84 1824 | 51853 84 1825 | 5186 112 1826 | 51881 84 1827 | 51882 84 1828 | 51883 84 1829 | 51884 84 1830 | 51900 82 1831 | 51901 82 1832 | 51902 82 1833 | 51909 82 1834 | 53086 188 1835 | 53087 188 1836 | 53110 33 1837 | 53111 33 1838 | 53120 33 1839 | 53121 33 1840 | 53150 33 1841 | 53151 33 1842 | 53160 33 1843 | 53161 33 1844 | 53210 33 1845 | 53211 33 1846 | 53220 33 1847 | 53221 33 1848 | 53250 33 1849 | 53251 33 1850 | 53260 33 1851 | 53261 33 1852 | 53310 33 1853 | 53311 33 1854 | 53320 33 1855 | 53321 33 1856 | 53350 33 1857 | 53351 33 1858 | 53360 33 1859 | 53361 33 1860 | 53410 33 1861 | 53411 33 1862 | 53420 33 1863 | 53421 33 1864 | 53450 33 1865 | 53451 33 1866 | 53460 33 1867 | 53461 33 1868 | 53640 188 1869 | 53641 188 1870 | 53642 188 1871 | 53649 188 1872 | 5550 35 1873 | 5551 35 1874 | 5552 35 1875 | 5559 35 1876 | 5560 35 1877 | 5561 35 1878 | 5562 35 1879 | 5563 35 1880 | 5564 35 1881 | 5565 35 1882 | 5566 35 1883 | 5568 35 1884 | 5569 35 1885 | 5570 107 1886 | 5571 108 1887 | 5579 108 1888 | 5600 33 1889 | 5601 33 1890 | 5602 33 1891 | 56030 33 1892 | 56031 33 1893 | 56032 33 1894 | 56039 33 1895 | 56081 33 1896 | 56089 33 1897 | 5609 33 1898 | 5670 33 1899 | 5671 33 1900 | 56721 33 1901 | 56722 33 1902 | 56723 33 1903 | 56729 33 1904 | 56731 33 1905 | 56738 33 1906 | 56739 33 1907 | 56781 33 1908 | 56782 33 1909 | 56789 33 1910 | 5679 33 1911 | 56960 188 1912 | 56961 188 1913 | 56962 188 1914 | 56969 188 1915 | 56971 188 1916 | 56979 188 1917 | 56983 33 1918 | 5712 28 1919 | 5713 28 1920 | 57140 29 1921 | 57141 29 1922 | 57142 29 1923 | 57149 29 1924 | 5715 28 1925 | 5716 28 1926 | 5722 27 1927 | 5723 27 1928 | 5724 27 1929 | 5728 27 1930 | 5735 27 1931 | 5771 34 1932 | 5800 141 1933 | 5804 141 1934 | 58081 141 1935 | 58089 141 1936 | 5809 141 1937 | 5810 141 1938 | 5811 141 1939 | 5812 141 1940 | 5813 141 1941 | 58181 141 1942 | 58189 141 1943 | 5819 141 1944 | 5820 141 1945 | 5821 141 1946 | 5822 141 1947 | 5824 141 1948 | 58281 141 1949 | 58289 141 1950 | 5829 141 1951 | 5830 141 1952 | 5831 141 1953 | 5832 141 1954 | 5834 141 1955 | 5836 141 1956 | 5837 141 1957 | 58381 141 1958 | 58389 141 1959 | 5839 141 1960 | 5845 135 1961 | 5846 135 1962 | 5847 135 1963 | 5848 135 1964 | 5849 135 1965 | 5851 139 1966 | 5852 139 1967 | 5853 138 1968 | 5854 137 1969 | 5855 136 1970 | 5856 136 1971 | 5859 139 1972 | 586 140 1973 | 5881 23 1974 | 58881 23 1975 | 59381 107 1976 | 59681 176 1977 | 59682 176 1978 | 59683 176 1979 | 62931 176 1980 | 69513 162 1981 | 69514 162 1982 | 69515 162 1983 | 6960 40 1984 | 70700 160 1985 | 70701 160 1986 | 70702 160 1987 | 70703 160 1988 | 70704 160 1989 | 70705 160 1990 | 70706 160 1991 | 70707 160 1992 | 70709 160 1993 | 70710 161 1994 | 70711 161 1995 | 70712 161 1996 | 70713 161 1997 | 70714 161 1998 | 70715 161 1999 | 70719 161 2000 | 70720 160 2001 | 70721 160 2002 | 70722 159 2003 | 70723 158 2004 | 70724 157 2005 | 70725 158 2006 | 7078 161 2007 | 7079 161 2008 | 7100 40 2009 | 7101 40 2010 | 7102 40 2011 | 7103 40 2012 | 7104 40 2013 | 7105 40 2014 | 7108 40 2015 | 7109 40 2016 | 71100 39 2017 | 71101 39 2018 | 71102 39 2019 | 71103 39 2020 | 71104 39 2021 | 71105 39 2022 | 71106 39 2023 | 71107 39 2024 | 71108 39 2025 | 71109 39 2026 | 71110 40 2027 | 71111 40 2028 | 71112 40 2029 | 71113 40 2030 | 71114 40 2031 | 71115 40 2032 | 71116 40 2033 | 71117 40 2034 | 71118 40 2035 | 71119 40 2036 | 71120 40 2037 | 71121 40 2038 | 71122 40 2039 | 71123 40 2040 | 71124 40 2041 | 71125 40 2042 | 71126 40 2043 | 71127 40 2044 | 71128 40 2045 | 71129 40 2046 | 71130 39 2047 | 71131 39 2048 | 71132 39 2049 | 71133 39 2050 | 71134 39 2051 | 71135 39 2052 | 71136 39 2053 | 71137 39 2054 | 71138 39 2055 | 71139 39 2056 | 71140 39 2057 | 71141 39 2058 | 71142 39 2059 | 71143 39 2060 | 71144 39 2061 | 71145 39 2062 | 71146 39 2063 | 71147 39 2064 | 71148 39 2065 | 71149 39 2066 | 71150 39 2067 | 71151 39 2068 | 71152 39 2069 | 71153 39 2070 | 71154 39 2071 | 71155 39 2072 | 71156 39 2073 | 71157 39 2074 | 71158 39 2075 | 71159 39 2076 | 71160 39 2077 | 71161 39 2078 | 71162 39 2079 | 71163 39 2080 | 71164 39 2081 | 71165 39 2082 | 71166 39 2083 | 71167 39 2084 | 71168 39 2085 | 71169 39 2086 | 71170 39 2087 | 71171 39 2088 | 71172 39 2089 | 71173 39 2090 | 71174 39 2091 | 71175 39 2092 | 71176 39 2093 | 71177 39 2094 | 71178 39 2095 | 71179 39 2096 | 71180 39 2097 | 71181 39 2098 | 71182 39 2099 | 71183 39 2100 | 71184 39 2101 | 71185 39 2102 | 71186 39 2103 | 71187 39 2104 | 71188 39 2105 | 71189 39 2106 | 71190 39 2107 | 71191 39 2108 | 71192 39 2109 | 71193 39 2110 | 71194 39 2111 | 71195 39 2112 | 71196 39 2113 | 71197 39 2114 | 71198 39 2115 | 71199 39 2116 | 7140 40 2117 | 7141 40 2118 | 7142 40 2119 | 71430 40 2120 | 71431 40 2121 | 71432 40 2122 | 71433 40 2123 | 7144 40 2124 | 71481 40 2125 | 71489 40 2126 | 7149 40 2127 | 7200 40 2128 | 7201 40 2129 | 7202 40 2130 | 72081 40 2131 | 72089 40 2132 | 7209 40 2133 | 725 40 2134 | 72886 39 2135 | 73000 39 2136 | 73001 39 2137 | 73002 39 2138 | 73003 39 2139 | 73004 39 2140 | 73005 39 2141 | 73006 39 2142 | 73007 39 2143 | 73008 39 2144 | 73009 39 2145 | 73010 39 2146 | 73011 39 2147 | 73012 39 2148 | 73013 39 2149 | 73014 39 2150 | 73015 39 2151 | 73016 39 2152 | 73017 39 2153 | 73018 39 2154 | 73019 39 2155 | 73020 39 2156 | 73021 39 2157 | 73022 39 2158 | 73023 39 2159 | 73024 39 2160 | 73025 39 2161 | 73026 39 2162 | 73027 39 2163 | 73028 39 2164 | 73029 39 2165 | 73030 39 2166 | 73031 39 2167 | 73032 39 2168 | 73033 39 2169 | 73034 39 2170 | 73035 39 2171 | 73036 39 2172 | 73037 39 2173 | 73038 39 2174 | 73039 39 2175 | 73070 39 2176 | 73071 39 2177 | 73072 39 2178 | 73073 39 2179 | 73074 39 2180 | 73075 39 2181 | 73076 39 2182 | 73077 39 2183 | 73078 39 2184 | 73079 39 2185 | 73080 39 2186 | 73081 39 2187 | 73082 39 2188 | 73083 39 2189 | 73084 39 2190 | 73085 39 2191 | 73086 39 2192 | 73087 39 2193 | 73088 39 2194 | 73089 39 2195 | 73090 39 2196 | 73091 39 2197 | 73092 39 2198 | 73093 39 2199 | 73094 39 2200 | 73095 39 2201 | 73096 39 2202 | 73097 39 2203 | 73098 39 2204 | 73099 39 2205 | 73313 169 2206 | 73314 170 2207 | 73315 170 2208 | 73340 39 2209 | 73341 39 2210 | 73342 39 2211 | 73343 39 2212 | 73344 39 2213 | 73345 39 2214 | 73349 39 2215 | 7400 72 2216 | 7401 72 2217 | 7402 72 2218 | 74100 72 2219 | 74101 72 2220 | 74102 72 2221 | 74103 72 2222 | 74190 72 2223 | 74191 72 2224 | 74192 72 2225 | 74193 72 2226 | 7420 72 2227 | 7421 72 2228 | 7422 72 2229 | 7423 72 2230 | 7424 72 2231 | 74251 72 2232 | 74253 72 2233 | 74259 72 2234 | 7428 72 2235 | 7429 72 2236 | 75314 139 2237 | 7595 12 2238 | 7596 12 2239 | 77181 2 2240 | 78001 80 2241 | 78003 80 2242 | 78031 79 2243 | 78032 79 2244 | 78033 79 2245 | 78039 79 2246 | 78072 70 2247 | 7854 106 2248 | 78550 84 2249 | 78551 84 2250 | 78552 2 2251 | 78559 2 2252 | 7980 84 2253 | 7981 84 2254 | 7982 84 2255 | 7989 84 2256 | 7991 83 2257 | 7994 21 2258 | 80000 167 2259 | 80001 167 2260 | 80002 167 2261 | 80003 166 2262 | 80004 166 2263 | 80005 166 2264 | 80006 167 2265 | 80009 167 2266 | 80010 167 2267 | 80011 167 2268 | 80012 167 2269 | 80013 166 2270 | 80014 166 2271 | 80015 166 2272 | 80016 167 2273 | 80019 167 2274 | 80020 167 2275 | 80021 167 2276 | 80022 167 2277 | 80023 166 2278 | 80024 166 2279 | 80025 166 2280 | 80026 167 2281 | 80029 167 2282 | 80030 167 2283 | 80031 167 2284 | 80032 167 2285 | 80033 166 2286 | 80034 166 2287 | 80035 166 2288 | 80036 167 2289 | 80039 167 2290 | 80040 167 2291 | 80041 167 2292 | 80042 167 2293 | 80043 166 2294 | 80044 166 2295 | 80045 166 2296 | 80046 167 2297 | 80049 167 2298 | 80050 167 2299 | 80051 167 2300 | 80052 167 2301 | 80053 166 2302 | 80054 166 2303 | 80055 166 2304 | 80056 167 2305 | 80059 167 2306 | 80060 167 2307 | 80061 167 2308 | 80062 167 2309 | 80063 166 2310 | 80064 166 2311 | 80065 166 2312 | 80066 167 2313 | 80069 167 2314 | 80070 167 2315 | 80071 167 2316 | 80072 167 2317 | 80073 166 2318 | 80074 166 2319 | 80075 166 2320 | 80076 167 2321 | 80079 167 2322 | 80080 167 2323 | 80081 167 2324 | 80082 167 2325 | 80083 166 2326 | 80084 166 2327 | 80085 166 2328 | 80086 167 2329 | 80089 167 2330 | 80090 167 2331 | 80091 167 2332 | 80092 167 2333 | 80093 166 2334 | 80094 166 2335 | 80095 166 2336 | 80096 167 2337 | 80099 167 2338 | 80100 167 2339 | 80101 167 2340 | 80102 167 2341 | 80103 166 2342 | 80104 166 2343 | 80105 166 2344 | 80106 167 2345 | 80109 167 2346 | 80110 167 2347 | 80111 167 2348 | 80112 167 2349 | 80113 166 2350 | 80114 166 2351 | 80115 166 2352 | 80116 167 2353 | 80119 167 2354 | 80120 167 2355 | 80121 167 2356 | 80122 167 2357 | 80123 166 2358 | 80124 166 2359 | 80125 166 2360 | 80126 167 2361 | 80129 167 2362 | 80130 167 2363 | 80131 167 2364 | 80132 167 2365 | 80133 166 2366 | 80134 166 2367 | 80135 166 2368 | 80136 167 2369 | 80139 167 2370 | 80140 167 2371 | 80141 167 2372 | 80142 167 2373 | 80143 166 2374 | 80144 166 2375 | 80145 166 2376 | 80146 167 2377 | 80149 167 2378 | 80150 167 2379 | 80151 167 2380 | 80152 167 2381 | 80153 166 2382 | 80154 166 2383 | 80155 166 2384 | 80156 167 2385 | 80159 167 2386 | 80160 167 2387 | 80161 167 2388 | 80162 167 2389 | 80163 166 2390 | 80164 166 2391 | 80165 166 2392 | 80166 167 2393 | 80169 167 2394 | 80170 167 2395 | 80171 167 2396 | 80172 167 2397 | 80173 166 2398 | 80174 166 2399 | 80175 166 2400 | 80176 167 2401 | 80179 167 2402 | 80180 167 2403 | 80181 167 2404 | 80182 167 2405 | 80183 166 2406 | 80184 166 2407 | 80185 166 2408 | 80186 167 2409 | 80189 167 2410 | 80190 167 2411 | 80191 167 2412 | 80192 167 2413 | 80193 166 2414 | 80194 166 2415 | 80195 166 2416 | 80196 167 2417 | 80199 167 2418 | 80220 167 2419 | 80221 167 2420 | 80222 167 2421 | 80223 167 2422 | 80224 167 2423 | 80225 167 2424 | 80226 167 2425 | 80227 167 2426 | 80228 167 2427 | 80229 167 2428 | 80230 167 2429 | 80231 167 2430 | 80232 167 2431 | 80233 167 2432 | 80234 167 2433 | 80235 167 2434 | 80236 167 2435 | 80237 167 2436 | 80238 167 2437 | 80239 167 2438 | 8024 167 2439 | 8025 167 2440 | 8026 167 2441 | 8027 167 2442 | 8028 167 2443 | 8029 167 2444 | 80300 167 2445 | 80301 167 2446 | 80302 167 2447 | 80303 166 2448 | 80304 166 2449 | 80305 166 2450 | 80306 167 2451 | 80309 167 2452 | 80310 167 2453 | 80311 167 2454 | 80312 167 2455 | 80313 166 2456 | 80314 166 2457 | 80315 166 2458 | 80316 167 2459 | 80319 167 2460 | 80320 167 2461 | 80321 167 2462 | 80322 167 2463 | 80323 166 2464 | 80324 166 2465 | 80325 166 2466 | 80326 167 2467 | 80329 167 2468 | 80330 167 2469 | 80331 167 2470 | 80332 167 2471 | 80333 166 2472 | 80334 166 2473 | 80335 166 2474 | 80336 167 2475 | 80339 167 2476 | 80340 167 2477 | 80341 167 2478 | 80342 167 2479 | 80343 166 2480 | 80344 166 2481 | 80345 166 2482 | 80346 167 2483 | 80349 167 2484 | 80350 167 2485 | 80351 167 2486 | 80352 167 2487 | 80353 166 2488 | 80354 166 2489 | 80355 166 2490 | 80356 167 2491 | 80359 167 2492 | 80360 167 2493 | 80361 167 2494 | 80362 167 2495 | 80363 166 2496 | 80364 166 2497 | 80365 166 2498 | 80366 167 2499 | 80369 167 2500 | 80370 167 2501 | 80371 167 2502 | 80372 167 2503 | 80373 166 2504 | 80374 166 2505 | 80375 166 2506 | 80376 167 2507 | 80379 167 2508 | 80380 167 2509 | 80381 167 2510 | 80382 167 2511 | 80383 166 2512 | 80384 166 2513 | 80385 166 2514 | 80386 167 2515 | 80389 167 2516 | 80390 167 2517 | 80391 167 2518 | 80392 167 2519 | 80393 166 2520 | 80394 166 2521 | 80395 166 2522 | 80396 167 2523 | 80399 167 2524 | 80400 167 2525 | 80401 167 2526 | 80402 167 2527 | 80403 166 2528 | 80404 166 2529 | 80405 166 2530 | 80406 167 2531 | 80409 167 2532 | 80410 167 2533 | 80411 167 2534 | 80412 167 2535 | 80413 166 2536 | 80414 166 2537 | 80415 166 2538 | 80416 167 2539 | 80419 167 2540 | 80420 167 2541 | 80421 167 2542 | 80422 167 2543 | 80423 166 2544 | 80424 166 2545 | 80425 166 2546 | 80426 167 2547 | 80429 167 2548 | 80430 167 2549 | 80431 167 2550 | 80432 167 2551 | 80433 166 2552 | 80434 166 2553 | 80435 166 2554 | 80436 167 2555 | 80439 167 2556 | 80440 167 2557 | 80441 167 2558 | 80442 167 2559 | 80443 166 2560 | 80444 166 2561 | 80445 166 2562 | 80446 167 2563 | 80449 167 2564 | 80450 167 2565 | 80451 167 2566 | 80452 167 2567 | 80453 166 2568 | 80454 166 2569 | 80455 166 2570 | 80456 167 2571 | 80459 167 2572 | 80460 167 2573 | 80461 167 2574 | 80462 167 2575 | 80463 166 2576 | 80464 166 2577 | 80465 166 2578 | 80466 167 2579 | 80469 167 2580 | 80470 167 2581 | 80471 167 2582 | 80472 167 2583 | 80473 166 2584 | 80474 166 2585 | 80475 166 2586 | 80476 167 2587 | 80479 167 2588 | 80480 167 2589 | 80481 167 2590 | 80482 167 2591 | 80483 166 2592 | 80484 166 2593 | 80485 166 2594 | 80486 167 2595 | 80489 167 2596 | 80490 167 2597 | 80491 167 2598 | 80492 167 2599 | 80493 166 2600 | 80494 166 2601 | 80495 166 2602 | 80496 167 2603 | 80499 167 2604 | 80500 169 2605 | 80501 169 2606 | 80502 169 2607 | 80503 169 2608 | 80504 169 2609 | 80505 169 2610 | 80506 169 2611 | 80507 169 2612 | 80508 169 2613 | 80510 169 2614 | 80511 169 2615 | 80512 169 2616 | 80513 169 2617 | 80514 169 2618 | 80515 169 2619 | 80516 169 2620 | 80517 169 2621 | 80518 169 2622 | 8052 169 2623 | 8053 169 2624 | 8054 169 2625 | 8055 169 2626 | 8056 169 2627 | 8057 169 2628 | 8058 169 2629 | 8059 169 2630 | 80600 72 2631 | 80601 70 2632 | 80602 72 2633 | 80603 72 2634 | 80604 72 2635 | 80605 72 2636 | 80606 70 2637 | 80607 72 2638 | 80608 72 2639 | 80609 72 2640 | 80610 72 2641 | 80611 70 2642 | 80612 72 2643 | 80613 72 2644 | 80614 72 2645 | 80615 72 2646 | 80616 70 2647 | 80617 72 2648 | 80618 72 2649 | 80619 72 2650 | 80620 72 2651 | 80621 71 2652 | 80622 72 2653 | 80623 72 2654 | 80624 72 2655 | 80625 72 2656 | 80626 71 2657 | 80627 72 2658 | 80628 72 2659 | 80629 72 2660 | 80630 72 2661 | 80631 71 2662 | 80632 72 2663 | 80633 72 2664 | 80634 72 2665 | 80635 72 2666 | 80636 71 2667 | 80637 72 2668 | 80638 72 2669 | 80639 72 2670 | 8064 72 2671 | 8065 72 2672 | 80660 72 2673 | 80661 72 2674 | 80662 72 2675 | 80669 72 2676 | 80670 72 2677 | 80671 72 2678 | 80672 72 2679 | 80679 72 2680 | 8068 72 2681 | 8069 72 2682 | 8080 170 2683 | 8081 170 2684 | 8082 170 2685 | 8083 170 2686 | 80841 170 2687 | 80842 170 2688 | 80843 170 2689 | 80844 170 2690 | 80849 170 2691 | 80851 170 2692 | 80852 170 2693 | 80853 170 2694 | 80854 170 2695 | 80859 170 2696 | 8088 170 2697 | 8089 170 2698 | 82000 170 2699 | 82001 170 2700 | 82002 170 2701 | 82003 170 2702 | 82009 170 2703 | 82010 170 2704 | 82011 170 2705 | 82012 170 2706 | 82013 170 2707 | 82019 170 2708 | 82020 170 2709 | 82021 170 2710 | 82022 170 2711 | 82030 170 2712 | 82031 170 2713 | 82032 170 2714 | 8208 170 2715 | 8209 170 2716 | 82100 170 2717 | 82101 170 2718 | 82110 170 2719 | 82111 170 2720 | 82120 170 2721 | 82121 170 2722 | 82122 170 2723 | 82123 170 2724 | 82129 170 2725 | 82130 170 2726 | 82131 170 2727 | 82132 170 2728 | 82133 170 2729 | 82139 170 2730 | 83500 170 2731 | 83501 170 2732 | 83502 170 2733 | 83503 170 2734 | 83510 170 2735 | 83511 170 2736 | 83512 170 2737 | 83513 170 2738 | 8502 167 2739 | 8503 167 2740 | 8504 167 2741 | 85100 167 2742 | 85101 167 2743 | 85102 167 2744 | 85103 166 2745 | 85104 166 2746 | 85105 166 2747 | 85106 167 2748 | 85109 167 2749 | 85110 167 2750 | 85111 167 2751 | 85112 167 2752 | 85113 166 2753 | 85114 166 2754 | 85115 166 2755 | 85116 167 2756 | 85119 167 2757 | 85120 167 2758 | 85121 167 2759 | 85122 167 2760 | 85123 166 2761 | 85124 166 2762 | 85125 166 2763 | 85126 167 2764 | 85129 167 2765 | 85130 167 2766 | 85131 167 2767 | 85132 167 2768 | 85133 166 2769 | 85134 166 2770 | 85135 166 2771 | 85136 167 2772 | 85139 167 2773 | 85140 167 2774 | 85141 167 2775 | 85142 167 2776 | 85143 166 2777 | 85144 166 2778 | 85145 166 2779 | 85146 167 2780 | 85149 167 2781 | 85150 167 2782 | 85151 167 2783 | 85152 167 2784 | 85153 166 2785 | 85154 166 2786 | 85155 166 2787 | 85156 167 2788 | 85159 167 2789 | 85160 167 2790 | 85161 167 2791 | 85162 167 2792 | 85163 166 2793 | 85164 166 2794 | 85165 166 2795 | 85166 167 2796 | 85169 167 2797 | 85170 167 2798 | 85171 167 2799 | 85172 167 2800 | 85173 166 2801 | 85174 166 2802 | 85175 166 2803 | 85176 167 2804 | 85179 167 2805 | 85180 167 2806 | 85181 167 2807 | 85182 167 2808 | 85183 166 2809 | 85184 166 2810 | 85185 166 2811 | 85186 167 2812 | 85189 167 2813 | 85190 167 2814 | 85191 167 2815 | 85192 167 2816 | 85193 166 2817 | 85194 166 2818 | 85195 166 2819 | 85196 167 2820 | 85199 167 2821 | 85200 167 2822 | 85201 167 2823 | 85202 167 2824 | 85203 166 2825 | 85204 166 2826 | 85205 166 2827 | 85206 167 2828 | 85209 167 2829 | 85210 167 2830 | 85211 167 2831 | 85212 167 2832 | 85213 166 2833 | 85214 166 2834 | 85215 166 2835 | 85216 167 2836 | 85219 167 2837 | 85220 167 2838 | 85221 167 2839 | 85222 167 2840 | 85223 166 2841 | 85224 166 2842 | 85225 166 2843 | 85226 167 2844 | 85229 167 2845 | 85230 167 2846 | 85231 167 2847 | 85232 167 2848 | 85233 166 2849 | 85234 166 2850 | 85235 166 2851 | 85236 167 2852 | 85239 167 2853 | 85240 167 2854 | 85241 167 2855 | 85242 167 2856 | 85243 166 2857 | 85244 166 2858 | 85245 166 2859 | 85246 167 2860 | 85249 167 2861 | 85250 167 2862 | 85251 167 2863 | 85252 167 2864 | 85253 166 2865 | 85254 166 2866 | 85255 166 2867 | 85256 167 2868 | 85259 167 2869 | 85300 167 2870 | 85301 167 2871 | 85302 167 2872 | 85303 166 2873 | 85304 166 2874 | 85305 166 2875 | 85306 167 2876 | 85309 167 2877 | 85310 167 2878 | 85311 167 2879 | 85312 167 2880 | 85313 166 2881 | 85314 166 2882 | 85315 166 2883 | 85316 167 2884 | 85319 167 2885 | 85400 167 2886 | 85401 167 2887 | 85402 167 2888 | 85403 166 2889 | 85404 166 2890 | 85405 166 2891 | 85406 167 2892 | 85409 167 2893 | 85410 167 2894 | 85411 167 2895 | 85412 167 2896 | 85413 166 2897 | 85414 166 2898 | 85415 166 2899 | 85416 167 2900 | 85419 167 2901 | 8870 173 2902 | 8871 173 2903 | 8872 173 2904 | 8873 173 2905 | 8874 173 2906 | 8875 173 2907 | 8876 173 2908 | 8877 173 2909 | 8950 173 2910 | 8951 173 2911 | 8960 173 2912 | 8961 173 2913 | 8962 173 2914 | 8963 173 2915 | 8970 173 2916 | 8971 173 2917 | 8972 173 2918 | 8973 173 2919 | 8974 173 2920 | 8975 173 2921 | 8976 173 2922 | 8977 173 2923 | 9050 167 2924 | 9059 189 2925 | 9070 167 2926 | 9072 72 2927 | 94811 162 2928 | 94821 162 2929 | 94822 162 2930 | 94831 162 2931 | 94832 162 2932 | 94833 162 2933 | 94841 162 2934 | 94842 162 2935 | 94843 162 2936 | 94844 162 2937 | 94851 162 2938 | 94852 162 2939 | 94853 162 2940 | 94854 162 2941 | 94855 162 2942 | 94861 162 2943 | 94862 162 2944 | 94863 162 2945 | 94864 162 2946 | 94865 162 2947 | 94866 162 2948 | 94871 162 2949 | 94872 162 2950 | 94873 162 2951 | 94874 162 2952 | 94875 162 2953 | 94876 162 2954 | 94877 162 2955 | 94881 162 2956 | 94882 162 2957 | 94883 162 2958 | 94884 162 2959 | 94885 162 2960 | 94886 162 2961 | 94887 162 2962 | 94888 162 2963 | 94891 162 2964 | 94892 162 2965 | 94893 162 2966 | 94894 162 2967 | 94895 162 2968 | 94896 162 2969 | 94897 162 2970 | 94898 162 2971 | 94899 162 2972 | 95200 72 2973 | 95201 70 2974 | 95202 72 2975 | 95203 72 2976 | 95204 72 2977 | 95205 72 2978 | 95206 70 2979 | 95207 72 2980 | 95208 72 2981 | 95209 72 2982 | 95210 72 2983 | 95211 71 2984 | 95212 72 2985 | 95213 72 2986 | 95214 72 2987 | 95215 72 2988 | 95216 71 2989 | 95217 72 2990 | 95218 72 2991 | 95219 72 2992 | 9522 72 2993 | 9523 72 2994 | 9524 72 2995 | 9528 72 2996 | 9529 72 2997 | 9580 173 2998 | 9581 173 2999 | 9582 173 3000 | 9583 173 3001 | 9584 173 3002 | 9585 173 3003 | 9586 173 3004 | 9587 173 3005 | 9588 173 3006 | 95890 173 3007 | 95891 173 3008 | 95892 173 3009 | 95893 173 3010 | 95899 173 3011 | 99590 2 3012 | 99591 2 3013 | 99592 2 3014 | 99593 2 3015 | 99594 2 3016 | 9961 176 3017 | 9962 176 3018 | 99630 176 3019 | 99631 176 3020 | 99639 176 3021 | 99640 176 3022 | 99641 176 3023 | 99642 176 3024 | 99643 176 3025 | 99644 176 3026 | 99645 176 3027 | 99646 176 3028 | 99647 176 3029 | 99649 176 3030 | 99656 134 3031 | 99660 176 3032 | 99661 176 3033 | 99662 176 3034 | 99663 176 3035 | 99664 176 3036 | 99665 176 3037 | 99666 176 3038 | 99667 176 3039 | 99668 134 3040 | 99669 176 3041 | 99673 134 3042 | 99674 176 3043 | 99675 176 3044 | 99676 176 3045 | 99677 176 3046 | 99678 176 3047 | 99682 186 3048 | 99683 186 3049 | 99684 186 3050 | 99685 186 3051 | 99686 186 3052 | 99687 186 3053 | 99688 186 3054 | 99690 173 3055 | 99691 173 3056 | 99692 173 3057 | 99693 173 3058 | 99694 173 3059 | 99695 173 3060 | 99696 173 3061 | 99699 173 3062 | 99702 100 3063 | 99731 114 3064 | 99760 189 3065 | 99761 189 3066 | 99762 189 3067 | 99769 189 3068 | 99801 84 3069 | 99802 2 3070 | E9500 58 3071 | E9501 58 3072 | E9502 58 3073 | E9503 58 3074 | E9504 58 3075 | E9505 58 3076 | E9506 58 3077 | E9507 58 3078 | E9508 58 3079 | E9509 58 3080 | E9510 58 3081 | E9511 58 3082 | E9518 58 3083 | E9520 58 3084 | E9521 58 3085 | E9528 58 3086 | E9529 58 3087 | E9530 58 3088 | E9531 58 3089 | E9538 58 3090 | E9539 58 3091 | E954 58 3092 | E9550 58 3093 | E9551 58 3094 | E9552 58 3095 | E9553 58 3096 | E9554 58 3097 | E9555 58 3098 | E9556 58 3099 | E9557 58 3100 | E9559 58 3101 | E956 58 3102 | E9570 58 3103 | E9571 58 3104 | E9572 58 3105 | E9579 58 3106 | E9580 58 3107 | E9581 58 3108 | E9582 58 3109 | E9583 58 3110 | E9584 58 3111 | E9585 58 3112 | E9586 58 3113 | E9587 58 3114 | E9588 58 3115 | E9589 58 3116 | E959 58 3117 | V08 1 3118 | V421 186 3119 | V426 186 3120 | V427 186 3121 | V4281 186 3122 | V4282 186 3123 | V4283 186 3124 | V4284 186 3125 | V4321 186 3126 | V4322 186 3127 | V440 82 3128 | V441 188 3129 | V442 188 3130 | V443 188 3131 | V444 188 3132 | V4450 188 3133 | V4451 188 3134 | V4452 188 3135 | V4459 188 3136 | V446 188 3137 | V448 188 3138 | V449 188 3139 | V4511 134 3140 | V4512 134 3141 | V4611 82 3142 | V4612 82 3143 | V4613 82 3144 | V4614 82 3145 | V4970 189 3146 | V4971 189 3147 | V4972 189 3148 | V4973 189 3149 | V4974 189 3150 | V4975 189 3151 | V4976 189 3152 | V4977 189 3153 | V521 189 3154 | V550 82 3155 | V551 188 3156 | V552 188 3157 | V553 188 3158 | V554 188 3159 | V555 188 3160 | V556 188 3161 | V558 188 3162 | V559 188 3163 | V560 134 3164 | V561 134 3165 | V562 134 3166 | V5631 134 3167 | V5632 134 3168 | V568 134 3169 | V5867 19 3170 | V8541 22 3171 | V8542 22 3172 | V8543 22 3173 | V8544 22 3174 | V8545 22 3175 | -------------------------------------------------------------------------------- /legend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlgorexHealth/hcc-python/cd3797dbcb0e0d830bba44f6ab75c53b6c891cc9/legend.png -------------------------------------------------------------------------------- /model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlgorexHealth/hcc-python/cd3797dbcb0e0d830bba44f6ab75c53b6c891cc9/model.png --------------------------------------------------------------------------------