[mypy]
python_version = 3.12
strict = True
implicit_reexport = True
ignore_missing_imports = True
warn_unused_configs = True
exclude = (?x)(
    ^compliance/tests/
    | ^compliance/data/
    | ^compliance/scripts/
  )

# Tests are not type-checked (legacy; will be tightened when TestClient-based
# integration tests land in Phase 1 Step 4 follow-up).
[mypy-compliance.tests.*]
ignore_errors = True

# ----------------------------------------------------------------------
# Phase 1 refactor policy:
#   - compliance.domain / compliance.schemas           : fully strict
#   - compliance.api._http_errors                      : fully strict
#   - compliance.services.<new_clean_arch_service>     : strict (list explicitly)
#   - compliance.repositories.*                        : strict with ORM arg-type
#                                                         ignore (see per-file)
#   - compliance.db.*                                   : loose (ORM models)
#   - compliance.services.<legacy utility modules>     : loose (pre-refactor)
#   - compliance.api.<route files>                     : loose until Step 4
# ----------------------------------------------------------------------

# Legacy utility services that predate the Phase 1 refactor. Not touched
# by the clean-arch extraction. Left loose until their own refactor pass.
[mypy-compliance.services.ai_compliance_assistant]
ignore_errors = True
[mypy-compliance.services.audit_pdf_generator]
ignore_errors = True
[mypy-compliance.services.auto_risk_updater]
ignore_errors = True
[mypy-compliance.services.control_generator]
ignore_errors = True
[mypy-compliance.services.export_generator]
ignore_errors = True
[mypy-compliance.services.llm_provider]
ignore_errors = True
[mypy-compliance.services.pdf_extractor]
ignore_errors = True
[mypy-compliance.services.regulation_scraper]
ignore_errors = True
[mypy-compliance.services.report_generator]
ignore_errors = True
[mypy-compliance.services.seeder]
ignore_errors = True
[mypy-compliance.services.similarity_detector]
ignore_errors = True
[mypy-compliance.services.license_gate]
ignore_errors = True
[mypy-compliance.services.anchor_finder]
ignore_errors = True
[mypy-compliance.services.rag_client]
ignore_errors = True

# SQLAlchemy ORM layer: models use Column() rather than Mapped[T], so
# static analysis sees descriptors as Column[T] while runtime returns T.
# Loose for the whole db package until a future Mapped[T] migration.
[mypy-compliance.db.*]
ignore_errors = True

# Route files (Phase 1 Step 4 in progress): only the refactored ones are
# checked strictly via explicit extension of the strict scope in CI.
# Until each file is refactored, it stays loose.
[mypy-compliance.api.*]
ignore_errors = True

# Refactored route modules under Step 4 — override the blanket rule above.
[mypy-compliance.api.audit_routes]
ignore_errors = False
[mypy-compliance.api.banner_routes]
ignore_errors = False
[mypy-compliance.api.tom_routes]
ignore_errors = False
[mypy-compliance.api.company_profile_routes]
ignore_errors = False
[mypy-compliance.api.vvt_routes]
ignore_errors = False
[mypy-compliance.api.canonical_control_routes]
ignore_errors = False
[mypy-compliance.api.source_policy_router]
ignore_errors = False
[mypy-compliance.api.screening_routes]
ignore_errors = False
[mypy-compliance.api.evidence_routes]
ignore_errors = False
[mypy-compliance.api.email_template_routes]
ignore_errors = False
[mypy-compliance.api.incident_routes]
ignore_errors = False
[mypy-compliance.api.legal_document_routes]
ignore_errors = False
[mypy-compliance.api.dsfa_routes]
ignore_errors = False
[mypy-compliance.api.routes]
ignore_errors = False
# Agent-refactored routes — flip to strict after adding return type annotations:
# [mypy-compliance.api.dsr_routes]
# [mypy-compliance.api.vendor_compliance_routes]
# [mypy-compliance.api.notfallplan_routes]
# [mypy-compliance.api.isms_routes]
[mypy-compliance.api._http_errors]
ignore_errors = False
