Documentação Técnica · Projeto MEL · GDF

Infraestrutura digital pronta para piloto institucional.

Plataforma operacional com web, API REST e aplicativo mobile. Multi-tenant, multi-perfil, com cadeia de custódia SHA-256 verificável e dados reais semeados para demonstração.

18Módulos da API
167Endpoints REST
26Modelos de dados
50Páginas web
12Perfis (3 globais + 9 tenant)
Perfis de Acesso

Papéis de acesso da plataforma

16 usuários reais semeados no banco cobrem todos os 12 papéis (3 globais + 9 de tenant). O controle de acesso (RBAC) define exatamente o que cada perfil enxerga.

Papéis de acesso disponíveis

Papel Efetivo Onde atua
Admin Global /tenants · /audit · /whatsapp
Operador /dashboard inteligência (gerencia tudo, exceto remover Admin)
Gestora ONG /patinhas-cerrado/dashboard · /casos · /animais · /doacoes (com saldo + aprovar)
Voluntário App MEL Campo (mobile/web) · registro de resgates
Veterinária /patinhas-cerrado/prontuarios · /vacinas · /laudos
Promotor MP /evidencias · /custodia · /dossies · /verificacao (cadeia SHA-256)
Polícia Ambiental /dashboard inteligência · /mapa · /hotspots
Conselheira /dashboard agregado cross-tenant (somente leitura)
Doador /patinhas-cerrado/doar · transparência pública

Total de usuários no banco: 16. Papéis globais: 3 (ADMIN, OPERATOR, USER). Papéis de tenant: 9 (ADMIN, ONG_MANAGER, VOLUNTEER, VETERINARIAN, GOVERNMENT, PROSECUTOR, POLICE, COUNCIL, DONOR).

Banco de Dados Atual

Dados reais semeados

Tudo abaixo é verificável via psql direto no Postgres. Não é mock — são registros reais com integridade SHA-256 encadeada e PDFs gerados em disco.

16
Usuários
6
ONGs (Tenants)
93
Animais cadastrados
52
Casos de resgate
203
Evidências jurídicas
144
Registros de custódia
52
Dossiês PDF
412
Blocos de integridade
79
Doações totais
30
Prontuários médicos
29
Vacinações
9
Adoções concluídas

💰 Doações detalhadas

  • 67 aprovadas · R$ 15.905,00
  • 9 pendentes · R$ 960,00 (aguardando aprovação da gestora)
  • 3 rejeitadas · R$ 635,00
  • Total de eventos: 79 doações
  • Endpoint de saldo: GET /donations/balance
  • Aprovar/rejeitar: PATCH /donations/:id/status

⚖ Motor jurídico (validado)

  • 203 evidências em 52 casos (média de ~4 por caso)
  • 144 transferências de custódia em cadeia (4 elos: voluntário → vet → ONG → polícia → MP)
  • 52 dossiês PDF reais em disco (storage/dossiers/<tenant>/<case>/dossie-completo.pdf)
  • 412 blocos IntegrityBlock com SHA-256 encadeado
  • Verificação: GET /legal/cases/:id/verify → todas íntegras
  • Download: GET /legal/cases/:id/dossier/download
Funcionalidades da API

18 módulos · 167 endpoints

Lista exata dos controllers expostos pela API NestJS. Cada um com auth JWT + RBAC + multi-tenant via interceptor.

🛡 AdminController /admin

  • Cadastro, aprovação e gestão de ONGs
  • Gestão de usuários e dos 12 papéis de acesso (RBAC)
  • Audit logs (3.300+ registros)
  • Endpoint /admin/expo-tunnel (URL dinâmica do app)

🏠 TenantController /tenants

  • CRUD de ONGs (6 cadastradas)
  • Listagem pública para portal cidadão
  • Branding (cor primária, logo) por tenant

👥 UserController + UserTenantController /users · /user-tenants

  • Perfil próprio · /me
  • Membership de usuário em múltiplas ONGs
  • Aprovação de novos voluntários

🔐 AuthController /auth

  • Login JWT (HS256, 15min access + 7d refresh)
  • Register (cidadão) e Register-ONG
  • Refresh token rotativo (SHA-256 hashed)

🐾 AnimalController + AnimalPhoto /animals

  • CRUD com 93 animais reais
  • Upload de fotos com EXIF/GPS
  • Histórico por animal

📋 CaseController + Foster + Sync /cases

  • State machine de 8 estados (TRIAGE→…→CLOSED)
  • Transições com hash de integridade
  • Endpoint de sync para mobile offline
  • Foster homes (4 cadastros)

🩺 MedicalController /medical

  • 30 prontuários · 29 vacinações
  • Histórico clínico imutável por animal
  • Diagnóstico, tratamento, prescrição

⚖ LegalController /legal

  • Evidências (203), custódia (144), dossiês (52)
  • Geração de PDF + download
  • Verificação de integridade SHA-256
  • 9 endpoints expostos

💰 DonationController /donations

  • Listagem · stats · saldo (recebido − aplicado)
  • Aprovar / Rejeitar / Estornar
  • Aplicações de gasto por categoria
  • Webhook Mercado Pago + checkout PIX

🤝 AdoptionController /adoptions

  • 9 adoções no banco
  • Triagem · período de teste · monitoramento

📊 TransparencyController /transparency

  • Stats públicas (sem auth)
  • Timeline mensal · mapa anonimizado
  • Lista de doações aprovadas por ONG

📈 CouncilController /council

  • Dashboard cross-tenant para Conselheira
  • Indicadores agregados por região administrativa

🗺 GeoController /geo

  • PostGIS · pontos lat/long
  • Mapa de calor por urgência e espécie

📁 StorageController /storage

  • Upload multipart com sharp (compressão imagens)
  • Path traversal protection
  • Jail por tenant

🔔 NotificationController + WhatsApp /notifications · /whatsapp

  • 35 notificações no banco
  • WhatsApp via Baileys (QR code)
  • Email via SMTP

🔌 IntegrationController /integration

  • SEPAN (relatório de conformidade)
  • Mercado Pago (preference + webhook)

📝 AuditController /audit

  • Log de 100% das mutações
  • IP, user-agent, oldValue, newValue
  • 3.300+ logs

❤ HealthController /health

  • Verifica DB + Redis
  • Resposta JSON com timestamps
Modelo de Dados

26 modelos Prisma

Schema relacional normalizado em PostgreSQL 16 + PostGIS. Multi-tenant por tenantId (UUID) com isolamento via interceptor.

Tenant

ONGs cadastradas. CNPJ, cor, slug, status. 6 registros.

User

Usuário global com bcrypt 12 rounds. 16 registros.

UserTenant

Membership N:N usuário↔ONG com TenantRole.

Animal · AnimalPhoto

Animais resgatados com fotos georreferenciadas. 93 animais.

Case · CaseAnimal · CaseTransition · CaseTask

Caso de resgate com state machine de 8 estados. 52 casos.

MedicalRecord · Vaccination

Prontuário clínico imutável. 30 prontuários · 29 vacinas.

Adoption

Processo de adoção com triagem. 9 concluídas.

FosterHome

Lares temporários. 4 cadastros.

Evidence

Evidência jurídica com fileHash + integrityHash. 203 registros.

CustodyRecord

Cadeia de custódia. 144 transferências.

Dossier

Dossiê PDF gerado. 52 PDFs em disco.

IntegrityBlock

Blockchain lógico SHA-256. 412 blocos.

Donation · DonationApplication

Doações + prestação de contas. 79 doações.

BankAccount

Conta bancária por ONG.

Notification

In-app, email, WhatsApp. 35 registros.

AuditLog

Auditoria de mutações. 3.300+ logs.

RefreshToken

Tokens rotativos hashados.

Cadeia de Custódia Digital

Integridade SHA-256 verificável

Cada evidência, custódia e dossiê é selado com hash encadeado ao bloco anterior. Adulteração quebra a cadeia e fica detectável.

Fórmula de hash (igual em produção)

Replicada exatamente entre IntegrityService (production), prisma/seed_legal.ts e o endpoint de verificação.

hash = SHA-256(
  sequence | entityType | entityId |
  sortedJSON(payload) | prevHash | timestamp.toISOString()
)

Verificação ao vivo:

GET /api/v1/legal/cases/:caseId/verify

{
  "allValid": true,
  "chains": {
    "evidence": { "valid": true },
    "custody": { "valid": true },
    "dossier": { "valid": true }
  },
  "entityVerifications": [...]
}
Stack Tecnológica

100% open source · zero licença

Sem dependência de fornecedores proprietários. Pronta para deploy on-premise no datacenter do GDF ou nuvem soberana.

NestJS
v11 · API Backend
Next.js
v15.5 · App Router
Expo / React Native
SDK 54 · Web + Native
PostgreSQL
v16 · com PostGIS
Prisma ORM
v6.19 · 26 models
Redis + BullMQ
v7 · filas e cache
TypeScript
strict + SWC
Docker Compose
deploy reproduzível
JWT (HS256)
15min access · 7d refresh
bcrypt 12 rounds
hashing de senha
PDFKit
geração de dossiês
Pino
logs estruturados
Conformidade Legal

Construída dentro da lei

Aderência ao arcabouço jurídico brasileiro de proteção de dados, transparência, bem-estar animal e governança digital.

LGPD (Lei 13.709/2018)

Anonimização de dados pessoais nos canais públicos, audit log com IP/UA, consentimento explícito e direito ao esquecimento.

LAI (Lei 12.527/2011)

Portal de transparência ativa em /transparencia sem necessidade de login. Indicadores em tempo real.

Crimes Ambientais (Lei 9.605/1998)

Cadeia de custódia digital SHA-256 idônea para subsidiar denúncias formais ao Ministério Público.

Proteção Animal (Lei 14.064/2020)

Apoio à aplicação da lei que aumentou penas por maus-tratos contra cães e gatos.

Decreto 10.046/2019

Modelo multi-tenant respeita autonomia das ONGs. Isolamento técnico por tenant via interceptor.

WCAG 2.1 AA

Contraste mínimo de 4.5:1. Navegação por teclado. Semantic HTML. Compatível com leitores de tela.

Pronta para apresentação técnica

A plataforma já está em pé, com dados reais e fluxos validados ponta-a-ponta. O time técnico do GDF pode acessar agora mesmo via os links acima e validar cada perfil.

Solicitar Demonstração Técnica