🏗️ Arquitetura - ecosif-moviments

📋 Visão Geral

ecosif-moviments é um microserviço Spring Boot responsável pelo gerenciamento de lançamentos contábeis no sistema eCosif. Ele processa lotes, documentos e lançamentos contábeis, além de realizar importações, consolidações e cálculos de cotas.


🎯 Objetivo do Serviço


🏛️ Arquitetura em Camadas

┌─────────────────────────────────────────────────────────┐
│                  Controllers (REST)                      │
│  • BatchController • DocumentController                 │
│  • EntryController • ConsolidationController            │
│  • BatchImportController • ... (7 mais)                 │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│                    Services (Lógica)                     │
│  • BatchService • DocumentService                       │
│  • EntryService • ConsolidationService                  │
│  • BatchImportService • ... (25 mais)                   │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│                 Repositories (JPA)                       │
│  • BatchRepository • DocumentRepository                 │
│  • EntryRepository • ... (29 mais)                      │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│            ecosif-database (Biblioteca)                  │
│  • Batch • Document • Entry                             │
│  • Company • Branch • ChartOfAccounts                   │
│  • ... (52+ entidades)                                  │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│                 PostgreSQL Database                      │
│  • Tabelas contábeis                                    │
│  • Históricos • Temporárias                             │
└─────────────────────────────────────────────────────────┘

📦 Estrutura de Pacotes

io.ecosif.moviments
├── company/
│   ├── controller/      # 11 controllers REST
│   │   ├── BatchController.java
│   │   ├── DocumentController.java
│   │   ├── EntryController.java
│   │   ├── BatchImportController.java
│   │   ├── ConsolidationController.java
│   │   ├── MonthOpeningController.java
│   │   ├── PurgingController.java
│   │   ├── CalendarController.java
│   │   ├── TaxQuotaCalculationController.java
│   │   ├── ImportReportController.java
│   │   └── AdminController.java
│   ├── service/         # 29 services
│   │   ├── BatchService.java
│   │   ├── DocumentService.java
│   │   ├── EntryService.java
│   │   ├── ConsolidationService.java
│   │   ├── BatchImportService.java
│   │   └── ... (24 mais)
│   ├── repository/      # 31 repositories JPA
│   └── dto/             # 32 DTOs
├── config/              # Configurações Spring
│   ├── OpenApiConfig.java
│   ├── WebSecurityConfig.java
│   ├── WebConfig.java
│   └── ...
├── security/            # Segurança e autenticação
├── importreport/        # Relatórios de importação
└── user/                # Usuários

🔄 Fluxo de Processamento

Fluxo 1: Criar Lançamento

sequenceDiagram
    participant Client as Cliente
    participant Controller as EntryController
    participant Service as EntryService
    participant Validator as Validador
    participant Repository as EntryRepository
    participant DB as PostgreSQL

    Client->>Controller: POST /entry
    Controller->>Service: createEntry(entryDTO)
    Service->>Service: Valida partidas dobradas
    Service->>Service: Valida conta contábil
    Service->>Service: Valida documento
    Service->>Repository: save(entry)
    Repository->>DB: INSERT INTO ct_lancamento
    DB-->>Repository: Entry salvo
    Repository-->>Service: Entry entity
    Service->>Service: Transforma em DTO
    Service-->>Controller: EntryDTO
    Controller-->>Client: 201 Created

Fluxo 2: Importação de Arquivo

sequenceDiagram
    participant Client as Cliente
    participant Controller as BatchImportController
    participant Service as BatchImportService
    participant Parser as Parser CSV/IPL
    participant Repository as Repository
    participant S3 as AWS S3
    participant DB as PostgreSQL

    Client->>Controller: POST /batch/{id}/import
    Controller->>Service: importEntries(batchId, file)
    Service->>Parser: parseFile(file)
    Parser-->>Service: List<EntryDTO>
    Service->>Service: Valida cada entrada
    Service->>Repository: saveAll(entries)
    Repository->>DB: INSERT múltiplos
    Service->>S3: uploadFile(file, imported/)
    S3-->>Service: Upload OK
    Service-->>Controller: ImportResultDTO
    Controller-->>Client: 200 OK

Fluxo 3: Consolidação Contábil

sequenceDiagram
    participant Client as Cliente
    participant Controller as ConsolidationController
    participant Service as ConsolidationService
    participant Async as @Async
    participant Repository as Repository
    participant DB as PostgreSQL

    Client->>Controller: POST /runconsolidation
    Controller->>Service: runConsolidation(dto)
    Service->>Async: executeAsync()
    Async->>Service: Processa consolidação
    Service->>Repository: Busca lançamentos
    Service->>Service: Calcula saldos
    Service->>Repository: Atualiza saldos
    Repository->>DB: UPDATE ct_plano_saldo
    Service->>Service: Atualiza calendário
    Service-->>Async: Consolidação completa
    Async-->>Client: 200 OK (async)

🔧 Tecnologias e Dependências

Core

API e Documentação

Segurança

Utilitários

AWS

Monitoramento

Migrações


📊 Componentes Principais

Controllers (11)

Controller Responsabilidade
BatchController CRUD de lotes
DocumentController CRUD de documentos
EntryController CRUD de lançamentos
BatchImportController Importação de arquivos CSV
ImportReportController Importação de arquivos IPL
ConsolidationController Consolidação contábil
MonthOpeningController Abertura de mês
CalendarController Operações de calendário
TaxQuotaCalculationController Cálculo de cotas
PurgingController Limpeza de dados
AdminController Operações administrativas

Services (29)

Principais services:

Repositories (31)

Repositórios JPA para todas as entidades, usando Spring Data JPA.


🔐 Segurança

Autenticação JWT

Autorização


📈 Performance

Otimizações

Cache


🔄 Processamento Assíncrono

Operações assíncronas:

Configurado via @EnableAsync e @Async.


📝 Design Patterns

  1. Repository Pattern - Abstração de acesso a dados
  2. Service Layer - Lógica de negócio isolada
  3. DTO Pattern - Separação entre camadas
  4. Factory Pattern - Criação de entidades complexas
  5. Strategy Pattern - Diferentes estratégias de importação

🗄️ Integração com Banco de Dados

Entidades Principais

Migrações


🌐 Integração com AWS S3

Uso


📊 Monitoramento

Health Checks

Métricas

Logs


Última Atualização: 2025-11-27