contracts
Papel na engine
contracts define o idioma de integração da forecast-engine com o restante do produto. Como componente central, a engine depende desses contratos para evitar ambiguidades de payload e quebrar menos em evolução de versões.
Visão geral
Os contratos em src/contracts são definidos com msgspec.Struct e forbid_unknown_fields=True.
Benefícios:
- validação rígida de payload;
- serialização previsível;
- fronteira estável entre serviços.
contracts.common
Tipos e enums:
PeriodStartContract = datetimecom timezone obrigatórioTimeGrainContract:daily,weekly,monthlyUomCodeValueContract:EA,KG,L,BOX,M,M2,M3
Structs:
OrganizationIdContract { value: UUID }ExternalKeyContract { system: str, value: str }UomCodeContract { value: UomCodeValueContract }DemandQuantityContract { value: str, uom: UomCodeContract }
contracts.demand
SeriesKeyContractorganization_id,sku_id,store_id,sku_key,store_key,grain
DemandObservationContractid,period_start,quantity,source,created_at
DemandSeriesContractid,key,observations,created_at
contracts.modeling
Enums:
MetricDirectionContract:min,maxModelVersionStatusContract:draft,active,deprecatedModelInstanceStatusContract:draft,active,deprecated
Structs de especificação:
ModelNameContractWindowSpecContractLagSpecContractHorizonSpecContractMetricSpecContractEvaluatorSpecContractStrategySpecContract
Structs de estado:
ModelVersionContractModelInstanceContractModelDefinitionContract
Campos operacionais relevantes:
ModelInstanceContract.model_versionModelInstanceContract.registered_model_nameModelInstanceContract.registered_model_versionModelInstanceContract.serving_aliasModelInstanceContract.promoted_at
contracts.forecasting
Enum:
ForecastRunStatusContract:requested,running,completed,failed
Structs:
ForecastPointValueContractPredictionIntervalContractForecastPointContractForecastRunContract
contracts.operations
Enum:
PromotionAuditStatusContract:pending,completed,failed
Structs:
PromotionAuditRecordContract
API pública agregada
contracts.__init__ exporta os contratos mais usados para import direto, incluindo:
- demanda (
DemandSeriesContract,SeriesKeyContract, …) - modelagem (
ModelDefinitionContract,StrategySpecContract, …) - previsão (
ForecastRunContract,ForecastPointContract, …) - tipos comuns (
OrganizationIdContract,TimeGrainContract,UomCodeContract)
Boas práticas de integração
- Validar payload de entrada com
msgspec.json.decode(..., type=Contrato). - Persistir valores monetários/quantitativos como string decimal nos contratos.
- Enviar sempre
datetimecom timezone (Z/UTC). - Não enviar campos extras, pois serão rejeitados.