diff --git a/prisma/migrations/20261015010000_c4_qc/migration.sql b/prisma/migrations/20261015010000_c4_qc/migration.sql new file mode 100644 index 0000000..977a2fa --- /dev/null +++ b/prisma/migrations/20261015010000_c4_qc/migration.sql @@ -0,0 +1,36 @@ +-- CreateTable +CREATE TABLE `qc` ( + `id` VARCHAR(36) NOT NULL, + `tenant_code` VARCHAR(64) NOT NULL, + `record_id` VARCHAR(36) NOT NULL, + `qc_type` VARCHAR(20) NOT NULL DEFAULT 'normal', + `qc_result` VARCHAR(20) NOT NULL DEFAULT 'pending', + `qc_note` VARCHAR(200) NULL, + `qc_staff_id` VARCHAR(36) NULL, + `qc_time` DATETIME(3) NULL, + `pass_time` DATETIME(3) NULL, + `first_qc_id` VARCHAR(36) NULL, + `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `created_by` VARCHAR(36) NULL, + `updated_at` DATETIME(3) NOT NULL, + `deleted_at` DATETIME(3) NULL, + + INDEX `qc_tenant_code_record_id_idx`(`tenant_code`, `record_id`), + INDEX `qc_tenant_code_qc_result_idx`(`tenant_code`, `qc_result`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- CreateTable +CREATE TABLE `ho_record_correction` ( + `id` VARCHAR(36) NOT NULL, + `tenant_code` VARCHAR(64) NOT NULL, + `record_id` VARCHAR(36) NOT NULL, + `qc_id` VARCHAR(36) NULL, + `correction_note` VARCHAR(200) NOT NULL, + `corrected_by` VARCHAR(36) NOT NULL, + `corrected_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + + INDEX `ho_record_correction_record_id_idx`(`record_id`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0321bb5..1e0cf74 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -724,3 +724,39 @@ model Report { @@map("report") } + +/// 质控记录 +model Qc { + id String @id @default(uuid(7)) @db.VarChar(36) + tenantCode String @map("tenant_code") @db.VarChar(64) + recordId String @map("record_id") @db.VarChar(36) + qcType String @default("normal") @map("qc_type") @db.VarChar(20) + qcResult String @default("pending") @map("qc_result") @db.VarChar(20) + qcNote String? @map("qc_note") @db.VarChar(200) + qcStaffId String? @map("qc_staff_id") @db.VarChar(36) + qcTime DateTime? @map("qc_time") + passTime DateTime? @map("pass_time") + firstQcId String? @map("first_qc_id") @db.VarChar(36) + createdAt DateTime @default(now()) @map("created_at") + createdBy String? @map("created_by") @db.VarChar(36) + updatedAt DateTime @updatedAt @map("updated_at") + deletedAt DateTime? @map("deleted_at") + + @@index([tenantCode, recordId]) + @@index([tenantCode, qcResult]) + @@map("qc") +} + +/// 补正说明(留痕域 ho_) +model RecordCorrection { + id String @id @default(uuid(7)) @db.VarChar(36) + tenantCode String @map("tenant_code") @db.VarChar(64) + recordId String @map("record_id") @db.VarChar(36) + qcId String? @map("qc_id") @db.VarChar(36) + correctionNote String @map("correction_note") @db.VarChar(200) + correctedBy String @map("corrected_by") @db.VarChar(36) + correctedAt DateTime @default(now()) @map("corrected_at") + + @@index([recordId]) + @@map("ho_record_correction") +} diff --git a/src/prisma/prisma.service.ts b/src/prisma/prisma.service.ts index 334416c..6031b57 100644 --- a/src/prisma/prisma.service.ts +++ b/src/prisma/prisma.service.ts @@ -5,7 +5,7 @@ import { getRequestContext } from '../common/context/request-context.js'; /** 不带 tenantCode 的模型(租户表自身)。 */ const TENANT_FREE = new Set(['Tenant', 'Agency', 'SvcNational', 'SvcLocal', 'SvcMapping', 'LocConfig']); /** 软删模型:读操作统一注入 deletedAt IS NULL。 */ -const SOFT_DELETE = new Set(['User', 'Role', 'Resource', 'Org', 'DictType', 'DictItem', 'Config', 'Notice', 'Staff', 'SvcOrg', 'Elder', 'Plan', 'Order', 'ElderSvc', 'Record']); +const SOFT_DELETE = new Set(['User', 'Role', 'Resource', 'Org', 'DictType', 'DictItem', 'Config', 'Notice', 'Staff', 'SvcOrg', 'Elder', 'Plan', 'Order', 'ElderSvc', 'Record', 'Qc']); const READ_OPS = new Set(['findMany', 'findFirst', 'findUnique', 'count', 'aggregate', 'groupBy']); /** 没有 where 子句的操作(create 的租户由 service 在 data 里显式写入)。 */ const NO_WHERE_OPS = new Set(['create', 'createMany']);