Fluxos do Sistema - ecosif-masterdata
Visão Geral
Este documento descreve os principais fluxos de execução do sistema ecosif-masterdata.
1. Fluxo de Criação de Empresa
sequenceDiagram
participant C as Cliente
participant CC as CompanyController
participant CS as CompanyService
participant IS as IntegrationService
participant CR as CompanyRepository
participant DB as Database
C->>CC: POST /company<br/>{name, cnpj, zipCode}
CC->>CC: Validar DTO (Bean Validation)
CC->>CS: save(companyDTO)
CS->>IS: validateCNPJ(cnpj) [opcional]
IS-->>CS: CNPJ válido
CS->>CR: existsByCnpj(cnpj)
CR->>DB: SELECT COUNT(*) WHERE cnpj = ?
DB-->>CR: count
CR-->>CS: boolean
alt CNPJ já existe
CS-->>CC: Exception (CNPJ duplicado)
CC-->>C: 409 Conflict
else CNPJ não existe
CS->>CS: Criar entidade Company
CS->>CR: save(company)
CR->>DB: INSERT INTO gr_empresa ...
DB-->>CR: Company (com ID)
CR-->>CS: Company
CS->>CS: Mapear para DTO
CS-->>CC: CompanyDTO
CC-->>C: 201 Created + CompanyDTO
end
2. Fluxo de Criação de Filial
sequenceDiagram
participant C as Cliente
participant BC as BranchController
participant BS as BranchService
participant CR as CompanyRepository
participant BR as BranchRepository
participant COS as CompanyOptionsService
participant DB as Database
C->>BC: POST /branch<br/>{company, branch, name}
BC->>BS: save(branchDTO)
BS->>CR: existsById(company)
CR->>DB: SELECT * WHERE id = ?
DB-->>CR: Company ou null
CR-->>BS: boolean
alt Empresa não existe
BS-->>BC: Exception
BC-->>C: 404 Not Found
else Empresa existe
BS->>BR: findByCompanyAndBranch(company, branch)
BR->>DB: SELECT * WHERE company = ? AND branch = ?
DB-->>BR: Branch ou null
BR-->>BS: Branch ou null
alt Código de filial já existe
BS-->>BC: Exception (Código duplicado)
BC-->>C: 409 Conflict
else Código não existe
BS->>BS: Criar entidade Branch
BS->>BR: save(branch)
BR->>DB: INSERT INTO gr_filial ...
DB-->>BR: Branch (com ID)
BR-->>BS: Branch
Note over BS: Criar registros necessários
BS->>COS: createDefaultOptions(company, branch)
COS->>DB: INSERT INTO ct_controle ...
DB-->>COS: CompanyOptions criado
BS->>BS: Mapear para DTO
BS-->>BC: BranchDTO
BC-->>C: 201 Created + BranchDTO
end
end
3. Fluxo de Criação de Conta no Plano de Contas
sequenceDiagram
participant C as Cliente
participant COAC as ChartOfAccountsController
participant COAS as ChartOfAccountsService
participant COAR as ChartOfAccountsRepository
participant DB as Database
C->>COAC: POST /chartOfAccounts<br/>{plan, cdAccounting, ...}
COAC->>COAS: save(chartOfAccountsDTO, confirmed)
COAS->>COAS: Validar código único
COAS->>COAR: findByPlanAndCdAccounting(plan, cdAccounting)
COAR->>DB: SELECT * WHERE plan = ? AND cd_accounting = ?
DB-->>COAR: ChartOfAccounts ou null
COAR-->>COAS: ChartOfAccounts ou null
alt Código já existe
COAS-->>COAC: Exception
COAC-->>C: 406 Not Acceptable
else Código não existe
COAS->>COAS: Extrair conta pai do código
alt Tem conta pai
COAS->>COAR: findByPlanAndCdAccounting(plan, parentAcc)
COAR->>DB: SELECT * WHERE plan = ? AND cd_accounting = ?
DB-->>COAR: ChartOfAccounts ou null
COAR-->>COAS: ChartOfAccounts ou null
alt Conta pai não existe
COAS-->>COAC: Exception (Pai não encontrado)
COAC-->>C: 406 Not Acceptable
else Conta pai existe
alt Conta pai tem filhos E não confirmado
COAS-->>COAC: Exception (Pai tem filhos)
COAC-->>C: 406 Not Acceptable
else OK
COAS->>COAS: Calcular nível e criar conta
COAS->>COAR: save(account)
COAR->>DB: INSERT INTO ct_plano_contas ...
DB-->>COAR: ChartOfAccounts
COAR-->>COAS: ChartOfAccounts
COAS-->>COAC: ChartOfAccountsDTO
COAC-->>C: 201 Created
end
end
else Conta raiz
COAS->>COAS: Criar conta raiz
COAS->>COAR: save(account)
COAR->>DB: INSERT INTO ct_plano_contas ...
DB-->>COAR: ChartOfAccounts
COAR-->>COAS: ChartOfAccounts
COAS-->>COAC: ChartOfAccountsDTO
COAC-->>C: 201 Created
end
end
4. Fluxo de Criação de Lançamento
sequenceDiagram
participant C as Cliente
participant EC as EntryController
participant ES as EntryService
participant DS as DocumentService
participant CS as CalendarService
participant COAS as ChartOfAccountsService
participant ER as EntryRepository
participant DB as Database
C->>EC: POST /entry<br/>{documentId, account, history, debit, credit}
EC->>ES: save(entryDTO)
ES->>DS: findById(documentId)
DS->>DB: SELECT * FROM ct_documento WHERE id = ?
DB-->>DS: Document
DS-->>ES: Document
alt Documento não existe
ES-->>EC: Exception
EC-->>C: 404 Not Found
else Documento existe
ES->>ES: Obter Batch do Documento
ES->>CS: validateDay(company, branch, day, month, year)
CS->>DB: SELECT * FROM ct_calendario WHERE ...
DB-->>CS: Calendar
CS-->>ES: boolean (dia disponível)
alt Dia não disponível
ES-->>EC: Exception
EC-->>C: 417 Expectation Failed
else Dia disponível
ES->>COAS: findByPlanAndCdAccounting(plan, account)
COAS->>DB: SELECT * FROM ct_plano_contas WHERE ...
DB-->>COAS: ChartOfAccounts
COAS-->>ES: ChartOfAccounts
alt Conta não existe
ES-->>EC: Exception
EC-->>C: 400 Bad Request
else Conta existe
ES->>ES: Criar entidade Entry
ES->>ER: save(entry)
ER->>DB: INSERT INTO ct_lancamento ...
DB-->>ER: Entry (com ID)
ER-->>ES: Entry
ES->>ES: Mapear para DTO
ES-->>EC: EntryDTO
EC-->>C: 201 Created + EntryDTO
end
end
end
5. Fluxo de Consolidação Contábil
sequenceDiagram
participant C as Cliente
participant CC as ConsolidationController
participant CS as ConsolidationService
participant ES as EntryService
participant ABS as AccountBalanceService
participant DB as Database
C->>CC: POST /runconsolidation<br/>{company, branch, month, year}
CC->>CS: runConsolidation(dto)
CS->>CS: Validar período fechado
alt Período não fechado
CS-->>CC: Exception
CC-->>C: 400 Bad Request
else Período fechado
CS->>CS: Iniciar processamento assíncrono
CS-->>CC: GenericResponse (sucesso)
CC-->>C: 200 OK
Note over CS,DB: Processamento em background
CS->>ES: findAllByCompanyAndBranchAndMonthAndYear(...)
ES->>DB: SELECT * FROM ct_lancamento WHERE ...
DB-->>ES: List<Entry>
ES-->>CS: List<Entry>
loop Para cada entrada
CS->>ABS: calculateBalance(entry)
ABS->>DB: UPDATE ct_saldos SET ...
DB-->>ABS: Balance atualizado
end
CS->>CS: Atualizar saldos consolidados
CS->>DB: UPDATE ct_saldos_mensais ...
DB-->>CS: Consolidado
end
6. Fluxo de Validação de Token JWT
sequenceDiagram
participant C as Cliente
participant TAF as TokenAuthenticationFilter
participant TP as TokenProvider
participant US as UserService
participant UR as UserRepository
participant DB as Database
participant SC as SecurityContext
participant E as Endpoint
C->>TAF: GET /companies<br/>Authorization: Bearer <token>
TAF->>TAF: Extrair token do header
alt Token não encontrado
TAF-->>C: 401 Unauthorized
else Token encontrado
TAF->>TP: validateToken(token)
alt Token inválido
TP-->>TAF: false
TAF-->>C: 401 Unauthorized
else Token válido
TP-->>TAF: true
TAF->>TP: getUserIdFromToken(token)
TP-->>TAF: username
TAF->>US: findUserByUsername(username)
US->>UR: findByUsername(username)
UR->>DB: SELECT * FROM gr_user WHERE username = ?
DB-->>UR: User
UR-->>US: User
US-->>TAF: User
TAF->>TAF: Criar Authentication
TAF->>SC: setAuthentication(authentication)
TAF->>E: Continua para endpoint
E->>E: Processa requisição
E-->>C: 200 OK + Response
end
end
Resumo dos Fluxos
| Fluxo | Endpoint | Descrição |
|---|---|---|
| Criação de Empresa | POST /company |
Cria empresa com validação de CNPJ |
| Criação de Filial | POST /branch |
Cria filial e registros dependentes |
| Criação de Conta | POST /chartOfAccounts |
Cria conta no plano com validação de hierarquia |
| Criação de Lançamento | POST /entry |
Cria lançamento com validações |
| Consolidação | POST /runconsolidation |
Processa consolidação contábil |
| Validação Token | Todos os endpoints protegidos | Validação automática de JWT |