📊 Diagramas do Sistema - FinBoost+
Esta seção apresenta os diagramas oficiais que documentam a arquitetura e funcionamento do sistema FinBoost+, baseados nos documentos originais do projeto.
🏗️ Diagrama de Arquitetura do Sistema
graph TB
subgraph "Camada de Apresentação"
UI[Interface Web - React]
Mobile[Interface Mobile-First]
Router[React Router]
end
subgraph "Camada de Aplicação"
API[API REST - Spring Boot]
Auth[Spring Security + JWT]
Controllers[Controllers]
end
subgraph "Camada de Negócio"
Services[Services]
Business[Regras de Negócio]
Calculations[Cálculos de Saldos]
end
subgraph "Camada de Dados"
JPA[JPA/Hibernate]
PostgreSQL[(PostgreSQL)]
Cache[Cache - Redis*]
end
subgraph "Infraestrutura"
Docker[Docker Containers]
CI[GitHub Actions]
Docs[MkDocs + Swagger]
end
UI --> API
Mobile --> API
Router --> Controllers
API --> Auth
Auth --> Services
Services --> Business
Business --> Calculations
Services --> JPA
JPA --> PostgreSQL
Docker --> UI
Docker --> API
CI --> Docker
Docs --> CI
Cache -.-> Services
style Cache fill:#f9f9f9,stroke:#999,stroke-dasharray: 5 5
*Cache Redis previsto para versões futuras
👤 Diagrama de Casos de Uso
📋 Nota: Este diagrama está baseado no arquivo oficial
Diagrama de Casos de Uso.png
localizado emproject_docs/diagramas/
graph LR
User[👤 Usuário]
Admin[👤 Administrador do Grupo]
System[🖥️ Sistema FinBoost+]
subgraph "Autenticação"
UC1[Fazer Login]
UC2[Cadastrar-se]
UC3[Recuperar Senha]
UC4[Gerenciar Perfil]
end
subgraph "Gestão de Grupos"
UC5[Criar Grupo]
UC6[Convidar Membros]
UC7[Participar de Grupo]
UC8[Visualizar Membros]
UC9[Sair do Grupo]
end
subgraph "Controle de Despesas"
UC10[Registrar Despesa]
UC11[Visualizar Despesas]
UC12[Editar Despesa Própria]
UC13[Excluir Despesa Própria]
UC14[Dividir Despesa]
end
subgraph "Relatórios e Saldos"
UC15[Ver Dashboard]
UC16[Visualizar Saldos]
UC17[Calcular Débitos/Créditos]
UC18[Ver Histórico]
end
User --> UC1
User --> UC2
User --> UC3
User --> UC4
User --> UC7
User --> UC8
User --> UC9
User --> UC10
User --> UC11
User --> UC12
User --> UC13
User --> UC14
User --> UC15
User --> UC16
User --> UC18
Admin --> UC5
Admin --> UC6
System --> UC17
🗄️ Diagrama Entidade-Relacionamento (ER)
📋 Nota: Este diagrama está baseado no arquivo oficial
diagrama_ER.png
localizado emproject_docs/diagramas/
erDiagram
USER {
bigint id PK
varchar name
varchar email UK
varchar password_hash
varchar profile_picture
timestamp created_at
timestamp updated_at
boolean active
}
GROUP {
bigint id PK
varchar name
text description
varchar invite_code UK
bigint created_by FK
timestamp created_at
timestamp updated_at
boolean active
}
GROUP_MEMBER {
bigint id PK
bigint group_id FK
bigint user_id FK
varchar role
timestamp joined_at
boolean active
}
EXPENSE {
bigint id PK
bigint group_id FK
bigint created_by FK
varchar description
decimal amount
varchar category
date expense_date
text notes
timestamp created_at
timestamp updated_at
boolean active
}
EXPENSE_SPLIT {
bigint id PK
bigint expense_id FK
bigint user_id FK
decimal amount
varchar split_type
decimal percentage
timestamp created_at
}
BALANCE {
bigint id PK
bigint group_id FK
bigint user_id FK
decimal total_paid
decimal total_owed
decimal net_balance
timestamp calculated_at
}
USER ||--o{ GROUP : creates
USER ||--o{ GROUP_MEMBER : belongs_to
GROUP ||--o{ GROUP_MEMBER : has
GROUP ||--o{ EXPENSE : contains
USER ||--o{ EXPENSE : creates
EXPENSE ||--o{ EXPENSE_SPLIT : has
USER ||--o{ EXPENSE_SPLIT : participates
GROUP ||--o{ BALANCE : tracks
USER ||--o{ BALANCE : has
📱 Diagrama de Classes - Estrutura Principal
📋 Nota: Este diagrama está baseado no arquivo oficial
diagrama_classes.png
localizado emproject_docs/diagramas/
classDiagram
class User {
+Long id
+String name
+String email
+String passwordHash
+String profilePicture
+LocalDateTime createdAt
+LocalDateTime updatedAt
+Boolean active
+createGroup()
+joinGroup()
+createExpense()
+updateProfile()
}
class Group {
+Long id
+String name
+String description
+String inviteCode
+Long createdBy
+LocalDateTime createdAt
+LocalDateTime updatedAt
+Boolean active
+addMember()
+removeMember()
+generateInviteCode()
+calculateGroupBalance()
}
class GroupMember {
+Long id
+Long groupId
+Long userId
+String role
+LocalDateTime joinedAt
+Boolean active
+changeRole()
+leave()
}
class Expense {
+Long id
+Long groupId
+Long createdBy
+String description
+BigDecimal amount
+String category
+LocalDate expenseDate
+String notes
+LocalDateTime createdAt
+LocalDateTime updatedAt
+Boolean active
+splitExpense()
+updateSplits()
+calculateIndividualAmounts()
}
class ExpenseSplit {
+Long id
+Long expenseId
+Long userId
+BigDecimal amount
+String splitType
+BigDecimal percentage
+LocalDateTime createdAt
+calculateAmount()
}
class Balance {
+Long id
+Long groupId
+Long userId
+BigDecimal totalPaid
+BigDecimal totalOwed
+BigDecimal netBalance
+LocalDateTime calculatedAt
+recalculate()
+getDebtsAndCredits()
}
User ||--o{ Group : creates
User ||--o{ GroupMember : participates
Group ||--o{ GroupMember : contains
Group ||--o{ Expense : has
User ||--o{ Expense : creates
Expense ||--o{ ExpenseSplit : divided_into
User ||--o{ ExpenseSplit : owes
Group ||--o{ Balance : tracks
User ||--o{ Balance : has
🔄 Fluxograma: Processo de Registro de Despesa
flowchart TD
Start([Usuário acessa grupo]) --> Auth{Usuário autenticado?}
Auth -->|Não| Login[Redirecionar para login]
Auth -->|Sim| Member{É membro do grupo?}
Member -->|Não| Error[Erro: Acesso negado]
Member -->|Sim| Form[Formulário de despesa]
Form --> Fill[Preencher dados obrigatórios]
Fill --> Validate{Dados válidos?}
Validate -->|Não| FormError[Mostrar erros de validação]
FormError --> Form
Validate -->|Sim| Select[Selecionar participantes]
Select --> Split[Definir tipo de divisão]
Split --> Confirm[Confirmar despesa]
Confirm --> Save[Salvar no banco de dados]
Save --> CalcBalance[Recalcular saldos do grupo]
CalcBalance --> Success[✅ Despesa registrada]
Login --> Start
Error --> End([Fim])
Success --> End
🔄 Fluxograma: Processo de Convite para Grupo
flowchart TD
Start([Admin convida usuário]) --> Generate[Gerar código único]
Generate --> Send[Compartilhar código/link]
Send --> Receive[Usuário recebe convite]
Receive --> UserExists{Usuário já cadastrado?}
UserExists -->|Não| Register[Cadastro obrigatório]
Register --> Login[Login necessário]
UserExists -->|Sim| AlreadyMember{Já é membro?}
AlreadyMember -->|Sim| Error[Erro: Já é membro]
AlreadyMember -->|Não| Accept[Aceitar convite]
Login --> Accept
Accept --> Join[Adicionar ao grupo]
Join --> Welcome[Exibir dashboard do grupo]
Error --> End([Fim])
Welcome --> End
🎯 Diagrama de Componentes - Frontend React
graph TB
subgraph "App Principal"
App[App.jsx]
Router[React Router]
AuthContext[AuthContext]
ThemeContext[ThemeContext]
end
subgraph "Páginas"
Login[Login]
Dashboard[Dashboard]
Groups[Groups]
Profile[Profile]
end
subgraph "Componentes Principais"
Header[Header]
ExpenseForm[ExpenseForm]
ExpenseList[ExpenseList]
GroupCard[GroupCard]
BalanceCard[BalanceCard]
end
subgraph "Componentes UI"
Button[Button]
Input[Input]
Modal[Modal]
Loading[Loading]
end
subgraph "Hooks Customizados"
useAuth[useAuth]
useGroups[useGroups]
useExpenses[useExpenses]
end
subgraph "Serviços"
AuthService[AuthService]
APIService[APIService]
LocalStorage[LocalStorage]
end
App --> Router
App --> AuthContext
App --> ThemeContext
Router --> Páginas
Páginas --> "Componentes Principais"
"Componentes Principais" --> "Componentes UI"
"Componentes Principais" --> "Hooks Customizados"
"Hooks Customizados" --> Serviços
� Fluxo de Autenticação e Segurança
sequenceDiagram
participant User as 👤 Usuário
participant Frontend as 🎨 React App
participant API as 🔧 Spring Boot API
participant Auth as 🔐 Spring Security
participant DB as 🗄️ PostgreSQL
User->>Frontend: 1. Acessa aplicação
Frontend->>API: 2. Verificar sessão
API->>Auth: 3. Validar token JWT
alt Token inválido/expirado
Auth-->>Frontend: 4. Unauthorized
Frontend-->>User: 5. Tela de login
User->>Frontend: 6. Credenciais
Frontend->>API: 7. POST /auth/login
API->>Auth: 8. Validar credenciais
Auth->>DB: 9. Buscar usuário
DB-->>Auth: 10. Dados do usuário
Auth->>Auth: 11. Gerar JWT
Auth-->>API: 12. Token + dados
API-->>Frontend: 13. Resposta com token
Frontend->>Frontend: 14. Armazenar token
else Token válido
Auth-->>API: 4. Autorizado
API-->>Frontend: 5. Dados do usuário
end
Frontend-->>User: 15. Interface autenticada
Note over User,DB: Requisições subsequentes incluem JWT no header
📊 Referências dos Diagramas Oficiais
Os diagramas apresentados nesta documentação são baseados nos seguintes arquivos oficiais do projeto:
- 📁
project_docs/diagramas/Diagrama de Casos de Uso.png
- Casos de uso detalhados do sistema - 📁
project_docs/diagramas/diagrama_ER.png
- Modelo de dados e relacionamentos - 📁
project_docs/diagramas/diagrama_classes.png
- Estrutura de classes do domínio
Observações Importantes:
- Escopo do MVP: Os diagramas refletem apenas as funcionalidades implementadas no MVP
- Versões Futuras: Funcionalidades como cache Redis, notificações e IA estão marcadas como futuras
- Simplificação: Alguns detalhes de implementação foram simplificados para clareza
- Atualização: Esta documentação será atualizada conforme a evolução do projeto
📊 Diagramas baseados na documentação oficial
Representação visual da arquitetura implementada
Representação visual da arquitetura implementada