class FieldConflict(BaseModel): """One declared pair that came back with two values.""" field: str # "date_of_loss" left: TypedValue # value, doc_id, page, quoted line right: TypedValueclass CaseState(BaseModel): """What a question about a case returns: the whole bundle.""" case_id: str case_type: str # "property damage claim" present: list[MatchedPiece] # role, doc_id, match confidence missing: list[MissingPiece] # role, why it was due, what it blocks unmatched: list[str] # files no role in the list fits conflicts: list[FieldConflict] # the declared pairs that disagree verdict: Literal["complete", "incomplete", "conflicting"] verdict_reason: str # one sentence naming what blocks