feat(报表分析): 新增签署总览等四个报表菜单并拆分演示数据开关
This commit is contained in:
@@ -17,6 +17,12 @@ import { DEMO_SIGNATURE_DATA_URL } from '@/utils/demo-signature'
|
||||
import { mockFlags } from '@/utils/mock-flags'
|
||||
import { buildFieldSpanHtml } from '@/utils/signing-fields'
|
||||
|
||||
import {
|
||||
campusOfDepartment,
|
||||
mockDocumentById,
|
||||
mockDocumentCatalog,
|
||||
type MockDocumentDef,
|
||||
} from './mock-catalog'
|
||||
import { getSigningTaskDetail, getSigningTaskEvents, getSigningTasks } from './signing'
|
||||
import type {
|
||||
PatientSex,
|
||||
@@ -31,7 +37,6 @@ import type {
|
||||
SigningTaskRecord,
|
||||
SigningTaskStatus,
|
||||
VisitType,
|
||||
WorkbenchCampus,
|
||||
} from './types'
|
||||
|
||||
const useMockData = mockFlags.signRecords
|
||||
@@ -43,154 +48,6 @@ const MAX_PAGES = 25
|
||||
/** 导出/批量取回时单页条数 */
|
||||
const BULK_PAGE_SIZE = 200
|
||||
|
||||
/* =========================================================================
|
||||
演示数据:文书目录
|
||||
========================================================================= */
|
||||
|
||||
/**
|
||||
* 演示文书目录。
|
||||
*
|
||||
* 记录引用的是「签署当时那一版」文书,可能与当前文库不同(模板停用、改版、归档都会
|
||||
* 让历史记录指向一份现在查不到的文书),所以记录自带文书名与类别,不靠当前文库反查。
|
||||
*/
|
||||
interface MockDocumentDef {
|
||||
id: string
|
||||
name: string
|
||||
category: string
|
||||
department: string
|
||||
/** 该文书的风险告知条款(演示正文用) */
|
||||
items: string[]
|
||||
}
|
||||
|
||||
const MOCK_DOCUMENTS: MockDocumentDef[] = [
|
||||
{
|
||||
id: 'mock-doc-cardiac',
|
||||
name: '心脏介入手术知情同意书',
|
||||
category: '知情同意书',
|
||||
department: '心内科',
|
||||
items: [
|
||||
'术中、术后可能发生心律失常、心肌缺血甚至心肌梗死。',
|
||||
'穿刺部位可能出现血肿、假性动脉瘤或动静脉瘘。',
|
||||
'可能发生造影剂过敏反应,严重者可出现过敏性休克。',
|
||||
'存在麻醉意外、血管破裂、血栓形成与栓塞等风险。',
|
||||
'术后需按医嘱卧床、服药并按时复诊,擅自停药可能危及生命。',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mock-doc-mri',
|
||||
name: 'MRI 磁共振检查知情同意书',
|
||||
category: '知情同意书',
|
||||
department: '医学影像科',
|
||||
items: [
|
||||
'体内有心脏起搏器、金属植入物、动脉瘤夹者不得进入检查室。',
|
||||
'检查中机器噪声较大,请配合佩戴耳塞并保持体位不动。',
|
||||
'使用对比剂时可能出现恶心、皮疹等不良反应,极少数可发生严重过敏。',
|
||||
'危重患者、不能配合者可能无法完成检查或需改期。',
|
||||
'检查结果由诊断医师出具,最终以正式报告为准。',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mock-doc-endoscopy',
|
||||
name: '内镜检查知情同意书',
|
||||
category: '知情同意书',
|
||||
department: '消化内科',
|
||||
items: [
|
||||
'检查过程中可能出现咽喉不适、恶心、腹胀或轻度腹痛。',
|
||||
'极少数情况下可能发生出血、穿孔等并发症,需进一步处理。',
|
||||
'麻醉或镇静下检查存在呼吸抑制、误吸等风险。',
|
||||
'检查中可能根据所见情况取活检或行息肉切除。',
|
||||
'若检查前准备不充分,可能影响观察效果或需要重新检查。',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mock-doc-narcotic',
|
||||
name: '麻醉药品、精神药品知情同意书',
|
||||
category: '知情同意书',
|
||||
department: '麻醉科·精神科',
|
||||
items: [
|
||||
'麻精药品具有成瘾性(依赖性)风险,须严格按照医嘱使用。',
|
||||
'不得套开、转借或转售麻精药品,转售涉嫌毒品犯罪。',
|
||||
'需按医嘱定期复诊,长期使用者至少每 3 个月复诊一次。',
|
||||
'过期、未使用的药品及废贴、空安瓿应交回医疗机构销毁。',
|
||||
'可能出现恶心、呕吐、便秘、头晕、嗜睡、呼吸抑制等不良反应。',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mock-doc-surgery',
|
||||
name: '手术麻醉风险告知书',
|
||||
category: '风险告知书',
|
||||
department: '普外科',
|
||||
items: [
|
||||
'麻醉过程中可能出现呼吸循环波动、药物过敏或困难气道。',
|
||||
'术中可能因病情变化扩大手术范围或改变手术方式。',
|
||||
'术后可能发生出血、感染、切口愈合不良或深静脉血栓。',
|
||||
'合并基础疾病者发生并发症的风险相应升高。',
|
||||
'术后需配合镇痛、早期活动与康复训练。',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mock-doc-blood',
|
||||
name: '输血治疗风险告知书',
|
||||
category: '风险告知书',
|
||||
department: '血液科',
|
||||
items: [
|
||||
'可能出现发热、寒战、皮疹等输血反应。',
|
||||
'极少数情况下可能发生溶血反应或输血相关急性肺损伤。',
|
||||
'虽经严格筛查,仍存在窗口期病原体传播的极小概率。',
|
||||
'大量输血可能引起凝血功能异常、电解质紊乱。',
|
||||
'输血过程中请勿擅自离开病区,出现不适请立即告知医护人员。',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mock-doc-admission',
|
||||
name: '住院须知及告知书',
|
||||
category: '入院告知',
|
||||
department: '医务处',
|
||||
items: [
|
||||
'住院期间请遵守病区管理要求,不得擅自离院或外宿。',
|
||||
'请如实告知既往病史、过敏史与用药情况。',
|
||||
'贵重物品请自行妥善保管,避免带入大量现金。',
|
||||
'医疗费用按医保政策与医院规定结算,欠费可能影响治疗安排。',
|
||||
'诊疗方案可能根据病情变化调整,调整前会与患者或家属沟通。',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'mock-doc-emergency',
|
||||
name: '入院告知书(急诊留观)',
|
||||
category: '入院告知',
|
||||
department: '急诊科',
|
||||
items: [
|
||||
'留观期间病情可能随时变化,需配合医护人员密切观察。',
|
||||
'留观不等同于住院,如需住院将另行办理手续。',
|
||||
'部分检查结果出具需要时间,请耐心等待并保持联系方式畅通。',
|
||||
'如病情加重需转入抢救室或重症监护病房,将另行告知。',
|
||||
'离院需经医师评估同意,擅自离院可能延误诊治。',
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
/** 科室所属院区:演示数据按科室归属派生院区,不必逐条重复写一遍 */
|
||||
const MOCK_DEPARTMENT_CAMPUS: Record<string, WorkbenchCampus> = {
|
||||
心内科: '本部院区',
|
||||
消化内科: '本部院区',
|
||||
'麻醉科·精神科': '本部院区',
|
||||
医务处: '本部院区',
|
||||
医学影像科: '东院区',
|
||||
急诊科: '东院区',
|
||||
普外科: '西院区',
|
||||
血液科: '西院区',
|
||||
}
|
||||
|
||||
const MOCK_DOCUMENT_BY_ID = new Map(MOCK_DOCUMENTS.map((document) => [document.id, document]))
|
||||
|
||||
/** 演示科室清单(筛选下拉用):只列演示数据里出现过的科室,选了必定有结果 */
|
||||
export const mockRecordDepartments: string[] = [...new Set(MOCK_DOCUMENTS.map((d) => d.department))]
|
||||
|
||||
/** 演示文档类别清单(筛选下拉用) */
|
||||
export const mockRecordCategories: string[] = [
|
||||
...new Set(MOCK_DOCUMENTS.map((document) => document.category)),
|
||||
]
|
||||
|
||||
/**
|
||||
* 演示正文。
|
||||
*
|
||||
@@ -230,7 +87,7 @@ function buildMockDocumentHtml(document: MockDocumentDef): string {
|
||||
|
||||
function getMockDocumentHtml(documentId: string): string {
|
||||
mockDocumentHtmlCache ??= new Map(
|
||||
MOCK_DOCUMENTS.map((document) => [document.id, buildMockDocumentHtml(document)]),
|
||||
mockDocumentCatalog.map((document) => [document.id, buildMockDocumentHtml(document)]),
|
||||
)
|
||||
|
||||
return mockDocumentHtmlCache.get(documentId) ?? ''
|
||||
@@ -253,7 +110,7 @@ interface MockRecordSeed {
|
||||
sex: PatientSex
|
||||
age: number
|
||||
visitType: VisitType
|
||||
/** MOCK_DOCUMENTS 的 id */
|
||||
/** mockDocumentCatalog 的 id */
|
||||
doc: string
|
||||
status: SigningTaskStatus
|
||||
method: SigningMethod
|
||||
@@ -311,7 +168,7 @@ const VISIT_NO_PREFIX: Record<VisitType, string> = {
|
||||
}
|
||||
|
||||
function buildMockRecord(seed: MockRecordSeed, index: number): SigningRecord {
|
||||
const document = MOCK_DOCUMENT_BY_ID.get(seed.doc)
|
||||
const document = mockDocumentById.get(seed.doc)
|
||||
|
||||
if (!document) {
|
||||
throw new Error(`演示签署记录引用了不存在的文书:${seed.doc}`)
|
||||
@@ -339,7 +196,7 @@ function buildMockRecord(seed: MockRecordSeed, index: number): SigningRecord {
|
||||
return {
|
||||
id: `SR${dateKey}${pad(index + 1)}`,
|
||||
templateVersionId: `${seed.doc}-v1`,
|
||||
campus: MOCK_DEPARTMENT_CAMPUS[document.department] ?? '本部院区',
|
||||
campus: campusOfDepartment(document.department),
|
||||
patientId: `P2026${10001 + index}`,
|
||||
patientName: seed.patient,
|
||||
sex: seed.sex,
|
||||
|
||||
Reference in New Issue
Block a user