"""Trigger payload model for the postcode splitter Lambda. The decorator (``@subtask_handler``) already validates ``task_id`` and ``sub_task_id`` via :class:`SubtaskTriggerBody`; this model layers on the splitter-specific ``s3_uri`` field while keeping ``extra="allow"`` so any upstream-passthrough keys (e.g. ``portfolio_id``) survive untouched. """ from uuid import UUID from pydantic import BaseModel, ConfigDict class PostcodeSplitterTriggerBody(BaseModel): """Validated body for the postcode splitter Lambda. Attributes: task_id: Parent ``Task`` id; used as the ``task_id`` input on each child ``SubTask`` and as the ``parent_task_id`` on the fan-out SQS messages. sub_task_id: The splitter's own ``SubTask`` id; used as the path segment under ``ara_postcode_splitter_batches/{task_id}/{...}`` so per-invocation outputs cannot collide. s3_uri: ``s3://bucket/key`` URI of the uploaded address CSV the splitter must read. """ model_config = ConfigDict(extra="allow") task_id: UUID sub_task_id: UUID s3_uri: str