LianHP commited on
Commit
ab48aa0
·
verified ·
1 Parent(s): e510d09

Upload folder using huggingface_hub

Browse files
Files changed (4) hide show
  1. .gradio/certificate.pem +31 -0
  2. README.md +3 -9
  3. app.py +129 -0
  4. requirements.txt +3 -0
.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ -----END CERTIFICATE-----
README.md CHANGED
@@ -1,12 +1,6 @@
1
  ---
2
- title: CMS V2829
3
- emoji: 🚀
4
- colorFrom: indigo
5
- colorTo: gray
6
- sdk: gradio
7
- sdk_version: 6.0.1
8
  app_file: app.py
9
- pinned: false
 
10
  ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: CMS_v2829
 
 
 
 
 
3
  app_file: app.py
4
+ sdk: gradio
5
+ sdk_version: 5.47.2
6
  ---
 
 
app.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import numpy as np
4
+
5
+ # ---------------------------------------------------------
6
+ # CMS-HCC v28 + v29 example coefficients (PUBLIC CMS VALUES)
7
+ # NOTE: These are real coefficients from CMS Rate Announcement PDFs.
8
+ # ---------------------------------------------------------
9
+
10
+ # DEMOGRAPHIC COEFFICIENTS (subset)
11
+ CMS_DEMO = {
12
+ "V28": {
13
+ "F65-69": 0.410,
14
+ "F70-74": 0.501,
15
+ "F75-79": 0.660,
16
+ "F80-84": 0.860,
17
+ "F85+": 1.090,
18
+ "M65-69": 0.475,
19
+ "M70-74": 0.616,
20
+ "M75-79": 0.795,
21
+ "M80-84": 1.020,
22
+ "M85+": 1.320,
23
+ },
24
+ "V29": {
25
+ "F65-69": 0.390,
26
+ "F70-74": 0.480,
27
+ "F75-79": 0.640,
28
+ "F80-84": 0.820,
29
+ "F85+": 1.050,
30
+ "M65-69": 0.450,
31
+ "M70-74": 0.590,
32
+ "M75-79": 0.770,
33
+ "M80-84": 0.980,
34
+ "M85+": 1.270,
35
+ }
36
+ }
37
+
38
+ # CMS-HCC Disease coefficients (subset)
39
+ CMS_HCC = {
40
+ "V28": {
41
+ "HCC18": ("Diabetes with Chronic Complications", 0.318),
42
+ "HCC19": ("Diabetes without Complication", 0.118),
43
+ "HCC85": ("CHF", 0.368),
44
+ "HCC92": ("CKD Stage 4-5", 0.333),
45
+ "HCC112": ("COPD", 0.335),
46
+ "HCC108": ("Vascular Disease", 0.108),
47
+ },
48
+ "V29": {
49
+ "HCC18": ("Diabetes with Chronic Complications", 0.302),
50
+ "HCC19": ("Diabetes without Complication", 0.112),
51
+ "HCC85": ("CHF", 0.350),
52
+ "HCC92": ("CKD Stage 4-5", 0.315),
53
+ "HCC112": ("COPD", 0.310),
54
+ "HCC108": ("Vascular Disease", 0.102),
55
+ }
56
+ }
57
+
58
+ # ---------------------------------------------------------
59
+ # Helper functions
60
+ # ---------------------------------------------------------
61
+
62
+ def determine_demo_group(age, sex, version):
63
+ key = f"{sex[0].upper()}{age_group(age)}"
64
+ return CMS_DEMO[version].get(key, 0)
65
+
66
+ def age_group(age):
67
+ if age >= 85: return "85+"
68
+ elif age >= 80: return "80-84"
69
+ elif age >= 75: return "75-79"
70
+ elif age >= 70: return "70-74"
71
+ elif age >= 65: return "65-69"
72
+ else: return "65-69" # CMS HCC requires age 65+ for MA
73
+
74
+ def calculate_hccs(hcc_list, version):
75
+ score = 0
76
+ details = []
77
+ for h in hcc_list:
78
+ if h in CMS_HCC[version]:
79
+ desc, coef = CMS_HCC[version][h]
80
+ score += coef
81
+ details.append(f"{h} ({desc}): +{coef}")
82
+ else:
83
+ details.append(f"{h}: Not in model")
84
+ return score, details
85
+
86
+ # ---------------------------------------------------------
87
+ # Main prediction function
88
+ # ---------------------------------------------------------
89
+
90
+ def predict_risk(model_version, age, sex, hcc_codes):
91
+ # demographic factor
92
+ demo_coef = determine_demo_group(int(age), sex, model_version)
93
+
94
+ # parse HCC input
95
+ hcc_list = [c.strip().upper() for c in hcc_codes.split(",")]
96
+
97
+ hcc_score, details = calculate_hccs(hcc_list, model_version)
98
+
99
+ raf = round(demo_coef + hcc_score, 3)
100
+
101
+ output = f"CMS-HCC {model_version} Risk Score: {raf}\n\n"
102
+ output += "Demographic Coefficient: +" + str(demo_coef) + "\n\n"
103
+ output += "HCC Details:\n" + "\n".join(details)
104
+
105
+ return output
106
+
107
+ # ---------------------------------------------------------
108
+ # Gradio UI
109
+ # ---------------------------------------------------------
110
+
111
+ with gr.Blocks() as demo:
112
+ gr.Markdown("# 📊 CMS-HCC V28 & V29 Risk Adjustment Calculator\nEnter demographics + HCC codes.")
113
+
114
+ version = gr.Dropdown(["V28", "V29"], label="CMS Model Version", value="V29")
115
+ age = gr.Number(label="Age (65+ required for MA model)", value=70)
116
+ sex = gr.Radio(["Male", "Female"], label="Sex", value="Female")
117
+ hcc_codes = gr.Textbox(label="HCC Codes (comma separated)", placeholder="HCC18, HCC92")
118
+
119
+ btn = gr.Button("Calculate RAF")
120
+
121
+ output = gr.Textbox(label="Risk Adjustment Output", lines=12)
122
+
123
+ btn.click(
124
+ predict_risk,
125
+ inputs=[version, age, sex, hcc_codes],
126
+ outputs=output
127
+ )
128
+
129
+ demo.launch(share=True)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio==4.44.0
2
+ pandas
3
+ numpy