Arquitetura
Stack, organização do código por domínio, fluxo de uma requisição e o estado de cada fase do projeto.
Esta seção é para quem mantém o sistema. O repositório é
byeloff/auefolia-trio; o
CLAUDE.md da raiz é a referência curta para agentes e o
docs/plano-de-implementacao.md, o plano completo.
Stack
| Camada | Tecnologia |
|---|---|
| Backend | Laravel 13 · PHP 8.3+ (8.4 em produção) |
| Frontend | Inertia · React 19 · TypeScript · Tailwind 4 · shadcn/ui · radix-ui |
| Autenticação | WorkOS (laravel/workos), com telas próprias e Magic Auth pela API |
| Autorização | RBAC próprio + Policies (Gate::before: admin tudo, inativo nada) |
| Banco | PostgreSQL 17 |
| Filas, cache e sessão | Redis + Horizon |
| PDFs | dompdf (contratos) |
| Testes | Pest 4 (contra PostgreSQL) · Vitest (front) |
| Estática | Larastan nível 7 · tsc --noEmit |
| Observabilidade | Sentry · Horizon · logs estruturados |
Domínios
O código de negócio fica em app/Domain, um diretório por domínio:
| Domínio | Responsabilidade |
|---|---|
Catalogo | Eventos, pacotes, ofertas (embarque, hospedagem, opcional), preço e estoque |
Vendas | Reservas, itens, passageiros e o funil |
Financeiro | Parcelas, pagamentos, créditos, política de cancelamento, régua |
Contratos | Modelos versionados, emissão imutável, assinatura e provedores |
Comunicacao | E-mails transacionais e trilha em comunicacoes |
Identidade | Usuários, papéis, permissões, clientes, vendedores, WorkOS |
Operacao | Credenciais e check-in (fase 9, não iniciada) |
Cada domínio segue {Models,Actions,DTOs,Enums,Queries,Events,Jobs,Listeners}.
Transversal em app/Support (value objects Dinheiro, Cpf, Percentual,
Periodo; casts; auditoria; arquivos privados; ID cifrado na URL).
Fluxo de uma requisição
Controller valida (Form Request), chama a Action e devolve Inertia::render
ou redirect. Componente React renderiza e chama endpoint. Efeitos colaterais
vão por evento de domínio, nunca dentro da Action que confirma.
Rotas no front usam Wayfinder (resources/js/routes, resources/js/actions,
gerados no build). Os tipos de domínio vêm de resources/js/types/domain.d.ts,
gerado por php artisan types:generate.
Estado das fases
| Fase | Status |
|---|---|
| 0 a 7: fundação, value objects, RBAC, catálogo, vendas, financeiro, contratos, áreas do cliente e do vendedor | ✅ |
| 8: migração do legado (dump de 13/10/2026) | ✅ |
| 9: operação em campo (check-in) | ⏸️ aguardando o cliente |
| 10: observabilidade e go-live | ✅ código; backup/restore e legado read-only na infra |
| 11: comunicação e relatórios | ✅ (WhatsApp na régua depende de decisão) |
Decisões em aberto
- Operação em campo entra no escopo?
- Aceite por clique basta juridicamente ou é preciso ICP-Brasil?
- Há outras marcas (multi-tenant)?
- Há obrigação de NFS-e?
- WhatsApp entra na régua de cobrança?
- Data de virada (go-live) na baixa temporada.