from typing import Annotated, NotRequired, TypedDict from pydantic import BaseModel, ConfigDict, Field PositiveId = Annotated[int, Field(ge=1)] class EventSchema(BaseModel): model_config = ConfigDict(extra="ignore") dp_payment_ids: list[PositiveId] = Field(default_factory=list) abacus_statement_period_ids: list[PositiveId] = Field(default_factory=list) limit: int = Field(default=500, ge=1, le=5000) dry_run: bool = Field(default=True) request_timeout_seconds: int = Field(default=10, ge=1, le=120) class PendingItem(TypedDict): dp_payment_id: int reason_code: str | None reason_description: str | None class FailureItem(TypedDict): dp_payment_id: int program_id: str | None client_reference_id: str | None payoneer_request_url: str reason: str class UpdateItem(TypedDict): dp_payment_id: int old_status: str | None payoneer_status: str changed: bool reason: str | None class ResponseSchema(TypedDict): dry_run: bool scanned: int changed: int unchanged: int pending: int failed: int updates: list[UpdateItem] pending_payments: NotRequired[list[PendingItem]] failures: NotRequired[list[FailureItem]]