domain.demand
Papel na engine
domain.demand é a fonte de verdade do histórico que alimenta todo o ciclo inteligente. As invariantes desta camada evitam que dados inválidos contaminem seleção de modelo e previsão em produção.
Módulo: domain.demand.model
SeriesKey
Identidade de série de demanda.
Campos:
organization_id: OrganizationIdsku_id: UUIDstore_id: UUIDsku_key: ExternalKeystore_key: ExternalKeygrain: TimeGrain
Invariantes:
sku_idestore_idnão podem ser UUID nulo.
DemandObservation
Representa observação unitária de demanda.
Campos:
period_start: PeriodStartquantity: DemandQuantitysource: strid: UUID(autogerado por default)created_at: datetime(UTC por default)
Invariantes:
idnão pode ser nulo;sourcenão pode ser vazio (após trim).
DemandSeries
Agregado de observações para uma SeriesKey.
Campos principais:
key: SeriesKeyid: UUIDcreated_at: datetime
Propriedades:
observations -> tuple[DemandObservation, ...]uom -> str | None
Métodos:
DemandSeries.create(...) -> DemandSeries
Factory com parâmetros opcionais para reconstrução de estado.
record_observation(observation) -> None
Adiciona observação, valida invariantes e mantém ordenação por período.
Falhas possíveis:
DuplicatePeriodErrorpara período repetido;InvariantViolationpara UOM inconsistente;UnsupportedGrainErrorpara incompatibilidade período/grão.
replace_observation(observation) -> None
Substitui observação do mesmo período; falha se período não existir.
remove_observation(period_start) -> None
Remove observação por período; falha se período não existir.
history_window(start, end) -> tuple[DemandObservation, ...]
Retorna observações no intervalo fechado [start, end].
Falha quando start > end.
Comportamentos relevantes
- observações são sempre ordenadas internamente;
- para granularidade horária,
period_startdeve serdatetime; - para granularidades diária/semanal/mensal, aceita
dateoudatetime.