Dados

Modelo relacional commerce-vc1

PostgreSQL 16 · 76 tabelas em 14 schemas. Cada revenda é um tenant (reseller_id); valores monetários em centavos (inteiros). Trilha de auditoria append-only e anexos sensíveis em storage privado (LGPD).

DDL canônico: schema.dbml · explicações: 04-DATABASE.md

O que isso significa para você

Os diagramas mostram o que a plataforma guarda — não é SQL para rodar. A base comum (revenda, login, arquivos, auditoria) aparece embaixo; o fluxo comercial vai da tabela de preços até fatura e NF.

Visão geral dos schemas

Visão geral dos schemas
Fluxo de negócio (esquerda → direita). FKs fortes entre áreas; base transversal sem “espaguete” de setas.
Abrir em tamanho real

Relações principais (linguagem simples)

Buscar tabela ou coluna

Filtra os cards colapsáveis abaixo (todas as 76 tabelas).

Preços VC1 e faixas (pricing)

Livro de preços VC1, faixas e clones por revenda.

Diagrama ER pricing
Preços VC1 e faixas. FK internas e refs tracejadas.
Abrir em tamanho real
pricing.price_base_version_rows — IMMUTABLE snapshot of unit rates. CHECK min_commitment_cents > 0; CHECK rates >=
ColunaTipo
id PKuuid
price_base_version_id → pricing.price_base_versions.iduuid
vc1_tier_id → pricing.vc1_tiers.iduuid
min_commitment_centsbigint
unit_did_centsbigint
unit_channel_centsbigint
unit_landline_cents_per_minnumeric(12,4)
unit_mobile_cents_per_minnumeric(12,4)
fidelity_default_monthsint
created_attimestamptz
pricing.price_base_versions — IMMUTABLE after published_at. No updated_at. CHECK cadence 30/6 on parent.
ColunaTipo
id PKuuid
price_base_id → pricing.price_bases.iduuid
version_numberint
effective_fromtimestamptz
effective_untiltimestamptz
published_attimestamptz
published_by_user_id → identity.users.iduuid
change_reasontext
created_attimestamptz
pricing.price_bases — VC1 price book. Versions are immutable; editor always inserts a new version.
ColunaTipo
id PKuuid
namevarchar(128)
codevarchar(32)
cadence_min_sint
cadence_inc_sint
is_activeboolean
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
pricing.reseller_tier_rows — Reseller may edit row-by-row after clone. Selling below cost sets below_cost=tru
ColunaTipo
id PKuuid
reseller_id → pricing.reseller_tier_tables.iduuid
reseller_tier_table_id → pricing.reseller_tier_tables.iduuid
vc1_tier_id → pricing.vc1_tiers.iduuid
source_version_row_id → pricing.price_base_version_rows.iduuid
markup_pctnumeric(8,4)
unit_did_centsbigint
unit_channel_centsbigint
unit_landline_cents_per_minnumeric(12,4)
unit_mobile_cents_per_minnumeric(12,4)
min_commitment_centsbigint
below_costboolean
created_attimestamptz
updated_attimestamptz
pricing.reseller_tier_tables
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
source_price_base_version_id → pricing.price_base_versions.iduuid
markup_pctnumeric(8,4)
is_currentboolean
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
pricing.vc1_tiers — Stable band identity. Rates live on price_base_version_rows. locked_tier_id poin
ColunaTipo
id PKuuid
price_base_id → pricing.price_bases.iduuid
codevarchar(32)
namevarchar(128)
sort_orderint
created_attimestamptz
deleted_attimestamptz

Planos comerciais (catalog)

Planos comerciais, destinos e pacotes sugeridos.

Diagrama ER catalog
Planos comerciais. FK internas e refs tracejadas.
Abrir em tamanho real
catalog.destinations
ColunaTipo
code PKdestination
namevarchar(64)
is_billableboolean
blocked_by_defaultboolean
created_attimestamptz
catalog.plan_quotas — CHECK separate ⇒ total=0 and (landline+mobile)>=0; pooled ⇒ total>0 and landline
ColunaTipo
id PKuuid
reseller_id → catalog.plan_versions.iduuid
plan_version_id → catalog.plan_versions.iduuid
included_didsint
included_channelsint
franchise_modeplan_franchise_mode
franchise_landline_secondsint
franchise_mobile_secondsint
franchise_total_secondsint
created_attimestamptz
catalog.plan_trial_rules — Reseller defines trial per plan. duration_days=0 AND enabled=false ⇒ no trial.
ColunaTipo
id PKuuid
reseller_id → catalog.plan_versions.iduuid
plan_version_id → catalog.plan_versions.iduuid
enabledboolean
duration_daysint
franchise_landline_secondsint
franchise_mobile_secondsint
franchise_total_secondsint
included_didsint
included_channelsint
created_attimestamptz
catalog.plan_versions — IMMUTABLE. CHECK kind=package ⇒ sell_price_cents NOT NULL AND franchise_mode NOT
ColunaTipo
id PKuuid
reseller_id → pricing.reseller_tier_rows.iduuid
plan_id → catalog.plans.iduuid
version_numberint
kindplan_kind
franchise_modeplan_franchise_mode
overage_policyplan_overage_policy
payment_modepayment_mode
sell_price_centsbigint
commitment_centsbigint
locked_tier_id → pricing.vc1_tiers.iduuid
reseller_tier_row_id → pricing.reseller_tier_rows.iduuid
unit_did_centsbigint
unit_channel_centsbigint
unit_landline_cents_per_minnumeric(12,4)
unit_mobile_cents_per_minnumeric(12,4)
overage_landline_cents_per_minnumeric(12,4)
overage_mobile_cents_per_minnumeric(12,4)
cost_did_centsbigint
cost_channel_centsbigint
cost_landline_cents_per_minnumeric(12,4)
cost_mobile_cents_per_minnumeric(12,4)
fidelity_monthsint
below_costboolean
snapshotjsonb
published_attimestamptz
created_attimestamptz
catalog.plans — Head entity. Commercial fields live on plan_versions (immutable).
ColunaTipo
id PKuuid
reseller_id → catalog.plan_versions.iduuid
suggested_package_id → catalog.suggested_packages.iduuid
codevarchar(64)
namevarchar(128)
kindplan_kind
is_activeboolean
current_version_id → catalog.plan_versions.iduuid
negative_margin_acknowledged_attimestamptz
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
catalog.suggested_packages — VC1-owned templates. Clone copies into catalog.plans with reseller_id set.
ColunaTipo
id PKuuid
codevarchar(32)
namevarchar(128)
descriptiontext
kindplan_kind
templatejsonb
is_activeboolean
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz

Funil e contratos (sales)

Funil comercial, propostas, trials e contratos.

Diagrama ER sales
Funil e contratos. FK internas e refs tracejadas.
Abrir em tamanho real
sales.contracts — Replaces public.sales as the signed commercial artifact. Attestation lives on si
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
proposal_id → sales.proposals.iduuid
customer_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
statuscontract_status
issuerinvoice_issuer
snapshotjsonb
effective_attimestamptz
signed_attimestamptz
cancelled_attimestamptz
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
sales.proposal_events — Append-only. No updated_at / deleted_at.
ColunaTipo
id PKuuid
reseller_id → sales.proposals.iduuid
proposal_id → sales.proposals.iduuid
event_typevarchar(64)
payloadjsonb
actor_typevarchar(20)
actor_user_id → identity.users.iduuid
created_attimestamptz
sales.proposal_items — Line snapshot at emit. Frozen with parent snapshot jsonb.
ColunaTipo
id PKuuid
reseller_id → sales.proposals.iduuid
proposal_id → sales.proposals.iduuid
kindinvoice_line_kind
quantityint
unit_sell_centsbigint
unit_cost_centsbigint
labelvarchar(255)
metadatajsonb
created_attimestamptz
sales.proposals — Fork of public.proposals. Totals NEVER trusted from the browser — snapshot is se
ColunaTipo
id PKuuid
reseller_id → catalog.plan_versions.iduuid
customer_id → customers.customers.iduuid
seller_user_id → identity.users.iduuid
public_codevarchar(80)
proposal_numbervarchar(32)
stageproposal_stage
kanban_columnkanban_column
profile_typeprofile_type
documentvarchar(14)
legal_namevarchar(255)
contact_namevarchar(255)
contact_emailvarchar(255)
contact_phonevarchar(20)
plan_id → catalog.plans.iduuid
plan_version_id → catalog.plan_versions.iduuid
payment_modepayment_mode
snapshotjsonb
public_access_usernamevarchar(32)
public_access_password_hashvarchar(255)
public_access_attemptssmallint
public_access_blocked_untiltimestamptz
pin_hashvarchar(255)
views_countint
viewed_attimestamptz
sent_attimestamptz
accepted_attimestamptz
expires_attimestamptz
contracted_attimestamptz
lost_reasontext
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
sales.signature_envelopes
ColunaTipo
id PKuuid
reseller_id → sales.contracts.iduuid
contract_id → sales.contracts.iduuid
mesign_envelope_idvarchar(64)
document_sha256varchar(64)
statusvarchar(32)
sign_urltext
webhook_last_eventvarchar(64)
completed_attimestamptz
archived_attimestamptz
created_attimestamptz
updated_attimestamptz
sales.trials
ColunaTipo
id PKuuid
reseller_id → catalog.plans.iduuid
proposal_id → sales.proposals.iduuid
customer_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
plan_id → catalog.plans.iduuid
plan_version_id → catalog.plan_versions.iduuid
statustrial_status
starts_attimestamptz
ends_attimestamptz
franchise_landline_secondsint
franchise_mobile_secondsint
converted_attimestamptz
created_attimestamptz
updated_attimestamptz

Clientes finais (customers)

Clientes finais, assinaturas e portabilidade.

Diagrama ER customers
Clientes finais. FK internas e refs tracejadas.
Abrir em tamanho real
customers.addresses
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
customer_id → customers.customers.iduuid
kindvarchar(16)
zipvarchar(8)
streetvarchar(255)
numbervarchar(32)
complementvarchar(128)
neighborhoodvarchar(128)
cityvarchar(128)
statechar(2)
ibge_city_codevarchar(7)
is_primaryboolean
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
customers.contacts — Replaces sales-mework360 people + customer_people (one person per role per custo
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
customer_id → customers.customers.iduuid
rolecontact_role
full_namevarchar(255)
emailvarchar(255)
phonevarchar(20)
documentvarchar(11)
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
customers.customer_users
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
customer_id → customers.customers.iduuid
user_id → identity.users.iduuid
is_adminboolean
created_attimestamptz
deleted_attimestamptz
customers.customers — kind=reseller_self is the reseller own-usage subscriber used in VC1 minimum aggr
ColunaTipo
id PKuuid
reseller_id → sales.proposals.iduuid
kindcustomer_kind
statuscustomer_status
profile_typeprofile_type
legal_namevarchar(255)
trade_namevarchar(255)
documentvarchar(14)
emailvarchar(255)
phonevarchar(20)
payment_modepayment_mode
legacy_org_idbigint
legacy_tronco_idbigint
source_proposal_id → sales.proposals.iduuid
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
customers.portability_files
ColunaTipo
id PKuuid
reseller_id → customers.portability_requests.iduuid
customer_id → customers.customers.iduuid
portability_request_id → customers.portability_requests.iduuid
file_id → files.objects.iduuid
retained_untildate
created_attimestamptz
deleted_attimestamptz
customers.portability_requests
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
customer_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
numbersjsonb [not null, default: `'
donor_operatorvarchar(128)
statusvarchar(32)
legacy_portability_idbigint
submitted_attimestamptz
completed_attimestamptz
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
customers.subscriptions — did_count/channel_count are denormalized live totals; source of truth is telco.d
ColunaTipo
id PKuuid
reseller_id → catalog.plan_versions.iduuid
customer_id → customers.customers.iduuid
plan_id → catalog.plans.iduuid
plan_version_id → catalog.plan_versions.iduuid
statussubscription_status
payment_modepayment_mode
overage_landline_cents_per_minnumeric(12,4)
overage_mobile_cents_per_minnumeric(12,4)
did_countint
channel_countint
trial_ends_attimestamptz
started_attimestamptz
cancelled_attimestamptz
cancel_reasontext
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz

Linha telefônica (SIP/DID) (telco)

Contas SIP, DIDs, canais e bloqueios de originação.

Diagrama ER telco
Linha telefônica (SIP/DID). FK internas e refs tracejadas.
Abrir em tamanho real
telco.block_events — Append-only audit of TelcoPort blockSubscriber / alterar_status_boqueio.
ColunaTipo
id PKuuid
reseller_id → telco.sip_accounts.iduuid
subscription_id → customers.subscriptions.iduuid
sip_account_id → telco.sip_accounts.iduuid
reasonblock_reason
actionvarchar(16)
actor_user_id → identity.users.iduuid
connector_call_id → integration.connector_calls.iduuid
created_attimestamptz
telco.channel_allocations — Current simultaneous call limit. History in channel_changes.
ColunaTipo
id PKuuid
reseller_id → telco.sip_accounts.iduuid
subscription_id → customers.subscriptions.iduuid
sip_account_id → telco.sip_accounts.iduuid
quantityint
effective_fromdate
created_attimestamptz
updated_attimestamptz
telco.channel_changes — Append-only. Mid-cycle adds bill remaining days / days_in_cycle.
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
subscription_id → customers.subscriptions.iduuid
kindchannel_change_kind
from_quantityint
to_quantityint
effective_ondate
pro_rataboolean
actor_user_id → identity.users.iduuid
created_attimestamptz
telco.dids
ColunaTipo
id PKuuid
reseller_id → customers.portability_requests.iduuid
subscription_id → customers.subscriptions.iduuid
customer_id → customers.customers.iduuid
e164varchar(16)
cityvarchar(128)
area_codevarchar(4)
activated_atdate
deactivated_atdate
legacy_did_idbigint
portability_request_id → customers.portability_requests.iduuid
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
telco.sip_accounts — Mirror of SipPulse subscriber. Password never stored (ProvisioningPort / generat
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
customer_id → customers.customers.iduuid
familysip_family
usernamevarchar(64)
sip_domainvarchar(255)
accountcodevarchar(128)
call_limitint
legacy_rate_plan_idint
legacy_subscriber_refvarchar(128)
blocked_attimestamptz
block_reasonblock_reason
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz

Tarificação de ligações (rating)

Ciclos, CDR, prefixos e chamadas tarifadas.

Diagrama ER rating
Tarificação de ligações. FK internas e refs tracejadas.
Abrir em tamanho real
rating.cdr_imports
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
sourcevarchar(32)
cursor_after_idbigint
cursor_after_timetimestamptz
rows_readint
rows_ratedint
rows_skippedint
started_attimestamptz
finished_attimestamptz
errortext
created_attimestamptz
rating.cycles — Calendar month America/Sao_Paulo [period_start, period_end) for all resellers (D
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
period_startdate
period_enddate
statuscycle_status
closed_attimestamptz
created_attimestamptz
updated_attimestamptz
rating.destination_prefixes — Classifies B-number into landline_br / mobile_br / other. Prefix list A VERIFICA
ColunaTipo
id PKuuid
prefixvarchar(16)
destinationdestination
country_iso2char(2)
descriptionvarchar(128)
created_attimestamptz
deleted_attimestamptz
rating.rated_calls — PARTITION BY RANGE (started_at) monthly. IMMUTABLE (append-only). Commercial rat
ColunaTipo
iduuid
reseller_id → rating.cycles.iduuid
subscription_id → customers.subscriptions.iduuid
customer_id → customers.customers.iduuid
sip_account_id → telco.sip_accounts.iduuid
cycle_id → rating.cycles.iduuid
usage_record_iduuid
started_attimestamptz
legacy_cdr_idbigint
accountcodevarchar(128)
source_numbervarchar(32)
destination_numbervarchar(32)
destinationdestination
raw_secondsint
billed_secondsint
sell_rate_cents_per_minnumeric(12,4)
cost_rate_cents_per_minnumeric(12,4)
sell_amount_centsnumeric(14,4)
cost_amount_centsnumeric(14,4)
switch_price_centsbigint
switch_durationint
switch_duration_blockint
service_typevarchar(64)
rated_attimestamptz
created_attimestamptz
rating.usage_records — PARTITION BY RANGE (period_start) monthly. Grain: one row per subscription × des
ColunaTipo
iduuid
reseller_id → rating.cycles.iduuid
subscription_id → customers.subscriptions.iduuid
customer_id → customers.customers.iduuid
cycle_id → rating.cycles.iduuid
destinationdestination
period_startdate
raw_secondsbigint
billed_secondsbigint
call_countint
sell_centsbigint
cost_centsbigint
franchise_seconds_appliedbigint
overage_secondsbigint
created_attimestamptz
updated_attimestamptz

Faturamento (billing)

Crédito, faturas, repasses e ciclo de cobrança.

Diagrama ER billing
Faturamento. FK internas e refs tracejadas.
Abrir em tamanho real
billing.commission_invoices — NF of commission issued BY the reseller TO VC1. Blocks payout until received.
ColunaTipo
id PKuuid
reseller_id → billing.payouts.iduuid
payout_id → billing.payouts.iduuid
numbervarchar(64)
amount_centsbigint
file_id → files.objects.iduuid
received_attimestamptz
created_attimestamptz
updated_attimestamptz
billing.credit_ledger — Append-only. No UPDATE/DELETE. Unique idempotency prevents double debit of a CDR
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
wallet_id → billing.credit_wallets.iduuid
customer_id → customers.customers.iduuid
entry_typeledger_entry_type
amount_centsnumeric(14,4)
unrecovered_centsnumeric(14,4)
balance_after_centsnumeric(14,4)
source_typevarchar(32)
source_iduuid
idempotency_keyvarchar(128)
created_attimestamptz
billing.credit_limits — Postpaid only. Exposure = DIDs+channels+minutes in the open cycle.
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
customer_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
limit_centsbigint
alert_percentsmallint
block_percentsmallint
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
billing.credit_wallets — Prepaid SoT. CHECK balance_cents >= 0. Concurrency: SELECT ... FOR UPDATE (D-DB-
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
customer_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
balance_centsnumeric(14,4)
versionint
created_attimestamptz
updated_attimestamptz
billing.cycle_runs
ColunaTipo
id PKuuid
reseller_id → rating.cycles.iduuid
cycle_id → rating.cycles.iduuid
phasevarchar(32)
statusvarchar(16)
started_attimestamptz
finished_attimestamptz
statsjsonb
errortext
created_attimestamptz
billing.dunning_events
ColunaTipo
id PKuuid
reseller_id → billing.invoices.iduuid
invoice_id → billing.invoices.iduuid
kinddunning_kind
payloadjsonb
fired_attimestamptz
created_attimestamptz
billing.invoice_lines — IMMUTABLE. No updated_at. Insert-only; corrections via credit invoice.
ColunaTipo
id PKuuid
reseller_id → billing.invoices.iduuid
invoice_id → billing.invoices.iduuid
kindinvoice_line_kind
descriptionvarchar(255)
quantitynumeric(14,4)
unit_sell_centsbigint
amount_centsbigint
cost_centsbigint
destinationdestination
snapshotjsonb
created_attimestamptz
billing.invoices — CHECK NOT (party=customer AND issuer=reseller). party=customer + issuer=vc1 when
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
cycle_id → rating.cycles.iduuid
partyinvoice_party
customer_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
issuerinvoice_issuer
statusinvoice_status
numbervarchar(32)
subtotal_centsbigint
commitment_centsbigint
charged_centsbigint
cost_centsbigint
margin_centsbigint
due_ondate
issued_attimestamptz
paid_attimestamptz
cancelled_attimestamptz
mepay_invoice_idvarchar(64)
mepay_charge_idvarchar(64)
payment_link_urltext
replaces_invoice_iduuid
snapshotjsonb
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
billing.limit_events — Append-only. Alert at 80% (reseller+VC1), block at 100%.
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
credit_limit_id → billing.credit_limits.iduuid
subscription_id → customers.subscriptions.iduuid
threshold_percentsmallint
actionlimit_action
exposure_centsbigint
limit_centsbigint
fired_attimestamptz
created_attimestamptz
billing.payment_methods
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
partyinvoice_party
customer_id → customers.customers.iduuid
kindpayment_method_kind
mepay_refvarchar(64)
labelvarchar(128)
is_defaultboolean
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
billing.payments — Only invoices actually paid count toward payout margin and (PADRÃO PROPOSTO) res
ColunaTipo
id PKuuid
reseller_id → billing.payment_methods.iduuid
invoice_id → billing.invoices.iduuid
payment_method_id → billing.payment_methods.iduuid
amount_centsbigint
kindpayment_method_kind
mepay_charge_idvarchar(64)
paid_attimestamptz
raw_payloadjsonb
created_attimestamptz
billing.payout_adjustments — Settlement ledger for post-payout refunds/chargebacks (D-DOM-73).
ColunaTipo
id PKuuid
reseller_id → billing.payouts.iduuid
payout_id → billing.payouts.iduuid
source_typevarchar(32)
source_iduuid
amount_centsbigint
snapshotjsonb
created_attimestamptz
billing.payout_lines — IMMUTABLE breakdown of the payout formula.
ColunaTipo
id PKuuid
reseller_id → billing.invoices.iduuid
payout_id → billing.payouts.iduuid
kindpayout_line_kind
invoice_id → billing.invoices.iduuid
amount_centsbigint
snapshotjsonb
created_attimestamptz
billing.payouts — Only billing_mode=vc1_invoices. payout_raw=0 → status settled_zero (no commissio
ColunaTipo
id PKuuid
reseller_id → billing.invoices.iduuid
cycle_id → rating.cycles.iduuid
statuspayout_status
paid_margin_centsbigint
shortfall_centsbigint
negative_margin_centsbigint
net_centsbigint
netted_invoice_id → billing.invoices.iduuid
commission_invoice_id → billing.commission_invoices.iduuid
paid_attimestamptz
paid_by_user_id → identity.users.iduuid
transfer_refvarchar(64)
snapshotjsonb
created_attimestamptz
updated_attimestamptz
billing.statements — Rated statement for reseller_invoices mode. VC1 does not issue NF to that custom
ColunaTipo
id PKuuid
reseller_id → customers.subscriptions.iduuid
cycle_id → rating.cycles.iduuid
customer_id → customers.customers.iduuid
subscription_id → customers.subscriptions.iduuid
statusstatement_status
subtotal_centsbigint
charged_centsbigint
cost_centsbigint
snapshotjsonb
issued_attimestamptz
created_attimestamptz
updated_attimestamptz

Notas fiscais (NFCom) (fiscal)

Documentos NFCom e tentativas de integração fiscal.

Diagrama ER fiscal
Notas fiscais (NFCom). FK internas e refs tracejadas.
Abrir em tamanho real
fiscal.fiscal_attempts — Append-only. Do not store mePay API keys or third-party issuer secrets.
ColunaTipo
id PKuuid
reseller_id → fiscal.fiscal_documents.iduuid
fiscal_document_id → fiscal.fiscal_documents.iduuid
endpointvarchar(64)
http_statusint
request_hashvarchar(64)
responsejsonb
successboolean
created_attimestamptz
fiscal.fiscal_documents — issued ONLY after mePay webhook fiscal.issued (or poll fallback) with 44-digit a
ColunaTipo
id PKuuid
reseller_id → billing.invoices.iduuid
invoice_id → billing.invoices.iduuid
statusfiscal_document_status
modelvarchar(8)
issuer_cnpjvarchar(14)
mepay_invoice_idvarchar(64)
mepay_fiscal_request_idvarchar(64)
access_keyvarchar(44)
protocolvarchar(64)
pdf_file_id → files.objects.iduuid
xml_file_id → files.objects.iduuid
authorized_attimestamptz
created_attimestamptz
updated_attimestamptz

Notificações (notifications)

Templates, mensagens e opt-out por canal.

Diagrama ER notifications
Notificações. FK internas e refs tracejadas.
Abrir em tamanho real
notifications.messages
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
customer_id → customers.customers.iduuid
template_id → notifications.templates.iduuid
channelnotification_channel
recipientvarchar(255)
statusvarchar(16)
payloadjsonb
provider_message_idvarchar(128)
errortext
sent_attimestamptz
created_attimestamptz
notifications.opt_outs
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
recipientvarchar(255)
channelnotification_channel
created_attimestamptz
notifications.templates
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
keyvarchar(64)
channelnotification_channel
subjectvarchar(255)
bodytext
is_activeboolean
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz

Integrações e legado (integration)

Outbox, webhooks, conectores e reconciliação.

Diagrama ER integration
Integrações e legado. FK internas e refs tracejadas.
Abrir em tamanho real
integration.connector_calls — Never store SOAP passwords or API tokens. LabGuarded* sets lab_guarded=true.
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
portvarchar(32)
adaptervarchar(64)
methodvarchar(64)
request_hashvarchar(64)
response_codeint
successboolean
lab_guardedboolean
errortext
duration_msint
created_attimestamptz
integration.inbox_webhooks — Dedupe: provider event_id when present; else sha256(envelope_id + event + payloa
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
sourcevarchar(32)
event_namevarchar(128)
idempotency_keyvarchar(128)
statuswebhook_status
headersjsonb
payloadjsonb
processed_attimestamptz
created_attimestamptz
integration.lab_allowlist — LabGuarded* adapters refuse writes outside this list. Demo WL project + demo SIP
ColunaTipo
id PKuuid
kindvarchar(32)
legacy_idbigint
accountcodevarchar(128)
e164varchar(16)
notestext
created_attimestamptz
deleted_attimestamptz
integration.legacy_id_map
ColunaTipo
id PKuuid
entity_typevarchar(64)
legacy_idbigint
entity_uuiduuid
legacy_tablevarchar(128)
created_attimestamptz
integration.outbox
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
aggregate_typevarchar(64)
aggregate_iduuid
event_namevarchar(128)
payloadjsonb
statusoutbox_status
attemptsint
available_attimestamptz
published_attimestamptz
last_errortext
created_attimestamptz
integration.reconciliation_runs
ColunaTipo
id PKuuid
reseller_id → rating.cycles.iduuid
cycle_id → rating.cycles.iduuid
statusreconciliation_status
billed_seconds_sumbigint
switch_duration_block_sumbigint
sell_cents_sumbigint
switch_price_cents_sumbigint
drift_percentnumeric(8,4)
started_attimestamptz
finished_attimestamptz
reportjsonb
created_attimestamptz

Auditoria (audit)

Trilha append-only de auditoria administrativa.

Diagrama ER audit
Auditoria. FK internas e refs tracejadas.
Abrir em tamanho real
audit.audit_log — Append-only. Financial/admin trail retention 5y; auth/access 12m (D-SEC-15).
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
actor_user_id → identity.users.iduuid
impersonator_user_id → identity.users.iduuid
impersonation_session_id → identity.impersonation_sessions.iduuid
actor_scopeactor_scope
actionvarchar(128)
auditable_typevarchar(128)
auditable_iduuid
beforejsonb
afterjsonb
ipvarchar(45)
user_agentvarchar(512)
created_attimestamptz

Arquivos privados (files)

Objetos privados em storage (LGPD, marca, fiscal).

Diagrama ER files
Arquivos privados. FK internas e refs tracejadas.
Abrir em tamanho real
files.objects — Private object storage only. Portability docs MUST set retained_until. Never pub
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
purposefile_purpose
diskvarchar(32)
pathvarchar(512)
mime_typevarchar(128)
byte_sizebigint
sha256varchar(64)
original_namevarchar(255)
retained_untildate
created_by_user_id → identity.users.iduuid
created_attimestamptz
deleted_attimestamptz

Autenticação e permissões (identity)

Login, papéis RBAC e tokens API (Sanctum).

Diagrama ER identity
Autenticação e permissões. FK internas e refs tracejadas.
Abrir em tamanho real
identity.api_tokens — Replaces public.personal_access_tokens. Reseller public API lives on api.vc1.com
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
user_id → identity.users.iduuid
namevarchar(128)
token_prefixvarchar(12)
token_hashvarchar(64)
abilitiesjsonb [not null, default: `'
last_used_attimestamptz
expires_attimestamptz
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
identity.impersonation_sessions
ColunaTipo
id PKuuid
staff_user_id → identity.users.iduuid
impersonated_user_id → identity.users.iduuid
reseller_id → tenancy.resellers.iduuid
expires_attimestamptz
ended_attimestamptz
created_attimestamptz
identity.permissions
ColunaTipo
id PKuuid
slugvarchar(128)
namevarchar(255)
created_attimestamptz
identity.role_permissions
ColunaTipo
role_id → identity.roles.iduuid
permission_id → identity.permissions.iduuid
identity.roles
ColunaTipo
id PKuuid
slugvarchar(64)
namevarchar(128)
actor_scopeactor_scope
created_attimestamptz
updated_attimestamptz
identity.user_roles
ColunaTipo
id PKuuid
user_id → identity.users.iduuid
role_id → identity.roles.iduuid
reseller_id → tenancy.resellers.iduuid
created_attimestamptz
identity.users — Login for VC1 Filament, reseller panel, customer /app. Replaces public.users (bi
ColunaTipo
id PKuuid
reseller_id → customers.customers.iduuid
customer_id → customers.customers.iduuid
emailvarchar(255)
password_hashvarchar(255)
full_namevarchar(255)
actor_scopeactor_scope
is_activeboolean
email_verified_attimestamptz
last_login_attimestamptz
last_login_ipvarchar(45)
two_factor_secrettext
two_factor_confirmed_attimestamptz
localevarchar(16)
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz

Revendas (tenant) (tenancy)

Tenant revenda: domínios, marca, STFC e contrato VC1.

Diagrama ER tenancy
Revendas (tenant). FK internas e refs tracejadas.
Abrir em tamanho real
tenancy.reseller_branding
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
trade_namevarchar(255)
logo_file_id → files.objects.iduuid
primary_colorvarchar(7)
secondary_colorvarchar(7)
support_emailvarchar(255)
support_phonevarchar(32)
sender_emailvarchar(255)
sender_namevarchar(128)
extrajsonb
created_attimestamptz
updated_attimestamptz
tenancy.reseller_contracts — VC1 ↔ reseller commercial contract. Snapshot immutable after signed_at.
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
price_base_version_id → pricing.price_base_versions.iduuid
vc1_tier_id → pricing.vc1_tiers.iduuid
commitment_centsbigint
fidelity_monthsint
billing_modereseller_billing_mode
snapshotjsonb
signed_attimestamptz
effective_fromdate
effective_untildate
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
tenancy.reseller_domains
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
hostvarchar(255)
is_primaryboolean
verified_attimestamptz
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
tenancy.reseller_settings
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
default_payment_modepayment_mode
default_overage_policyplan_overage_policy
alert_limit_percentsmallint
block_limit_percentsmallint
allow_negative_marginboolean
typedjsonb
created_attimestamptz
updated_attimestamptz
tenancy.resellers — CHECK billing_mode=reseller_invoices ⇒ exists verified STFC license. CHECK slug
ColunaTipo
id PKuuid
slugvarchar(63)
legal_namevarchar(255)
trade_namevarchar(255)
documentvarchar(14)
statusreseller_status
billing_modereseller_billing_mode
vc1_tier_id → pricing.vc1_tiers.iduuid
price_base_version_id → pricing.price_base_versions.iduuid
commitment_centsbigint
fidelity_monthsint
payment_modepayment_mode
due_daysmallint
pending_billing_modereseller_billing_mode
billing_mode_effective_atdate
pending_billing_amendment_envelope_iduuid
legacy_project_idbigint
legacy_domain_sippulsevarchar(255)
payment_gateway_refvarchar(64)
onboarded_attimestamptz
suspended_attimestamptz
terminated_attimestamptz
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz
tenancy.stfc_licenses — Required for billing_mode=reseller_invoices. Verified by VC1 staff.
ColunaTipo
id PKuuid
reseller_id → tenancy.resellers.iduuid
license_numbervarchar(64)
document_file_id → files.objects.iduuid
valid_fromdate
valid_untildate
verified_attimestamptz
verified_by_user_id → identity.users.iduuid
notestext
created_attimestamptz
updated_attimestamptz
deleted_attimestamptz

Retenção e privacidade

TipoPrazoNotas
CDR / detalhe de chamada~13 mesesOperação e disputa recente
Financeiro, fiscal, contratos~5 anosObrigações legais
Logs de acesso~12 mesesSegurança e LGPD

Ver segurança e LGPD →