Pular para conteúdo

Regras de Negócio - ecosif-masterdata

Regras Gerais

1. Empresas

RN-001: CNPJ Único

  • Regra: Cada empresa deve ter um CNPJ único no sistema
  • Aplicação: Validar antes de criar/atualizar empresa
  • Código de Erro: 409 Conflict

RN-002: Validação de CNPJ

  • Regra: CNPJ deve ser válido (formato e dígitos verificadores)
  • Aplicação: Validar formato e dígitos antes de persistir

2. Filiais

RN-003: Código de Filial Único por Empresa

  • Regra: Cada filial deve ter um código único dentro da mesma empresa
  • Aplicação: Validar antes de criar filial
  • Código de Erro: 409 Conflict

RN-004: Empresa Obrigatória

  • Regra: Filial deve pertencer a uma empresa existente
  • Aplicação: Validar existência da empresa antes de criar filial

RN-005: Criação Automática de Dependências

  • Regra: Ao criar filial, criar automaticamente:
  • CompanyOptions (ct_controle)
  • QuotaCalculationConfiguration (se aplicável)
  • FundSettings (se aplicável)
  • Aplicação: Implementado no BranchController

RN-005b: Bootstrap na criação de empresa (createBranchAndOptions)

  • Regra: Ao criar empresa com filial/opções automáticas, o Mês/Ano Abertura (initialYearMonth, MM/yyyy) define:
  • Mes/Ano Base = abertura
  • Mes/Ano Atual (competência / período do sistema) = abertura
  • Mes/Ano Balanço = 12/{ano corrente}
  • Mes/Ano Encerramento = 12/{ano corrente}
  • Calendários (ct_calendario) abertos para cada mês de abertura até encerramento (inclusive)
  • Validação: abertura obrigatória quando o flag está ativo; formato MM/yyyy; abertura não pode ser posterior a 12 do ano corrente
  • Aplicação: CompanyController.saveCompany + CalendarService.ensureOpenCalendarsBetween

3. Plano de Contas

RN-006: Hierarquia Obrigatória

  • Regra: Conta filha deve ter conta pai existente
  • Aplicação: Validar existência da conta pai antes de criar filha
  • Código de Erro: 406 Not Acceptable

RN-007: Código Contábil Único por Plano

  • Regra: Cada código contábil deve ser único dentro do mesmo plano
  • Aplicação: Validar antes de criar conta
  • Código de Erro: 406 Not Acceptable

RN-008: Conta Pai não pode ter Filhos

  • Regra: Se conta pai tiver filhos, não pode ser alterada para ter mais filhos
  • Aplicação: Validar antes de adicionar filhos a conta pai existente
  • Parâmetro: confirmed=true para forçar

RN-009: Nível Hierárquico

  • Regra: Nível da conta = número de níveis no código contábil (ex: "1.2.3" = nível 3)
  • Aplicação: Calcular automaticamente a partir do código

RN-010: Código Reduzido

  • Regra: Código reduzido deve ter pelo menos 6 dígitos
  • Aplicação: Preencher com zeros à esquerda se necessário

4. Documentos

RN-011: Limite de Documentos por Lote

  • Regra: Número de documentos não pode exceder informedDocuments do lote
  • Aplicação: Validar antes de criar documento
  • Código de Erro: 406 Not Acceptable

RN-012: Validação de Dia no Calendário

  • Regra: Dia do documento deve estar disponível no calendário
  • Aplicação: Validar antes de criar documento
  • Código de Erro: 417 Expectation Failed

RN-013: Dia de Referência do Lote

  • Regra: Se lote não tiver referenceDay, usar dia do primeiro documento criado
  • Aplicação: Atualizar lote quando primeiro documento for criado

5. Lançamentos

RN-014: Validação de Conta

  • Regra: Conta do lançamento deve existir no plano de contas
  • Aplicação: Validar antes de criar lançamento

RN-015: Validação de Histórico

  • Regra: Histórico deve existir (se não for livre)
  • Aplicação: Validar antes de criar lançamento

RN-016: Partidas Dobradas

  • Regra: Soma de débitos deve igualar soma de créditos no documento
  • Aplicação: Validar antes de fechar documento

5.1 Encerramento de contas de resultado

RN-016A: Lote único de Encerramento

  • Regra: A rotina de encerramento definitivo cria um único lote por empresa/filial com batchType = "2" (Encerramento) e um documento, com N lançamentos lógicos (um por conta de resultado zerada).
  • Aplicação: ClosureControllerold.encerramentoDefinitivo — naturezas 2 / 3 / 6 / 7.
  • Refs: MD-ENCERRAMENTO / Issues #34–#38

RN-016B: Contrapartida D/C no mesmo número

  • Regra: Cada conta de resultado gera duas linhas físicas (D e C) com o mesmo número de lançamento e contrapartida cruzada; histórico igual nos dois lados; conta partida conforme config da rotina.
  • Aplicação: Tela de lançamentos monta o par D+C a partir do mesmo código entry.

RN-016C: Consolidação manual após encerramento

  • Regra: O encerramento não consolida automaticamente; a mensagem de sucesso orienta o usuário a consolidar o dia/mês.
  • Aplicação: ClosureResultDTO.message + feedback no formulário Angular de encerramento.

RN-016D: Bloqueio de reexecução

  • Regra: Não permite novo encerramento se o período já estiver encerrado.
  • Aplicação: Validação na rotina de encerramento definitivo.

6. Calendários

RN-017: Período Único

  • Regra: Cada empresa/filial/mês/ano deve ter um único registro de calendário
  • Aplicação: Validar antes de criar/atualizar

RN-018: Validação de Abertura de Mês

  • Regra: Mês anterior deve estar fechado antes de abrir novo mês
  • Aplicação: Validar antes de abrir mês

RN-019: Validação de Fechamento

  • Regra: Não pode fechar mês com lançamentos pendentes
  • Aplicação: Validar antes de fechar mês

7. Consolidação

RN-020: Consolidação Assíncrona

  • Regra: Consolidação deve ser processada de forma assíncrona
  • Aplicação: Retornar resposta imediata e processar em background

RN-021: Período Fechado

  • Regra: Consolidação só pode ser executada para períodos fechados
  • Aplicação: Validar antes de iniciar consolidação

8. Multi-Tenancy

RN-022: Isolamento por Empresa/Filial

  • Regra: Dados devem ser isolados por empresa e filial
  • Aplicação: Incluir filtros company e branch em consultas

RN-023: Acesso por Contexto

  • Regra: Usuário só pode acessar empresas/filiais às quais tem permissão
  • Aplicação: Validar permissões através de UserCompanyBranchService

Validações Específicas

Empresas

  • CNPJ obrigatório e válido
  • Nome obrigatório
  • CEP opcional, mas deve ser válido se fornecido

Filiais

  • Empresa obrigatória e deve existir
  • Código de filial obrigatório e único na empresa
  • Nome obrigatório
  • IBGE Code padrão: "000000" se não fornecido

Plano de Contas

  • Plano obrigatório
  • Código contábil obrigatório e único no plano
  • Descrição obrigatória
  • Conta pai deve existir (se não for conta raiz)
  • Tipo padrão: "01"
  • Nível calculado automaticamente

Documentos

  • Lote obrigatório e deve existir
  • Número do documento obrigatório
  • Dia deve estar disponível no calendário (se fornecido)
  • Limite de documentos por lote

Lançamentos

  • Documento obrigatório e deve existir
  • Conta obrigatória e deve existir no plano de contas
  • Histórico obrigatório
  • Valor (débito ou crédito) obrigatório
  • Partidas dobradas no documento

Observações Importantes

  1. Transações: Operações críticas são transacionais
  2. Validações: Validações ocorrem em múltiplas camadas (DTO, Service, Database)
  3. Permissões: Alguns endpoints verificam permissões específicas
  4. Multi-tenancy: Sempre considerar empresa e filial nas validações