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]) // DocumentMigraçõ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