from pydantic import BaseModel, Field from typing import Literal, Union, Optional, List # --- Event follow-up classes --- class AnimalCollectedEvent(BaseModel): type: Literal["animal collected"] collected: Literal["yes", "no"] class RecipientEvent(BaseModel): type: Literal["recipient"] recipient: Literal[ "veterinary", "care center", "local museum", "national museum", "other" ] class RadiographyEvent(BaseModel): type: Literal["radiography"] radiography: Literal["yes", "no", "unknown"] class GivenAnswerEvent(BaseModel): type: Literal["given answer"] answer: Literal[ "nothing", "complaint against x", "complaint", "police call", "discussion with the speaker", "press release", "unknown", ] class NameOfRecipientEvent(BaseModel): type: Literal["recipient name"] name: str class CollectionReferenceEvent(BaseModel): type: Literal["collection reference"] reference: str FollowUpEventType = Union[ AnimalCollectedEvent, RecipientEvent, RadiographyEvent, GivenAnswerEvent, NameOfRecipientEvent, CollectionReferenceEvent, ] class FollowUpEvents(BaseModel): follow_up_events: Optional[List[FollowUpEventType]] = None