Module: FlowEngine::LLM::SensitiveDataFilter
- Defined in:
- lib/flowengine/llm/sensitive_data_filter.rb
Overview
Scans introduction text for sensitive data patterns (SSN, ITIN, EIN, bank account numbers) and raises SensitiveDataError if any are found. This prevents sensitive information from being sent to an LLM.
Constant Summary collapse
- SSN_PATTERN =
SSN: 3 digits, dash, 2 digits, dash, 4 digits (e.g. 123-45-6789)
/\b\d{3}-\d{2}-\d{4}\b/- ITIN_PATTERN =
ITIN: 9XX-XX-XXXX where first digit is 9
/\b9\d{2}-\d{2}-\d{4}\b/- EIN_PATTERN =
EIN: 2 digits, dash, 7 digits (e.g. 12-3456789)
/\b\d{2}-\d{7}\b/- NINE_DIGITS_PATTERN =
Nine consecutive digits (SSN/ITIN without dashes)
/\b\d{9}\b/- PATTERNS =
{ "SSN" => SSN_PATTERN, "ITIN" => ITIN_PATTERN, "EIN" => EIN_PATTERN, "SSN/ITIN (no dashes)" => NINE_DIGITS_PATTERN }.freeze
Class Method Summary collapse
-
.check!(text) ⇒ Object
Checks text for sensitive data patterns.
Class Method Details
.check!(text) ⇒ Object
Checks text for sensitive data patterns.
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/flowengine/llm/sensitive_data_filter.rb', line 32 def self.check!(text) detected = PATTERNS.each_with_object([]) do |(label, pattern), found| found << label if text.match?(pattern) end return if detected.empty? raise ::FlowEngine::Errors::SensitiveDataError, "Introduction contains sensitive information (#{detected.join(", ")}). " \ "Please remove all SSN, ITIN, EIN, and account numbers before proceeding." end |