Spaces:
Runtime error
Runtime error
| from __future__ import annotations | |
| import re | |
| ALLOWED_TOPICS = [ | |
| r"IR", r"投資家", r"決算", r"財務", r"ガバナンス", r"統合報告", r"サステナビリティ", | |
| r"人的資本", r"リスク", r"セグメント", r"株主", r"資本政策", r"ESG", r"GHG", | |
| ] | |
| OUT_OF_SCOPE_PATTERNS = [r"採用の可否", r"未公開情報", r"株価予想", r"インサイダー", r"個人情報"] | |
| # 簡易PIIマスク(郵便・電話・メール) | |
| PII = re.compile( | |
| r"(\d{3}-\d{4})" # 郵便番号 | |
| r"|(\d{2,4}-\d{2,4}-\d{3,4})" # 電話番号 | |
| r"|([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+)" # メール | |
| ) | |
| SCOPE_HINT = ( | |
| "このボットはIR/ESG開示文書(統合報告書、サステナ、決算短信、コーポガバ報告)を根拠とするQ&A専用です。" | |
| ) | |
| def detect_out_of_scope(q: str) -> bool: | |
| if any(re.search(p, q) for p in OUT_OF_SCOPE_PATTERNS): | |
| return True | |
| if not any(re.search(p, q) for p in ALLOWED_TOPICS): | |
| return True | |
| return False | |
| def sanitize(text: str) -> str: | |
| return PII.sub("[REDACTED]", text) | |
| def compliance_block() -> str: | |
| return "※免責:本回答は公開済みIR/ESG資料に基づく情報提供であり、投資判断を目的としません。" | |