> For the complete documentation index, see [llms.txt](https://lunarie.gitbook.io/lunarie-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lunarie.gitbook.io/lunarie-docs/banco-de-dados/04-campos-e-tipos.md).

# Campos e Tipos

> **Última atualização:** 08/10/2026 Colunas e restrições conferidas com o banco em 08/10/2026. Convenções: `uuid` para identificadores, `timestamptz` para datas de evento, `text` para texto e arrays para listas.

## ebooks

| Grupo          | Colunas                                                                                                                                                                                                                                                                                       |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Identidade     | `id` uuid PK · `usuario_id` uuid NOT NULL                                                                                                                                                                                                                                                     |
| Bibliográficos | `titulo` text NOT NULL · `autor` · `serie` · `numero_da_serie` numeric · `genero` · `subgenero` · `tags_subgenero` text\[] · `ano_publicacao` int · `editora` · `idioma` · `observacoes` (texto exibido na ficha, onde fica a sinopse) · `isbn_10` · `isbn_13` · `asin` · `paginas_total` int |
| Arquivo        | `arquivo_path` (caminho no Storage) · `nome_arquivo_original` · `nome_arquivo_padronizado` · `tamanho_arquivo` bigint · `arquivo_removido_em` · `origem_arquivo`                                                                                                                              |
| Capa           | `capa_url` (URL pública do bucket `capas`, ADR-011)                                                                                                                                                                                                                                           |
| Leitura        | `status_leitura` · `favorito` bool · `data_leitura` · `notas` · `tags` text\[]                                                                                                                                                                                                                |
| Proveniência   | `serie_source` · `serie_confidence` · `metadata_source` · `metadata_confidence`                                                                                                                                                                                                               |
| Kindle         | `kindle_enviado_em` timestamptz                                                                                                                                                                                                                                                               |
| Vínculo        | `knowledge_base_id` uuid → `knowledge_base`                                                                                                                                                                                                                                                   |
| Carimbos       | `data_criacao` · `data_atualizacao` (trigger)                                                                                                                                                                                                                                                 |
| Legado         | `arquivo_url`, `enviado_para_kindle`, `data_envio_kindle` e `confirmado_avulso` existem na tabela, mas o código do app não os usa.                                                                                                                                                            |

**Valores permitidos (CHECK):**

* `status_leitura`: `quero_ler` (padrão), `lendo`, `lido`, `abandonado`.
* `origem_arquivo`: `upload` (padrão), `catalogado_digital`, `catalogado_fisico`.

## knowledge\_base

`id` · `titulo_normalizado` NOT NULL · `titulo_original` NOT NULL · `autor_normalizado` NOT NULL · `autor_original` · `serie` · `numero_serie` text · `genero` · `subgeneros` text\[] · `idioma` · `editora` · `ano_publicacao` text · `sinopse` · `capa_url` · `isbn_10` · `isbn_13` · `asin` · `content_hash` (SHA-256 do texto do EPUB) · `metadata_source` · `metadata_confidence` · `criado_em` · `atualizado_em`.

Os campos "normalizados" seguem as regras do app (sem acentos nem artigos, autores ordenados) e servem como chave de busca. Os "originais" preservam a grafia.

## Kindle

| Tabela               | Colunas                                                                                                                                                 |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `kindle_envios`      | `id` · `ebook_id` → `ebooks` (CASCADE) · `usuario_id` (sem FK) · `email_kindle` · `enviado_em` · `status` · `erro_detalhe` · `tamanho_arquivo`          |
| `kindle_email_pref`  | `usuario_id` PK · `kindle_email` · `verificado_em` · `verificado_email` · `resumo_semanal` bool (padrão `true`) · `resumo_enviado_em` · `atualizado_em` |
| `kindle_bounce_seen` | `email_id` text PK · `processed_at`                                                                                                                     |

**Atenção:** o CHECK de `kindle_envios.status` aceita `enviado`, `erro`, `arquivo_ausente` e `arquivo_muito_grande`, mas **não** `erro_conversao`. O `kindle-bounce-check` grava `erro_conversao` ao detectar uma falha E999. Com esse CHECK, a gravação é rejeitada. Veja o ponto de atenção em [Regras de Dados](/lunarie-docs/banco-de-dados/06-regras-de-dados.md).

## Apoio

| Tabela     | Colunas                                                                                                                                                      |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `founders` | `usuario_id` · `tipo` · `preco_garantido_brl` · `ativo`. O CHECK aceita `admin`, `fundador` e `primeira_estante`, e só existem `admin` e `primeira_estante`. |
| `apoios`   | `usuario_id` · `valor_brl` · `stripe_payment_intent_id`                                                                                                      |

## Entrada e conta

| Tabela                      | Colunas                                                                                                                                                                                                                                     |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fila_da_lua`               | `nome` · `email` · `convidado` bool · `convidado_em` · `criado_em`                                                                                                                                                                          |
| `convites`                  | `codigo` · `email` · `origem` (`direto` ou `fila_da_lua`) · `usado` · `usado_em` · `expira_em` · `arquivado`                                                                                                                                |
| `invite_attempts`           | `origem` (IP) · `attempted_at`                                                                                                                                                                                                              |
| `profiles`                  | `id` = `auth.uid()` PK · `nome` · `avatar_url` (caminho no bucket `avatares`) · `onboarding_concluido_em` · `generos_favoritos` text\[] · `ritmo_leitura` (`devagar`, `moderado` ou `rapido`) · `feedback_30d_enviado_em` · `atualizado_em` |
| `preferencias_nomenclatura` | `usuario_id` · `padrao_serie` · `padrao_avulso`                                                                                                                                                                                             |
| `metas_leitura`             | `usuario_id` · `ano` · `meta_livros` (mínimo 1)                                                                                                                                                                                             |

## Conquistas e IA

| Tabela                  | Colunas                                                                                                                                                                                                                                 |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `conquistas_definicoes` | `chave` · `titulo` · `descricao` · `tipo_criterio` (`total_livros`, `genero_quantidade` ou `total_paginas`) · `genero` (obrigatório só em `genero_quantidade`) · `quantidade` (> 0) · `ativo`                                           |
| `conquistas_obtidas`    | `usuario_id` · `conquista_id` → `conquistas_definicoes` · `obtida_em`                                                                                                                                                                   |
| `ai_usage_logs`         | `usuario_id` · `livro_id` · `triggered_by` · `modelo` · `prompt_tokens` · `completion_tokens` · `total_tokens` · `status` (`sucesso` ou `erro`) · `erro_mensagem` · `latencia_ms` · limites e saldos diários e por minuto · `criado_em` |

## Taxonomia e auditoria

| Tabela                  | Colunas                                                                                          |
| ----------------------- | ------------------------------------------------------------------------------------------------ |
| `generos_ref`           | `nome` · `aliases` text\[] · `criado_em`                                                         |
| `subgeneros_ref`        | `nome` · `aliases` text\[] · `genero_id` → `generos_ref`                                         |
| `series_dismissed_next` | `serie` · `usuario_id` (sem FK) · `created_at`                                                   |
| `storage_delete_audit`  | `bucket_id` · `object_name` · `deleted_at` · `db_role` · `db_user` · `jwt_email` · `alertado_em` |

## Documentos relacionados

* [Tabelas](/lunarie-docs/banco-de-dados/03-tabelas.md)
* [Relacionamentos](/lunarie-docs/banco-de-dados/05-relacionamentos.md)
* [Regras de Dados](/lunarie-docs/banco-de-dados/06-regras-de-dados.md)
