{
  "patterns": [
    {
      "name": "us_ssn",
      "display_name": "SSN (Social Security Number)",
      "pattern": "\\b\\d{3}-\\d{2}-\\d{4}\\b",
      "category": "PII Patterns",
      "description": "Detects US Social Security Numbers (XXX-XX-XXXX format)"
    },
    {
      "name": "us_ssn_no_dash",
      "display_name": "SSN (No Dashes)",
      "pattern": "\\b(?!000|666|9\\d{2})\\d{3}(?!00)\\d{2}(?!0000)\\d{4}\\b",
      "category": "PII Patterns",
      "description": "Detects US SSN without dashes (XXXXXXXXX format)"
    },
    {
      "name": "email",
      "display_name": "Email Address",
      "pattern": "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b",
      "category": "PII Patterns",
      "description": "Detects email addresses"
    },
    {
      "name": "us_phone",
      "display_name": "Phone Number (US)",
      "pattern": "\\b(?:\\+?1[\\s.-]?)?\\(?([0-9]{3})\\)?[\\s.-]?([0-9]{3})[\\s.-]?([0-9]{4})\\b",
      "category": "PII Patterns",
      "description": "Detects US phone numbers in various formats"
    },
    {
      "name": "visa",
      "display_name": "Credit Card (Visa)",
      "pattern": "\\b4\\d{3}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}\\b",
      "category": "Payment Card Patterns",
      "description": "Detects Visa credit card numbers"
    },
    {
      "name": "mastercard",
      "display_name": "Credit Card (Mastercard)",
      "pattern": "\\b5[1-5]\\d{2}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}\\b",
      "category": "Payment Card Patterns",
      "description": "Detects Mastercard credit card numbers"
    },
    {
      "name": "amex",
      "display_name": "Credit Card (American Express)",
      "pattern": "\\b3[47]\\d{2}[\\s\\-]?\\d{6}[\\s\\-]?\\d{5}\\b",
      "category": "Payment Card Patterns",
      "description": "Detects American Express credit card numbers"
    },
    {
      "name": "discover",
      "display_name": "Credit Card (Discover)",
      "pattern": "\\b6(?:011|5\\d{2})[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}\\b",
      "category": "Payment Card Patterns",
      "description": "Detects Discover credit card numbers"
    },
    {
      "name": "credit_card",
      "display_name": "Credit Card (Any)",
      "pattern": "(?:\\b4\\d{3}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}\\b|\\b5[1-5]\\d{2}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}\\b|\\b3[47]\\d{2}[\\s\\-]?\\d{6}[\\s\\-]?\\d{5}\\b|\\b6(?:011|5\\d{2})[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}\\b)",
      "category": "Payment Card Patterns",
      "description": "Detects any major credit card number"
    },
    {
      "name": "aws_access_key",
      "display_name": "AWS Access Key",
      "pattern": "\\b(AKIA[0-9A-Z]{16})\\b",
      "category": "Credential Patterns",
      "description": "Detects AWS access keys (AKIA...)"
    },
    {
      "name": "aws_secret_key",
      "display_name": "AWS Secret Key",
      "pattern": "\\b([A-Za-z0-9/+=]{40})\\b",
      "category": "Credential Patterns",
      "description": "Detects AWS secret keys (40 characters)"
    },
    {
      "name": "github_token",
      "display_name": "GitHub Token",
      "pattern": "\\b(gh[ps]_[a-zA-Z0-9]{36})\\b",
      "category": "Credential Patterns",
      "description": "Detects GitHub personal access tokens"
    },
    {
      "name": "slack_token",
      "display_name": "Slack Token",
      "pattern": "\\b(xox[pboa]-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24,32})\\b",
      "category": "Credential Patterns",
      "description": "Detects Slack API tokens"
    },
    {
      "name": "generic_api_key",
      "display_name": "API Key (Generic)",
      "pattern": "\\b([Aa][Pp][Ii][-_]?[Kk][Ee][Yy][\\s:=]+['\"]?[A-Za-z0-9_\\-]{20,}['\"]?)\\b",
      "category": "Credential Patterns",
      "description": "Detects generic API key patterns"
    },
    {
      "name": "ipv4",
      "display_name": "IP Address (IPv4)",
      "pattern": "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b",
      "category": "Network Patterns",
      "description": "Detects IPv4 addresses"
    },
    {
      "name": "ipv6",
      "display_name": "IP Address (IPv6)",
      "pattern": "(?<![0-9a-fA-F:])(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|:(?::[0-9a-fA-F]{1,4}){1,7}|::|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?::[0-9a-fA-F]{1,4}){1,6})(?![0-9a-fA-F:])",
      "category": "Network Patterns",
      "description": "Detects IPv6 addresses"
    },
    {
      "name": "url",
      "display_name": "URL",
      "pattern": "\\b(?:https?://|www\\.)[^\\s/$.?#].[^\\s]*\\b",
      "category": "Network Patterns",
      "description": "Detects URLs (http/https)"
    },
    {
      "name": "passport_us",
      "display_name": "Passport (US)",
      "pattern": "\\b([A-Z][0-9]{8}|[0-9]{9})\\b",
      "category": "PII Patterns",
      "description": "US passport numbers (9 digits or alphanumeric letter + 8 digits)"
    },
    {
      "name": "passport_uk",
      "display_name": "Passport (UK)",
      "pattern": "\\b[0-9]{9}\\b",
      "category": "PII Patterns",
      "description": "UK passport numbers (9 digits)"
    },
    {
      "name": "passport_germany",
      "display_name": "Passport (Germany)",
      "pattern": "\\b[CFGHJKLMNPRTVWXYZ0-9]{9}\\b",
      "category": "PII Patterns",
      "description": "German passport numbers (9 alphanumeric, no vowels)"
    },
    {
      "name": "passport_france",
      "display_name": "Passport (France)",
      "pattern": "\\b[0-9]{2}[A-Z]{2}[0-9]{5}\\b",
      "category": "PII Patterns",
      "description": "French passport numbers (2 digits, 2 letters, 5 digits)"
    },
    {
      "name": "passport_netherlands",
      "display_name": "Passport (Netherlands)",
      "pattern": "\\b[A-Z]{2}[A-Z0-9]{6}[0-9]\\b",
      "category": "PII Patterns",
      "description": "Dutch passport numbers (2 letters + 6 alphanumeric + 1 digit)"
    },
    {
      "name": "passport_canada",
      "display_name": "Passport (Canada)",
      "pattern": "\\b([A-Z]{2}[0-9]{6}|[A-Z][0-9]{6}[A-Z]{2})\\b",
      "category": "PII Patterns",
      "description": "Canadian passport numbers (old: 2 letters + 6 digits; new: 1 letter + 6 digits + 2 letters)"
    },
    {
      "name": "passport_india",
      "display_name": "Passport (India)",
      "pattern": "\\b[A-Z][0-9]{7}\\b",
      "category": "PII Patterns",
      "description": "Indian passport numbers (1 letter + 7 digits)"
    },
    {
      "name": "passport_australia",
      "display_name": "Passport (Australia)",
      "pattern": "\\b[A-Z][0-9]{7}\\b",
      "category": "PII Patterns",
      "description": "Australian passport numbers (1 letter + 7 digits)"
    },
    {
      "name": "passport_china",
      "display_name": "Passport (China)",
      "pattern": "\\b[EeGg][0-9]{8}\\b",
      "category": "PII Patterns",
      "description": "Chinese passport numbers (E/G prefix + 8 digits)"
    },
    {
      "name": "passport_japan",
      "display_name": "Passport (Japan)",
      "pattern": "\\b[A-Z]{2}[0-9]{7}\\b",
      "category": "PII Patterns",
      "description": "Japanese passport numbers (2 letters + 7 digits)"
    },
    {
      "name": "gender_sexual_orientation",
      "display_name": "Gender & Sexual Orientation (Protected Class)",
      "pattern": "\\b(non-?binary|enby|genderqueer|genderfluid|gender-?fluid|agender|bigender|pangender|two-?spirit|trans(gender|sexual|masc|fem)?|cis(gender)?|intersex|MTF|FTM|AMAB|AFAB|assigned\\s+(male|female)\\s+at\\s+birth|gay|lesbian|bisexual|pansexual|omnisexual|polysexual|asexual|aromantic|demisexual|heterosexual|homosexual|queer|LGBTQ\\+?|LGBT\\+?|LGBTQIA\\+?|same-?sex|opposite-?sex|sexual\\s+orientation|sexual\\s+preference|gender\\s+identity|sex\\s+change|gender\\s+reassignment|gender\\s+confirmation|sexual\\s+minority|he\\/him|she\\/her|they\\/them|xe\\/xem|ze\\/zir|wom[ae]ns?|females?|males?)\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects gender identity and sexual orientation terms - protected under fair lending regulations"
    },
    {
      "name": "race_ethnicity_national_origin",
      "display_name": "Race, Ethnicity & National Origin (Protected Class)",
      "pattern": "\\b(caucasian|african[- ]?american|black|white|asian|hispanic|latino|latina|latinx|pacific\\s+islander|native\\s+american|indigenous|first\\s+nations|aboriginal|mestizo|mulatto|biracial|multiracial|mixed[- ]?race|person\\s+of\\s+colou?r|POC|BIPOC|ethnic(ity)?|racial|race|arab|middle\\s+eastern|south\\s+asian|east\\s+asian|southeast\\s+asian|european|african|caribbean|west\\s+indian|haitian|jamaican|cuban|puerto\\s+rican|mexican|dominican|salvadoran|guatemalan|honduran|colombian|venezuelan|peruvian|brazilian|chinese|japanese|korean|vietnamese|filipino|filipina|indian|pakistani|bangladeshi|sri\\s+lankan|nepali|thai|indonesian|malaysian|burmese|cambodian|laotian|hmong|somali|ethiopian|nigerian|ghanaian|kenyan|south\\s+african|egyptian|moroccan|algerian|iranian|iraqi|syrian|lebanese|palestinian|israeli|turkish|afghan|uzbek|kazakh|russian|ukrainian|polish|german|italian|irish|british|french|spanish|portuguese|greek|albanian|serbian|croatian|bosnian|romani|roma|gypsy|jewish|ashkenazi|sephardic|mizrahi|native\\s+hawaiian|samoan|tongan|fijian|guamanian|chamorro|inuit|aleut|metis|maori|aboriginal\\s+australian|torres\\s+strait)\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects race, ethnicity and national origin terms - protected under ECOA and Fair Housing Act"
    },
    {
      "name": "religion",
      "display_name": "Religion & Creed (Protected Class)",
      "pattern": "\\b(christians?|catholics?|protestants?|baptists?|methodists?|lutherans?|presbyterians?|episcopal|pentecostal|evangelicals?|orthodox\\s+christian|mormons?|latter[- ]?day\\s+saint|LDS|jehovah'?s?\\s+witness(es)?|seventh[- ]?day\\s+adventist|amish|mennonite|quakers?|jewish|jews?|judaism|orthodox\\s+jew|hasidic|muslims?|islam(ic)?|sunni|shia|shiite|sufi|nation\\s+of\\s+islam|hindus?(ism)?|buddhists?|buddhism|sikhs?(ism)?|jains?(ism)?|shinto|taoists?|taoism|confucian|zoroastrian|baha'?i|rastafari(an)?|pagans?|wiccans?|druids?|satanist|scientolog(y|ist)|unitarian|agnostics?|atheists?|secular|non-?religious|spiritual\\s+but\\s+not\\s+religious|religious\\s+belief|religious\\s+practice|place\\s+of\\s+worship|church|mosque|synagogue|temple|gurdwara|kosher|halal|sabbath|shabbat|ramadan|lent|yom\\s+kippur|rosh\\s+hashanah|diwali|eid|hijab|yarmulke|kippah|turban|religious\\s+head\\s*covering)\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects religious affiliation and practice terms - protected under ECOA"
    },
    {
      "name": "age_discrimination",
      "display_name": "Age-Related Terms (Protected Class)",
      "pattern": "\\b(elderly|senior\\s+citizens?|seniors?|old\\s+age|aged\\s+\\d+|retirees?|retired|pensioners?|baby\\s+boomers?|boomers?|geriatric|over\\s+the\\s+hill|too\\s+old|too\\s+young|young\\s+person|millennials?|gen[- ]?z|junior|age\\s+discrimination|ageism|years?\\s+old|\\d+\\s*years?\\s*old|over\\s+\\d+|under\\s+\\d+|older\\s+workers?|older\\s+employees?|older\\s+candidates?|in\\s+their\\s+\\d{2}s?|date\\s+of\\s+birth|DOB|birth\\s*date|born\\s+in\\s+\\d{4}|age\\s+\\d{2,3})\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects age-related terms - protected under ECOA for applicants 62+"
    },
    {
      "name": "disability",
      "display_name": "Disability Status (Protected Class)",
      "pattern": "\\b(disabled|disabilit(y|ies)|handicap(ped)?|impair(ed|ment|ments)?|wheelchair|blind(ness)?|deaf(ness)?|hard\\s+of\\s+hearing|hearing\\s+impaired|visually\\s+impaired|mute|paralyz(ed|is)|quadriplegic|paraplegic|amputee|prosthetic|cripple[d]?|mentally\\s+ill|mental\\s+illness|mental\\s+disorder|psychiatric|schizophren(ia|ic)|bipolar|depression|depressed|anxiety\\s+disorder|PTSD|autis(m|tic)|asperger'?s?|ADHD|ADD|dyslexia|dyslexic|learning\\s+disabilit(y|ies)|intellectual\\s+disabilit(y|ies)|down'?s?\\s+syndrome|cerebral\\s+palsy|epilep(sy|tic)|seizure\\s+disorder|multiple\\s+sclerosis|MS\\s+patient|parkinson'?s?|alzheimer'?s?|dementia|chronic\\s+illness|chronic\\s+pain|fibromyalgia|lupus|crohn'?s?|cancer\\s+patient|HIV|AIDS|diabetic|diabetes|SSI|SSDI|disability\\s+benefits|disability\\s+income|ADA|reasonable\\s+accommodation|special\\s+needs|service\\s+animal|service\\s+dog|guide\\s+dog)\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects disability-related terms - protected under ECOA and ADA"
    },
    {
      "name": "marital_family_status",
      "display_name": "Marital & Family Status (Protected Class)",
      "pattern": "\\b(married|unmarried|single|divorced|separated|widowed|widow|widower|spouse|husband|wife|domestic\\s+partner|civil\\s+union|common[- ]?law|marital\\s+status|maiden\\s+name|alimony|child\\s+support|custody|pregnant|pregnancy|maternity|paternity|expecting|family\\s+status|number\\s+of\\s+children|dependents|childless|child[- ]?free|single\\s+parent|single\\s+mother|single\\s+father|unwed|out\\s+of\\s+wedlock|illegitimate|family\\s+planning|birth\\s+control|fertility|IVF|adoption|adopted|foster\\s+parent|guardian)\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects marital and family status terms - protected under ECOA"
    },
    {
      "name": "military_status",
      "display_name": "Military Status (Protected Class)",
      "pattern": "\\b(veterans?|military|armed\\s+forces|army|navy|air\\s+force|marines?(?:\\s+corps)?|coast\\s+guard|national\\s+guard|reserves?(?:ist)?|active\\s+duty|deployment|deployed|enlisted|commissioned|honorable\\s+discharge|dishonorable\\s+discharge|VA\\s+benefits|GI\\s+bill|military\\s+service|service\\s+members?|servicemembers?|SCRA|MLA|military\\s+lending)\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects military status terms - protected under SCRA and MLA"
    },
    {
      "name": "public_assistance",
      "display_name": "Public Assistance Status (Protected Class)",
      "pattern": "\\b(welfare|public\\s+assistance|food\\s+stamps|SNAP|WIC|TANF|medicaid|section\\s+8|housing\\s+voucher|subsidized\\s+housing|public\\s+housing|government\\s+benefits|social\\s+services|unemployment\\s+(benefits|insurance)|UI\\s+benefits|EBT|benefit\\s+recipient)\\b",
      "category": "Protected Class - Fair Lending",
      "description": "Detects public assistance terms - protected under ECOA"
    },
    {
      "name": "weapons_firearms",
      "display_name": "Weapons & Firearms",
      "pattern": "\\b(gun|firearm|rifle|shotgun|pistol|handgun|revolver|semi[- ]?automatic|automatic\\s+weapon|assault\\s+rifle|AR-?15|AK-?47|machine\\s+gun|submachine\\s+gun|SMG|ammunition|ammo|bullet(s)?|cartridge|caliber|9mm|\\.45|\\.38|\\.357|\\.22|12\\s+gauge|hollow\\s+point|armor\\s+piercing|magazine|clip|suppressor|silencer|bump\\s+stock|trigger|barrel|concealed\\s+carry|open\\s+carry|CCW|ghost\\s+gun|3D\\s+printed\\s+gun|untraceable\\s+firearm|straw\\s+purchase|gun\\s+show|FFL|firearms\\s+dealer)\\b",
      "category": "Dangerous Content",
      "action": "MASK",
      "description": "Detects firearms and ammunition terminology"
    },
    {
      "name": "weapons_other",
      "display_name": "Other Weapons",
      "pattern": "\\b(knife|blade|machete|switchblade|butterfly\\s+knife|balisong|brass\\s+knuckles|knuckle\\s+duster|baton|blackjack|taser|stun\\s+gun|pepper\\s+spray|mace|crossbow|bow\\s+and\\s+arrow|compound\\s+bow|sword|katana|throwing\\s+star|shuriken|nunchaku|nunchucks|tomahawk|hatchet|axe\\s+attack|ice\\s+pick|garrote|zip\\s+gun|improvised\\s+weapon|shiv|shank|pipe\\s+bomb)\\b",
      "category": "Dangerous Content",
      "action": "MASK",
      "description": "Detects non-firearm weapons terminology"
    },
    {
      "name": "explosives",
      "display_name": "Explosives & Bombs",
      "pattern": "\\b(bomb|explosive|detonate|detonator|detonation|IED|improvised\\s+explosive|pipe\\s+bomb|mail\\s+bomb|car\\s+bomb|truck\\s+bomb|suicide\\s+bomb|vest\\s+bomb|dirty\\s+bomb|fertilizer\\s+bomb|ANFO|ammonium\\s+nitrate|C-?4|plastic\\s+explosive|dynamite|TNT|nitroglycerin|black\\s+powder|gunpowder|blasting\\s+cap|fuse|timer\\s+device|remote\\s+detonation|pressure\\s+cooker\\s+bomb|nail\\s+bomb|shrapnel|fragmentation|incendiary|molotov|firebomb|thermite|napalm|grenade|hand\\s+grenade|frag\\s+grenade|flash\\s+bang|smoke\\s+bomb|landmine|claymore|semtex|RDX|PETN|how\\s+to\\s+(make|build|construct)\\s+(a\\s+)?bomb)\\b",
      "category": "Dangerous Content - High Risk",
      "action": "BLOCK",
      "description": "Detects explosives and bomb-making terminology"
    },
    {
      "name": "violence_threats",
      "display_name": "Violence & Threats",
      "pattern": "\\b(kill|murder|assassinate|execute|slaughter|massacre|bloodbath|genocide|ethnic\\s+cleansing|mass\\s+shooting|shooting\\s+spree|rampage|gun\\s+down|mow\\s+down|hunt\\s+(down|them)|take\\s+(them|him|her)\\s+out|eliminate|neutralize|liquidate|hit\\s+(list|man)|contract\\s+kill|hired\\s+gun|death\\s+threat|threat(en)?\\s+to\\s+kill|gonna\\s+kill|going\\s+to\\s+kill|want\\s+(to|him|her|them)\\s+dead|deserve\\s+to\\s+die|need(s)?\\s+to\\s+die|shoot\\s+up|bomb\\s+threat|terrorize|reign\\s+of\\s+terror|burning\\s+down|burn\\s+it\\s+down|blow\\s+(it|them|this)\\s+up|torture|mutilate|dismember|decapitate|behead|strangle|suffocate|drown|poison|stab|slash|cut\\s+(throat|them)|slit\\s+(throat|wrists)|beat\\s+to\\s+death|bludgeon|maim|cripple|kneecap)\\b",
      "category": "Dangerous Content - High Risk",
      "action": "BLOCK",
      "description": "Detects violent threats and terminology"
    },
    {
      "name": "terrorism",
      "display_name": "Terrorism & Extremism",
      "pattern": "\\b(terroris[tm]|jiha[di]|mujahideen|martyr(dom)?\\s+operation|holy\\s+war|caliphate|ISIS|ISIL|Islamic\\s+State|Al[- ]?Qaeda|Al[- ]?Shabaab|Boko\\s+Haram|Hezbollah|Hamas|Taliban|lone\\s+wolf|radicalize[d]?|radicalization|extremis[tm]|white\\s+supremac(y|ist)|neo[- ]?nazi|skinhead|aryan|white\\s+power|white\\s+nationalist|race\\s+war|day\\s+of\\s+the\\s+rope|Turner\\s+Diaries|accelerationism|boogaloo|proud\\s+boys|oath\\s+keepers|three\\s+percenter|militia\\s+movement|domestic\\s+terroris[tm]|cell|sleeper\\s+cell|attack\\s+planning|soft\\s+target|hard\\s+target|high\\s+value\\s+target|infidel|kuffar|crusader|manifest(o)?|insurgent|insurrection|armed\\s+uprising|overthrow\\s+the\\s+government|civil\\s+war\\s+2|RAHOWA|fourteen\\s+words|1488|88|HH)\\b",
      "category": "Dangerous Content - High Risk",
      "action": "BLOCK",
      "description": "Detects terrorism and extremism terminology"
    },
    {
      "name": "self_harm_suicide",
      "display_name": "Self-Harm & Suicide",
      "pattern": "\\b(suicid(e|al)|kill\\s+myself|end\\s+(my|it\\s+all)|take\\s+my\\s+(own\\s+)?life|don'?t\\s+want\\s+to\\s+live|want\\s+to\\s+die|better\\s+off\\s+dead|no\\s+reason\\s+to\\s+live|nothing\\s+to\\s+live\\s+for|end\\s+the\\s+pain|self[- ]?harm|cut(ting)?\\s+myself|slit\\s+(my\\s+)?wrists|overdose|OD|hang\\s+myself|jump\\s+off|jump\\s+from|bridge\\s+jump|train\\s+tracks|pills\\s+to\\s+die|lethal\\s+dose|LD50|how\\s+to\\s+kill\\s+(myself|yourself)|suicide\\s+method|painless\\s+death|exit\\s+bag|helium\\s+hood|suicide\\s+note|goodbye\\s+letter|final\\s+letter|last\\s+words|pro[- ]?ana|pro[- ]?mia|thinspiration|self[- ]?starv(e|ation)|purging)\\b",
      "category": "Dangerous Content - Crisis",
      "action": "MASK",
      "description": "Detects self-harm and suicide terminology - recommend human review"
    },
    {
      "name": "illegal_activities",
      "display_name": "Illegal Activities",
      "pattern": "\\b(money\\s+launder(ing)?|launder\\s+money|structuring|smurfing|wash\\s+(the\\s+)?money|clean\\s+money|dirty\\s+money|drug\\s+traffick(ing)?|narco|cartel|drug\\s+deal(er|ing)?|drug\\s+lord|kingpin|cocaine|heroin|fentanyl|meth(amphetamine)?|crack|opioid|human\\s+traffick(ing)?|sex\\s+traffick(ing)?|smuggl(e|ing)|contraband|black\\s+market|dark\\s+web|darknet|hitman|contract\\s+killer|murder\\s+for\\s+hire|arson|extort(ion)?|blackmail|ransom|kidnap(ping)?|abduct(ion)?|hostage|fraud\\s+scheme|ponzi|pyramid\\s+scheme|identity\\s+theft|credit\\s+card\\s+fraud|wire\\s+fraud|bank\\s+fraud|embezzle(ment)?|brib(e|ery)|kickback|racketeering|RICO|organized\\s+crime|mob|mafia|syndicate|gang\\s+activity|criminal\\s+enterprise)\\b",
      "category": "Dangerous Content - Illegal",
      "action": "MASK",
      "description": "Detects illegal activity terminology - relevant to SAR filing"
    },
    {
      "name": "harassment_hate",
      "display_name": "Harassment & Hate Speech",
      "pattern": "\\b(n[i1]gg[e3]r|f[a4]gg[o0]t|k[i1]ke|sp[i1]c|ch[i1]nk|g[o0]{2}k|w[e3]tb[a4]ck|r[e3]t[a4]rd|tr[a4]nny|shemale|dyke|cunt|kill\\s+all|gas\\s+the|lynch|hang\\s+the|exterminate|subhuman|untermensch|mongrel|mud\\s+people|race\\s+traitor|coal\\s+burner|oil\\s+driller|oven|lampshade|helicopter\\s+ride|throw\\s+from|rooftop|wood\\s+chipper|dox(x)?(ing)?|swat(ting)?|harass(ment)?|stalk(ing|er)?|cyber\\s*bully|death\\s+threat|rape\\s+threat|bomb\\s+threat|shoot\\s+up|gonna\\s+find\\s+you|know\\s+where\\s+you\\s+live|coming\\s+for\\s+you)\\b",
      "category": "Dangerous Content - High Risk",
      "action": "BLOCK",
      "description": "Detects slurs, hate speech and harassment"
    },
    {
      "name": "nl_bsn_contextual",
      "display_name": "BSN (Dutch Citizen Service Number)",
      "pattern": "\\b[0-9]{9}\\b",
      "category": "PII Patterns",
      "action": "MASK",
      "description": "Detects Dutch BSN numbers with contextual keywords",
      "keyword_pattern": "(?:\\b(?:BSN|B\\.S\\.N\\.|burgerservicenummer|burger\\s*service\\s*nummer|sofi\\s*nummer|sofinummer|persoonsnummer|identificatienummer|citizen\\s*service\\s*number)\\b|8\\s*5\\s*\\|\\\\\\|)",
      "allow_word_numbers": true
    },
    {
      "name": "br_cpf",
      "display_name": "CPF - Brazilian Personal Tax ID (Formatted)",
      "pattern": "\\d{3}\\.\\d{3}\\.\\d{3}(-|/)\\d{2}",
      "category": "Brazilian PII Patterns",
      "description": "Detects Brazilian CPF numbers (XXX.XXX.XXX-XX or XXX.XXX.XXX/XX format)"
    },
    {
      "name": "br_cpf_unformatted",
      "display_name": "CPF - Brazilian Personal Tax ID (Unformatted)",
      "pattern": "\\b\\d{11}\\b",
      "category": "Brazilian PII Patterns",
      "description": "Detects Brazilian CPF numbers without formatting (11 digits)"
    },
    {
      "name": "br_phone_landline",
      "display_name": "Brazilian Phone Number (Landline)",
      "pattern": "(?:\\(?\\d{2}\\)?\\s?)?(?:9\\d{4}|\\d{4})-?\\d{4}",
      "category": "Brazilian PII Patterns",
      "description": "Detects Brazilian landline phone numbers with optional area code"
    },
    {
      "name": "br_phone_mobile",
      "display_name": "Brazilian Mobile Phone Number",
      "pattern": "(?:\\+\\d{1,3}\\s?)?(?:\\(?\\d{2}\\)?\\s?)?9\\d{4}-?\\d{4}",
      "category": "Brazilian PII Patterns",
      "description": "Detects Brazilian mobile phone numbers (9 prefix for mobile)"
    },
    {
      "name": "br_cep",
      "display_name": "CEP - Brazilian Zip / Postal Code",
      "pattern": "\\b\\d{5}-?\\d{3}\\b",
      "category": "Brazilian PII Patterns",
      "description": "Detects Brazilian CEP postal codes (XXXXX-XXX or XXXXXXXX format)"
    },
    {
      "name": "br_cnpj",
      "display_name": "CNPJ - Brazilian Company Tax ID",
      "pattern": "\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}",
      "category": "Brazilian PII Patterns",
      "description": "Detects Brazilian CNPJ company registration numbers (XX.XXX.XXX/XXXX-XX format)"
    },
    {
      "name": "br_rg",
      "display_name": "RG - Brazilian National Identity Card (SP, RJ, MG)",
      "pattern": "\\b\\d{1,2}\\.\\d{3}\\.\\d{3}-[\\dXx]\\b",
      "category": "Brazilian PII Patterns",
      "description": "Detects Brazilian RG identity card numbers (common pattern for SP, RJ, MG states)"
    },
    {
      "name": "au_tfn",
      "display_name": "TFN (Australian Tax File Number)",
      "pattern": "\\b\\d{8,9}\\b",
      "category": "PII Patterns",
      "description": "Detects Australian Tax File Numbers (8-9 digits) only when near TFN/tax file context to avoid false positives on arbitrary numbers",
      "keyword_pattern": "\\b(?:TFN|T\\.F\\.N\\.|tax\\s*file\\s*(?:number|no\\.?)|tax\\s*file\\s*#?|ATO\\s*number)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "au_abn",
      "display_name": "ABN (Australian Business Number)",
      "pattern": "\\b\\d{2}\\s?\\d{3}\\s?\\d{3}\\s?\\d{3}\\b",
      "category": "PII Patterns",
      "description": "Detects Australian Business Numbers (11 digits, optional spaces: XX XXX XXX XXX)"
    },
    {
      "name": "au_medicare",
      "display_name": "Medicare Number (Australia)",
      "pattern": "\\b(?:\\d{4}\\s?\\d{5}\\s?\\d{1}|\\d{11})\\b",
      "category": "PII Patterns",
      "description": "Detects Australian Medicare numbers (formatted XXXX XXXXX X or 11 consecutive digits)"
    },
    {
      "name": "iban",
      "display_name": "IBAN (International Bank Account Number)",
      "pattern": "\\b[A-Z]{2}\\d{2}[A-Z0-9]{11,30}\\b",
      "category": "Payment Card Patterns",
      "description": "Detects IBANs (2 letter country code + 2 check digits + 4 char bank code + 7 digit base + optional 0-16 alphanumeric)"
    },
    {
      "name": "fr_nir",
      "display_name": "NIR/INSEE (French Social Security Number)",
      "pattern": "\\b[12][0-9]{2}(0[1-9]|1[0-2])[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{2}\\b",
      "category": "EU PII Patterns",
      "description": "Detects French National Identification Number (Numéro d'Inscription au Répertoire) - 15 digits with specific format: sex + year + month + department + commune + order + key"
    },
    {
      "name": "eu_iban_enhanced",
      "display_name": "IBAN (Enhanced EU Format)",
      "pattern": "\\b[A-Z]{2}[0-9]{2}[A-Z0-9]{4}[0-9]{7}[A-Z0-9]{0,16}\\b",
      "category": "EU PII Patterns",
      "description": "Enhanced IBAN detection with more specific format validation (2 letter country + 2 check digits + 4 char bank code + 7 digit account base + optional 0-16 alphanumeric)"
    },
    {
      "name": "fr_phone",
      "display_name": "Phone Number (France)",
      "pattern": "(?<!\\d)(?:\\+33|0033|0)[1-9][0-9]{8}\\b",
      "category": "EU PII Patterns",
      "description": "Detects French phone numbers in various formats (+33, 0033, or 0 prefix followed by 9 digits starting with 1-9)"
    },
    {
      "name": "eu_vat",
      "display_name": "VAT Number (EU)",
      "pattern": "\\b(AT|BE|BG|CY|CZ|DE|DK|EE|EL|ES|FI|FR|HR|HU|IE|IT|LT|LU|LV|MT|NL|PL|PT|RO|SE|SI|SK)[0-9A-Z]{8,12}\\b",
      "category": "EU PII Patterns",
      "description": "Detects EU VAT identification numbers (2-letter country code + 8-12 alphanumeric characters covering all EU member states)",
      "keyword_pattern": "\\b(?:VAT|V\\.A\\.T\\.|TVA|IVA|BTW|MWST|value\\s*added\\s*tax|tax\\s*number|tax\\s*id|fiscal\\s*number|fiscal\\s*code)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "eu_passport_generic",
      "display_name": "Passport Number (EU Generic)",
      "pattern": "\\b[0-9]{2}[A-Z]{2}[0-9]{5}\\b",
      "category": "EU PII Patterns",
      "description": "Detects generic EU passport format (2 digits + 2 letters + 5 digits) - covers France and similar EU formats",
      "keyword_pattern": "\\b(?:passport|passeport|travel\\s*document|document\\s*number|reisepass|paspoort|paszport)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "fr_postal_code",
      "display_name": "Postal Code (France)",
      "pattern": "\\b[0-9]{5}\\b",
      "category": "EU PII Patterns",
      "description": "Detects French postal codes (5 digits)",
      "keyword_pattern": "\\b(?:code\\s*postal|postal\\s*code|CP|zip\\s*code|postcode)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "street_address",
      "display_name": "Street Address",
      "pattern": "\\b\\d{1,6}\\s+[A-Za-z0-9][A-Za-z0-9\\s.'-]*\\s+(?:Street|St|Avenue|Ave|Road|Rd|Boulevard|Blvd|Drive|Dr|Lane|Ln|Way|Court|Ct|Place|Pl|Circle|Cir)\\b",
      "category": "PII Patterns",
      "description": "Detects street addresses (number + street name + street type)"
    },
    {
      "name": "airline_pnr",
      "display_name": "Airline PNR / Booking Reference",
      "pattern": "\\b[A-Z]{6}\\b",
      "category": "Aviation PII Patterns",
      "description": "Detects airline PNR / booking references (6 uppercase alpha characters) when near booking context",
      "keyword_pattern": "\\b(?:PNR|booking\\s*(?:reference|ref|code|number|confirmation)|reservation\\s*(?:code|number|ref)|record\\s*locator|confirmation\\s*(?:code|number)|itinerary\\s*(?:number|ref))\\b",
      "allow_word_numbers": false
    },
    {
      "name": "skywards_number",
      "display_name": "Emirates Skywards / Frequent Flyer Number",
      "pattern": "\\b(?:EK\\s?)?\\d{9,10}\\b",
      "category": "Aviation PII Patterns",
      "description": "Detects Emirates Skywards frequent flyer numbers (9-10 digits, optional EK prefix) when near loyalty/frequent flyer context",
      "keyword_pattern": "\\b(?:[Ss]kywards|frequent\\s*flyer|FF\\s*(?:number|no|#)|loyalty\\s*(?:number|id|member)|member\\s*(?:number|id|#)|miles\\s*(?:account|number)|tier\\s*(?:number|status))\\b",
      "allow_word_numbers": false
    },
    {
      "name": "uae_emirates_id",
      "display_name": "UAE Emirates ID",
      "pattern": "\\b784-?\\d{4}-?\\d{7}-?\\d\\b",
      "category": "UAE PII Patterns",
      "description": "Detects UAE Emirates ID numbers (784-YYYY-NNNNNNN-C format, 15 digits starting with 784)"
    },
    {
      "name": "uae_phone",
      "display_name": "Phone Number (UAE)",
      "pattern": "(?<!\\d)(?:\\+971|00971|0)\\s?(?:2|3|4|6|7|9|50|52|54|55|56|58)\\s?\\d{3}\\s?\\d{4}\\b",
      "category": "UAE PII Patterns",
      "description": "Detects UAE phone numbers (+971/00971/0 prefix, landline and mobile)"
    },
    {
      "name": "flight_number",
      "display_name": "Airline Flight Number",
      "pattern": "\\b(?:EK|QF|BA|AA|LH|AF|SQ|CX|QR|EY|FZ|WY|GF|KU|SV|MS|RJ|ME|PK|AI|UL|WS|9W|6E)\\s?\\d{1,4}\\b",
      "category": "Aviation PII Patterns",
      "description": "Detects airline flight numbers (major IATA 2-letter codes + 1-4 digit flight number) when near flight context",
      "keyword_pattern": "\\b(?:flight|departure|arrival|gate|boarding|schedule|operate|route|aircraft|plane|outbound|inbound|leg|sector|flying)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "sg_nric",
      "display_name": "NRIC/FIN (Singapore National ID)",
      "pattern": "\\b[STFGM]\\d{7}[A-Z]\\b",
      "category": "Singapore PII Patterns",
      "description": "Detects Singapore NRIC and FIN numbers (S/T for citizens/PRs, F/G/M for foreigners + 7 digits + checksum letter)"
    },
    {
      "name": "sg_phone",
      "display_name": "Phone Number (Singapore)",
      "pattern": "(?<!\\d)(?:\\+65|0065|65)\\s?[689]\\d{3}\\s?\\d{4}\\b",
      "category": "Singapore PII Patterns",
      "description": "Detects Singapore phone numbers (+65/0065/65 prefix with 6/8/9 starting digit for landline and mobile)"
    },
    {
      "name": "sg_postal_code",
      "display_name": "Postal Code (Singapore)",
      "pattern": "\\b[0-8]\\d{5}\\b",
      "category": "Singapore PII Patterns",
      "description": "Detects Singapore 6-digit postal codes (ranges 01xxxx to 83xxxx)",
      "keyword_pattern": "\\b(?:postal\\s*code|postcode|zip\\s*code|Singapore\\s*\\d|blk|block|address|HDB|flat|unit)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "passport_singapore",
      "display_name": "Passport (Singapore)",
      "pattern": "\\b[EK]\\d{7}\\b",
      "category": "Singapore PII Patterns",
      "description": "Detects Singapore passport numbers (E/K prefix + 7 digits)",
      "keyword_pattern": "\\b(?:passport|travel\\s*document|document\\s*number|immigration|ICA)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "sg_uen",
      "display_name": "UEN (Singapore Unique Entity Number)",
      "pattern": "\\b(?:\\d{8}[A-Z]|\\d{9}[A-Z]|[TR]\\d{2}[A-Z]{2}\\d{4}[A-Z])\\b",
      "category": "Singapore PII Patterns",
      "description": "Detects Singapore Unique Entity Numbers for business registration (various formats: 8/9 digits + letter, or T/R prefix)",
      "keyword_pattern": "\\b(?:UEN|company\\s*registration|business\\s*registration|ACRA|entity\\s*number|ROC|ROS)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "sg_bank_account",
      "display_name": "Bank Account (Singapore)",
      "pattern": "\\b\\d{3}-\\d{5,6}-\\d{1,3}\\b",
      "category": "Singapore PII Patterns",
      "description": "Detects Singapore bank account numbers (XXX-XXXXX(X)-X(XX) format for DBS/POSB/OCBC/UOB)",
      "keyword_pattern": "\\b(?:bank\\s*account|account\\s*number|DBS|OCBC|UOB|POSB|savings|current\\s*account|bank\\s*statement)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "ca_sin",
      "display_name": "SIN (Canadian Social Insurance Number)",
      "pattern": "\\b[1-9]\\d{2}[\\-\\s]\\d{3}[\\-\\s]\\d{3}\\b",
      "category": "Canadian PII Patterns",
      "description": "Detects Canadian Social Insurance Numbers (9-digit federal identifier, dashed or spaced format, first digit 1-9)",
      "keyword_pattern": "\\b(?:social\\s*insurance\\s*number|numéro\\s*d'assurance\\s*sociale|social\\s*insurance|SIN|NAS)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "ca_ohip",
      "display_name": "OHIP (Ontario Health Insurance Plan Number)",
      "pattern": "\\b\\d{4}[\\-\\s]?\\d{3}[\\-\\s]?\\d{3}[\\-\\s]?[A-Z]{2}\\b",
      "category": "Canadian PII Patterns",
      "description": "Detects Ontario Health Insurance Plan numbers (10 digits + 2-letter version code)",
      "keyword_pattern": "\\b(?:OHIP\\s*number|health\\s*card\\s*number|health\\s*insurance\\s*number|OHIP|health\\s*card|health\\s*insurance|ontario\\s*health|health\\s*number|carte\\s*santé)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "ca_on_drivers_licence",
      "display_name": "Driver's Licence (Ontario)",
      "pattern": "\\b[A-Z]\\d{4}[\\-\\s]\\d{5}[\\-\\s]\\d{5}\\b",
      "category": "Canadian PII Patterns",
      "description": "Detects Ontario driver's licence numbers (1 letter + 14 digits, dashed format)",
      "keyword_pattern": "\\b(?:driver'?s?\\s*licen[cs]e\\s*number|ontario\\s*licen[cs]e\\s*number|driver'?s?\\s*licen[cs]e|licen[cs]e\\s*number|DL\\s*number|ontario\\s*licen[cs]e|permis\\s*de\\s*conduire|numéro\\s*de\\s*permis)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "ca_immigration_doc",
      "display_name": "Immigration Document (Canada IRCC)",
      "pattern": "\\b(?:\\d{4}[\\-\\s]\\d{4}[\\-\\s]\\d{2}|[TUFW]\\d{8,10}|IMM[\\-\\s]?\\d{4,5})\\b",
      "category": "Canadian PII Patterns",
      "description": "Detects Canadian immigration document numbers including UCI (10-digit), work/study permits, and IMM document references",
      "keyword_pattern": "\\b(?:unique\\s*client\\s*identifier|study\\s*permit\\s*number|work\\s*permit\\s*number|study\\s*permit|work\\s*permit|UCI|immigration|IRCC|permanent\\s*resident|PR\\s*card|permis\\s*d'études|permis\\s*de\\s*travail|landed\\s*immigrant|temporary\\s*resident)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "ca_bank_account",
      "display_name": "Bank Account (Canada)",
      "pattern": "\\b\\d{5}[\\-\\s]\\d{3}[\\-\\s]\\d{7,12}\\b",
      "category": "Canadian PII Patterns",
      "description": "Detects Canadian bank account routing information (transit-institution-account format)",
      "keyword_pattern": "\\b(?:bank\\s*account|account\\s*number|transit\\s*number|institution\\s*number|branch\\s*number|routing\\s*number|direct\\s*deposit|void\\s*cheque|chequing|savings\\s*account|numéro\\s*de\\s*compte|dépôt\\s*direct)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "ca_postal_code",
      "display_name": "Postal Code (Canada)",
      "pattern": "\\b[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][\\-\\s]?\\d[ABCEGHJ-NPRSTV-Z]\\d\\b",
      "category": "Canadian PII Patterns",
      "description": "Detects Canadian postal codes (A1A 1A1 format, excludes invalid first-letter characters per Canada Post spec)",
      "keyword_pattern": "\\b(?:postal\\s*code|zip\\s*code|mailing\\s*address|street\\s*address|shipping\\s*address|home\\s*address|code\\s*postal|postcode)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "uoft_student_id",
      "display_name": "Student/Employee Number (University of Toronto)",
      "pattern": "\\b10\\d{8}\\b",
      "category": "Canadian Institutional Identifiers (FIPPA)",
      "description": "Detects University of Toronto student and employee numbers (10-digit, prefix '10'). Subject to Ontario FIPPA.",
      "keyword_pattern": "\\b(?:student\\s*id\\s*number|student\\s*number|employee\\s*id\\s*number|employee\\s*number|student\\s*id|employee\\s*id|utorid|uoft\\s*id|university\\s*of\\s*toronto|u\\s*of\\s*t)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "uoft_utorid",
      "display_name": "UTORid (University of Toronto Login)",
      "pattern": "\\b[a-z]{2,6}\\d{1,4}\\b",
      "category": "Canadian Institutional Identifiers (FIPPA)",
      "description": "Detects University of Toronto UTORid login identifiers (e.g. smithj12). Context keywords are essential due to the generic format.",
      "keyword_pattern": "\\b(?:utorid|utoid|utor\\s*id|uoft\\s*login|university\\s*of\\s*toronto\\s*login|acorn\\s*login|acorn\\s*portal|quercus\\s*login|quercus\\s*course|portal\\s*login|weblogin|shibboleth)\\b",
      "allow_word_numbers": false
    },
    {
      "name": "uoft_tcard",
      "display_name": "TCard Number (University of Toronto Campus ID)",
      "pattern": "\\b\\d{16}\\b",
      "category": "Canadian Institutional Identifiers (FIPPA)",
      "description": "Detects University of Toronto TCard campus ID card numbers (16-digit). Context keywords are critical to distinguish from payment card numbers.",
      "keyword_pattern": "\\b(?:tcard\\s*number|t-card\\s*number|tcard|t-card|campus\\s*card|campus\\s*id|university\\s*card)\\b",
      "allow_word_numbers": false
    }
  ]
}