domain.forecasting
Papel na engine
domain.forecasting modela o ciclo de execução de previsão como uma máquina de estados explícita. Isso garante que o produto preserve rastreabilidade e degradação controlada diante de falhas.
Módulo: domain.forecasting.model
ForecastPointValue
Campos:
value: Decimaluom: UomCodeperiod_start: PeriodStart
Invariante:
value >= 0.
PredictionInterval
Campos:
lower: Decimalupper: Decimalconfidence: Decimal
Invariantes:
lower <= upperconfidenceem(0, 1)
ForecastPoint
Campos:
period_start: PeriodStartvalue: ForecastPointValueinterval: PredictionInterval | None
Invariante:
period_startdo ponto deve ser igual aoperiod_startdevalue.
ForecastRunStatus
REQUESTEDRUNNINGCOMPLETEDFAILED
ForecastRun
Campos principais:
- identificação:
id,organization_id,model_definition_id - contexto do modelo:
model_version,series_key,horizon_spec - unidade esperada:
expected_uom - estado:
status,points,failure_reason - metadata de execução:
executed_model_version,fallback_from_version,degraded
Validações de inicialização:
idemodel_definition_idnão nulos;model_version > 0;series_key.organization_idigual aorganization_id;series_key.grainigual ahorizon_spec.grain.
Propriedade
points -> tuple[ForecastPoint, ...]
Métodos de ciclo de vida
start() -> None
Permite transição para RUNNING a partir de REQUESTED ou RUNNING.
fail(reason: str) -> None
Marca run como FAILED com motivo não vazio.
set_executed_model_version(version: int) -> None
Define versão realmente executada. Se igual à model_version, limpa metadata de fallback degradado.
mark_degraded_fallback(fallback_from_version, executed_model_version) -> None
Marca execução degradada com fallback.
Regras:
- ambas versões > 0;
- versões devem ser diferentes.
record_point(point: ForecastPoint) -> None
Adiciona ponto e valida:
- status não finalizado;
- UOM do ponto igual a
expected_uom; - sequência temporal monotônica com
stepdo horizonte; - total de pontos não excede
horizon_spec.periods.
set_points(points: list[ForecastPoint]) -> None
Substitui todos os pontos com validação equivalente a record_point.
complete(points: list[ForecastPoint] | None = None) -> None
Finaliza run como COMPLETED se:
- não estiver
FAILED; - houver exatamente
horizon_spec.periodspontos; executed_model_versionestiver preenchido;- sequência de pontos e UOM forem válidas.
Metadata de fallback
Validação interna:
degraded=Trueexigefallback_from_versioneexecuted_model_version;degraded=Falseproíbefallback_from_version.