Capítulo 73 — Dicionário de Dados
Este capítulo apresenta o Dicionário de Dados da Plataforma de Relacionamento Digital com o Cidadão — catálogo formal que descreve, para cada domínio de persistência, as entidades relevantes, seus atributos, tipos de dad…
73.1 Objetivo do Capítulo
Este capítulo apresenta o Dicionário de Dados da Plataforma de Relacionamento Digital com o Cidadão — catálogo formal que descreve, para cada domínio de persistência, as entidades relevantes, seus atributos, tipos de dados, restrições, semântica de negócio e referências cruzadas.
O Dicionário de Dados é o contrato entre arquitetura, desenvolvimento, qualidade e governança de dados. Ele responde às perguntas: o que é este campo, qual seu tipo, quem o produz, quem o consome, qual sua política de retenção e o que acontece quando ele contém dados pessoais.
O conjunto de entidades documentado aqui cobre os 24 serviços de domínio identificados na arquitetura de microsserviços (Capítulo 12). Para cada domínio são apresentadas as entidades centrais com seus atributos principais. Atributos auxiliares de infraestrutura — como version de optimistic locking, deleted_at de soft delete e hash_value de cadeia de auditoria — são descritos uma vez na seção de padrões transversais e não repetidos em cada entidade.
73.2 Convenções e Padrões Transversais
73.2.1 Identificadores
Toda entidade persistida na plataforma utiliza identificadores do tipo UUID v4 gerado no backend. A escolha é justificada por: ausência de colisão entre instâncias, opacidade (não revela ordem ou volume de registros), portabilidade entre serviços e alinhamento com o padrão JPA.
id UUID NOT NULL PRIMARY KEY Gerado pelo serviço no momento da criação
Identificadores nunca são reutilizados. Entidades excluídas logicamente preservam o id indefinidamente.
73.2.2 Isolamento Multi-Tenant
Toda tabela que contém dados de negócio de um órgão inclui obrigatoriamente a coluna tenant_id. Essa coluna é NOT NULL, imutável após criação e indexada como primeira coluna em todos os índices compostos.
tenant_id UUID NOT NULL Identifica o tenant proprietário do registro.
Valor derivado do Tenant Context validado na
autenticação. Nunca aceito como parâmetro
de cliente sem validação pelo contexto.
73.2.3 Atributos de Ciclo de Vida
Todos os registros de negócio possuem os seguintes campos de controle de ciclo de vida:
| Coluna | Tipo | Restrição | Semântica |
|---|---|---|---|
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL, DEFAULT NOW() | Momento da criação do registro. Imutável. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | Momento da última modificação. Atualizado automaticamente por trigger. |
deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | Preenchido na exclusão lógica. Registros com valor não nulo são filtrados por @Where do Hibernate. Nunca excluídos fisicamente exceto por processo de purga LGPD. |
version | BIGINT | NOT NULL, DEFAULT 0 | Controle de concorrência optimista. Incrementado em cada UPDATE. Falha em conflito com OptimisticLockingFailureException. |
73.2.4 Dados Pessoais (PII)
Atributos que contenham dados pessoais são marcados na coluna PII das tabelas deste capítulo com os símbolos:
●— dado pessoal direto (nome, CPF, e-mail, telefone, endereço)◐— dado pessoal indireto ou pseudonimizado (identificador de sessão, endereço IP, identificador interno)○— dado não pessoal ou completamente anonimizado
Dados pessoais diretos não são gravados em logs, caches ou índices de busca sem controle explícito de minimização.
73.2.5 Política de Retenção
Cada entidade possui política de retenção indicada como:
- Operacional — mantido enquanto o tenant estiver ativo; purgado conforme LGPD no offboarding
- Legal mínimo — mantido por prazo mínimo exigido por legislação mesmo após offboarding
- Imutável — nunca excluído; eventos de auditoria e trilhas de rastreabilidade
- Configurável — prazo definido pelo tenant dentro de limites contratuais
73.3 Domínio 1 — Tenant e Configuração Institucional
Serviço responsável: Identity/Tenant Service
Banco: tenant-service (schema tenant)
73.3.1 Entidade tenants
Registro mestre de cada organização pública participante da plataforma.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK, NOT NULL | ○ | Identificador único e imutável do tenant. |
name | VARCHAR(255) | NOT NULL | ○ | Nome oficial do órgão ou entidade pública. |
slug | VARCHAR(100) | NOT NULL, UNIQUE | ○ | Identificador textual para uso em URLs e prefixos. Ex: seinfra, segplag. Imutável após ativação. |
cnpj | VARCHAR(14) | NOT NULL, UNIQUE | ○ | CNPJ da entidade pública. Armazenado sem formatação. |
status | VARCHAR(50) | NOT NULL | ○ | Estados: PROVISIONING, ACTIVE, SUSPENDED, DELETED. |
plan_type | VARCHAR(50) | NOT NULL | ○ | Tipo de contrato: STANDARD, PREMIUM, ENTERPRISE. |
domain_url | VARCHAR(255) | NULLABLE | ○ | URL do portal do tenant. Ex: educacao.cidadao.mg.gov.br. |
logo_url | VARCHAR(512) | NULLABLE | ○ | URL do logotipo do órgão no Object Storage. |
primary_color | VARCHAR(7) | NULLABLE | ○ | Cor primária da identidade visual em formato hexadecimal. |
contact_email | VARCHAR(255) | NOT NULL | ● | E-mail institucional de contato técnico-administrativo. |
activated_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento em que o tenant foi ativado pela primeira vez. |
suspended_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da suspensão, quando aplicável. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão transversal 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão transversal 73.2.3. |
Retenção: Legal mínimo.
Índices: idx_tenants_slug (slug), idx_tenants_status (status).
73.3.2 Entidade tenant_configurations
Parâmetros operacionais do tenant: módulos habilitados, políticas de sessão, integrações ativas e personalizações.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da configuração. |
tenant_id | UUID | NOT NULL, FK → tenants | ○ | Tenant ao qual a configuração pertence. |
config_key | VARCHAR(200) | NOT NULL | ○ | Chave da configuração. Ex: session.timeout_minutes, modules.scheduling.enabled. |
config_value | TEXT | NOT NULL | ○ | Valor serializado. Booleanos como true/false; numéricos como string decimal; listas como JSON. |
config_type | VARCHAR(50) | NOT NULL | ○ | Tipo do valor: BOOLEAN, INTEGER, STRING, JSON. |
description | VARCHAR(500) | NULLABLE | ○ | Descrição legível da configuração para uso no painel administrativo. |
is_secret | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Quando true, o valor não é exibido em interfaces de administração nem em logs. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Restrições: UNIQUE (tenant_id, config_key).
Retenção: Operacional.
73.4 Domínio 2 — Identidade e Acesso
Serviço responsável: Identity Service
Banco: identity-service (schema identity)
73.4.1 Entidade users
Registro de usuários da plataforma — cidadãos, servidores públicos e administradores.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador técnico imutável. |
tenant_id | UUID | NOT NULL, FK → tenants | ○ | Tenant de vínculo primário. Cidadãos podem ter vínculos secundários via user_tenant_bindings. |
email | VARCHAR(255) | NOT NULL | ● | Endereço de e-mail. Único por tenant. Usado como identificador de login. |
name | VARCHAR(255) | NOT NULL | ● | Nome completo. |
phone | VARCHAR(20) | NULLABLE | ● | Telefone para notificações. Armazenado sem formatação. |
cpf_hash | VARCHAR(64) | NULLABLE | ◐ | Hash SHA-256 do CPF. Não armazena CPF em claro. Permite busca por CPF sem exposição. |
user_type | VARCHAR(50) | NOT NULL | ○ | CITIZEN, INTERNAL, ADMIN, SERVICE_ACCOUNT. |
status | VARCHAR(50) | NOT NULL | ○ | PENDING_VERIFICATION, ACTIVE, BLOCKED, INACTIVE. |
email_verified_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da verificação do e-mail. Null indica pendência. |
phone_verified_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da verificação do telefone. |
mfa_enabled | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Indica se autenticação multifator está ativa para o usuário. |
mfa_method | VARCHAR(50) | NULLABLE | ○ | Método de MFA ativo: TOTP, SMS, EMAIL. |
last_login_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Último login bem-sucedido. |
login_failure_count | INTEGER | NOT NULL, DEFAULT 0 | ○ | Contador de falhas consecutivas. Zerado no login bem-sucedido. |
locked_until | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Quando preenchido, login é rejeitado até este instante. |
govbr_linked_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento do vínculo com identidade GOV.BR. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Exclusão lógica. Anonimização de name, email, phone na purga LGPD. |
Restrições: UNIQUE (tenant_id, email).
Índices: idx_users_tenant_status (tenant_id, status), idx_users_cpf_hash (cpf_hash).
Retenção: Operacional; registros de auditoria de identidade — Imutável.
73.4.2 Entidade credentials
Credenciais de autenticação local por senha.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da credencial. |
user_id | UUID | NOT NULL, UNIQUE, FK → users | ○ | Vínculo 1:1 com o usuário. |
password_hash | VARCHAR(255) | NOT NULL | ◐ | Hash bcrypt da senha. Nunca armazenado em claro. Nunca exposto em APIs ou logs. |
must_change_at_next_login | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Quando true, usuário é obrigado a redefinir senha no próximo login. |
expires_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Expiração da senha conforme política do tenant. |
last_changed_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Momento da última alteração de senha. |
previous_hashes | JSONB | NULLABLE | ◐ | Array dos últimos N hashes para prevenir reúso. Tamanho configurado pela política do tenant. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Retenção: Operacional. previous_hashes truncado após rotação conforme política.
73.4.3 Entidade sessions
Sessões ativas de usuários autenticados.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da sessão. Referenciado no JWT como jti. |
user_id | UUID | NOT NULL, FK → users | ○ | Usuário proprietário da sessão. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto da sessão. |
device_fingerprint | VARCHAR(64) | NULLABLE | ◐ | Hash do fingerprint do dispositivo. Não armazena dados brutos do device. |
ip_address | INET | NULLABLE | ◐ | Endereço IP de origem no momento da criação. |
user_agent_hash | VARCHAR(64) | NULLABLE | ◐ | Hash do User-Agent. Não armazena string completa. |
channel | VARCHAR(50) | NOT NULL | ○ | Canal de origem: WEB, MOBILE, API. |
auth_method | VARCHAR(50) | NOT NULL | ○ | Método de autenticação utilizado: PASSWORD, GOVBR, SSO. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Início da sessão. |
expires_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Expiração configurada conforme política do tenant. |
revoked_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Quando preenchido, sessão está revogada (logout, inatividade, revogação administrativa). |
revocation_reason | VARCHAR(100) | NULLABLE | ○ | Motivo da revogação: LOGOUT, INACTIVITY, ADMIN_REVOKE, SECURITY_EVENT. |
Índices: idx_sessions_user_active (user_id, expires_at) onde revoked_at IS NULL.
Retenção: 90 dias após expiração ou revogação (configurável por tenant).
73.4.4 Entidade profiles
Perfis de acesso que agrupam permissões por função de negócio.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do perfil. |
tenant_id | UUID | NOT NULL, FK → tenants | ○ | Perfis são scoped por tenant. |
name | VARCHAR(200) | NOT NULL | ○ | Nome legível do perfil. Ex: Atendente de Primeiro Nível. |
code | VARCHAR(100) | NOT NULL | ○ | Código técnico do perfil. Ex: ATTENDANT_L1. |
description | TEXT | NULLABLE | ○ | Descrição da finalidade do perfil. |
is_system | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Perfis de sistema são criados pelo bootstrapping e não editáveis pelo administrador do tenant. |
is_active | BOOLEAN | NOT NULL, DEFAULT TRUE | ○ | Perfis inativos não podem ser atribuídos, mas atribuições existentes permanecem até revisão. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Restrições: UNIQUE (tenant_id, code).
Retenção: Operacional.
73.5 Domínio 3 — Cadastro do Cidadão
Serviço responsável: Citizen Service
Banco: citizen-service (schema citizen)
73.5.1 Entidade citizens
Perfil consolidado do cidadão na plataforma.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador técnico do cidadão. |
tenant_id | UUID | NOT NULL, FK → tenants | ○ | Tenant de contexto. O mesmo cidadão pode ter registros em múltiplos tenants. |
user_id | UUID | NOT NULL, FK → users(identity) | ○ | Referência à identidade no Identity Service. Não existe cidadão sem identidade. |
full_name | VARCHAR(255) | NOT NULL | ● | Nome completo conforme documento oficial. |
social_name | VARCHAR(255) | NULLABLE | ● | Nome social, quando informado. Exibido preferencialmente quando preenchido. |
birth_date | DATE | NULLABLE | ● | Data de nascimento. |
gender | VARCHAR(50) | NULLABLE | ● | Gênero autodeclarado. Valores conforme tabela de domínio de gênero. |
nationality | VARCHAR(100) | NULLABLE | ● | Nacionalidade. |
data_origin | VARCHAR(50) | NOT NULL | ○ | Origem do cadastro: SELF_DECLARED, GOVBR, EXTERNAL_SYSTEM. |
govbr_reliability_level | VARCHAR(20) | NULLABLE | ○ | Nível de confiabilidade GOV.BR na última autenticação: BRONZE, PRATA, OURO. |
status | VARCHAR(50) | NOT NULL | ○ | ACTIVE, INACTIVE, PENDING_COMPLETION. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Exclusão lógica. Dados PII anonimizados no processo de purga LGPD. |
Restrições: UNIQUE (tenant_id, user_id).
Retenção: Operacional; purga LGPD no offboarding ou por solicitação do titular.
73.5.2 Entidade citizen_contacts
Meios de contato do cidadão: e-mails, telefones e endereços de comunicação.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do contato. |
citizen_id | UUID | NOT NULL, FK → citizens | ○ | Cidadão ao qual o contato pertence. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto (denormalizado para isolamento). |
contact_type | VARCHAR(50) | NOT NULL | ○ | EMAIL, PHONE_MOBILE, PHONE_LANDLINE, WHATSAPP. |
contact_value | VARCHAR(255) | NOT NULL | ● | Valor do contato. E-mail em lowercase; telefone sem formatação. |
is_primary | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Indica contato principal para o tipo. Apenas um contato primary por tipo por cidadão. |
is_verified | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Contato verificado por código OTP ou link de confirmação. |
verified_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da verificação. |
opted_in_notifications | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Consentimento para receber notificações neste contato. |
opted_in_campaigns | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Consentimento para receber campanhas neste contato. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Soft delete. |
Retenção: Operacional; anonimizado na purga LGPD.
73.5.3 Entidade citizen_addresses
Endereços do cidadão.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do endereço. |
citizen_id | UUID | NOT NULL, FK → citizens | ○ | Vínculo com o cidadão. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
address_type | VARCHAR(50) | NOT NULL | ○ | RESIDENTIAL, COMMERCIAL, CORRESPONDENCE. |
zip_code | VARCHAR(8) | NOT NULL | ● | CEP sem formatação. |
street | VARCHAR(255) | NOT NULL | ● | Logradouro. |
number | VARCHAR(20) | NOT NULL | ● | Número. |
complement | VARCHAR(100) | NULLABLE | ● | Complemento. |
neighborhood | VARCHAR(150) | NOT NULL | ● | Bairro. |
city | VARCHAR(150) | NOT NULL | ● | Município. |
state | VARCHAR(2) | NOT NULL | ○ | UF. |
country | VARCHAR(3) | NOT NULL, DEFAULT 'BRA' | ○ | País em ISO 3166-1 alpha-3. |
is_primary | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Endereço principal. |
data_origin | VARCHAR(50) | NOT NULL | ○ | Origem: SELF_DECLARED, CORREIOS, GOVBR. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Soft delete. |
Retenção: Operacional; anonimizado na purga LGPD.
73.5.4 Entidade citizen_consents
Registros imutáveis de concessão e revogação de consentimentos LGPD.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do evento de consentimento. |
citizen_id | UUID | NOT NULL, FK → citizens | ○ | Cidadão que concedeu ou revogou. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
consent_type | VARCHAR(100) | NOT NULL | ○ | Tipo de consentimento: NOTIFICATIONS_EMAIL, NOTIFICATIONS_SMS, NOTIFICATIONS_PUSH, CAMPAIGNS, DATA_SHARING, ANALYTICS. |
action | VARCHAR(20) | NOT NULL | ○ | GRANTED ou REVOKED. |
channel | VARCHAR(50) | NOT NULL | ○ | Canal pelo qual o cidadão registrou a ação: WEB, MOBILE, CALL_CENTER. |
terms_version | VARCHAR(50) | NOT NULL | ○ | Versão dos termos de uso e privacidade vigentes no momento da ação. |
ip_address | INET | NULLABLE | ◐ | IP de origem da ação. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Momento do registro. Imutável. |
Nota: Esta entidade é append-only. Nenhum UPDATE ou DELETE é permitido. O estado atual de um consentimento é determinado pelo último evento registrado para o (citizen_id, tenant_id, consent_type).
Retenção: Legal mínimo — 5 anos após a última interação, conforme LGPD.
73.6 Domínio 4 — Catálogo de Serviços
Serviço responsável: Catalog Service
Banco: catalog-service (schema catalog)
73.6.1 Entidade public_services
Serviços públicos digitais disponibilizados por cada órgão participante.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do serviço. |
tenant_id | UUID | NOT NULL, FK → tenants | ○ | Órgão responsável pelo serviço. |
name | VARCHAR(255) | NOT NULL | ○ | Nome público do serviço. |
slug | VARCHAR(200) | NOT NULL | ○ | Identificador textual para URL amigável. |
description | TEXT | NOT NULL | ○ | Descrição completa do serviço para apresentação ao cidadão. |
category_id | UUID | NOT NULL, FK → service_categories | ○ | Categoria do serviço para agrupamento e busca. |
status | VARCHAR(50) | NOT NULL | ○ | DRAFT, IN_REVIEW, APPROVED, PUBLISHED, SUSPENDED, DISCONTINUED. |
current_version | INTEGER | NOT NULL, DEFAULT 1 | ○ | Versão ativa do serviço. |
average_time_days | INTEGER | NULLABLE | ○ | Prazo médio de atendimento em dias úteis. Informativo. |
requires_auth_level | VARCHAR(50) | NOT NULL, DEFAULT 'BASIC' | ○ | Nível mínimo de autenticação GOV.BR: BASIC, PRATA, OURO. |
published_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da última publicação. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Restrições: UNIQUE (tenant_id, slug).
Retenção: Operacional; versões descontinuadas preservadas para auditoria de solicitações históricas.
73.7 Domínio 5 — Formulários
Serviço responsável: Forms Service
Banco: forms-service (schema forms)
73.7.1 Entidade forms
Formulários dinâmicos associados a serviços públicos.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do formulário. |
tenant_id | UUID | NOT NULL | ○ | Tenant proprietário. |
service_id | UUID | NOT NULL, FK → public_services | ○ | Serviço ao qual o formulário está associado. |
name | VARCHAR(255) | NOT NULL | ○ | Nome do formulário para identificação interna. |
published_version | INTEGER | NULLABLE | ○ | Versão atualmente publicada e disponível para novas solicitações. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
73.7.2 Entidade form_versions
Versões imutáveis de cada formulário. Uma vez publicada, uma versão não é alterada.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da versão. |
form_id | UUID | NOT NULL, FK → forms | ○ | Formulário ao qual a versão pertence. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
version | INTEGER | NOT NULL | ○ | Número sequencial de versão. Começa em 1. |
definition | JSONB | NOT NULL | ○ | Definição completa do formulário em JSON: seções, campos, validações, condicionais. |
status | VARCHAR(50) | NOT NULL | ○ | DRAFT, PUBLISHED, DEPRECATED. |
published_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da publicação. Imutável após preenchimento. |
deprecated_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da depreciação. Versões depreciadas não são usadas em novas solicitações. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Restrições: UNIQUE (form_id, version).
Retenção: Permanente — versões históricas são necessárias para validar dados de solicitações antigas.
73.8 Domínio 6 — Solicitações e Protocolos
Serviço responsável: Request Service
Banco: request-service (schema request)
73.8.1 Entidade requests
Entidade central da plataforma. Representa a formalização da demanda do cidadão a um órgão público.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador técnico da solicitação. |
tenant_id | UUID | NOT NULL | ○ | Órgão ao qual a solicitação foi direcionada. |
citizen_id | UUID | NOT NULL | ○ | Cidadão requerente. Referência ao Citizen Service. |
service_id | UUID | NOT NULL | ○ | Serviço público solicitado. |
service_version | INTEGER | NOT NULL | ○ | Versão do serviço no momento da submissão. Imutável após submissão. |
form_id | UUID | NOT NULL | ○ | Formulário utilizado. |
form_version | INTEGER | NOT NULL | ○ | Versão do formulário no momento da submissão. Imutável. A validação retroativa usa esta versão exata. |
form_data | JSONB | NOT NULL | ● | Dados preenchidos pelo cidadão no formulário. Pode conter PII. Acesso controlado por perfil e finalidade. |
status | VARCHAR(50) | NOT NULL | ○ | DRAFT, SUBMITTED, IN_ANALYSIS, PENDING_COMPLEMENT, APPROVED, REJECTED, CANCELLED, COMPLETED. |
channel | VARCHAR(50) | NOT NULL | ○ | Canal de criação: WEB, MOBILE, CALL_CENTER, COUNTER. |
submitted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da submissão formal. Null para rascunhos. |
concluded_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento do encerramento (aprovação, rejeição, cancelamento). |
assigned_unit_id | UUID | NULLABLE | ○ | Unidade organizacional responsável pelo tratamento. |
assigned_user_id | UUID | NULLABLE | ○ | Usuário interno responsável. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Rascunhos abandonados podem ser marcados. Solicitações submetidas nunca são excluídas logicamente. |
version | BIGINT | NOT NULL, DEFAULT 0 | ○ | Optimistic locking. |
Índices:
idx_requests_tenant_status_created (tenant_id, status, created_at DESC)idx_requests_tenant_citizen (tenant_id, citizen_id)idx_requests_tenant_assigned (tenant_id, assigned_user_id, status)
Retenção: Legal mínimo — 5 anos após conclusão. form_data sujeito a anonimização LGPD conforme solicitação do titular.
73.8.2 Entidade request_protocols
Número de protocolo gerado na submissão. Referência pública que o cidadão usa para acompanhamento.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador técnico. |
request_id | UUID | NOT NULL, UNIQUE, FK → requests | ○ | Vínculo 1:1 com a solicitação. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
protocol_number | VARCHAR(50) | NOT NULL | ○ | Número de protocolo legível. Formato: YYYY/NNNNNN ou conforme padrão do tenant. |
generated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Momento da geração. |
Restrições: UNIQUE (tenant_id, protocol_number).
Retenção: Igual à solicitação vinculada.
73.8.3 Entidade request_status_history
Trilha imutável de todas as transições de status de uma solicitação.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do evento de transição. |
request_id | UUID | NOT NULL, FK → requests | ○ | Solicitação. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
from_status | VARCHAR(50) | NULLABLE | ○ | Status anterior. Null na criação. |
to_status | VARCHAR(50) | NOT NULL | ○ | Novo status. |
transitioned_by_user_id | UUID | NULLABLE | ○ | Usuário interno que executou a transição. Null para transições automáticas do sistema. |
transitioned_by_type | VARCHAR(50) | NOT NULL | ○ | USER, SYSTEM, WORKFLOW, INTEGRATION. |
reason | TEXT | NULLABLE | ○ | Justificativa da transição quando exigida pelo fluxo. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Momento da transição. Imutável. |
Retenção: Legal mínimo — igual à solicitação.
73.8.4 Entidade request_complements
Pedidos de complementação de informações ou documentos enviados pelo órgão ao cidadão.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da pendência. |
request_id | UUID | NOT NULL, FK → requests | ○ | Solicitação relacionada. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
description | TEXT | NOT NULL | ○ | Descrição do que é necessário para complementar. |
deadline_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Prazo para resposta pelo cidadão. Quando vencido sem resposta, pode gerar cancelamento automático conforme regra do serviço. |
status | VARCHAR(50) | NOT NULL | ○ | PENDING, SUBMITTED, ACCEPTED, REJECTED, EXPIRED. |
requested_by_user_id | UUID | NOT NULL | ○ | Usuário interno que solicitou. |
submitted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento em que o cidadão respondeu. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Retenção: Igual à solicitação.
73.9 Domínio 7 — Processos (BPM/Workflow)
Serviço responsável: Workflow Service
Banco: workflow-service (schema workflow)
73.9.1 Entidade process_definitions
Definições de processos modelados para execução pelo motor BPM.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da definição de processo. |
tenant_id | UUID | NOT NULL | ○ | Tenant proprietário. |
name | VARCHAR(255) | NOT NULL | ○ | Nome legível do processo. |
key | VARCHAR(200) | NOT NULL | ○ | Chave técnica para referência em código e eventos. |
current_published_version | INTEGER | NULLABLE | ○ | Versão publicada ativamente utilizada em novas instâncias. |
status | VARCHAR(50) | NOT NULL | ○ | DRAFT, PUBLISHED, ARCHIVED. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Restrições: UNIQUE (tenant_id, key).
73.9.2 Entidade process_instances
Instâncias de execução de um processo iniciadas a partir de uma solicitação ou evento.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da instância. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
definition_id | UUID | NOT NULL, FK → process_definitions | ○ | Definição que originou a instância. |
definition_version | INTEGER | NOT NULL | ○ | Versão da definição usada para iniciar a instância. Imutável. |
request_id | UUID | NULLABLE | ○ | Solicitação originadora, quando aplicável. |
status | VARCHAR(50) | NOT NULL | ○ | RUNNING, SUSPENDED, COMPLETED, FAILED, CANCELLED. |
current_step_id | UUID | NULLABLE | ○ | Passo atual em execução. |
variables | JSONB | NULLABLE | ◐ | Variáveis de contexto da instância. Podem conter IDs de negócio. Nunca PII direto. |
started_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Início da instância. |
completed_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Conclusão, quando aplicável. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Índices: idx_process_instances_tenant_status (tenant_id, status), idx_process_instances_request (tenant_id, request_id).
Retenção: Operacional; histórico de execução — Legal mínimo.
73.10 Domínio 8 — Tarefas
Serviço responsável: Task Service
Banco: task-service (schema task)
73.10.1 Entidade tasks
Tarefas humanas geradas pelo motor de workflow e atribuídas a usuários internos ou filas de trabalho.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da tarefa. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
process_instance_id | UUID | NOT NULL | ○ | Instância de processo originadora. |
task_type | VARCHAR(100) | NOT NULL | ○ | Tipo da tarefa conforme definição de processo. Ex: ANALYSIS, APPROVAL, COUNTER_SIGNATURE. |
title | VARCHAR(255) | NOT NULL | ○ | Título legível para exibição na fila. |
description | TEXT | NULLABLE | ○ | Instruções adicionais para o responsável. |
status | VARCHAR(50) | NOT NULL | ○ | PENDING, ASSIGNED, IN_PROGRESS, COMPLETED, CANCELLED, EXPIRED. |
priority | VARCHAR(50) | NOT NULL, DEFAULT 'NORMAL' | ○ | LOW, NORMAL, HIGH, CRITICAL. Calculada pelo motor ou configurada no processo. |
queue_id | UUID | NULLABLE | ○ | Fila de trabalho à qual a tarefa pertence quando não há atribuição individual. |
assigned_user_id | UUID | NULLABLE | ○ | Usuário ao qual a tarefa foi atribuída. |
assigned_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da atribuição. |
due_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Prazo para conclusão. Alimenta alertas de SLA. |
completed_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da conclusão. |
result | JSONB | NULLABLE | ○ | Resultado registrado pelo usuário ao concluir. Estrutura definida pelo tipo de tarefa. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Índices:
idx_tasks_tenant_queue_status (tenant_id, queue_id, status)idx_tasks_tenant_assigned_status (tenant_id, assigned_user_id, status)idx_tasks_tenant_due (tenant_id, due_at)— para alertas de SLA.
Retenção: Operacional; histórico de conclusão — Legal mínimo (vinculado à solicitação).
73.11 Domínio 9 — Atendimento e CRM
Serviço responsável: CRM Service
Banco: crm-service (schema crm)
73.11.1 Entidade interactions
Registro de cada interação entre o cidadão e o órgão, independentemente do canal.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da interação. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
citizen_id | UUID | NOT NULL | ○ | Cidadão atendido. |
request_id | UUID | NULLABLE | ○ | Solicitação relacionada, quando aplicável. |
channel | VARCHAR(50) | NOT NULL | ○ | PORTAL, MOBILE, PHONE, COUNTER, EMAIL, CHAT, WHATSAPP. |
interaction_type | VARCHAR(100) | NOT NULL | ○ | SERVICE_REQUEST, COMPLAINT, INQUIRY, FOLLOW_UP, CALLBACK. |
status | VARCHAR(50) | NOT NULL | ○ | OPEN, IN_PROGRESS, WAITING_CITIZEN, RESOLVED, CLOSED. |
subject | VARCHAR(500) | NOT NULL | ○ | Assunto ou resumo da interação. |
assigned_user_id | UUID | NULLABLE | ○ | Atendente responsável. |
assigned_team_id | UUID | NULLABLE | ○ | Equipe responsável quando não há atribuição individual. |
opened_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Momento de abertura. |
first_response_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da primeira resposta. Métrica de SLA. |
resolved_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da resolução. |
closed_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento do fechamento. |
satisfaction_score | SMALLINT | NULLABLE | ○ | Nota de satisfação (1-5), quando coletada no encerramento. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Índices:
idx_interactions_tenant_citizen (tenant_id, citizen_id, opened_at DESC)idx_interactions_tenant_assigned_status (tenant_id, assigned_user_id, status)
Retenção: Legal mínimo — 5 anos.
73.12 Domínio 10 — Comunicação Omnichannel
Serviço responsável: Communication Service
Banco: communication-service (schema comm)
73.12.1 Entidade communications
Registro de cada comunicação enviada ou tentada para um cidadão.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador único da comunicação. Usado para idempotência. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
recipient_citizen_id | UUID | NOT NULL | ○ | Destinatário. |
channel | VARCHAR(50) | NOT NULL | ○ | EMAIL, SMS, PUSH, WHATSAPP, IN_APP. |
template_id | UUID | NOT NULL | ○ | Template utilizado. |
template_version | INTEGER | NOT NULL | ○ | Versão do template no momento do envio. Imutável. |
communication_type | VARCHAR(100) | NOT NULL | ○ | TRANSACTIONAL, NOTIFICATION, CAMPAIGN, SECURITY. |
status | VARCHAR(50) | NOT NULL | ○ | REQUESTED, SENT, DELIVERED, READ, FAILED, BOUNCED. |
subject | VARCHAR(500) | NULLABLE | ○ | Assunto (usado em EMAIL). Não armazena conteúdo renderizado para minimização. |
correlation_id | UUID | NULLABLE | ○ | ID de rastreamento da cadeia de eventos que gerou esta comunicação. |
causation_id | UUID | NULLABLE | ○ | ID do evento ou comando que diretamente originou o envio. |
consent_verified | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Indica se o consentimento foi verificado antes do envio. Obrigatório para campanhas. |
sent_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento do envio ao provedor. |
delivered_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Confirmação de entrega pelo provedor. |
read_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Confirmação de leitura, quando disponível pelo provedor. |
failed_reason | TEXT | NULLABLE | ○ | Motivo da falha, quando aplicável. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Nota de privacidade: o corpo renderizado da comunicação não é armazenado nesta tabela para minimização de PII. O conteúdo é reconstruível a partir do template e das variáveis do evento originador quando necessário para auditoria.
Retenção: 2 anos para comunicações transacionais; 1 ano para campanhas.
73.13 Domínio 11 — Gestão Documental
Serviço responsável: Document Service
Banco: document-service (schema document)
73.13.1 Entidade documents
Documentos digitais armazenados e gerenciados pela plataforma.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador técnico do documento. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
owner_citizen_id | UUID | NULLABLE | ○ | Cidadão que enviou o documento. Null para documentos gerados internamente. |
document_type | VARCHAR(100) | NOT NULL | ○ | Classificação: RG, CPF, PROOF_OF_RESIDENCE, BIRTH_CERTIFICATE, GENERATED_REPORT, PROCESS_ATTACHMENT etc. |
title | VARCHAR(500) | NOT NULL | ○ | Título descritivo do documento. |
description | TEXT | NULLABLE | ○ | Descrição adicional. |
mime_type | VARCHAR(100) | NOT NULL | ○ | Tipo MIME do arquivo. Ex: application/pdf, image/jpeg. |
file_size_bytes | BIGINT | NOT NULL | ○ | Tamanho do arquivo em bytes. |
storage_path | VARCHAR(1024) | NOT NULL | ○ | Caminho no Object Storage. Formato: {tenant_id}/{year}/{month}/{document_uuid}/{filename}. Nunca exposto diretamente em APIs públicas. |
checksum_sha256 | VARCHAR(64) | NOT NULL | ○ | Hash SHA-256 do conteúdo. Verificado em cada leitura para garantir integridade. |
status | VARCHAR(50) | NOT NULL | ○ | UPLOADED, VALIDATED, REJECTED, ARCHIVED. |
is_sensitive | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Documentos sensíveis têm controles adicionais de acesso e log. |
expiration_date | DATE | NULLABLE | ○ | Data de validade do documento, quando aplicável. |
request_id | UUID | NULLABLE | ○ | Solicitação à qual o documento está vinculado, quando aplicável. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Soft delete; arquivo físico removido do Object Storage no processo de purga. |
Índices: idx_documents_tenant_citizen (tenant_id, owner_citizen_id), idx_documents_tenant_request (tenant_id, request_id).
Retenção: Configurável por tenant e tipo de documento; sujeito a LGPD para documentos pessoais.
73.14 Domínio 12 — Agendamentos
Serviço responsável: Scheduling Service
Banco: scheduling-service (schema scheduling)
73.14.1 Entidade appointments
Agendamentos de atendimento presencial ou remoto.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador do agendamento. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
citizen_id | UUID | NOT NULL | ○ | Cidadão que agendou. |
service_id | UUID | NOT NULL | ○ | Serviço agendado. |
agenda_id | UUID | NOT NULL | ○ | Agenda do órgão. |
slot_id | UUID | NOT NULL | ○ | Vaga reservada. A exclusividade é garantida por lock na confirmação. |
status | VARCHAR(50) | NOT NULL | ○ | RESERVED, CONFIRMED, CANCELLED, COMPLETED, NO_SHOW. |
appointment_date | DATE | NOT NULL | ○ | Data do agendamento. |
appointment_time | TIME | NOT NULL | ○ | Horário do agendamento. |
location | VARCHAR(500) | NULLABLE | ○ | Local de atendimento (endereço ou link de videoconferência). |
modality | VARCHAR(50) | NOT NULL | ○ | IN_PERSON, REMOTE. |
confirmation_code | VARCHAR(20) | NOT NULL | ○ | Código de confirmação para check-in. |
reserved_until | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Expiração da reserva temporária antes da confirmação. |
cancelled_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento do cancelamento, quando aplicável. |
cancellation_reason | TEXT | NULLABLE | ○ | Motivo do cancelamento. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Índices: idx_appointments_tenant_citizen (tenant_id, citizen_id), idx_appointments_slot_status (slot_id, status).
Retenção: Operacional; histórico — Legal mínimo (vinculado ao serviço).
73.15 Domínio 13 — Ouvidoria
Serviço responsável: Ombudsman Service
Banco: ombudsman-service (schema ombudsman)
73.15.1 Entidade manifestations
Manifestações registradas por cidadãos na ouvidoria do órgão.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da manifestação. |
tenant_id | UUID | NOT NULL | ○ | Ouvidoria do órgão destinatário. |
citizen_id | UUID | NULLABLE | ○ | Null quando a manifestação é anônima. |
is_anonymous | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Quando true, citizen_id é nulo e nenhuma identificação é solicitada. |
manifestation_type | VARCHAR(50) | NOT NULL | ○ | COMPLAINT, REPORT, SUGGESTION, COMPLIMENT, INFO_REQUEST. |
subject | VARCHAR(500) | NOT NULL | ○ | Assunto resumido. |
description | TEXT | NOT NULL | ● | Descrição completa. Pode conter PII. Acesso restrito por perfil. |
status | VARCHAR(50) | NOT NULL | ○ | RECEIVED, IN_ANALYSIS, FORWARDED, AWAITING_RESPONSE, RESPONDED, CLOSED. |
protocol_number | VARCHAR(50) | NOT NULL, UNIQUE per tenant | ○ | Número de protocolo da ouvidoria. |
classification_id | UUID | NULLABLE | ○ | Classificação interna após triagem. |
forwarded_to_unit_id | UUID | NULLABLE | ○ | Unidade para qual foi encaminhado. |
deadline_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Prazo de resposta conforme legislação ou política interna. |
responded_at | TIMESTAMP WITH TIME ZONE | NULLABLE | ○ | Momento da resposta ao cidadão. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Nota de privacidade: manifestações anônimas não são vinculadas a cidadão mesmo internamente. A plataforma garante que nenhum metadado indireto seja usado para identificar o autor.
Retenção: Legal mínimo — conforme regulamentação de ouvidoria pública (mínimo 5 anos).
73.16 Domínio 14 — Auditoria
Serviço responsável: Audit Service
Banco: audit-service (schema audit) — banco separado, append-only
73.16.1 Entidade audit_events
Trilha imutável de todos os eventos auditáveis da plataforma.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | BIGINT | PK, AUTOINCREMENT | ○ | Chave sequencial para ordenação física. |
audit_id | UUID | NOT NULL, UNIQUE | ○ | Identificador lógico único do evento de auditoria. |
timestamp | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Momento exato do evento. Indexado. |
tenant_id | VARCHAR(100) | NOT NULL | ○ | Tenant de contexto. VARCHAR para compatibilidade com formatos legados. |
event_type | VARCHAR(200) | NOT NULL | ○ | Tipo do evento. Ex: data.modified, access.sensitive, auth.succeeded. |
event_category | VARCHAR(100) | NOT NULL | ○ | Categoria: authentication, authorization, persistence, integration, administration. |
severity | VARCHAR(20) | NOT NULL | ○ | LOW, MEDIUM, HIGH, CRITICAL. |
subject_id | VARCHAR(100) | NULLABLE | ◐ | ID do sujeito que executou a ação (usuário, sistema, integração). |
subject_type | VARCHAR(50) | NULLABLE | ○ | USER, SYSTEM, INTEGRATION, SCHEDULER. |
resource_id | VARCHAR(100) | NULLABLE | ◐ | ID do recurso afetado. |
resource_type | VARCHAR(100) | NULLABLE | ○ | Tipo do recurso: REQUEST, CITIZEN, DOCUMENT, USER, etc. |
action | VARCHAR(100) | NOT NULL | ○ | Ação executada: CREATE, UPDATE, DELETE, READ, APPROVE, REJECT, LOGIN, etc. |
result | VARCHAR(50) | NOT NULL | ○ | SUCCESS, FAILURE, DENIED. |
ip_address | VARCHAR(50) | NULLABLE | ◐ | Endereço IP de origem. |
correlation_id | UUID | NULLABLE | ○ | Identificador de rastreamento distribuído. |
event_json | JSONB | NOT NULL | ◐ | Payload completo do evento, incluindo valores anteriores e novos em alterações. |
hash_value | VARCHAR(64) | NOT NULL | ○ | SHA-256 encadeado com o evento anterior. Garante detecção de adulteração da trilha. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL, DEFAULT NOW() | ○ | Momento de inserção. Imutável. |
Política de escrita: INSERT apenas. Nenhum UPDATE ou DELETE é executado nesta tabela. Compressão e arquivamento de eventos históricos em Object Storage após 12 meses.
Índices: idx_audit_tenant_timestamp (tenant_id, timestamp DESC), idx_audit_subject (tenant_id, subject_id, timestamp DESC), idx_audit_resource (tenant_id, resource_id, timestamp DESC), idx_audit_event_type (tenant_id, event_type, timestamp DESC).
Retenção: Imutável — mínimo 7 anos; acessível para consulta por 2 anos online, arquivado e consultável sob demanda após.
73.17 Domínio 15 — Inteligência Artificial
Serviço responsável: AI Gateway / AI Specialized Service
Banco: ai-service (schema ai)
73.17.1 Entidade ai_requests
Registro de cada requisição enviada ao sistema de IA, para rastreabilidade, governança e controle de quotas.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da requisição de IA. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
user_id | UUID | NULLABLE | ○ | Usuário que originou a requisição. Null para requisições de sistema. |
capability | VARCHAR(100) | NOT NULL | ○ | Capacidade utilizada: CONVERSATIONAL, SEMANTIC_SEARCH, CLASSIFICATION, SUMMARIZATION, EXTRACTION. |
provider | VARCHAR(100) | NOT NULL | ○ | Provedor de LLM selecionado pelo gateway. |
model | VARCHAR(100) | NOT NULL | ○ | Modelo específico utilizado. |
prompt_tokens | INTEGER | NULLABLE | ○ | Tokens de entrada consumidos. |
completion_tokens | INTEGER | NULLABLE | ○ | Tokens de saída gerados. |
latency_ms | INTEGER | NULLABLE | ○ | Latência da requisição em milissegundos. |
status | VARCHAR(50) | NOT NULL | ○ | SUCCESS, FAILED, BLOCKED_BY_GUARDRAIL, QUOTA_EXCEEDED. |
correlation_id | UUID | NULLABLE | ○ | ID de rastreamento da operação de negócio originadora. |
rag_used | BOOLEAN | NOT NULL, DEFAULT FALSE | ○ | Indica se RAG foi ativado na requisição. |
rag_chunks_retrieved | INTEGER | NULLABLE | ○ | Quantidade de chunks recuperados da base vetorial. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Ver padrão 73.2.3. |
Nota de privacidade: prompts e respostas completas não são armazenados nesta tabela para minimização de PII. Apenas metadados de rastreabilidade e métricas de consumo.
Retenção: 12 meses para métricas e rastreabilidade.
73.18 Domínio 16 — Satisfação e Avaliações
Serviço responsável: Satisfaction Service
Banco: satisfaction-service (schema satisfaction)
73.18.1 Entidade feedbacks
Avaliações de cidadãos sobre serviços e atendimentos.
| Coluna | Tipo | Restrição | PII | Semântica |
|---|---|---|---|---|
id | UUID | PK | ○ | Identificador da avaliação. |
tenant_id | UUID | NOT NULL | ○ | Tenant de contexto. |
citizen_id | UUID | NULLABLE | ○ | Cidadão avaliador. Pode ser anônimo conforme configuração do tenant. |
request_id | UUID | NULLABLE | ○ | Solicitação avaliada, quando aplicável. |
interaction_id | UUID | NULLABLE | ○ | Interação de atendimento avaliada, quando aplicável. |
service_id | UUID | NULLABLE | ○ | Serviço avaliado. |
score | SMALLINT | NOT NULL | ○ | Nota de 1 a 5. |
comment | TEXT | NULLABLE | ● | Comentário livre. Pode conter dados pessoais informados voluntariamente. |
channel | VARCHAR(50) | NOT NULL | ○ | Canal pelo qual a avaliação foi registrada. |
created_at | TIMESTAMP WITH TIME ZONE | NOT NULL | ○ | Momento do registro. |
Retenção: Operacional; dados anonimizados após 3 anos para uso analítico.
73.19 Padrões de Cache — Redis
O Redis não é banco de dados primário; é projeção reconstruível. Cada chave segue o padrão:
{tenant_id}:{entity_type}:{entity_id}[:{variant}]
| Prefixo de Chave | Conteúdo | TTL Padrão | Invalidação |
|---|---|---|---|
{tid}:session:{session_id} | Dados mínimos da sessão para validação de token | Conforme expiração JWT | Revogação de sessão |
{tid}:citizen:{citizen_id}:profile | Perfil básico do cidadão para exibição | 15 min | Evento citizen.updated.v1 |
{tid}:catalog:service:{service_id} | Dados do serviço publicado | 30 min | Evento catalog.service.updated.v1 |
{tid}:config:{config_key} | Configuração do tenant | 5 min | Evento tenant.config-changed.v1 |
{tid}:request:{request_id}:summary | Resumo da solicitação para listagens | 5 min | Evento request.status-changed.v1 |
{tid}:rate_limit:{user_id}:{endpoint} | Contador de rate limiting | 1 min | Automático (TTL) |
Regra de privacidade: chaves de cache nunca contêm dados pessoais em claro. Dados pessoais no value são minimizados ao estritamente necessário para a operação de leitura.
73.20 Padrões de Busca Vetorial
A busca vetorial suporta o RAG e a busca semântica. Os vetores são armazenados em vector store segregado por tenant.
| Campo | Tipo | Semântica |
|---|---|---|
chunk_id | UUID | Identificador do fragmento de conteúdo. |
tenant_id | UUID | Tenant proprietário — segregação estrutural. |
source_document_id | UUID | Documento de origem no Document Service. |
chunk_index | INTEGER | Posição do fragmento no documento original. |
content_text | TEXT | Texto do fragmento após sanitização. |
embedding | VECTOR(1536) | Vetor de embedding gerado pelo modelo aprovado. |
metadata | JSONB | Metadados adicionais: tipo de documento, data, categorias. |
indexed_at | TIMESTAMP WITH TIME ZONE | Momento da indexação. |
Isolamento: cada tenant possui sua própria coleção ou namespace no vector store. Uma busca semântica de um tenant nunca recupera fragmentos de outro tenant, mesmo por similaridade matemática acidental.
73.21 Convenções de Evolução de Schema
A evolução do schema de banco de dados segue a estratégia Expand-Migrate-Contract para garantir compatibilidade com versões anteriores do serviço durante deploys graduais:
Fase Expand: adiciona nova coluna ou tabela como NULLABLE, sem remover nada existente. O serviço antigo ignora a nova estrutura; o novo serviço começa a preencher.
Fase Migrate: processo de backfill popula a nova coluna para registros existentes. O serviço novo lê da nova coluna; se null, lê do campo legado.
Fase Contract: quando todo o tráfego utiliza a nova estrutura e o backfill está completo, a coluna legada é removida com uma migration de limpeza.
Todas as migrations são versionadas com Flyway e seguem a convenção de nomenclatura:
V{major}_{minor}__{descricao_legivel}.sql
Migrations nunca fazem DROP TABLE sem aprovação explícita do arquiteto responsável registrada no ADR correspondente.
73.22 Política de Dados Pessoais — Resumo por Domínio
| Domínio | PII Direta Presente | Criptografia em Repouso | Anonimização na Purga |
|---|---|---|---|
| Identidade | E-mail, nome | Sim (credenciais com bcrypt; storage criptografado) | Sim — LGPD art. 12 |
| Cidadão | Nome, CPF-hash, endereço, contato | Sim | Sim |
| Solicitações | form_data (PII variável por serviço) | Sim | Sim (seletiva) |
| Documentos | Conteúdo de arquivos | Sim (Object Storage com chave por tenant) | Sim (exclusão do arquivo físico) |
| Auditoria | IP, subject_id (ID técnico) | Sim | Não — preservado para conformidade legal |
| Comunicação | Contato do destinatário (referenciado, não duplicado) | Sim | Sim (após retenção) |
| Ouvidoria | Descrição livre, identidade quando não anônimo | Sim | Sim (após prazo legal) |
| IA | Sem PII no armazenamento (apenas metadados) | N/A | N/A |
73.23 Referências Cruzadas
| Entidade | Capítulo de Referência Primária |
|---|---|
tenants, tenant_configurations | Capítulos 9, 30 |
users, credentials, sessions, profiles | Capítulos 28, 29, 43 |
citizens, citizen_contacts, citizen_addresses, citizen_consents | Capítulos 9, 44 |
public_services, service_categories | Capítulos 9, 10 |
forms, form_versions | Capítulo 12 (Forms Service) |
requests, request_protocols, request_status_history, request_complements | Capítulos 9, 12, 15 |
process_definitions, process_instances | Capítulos 9, 12, 19 |
tasks | Capítulos 12, 19 |
interactions | Capítulos 18, 12 |
communications | Capítulos 21, 12 |
documents | Capítulos 20, 12 |
appointments | Capítulo 12 (Scheduling Service) |
manifestations | Capítulo 12 (Ombudsman Service) |
audit_events | Capítulos 45, 46 |
ai_requests | Capítulo 16 |
feedbacks | Capítulo 12 (Satisfaction Service) |
| Padrões de Cache (Redis) | Capítulo 35 |
| Busca Vetorial | Capítulos 16, 36 |
73.24 Resumo
O Capítulo 73 apresenta o Dicionário de Dados da Plataforma de Relacionamento Digital com o Cidadão, cobrindo 16 domínios de persistência, com descrição formal de mais de 45 entidades principais e seus atributos, tipos, restrições, semântica de negócio, classificação de privacidade e políticas de retenção.
Os padrões transversais — UUID como identificador, tenant_id obrigatório em toda tabela de negócio, atributos de ciclo de vida, soft delete, optimistic locking e classificação PII — garantem consistência e segurança em toda a estrutura de dados da plataforma.
O Dicionário de Dados é um documento vivo. Toda adição de campo, alteração de tipo ou mudança de política de retenção exige atualização deste capítulo, registro em migration versionada com Flyway e, quando a mudança afeta o contrato de dados entre serviços, um ADR correspondente.
73.25 Próximo Capítulo
O Capítulo 74 — Requisitos Não Funcionais consolida as especificações mensuráveis de performance, disponibilidade, escalabilidade, segurança e conformidade que a plataforma deve atender, com metas numéricas, mecanismos de medição e rastreabilidade aos requisitos do edital.
73.26 Controle de Versão
| Campo | Valor |
|---|---|
| Documento | Documento Mestre — Plataforma de Relacionamento Digital com o Cidadão |
| Capítulo | 73 — Dicionário de Dados |
| Versão | 1.0 |
| Situação | Concluído |
| Última atualização | 17/07/2026 |
| Status de Aprovação | Aprovado |
Capítulo 72 — Eventos e Tópicos de Mensageria
Este capítulo documenta de forma consolidada e de referência o catálogo completo de eventos de domínio, comandos assíncronos e trabalhos distribuídos da Plataforma de Relacionamento Digital com o Cidadão.
Capítulo 74 — Requisitos Não Funcionais
Este capítulo consolida os requisitos não funcionais da Plataforma de Relacionamento Digital com o Cidadão em um único catálogo de referência, organizados por domínio de qualidade, com critérios de aceitação precisos, ra…