Skip to content

Banco de Dados

Estrutura do banco de dados PostgreSQL.

Schema Principal

Document

Tabela central de documentos.

prisma
model Document {
  id              Int       @id @default(autoincrement())
  digitalId       String    @unique
  deletedAt       DateTime?
  createdAt       DateTime  @default(now())
  updatedAt       DateTime  @updatedAt
  
  fields          DocumentField[]
  attachments     DocumentAttachment[]
  auditLogs       AuditLog[]
}

DocumentField

Valores de campos dinâmicos.

prisma
model DocumentField {
  id              String   @id @default(uuid())
  documentId      Int
  fieldConfigId   String
  value           String?
  
  document        Document
  fieldConfig     GlobalFieldConfiguration
  
  @@unique([documentId, fieldConfigId])
}

GlobalFieldConfiguration

Configuração global de campos.

prisma
model GlobalFieldConfiguration {
  id              String    @id @default(uuid())
  fieldKey        String    @unique
  fieldName       String
  fieldType       FieldType
  section         FieldSection
  required        Boolean   @default(false)
  sortOrder       Int       @default(0)
  isSystem        Boolean   @default(false)
  deletedAt       DateTime?
  
  selectOptions   Json?
  minLength       Int?
  maxLength       Int?
}

Tabelas de Upload

UploadedFile

Metadados de arquivos PDF.

prisma
model UploadedFile {
  id                    String              @id @default(uuid())
  batchId               String
  fileType              FileType            // PDF
  r2FileKey             String              @unique
  fileName              String
  fileSize              BigInt
  processingStatus      PdfProcessingStatus
  totalPages            Int?
  processingStartedAt   DateTime?
  processingCompletedAt DateTime?
  processingError       String?
  
  pages                 UploadedFilePage[]
}

UploadedFilePage

Páginas extraídas dos PDFs.

prisma
model UploadedFilePage {
  id             String   @id @default(uuid())
  uploadedFileId String
  pageNumber     Int
  r2FileKey      String   @unique
  fileName       String
  fileSize       BigInt?
  contentType    String
  
  uploadedFile   UploadedFile
  
  @@unique([uploadedFileId, pageNumber])
}

Auditoria

AuditLog

Registro de todas as operações.

prisma
model AuditLog {
  id          String          @id @default(uuid())
  entityType  AuditEntityType
  entityId    String
  action      AuditAction
  userId      String
  changes     Json?
  documentId  Int?
  createdAt   DateTime        @default(now())
  
  user        User
  document    Document?
}

Enums

FieldType

prisma
enum FieldType {
  TEXT
  TEXTAREA
  NUMBER
  DATE
  SELECT
  BOOLEAN
}

PdfProcessingStatus

prisma
enum PdfProcessingStatus {
  PENDING
  GENERATING_IMAGES
  CONVERTING_IMAGES
  COMPLETED
  FAILED
}

AuditAction

prisma
enum AuditAction {
  CREATE
  UPDATE
  SOFT_DELETE
  FIELD_CREATED
  FIELD_UPDATED
  FIELD_DELETED
}

Índices

Principais índices para performance:

prisma
@@index([userId])          // AuditLog
@@index([entityId])        // AuditLog
@@index([documentId])      // DocumentField
@@index([fieldConfigId])   // DocumentField
@@index([uploadedFileId])  // UploadedFilePage
@@index([batchId])         // UploadedFile
@@index([deletedAt])       // Document

Migrações

Ver packages/db/prisma/migrations/ para histórico completo.

Principais Migrações

  • init: Schema inicial
  • add_document_type_table: Tipos dinâmicos
  • add_linked_body: Órgãos vinculados
  • add_field_configuration: Campos dinâmicos
  • add_audit_log: Sistema de auditoria
  • add_pdf_processing: Upload e processamento

Sistema de Gestão de Arquivos Digitais