# 📄 FASTAPP SCHEMA — Ciclo de Vida do Esquema

O esquema do Fastapp existe em dois estados: **Dinâmico (Banco de Dados)** e **Estático (Sistema de Arquivos)**. Esta dualidade garante agilidade no desenvolvimento e robustez em produção.

---

## 1. Esquema Dinâmico (Primary Source)
- **Local**: Tabela `app` no PostgreSQL.
- **Edição**: Feita via Schema Manager v3 ou API.
- **Uso**: Ferramenta de No-Code para design-time.

## 2. Esquema Estático (Snapshot)
- **Local**: `app/fastapp/static-manifest.ts`.
- **Geração**: Via endpoint de Snapshot.
- **Uso**: Carregamento instantâneo em produção, versionamento Git e segurança contra falhas de conexão com o banco.

---

## 🔄 Fluxo de Evolução

1.  **Iteração**: O Arquiteto IA ou o Dev edita o Esquema Dinâmico.
2.  **Validação**: Teste das mudanças em tempo real na aba de aplicativos.
3.  **Congelamento**: Geração do Snapshot para "pergelar" a versão estável.
4.  **Sincronia**: Notificação do Protocolo Fadap para ajustar o banco físico (DDL).

---

## 📐 Estrutura Técnia (V3)

O esquema é definido por interfaces TypeScript que governam a renderização e o comportamento.

### 📦 ObjectSchema
Define a entidade principal e seu comportamento de CRUD.
- `crud_mode`: `'modal' | 'sidebar' | 'page' | 'split'`.
- `detail_mode`: `'sidebar' | 'modal' | 'page'`.
- `group_render_mode`: `'tabs' | 'wizard' | 'sections'`. (Define como `property_groups` são exibidos).

### 🔗 RelationSchema
Define como os objetos se conectam e como o CRUD filho é orquestrado.
- `nested_crud`: `boolean`. Habilita a aba de CRUD para o objeto alvo.
- `nested_view_mode`: `'table' | 'kanban' | 'list' | 'grid'`. Define a visualização padrão na aba.
- `ui_visibility`: `boolean | 'hidden' | 'visible'`. Controla se a relação aparece nos menus/exploradores automáticos.
- `storage`: `'reference_id' | 'document_embed' | 'pivot'`.

---

## 🛠️ Custom Actions

O esquema também define o comportamento de ações customizadas. Quando uma ação (ex: `Gerar Relatório`) é declarada no objeto:
1.  O metadado registra a intenção e o ícone.
2.  O motor busca a implementação correspondente no diretório de handlers Nitro (`server/api/v1/actions/...`).

---

> "O esquema é o contrato entre a intenção do negócio e a execução do software."
