# Database Documentation - Nexos (Exent)

> Documentacao completa do banco de dados. Gerado em 2026-06-18.
> Multi-tenant: banco central (landlord) + banco por tenant.

---

## Indice

1. [Visao Geral](#1-visao-geral)
2. [Tabelas Landlord (Centrais)](#2-tabelas-landlord-centrais)
3. [Tabelas Tenant - Core](#3-tabelas-tenant---core)
4. [Tabelas Tenant - Finance (Clientes e Projetos)](#4-tabelas-tenant---finance-clientes-e-projetos)
5. [Tabelas Tenant - Finance (Cobrancas)](#5-tabelas-tenant---finance-cobrancas)
6. [Tabelas Tenant - Finance (Pagamentos Colaboradores)](#6-tabelas-tenant---finance-pagamentos-colaboradores)
7. [Tabelas Tenant - Finance (Transacoes)](#7-tabelas-tenant---finance-transacoes)
8. [Tabelas Tenant - Finance (Conta Corrente)](#8-tabelas-tenant---finance-conta-corrente)
9. [Tabelas Tenant - Finance (Configuracao)](#9-tabelas-tenant---finance-configuracao)
10. [Tabelas Tenant - Wiki](#10-tabelas-tenant---wiki)

---

## 1. Visao Geral

| Escopo | Tabelas | Descricao |
|--------|---------|-----------|
| Landlord | 16 | Usuarios, tenants, sessoes, cache, filas, integracoes, email configs |
| Tenant - Core | 9 | Colaboradores, clientes, projetos, contratos, alteracoes pendentes |
| Tenant - Finance | 27 | Cobrancas, pagamentos, transacoes, extratos, NFs, campanhas, config |
| Tenant - Wiki | 8 | Artigos, categorias, trilhas, modulos, topicos |
| **Total** | **60** | |

---

## 2. Tabelas Landlord (Centrais)

### 2.1 users

**Finalidade:** Usuarios do sistema. Autenticacao via Google OAuth.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| name | varchar(255) | nao | | |
| email | varchar(255) | nao | | UNIQUE |
| password | varchar(255) | nao | | hashed |
| type | varchar(50) | sim | | |
| status | boolean | sim | | |
| theme | varchar(50) | sim | | light/dark |
| avatar | varchar(255) | sim | | URL Google |
| deleted_at | timestamp | sim | | |
| permissions | json | sim | | |
| remember_token | varchar(100) | sim | | |
| timestamps | | | | |

**Relacionamentos:**
- belongsToMany → `tenants` (via `tenant_user`)

**Indices:** UNIQUE(email)

**Onde e utilizada:** GoogleController (login), MasterController (CRUD), TenantSelectionController, WikiArticle (author)

---

### 2.2 tenants

**Finalidade:** Empresas do sistema. Cada tenant tem banco de dados proprio.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | varchar(255) PK | nao | | slug do nome |
| data | json | sim | | metadados stancl/tenancy |
| timestamps | | | | |

**Relacionamentos:**
- belongsToMany → `users` (via `tenant_user`)
- hasMany → `company_token`
- hasMany → `email_configs`

**Onde e utilizada:** MasterController, TenantSelectionController, AsaasWebhookMiddleware, todos os middlewares de tenancy

---

### 2.3 tenant_user

**Finalidade:** Relacao N:N entre usuarios e tenants.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| user_id | bigint FK | nao | | CASCADE delete |
| tenant_id | varchar(255) FK | nao | | CASCADE delete |
| timestamps | | | | |

**FKs:** user_id → users(id), tenant_id → tenants(id)

---

### 2.4 integration_providers

**Finalidade:** Provedores de integracao (Asaas, Iugu, Spedy, Google Cloud, Slack, Monday, etc).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| name | varchar(255) | nao | | Nome de exibicao |
| slug | varchar(255) | nao | | UNIQUE, ex: "asaas" |
| timestamps | | | | |

**Relacionamentos:** hasMany → `integration_tokens`

**Onde e utilizada:** IntegrationCredentialService, MasterController, AsaasWebhookMiddleware, IntegrationApiTokenMiddleware

---

### 2.5 integration_tokens

**Finalidade:** Credenciais de API armazenadas com criptografia.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| provider_id | bigint FK | nao | | CASCADE delete |
| label | varchar(255) | nao | | |
| payload | text | nao | | JSON criptografado (accessor/mutator) |
| is_shared | boolean | | false | Compartilhado entre tenants |
| timestamps | | | | |

**FKs:** provider_id → integration_providers(id)

**Relacionamentos:** belongsTo → `integration_providers`, hasMany → `company_token`

**Seguranca:** payload e criptografado no set e descriptografado no get via custom accessors.

---

### 2.6 company_token

**Finalidade:** Vinculo entre tenant e token de integracao.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| tenant_id | varchar(255) | nao | | INDEX |
| integration_token_id | bigint FK | nao | | CASCADE delete |
| timestamps | | | | |

**FKs:** integration_token_id → integration_tokens(id)

**Onde e utilizada:** IntegrationCredentialService, MasterController, AsaasWebhookMiddleware

---

### 2.7 email_configs

**Finalidade:** Configuracao SMTP por tenant e modulo (finance, core).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| tenant_id | varchar(255) | nao | | INDEX |
| module | varchar(255) | nao | | "finance", "core" |
| payload | text | nao | | JSON criptografado (SMTP credentials) |
| signature | longText | nao | | HTML da assinatura |
| timestamps | | | | |

**Seguranca:** payload e criptografado (host, port, username, password, encryption, from).

**Onde e utilizada:** MailService, SmtpCredentialService, MasterController

---

### 2.8 sessions

**Finalidade:** Sessoes de usuario (driver database).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | varchar(255) PK | | | |
| user_id | bigint | sim | | INDEX |
| ip_address | varchar(45) | sim | | |
| user_agent | text | sim | | |
| payload | longText | nao | | |
| last_activity | int | nao | | INDEX |

---

### 2.9 personal_access_tokens

**Finalidade:** Tokens API (Laravel Sanctum).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| tokenable_type | varchar(255) | nao | | morphs |
| tokenable_id | bigint | nao | | morphs |
| name | text | nao | | |
| token | varchar(64) | nao | | UNIQUE |
| abilities | text | sim | | |
| last_used_at | timestamp | sim | | |
| expires_at | timestamp | sim | | INDEX |
| timestamps | | | | |

---

### 2.10 jobs / job_batches / failed_jobs

**Finalidade:** Fila de processamento (queue driver database).

**jobs:**

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| queue | varchar(255) | INDEX |
| payload | longText | Job serializado |
| attempts | tinyint | |
| reserved_at | int nullable | |
| available_at | int | |
| created_at | int | |

**failed_jobs:**

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| uuid | varchar(255) | UNIQUE |
| connection | text | |
| queue | text | |
| payload | longText | |
| exception | longText | |
| failed_at | timestamp | |

---

### 2.11 cache / cache_locks

**Finalidade:** Cache do sistema (driver database).

**cache:** key (PK), value (mediumText), expiration (int)
**cache_locks:** key (PK), owner (varchar), expiration (int)

---

### 2.12 password_reset_tokens

**Finalidade:** Tokens de reset de senha.

| Campo | Tipo | Obs |
|-------|------|-----|
| email | varchar(255) PK | |
| token | varchar(255) | |
| created_at | timestamp | |

---

### 2.13 domains

**Finalidade:** Dominios por tenant (stancl/tenancy).

| Campo | Tipo | Obs |
|-------|------|-----|
| id | int PK | |
| domain | varchar(255) | UNIQUE |
| tenant_id | varchar(255) FK | CASCADE |

---

## 3. Tabelas Tenant - Core

### 3.1 core_collaborators

**Finalidade:** Colaboradores da empresa. Entidade central do RH.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| monday_id | bigint | sim | | ID no Monday.com |
| space_id | bigint | sim | | ID no Exent Space |
| slack_id | varchar(100) | sim | | ID no Slack |
| name | varchar(100) | nao | | |
| email | varchar(100) | nao | | |
| phone | varchar(14) | sim | | |
| cpf_number | varchar(11) | sim | | |
| birthday_date | date | sim | | |
| profile_image_filename | varchar(255) | sim | | Path GCS |
| doc_cnh_filename | varchar(255) | sim | | Path GCS |
| doc_rg_filename | varchar(255) | sim | | Path GCS |
| doc_cpf_filename | varchar(255) | sim | | Path GCS |
| doc_cin_filename | varchar(255) | sim | | Path GCS |
| zipcode | varchar(8) | sim | | |
| address | varchar(255) | sim | | |
| address_number | int | sim | | |
| address_complement | varchar(100) | sim | | |
| emergency_contact_name | varchar(255) | sim | | |
| emergency_contact_phone | varchar(14) | sim | | |
| emergency_contact_relationship | varchar(100) | sim | | |
| shirt_size | varchar(5) | sim | | P/M/G/GG/XG |
| start_date | date | sim | | |
| end_date | date | sim | | |
| deleted_at | timestamp | sim | | Soft delete manual |
| status | boolean | | true | |
| exent_space_status | boolean | | false | Ativo no Space |
| exent_space_admin | boolean | | false | Admin no Space |
| timestamps | | | | |

**Relacionamentos:**
- hasMany → `core_collaborator_contracts`
- hasMany → `finance_collaborator_bank_accounts`

**Onde e utilizada:** CollaboratorController, CollabController, PaymentsController, InvoicesController, ReportController, ProjectController, RecurrenceSnapshotService, AwardSnapshotService, SnapshotTransferService, CoreBirthdayCollabService, FinanceWebhookController

---

### 3.2 core_collaborator_contracts

**Finalidade:** Contratos de trabalho do colaborador.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| collaborator_id | bigint FK | nao | | |
| payment_id | bigint | sim | | Ref pagamento |
| department | varchar(255) | sim | | |
| company_position | varchar(100) | sim | | |
| contract_type | varchar(100) | sim | | CLT/PJ/Estagio/Estagio-PJ |
| schedule_start | time | sim | | |
| schedule_end | time | sim | | |
| start_date | date | sim | | |
| end_date | date | sim | | |
| reason_for_end | varchar(255) | sim | | |
| timestamps | | | | |

**FKs:** collaborator_id → core_collaborators(id)

**Onde e utilizada:** CollaboratorController, PaymentsController, InvoicesController, SnapshotInvoiceService

---

### 3.3 core_clients

**Finalidade:** Clientes institucionais (base compartilhada Core/Finance).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| monday_id | bigint | sim | | ID no Monday.com |
| name | varchar(255) | nao | | |
| website | varchar(255) | sim | | |
| client_type | varchar(50) | sim | | Tipo configuravel |
| status | boolean | | true | |
| deleted_at | timestamp | sim | | |
| timestamps | | | | |

**Relacionamentos:** hasMany → `core_client_contacts`

**Onde e utilizada:** InstitutionalClientController, ProjectController, BillableClientController, IncorpController

---

### 3.4 core_client_contacts

**Finalidade:** Contatos do cliente institucional.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| core_client_id | bigint FK | nao | | |
| name | varchar(100) | nao | | |
| email | varchar(100) | sim | | |
| phone | varchar(14) | sim | | |
| position | varchar(100) | sim | | |
| notes | text | sim | | |
| is_primary | boolean | | false | |
| timestamps | | | | |

**FKs:** core_client_id → core_clients(id)

---

### 3.5 core_projects

**Finalidade:** Projetos vinculados a clientes.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| client_id | bigint FK | nao | | core_clients |
| finance_client_id | bigint FK | sim | | finance_clients |
| responsable_collab_id | bigint FK | sim | | core_collaborators |
| monday_id | bigint | sim | | ID Monday.com |
| project_contract_id | bigint | sim | | Ref contrato ativo |
| project_finance_id | bigint | sim | | Ref config financeira ativa |
| project_type | varchar(255) | sim | | Tipo configuravel |
| name | varchar(255) | nao | | |
| observation | text | sim | | |
| status | boolean | | true | |
| start_date | date | sim | | |
| end_date | date | sim | | |
| reason_for_end | varchar(255) | sim | | |
| timestamps | | | | |

**FKs:** client_id → core_clients(id), finance_client_id → finance_clients(id), responsable_collab_id → core_collaborators(id)

**Relacionamentos:**
- belongsTo → CoreClient, FinanceClient
- hasMany → CoreProjectContract, FinanceProject
- hasOne → latestContract, latestFinanceProject

**Onde e utilizada:** ProjectController, ChargesController, RecurrenceController, SummaryController, IncorpController, InvoiceCreationService, PendingChargesGenerationService, RecurrenceSyncService

---

### 3.6 core_project_contracts

**Finalidade:** Contratos de projetos (SLA, preco, vigencia).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| project_id | bigint FK | nao | | |
| project_finance_id | bigint | sim | | |
| contract_name | varchar(255) | sim | | |
| sla | int | sim | | |
| price | decimal(10,2) | sim | | |
| notes | text | sim | | |
| post_per_month | int | sim | | |
| status | boolean | | true | |
| start_date | date | sim | | |
| end_date | date | sim | | |
| reason_for_end | varchar(255) | sim | | |
| timestamps | | | | |

**FKs:** project_id → core_projects(id)

---

### 3.7 core_collab_pending_changes

**Finalidade:** Alteracoes pendentes vindas do Exent Space, aguardando aprovacao.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| collab_id | bigint | nao | | |
| space_id | bigint | nao | | |
| origin | varchar(100) | | 'exent_space' | |
| type | varchar(100) | sim | | Tipo da alteracao |
| old_info | json | nao | | Snapshot antes |
| new_info | json | nao | | Dados novos |
| status | enum | | 'pending' | pending/approved/rejected |
| rejected_reason | varchar(255) | sim | | |
| timestamps | | | | |

**Onde e utilizada:** CollaboratorController, CollabController

---

### 3.8 core_email_templates

**Finalidade:** Templates de email do modulo Core.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| type | varchar(255) | Ex: collab_change_pending, collab_change_approved |
| subject | text | |
| body | text | HTML com placeholders |
| footer | varchar(255) nullable | |
| timestamps | | |

---

### 3.9 core_email_to

**Finalidade:** Destinatarios de email do modulo Core.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| type | varchar(255) | Ex: collaborator_info_change, collaborator_birthday |
| main_email | varchar(255) | |
| main_name | varchar(255) nullable | |
| copies | json nullable | Array de {name, email} |
| timestamps | | |

---

## 4. Tabelas Tenant - Finance (Clientes e Projetos)

### 4.1 finance_clients

**Finalidade:** Dados fiscais do cliente (CNPJ, endereco, IDs de gateways).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| core_client_id | bigint FK | nao | | |
| iugu_id | varchar(255) | sim | | ID no Iugu |
| asaas_id | varchar(255) | sim | | ID no Asaas |
| legal_name | varchar(255) | nao | | Razao social |
| document_type | varchar(50) | sim | | cpf/cnpj |
| document_number | varchar(20) | sim | | |
| observation | text | sim | | |
| status | boolean | | true | |
| zipcode | varchar(8) | sim | | |
| street_type | varchar(50) | sim | | |
| street_name | varchar(255) | sim | | |
| number | varchar(20) | sim | | |
| complement | varchar(100) | sim | | |
| neighborhood | varchar(100) | sim | | |
| city | varchar(100) | sim | | |
| state | varchar(100) | sim | | |
| country | varchar(100) | sim | | |
| preferential_due_date | int | sim | | Dia preferencial (1-31) |
| due_on_working_days_only | boolean | | false | Vencimento so dia util |
| attached_bill | boolean | | false | Anexar boleto no email |
| stage | tinyint | | 1 | 1=novo, 2=modificado, 3=sincronizado |
| timestamps | | | | |

**FKs:** core_client_id → core_clients(id)

**Relacionamentos:** belongsTo → CoreClient, hasMany → FinanceClientContact

**Onde e utilizada:** BillableClientController, ProjectController, ChargesController, SummaryController, IncorpController, ConfigController, ClientsSyncService, PendingChargesGenerationService, InvoiceCreationService, EmailChargeService, EmailSummaryService

---

### 4.2 finance_client_contacts

**Finalidade:** Contatos fiscais do cliente (para envio de cobrancas).

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| finance_client_id | bigint FK | |
| name | varchar(100) | |
| email | varchar(100) nullable | |
| phone | varchar(14) nullable | |
| is_primary | boolean, default false | |
| timestamps | | |

**FKs:** finance_client_id → finance_clients(id)

---

### 4.3 finance_projects

**Finalidade:** Configuracao financeira do projeto (tipo cobranca, valor, descricao NF).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| project_id | bigint FK | nao | | |
| project_contract_id | bigint FK | sim | | |
| finance_client_id | bigint FK | nao | | |
| send_mail | boolean | | true | false = entra em resumo |
| billing_type | varchar(50) | sim | | |
| value | decimal(13,2) | sim | | Valor mensal |
| invoice_description | text | sim | | Descricao para NFS-e |
| status | boolean | | true | |
| timestamps | | | | |

**FKs:** project_id → core_projects(id), finance_client_id → finance_clients(id), project_contract_id → core_project_contracts(id)

---

## 5. Tabelas Tenant - Finance (Cobrancas)

### 5.1 finance_charges

**Finalidade:** Cobrancas (boletos/PIX) emitidas para clientes. Tabela mais acessada do sistema.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| project_id | bigint FK | nao | | |
| finance_client_id | bigint FK | nao | | |
| finance_recurrence_id | bigint FK | sim | | |
| campaign_id | bigint | sim | | Campanha Monday |
| parent_charge_id | bigint | sim | | Self-ref para 2a via |
| billing_summary_id | bigint | sim | | Vinculo com bill do resumo |
| is_second_copy | boolean | | false | |
| id_payment_iugu | varchar(100) | sim | | ID pagamento Iugu |
| id_payment_asaas | varchar(255) | sim | | ID pagamento Asaas |
| id_nfs | varchar(150) | sim | | ID NFS-e |
| description | varchar(255) | nao | | |
| issue_day | date | nao | | Data emissao |
| due_date | date | nao | | Data vencimento |
| value | decimal(13,2) | nao | | |
| tag | varchar(100) | nao | | Manual/Recorrencia/Campanha/2a Via |
| bill_url | varchar(255) | sim | | URL do boleto |
| bill_status | varchar(100) | nao | | Programado/Pendente/Pago/Cancelado/... |
| nfs_url | varchar(255) | sim | | URL do PDF da NFS-e |
| nfs_status | varchar(150) | sim | | created/authorized/canceled/... |
| nfs_number | int | sim | | Numero da NFS-e |
| is_mail_sent | boolean | | false | |
| mail_stage | int | | 0 | 0-9, controle de notificacoes |
| bill_stage | int | | 1 | 1=draft, 2=emitida, 3=final |
| paid_at | timestamp | sim | | Data/hora pagamento |
| bill_pdf_url | varchar(255) | sim | | URL PDF boleto |
| fine_value | decimal(13,2) | sim | | Valor da multa |
| fine_paid | boolean | | false | Multa paga |
| summary | boolean | | false | Pertence a resumo |
| failed_mail | boolean | | false | Email falhou |
| log | json | sim | | Historico de operacoes |
| timestamps | | | | |

**FKs:** finance_client_id → finance_clients(id), project_id → core_projects(id), finance_recurrence_id → finance_recurrence(id)

**Indices:**
- (bill_status, due_date)
- (project_id, bill_status)
- (finance_client_id, bill_status)
- (finance_recurrence_id, bill_status)
- (parent_charge_id)
- (billing_summary_id)
- (bill_status)

**Scopes:** scopeByStatus, scopeByProject, scopeByClient

**Onde e utilizada:** ChargesController, RecurrenceController, SummaryController, BillableClientController, IncorpController, ProjectController, ReportController, FinanceController, SyncController, ChargesSyncService, PendingChargesGenerationService, InvoiceCreationService, InvoiceSyncService, RecurrenceSyncService, EmailChargeService, EmailSummaryService, BillingSummaryStatusService, AsaasCheckInvoiceService, AsaasStatementService, IuguStatementService, PushNotificationService, IuguChargesController, IuguCheckPaymentController, SpedyApiController

---

### 5.2 finance_recurrence

**Finalidade:** Regras de recorrencia para geracao automatica de cobrancas.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| project_id | bigint FK | nao | | |
| finance_client_id | bigint FK | nao | | |
| issue_day | int | nao | | Dia de emissao (1-31) |
| due_date | int | nao | | Dia de vencimento (1-31) |
| value | decimal(13,2) | nao | | |
| cycle | int | | 0 | 0=indefinido, N=limite |
| past_cycle | int | | 0 | Ciclos ja executados |
| active | boolean | | true | |
| stage | int | | 1 | 1=pronto, 2=gerou neste ciclo |
| log | json | sim | | Historico |
| timestamps | | | | |
| deleted_at | timestamp | sim | | **SoftDeletes** |

**FKs:** project_id → core_projects(id), finance_client_id → finance_clients(id)

**Indices:** (project_id, active)

**Onde e utilizada:** RecurrenceController, ProjectController, RecurrenceSyncService, FinanceController

---

### 5.3 finance_billing_summary

**Finalidade:** Agrupamento de cobrancas de multiplos projetos para envio consolidado.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| title | varchar(255) | nao | | |
| id_projects | json | sim | | Array de project_ids |
| contact_name | varchar(100) | nao | | |
| main_email | varchar(200) | nao | | |
| main_phone | varchar(16) | sim | | |
| additional_contact | json | sim | | |
| active | boolean | | true | |
| log | json | sim | | |
| timestamps | | | | |

**Relacionamentos:** hasMany → FinanceBillingSummaryBill

**Onde e utilizada:** SummaryController, ProjectController, IncorpController, EmailSummaryService, ChargesController

---

### 5.4 finance_billing_summary_bills

**Finalidade:** Bills individuais gerados a partir do resumo de cobranca.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| id_label | int | nao | | Sequencia no resumo |
| id_billing_summary | bigint FK | nao | | |
| cod | varchar(200) | nao | | RC-{id}-{seq} |
| id_payments | json | sim | | Array de charge_ids |
| contact_name | varchar(100) | nao | | |
| main_email | varchar(200) | nao | | |
| main_phone | varchar(16) | sim | | |
| additional_contact | json | sim | | |
| stage | varchar(255) | | 'Gerado' | Gerado/Pendente/Finalizado |
| mail_stage | int | | 0 | |
| failed_mail | boolean | | false | |
| log | json | sim | | |
| timestamps | | | | |

**FKs:** id_billing_summary → finance_billing_summary(id)

**Onde e utilizada:** SummaryController, ChargesController, EmailSummaryService, BillingSummaryStatusService

---

### 5.5 finance_campaigns

**Finalidade:** Campanhas importadas do Monday.com (Incorp).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| id_project | bigint FK | nao | | finance_projects |
| id_billable_customer | bigint FK | nao | | finance_clients |
| id_project_monday | varchar(100) | nao | | ID projeto Monday |
| id_pulse_monday | varchar(100) | nao | | ID pulse Monday |
| issue_day | date | sim | | |
| due_date | date | sim | | |
| value | decimal(13,2) | nao | | |
| status | varchar(150) | nao | | Sincronizado/Atualizado/Cancelada |
| stage | int | | 0 | 0=cancelada, 1=sync, 2=atualizada, 3=cobranca gerada |
| log | json | sim | | |
| timestamps | | | | |

**FKs:** id_billable_customer → finance_clients(id), id_project → finance_projects(id)

---

### 5.6 finance_refunds

**Finalidade:** Reembolsos solicitados por colaboradores via Exent Space.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| id_space | varchar(255) | nao | | ID no Exent Space |
| collaborator | varchar(255) | nao | | Nome |
| main_email | varchar(200) | nao | | |
| date_use | date | nao | | Data de uso |
| value | decimal(13,2) | nao | | |
| pix_key | varchar(255) | nao | | |
| link_proof | varchar(255) | sim | | URL comprovante GCS |
| description | text | nao | | |
| status | varchar(100) | nao | | Pendente/Pago/Reprovado/Cancelado |
| is_mail_sent | boolean | | false | |
| alert_sent | boolean | | false | Notificacao de pendencia |
| reason | text | sim | | Motivo rejeicao |
| timestamps | | | | |

**Onde e utilizada:** RefundsController, FinanceWebhookController, CollabController, FinanceMailService

---

## 6. Tabelas Tenant - Finance (Pagamentos Colaboradores)

### 6.1 finance_collaborator_bank_accounts

**Finalidade:** Contas bancarias dos colaboradores para recebimento.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| collaborator_id | bigint FK | nao | | |
| identifier | varchar(255) | sim | | Label da conta |
| bank_name | varchar(100) | sim | | |
| bank_number | varchar(20) | sim | | Codigo banco |
| bank_agency | varchar(20) | sim | | |
| bank_account | varchar(20) | sim | | |
| bank_account_digit | varchar(1) | sim | | |
| bank_ispb | varchar(10) | sim | | Codigo ISPB |
| pix_type | varchar(50) | sim | | cpf/cnpj/email/phone/evp |
| pix_key | varchar(100) | sim | | |
| main_account | boolean | | false | Conta principal |
| account_type | enum | sim | | checking/salary/savings/payment |
| is_active | boolean | | true | |
| timestamps | | | | |

**FKs:** collaborator_id → core_collaborators(id)

**Onde e utilizada:** CollaboratorController, PaymentsController, SnapshotTransferService, CollabController

---

### 6.2 finance_collaborator_payments

**Finalidade:** Valores de pagamento por colaborador (salario, premio).

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| collaborator_id | bigint FK | |
| value | decimal(13,2) | |
| type | varchar(50) nullable | Salario/Premio |
| observation | text nullable | |
| reference_date | date nullable | |
| payment_day | int nullable | |
| timestamps | | |

---

### 6.3 finance_payments_collab_recurrence

**Finalidade:** Itens de pagamento recorrente por colaborador (mensal).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| collaborator_id | bigint FK | nao | | restrict delete |
| bank_id | bigint FK | sim | | Conta bancaria |
| reference_description | varchar(255) | nao | | |
| value | decimal(13,2) | nao | | |
| priority | int | sim | 1 | 1/2/3 |
| status | boolean | | true | |
| notes | text | sim | | |
| timestamps | | | | |

**FKs:** collaborator_id → core_collaborators(id), bank_id → finance_collaborator_bank_accounts(id)

**Onde e utilizada:** PaymentsController, RecurrenceSnapshotService

---

### 6.4 finance_payment_collab_snapshots

**Finalidade:** Lotes de pagamento a colaboradores (mensal ou semestral).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| title | varchar(255) | nao | | |
| reference_date | date | nao | | |
| type | enum | nao | | recurrence/award |
| status | enum | | 'draft' | draft/execution/closed |
| lock_date | date | sim | | Edicoes bloqueadas apos |
| timestamps | | | | |

**Relacionamentos:** hasMany → FinancePaymentCollabSnapshotItem

**Onde e utilizada:** PaymentsController, TransactionsController, ReportController, SnapshotInvoiceService, RecurrenceSnapshotService, AwardSnapshotService, SnapshotTransferService, SnapshotStatusService, SnapshotGeneratedMailService, PushNotificationService

---

### 6.5 finance_payment_collab_snapshot_items

**Finalidade:** Itens individuais do lote de pagamento (1 por colaborador por snapshot).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| snapshot_id | bigint FK | nao | | CASCADE delete |
| collaborator_id | bigint FK | nao | | restrict delete |
| collab_bank_id | bigint FK | sim | | Conta bancaria usada |
| transaction_id | bigint FK | sim | | Transacao vinculada |
| invoice_item | bigint | sim | | ID da FinanceInvoice |
| invoice_expected | boolean | | false | NF esperada |
| reference_description | varchar(255) | sim | | |
| value | decimal(13,2) | sim | | |
| notes | text | sim | | |
| priority | int | sim | 1 | 1/2/3 |
| status | enum | | 'draft' | draft/execution/paid/error/cancelled/scheduled |
| log | json | sim | | |
| timestamps | | | | |

**FKs:** snapshot_id → finance_payment_collab_snapshots(id), collaborator_id → core_collaborators(id), collab_bank_id → finance_collaborator_bank_accounts(id), transaction_id → finance_transactions(id)

**Relacionamentos:** belongsTo → snapshot, collaborator, transaction, bankAccount. hasOne → transactionTransfer

**Onde e utilizada:** PaymentsController, TransactionsController, ReportController, AsaasWebhookController, AsaasCheckPaymentsService, IuguPaymentService, CheckIuguPaymentsJob, SnapshotInvoiceService, RecurrenceSnapshotService, AwardSnapshotService, SnapshotTransferService, SnapshotStatusService, SnapshotGeneratedMailService

---

### 6.6 finance_invoices

**Finalidade:** Notas fiscais enviadas por colaboradores PJ.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| collaborator_id | bigint FK | nao | | |
| origin_type | enum | nao | | recurrence/award |
| origin_id | bigint | sim | | ID do snapshot |
| filename | varchar(255) | sim | | Path GCS do PDF |
| reference_date | date | nao | | Mes referencia |
| expected_amount | decimal(13,2) | nao | | Valor esperado |
| received_amount | decimal(13,2) | sim | | Valor recebido (AI) |
| status | enum | | 'expected' | expected/rejected/received/delayed/cancelled |
| status_value | boolean | | true | Valor confere |
| notification_stage | tinyint | | 0 | |
| notes | text | sim | | |
| received_at | date | sim | | |
| timestamps | | | | |

**FKs:** collaborator_id → core_collaborators(id)

**Indices:** (collaborator_id, status), (origin_type, origin_id), (reference_date)

**Onde e utilizada:** InvoicesController, FinanceWebhookController, CollabController, PaymentsController, SnapshotInvoiceService, EmailNFsCollabService, SlackNFsCollabService, FinanceInvoiceLimitService

---

## 7. Tabelas Tenant - Finance (Transacoes)

### 7.1 finance_transactions

**Finalidade:** Transacoes financeiras (pagamentos operacionais e de colaboradores).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| provider | enum | nao | | asaas/iugu |
| id_asaas | varchar(255) | sim | | ID no Asaas |
| id_iugu | varchar(255) | sim | | ID no Iugu |
| transaction_type | enum | nao | | TED/PIX/BOLETO/PIX_QRCODE |
| origin_type | varchar(255) | nao | | Operacional/Colaborador/Colaborador Manual/Mesma Titularidade/Teste |
| retry_id | bigint | sim | | Self-ref para retry |
| value | decimal(15,2) | nao | | |
| payment_type | enum | sim | | Custo/Despesa/Movimentacao entre Contas |
| description | varchar(255) | sim | | |
| category | varchar(255) | sim | | |
| bank_receipt_url | varchar(255) | sim | | Comprovante bancario GCS |
| tax_receipt_url | varchar(255) | sim | | Comprovante fiscal GCS |
| schedule_date | date | sim | | Data agendamento |
| paid_at | timestamp | sim | | |
| status | enum | nao | | draft/pending/processing/paid/cancelled/scheduled/error/rejected |
| log | json | sim | | |
| timestamps | | | | |

**Relacionamentos:**
- hasOne → FinanceTransactionTransfer, FinanceTransactionBill, FinanceTransactionPixQrcode
- belongsTo → FinanceTransaction (retry, self-ref)
- hasMany → FinanceTransaction (retries)

**Onde e utilizada:** TransactionsController, ReportController, PaymentsController, AsaasWebhookController, DispatchScheduledPaymentsJob, CheckIuguPaymentsJob, ProcessPaymentJob, AsaasPaymentService, IuguPaymentService, AsaasCheckPaymentsService, SnapshotTransferService, AsaasStatementService, IuguStatementService, FinanceFileService

---

### 7.2 finance_transactions_transfers

**Finalidade:** Dados de transferencia (TED/PIX) vinculados a transacao.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| transaction_id | bigint FK | nao | | CASCADE delete |
| snapshot_item_id | bigint FK | sim | | |
| transfer_account_id | bigint FK | sim | | |
| transfer_type | enum | nao | | TED/PIX |
| name | varchar(255) | sim | | |
| cpf_cnpj | varchar(20) | sim | | |
| bank_code | varchar(10) | sim | | |
| ispb | varchar(255) | sim | | |
| agency | varchar(20) | sim | | |
| account | varchar(30) | sim | | |
| account_digit | varchar(1) | sim | | |
| bank_account_type | enum | sim | | CONTA_CORRENTE/CONTA_POUPANCA |
| pix_address_key | varchar(255) | sim | | |
| pix_address_key_type | enum | sim | | CPF/CNPJ/EMAIL/PHONE/EVP |
| end_to_end_id | varchar(255) | sim | | ID fim-a-fim (Banco Central) |
| timestamps | | | | |

**FKs:** transaction_id → finance_transactions(id) CASCADE, snapshot_item_id → finance_payment_collab_snapshot_items(id), transfer_account_id → finance_transfer_accounts(id)

---

### 7.3 finance_transactions_bills

**Finalidade:** Dados de boleto vinculados a transacao.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| transaction_id | bigint FK | nao | | CASCADE delete |
| identification_field | varchar(255) | nao | | Codigo barras/linha digitavel |
| filename | varchar(255) | sim | | Path GCS |
| discount | decimal(15,2) | sim | | |
| interest | decimal(15,2) | sim | | |
| fine | decimal(15,2) | sim | | |
| due_date | date | sim | | |
| reading_method | enum | sim | | barcode/qrcode/ai |
| beneficiary_cpf_cnpj | varchar(50) | sim | | |
| company_name | varchar(255) | sim | | |
| beneficiary | varchar(255) | sim | | |
| beneficiary_id | bigint FK | sim | | |
| timestamps | | | | |

**FKs:** transaction_id → finance_transactions(id) CASCADE, beneficiary_id → finance_config_beneficiaries(id)

---

### 7.4 finance_transactions_pix_qrcode

**Finalidade:** Dados de PIX QR Code vinculados a transacao.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| transaction_id | bigint FK | nao | | CASCADE delete |
| payload | text | nao | | Payload PIX completo |
| filename | varchar(255) | sim | | Path GCS |
| qr_type | varchar(255) | sim | | Estatico/Dinamico |
| pix_key | varchar(255) | sim | | |
| conciliation_identifier | varchar(255) | sim | | ID conciliacao (unico em dinamico) |
| due_date | date | sim | | |
| discount | decimal(15,2) | sim | | |
| interest | decimal(15,2) | sim | | |
| fine | decimal(15,2) | sim | | |
| change_value | decimal(15,2) | sim | | Troco |
| total_value | decimal(15,2) | sim | | |
| reading_method | enum | sim | | qrcode/copy_paste/ai |
| beneficiary_cpf_cnpj | varchar(50) | sim | | |
| company_name | varchar(255) | sim | | |
| beneficiary | varchar(255) | sim | | |
| beneficiary_id | bigint FK | sim | | |
| end_to_end_id | varchar(255) | sim | | |
| timestamps | | | | |

**FKs:** transaction_id → finance_transactions(id) CASCADE, beneficiary_id → finance_config_beneficiaries(id)

---

### 7.5 finance_transfer_accounts

**Finalidade:** Contas de terceiros cadastradas para transferencias recorrentes.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| register_type | enum | sim | | custo_despesa/mesma_titularidade |
| name | varchar(255) | sim | | |
| account_name | varchar(255) | sim | | |
| cpf_cnpj | varchar(20) | sim | | |
| payment_type | enum | sim | | Custo/Despesa/Movimentacao entre Contas |
| description | varchar(255) | sim | | |
| category | varchar(255) | sim | | |
| value | decimal(15,2) | sim | | Valor padrao |
| bank_code | varchar(10) | sim | | |
| bank_name | varchar(255) | sim | | |
| ispb | varchar(10) | sim | | |
| branch | varchar(20) | sim | | |
| account | varchar(30) | sim | | |
| account_digit | varchar(1) | sim | | |
| account_type | enum | sim | | checking/salary/savings/payment |
| pix_type | enum | sim | | cpf/cnpj/email/phone/evp |
| pix_key | varchar(255) | sim | | |
| preference | enum | sim | | ted/pix |
| timestamps | | | | |

**Relacionamentos:** hasMany → FinanceTransactionTransfer

**Onde e utilizada:** TransactionsController, ConfigController, PaymentsController

---

## 8. Tabelas Tenant - Finance (Conta Corrente)

### 8.1 finance_ca_statement

**Finalidade:** Extrato unificado de conta corrente (todos os bancos).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| bank_account | varchar(255) | nao | | asaas/iugu/btg/itau/c6_bank |
| type | varchar(255) | nao | | Entrada/Saida/Tarifa |
| description | varchar(255) | sim | | |
| category | varchar(255) | sim | | |
| beneficiary | varchar(255) | sim | | |
| amount | decimal(15,2) | nao | | |
| balance | decimal(15,2) | sim | | Saldo apos lancamento |
| entry_date | date | nao | | |
| iugu_statement_id | bigint FK | sim | | Vinculo com Iugu |
| asaas_transaction_id | varchar(255) | sim | | ID Asaas (INDEX) |
| is_reconciled | boolean | | false | |
| timestamps | | | | |

**Relacionamentos:** belongsTo → FinanceIuguStatements, belongsTo → FinanceTransaction (via asaas_transaction_id ↔ id_asaas)

**Onde e utilizada:** CurrentAccountController, AsaasStatementService, IuguStatementService, AsaasPaymentService

---

### 8.2 finance_iugu_statements

**Finalidade:** Extrato detalhado do Iugu com dados originais da API.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| amount | varchar(255) | sim | | Valor texto |
| type | varchar(255) | sim | | credit/debit |
| flow_type | varchar(255) | sim | | Entrada/Saida/Tarifa |
| description | varchar(255) | sim | | |
| entry_date | date | sim | | |
| reference | varchar(255) | sim | | ID referencia Iugu |
| reference_type | varchar(255) | sim | | Invoice/TransferRequest/PaymentRequest |
| account_id | varchar(255) | sim | | |
| transaction_type | varchar(255) | sim | | |
| invoice_email | varchar(255) | sim | | |
| customer_name | varchar(255) | sim | | |
| amount_cents | int | sim | | Valor em centavos |
| balance | varchar(255) | sim | | |
| balance_cents | int | sim | | |
| customer_ref | varchar(255) | sim | | |
| payer_name | varchar(255) | sim | | |
| is_reconciled | boolean | | false | |
| charge_id | bigint FK | sim | | Cobranca reconciliada |
| transaction_id | bigint FK | sim | | Transacao reconciliada |
| timestamps | | | | |

**FKs:** charge_id → finance_charges(id), transaction_id → finance_transactions(id)

---

### 8.3 finance_bank_balance

**Finalidade:** Saldo inicial de contas bancarias manuais.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| bank_account | varchar(255) | btg/itau/c6_bank |
| initial_balance | decimal(15,2) | |
| timestamps | | |

---

### 8.4 finance_ca_flow_config

**Finalidade:** Configuracao de fluxo de conta corrente (provider ativo por funcao).

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| key | varchar(60) | Identificador |
| label | varchar(120) | Label exibicao |
| active_provider | enum | iugu/asaas |
| timestamps | | |

---

### 8.5 finance_ca_flow_limits

**Finalidade:** Limites de transferencia por provider.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| asaas_daytime_limit | decimal(15,2) nullable | Limite diurno Asaas |
| iugu_daily_transfer_limit | decimal(15,2) nullable | Limite diario Iugu |
| iugu_monthly_limit | decimal(15,2) nullable | Limite mensal Iugu |
| timestamps | | |

---

## 9. Tabelas Tenant - Finance (Configuracao)

### 9.1 finance_config

**Finalidade:** Configuracoes gerais do modulo Finance (singleton por tenant).

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| client_type | json | sim | | Tipos de cliente configurados |
| project_type | json | sim | | Tipos de projeto configurados |
| sync_status | json | sim | | {last_sync: timestamp} |
| current_account_order | json | sim | | Ordem das contas correntes |
| certificate_date | date | sim | | Vencimento certificado NF |
| fine_percentage | decimal(8,2) | | 0 | % multa padrao |
| timestamps | | | | |

**Onde e utilizada:** ConfigController, FinanceController, SyncController, ChargesController, ProjectController, InstitutionalClientController, RunManualFinanceSync, PendingChargesGenerationService, CertificateNFService

---

### 9.2 finance_config_beneficiaries

**Finalidade:** Beneficiarios recorrentes para transacoes (Custo/Despesa).

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| type | enum | Custo/Despesa |
| description | varchar(255) | |
| category | varchar(255) | |
| beneficiary | json | Array de nomes |
| timestamps | | |

**Onde e utilizada:** TransactionsController, ConfigController, PaymentsController (como FK em bills e pix_qrcode)

---

### 9.3 finance_email_templates

**Finalidade:** Templates de email do modulo Finance.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| type | varchar(255) | invoice, overdue, due_date_approaching, summary_generated, etc |
| subject | text | Com placeholders |
| body | text | HTML com placeholders |
| footer | varchar(255) nullable | |
| timestamps | | |

**Onde e utilizada:** ConfigController, FinanceMailService

---

### 9.4 finance_email_to

**Finalidade:** Destinatarios de email por tipo de notificacao Finance.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| type | varchar(255) | refund_recipients, certificate_recipients, limite_mei_recipients, etc |
| main_email | varchar(255) | |
| main_name | varchar(255) nullable | |
| copies | json nullable | Array de {name, email} |
| timestamps | | |

**Onde e utilizada:** ConfigController, CertificateNFService, FinanceInvoiceLimitService, EmailNFsCollabService, SnapshotGeneratedMailService

---

### 9.5 finance_mei_limit

**Finalidade:** Configuracao de limite anual MEI para alerta.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| notification_percentage | decimal(5,2) | Fracao (ex: 0.80 = 80%) |
| limit_value | decimal(15,2) | Limite em reais |
| timestamps | | |

**Onde e utilizada:** ConfigController, FinanceInvoiceLimitService

---

### 9.6 finance_logs

**Finalidade:** Log de operacoes e erros do modulo Finance.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| type | enum | sync_error/billing_error/info/warning/api_error |
| origin | varchar(255) nullable | Classe/metodo de origem |
| content | text | Mensagem |
| details | json nullable | Dados adicionais |
| operation | enum | notice/error/critical |
| solved | boolean, default false | Resolvido pelo usuario |
| alert_sent | boolean, default false | Alerta Slack enviado |
| timestamps | | |

**Onde e utilizada:** LogService (escrita em ~25 jobs/services), SendFinanceLogAlerts (leitura + update), FinanceController (dashboard)

---

### 9.7 finance_billing_mail_logs

**Finalidade:** Log de emails de cobranca enviados.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| billing_id | bigint nullable | ID da cobranca |
| summary_id | bigint nullable | ID do bill do resumo |
| main_email | varchar(200) | |
| additional_contact | json nullable | |
| blind_copy | varchar(200) nullable | |
| email_title | varchar(255) | |
| timestamps | | |

---

### 9.8 finance_sync_runs

**Finalidade:** Historico de execucoes de sincronizacao.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| status | varchar(20) | | 'pending' | pending/running/success/partial/failed |
| current_step | varchar(60) | sim | | Step em execucao |
| steps_total | tinyint | | 5 | |
| steps_done | tinyint | | 0 | |
| steps_detail | json | sim | | Resultado por step |
| error_message | text | sim | | |
| triggered_by_user_id | bigint | sim | | |
| trigger | varchar(20) | | 'manual' | manual/cron |
| started_at | timestamp | sim | | |
| finished_at | timestamp | sim | | |
| timestamps | | | | |

**Indices:** (status, created_at)

**Onde e utilizada:** SyncController, RunFinanceSync, RunManualFinanceSync

---

### 9.9 finance_invoice_test

**Finalidade:** NFS-e de teste emitidas para validacao de configuracao.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| name | varchar(255) | nao | | |
| document_number | varchar(255) | sim | | |
| email | varchar(255) | sim | | |
| value | decimal(15,2) | nao | | |
| description | text | sim | | |
| provider | varchar(20) | | 'spedy' | spedy/asaas |
| asaas_customer_id | varchar(255) | sim | | |
| zipcode - country | varchar | sim | | Campos de endereco |
| status | varchar(50) | nao | | |
| id_nfs | varchar(50) | sim | | |
| nfs_url | varchar(255) | sim | | |
| nfs_number | varchar(50) | sim | | |
| log | json | sim | | |
| timestamps | | | | |

**Onde e utilizada:** ConfigController, CheckTestInvoices

---

## 10. Tabelas Tenant - Wiki

### 10.1 wiki_categories

**Finalidade:** Categorias de artigos.

| Campo | Tipo | Default | Obs |
|-------|------|---------|-----|
| id | bigint PK | | |
| slug | varchar(100) | | Unico implicito |
| label | varchar(150) | | |
| sort_order | smallint | 0 | |
| timestamps | | | |

**Relacionamentos:** hasMany → WikiSubcategory, hasMany → WikiArticle

---

### 10.2 wiki_subcategories

**Finalidade:** Subcategorias dentro de categorias.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| category_id | bigint FK | CASCADE delete |
| slug | varchar(100) | UNIQUE(category_id, slug) |
| label | varchar(150) | |
| timestamps | | |

**Relacionamentos:** belongsTo → WikiCategory, belongsToMany → WikiArticle (via wiki_article_category)

---

### 10.3 wiki_trails

**Finalidade:** Trilhas de aprendizado.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| slug | varchar(100) | |
| label | varchar(150) | |
| color | varchar(20) nullable | |
| sort_order | smallint, default 0 | |
| timestamps | | |

**Relacionamentos:** hasMany → WikiTrailModule, hasMany → WikiArticle

---

### 10.4 wiki_trail_modules

**Finalidade:** Modulos dentro de trilhas.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| trail_id | bigint FK | CASCADE delete |
| slug | varchar(100) | |
| label | varchar(150) | |
| sort_order | smallint, default 0 | |
| timestamps | | |

**Relacionamentos:** belongsTo → WikiTrail, hasMany → WikiTrailSubmodule, hasMany → WikiArticle

---

### 10.5 wiki_trail_submodules

**Finalidade:** Submodulos dentro de modulos.

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| module_id | bigint FK | CASCADE delete |
| slug | varchar(100) | |
| label | varchar(150) | |
| sort_order | smallint, default 0 | |
| timestamps | | |

**Relacionamentos:** belongsTo → WikiTrailModule, hasMany → WikiTrailTopic, hasMany → WikiArticle

---

### 10.6 wiki_trail_topics

**Finalidade:** Topicos dentro de submodulos (nivel mais granular).

| Campo | Tipo | Obs |
|-------|------|-----|
| id | bigint PK | |
| submodule_id | bigint FK | CASCADE delete |
| slug | varchar(160) | |
| label | varchar(150) | |
| sort_order | smallint, default 0 | |
| timestamps | | |

**Indices:** (submodule_id, sort_order)

**Relacionamentos:** belongsTo → WikiTrailSubmodule, hasMany → WikiArticle

---

### 10.7 wiki_articles

**Finalidade:** Artigos da base de conhecimento.

| Campo | Tipo | Nullable | Default | Obs |
|-------|------|----------|---------|-----|
| id | bigint PK | | auto | |
| user_id | bigint FK | sim | | Autor (nullOnDelete) |
| type | varchar(20) | | 'article' | article/trail |
| category_id | bigint FK | sim | | nullOnDelete |
| trail_id | bigint FK | sim | | nullOnDelete |
| module_id | bigint FK | sim | | nullOnDelete |
| submodule_id | bigint FK | sim | | nullOnDelete |
| topic_id | bigint FK | sim | | nullOnDelete |
| title | varchar(500) | nao | | |
| slug | varchar(600) | nao | | UNIQUE |
| excerpt | text | sim | | Auto-gerado se omitido |
| content | longText | nao | | |
| read_time | varchar(20) | sim | | Calculado automaticamente |
| sort_order | int | | 0 | |
| status | enum | | 'draft' | draft/published |
| published_at | timestamp | sim | | |
| timestamps | | | | |

**FKs:** category_id → wiki_categories, trail_id → wiki_trails, module_id → wiki_trail_modules, submodule_id → wiki_trail_submodules, topic_id → wiki_trail_topics (todos nullOnDelete)

**Indices:** (category_id, published_at), (status, published_at)

**Relacionamentos:** belongsTo → User, WikiCategory, WikiTrail, WikiTrailModule, WikiTrailSubmodule, WikiTrailTopic. belongsToMany → WikiSubcategory (via wiki_article_category)

---

### 10.8 wiki_article_category

**Finalidade:** Relacao N:N entre artigos e subcategorias (pivot).

| Campo | Tipo | Obs |
|-------|------|-----|
| article_id | bigint FK | PK composta, CASCADE delete |
| category_id | bigint FK | PK composta, CASCADE delete → wiki_subcategories |

**Nota:** Apesar do nome "category_id", referencia `wiki_subcategories` (nao wiki_categories).
