# Análise Completa dos Requisitos do Frontend para o Backend

## Resumo Executivo

Após analisar as páginas principais do frontend, identifiquei os campos, funcionalidades e endpoints necessários no backend para suportar completamente a interface do usuário. O sistema de microcrédito requer uma arquitetura robusta com métricas avançadas, análise de risco, e gestão completa de clientes, empréstimos, pagamentos e usuários.

## 1. Dashboard Principal (`pages/dashboard.vue`)

### Componentes Identificados:
- **RevenueCard** - Cartão de receita
- **NewCustomer** - Novos clientes
- **TotalIncome** - Receita total
- **RevenueProduct** - Receita por produto
- **DailyActivities** - Atividades diárias
- **BlogCards** - Cards de blog/notícias

### Requisitos do Backend:
```javascript
// Endpoints necessários:
GET /api/dashboard/metrics
GET /api/dashboard/revenue
GET /api/dashboard/new-customers
GET /api/dashboard/daily-activities
GET /api/dashboard/revenue-by-product
```

### Campos Necessários:
- `total_revenue` - Receita total
- `monthly_revenue` - Receita mensal
- `new_customers_count` - Contagem de novos clientes
- `active_loans_count` - Empréstimos ativos
- `pending_approvals_count` - Aprovações pendentes
- `daily_activities` - Array de atividades diárias
- `revenue_by_product` - Receita segmentada por produto

## 2. Gestão de Clientes (`pages/clientes/index.vue`)

### Funcionalidades Identificadas:
- **Listagem avançada** com filtros múltiplos
- **Métricas em tempo real** no cabeçalho
- **Análise de risco** integrada
- **Ações em massa** (exportar, contatar, etc.)

### Filtros Disponíveis:
- `search` - Busca textual
- `statusFilter` - Filtro por status
- `riskLevelFilter` - Filtro por nível de risco
- `dateFrom` / `dateTo` - Filtro por período

### Métricas do Cabeçalho:
```javascript
{
  totalClients: number,
  activeClients: number,
  inactiveClients: number,
  highRiskClients: number,
  totalActiveLoans: number,
  totalOutstanding: number,
  averageOutstandingPerClient: number
}
```

### Campos de Cliente:
```javascript
{
  id: number,
  client_code: string,
  first_name: string,
  last_name: string,
  full_name: string, // Calculado
  email: string,
  phone: string,
  address: string,
  id_number: string,
  birth_date: date,
  gender: string,
  occupation: string,
  monthly_income: number,
  status: string,
  risk_level: string,
  registration_date: date,
  last_contact: date,
  total_loans: number,
  total_borrowed: number,
  total_paid: number,
  current_balance: number,
  active_loans: number
}
```

### Ações Disponíveis:
- `viewClient` - Visualizar cliente
- `editClient` - Editar cliente
- `deleteClient` - Deletar cliente
- `contactClient` - Contatar cliente
- `viewLoans` - Ver empréstimos
- `generateReport` - Gerar relatório
- `exportReport` - Exportar relatório

## 3. Criação de Clientes (`pages/clientes/novo.vue`)

### Seções do Formulário:

#### Informações Pessoais:
```javascript
{
  first_name: string,
  last_name: string,
  email: string,
  phone: string,
  id_number: string,
  birth_date: date,
  gender: string,
  marital_status: string
}
```

#### Endereço:
```javascript
{
  address: string,
  city: string,
  province: string,
  postal_code: string
}
```

#### Informações Profissionais:
```javascript
{
  occupation: string,
  employer: string,
  monthly_income: number,
  work_phone: string
}
```

#### Contato de Emergência:
```javascript
{
  emergency_contact_name: string,
  emergency_contact_phone: string,
  emergency_contact_relationship: string
}
```

#### Informações Bancárias:
```javascript
{
  bank_name: string,
  bank_account: string,
  bank_branch: string
}
```

#### Informações Adicionais:
```javascript
{
  education_level: string,
  dependents: number,
  notes: string,
  status: string,
  risk_level: string
}
```

### Opções de Seleção:
- `genderOptions`: ['Masculino', 'Feminino', 'Outro']
- `maritalStatusOptions`: ['Solteiro', 'Casado', 'Divorciado', 'Viúvo', 'Outro']
- `educationLevelOptions`: ['Nenhum', 'Primário', 'Secundário', 'Ensino Médio', 'Técnico', 'Superior', 'Pós-graduação', 'Outro']
- `relationshipOptions`: ['Cônjuge', 'Pai', 'Mãe', 'Filho', 'Filha', 'Irmão', 'Irmã', 'Amigo', 'Outro']
- `statusOptions`: ['Ativo', 'Inativo', 'Suspenso', 'Bloqueado']
- `riskLevelOptions`: ['Baixo', 'Médio', 'Alto', 'Crítico']

## 4. Gestão de Empréstimos (`pages/emprestimos/aprovacoes.vue`)

### Filtros Disponíveis:
- `search` - Busca textual
- `statusFilter` - Filtro por status
- `amountFilter` - Filtro por valor
- `dateFrom` / `dateTo` - Filtro por período

### Métricas do Cabeçalho:
```javascript
{
  totalRequests: number,
  pendingRequests: number,
  underReviewRequests: number,
  approvedRequests: number,
  rejectedRequests: number,
  totalAmountRequested: number,
  averageAmount: number
}
```

### Campos de Solicitação de Empréstimo:
```javascript
{
  id: number,
  request_number: string,
  client_id: number,
  client_name: string,
  client_phone: string,
  amount_requested: number,
  amount_approved: number,
  purpose: string,
  repayment_period: number,
  monthly_installment: number,
  interest_rate: number,
  status: string,
  request_date: date,
  review_date: date,
  approved_by: string,
  notes: string,
  documents: array,
  risk_score: number,
  collateral: string
}
```

### Ações Disponíveis:
- `viewRequest` - Visualizar solicitação
- `reviewRequest` - Revisar solicitação
- `approveRequest` - Aprovar solicitação
- `rejectRequest` - Rejeitar solicitação
- `downloadDocuments` - Baixar documentos
- `generateReport` - Gerar relatório
- `exportReport` - Exportar relatório

## 5. Criação de Empréstimos (`pages/emprestimos/novo.vue`)

### Seções do Formulário:

#### Informações do Cliente:
```javascript
{
  client_name: string,
  client_phone: string,
  client_email: string,
  monthly_income: number
}
```

#### Detalhes do Empréstimo:
```javascript
{
  amount_requested: number,
  purpose: string,
  repayment_period: number,
  interest_rate: number,
  risk_assessment: string
}
```

#### Informações Financeiras:
```javascript
{
  other_loans: boolean,
  existing_loan_amount: number,
  collateral: string
}
```

#### Fiador:
```javascript
{
  guarantor_name: string,
  guarantor_phone: string,
  guarantor_relationship: string
}
```

#### Documentos:
```javascript
{
  id_copy: boolean,
  income_proof: boolean,
  address_proof: boolean,
  bank_statement: boolean,
  business_license: boolean,
  other_documents: boolean
}
```

#### Observações:
```javascript
{
  notes: string
}
```

### Campos Calculados:
- `monthlyPayment` - Pagamento mensal calculado

### Opções de Seleção:
- `purposeOptions`: ['Negócio', 'Educação', 'Saúde', 'Casa', 'Veículo', 'Outro']
- `repaymentPeriodOptions`: ['3 meses', '6 meses', '12 meses', '18 meses', '24 meses', '36 meses']
- `relationshipOptions`: ['Cônjuge', 'Pai', 'Mãe', 'Filho', 'Filha', 'Irmão', 'Irmã', 'Amigo', 'Outro']
- `riskLevelOptions`: ['Baixo', 'Médio', 'Alto', 'Crítico']

## 6. Gestão de Pagamentos (`pages/pagamentos/index.vue`)

### Filtros Disponíveis:
- `dateFrom` / `dateTo` - Filtro por período
- `statusFilter` - Filtro por status
- `paymentMethodFilter` - Filtro por método de pagamento

### Métricas do Cabeçalho:
```javascript
{
  totalPayments: number,
  completedPayments: number,
  pendingPayments: number,
  overduePayments: number,
  totalAmount: number,
  collectedAmount: number
}
```

### Campos de Pagamento:
```javascript
{
  id: number,
  payment_id: string,
  client_name: string,
  loan_id: number,
  amount: number,
  due_date: date,
  payment_date: date,
  payment_method: string,
  status: string,
  reference: string,
  processed_by: string,
  notes: string
}
```

### Ações Disponíveis:
- `processPayment` - Processar pagamento
- `generateReport` - Gerar relatório
- `exportReport` - Exportar relatório

## 7. Análise de Risco de Clientes (`pages/relatorios/analise-risco-clientes.vue`)

### Filtros Disponíveis:
- `dateFrom` / `dateTo` - Filtro por período
- `riskLevelFilter` - Filtro por nível de risco
- `regionFilter` - Filtro por região

### Métricas do Cabeçalho:
```javascript
{
  totalClients: number,
  lowRiskClients: number,
  highRiskClients: number,
  averageCreditScore: number
}
```

### Campos de Análise de Risco:
```javascript
{
  id: number,
  client_code: string,
  client_name: string,
  region: string,
  credit_score: number,
  risk_level: string,
  total_loans: number,
  total_borrowed: number,
  total_paid: number,
  current_balance: number,
  payment_history: string,
  late_payments: number,
  default_rate: number,
  income_stability: string,
  business_type: string,
  years_in_business: number,
  last_assessment: date,
  next_review: date
}
```

## 8. Gestão de Funcionários (`pages/funcionarios.vue`)

### Filtros Disponíveis:
- `search` - Busca textual
- `statusFilter` - Filtro por status

### Campos de Funcionário:
```javascript
{
  id: number,
  employee_name: string,
  employee_code: string,
  position_id: number,
  salary: number,
  hire_date: date,
  email: string,
  phone: string,
  status: string
}
```

### Formulário de Novo Funcionário:
```javascript
{
  employee_name: string,
  employee_code: string,
  position_id: number,
  salary: number,
  hire_date: date,
  email: string,
  phone: string,
  address: string,
  id_number: string,
  tax_number: string,
  bank_account: string,
  bank_name: string,
  emergency_contact: string,
  emergency_phone: string,
  status: string,
  username: string,
  password: string
}
```

### Ações Disponíveis:
- `openAddDialog` - Abrir modal de adição
- `saveEmployee` - Salvar funcionário
- `viewEmployee` - Visualizar funcionário
- `editEmployee` - Editar funcionário
- `deleteEmployee` - Deletar funcionário

## 9. Gestão de Usuários (`pages/usuarios.vue`)

### Filtros Disponíveis:
- `search` - Busca textual
- `statusFilter` - Filtro por status
- Filtros de data (início e fim)

### Campos de Usuário:
```javascript
{
  id: number,
  username: string,
  email: string,
  first_name: string,
  last_name: string,
  phone: string,
  role_id: number,
  is_active: boolean,
  created_at: date
}
```

### Formulário de Novo Usuário:
```javascript
{
  username: string,
  email: string,
  password: string,
  first_name: string,
  last_name: string,
  phone: string,
  role_id: number,
  is_active: boolean
}
```

### Opções de Função:
- `Administrador` (value: 1)
- `Gerente` (value: 2)
- `Operador` (value: 3)

## 10. Requisitos de Backend Identificados

### Endpoints Necessários:

#### Dashboard:
```
GET /api/dashboard/metrics
GET /api/dashboard/revenue
GET /api/dashboard/new-customers
GET /api/dashboard/daily-activities
GET /api/dashboard/revenue-by-product
```

#### Clientes:
```
GET /api/customers (com filtros avançados)
POST /api/customers
GET /api/customers/:id
PUT /api/customers/:id
DELETE /api/customers/:id
GET /api/customers/metrics
GET /api/customers/export
POST /api/customers/contact
```

#### Empréstimos:
```
GET /api/loans/requests (com filtros)
POST /api/loans/requests
GET /api/loans/requests/:id
PUT /api/loans/requests/:id
POST /api/loans/requests/:id/approve
POST /api/loans/requests/:id/reject
GET /api/loans/requests/metrics
GET /api/loans/requests/export
```

#### Pagamentos:
```
GET /api/payments (com filtros)
POST /api/payments
GET /api/payments/:id
PUT /api/payments/:id
POST /api/payments/:id/process
GET /api/payments/metrics
GET /api/payments/export
```

#### Funcionários:
```
GET /api/employees (com filtros)
POST /api/employees
GET /api/employees/:id
PUT /api/employees/:id
DELETE /api/employees/:id
GET /api/employees/metrics
```

#### Usuários:
```
GET /api/users (com filtros)
POST /api/users
GET /api/users/:id
PUT /api/users/:id
DELETE /api/users/:id
GET /api/users/metrics
```

#### Relatórios:
```
GET /api/reports/risk-analysis
GET /api/reports/customers
GET /api/reports/loans
GET /api/reports/payments
GET /api/reports/employees
GET /api/reports/export/:type
```

### Funcionalidades Avançadas Necessárias:

#### 1. Sistema de Métricas em Tempo Real:
- Cálculo automático de métricas do dashboard
- Atualização em tempo real via WebSocket ou polling
- Cache de métricas para performance

#### 2. Sistema de Análise de Risco:
- Algoritmo de cálculo de score de crédito
- Classificação automática de níveis de risco
- Histórico de avaliações de risco
- Alertas para clientes de alto risco

#### 3. Sistema de Filtros Avançados:
- Filtros combinados (múltiplos campos)
- Filtros por período com diferentes granularidades
- Filtros por status com múltiplas opções
- Filtros por região/área geográfica

#### 4. Sistema de Exportação:
- Exportação em múltiplos formatos (CSV, Excel, PDF)
- Relatórios customizáveis
- Agendamento de relatórios
- Compartilhamento de relatórios

#### 5. Sistema de Notificações:
- Notificações de pagamentos em atraso
- Alertas de clientes de alto risco
- Notificações de aprovações pendentes
- Lembretes de follow-up

#### 6. Sistema de Auditoria:
- Log de todas as ações dos usuários
- Histórico de alterações
- Rastreabilidade completa
- Relatórios de auditoria

### Campos de Banco de Dados Adicionais Necessários:

#### Tabela `customers` (campos adicionais):
```sql
ALTER TABLE customers ADD COLUMN client_code VARCHAR(50) UNIQUE;
ALTER TABLE customers ADD COLUMN risk_level VARCHAR(20) DEFAULT 'MEDIUM';
ALTER TABLE customers ADD COLUMN credit_score INTEGER DEFAULT 0;
ALTER TABLE customers ADD COLUMN last_contact TIMESTAMP;
ALTER TABLE customers ADD COLUMN total_loans INTEGER DEFAULT 0;
ALTER TABLE customers ADD COLUMN total_borrowed DECIMAL(15,2) DEFAULT 0;
ALTER TABLE customers ADD COLUMN total_paid DECIMAL(15,2) DEFAULT 0;
ALTER TABLE customers ADD COLUMN current_balance DECIMAL(15,2) DEFAULT 0;
ALTER TABLE customers ADD COLUMN active_loans INTEGER DEFAULT 0;
ALTER TABLE customers ADD COLUMN region VARCHAR(100);
ALTER TABLE customers ADD COLUMN business_type VARCHAR(100);
ALTER TABLE customers ADD COLUMN years_in_business INTEGER;
ALTER TABLE customers ADD COLUMN income_stability VARCHAR(50);
ALTER TABLE customers ADD COLUMN default_rate DECIMAL(5,2) DEFAULT 0;
ALTER TABLE customers ADD COLUMN late_payments INTEGER DEFAULT 0;
ALTER TABLE customers ADD COLUMN last_assessment TIMESTAMP;
ALTER TABLE customers ADD COLUMN next_review TIMESTAMP;
```

#### Tabela `loan_requests` (nova tabela):
```sql
CREATE TABLE loan_requests (
  id SERIAL PRIMARY KEY,
  request_number VARCHAR(50) UNIQUE NOT NULL,
  client_id INTEGER REFERENCES customers(customer_id),
  amount_requested DECIMAL(15,2) NOT NULL,
  amount_approved DECIMAL(15,2),
  purpose VARCHAR(100) NOT NULL,
  repayment_period INTEGER NOT NULL,
  monthly_installment DECIMAL(15,2),
  interest_rate DECIMAL(5,2) NOT NULL,
  status VARCHAR(20) DEFAULT 'pending',
  request_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  review_date TIMESTAMP,
  approved_by INTEGER REFERENCES users(user_id),
  notes TEXT,
  documents JSONB,
  risk_score INTEGER DEFAULT 0,
  collateral TEXT,
  guarantor_name VARCHAR(255),
  guarantor_phone VARCHAR(50),
  guarantor_relationship VARCHAR(100),
  other_loans BOOLEAN DEFAULT FALSE,
  existing_loan_amount DECIMAL(15,2) DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

#### Tabela `payments` (campos adicionais):
```sql
ALTER TABLE payments ADD COLUMN payment_id VARCHAR(50) UNIQUE;
ALTER TABLE payments ADD COLUMN client_name VARCHAR(255);
ALTER TABLE payments ADD COLUMN due_date DATE;
ALTER TABLE payments ADD COLUMN payment_date TIMESTAMP;
ALTER TABLE payments ADD COLUMN payment_method VARCHAR(50);
ALTER TABLE payments ADD COLUMN reference VARCHAR(100);
ALTER TABLE payments ADD COLUMN processed_by INTEGER REFERENCES users(user_id);
```

## 11. Prioridades de Implementação

### Fase 1 (Alta Prioridade):
1. ✅ Sistema de métricas avançadas para clientes
2. ✅ Sistema de análise de risco
3. ✅ Endpoints de dashboard com métricas em tempo real
4. ✅ Sistema de filtros avançados para todas as entidades

### Fase 2 (Média Prioridade):
1. Sistema de solicitações de empréstimo
2. Sistema de aprovação de empréstimos
3. Sistema de processamento de pagamentos
4. Sistema de exportação de relatórios

### Fase 3 (Baixa Prioridade):
1. Sistema de notificações em tempo real
2. Sistema de agendamento de relatórios
3. Sistema de compartilhamento de relatórios
4. Sistema de backup e recuperação

## 12. Considerações Técnicas

### Performance:
- Implementar cache Redis para métricas frequentes
- Otimizar queries com índices apropriados
- Implementar paginação para listagens grandes
- Usar WebSockets para atualizações em tempo real

### Segurança:
- Validação rigorosa de todos os inputs
- Sanitização de dados antes do armazenamento
- Logs de auditoria para todas as operações
- Controle de acesso baseado em roles

### Escalabilidade:
- Arquitetura modular e desacoplada
- APIs RESTful bem definidas
- Sistema de filas para processamento assíncrono
- Monitoramento e alertas automáticos

## Conclusão

O frontend requer um backend robusto e completo com funcionalidades avançadas de análise de risco, métricas em tempo real, e gestão completa de todas as entidades do sistema de microcrédito. A implementação deve seguir uma abordagem incremental, priorizando as funcionalidades mais críticas primeiro.

O sistema já possui uma base sólida com PostgreSQL, autenticação JWT, e CRUDs básicos implementados. Os próximos passos devem focar na implementação das funcionalidades avançadas identificadas nesta análise.











