# generated by datamodel-codegen: # filename: proposal.json from __future__ import annotations from enum import StrEnum from typing import Literal from pydantic import ( AwareDatetime, BaseModel, ConfigDict, Field, RootModel, conint, constr, ) class Timescale(StrEnum): ANNUAL = 'ANNUAL' MONTHLY = 'MONTHLY' DAY_AHEAD = 'DAY_AHEAD' INTRADAY = 'INTRADAY' REALTIME = 'REALTIME' class Trigger(StrEnum): MANUAL = 'MANUAL' EVENT = 'EVENT' SCHEDULED = 'SCHEDULED' class Originator(BaseModel): model_config = ConfigDict( extra='forbid', ) agent: constr(min_length=1) trigger: Trigger task_id: constr(min_length=1) class ToolCall(BaseModel): model_config = ConfigDict( extra='forbid', ) tool_call_id: constr(min_length=1) tool: constr(min_length=1) version: constr(min_length=1) inputs_ref: constr(pattern=r'^[0-9a-f]{64}$') outputs_ref: constr(pattern=r'^[0-9a-f]{64}$') class Lineage(BaseModel): model_config = ConfigDict( extra='forbid', ) tool_calls: list[ToolCall] data_refs: list[constr(pattern=r'^[0-9a-f]{64}$')] ledger_version: conint(ge=0, le=9007199254740991) policy_pack_version: constr(min_length=1) class Status(StrEnum): DRAFT = 'DRAFT' RULE_CHECK = 'RULE_CHECK' SIMULATION = 'SIMULATION' ENVELOPE_CHECK = 'ENVELOPE_CHECK' PENDING_HUMAN = 'PENDING_HUMAN' AUTO_APPROVED = 'AUTO_APPROVED' APPROVED = 'APPROVED' FRESH_CHECK = 'FRESH_CHECK' STALE = 'STALE' AUTHORIZED = 'AUTHORIZED' RELEASED = 'RELEASED' EXECUTING = 'EXECUTING' COMPLETED = 'COMPLETED' ROLLED_BACK = 'ROLLED_BACK' REJECTED = 'REJECTED' class Value(RootModel[constr(pattern=r'^-?\d+(\.\d+)?$')]): root: constr(pattern=r'^-?\d+(\.\d+)?$') class PricesYuanPerMwh(BaseModel): model_config = ConfigDict( extra='forbid', ) interval_minutes: Literal[15] date: constr(pattern=r'^\d{4}-\d{2}-\d{2}$') values: list[Value] = Field(..., max_length=96, min_length=96) class QuantitiesMwh(BaseModel): model_config = ConfigDict( extra='forbid', ) interval_minutes: Literal[15] date: constr(pattern=r'^\d{4}-\d{2}-\d{2}$') values: list[Value] = Field(..., max_length=96, min_length=96) class Payload(BaseModel): model_config = ConfigDict( extra='forbid', ) kind: Literal['BID'] market_date: constr(pattern=r'^\d{4}-\d{2}-\d{2}$') prices_yuan_per_mwh: PricesYuanPerMwh quantities_mwh: QuantitiesMwh expected_revenue_yuan: constr(pattern=r'^-?\d+(\.\d+)?$') class Proposal1(BaseModel): model_config = ConfigDict( extra='forbid', ) id: constr(min_length=1) timescale: Timescale originator: Originator lineage: Lineage envelope_ref: constr(min_length=1) | None digest: constr(pattern=r'^[0-9a-f]{64}$') status: Status created_at: AwareDatetime type: Literal['BID'] payload: Payload class Proposal(RootModel[Proposal1]): root: Proposal1 = Field(..., title='Proposal')