# 🏦 Sistema de Microcrédito - Configuração PostgreSQL

## 📋 Pré-requisitos

1. **PostgreSQL** instalado e rodando
2. **Node.js** (versão 14 ou superior)
3. **npm** ou **yarn**

## 🔧 Configuração do PostgreSQL

### 1. Instalar PostgreSQL

**Windows:**
```bash
# Baixar do site oficial: https://www.postgresql.org/download/windows/
# Ou usar chocolatey:
choco install postgresql
```

**Linux (Ubuntu/Debian):**
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib
```

**macOS:**
```bash
# Usando Homebrew:
brew install postgresql
brew services start postgresql
```

### 2. Criar Banco de Dados

```sql
-- Conectar como usuário postgres
sudo -u postgres psql

-- Criar banco de dados
CREATE DATABASE microcredito_db;

-- Criar usuário (opcional)
CREATE USER microcredito_user WITH PASSWORD 'sua_senha_aqui';

-- Dar permissões
GRANT ALL PRIVILEGES ON DATABASE microcredito_db TO microcredito_user;

-- Sair
\q
```

### 3. Configurar Variáveis de Ambiente

Copie o arquivo de exemplo:
```bash
cp postgresql.env.example .env
```

Edite o arquivo `.env` com suas configurações:
```env
# PostgreSQL Configuration
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=microcredito_db
POSTGRES_USER=postgres
POSTGRES_PASSWORD=sua_senha_aqui

# JWT Configuration
JWT_SECRET=seu_jwt_secret_muito_seguro_aqui
JWT_EXPIRE=30d

# Server Configuration
NODE_ENV=development
PORT=8000
```

## 🚀 Instalação e Execução

### 1. Instalar Dependências

```bash
npm install
```

### 2. Testar Conexão PostgreSQL

```bash
node test-postgresql.js
```

### 3. Iniciar Aplicação

```bash
npm start
# ou
node app.js
```

## 📊 Estrutura do Banco de Dados

### Tabelas Criadas Automaticamente:

1. **employers** - Empregadores
   - `employer_id` (PK)
   - `employer_name`
   - `employer_address`

2. **customers** - Clientes
   - `customer_id` (PK)
   - `surname`, `firstname`, `title`
   - `date_of_birth`, `id_number`, `tax_number`
   - `home_address`, `geotag`, `mobile`, `home_phone`
   - `marital_status`, `spouse_name`, `next_kin_name`
   - `employer_id` (FK)

3. **agents** - Agentes
   - `agent_id` (PK)
   - `agent_name`, `agent_code`, `branch_code`
   - `commission_rate`, `net_commission`
   - `created_by`

4. **loans** - Empréstimos
   - `loan_id` (PK)
   - `loan_app_id`, `customer_id` (FK)
   - `product`, `loan_amount`, `loan_term_months`
   - `interest_rate`, `type_of_payment`
   - `loan_installment`, `net_payable`, `net_payout`
   - `amortized_amount`, `balance`
   - `status`, `previous_status`
   - `created_on`, `activated_on`, `last_modified_on`
   - `own_settlement`, `org_submitted_on`
   - `agent_id` (FK)

5. **payments** - Pagamentos
   - `payment_id` (PK)
   - `loan_id` (FK)
   - `payment_date`, `amount_paid`
   - `paid_by`, `payment_method`
   - `bank_account_num`, `receipt_number`

6. **vetting** - Aprovações
   - `vetting_id` (PK)
   - `loan_id` (FK)
   - `vetting_date`, `vetting_status`
   - `approved_by`, `amt_withheld`, `notes`

## 🔗 Relações

- **Customer** → **Employer** (1:N)
- **Customer** → **Loan** (1:N)
- **Agent** → **Loan** (1:N)
- **Loan** → **Payment** (1:N)
- **Loan** → **Vetting** (1:1)

## 📝 Modelos Disponíveis

- `CustomerModel.js` - Gerenciamento de clientes
- `EmployerModel.js` - Gerenciamento de empregadores
- `AgentModel.js` - Gerenciamento de agentes
- `LoanModel.js` - Gerenciamento de empréstimos
- `PaymentModel.js` - Gerenciamento de pagamentos
- `VettingModel.js` - Gerenciamento de aprovações

## 🛠️ Funcionalidades

### Clientes
- ✅ Criar, listar, atualizar, deletar
- ✅ Buscar por ID, número de documento
- ✅ Listagem com paginação e filtros
- ✅ Estatísticas de empréstimos e pagamentos

### Empregadores
- ✅ Gerenciamento completo
- ✅ Estatísticas de clientes e empréstimos
- ✅ Listagem com filtros

### Agentes
- ✅ Gerenciamento completo
- ✅ Cálculo automático de comissões
- ✅ Estatísticas de performance

### Empréstimos
- ✅ Criação com cálculos automáticos
- ✅ Gestão de status (Active, Closed, Declined, etc.)
- ✅ Cálculo automático de saldos
- ✅ Verificação de atrasos

### Pagamentos
- ✅ Registro de pagamentos
- ✅ Atualização automática de saldos
- ✅ Relatórios por período
- ✅ Estatísticas detalhadas

### Aprovações
- ✅ Processo de aprovação/rejeição
- ✅ Atualização automática de status
- ✅ Histórico de aprovações
- ✅ Estatísticas de aprovação

## 🔍 Testando a API

Após iniciar a aplicação, você pode testar os endpoints:

```bash
# Testar conexão
curl http://localhost:8000/api/health

# Listar clientes
curl http://localhost:8000/api/customers

# Listar empréstimos
curl http://localhost:8000/api/loans
```

## 🚨 Solução de Problemas

### Erro de Conexão PostgreSQL
```bash
# Verificar se PostgreSQL está rodando
sudo systemctl status postgresql

# Verificar porta
netstat -an | grep 5432

# Testar conexão manual
psql -h localhost -U postgres -d microcredito_db
```

### Erro de Permissões
```sql
-- Dar permissões completas ao usuário
GRANT ALL PRIVILEGES ON DATABASE microcredito_db TO seu_usuario;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO seu_usuario;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO seu_usuario;
```

### Erro de Dependências
```bash
# Limpar cache e reinstalar
rm -rf node_modules package-lock.json
npm install
```

## 📞 Suporte

Para dúvidas ou problemas:
1. Verifique os logs da aplicação
2. Teste a conexão PostgreSQL manualmente
3. Verifique as variáveis de ambiente
4. Consulte a documentação do PostgreSQL

---

✅ **Sistema configurado com sucesso!** 

Agora você pode começar a usar o sistema de microcrédito com PostgreSQL como banco de dados principal.
