Documentação técnica • Autor: Leonardo Norbiato - Equipe de Engenharia
Cliente: Aster Technology / UVA Última Atualização: 15/09/2025 Autores: Leonardo Norbiato - Equipe de Engenharia

Microservice Commercial

Documentação técnica consolidada — uso offline

Índice

1. OBJETIVO

Este documento consolida as informações técnicas e de arquitetura do projeto "microservice-commercial", um microserviço NestJS responsável por gestão completa do módulo comercial: clientes, orçamentos, propostas, funil de vendas, unidades consumidoras/geradoras, simulações de financiamento e geração de documentos PDF. Implementa Clean Architecture com DDD, multi-tenancy, integração com serviços externos e sistema robusto de geração de propostas comerciais.

2. ÚLTIMA REVISÃO

3. TECNOLOGIAS UTILIZADAS

Backend
Node.js 22, NestJS 11.1.0, TypeScript 5.8.3, Prisma 6.7.0
Swagger 11.2.0, class-validator/transformer, AWS SQS SDK 3.803.0
React PDF Renderer 4.3.0, Chart.js 4.4.9, PDF-lib 1.17.1
Multer 1.4.5-lts.2 (upload), Compression 1.8.0, Zod 3.24.4
Vitest 3.1.3 (testes), ESLint, Prettier
Repositórios: Local/GitHub
Frontend
Não aplicável (API pura)
Banco de Dados
PostgreSQL (via Prisma ORM), Multi-tenancy nativo
Ferramentas de Conexão e Infraestrutura
Docker Compose (PostgreSQL + App), Prisma migrations, AWS SQS messaging
Integração com Mapbox (geocoding) e Dotcoding (irradiação), Kubernetes

4. FUNCIONALIDADES E DOMÍNIOS

5. ARQUITETURA FRONTEND

Não aplicável - API pura sem frontend próprio

6. ARQUITETURA BACKEND

Controllers
37 controllers especializados organizados por funcionalidade
Clientes: CreateClient, FetchClient, GetClient, EditClient, DeleteClient
Orçamentos: CreateBudget, FetchBudgets, GetBudget, EditBudget, DeleteBudget, ToggleArchivedBudget, ToggleLostBudget, ChangePhaseBudget
Propostas: CreateProposal, FetchProposal, GetProposal, EditProposal, DeleteProposal, ToggleCloseProposal, ToggleLostProposal, GetCashFlowProposal
Unidades: CreateUnit, FetchUnit, GetUnit, EditUnit, DeleteUnit, SetUnitAsGenerator
Funil: CreateFunnel, FetchFunnels, EditFunnel, DeleteFunnel
Tags: CreateTag, FetchTags, EditTag, DeleteTag
Endereços: FetchAddress, Irradiação: IrradiationController
Features
Gestão completa de clientes (PF/PJ) com endereços múltiplos
Sistema de orçamentos com status (progress, closed, lost, archived)
Propostas comerciais com cálculos automáticos de energia solar
Funil de vendas com fases configuráveis
Unidades consumidoras e geradoras com consumo mensal
Sistema de tags para categorização
Simulações de financiamento bancário
Geração automática de documentos PDF profissionais
Cálculos de irradiação solar por cidade
Integração com serviços externos (Mapbox, Dotcoding)
Messaging assíncrono com AWS SQS, Multi-tenancy nativo
Repositories
14 repositórios especializados: Clients, Budgets, Proposals, Units, Funnels, Tags, Addresses
Implementações Prisma + repositórios in-memory para testes
Multi-tenancy via isolamento por tenant, Soft delete implementado
Entities
Client, Address, Budget, Proposal, Unit, Funnel, Tag, Installment
FinancingSimulation, ProposalWarranty, MonthlyKwhConsumption, Attachment
Helper/Utilities
DocumentGeneratorService (PDFs), GeocodingService (Mapbox), IrradiationService (Dotcoding)
SQS Publishers, ValidationPipe, Presenters, Error Handling

7. ROTAS E ENDPOINTS

POST /clients GET /clients GET /clients/:id PUT /clients/:id DELETE /clients/:id
POST /budgets GET /budgets GET /budgets/:id PUT /budgets/:id DELETE /budgets/:id
PATCH /budgets/:id/toggle-archived PATCH /budgets/:id/toggle-lost PATCH /budgets/:id/change-phase
POST /proposals GET /proposals GET /proposals/:id PUT /proposals/:id DELETE /proposals/:id
PATCH /proposals/:id/toggle-close PATCH /proposals/:id/toggle-lost GET /proposals/:id/cash-flow
POST /units GET /units GET /units/:id PUT /units/:id DELETE /units/:id
PATCH /units/:id/set-as-generator POST /funnels GET /funnels PUT /funnels/:id DELETE /funnels/:id
POST /tags GET /tags PUT /tags/:id DELETE /tags/:id GET /addresses
GET /irradiation/city GET /api

8. ESTRUTURA DE DADOS, TABELAS E VIEWS

Principais tabelas
clients, addresses, budgets, proposals, units, funnels, tags, installments
financing_simulations, proposal_warranties, monthly_kwh_consumptions, attachments
Relacionamentos
clients -> addresses (1:N), clients -> budgets (1:N), budgets -> proposals (1:N)
proposals -> units (1:N), proposals -> installments (1:N), budgets -> tags (N:N)
Enums
Status de orçamentos, propostas, unidades, tipos de cliente, fases do funil

9. CONFIGURAÇÃO E VARIÁVEIS

Arquivo principal
docker-compose.yml
Variáveis principais
DATABASE_URL (PostgreSQL), PORT (3000)
AWS_SQS_* (Configurações AWS SQS), MAPBOX_ACCESS_TOKEN (Geocoding)
DOTCODING_API_KEY (Irradiação solar)
Configurações Docker
PostgreSQL: porta 5432, database "commercial"
App: porta 3000, desenvolvimento com hot reload
Volumes para persistência de dados
Configurações Kubernetes
Deployment com 3 réplicas, Service para exposição, Secret para variáveis sensíveis

10. TREEVIEW DA ARQUITETURA

microservice-commercial/
├── src/
│   ├── @types/index.d.ts                    # Definições de tipos globais
│   ├── assets/
│   │   ├── icons/                           # Ícones (5 arquivos PNG)
│   │   └── images/                          # Imagens (5 arquivos PNG)
│   ├── common/
│   │   ├── decorators/                      # Decorators (13 arquivos)
│   │   ├── filters/                         # Filtros de exceção (2 arquivos)
│   │   ├── utils/                           # Utilitários (2 arquivos)
│   │   └── validation-error-exception.ts    # Exceção de validação
│   ├── core/
│   │   ├── either.ts                        # Padrão Either para tratamento de erros
│   │   ├── entities/                        # Entidades base (2 arquivos)
│   │   ├── errors/                          # Erros customizados (8 arquivos)
│   │   ├── types/                           # Tipos base (1 arquivo)
│   │   └── utils/                           # Utilitários core (1 arquivo)
│   ├── domain/
│   │   ├── entities/                        # Entidades de domínio (18 arquivos)
│   │   ├── repositories/                    # Interfaces de repositórios (14 arquivos)
│   │   ├── services/                        # Serviços de domínio (3 arquivos)
│   │   └── use-case/                        # Casos de uso (78 arquivos)
│   └── infra/
│       ├── app.module.ts                    # Módulo principal
│       ├── main.ts                          # Bootstrap da aplicação
│       ├── database/
│       │   ├── database.module.ts           # Módulo de banco
│       │   └── prisma/                      # Configuração Prisma (27 arquivos)
│       ├── DocumentGenerator/
│       │   ├── document-generator.module.ts # Módulo gerador de documentos
│       │   ├── generator/                   # Geradores (7 arquivos)
│       │   ├── pdf/                         # Componentes PDF (34 arquivos: 20 TTF, 14 TSX)
│       │   └── utils/                      # Utilitários PDF (8 arquivos)
│       ├── http/
│       │   ├── controllers/                 # Controllers (37 arquivos)
│       │   ├── dto/                         # DTOs (28 arquivos)
│       │   ├── http.module.ts               # Módulo HTTP
│       │   ├── pipes/                       # Pipes (1 arquivo)
│       │   ├── presenters/                  # Presenters (14 arquivos)
│       │   └── services/                    # Serviços HTTP (8 arquivos)
│       ├── messaging/
│       │   ├── messaging.module.ts          # Módulo de messaging
│       │   └── sqs/                         # AWS SQS (4 arquivos)
│       ├── notification/
│       │   └── notification.module.ts       # Módulo de notificações
│       └── services/                        # Serviços externos (4 arquivos)
├── prisma/
│   ├── schema.prisma                        # Schema do banco
│   ├── migrations/                          # Migrations (58 arquivos)
│   └── migrations.toml                      # Configuração migrations
├── test/                                    # Testes (9 arquivos)
├── k8s/                                     # Kubernetes
│   ├── deployment.yaml                      # Deployment
│   ├── service.yaml                         # Service
│   └── secret.yaml                          # Secret
├── docker-compose.yml                       # Orquestração
├── Dockerfile                               # Build produção
├── package.json                             # Dependências
├── tsconfig.json                            # Configuração TypeScript
├── tsconfig.build.json                      # Configuração build
├── nest-cli.json                            # Configuração NestJS
├── vitest.config.ts                         # Configuração testes
├── vitest-e2e.config.ts                     # Configuração testes E2E
└── README.md                                # Documentação

11. INTEGRAÇÕES E DEPENDÊNCIAS

Serviços externos
Mapbox (Geocoding de endereços), Dotcoding (Irradiação solar por cidade)
AWS SQS (Messaging assíncrono), Microserviços (Administrator, Contracts, Common)
PostgreSQL (Banco de dados principal)
Dependências principais
@nestjs/common/core, @nestjs/swagger, @nestjs/config, @prisma/client
@aws-sdk/client-sqs, @react-pdf/renderer, chart.js, pdf-lib
class-validator/transformer, axios, multer, compression, zod, vitest

12. INTEGRAÇÕES EXTERNAS

Mapbox
Geocoding de endereços para validação e preenchimento automático
Dotcoding
API de irradiação solar por cidade para cálculos de energia
AWS SQS
Messaging assíncrono para comunicação entre microserviços
Microserviços
Administrator, Contracts, Common para funcionalidades compartilhadas
PostgreSQL
Banco de dados principal com Prisma ORM

13. CONTROLE DE VERSÃO

14. SEGURANÇA E ACESSO

15. CONSIDERAÇÕES FINAIS

Microserviço Commercial robusto e bem estruturado em NestJS, seguindo Clean Architecture e DDD. Implementa gestão completa do módulo comercial com clientes, orçamentos, propostas, funil de vendas e unidades. Sistema avançado de geração de documentos PDF profissionais com cálculos automáticos de energia solar. Preparado para produção com multi-tenancy, integrações externas, testes automatizados e documentação completa. Arquitetura modular permite fácil manutenção e extensão das funcionalidades comerciais do ecossistema Aster/UVA. Sistema essencial para gestão comercial e geração de propostas fotovoltaicas.

Retornar para home