Skip to content

1.项目实例:可疑医疗器械不良事件报表

本节将探讨打印模板在实际应用场景中的具体案例。 您可以参考案例,并结合自身需求,优化和完善您的打印模板设计。


场景概述

医疗器械的安全监测与监管

当医疗机构、生产企业、经营企业或患者在使用医疗器械过程中,怀疑发生了与器械相关的、导致或可能导致人体伤害的事件时,需要及时规范地填写报告表,并逐级上报至国家食品药品监督管理总局

本节app下载

初始word下载

构建完成的word模板下载

效果如下:

1. 案例分析

该案例的主要目标就是使用word模板,来规范生成上面提到的报告表

自动生成相关信息,并选择性留白相关内容(如签名,评价意见等交由打印完成后书写),确保报表的准确性

提示

实际场景中,有时需要根据已有的报表模板来修改,例如:

本案例中,报告表实际可参考药监局提供的模板来进行编写

下载模板

结合表单内容和实际需求,可将模板分为四个主要部分

  1. 头部与尾部

    这部分用于标识报告的来源和日期等信息

  2. 患者资料

    包含患者的基本情况,预期治疗效果

  3. 不良事件的情况

    报告的核心,描述事件的本身及其后果

  4. 医疗器械情况

    器械信息,后续状态及监管部门的评价等


2. 模板构建

下面我们使用药监局提供的模板

在其中添加需要从表单提取的字段

按照前面案例分析中的划分来逐步讲解

  1. 头部和尾部

    • 报告日期: <<toDate(R["成交日期"], "yyyy年MM月dd日")>>

    • 报告来源: 这里可以让用户手动勾选,也可以直接填充表单的对应字段:<<R["报告来源"]>>

      当然,为了文档前后格式的一致性,也可以使用三元表达式来对对应的选项打勾

      <<R["报告来源"] === "生产企业" ? "☑":"□">>生产企业   <<R["报告来源"] === "经营企业" ? "☑":"□">>经营企业   <<R["报告来源"] === "使用单位" ? "☑":"□">>使用单位

      若前面条件为真,则填充?前的内容,否则填充?后的内容

      除此之外,考虑到后面还有多处用到单选框,为了简化工作,你也可以通过代码块来实现(代码要在调用前定义)

      js
      <<EXEC
      
      function checkbox(fileds, text) {
          if (param1 === fileds) {
              return "☑" + text;
          } else {
              return "□" + text;
          }
      }
      >>

      调用定义的代码块实现上面功能,对比之下更加简便

      <<checkbox(R["报告来源"],"生产企业"])>>   <<checkbox(R["报告来源"],"经营企业"])>>   <<checkbox(R["报告来源"],"使用单位"])>>
    • 联系信息: <<R["联系地址"]>>, <<R["单位名称"]>>, <<R["联系电话"]>>, <<R["邮编"]>>

    • 编码: <<R["编码"]>> 重要的唯一标识符,用于系统追踪。

  2. 患者资料

    • 基本信息: <<R["姓名"]>>, <<R["年龄"]>>, 性别等。
    • 治疗背景: <<R["预期治疗疾病或作用"]>>
  3. 不良事件情况

    • 事件描述: <<R["事件主要表现"]>>, <<R["事件陈述"]>>

    • 时间: <<toDate(R["事件发生日期"], "yyyy年MM月dd日")>>, <<toDate(R["发现或知悉时间"], "yyyy年MM月dd日")>>

    • 事件后果: 与前面类似,可以使用模板语句来自动填充选项

      这里还可以拓展功能当选择患者死亡时自动生成死亡时间,下面使用条件语句来实现

      <<IF R["事件后果"] === "死亡">>
      死亡时间:<<toDate(R["死亡时间"], "yyyy-MM-dd")>>
      <<END-IF>>
    • 报告人身份: 同上面报告来源的内容

  4. 医疗器械情况

    • 基础信息: 包括产品名称、商品名称、型号规格、等同上。

    • 操作人与状态: (专业/非专业/患者)与前面相同;

    • 原因,评价等: 对于这种文本量可能较多的内容,通过调整<<R["国家检测技术机构评价意见"]>>命令的字号,填充的内容会继承命令的格式

    • 报告人签名: <<IMAGE toSign(R["确认签名"], {width: 1, height: 1, caption: R["客户姓名"]})>>

    • 事件报告状态: 多选框,与之前单选框类似,可以直接填充对应字段<<R["事件报告状态"]>>

      也可以生成选项框,R["多选"]返回的是一个数组,我们可以使用includes()方法判断数组内是否有某内容,思路与单选等情况类似

      <<R["事件报告状态"].includes("已通知使用单位") ? "☑":"□">>已通知使用单位  <<R["事件报告状态"].includes("已通知生产企业") ? "☑":"□">>已通知生产企业
      <<R["事件报告状态"].includes("已通知经营企业") ? "☑":"□">>已通知经营企业 <<R["事件报告状态"].includes("已通知药监部门") ? "☑":"□">>已通知药监部门

      如果数组中有对应的内容则填充带勾的选项框否则填充不带勾的选项框

至此模板的构建就基本完成了最终word模板下载

效果如下:


3.项目总结

功能模块描述使用语法/技巧
数据绑定将表单数据源 R 中的字段值插入到 Word 模板指定位置。<<R["字段名"]>>
日期格式化将数据库原始日期格式转换为人类可读的指定格式(如中文年月日)。<<toDate(R["日期字段"], "yyyy年MM月dd日")>>
单选框/多选框根据数据动态显示“打勾”或“未打勾”的选项框()。三元表达式: <<R["来源"] === "值" ? "☑":"□">> 数组判断(多选): <<R["多选"].includes("值") ? "☑":"□">>
条件显示根据特定条件(例如“事件后果”是否为“死亡”)决定是否显示某段内容或字段。<<IF 条件>> ... 内容 ... <<END-IF>>
图片签名插入将存储的电子签名图片动态插入到报告人签名区域,并控制图片尺寸。<<IMAGE toSign(R["签名"], {width: ..., height: ...})>>
代码块复用定义自定义 JavaScript 函数(如 checkbox 函数),简化多处重复的单选框逻辑。