|
|
import gradio as gr |
|
|
|
|
|
def calculate_risk(data_type, users, location, use_case): |
|
|
score = 0 |
|
|
reasons = [] |
|
|
|
|
|
|
|
|
if data_type == "Public Data": |
|
|
score += 1 |
|
|
elif data_type == "Internal/Private": |
|
|
score += 3 |
|
|
elif data_type == "Sensitive / Biometric / Medical": |
|
|
score += 10 |
|
|
reasons.append("π¨ **High Risk Data:** Processing sensitive personal data requires explicit consent (nFADP) and strict DPIA (EU AI Act).") |
|
|
|
|
|
|
|
|
if users == "< 1,000 DAU": |
|
|
score += 1 |
|
|
elif users == "1,000 - 50,000 DAU": |
|
|
score += 3 |
|
|
elif users == "> 50,000 DAU": |
|
|
score += 5 |
|
|
reasons.append("π **High Volume:** Systems with >50k users are often classified as 'Systemic Risk' under EU AI Act.") |
|
|
|
|
|
|
|
|
if location == "Switzerland (CH)": |
|
|
score += 0 |
|
|
reasons.append("β
**Sovereign Hosting:** Data resides in Switzerland. nFADP compliant.") |
|
|
elif location == "European Union (EU)": |
|
|
score += 1 |
|
|
reasons.append("β
**Adequate Protection:** EU is on the Swiss FDPIC 'Safe Country' list.") |
|
|
elif location == "USA (Cloud Act Scope)": |
|
|
score += 5 |
|
|
reasons.append("β οΈ **US Cloud Act Risk:** Transfer requires TIA (Transfer Impact Assessment) and SCCs.") |
|
|
elif location == "Other / Global": |
|
|
score += 7 |
|
|
reasons.append("π¨ **Unknown Jurisdiction:** High risk of data sovereignty violation.") |
|
|
|
|
|
|
|
|
if score >= 12: |
|
|
tier = "TIER 4: UNACCEPTABLE / HIGH RISK" |
|
|
color = "red" |
|
|
action = "π STOP DEPLOYMENT. Requires full DPIA and Legal Review." |
|
|
elif score >= 7: |
|
|
tier = "TIER 3: SUBSTANTIAL RISK" |
|
|
color = "orange" |
|
|
action = "β οΈ PROCEED WITH CAUTION. Implement SCCs and Encryption." |
|
|
else: |
|
|
tier = "TIER 1: LOW RISK" |
|
|
color = "green" |
|
|
action = "β
APPROVED for Pilot. Standard monitoring applies." |
|
|
|
|
|
|
|
|
report = f""" |
|
|
## π‘οΈ Audit Verdict: <span style='color:{color}'>{tier}</span> |
|
|
|
|
|
**Risk Score:** {score}/20 |
|
|
|
|
|
### π Compliance Actions Required: |
|
|
{action} |
|
|
|
|
|
### π Detected Risk Factors: |
|
|
""" |
|
|
for r in reasons: |
|
|
report += f"\n- {r}" |
|
|
|
|
|
return report |
|
|
|
|
|
|
|
|
with gr.Blocks(theme=gr.themes.Soft()) as demo: |
|
|
gr.Markdown(""" |
|
|
# π¨π Swiss Risk Calculator |
|
|
### nFADP & EU AI Act Compliance Engine |
|
|
**Cata Risk Lab** | Zurich β’ London β’ Miami |
|
|
""") |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(): |
|
|
gr.Markdown("### 1. Deployment Details") |
|
|
data_input = gr.Radio( |
|
|
["Public Data", "Internal/Private", "Sensitive / Biometric / Medical"], |
|
|
label="Data Classification (nFADP Art. 5)" |
|
|
) |
|
|
users_input = gr.Radio( |
|
|
["< 1,000 DAU", "1,000 - 50,000 DAU", "> 50,000 DAU"], |
|
|
label="Daily Active Users" |
|
|
) |
|
|
loc_input = gr.Radio( |
|
|
["Switzerland (CH)", "European Union (EU)", "USA (Cloud Act Scope)", "Other / Global"], |
|
|
label="Hosting Jurisdiction" |
|
|
) |
|
|
btn = gr.Button("π Run Compliance Audit", variant="primary") |
|
|
|
|
|
with gr.Column(): |
|
|
gr.Markdown("### 2. Risk Assessment Report") |
|
|
output_box = gr.Markdown() |
|
|
|
|
|
btn.click(fn=calculate_risk, inputs=[data_input, users_input, loc_input], outputs=output_box) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |