Files

DuOrigin v2 - Prisma Database Layer

Este diretório contém o schema Prisma e scripts de seed para o DuOrigin v2.

📁 Estrutura

prisma/
├── schema.prisma    # Schema do banco de dados
├── seed.ts          # Script de seed com dados demo
└── README.md        # Esta documentação

🗄️ Modelos de Dados

Modelo Descrição Tabela
User Usuários do sistema (autenticação) users
Company Empresas/operadores EUDR companies
Producer Produtores rurais producers
Area Propriedades/glebas com geolocalização areas
Product Commodities EUDR (soja, café, etc.) products
Lot Lotes de produto para rastreabilidade lots
DdsStatement Declarações de Due Diligence dds_statements
AuditLog Trilha de auditoria audit_logs

🔗 Relacionamentos

Company
  └── Producer (1:N)
        ├── Area (1:N)
        │     └── Lot (1:N)
        └── Lot (1:N)

Product
  └── Lot (1:N)

Company
  └── DdsStatement (1:N)
        └── lot_ids (JSON array)

User
  └── AuditLog (1:N)

🚀 Setup

1. Configurar Variável de Ambiente

Crie ou edite .env na raiz do projeto:

# Via túnel SSH (recomendado para dev local)
DATABASE_URL="postgresql://duorigin:DuOrigin2026!@localhost:5433/duorigin"

# Conexão direta (se PostgreSQL aceitar conexões externas)
# DATABASE_URL="postgresql://duorigin:DuOrigin2026!@198.199.84.130:5432/duorigin"

1.1 Criar Túnel SSH (se necessário)

Se o PostgreSQL não aceita conexões externas, crie um túnel SSH:

# Criar túnel (porta local 5433 -> servidor 5432)
ssh -i ~/.ssh/digitalocean_jarvis -L 5433:localhost:5432 -fN root@198.199.84.130

# Verificar se túnel está ativo
ss -tlnp | grep 5433

# Matar túnel quando terminar
pkill -f "ssh.*5433.*5432"

2. Gerar Prisma Client

npx prisma generate

3. Aplicar Schema (se banco novo)

# Criar migration inicial
npx prisma migrate dev --name init

# Ou sincronizar sem migration (dev)
npx prisma db push
npx prisma db seed

📊 Dados de Demonstração

O seed cria os seguintes dados:

Usuários

Email Senha Role
demo@duorigin.com DuoDemo2026 admin
operador@duorigin.com DuoDemo2026 operator

Empresas (3)

  • AgroCerrado Exportações Ltda (GO)
  • Fazendas Unidas do Brasil S.A. (MT)
  • Cooperativa Agrícola Planalto Central (MG)

Produtores (5)

Produtores rurais vinculados às empresas, com CAR válido.

Áreas (5)

Propriedades rurais no Cerrado com coordenadas reais:

  • 3 áreas com risco baixo (sem desmatamento)
  • 1 área com risco médio (alerta)
  • 1 área com risco alto (desmatamento confirmado)

Lotes (10)

Lotes de soja e café em diferentes status:

  • 4 aprovados
  • 2 em revisão
  • 2 rejeitados
  • 2 pendentes

Declarações DDS (5)

Due Diligence Statements em vários status:

  • 2 aprovadas (com EU reference)
  • 1 submetida (aguardando)
  • 1 rejeitada
  • 1 rascunho

🛠️ Comandos Úteis

# Abrir Prisma Studio (GUI)
npx prisma studio

# Resetar banco e re-seed
npx prisma migrate reset

# Verificar schema
npx prisma validate

# Formatar schema
npx prisma format

# Gerar diagrama ERD
npx prisma-erd-generator

📦 Uso no Código

import { prisma } from '@/lib/prisma';

// Buscar todos os lotes com risco alto
const highRiskLots = await prisma.lot.findMany({
  where: { risk_score: { gte: 70 } },
  include: {
    area: true,
    producer: true,
    product: true,
  },
});

// Buscar empresa com produtores e áreas
const company = await prisma.company.findUnique({
  where: { id: 1 },
  include: {
    producers: {
      include: { areas: true },
    },
  },
});

🔒 Segurança

  • Nunca commitar .env com credenciais reais
  • Em produção, usar SSL: ?sslmode=require
  • Sempre usar prepared statements (Prisma faz isso automaticamente)

📝 Notas

  • O campo lot_ids em DdsStatement é um JSON array de IDs
  • O campo geojson em Area armazena polígonos GeoJSON
  • Timestamps são DateTime? para compatibilidade com banco existente
  • Passwords são hasheados com bcrypt (salt rounds: 10)