Documentação Técnica · Plataforma 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.

22Módulos da API
139Endpoints REST
23Modelos de dados
42Páginas web
12Perfis (3 globais + 9 tenant)
Credenciais de Teste

Login para cada perfil

10 usuários reais semeados no banco. Cobre todos os 12 papéis (3 globais + 9 de tenant). Use para testar fluxos por perfil.

Usuários disponíveis

Email Senha Nome Papel Efetivo Onde testar
admin@projetomel.com.br admin123 Administrador MEL Admin Global /credenciais-demo · /tenants · /audit · /whatsapp
governo@gdf.gov.br senha123 Carlos Lima Operador /credenciais-demo (gerencia tudo, exceto remover Admin) · /dashboard inteligência
gestora@patinhas.org.br senha123 Maria Santos Gestora ONG /patinhas-cerrado/dashboard · /casos · /animais · /doacoes (com saldo + aprovar)
voluntario@gmail.com senha123 João Oliveira Voluntário App MEL Campo (mobile/web) · registro de resgates
vet@clinica.com.br senha123 Dra. Ana Pereira Veterinária /patinhas-cerrado/prontuarios · /vacinas · /laudos
promotor@mpdft.mp.br senha123 Dra. Beatriz Costa Promotor MP /evidencias · /custodia · /dossies · /verificacao (cadeia SHA-256)
policia@pmdf.gov.br senha123 Sgt. Ricardo Alves Polícia Ambiental /dashboard inteligência · /mapa · /hotspots
conselho@gdf.gov.br senha123 Fernanda Rocha Conselheira /dashboard agregado cross-tenant (somente leitura)
doador@gmail.com senha123 Pedro Mendes Doador /patinhas-cerrado/doar · transparência pública
luizbueno463@gmail.com (usuário Bueno) Bueno Admin Global 2º admin do sistema

Total de usuários no banco: 10. 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.

10
Usuários
6
ONGs (Tenants)
59
Animais cadastrados
48
Casos de resgate
199
Evidências jurídicas
144
Registros de custódia
36
Dossiês PDF
412
Blocos de integridade
79
Doações totais
22
Prontuários médicos
29
Vacinações
12
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)

  • 199 evidências em 36 casos abertos (4–7 por caso)
  • 144 transferências de custódia em cadeia (4 elos: voluntário → vet → ONG → polícia → MP)
  • 36 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

22 módulos · 139 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 globais com 3 papéis
  • Audit logs (28 registros atuais)
  • 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 59 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

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

⚖ LegalController /legal

  • Evidências (199), custódia (144), dossiês (36)
  • 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

  • 12 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
  • 28 logs atuais

❤ HealthController /health

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

23 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. 10 registros.

UserTenant

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

Animal · AnimalPhoto

Animais resgatados com fotos georreferenciadas. 59 animais.

Case · CaseAnimal · CaseTransition · CaseTask

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

MedicalRecord · Vaccination

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

Adoption

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

FosterHome

Lares temporários. 4 cadastros.

Evidence

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

CustodyRecord

Cadeia de custódia. 144 transferências.

Dossier

Dossiê PDF gerado. 36 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. 28 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 · 23 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