188 lines
6.9 KiB
Plaintext
188 lines
6.9 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Tenant {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
name String
|
|
slug String @unique
|
|
apiKeyHash String
|
|
status String @default("ACTIVE") // ACTIVE, SUSPENDED
|
|
economicActivityCode String?
|
|
contactEmail String
|
|
webhookUrl String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
resoluciones DianResolution[]
|
|
facturas Invoice[]
|
|
auditLogs AuditLog[]
|
|
|
|
@@map("tenants")
|
|
}
|
|
|
|
model CompanyProfile {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
nit String @unique
|
|
dv String
|
|
legalName String
|
|
tradeName String
|
|
taxRegime String @default("48") // 48 = Responsable de IVA
|
|
fiscalResponsibility String @default("O-13,O-15,O-23,O-47")
|
|
departmentCode String @default("76") // Valle del Cauca
|
|
cityCode String @default("76001") // Cali
|
|
cityName String @default("Cali")
|
|
address String @default("Avenida Colombia # 12-45")
|
|
email String @default("facturacion@innovacionydesarrollo.co")
|
|
phone String @default("+57 300 123 4567")
|
|
softwareId String @default("d5e07b47-6aea-43cc-b38c-3c7d46b4a52f")
|
|
softwarePin String @default("75319")
|
|
dianEnvironment String @default("HABILITACION") // HABILITACION, PRODUCCION
|
|
testSetId String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@map("company_profiles")
|
|
}
|
|
|
|
model DigitalCertificate {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
alias String
|
|
issuer String
|
|
subject String
|
|
serialNumber String
|
|
validFrom DateTime
|
|
validTo DateTime
|
|
p12DataEncrypted String @db.Text
|
|
passwordEncrypted String
|
|
isActive Boolean @default(true)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@map("digital_certificates")
|
|
}
|
|
|
|
model DianResolution {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
tenantId String? @db.Uuid
|
|
resolutionNumber String
|
|
prefix String
|
|
fromNumber BigInt
|
|
toNumber BigInt
|
|
currentConsecutive BigInt
|
|
technicalKey String
|
|
startDate DateTime
|
|
endDate DateTime
|
|
isActive Boolean @default(true)
|
|
documentType String @default("01") // 01: Factura, 91: NC, 92: ND
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant? @relation(fields: [tenantId], references: [id])
|
|
facturas Invoice[]
|
|
|
|
@@unique([prefix, resolutionNumber])
|
|
@@map("dian_resolutions")
|
|
}
|
|
|
|
model Invoice {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
tenantId String @db.Uuid
|
|
resolutionId String @db.Uuid
|
|
prefix String
|
|
consecutive BigInt
|
|
fullNumber String @unique
|
|
documentType String @default("01") // 01: Factura Venta, 91: NC, 92: ND
|
|
issueDate DateTime
|
|
issueTime String
|
|
currency String @default("COP")
|
|
operationType String @default("10")
|
|
paymentType String @default("1") // 1 = Contado, 2 = Credito
|
|
paymentMethodCode String @default("10") // 10 = Efectivo, 48 = Tarjeta, 31 = Transferencia
|
|
paymentDueDate DateTime?
|
|
subtotal Decimal @db.Decimal(14, 2)
|
|
taxTotal Decimal @db.Decimal(14, 2)
|
|
discountTotal Decimal @default(0) @db.Decimal(14, 2)
|
|
grandTotal Decimal @db.Decimal(14, 2)
|
|
cufe String? @unique
|
|
qrContent String? @db.Text
|
|
xmlSigned String? @db.Text
|
|
xmlDianResponse String? @db.Text
|
|
dianStatus String @default("PENDING") // PENDING, SIGNED, ACCEPTED, REJECTED, ERROR, CONTINGENCY
|
|
dianStatusCode String?
|
|
dianStatusDescription String? @db.Text
|
|
dianTrackingKey String?
|
|
dianReceivedDate DateTime?
|
|
pdfUrl String?
|
|
metadata Json?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
tenant Tenant @relation(fields: [tenantId], references: [id])
|
|
resolution DianResolution @relation(fields: [resolutionId], references: [id])
|
|
customer InvoiceCustomer?
|
|
items InvoiceItem[]
|
|
auditLogs AuditLog[]
|
|
|
|
@@index([tenantId, dianStatus])
|
|
@@index([issueDate])
|
|
@@map("invoices")
|
|
}
|
|
|
|
model InvoiceCustomer {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
invoiceId String @unique @db.Uuid
|
|
identificationType String @default("13") // 13: CC, 31: NIT, 22: CE, 41: Pasaporte
|
|
identificationNumber String
|
|
dv String?
|
|
legalOrFullName String
|
|
tradeName String?
|
|
email String
|
|
phone String?
|
|
address String
|
|
departmentCode String @default("76")
|
|
cityCode String @default("76001")
|
|
cityName String @default("Cali")
|
|
taxRegime String @default("49") // 48: Responsable IVA, 49: No responsable IVA
|
|
invoice Invoice @relation(fields: [invoiceId], references: [id], onDelete: Cascade)
|
|
|
|
@@map("invoice_customers")
|
|
}
|
|
|
|
model InvoiceItem {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
invoiceId String @db.Uuid
|
|
lineNumber Int
|
|
sku String
|
|
description String
|
|
quantity Decimal @db.Decimal(12, 4)
|
|
unitCode String @default("EA")
|
|
unitPrice Decimal @db.Decimal(14, 2)
|
|
totalCost Decimal @db.Decimal(14, 2)
|
|
taxPercentage Decimal @default(19.00) @db.Decimal(5, 2)
|
|
taxAmount Decimal @db.Decimal(14, 2)
|
|
taxTypeCode String @default("01") // 01 = IVA, 04 = INC
|
|
discountAmount Decimal @default(0) @db.Decimal(14, 2)
|
|
invoice Invoice @relation(fields: [invoiceId], references: [id], onDelete: Cascade)
|
|
|
|
@@map("invoice_items")
|
|
}
|
|
|
|
model AuditLog {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
tenantId String? @db.Uuid
|
|
invoiceId String? @db.Uuid
|
|
action String
|
|
details Json
|
|
ipAddress String?
|
|
userAgent String?
|
|
createdAt DateTime @default(now())
|
|
tenant Tenant? @relation(fields: [tenantId], references: [id])
|
|
invoice Invoice? @relation(fields: [invoiceId], references: [id])
|
|
|
|
@@index([action, createdAt])
|
|
@@map("audit_logs")
|
|
}
|