# Fluxos: Modulo Finance - Relatorios

---

## 17.1 Relatorio de Cobrancas

```
Usuario
  ↓
Finance → Relatorios → Cobrancas
  ↓
GET /finance/reports/charges → View
  ↓
AJAX: POST /finance/reports/charges/list/ajax (filtros: status, data, busca)
  ↓
ReportController@reportCharges_list_ajax
  ↓
FinanceCharge (com project, financeClient.coreClient)
  ↓
JSON {data[], summary: {total, paid, pending, overdue (counts + values)}}
```

---

## 17.2 Relatorio de NFS-e

```
AJAX: POST /finance/reports/nfs/list/ajax
  ↓
ReportController@reportNfs_list_ajax
  ↓
FinanceCharge (exclui tag '2a Via', mapeia status NFS)
  ↓
JSON {data[], summary: {issued, cancelled, paid, pending, expired}}
```

---

## 17.3 Relatorio de Colaboradores (Pagamentos)

```
AJAX: POST /finance/reports/charges/list/ajax
  ↓
ReportController@reportCollaborator_list_ajax
  ↓
FinanceTransaction (origin='Colaborador'|'Colaborador Manual')
  com transfer.snapshotItem.snapshot
  ↓
BucketGoogleApiController::buildSignedUrl (comprovantes)
  ↓
JSON {data[], summary: {total, paid, processing, rejected, scheduled}}
```

**APIs chamadas:** Google Cloud Storage (URLs de comprovantes)

---

## 17.4 Relatorio Operacional

```
AJAX: POST /finance/reports/operational/list/ajax
  ↓
ReportController@reportOperational_list_ajax
  ↓
FinanceTransaction (origin='Operacional')
  com bill, transfer.transferAccount, pixQrcode
  ↓
JSON {data[], summary}
```

---

## 17.5 Upload de Comprovante

```
Usuario
  ↓
Relatorio → Transacao → Upload comprovante
  ↓
POST /finance/reports/operational/upload-receipt
  ↓
ReportController@uploadReceipt
  ↓
Validacao: file (jpg/png/pdf max 10MB), item_id, receipt_category (cb|cf)
  ↓
FinanceFileService::generateFileName
BucketGoogleApiController::uploadToBucket
  ↓
FinanceTransaction::update(bank_receipt_url ou tax_receipt_url)
  ↓
JSON {success, url}
```

**Tabelas alteradas:** `finance_transactions` (bank_receipt_url ou tax_receipt_url)
**APIs chamadas:** Google Cloud Storage (upload)

---

## 17.6 Cancelar Transacao Agendada (via Relatorio)

```
POST /finance/reports/operational/cancel-scheduled/{id}
  ↓
ReportController@report_cancel_scheduled
  ↓
DB::beginTransaction (lock for update)
  ↓
FinanceTransaction::update(status='cancelled')
FinancePaymentCollabSnapshotItem::update(status='cancelled') se vinculado
  ↓
DB::commit
```

**Tabelas alteradas:** `finance_transactions`, `finance_payment_collab_snapshot_items`

---

## 17.7 Excluir Transacao com Erro (via Relatorio)

```
POST /finance/reports/operational/delete
  ↓
ReportController@reportOperational_delete
  ↓
Validacao: status deve ser 'rejected' ou 'error'
  ↓
FinanceTransaction::delete
```

**Tabelas alteradas:** `finance_transactions` (DELETE)
