# Banco inicial - Wezapp Shots

Este documento define a primeira proposta de modelo de dados do Wezapp Shots.

A nomenclatura usa prefixo `wezapp_` para manter separacao clara deste projeto.

## Tabelas iniciais sugeridas

```text
wezapp_clients
wezapp_campaigns
wezapp_shot_packages
wezapp_shot_ledger
wezapp_channel_groups
wezapp_channels
wezapp_contact_bases
wezapp_contacts
wezapp_dispatch_jobs
wezapp_dispatch_items
wezapp_dispatch_logs
wezapp_users
wezapp_audit_logs
```

## wezapp_clients

Clientes contratantes ou solicitantes das campanhas.

Campos sugeridos:

```text
id
name
client_type
document
responsible_name
phone
email
status
notes
created_at
updated_at
```

## wezapp_campaigns

Campanhas vinculadas aos clientes.

Campos sugeridos:

```text
id
client_id
name
description
campaign_type
starts_at
ends_at
status
internal_notes
created_by
created_at
updated_at
```

## wezapp_shot_packages

Compras ou concessoes de pacotes de shots.

Campos sugeridos:

```text
id
client_id
campaign_id
quantity
unit_price
total_amount
purchase_date
payment_method
financial_status
notes
created_by
created_at
updated_at
```

## wezapp_shot_ledger

Livro de movimentacao de shots.

Esta tabela deve registrar entradas, reservas, consumos, estornos e ajustes.

Campos sugeridos:

```text
id
client_id
campaign_id
package_id
movement_type
quantity
unit_price
amount
reference_type
reference_id
notes
created_by
created_at
```

Tipos de movimento sugeridos:

```text
credit
debit
reserve
release
refund
adjustment
cancel
```

## wezapp_channel_groups

Representa grupos de canais, incluindo a chipeira digital.

Campos sugeridos:

```text
id
name
description
status
created_at
updated_at
```

## wezapp_channels

Canais de disparo usados pela chipeira digital.

Campos sugeridos:

```text
id
channel_group_id
name
provider
external_channel_id
phone_number
status
daily_limit
weekly_limit
priority
warmup_status
last_error_at
last_error_message
created_at
updated_at
```

## wezapp_contact_bases

Bases importadas ou vinculadas a campanhas.

Campos sugeridos:

```text
id
client_id
campaign_id
name
source
total_contacts
valid_contacts
invalid_contacts
status
imported_by
created_at
updated_at
```

## wezapp_contacts

Contatos pertencentes a uma base.

Campos sugeridos:

```text
id
base_id
name
phone
email
document
metadata_json
status
created_at
updated_at
```

## wezapp_dispatch_jobs

Lotes ou jobs de disparo.

Campos sugeridos:

```text
id
client_id
campaign_id
base_id
channel_group_id
name
message_template
message_payload_json
status
total_items
sent_items
failed_items
started_at
finished_at
created_by
created_at
updated_at
```

## wezapp_dispatch_items

Itens individuais da fila de disparo.

Campos sugeridos:

```text
id
dispatch_job_id
contact_id
channel_id
shot_ledger_id
status
scheduled_at
sent_at
delivered_at
read_at
responded_at
failed_at
error_message
external_message_id
created_at
updated_at
```

## wezapp_dispatch_logs

Logs tecnicos e operacionais dos disparos.

Campos sugeridos:

```text
id
dispatch_job_id
dispatch_item_id
channel_id
provider
request_payload_json
response_payload_json
http_status
status
error_message
created_at
```

## wezapp_users

Usuarios internos autorizados a operar o sistema.

Campos sugeridos:

```text
id
name
email
phone
password_hash
role
status
last_login_at
created_at
updated_at
```

## wezapp_audit_logs

Auditoria de acoes internas.

Campos sugeridos:

```text
id
user_id
action
entity_type
entity_id
before_json
after_json
ip_address
user_agent
created_at
```

## Regras iniciais de banco

1. Toda campanha deve pertencer a um cliente.
2. Todo pacote de shots deve pertencer a um cliente e, preferencialmente, a uma campanha.
3. O saldo de shots deve ser calculado pelo ledger, nao por campo solto editavel manualmente.
4. Todo disparo deve estar vinculado a uma campanha.
5. Todo envio deve registrar log tecnico.
6. Toda acao sensivel deve registrar auditoria.
7. Credenciais tecnicas nao devem ficar nas tabelas operacionais de campanha.
