Pular para conteúdo

Criação de empresa — Mês/Ano Abertura, Opções e Calendário

Documento técnico e funcional · Plano: MD-ABERTURA · Milestone GitHub (após sync)

1. Objetivo funcional

Na criação de uma empresa no eCosif, o usuário informa o Mês/Ano de Abertura. Esse valor inicializa as Opções da Empresa (ct_controle) e dispara a geração do calendário (ct_calendario) do período inicial, de modo que a competência do sistema já nasça coerente com a abertura contábil.

Resultado esperado para o usuário

  1. Cadastra a empresa com Mês/Ano Abertura (ex.: 03/2026).
  2. O sistema cria a filial padrão e as opções.
  3. Competência / período do sistema já refletem a abertura.
  4. Calendário existe para todos os meses da abertura até o encerramento do exercício corrente.
  5. Em Opções da Empresa, Base / Atual / Balanço / Encerramento já vêm preenchidos (podem ser ajustados depois, conforme política).

2. Regras de negócio

Campo (Opções) Origem na criação Exemplo (abertura 03/2026, ano corrente 2026)
Mês/Ano Abertura Informado no cadastro 03/2026
Mes/Ano Base = Abertura 03/2026
Mes/Ano Atual (competência) = Abertura (= Base) 03/2026
Mes/Ano Balanço Dezembro do ano corrente 12/2026
Mes/Ano Encerramento Dezembro do ano corrente 12/2026

Até o fim do bootstrap: Base = Atual = Abertura.

Calendário

  • Criar um mês de calendário para cada mês do intervalo [Abertura … Encerramento] (inclusive).
  • Ex.: abertura 03/2026, encerramento 12/2026 → meses 03 a 12 de 2026.
  • O mês de abertura deve permanecer aberto (competência inicial).

Validação

  • Formato: MM/AAAA (ex.: 01/202612/2026).
  • Regra vigente no backend: abertura não posterior a 12/<ano corrente> (encerramento fixo no ano “now”). Reavaliar se abertura em ano futuro for requisito de negócio.

3. Modelo de dados

ct_controle (CompanyOptions)

Coluna Campo Java Papel
anomesatual currentYearMonth Competência / mês atual do sistema
anomesbase baseYearMonth Mês/ano base
anomesbalanco balanceYearMonth Mês/ano balanço
anomesEncerra closingYearMonth Mês/ano encerramento
usacalenrel / veCalendario useCalendar / usesCalendar Flags de uso de calendário

Formato persistido no bootstrap: MM/yyyy.

ct_calendario (Calendar)

Chave lógica: empresa + filial + ano + mês (+ indicador). Geração via CalendarService.ensureOpenCalendarsBetween.

gr_empresa / filial

Cadastro cadastral; competência não fica na empresa — fica em ct_controle por empresa/filial.

4. Fluxo técnico (as-is e to-be)

Angular (POST /company)
  body: CompanyDTO + createBranchAndOptions + initialYearMonth
       │
       ▼
CompanyController.saveCompany
  1. Persiste gr_empresa
  2. Se createBranchAndOptions:
       - valida initialYearMonth
       - cria filial 000000001 (se necessário)
       - cria ct_controle (Base=Atual=Abertura; Balanço=Encerramento=12/ano atual)
       - ensureOpenCalendarsBetween(abertura, encerramento)
       - demais seeds (parametro fundo, etc.)
       │
       ▼
Angular: atualizar contexto (empresa, filial, competência = abertura)

Situação atual (gap)

Item Status
Backend bootstrap com createBranchAndOptions + initialYearMonth Implementado (CompanyBootstrapService)
Geração de calendário em faixa Implementado (ensureOpenCalendarsBetween)
Campo UI “Mês/Ano Abertura” Obrigatório quando bootstrap ligado; checkbox default true (MD-ABERTURA)
Flags useCalendar / usesCalendar após gerar calendário true no bootstrap (MD-ABERTURA)
Refresh da competência no header após create Preferência pela empresa criada + currentYearMonth da abertura (MD-ABERTURA)
Bootstrap atômico (falha parcial) @Transactional + rollback se filial/opções/calendário falharem; FundSettings/saldos ainda best-effort

5. Contratos de API

Método Path Uso
POST /company Criação; body inclui createBranchAndOptions, initialYearMonth
GET/POST/PUT /company/options… Manutenção posterior das opções (não substitui o bootstrap)

Payload relevante (create):

{
  "company": "000000001",
  "fiscalName": "…",
  "createBranchAndOptions": true,
  "initialYearMonth": "03/2026"
}

6. UI (Angular)

Tela Rota / componente
Cadastro empresa company_detail · companydetailForm
Opções empresa company_options/:id · companysettingForm

Campos no create: createBranchAndOptions, initialYearMonth (CompanyDetail).

Diretriz to-be: Abertura obrigatória no fluxo que operacionaliza a empresa; preferir checkbox ligado por padrão ou bootstrap sempre ligado na criação.

7. Critérios de aceite (homolog)

Checklist oficial: docs/release-notes/MD-ABERTURA.6-checklist-homolog.md (#65 — concluído com evidência UT).

Criar empresa com abertura 03/2026 (ano corrente 2026):

# Checagem Esperado
1 ct_controle.anomesbase 03/2026
2 ct_controle.anomesatual 03/2026
3 ct_controle.anomesbalanco 12/2026
4 ct_controle.anomesEncerra 12/2026
5 ct_calendario 1 linha/mês de 03/2026 a 12/2026
6 Header / competência UI 03/2026
7 Tela Opções Empresa mesmos valores

Casos-limite: abertura 12/AAAA (1 mês); abertura em ano anterior (faixa longa até 12/ano atual); abertura inválida / futura conforme regra.

8. Fora de escopo (neste plano)

  • Alterar regras de abertura de mês operacional no moviments (exceto consumo da competência já criada).
  • Recriar calendário histórico em massa para empresas antigas (pode ser tarefa futura).
  • Mudar formato MM/yyyy para outro padrão sem migração de dados.

9. Referências de código

  • ecosif-masterdata/.../company/controller/CompanyController.javasaveCompany + bootstrap
  • ecosif-masterdata/.../company/service/CompanyBootstrapService.java — filial, opções, calendário
  • ecosif-masterdata/.../company/service/impl/CalendarServiceImpl.javaensureOpenCalendarsBetween
  • ecosif-database/.../company/model/CompanyOptions.java
  • ecosif-angular/.../companydetails/form/companydetailForm.component.*
  • Plano: .internal_docs/tasks-plan/in-progress/20260826_MD-ABERTURA_empresa-mes-ano-calendario.md