# Fluxos: Modulo Finance - Clientes Faturaveis

---

## 6.1 Criar Cliente Faturavel

```
Usuario
  ↓
Finance → Clientes Faturaveis → Botao "Novo"
  ↓
GET /finance/billable_client/add/
  ↓
BillableClientController@add_view
  ↓
CoreClient (ativos)
  ↓
View: pages/finance/clients/billable/add
  ↓
Preenche: razao social, CNPJ/CPF, endereco, contatos
  ↓
POST /finance/billable_client/store
  ↓
BillableClientController@store
  ↓
Validacao: company_name, document_type (cpf/cnpj), cpf_cnpj, contact_name, contact_mail, endereco
Verifica CNPJ/CPF duplicado
  ↓
DB::beginTransaction
  ↓
FinanceClient::create
FinanceClientContact::create (principal + adicionais)
  ↓
DB::commit
  ↓
JSON {success, redirect}
```

**Tela inicial:** Formulario de novo cliente faturavel
**Acao do usuario:** Preenche dados fiscais, endereco e contatos
**Requisicao:** `POST /finance/billable_client/store`
**Controller:** `BillableClientController@store`
**Services:** FormatHelper
**Tabelas alteradas:**
- `finance_clients` (INSERT)
- `finance_client_contacts` (INSERT, 1+ contatos)
**Resultado esperado:** Cliente faturavel criado com dados fiscais e contatos
**Possiveis erros:**
- CPF/CNPJ duplicado → erro
- Validacao → 422

---

## 6.2 Editar Cliente Faturavel

```
Usuario
  ↓
Lista → Editar
  ↓
POST /finance/billable_client/update/{id}/
  ↓
BillableClientController@update
  ↓
DB::beginTransaction
  ↓
FinanceClient::update
FinanceClientContact::update/create (principal)
FinanceClientContact::delete (removidos)
FinanceClientContact::update/create (adicionais)
FinanceClient.stage = 2
  ↓
DB::commit
```

**Tabelas alteradas:**
- `finance_clients` (UPDATE)
- `finance_client_contacts` (UPDATE, INSERT, DELETE)

---

## 6.3 Ativar/Desativar Cliente Faturavel

```
Usuario
  ↓
POST /finance/billable_client/toggle-status/{id}/
  ↓
BillableClientController@toggle_status
  ↓
FinanceClient::update(status toggle)
  ↓
JSON {success, status}
```

**Tabelas alteradas:** `finance_clients` (status)
