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¶
- Cadastra a empresa com Mês/Ano Abertura (ex.:
03/2026). - O sistema cria a filial padrão e as opções.
- Competência / período do sistema já refletem a abertura.
- Calendário existe para todos os meses da abertura até o encerramento do exercício corrente.
- 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, encerramento12/2026→ meses03a12de 2026. - O mês de abertura deve permanecer aberto (competência inicial).
Validação¶
- Formato:
MM/AAAA(ex.:01/2026…12/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/yyyypara outro padrão sem migração de dados.
9. Referências de código¶
ecosif-masterdata/.../company/controller/CompanyController.java—saveCompany+ bootstrapecosif-masterdata/.../company/service/CompanyBootstrapService.java— filial, opções, calendárioecosif-masterdata/.../company/service/impl/CalendarServiceImpl.java—ensureOpenCalendarsBetweenecosif-database/.../company/model/CompanyOptions.javaecosif-angular/.../companydetails/form/companydetailForm.component.*- Plano:
.internal_docs/tasks-plan/in-progress/20260826_MD-ABERTURA_empresa-mes-ano-calendario.md