Pular para o conteúdo principal

Documentação Técnica Consolidada

Documento: Documentação Técnica do Sistema Sistema: Módulo Empreendedorismo Versão: 1.0 Data: Janeiro/2025


1. Visão Geral do Sistema

1.1. Descrição

O Módulo Empreendedorismo é uma plataforma web completa para gestão de planos de negócio, conectando empreendedores a agentes estruturadores, gestores e instituições financeiras. O sistema oferece funcionalidades de mentoria, análise de planos e recomendação de linhas de crédito.

1.2. Objetivos do Sistema

  • Facilitar a criação e gestão de planos de negócio
  • Conectar empreendedores a mentores qualificados
  • Fornecer acesso a linhas de crédito adequadas ao perfil
  • Gerar relatórios e métricas para gestores
  • Automatizar processos de notificação e comunicação

1.3. Stakeholders

StakeholderPapelInteresse
EmpreendedoresUsuário finalCriar e acompanhar planos de negócio
Agentes EstruturadoresMentorOrientar e acompanhar empreendedores
GestoresAdministradorSupervisionar e gerar relatórios
Instituições FinanceirasParceiroOfertar linhas de crédito
Equipe de TISuporteManter e evoluir o sistema

2. Arquitetura do Sistema

2.1. Diagrama de Arquitetura

                                    ┌─────────────────────────────────────────────┐
│ INTERNET │
└──────────────────────┬──────────────────────┘


┌─────────────────────────────────────────────┐
│ NGINX (Proxy Reverso) │
│ Porta 80/443 (HTTPS) │
└──────────────────────┬──────────────────────┘

┌────────────────────────────────┼────────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐
│ FRONTEND │ │ BACKEND │ │ MINIO │
│ React + TypeScript │ │ Django + DRF │ │ Object Storage │
│ Vite + MUI │ │ Porta 8000 │ │ Porta 9000/9001 │
│ Porta 9501 │ │ │ │ │
└─────────────────────────┘ └────────────┬────────────┘ └─────────────────────────┘

┌─────────────────────────────┼─────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐
│ POSTGRESQL │ │ REDIS │ │ CELERY │
│ Banco de Dados │ │ Cache + Broker │ │ Workers Assíncronos │
│ Porta 5432 │ │ Porta 6379 │ │ │
└─────────────────────────┘ └─────────────────────────┘ └─────────────────────────┘

2.2. Padrão Arquitetural

O sistema segue uma arquitetura em camadas com separação clara de responsabilidades:

┌─────────────────────────────────────────────────────────────┐
│ CAMADA DE APRESENTAÇÃO │
│ Frontend React - Interface do usuário, componentes MUI │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ CAMADA DE API │
│ Django REST Framework - Endpoints, Serializers, Views │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ CAMADA DE NEGÓCIOS │
│ Services, Managers, Business Logic │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ CAMADA DE DADOS │
│ Models Django ORM, PostgreSQL │
└─────────────────────────────────────────────────────────────┘

2.3. Componentes do Sistema

2.3.1. Frontend (React)

TecnologiaVersãoFinalidade
React19.xFramework UI
TypeScript5.xTipagem estática
Vite5.xBuild tool
Material-UI (MUI)5.xComponentes UI
Zustand4.xGerenciamento de estado
React Router6.xRoteamento
Axios1.xCliente HTTP
React Query5.xCache e sincronização

Estrutura de Pastas:

frontend/src/
├── components/ # Componentes reutilizáveis
│ ├── common/ # Componentes genéricos
│ ├── forms/ # Componentes de formulário
│ └── layouts/ # Layouts de página
├── pages/ # Páginas/Views
├── services/ # Serviços de API
├── stores/ # Stores Zustand
├── hooks/ # Custom hooks
├── utils/ # Utilitários
├── types/ # Definições TypeScript
└── assets/ # Arquivos estáticos

2.3.2. Backend (Django)

TecnologiaVersãoFinalidade
Python3.11+Linguagem
Django5.xFramework web
Django REST Framework3.xAPI REST
Celery5.xTarefas assíncronas
django-cors-headers4.xCORS
djangorestframework-simplejwt5.xAutenticação JWT
drf-spectacular0.27+Documentação OpenAPI
Pillow10.xProcessamento de imagens
boto3/minio-Storage S3/MinIO

Estrutura de Apps:

backend/
├── apps/
│ ├── accounts/ # Autenticação e usuários
│ ├── business_plans/ # Planos de negócio
│ ├── credit_lines/ # Linhas de crédito
│ ├── entrepreneurs/ # Empreendedores
│ ├── financial_institutions/# Instituições financeiras
│ ├── managers/ # Gestores
│ ├── notifications/ # Notificações
│ ├── reports/ # Relatórios
│ └── structuring_agents/ # Agentes estruturadores
├── core/ # Configurações Django
│ ├── settings.py
│ ├── urls.py
│ ├── celery.py
│ └── management/commands/
└── templates/ # Templates de email

2.3.3. Banco de Dados (PostgreSQL)

ConfiguraçãoValor
Versão16.x
EncodingUTF-8
Collationpt_BR.UTF-8
Max Connections100

2.3.4. Cache e Message Broker (Redis)

ConfiguraçãoValor
Versão7.x (Alpine)
Databases0: Celery, 1: Cache
Max Memory256MB
Eviction Policyallkeys-lru

2.3.5. Object Storage (MinIO)

ConfiguraçãoValor
Bucket Principalempreendedorismo
PolíticaPrivado (acesso via presigned URLs)
Max File Size100MB

3. Modelo de Dados

3.1. Diagrama ER Simplificado

┌─────────────────┐       ┌─────────────────────┐       ┌─────────────────────┐
│ User │ │ Entrepreneur │ │ BusinessPlan │
├─────────────────┤ ├─────────────────────┤ ├─────────────────────┤
│ id │──1:1──│ user_id (FK) │──1:N──│ entrepreneur_id(FK) │
│ email │ │ cpf │ │ name │
│ password │ │ phone │ │ description │
│ is_active │ │ birth_date │ │ activity_sector │
│ user_type │ │ created_at │ │ stage │
│ created_at │ └─────────────────────┘ │ status │
└─────────────────┘ │ created_at │
│ └─────────────────────┘
│ │
│ 1:1 │ 1:1
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ StructuringAgent │ │ Mentorship │
├─────────────────────┤ ├─────────────────────┤
│ user_id (FK) │──────────────────────────────│ agent_id (FK) │
│ institution │ │ business_plan_id │
│ activity_area │ │ status │
│ created_at │ │ started_at │
└─────────────────────┘ │ finished_at │
└─────────────────────┘

┌─────────────────────┐ ┌─────────────────────┐
│ FinancialInstitution│ │ CreditLine │
├─────────────────────┤ ├─────────────────────┤
│ id │──1:N──│ institution_id (FK) │
│ name │ │ name │
│ cnpj │ │ description │
│ email │ │ min_value │
│ created_at │ │ max_value │
└─────────────────────┘ │ interest_rate │
│ requirements │
└─────────────────────┘

3.2. Principais Entidades

3.2.1. User (accounts)

class User(AbstractUser):
email = models.EmailField(unique=True)
user_type = models.CharField(choices=UserType.choices)
is_verified = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

Tipos de Usuário:

  • ENTREPRENEUR: Empreendedor
  • STRUCTURING_AGENT: Agente Estruturador
  • MANAGER: Gestor
  • FINANCIAL_INSTITUTION: Instituição Financeira

3.2.2. BusinessPlan (business_plans)

class BusinessPlan(models.Model):
entrepreneur = models.ForeignKey(Entrepreneur)
name = models.CharField(max_length=200)
description = models.TextField()
activity_sector = models.CharField(choices=ActivitySector.choices)
stage = models.CharField(choices=BusinessPlanStage.choices)
target_audience = models.CharField(choices=TargetAudience.choices)
status = models.CharField(choices=BusinessPlanStatus.choices)
financing_option = models.CharField(choices=FinancingOption.choices)
created_at = models.DateTimeField(auto_now_add=True)

Status do Plano:

  • DRAFT: Rascunho
  • PENDING: Pendente de análise
  • IN_ANALYSIS: Em análise
  • IN_MENTORSHIP: Em mentoria
  • APPROVED: Aprovado
  • REJECTED: Rejeitado

3.3. Enumerações (Choices)

EnumValores
ActivitySectorCOMMERCE, INDUSTRY, SERVICES, AGRIBUSINESS
BusinessPlanStageIDEA, VALIDATION, MVP, GROWTH, SCALE
TargetAudienceB2B, B2C, B2G, B2B2C
FinancingOptionBNDES, PRONAMPE, FAMPE, FINEP, OTHER
BusinessPlanStatusDRAFT, PENDING, IN_ANALYSIS, IN_MENTORSHIP, APPROVED, REJECTED

4. API REST

4.1. Convenções

  • Base URL: /api/v1/
  • Autenticação: JWT (Bearer Token)
  • Formato: JSON
  • Paginação: ?page=1&page_size=20
  • Ordenação: ?ordering=-created_at
  • Filtros: ?status=approved&sector=services

4.2. Endpoints Principais

4.2.1. Autenticação

MétodoEndpointDescrição
POST/api/v1/auth/register/Cadastro de usuário
POST/api/v1/auth/login/Login (retorna tokens)
POST/api/v1/auth/refresh/Renovar access token
POST/api/v1/auth/logout/Logout (invalidar token)
POST/api/v1/auth/password/reset/Solicitar reset de senha
POST/api/v1/auth/password/confirm/Confirmar nova senha

4.2.2. Empreendedores

MétodoEndpointDescrição
GET/api/v1/entrepreneurs/Listar empreendedores
GET/api/v1/entrepreneurs/{id}/Detalhe do empreendedor
PUT/api/v1/entrepreneurs/{id}/Atualizar empreendedor
GET/api/v1/entrepreneurs/me/Perfil do empreendedor logado

4.2.3. Planos de Negócio

MétodoEndpointDescrição
GET/api/v1/business-plans/Listar planos
POST/api/v1/business-plans/Criar plano
GET/api/v1/business-plans/{id}/Detalhe do plano
PUT/api/v1/business-plans/{id}/Atualizar plano
DELETE/api/v1/business-plans/{id}/Excluir plano
POST/api/v1/business-plans/{id}/submit/Enviar para análise
POST/api/v1/business-plans/{id}/request-mentorship/Solicitar mentoria

4.2.4. Mentorias

MétodoEndpointDescrição
GET/api/v1/mentorships/Listar mentorias
POST/api/v1/mentorships/{id}/accept/Aceitar mentoria
POST/api/v1/mentorships/{id}/feedback/Enviar feedback
POST/api/v1/mentorships/{id}/complete/Finalizar mentoria

4.2.5. Linhas de Crédito

MétodoEndpointDescrição
GET/api/v1/credit-lines/Listar linhas de crédito
GET/api/v1/credit-lines/{id}/Detalhe da linha
GET/api/v1/credit-lines/recommendations/Recomendações por perfil

4.3. Formato de Resposta

Sucesso (200/201):

{
"id": 1,
"name": "Meu Plano de Negócio",
"status": "draft",
"created_at": "2025-01-19T10:00:00Z"
}

Erro de Validação (400):

{
"detail": "Validation error",
"errors": {
"name": ["Este campo é obrigatório."],
"description": ["Mínimo de 50 caracteres."]
}
}

Erro de Autenticação (401):

{
"detail": "Token inválido ou expirado."
}

Erro de Permissão (403):

{
"detail": "Você não tem permissão para esta ação."
}

5. Fluxos de Dados

5.1. Fluxo de Autenticação

┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐
│ Cliente │ │ Frontend│ │ Backend │ │ DB │
└────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
│ │ │ │
│ 1. Login │ │ │
│──────────────>│ │ │
│ │ 2. POST /auth/login │
│ │──────────────>│ │
│ │ │ 3. Validate │
│ │ │──────────────>│
│ │ │<──────────────│
│ │ 4. JWT Tokens │ │
│ │<──────────────│ │
│ 5. Store tokens │ │
│<──────────────│ │ │
│ │ │ │
│ 6. Request com Bearer Token │ │
│──────────────>│ │ │
│ │ 7. Verify JWT │ │
│ │──────────────>│ │
│ │ 8. Response │ │
│ │<──────────────│ │
│ 9. Data │ │ │
│<──────────────│ │ │

5.2. Fluxo de Criação de Plano de Negócio

┌─────────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐
│Empreendedor │ │ Frontend│ │ Backend │ │ Celery │ │ MinIO │
└──────┬──────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
│ │ │ │ │
│ 1. Preenche form│ │ │ │
│────────────────>│ │ │ │
│ │ 2. Upload docs│ │ │
│ │───────────────────────────────────────────────>│
│ │ │ │ 3. Store file │
│ │<──────────────────────────────────────────────│
│ │ 4. POST /business-plans │ │
│ │──────────────>│ │ │
│ │ │ 5. Validate + Save │
│ │ │──────────────>│ (DB) │
│ │ │ 6. Queue email task │
│ │ │──────────────>│ │
│ │ │ │ 7. Send email │
│ │ 8. Response │ │ │
│ │<──────────────│ │ │
│ 9. Success │ │ │ │
│<────────────────│ │ │ │

5.3. Fluxo de Mentoria

┌─────────────┐     ┌─────────────┐     ┌─────────┐     ┌─────────┐
│Empreendedor │ │ Agente │ │ Backend │ │ DB │
└──────┬──────┘ └──────┬──────┘ └────┬────┘ └────┬────┘
│ │ │ │
│ 1. Request Mentorship │ │
│────────────────────────────────────>│ │
│ │ │ 2. Create │
│ │ │──────────────>│
│ │ 3. Notify agent │ │
│ │<────────────────│ │
│ │ │ │
│ │ 4. Accept │ │
│ │────────────────>│ │
│ │ │ 5. Update │
│ │ │──────────────>│
│ 6. Notify empreendedor │ │
│<────────────────────────────────────│ │
│ │ │ │
│ │ 7. Send feedback│ │
│ │────────────────>│ │
│ 8. Receive feedback │ │
│<────────────────────────────────────│ │
│ │ │ │
│ │ 9. Complete │ │
│ │────────────────>│ │
│ 10. Mentorship completed │ │
│<────────────────────────────────────│ │

6. Segurança

6.1. Autenticação e Autorização

AspectoImplementação
AutenticaçãoJWT (JSON Web Tokens)
Refresh Token7 dias de validade
Access Token15 minutos de validade
SenhaHash bcrypt (Django default)
Política de SenhaMínimo 8 caracteres, alfanumérico

6.2. Permissões por Perfil

RecursoEmpreendedorAgenteGestorInst. Financeira
Planos própriosCRUDReadRead All-
MentoriasRequestCRUDRead All-
Linhas de créditoReadReadRead AllCRUD
UsuáriosSelfSelfCRUDSelf
RelatóriosOwnOwnAllOwn

6.3. Proteções Implementadas

  • CORS: Configurado para domínios autorizados
  • CSRF: Token em formulários
  • XSS: Sanitização de inputs
  • SQL Injection: Django ORM (queries parametrizadas)
  • Rate Limiting: Throttling em endpoints sensíveis
  • HTTPS: Obrigatório em produção
  • Headers de Segurança: X-Frame-Options, X-Content-Type-Options, etc.

7. Integração e Implantação

7.1. Ambientes

AmbienteURLBranchFinalidade
Desenvolvimentolocalhostfeature/*Desenvolvimento local
Homologaçãohml.dominio.comdevelopTestes e validação
Produçãodominio.commainAmbiente produtivo

7.2. Pipeline CI/CD

┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐
│ Push │────>│ Lint │────>│ Test │────>│ Build │────>│ Deploy │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │
ESLint pytest Docker build docker-compose
Flake8 coverage > 80% npm build up -d
TypeScript

7.3. Containers Docker

ContainerImagem BasePortaRecursos
backendpython:3.11-slim80001 CPU, 1GB RAM
frontendnode:20-alpine + nginx95010.5 CPU, 512MB RAM
dbpostgres:1654321 CPU, 2GB RAM
redisredis:7-alpine63790.5 CPU, 256MB RAM
miniominio/minio9000/90010.5 CPU, 512MB RAM
celery-workerpython:3.11-slim-1 CPU, 1GB RAM
celery-worker-emailspython:3.11-slim-0.5 CPU, 512MB RAM

8. Monitoramento e Logs

8.1. Health Checks

ServiçoEndpointIntervalo
Backend/api/health/30s
Frontend/30s
PostgreSQLpg_isready30s
RedisPING30s
MinIO/minio/health/live30s

8.2. Métricas Monitoradas

MétricaLimite WarningLimite Critical
CPU70%90%
Memória80%95%
Disco70%85%
Tempo de resposta API500ms2000ms
Taxa de erro0.1%1%
Conexões DB70%90%

8.3. Estrutura de Logs

{
"timestamp": "2025-01-19T10:30:00.000Z",
"level": "INFO",
"logger": "django.request",
"message": "GET /api/v1/business-plans/",
"request_id": "abc123",
"user_id": 42,
"method": "GET",
"path": "/api/v1/business-plans/",
"status_code": 200,
"duration_ms": 45
}

9. Glossário

TermoDefinição
EmpreendedorUsuário que cria e gerencia planos de negócio
Agente EstruturadorMentor que orienta empreendedores
Plano de NegócioDocumento que descreve uma ideia de negócio
MentoriaProcesso de acompanhamento entre agente e empreendedor
Linha de CréditoOpção de financiamento oferecida por instituição
JWTJSON Web Token - método de autenticação
RTORecovery Time Objective - tempo máximo de recuperação
RPORecovery Point Objective - perda máxima de dados

10. Referências


Fim do Documento