Camada shared
Papel da camada
domain.shared concentra as definições que garantem linguagem comum em todo o domínio. Sem essa camada, cada contexto poderia interpretar tempo, unidade e erro de maneira diferente.
Objetos e enums
OrganizationId
Representa o escopo organizacional da operação.
Regras:
- valor obrigatório;
- UUID nulo é inválido.
Impacto de negócio:
- impede que séries, modelos e runs sejam criados sem contexto de organização.
ExternalKey
Chave de integração com sistemas externos (ERP, WMS, etc.).
Regras:
systemobrigatório, normalizado para minúsculo;valueobrigatório, normalizado para maiúsculo.
Impacto de negócio:
- reduz erro por inconsistência de casing em integrações.
DemandQuantity
Quantidade observada com unidade (UOM).
Regras:
- valor decimal deve ser
>= 0.
Impacto de negócio:
- impede entrada de demanda negativa sem tratamento explícito.
TimeGrain
Granularidades suportadas no domínio:
DAILYWEEKLYMONTHLY
UomCode
Unidades suportadas:
EA,KG,L,BOX,M,M2,M3
Regras temporais comuns
Compatibilidade period_start x grain
Função: ensure_period_matches_grain(period_start, grain).
Regras:
DAILY,WEEKLY,MONTHLYaceitamdateoudatetime.
Cálculo de próximo período
Função: next_period_start(period_start, grain, step=1).
Regras:
stepprecisa ser> 0;- avanço temporal respeita granularidade;
- no caso mensal, ajusta para último dia válido do mês alvo.
Exemplo de ajuste mensal:
31/01 + 1 mês->28/02ou29/02(ano bissexto).
Taxonomia de erros
DomainError
Classe base de erros do domínio.
InvariantViolation
Erro padrão para quebra de regra de negócio.
DuplicatePeriodError
Especialização para tentativa de inserir período repetido em série.
UnsupportedGrainError
Especialização para tipo temporal incompatível com granularidade.
InvalidModelSpecError
Especialização para configuração inválida de modelagem.
Princípio operacional
A camada shared não orquestra fluxos. Ela define o contrato mínimo para que os outros contextos possam operar de forma consistente e previsível.