Files
ewoooc/services/pchome_mapping_backlog/contracts.py

67 lines
2.2 KiB
Python

"""AI-first compatibility contracts for PChome mapping receipts."""
from __future__ import annotations
from typing import Any
from services.ai_exception_contract import (
AI_EXCEPTION_MODE_KEY,
AI_EXCEPTION_MODE_MACHINE_VERIFIABLE,
AI_EXCEPTION_REQUIRED_COUNT_KEY,
AI_EXCEPTION_REQUIRED_KEY,
LEGACY_HUMAN_REVIEW_REQUIRED_COUNT_KEY,
LEGACY_HUMAN_REVIEW_REQUIRED_KEY,
LEGACY_HUMAN_REVIEW_REQUIRED_LEGACY_KEY,
LEGACY_PRIMARY_FLOW_COUNT_KEY,
LEGACY_REVIEW_MODE_EXCEPTION_ONLY,
LEGACY_REVIEW_MODE_KEY,
LEGACY_REVIEW_REQUIRED_COUNT_KEY,
LEGACY_REVIEW_REQUIRED_KEY,
PRIMARY_HUMAN_GATE_COUNT_KEY,
)
def _ai_exception_compatibility_fields(ai_exception_required: bool) -> dict[str, Any]:
"""Return the AI-first exception contract with legacy readback aliases."""
return {
LEGACY_HUMAN_REVIEW_REQUIRED_KEY: False,
LEGACY_HUMAN_REVIEW_REQUIRED_LEGACY_KEY: bool(ai_exception_required),
AI_EXCEPTION_REQUIRED_KEY: bool(ai_exception_required),
PRIMARY_HUMAN_GATE_COUNT_KEY: 0,
AI_EXCEPTION_MODE_KEY: AI_EXCEPTION_MODE_MACHINE_VERIFIABLE,
}
def _legacy_review_compatibility_fields(ai_exception_required: bool = False) -> dict[str, Any]:
"""Keep old review-mode keys false while exposing the AI exception state."""
return {
LEGACY_REVIEW_REQUIRED_KEY: False,
LEGACY_REVIEW_MODE_KEY: LEGACY_REVIEW_MODE_EXCEPTION_ONLY,
AI_EXCEPTION_REQUIRED_KEY: bool(ai_exception_required),
AI_EXCEPTION_MODE_KEY: AI_EXCEPTION_MODE_MACHINE_VERIFIABLE,
}
def _evidence_requires_ai_exception(evidence: dict[str, Any]) -> bool:
return bool(
evidence.get(AI_EXCEPTION_REQUIRED_KEY)
or evidence.get(LEGACY_HUMAN_REVIEW_REQUIRED_LEGACY_KEY)
or evidence.get(LEGACY_HUMAN_REVIEW_REQUIRED_KEY)
)
def _summary_exception_count(summary: dict[str, Any]) -> int:
return int(
summary.get(AI_EXCEPTION_REQUIRED_COUNT_KEY)
or summary.get(LEGACY_REVIEW_REQUIRED_COUNT_KEY)
or 0
)
__all__ = (
"_ai_exception_compatibility_fields",
"_evidence_requires_ai_exception",
"_legacy_review_compatibility_fields",
"_summary_exception_count",
)