Spaces:
Paused
Paused
File size: 5,951 Bytes
e8ae44a 3db95d2 f22fae1 e8ae44a 3db95d2 f22fae1 3db95d2 f22fae1 3db95d2 e8ae44a 3db95d2 e8ae44a 3db95d2 f22fae1 3db95d2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import streamlit as st
from compliance_lib import *
import PyPDF2
st.set_page_config(page_title="Anupalan Karta – Compliance Checker",
layout="wide")
st.title('🛡️ Anupalan Karta (अनुपालंकर्ता)')
st.subheader('Unified compliance self-check Tool')
st.markdown("""
## Introduction
**Anupalan Karta** (अनुपालंकर्ता) is a simple tool to help business owners, data architects, and data owners quickly check if their policies and procedures meet important regulations like GDPR, EU AI Act, and ISO 27001.
### Why is this important?
- Regulations protect your business from legal risks, fines, and reputational harm.
- Checking compliance early helps you fix gaps before audits or problems arise.
- Anupalan Karta gives you a fast, automated review and clear feedback, so you know where you stand.
## How to use
1. **Choose your input:**
On the left, either paste your policy text, enter a public website link, or upload a file (.txt, .md, .pdf).
2. **Select frameworks:**
Pick which compliance standards you want to check (you can select more than one).
3. **Run the check:**
Click "Run compliance check" to see which requirements you meet and which need attention.
4. **Get your report:**
Optionally, generate a summary report with next steps, and download it as a Markdown file.
**Who is this for?**
This tool is designed for business owners, data architects, and anyone responsible for data and compliance in their organization. No technical expertise is needed—just your policy documents.
---
**Need a deeper compliance review or expert guidance?**
Visit [anktechsol.com](https://anktechsol.com) for professional compliance consulting, detailed policy analysis, and tailored solutions for your business.
---
""")
# default state
if "check_run" not in st.session_state:
st.session_state.check_run = False
st.session_state.raw_text = ""
# ------ side bar ----
with st.sidebar:
st.subheader('📥 Input options')
option = st.radio('Choose data source:',['Paste text','URL of public policy','Upload file'])
raw_text=""
if(option=='Paste text'):
raw_text= st.text_area('Paste your policy / procedures here')
elif option == 'URL of public policy':
Url = st.text_area("Public URL (HTTPS)", key="input_text")
raw_text = fetchText(Url) if Url else st.warning
if Url:
raw_text, error = fetchText(Url)
if error:
st.warning(error)
else:
raw_text = ""
# print(raw_text)
else:
fileUpload = st.file_uploader("Upload .txt, .md or .pdf", ['txt', 'md', 'pdf'])
if fileUpload:
file_type = fileUpload.name.split('.')[-1].lower()
if file_type in ["txt", "md"]:
raw_text = fileUpload.read().decode("utf-8", errors="ignore")
elif file_type=="pdf":
try:
pdf_reader = PyPDF2.PdfReader(fileUpload)
for page in pdf_reader.pages:
raw_text += page.extract_text() or ""
except Exception as e:
st.error(f"Error reading PDF: {e}")
if raw_text and st.session_state.get("last_input") != raw_text:
st.session_state.check_run = False
st.session_state.last_input = raw_text
# "Framework to Check", ["GDPR", "EU_AI_ACT", "ISO_27001"]
selectedFw=st.multiselect('Framework to Check',list(RULES.keys()),default=list(RULES.keys()))
st.markdown("---")
# ------- side bar end -----
# <====== main code =====>
# strip removes all the leading and trailing whitespace characters from a stringif run_btn and raw_text.strip():
if "results" not in st.session_state:
st.session_state.results = None
st.session_state.selectedFw=[]
if st.sidebar.button("Run Compliance Check") and raw_text.strip():
# reset_results()
with st.spinner("Running rule-based checks…."):
st.session_state.results=run_check(raw_text, selectedFw)
st.session_state.selectedFw=selectedFw
st.session_state.check_run=True
if st.session_state.get("check_run"):
results = st.session_state.results
selectedFw = st.session_state.selectedFw
# 📊 Checklist results
st.subheader('📊 Checklist results')
for fw in selectedFw:
# Count how many rules passed for that framework
passed = sum(1 for _, ok in results[fw] if ok) # _ is unused, ok is True/False
total = len(results[fw])
st.write(f"**{fw}: {passed}/{total} items passed**") # Example: EU_AI_ACT: 0/2 items passed
st.progress(passed / total)
for label, ok in results[fw]:
st.write(("✅" if ok else "❌") + " " + label) # Example: ❌ Lawful basis documented
st.markdown("---")
# 📝 Generate narrative report
st.subheader('📝 Generate narrative report')
if st.button('Generate AI report'):
with st.spinner("Calling model… this may take ~30 s"):
bullet = "\n".join(
f"- {fw}: {sum(ok for _, ok in results[fw])}/{len(results[fw])} passed"
for fw in selectedFw
)
prompt=AI_REPORT_PROMPT.format(bullet=bullet)
report=generate_report(prompt)
st.markdown("#### Draft report")
st.code(report, language="markdown")
st.download_button("⬇️ Download .md",report.encode('utf-8'),file_name="anupalan_karta_report.md",
mime="text/markdown")
else:
st.info("Awaiting input…")
|