更新记录

1.0.0(2026-11-12)

首个版本:仪器证书逐测量日覆盖并与前后校准独立判定;多岗位多日按声能计算 LEX,8h、周 LEX,40h 和剂量;输出工序/同工种贡献与透明排序指数;未测工时、不完整周、完整标志冲突及同工种人数冲突停用结果,人数不重复汇总;整改关闭强制同岗位复测与证据,残余达到或超过 85 dBA 必须重开;单文件审计 CSV。Node 22 实跑 280 项断言全部通过,通用 preflight 10 个发布文件全部通过。HBuilderX launch --compile true 真编译通过,index.kt 1486 行并含核心符号;Android 真机未执行(ADB 无设备);H5 真实渲染截图 3 张已生成并检查。


平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× √ × × √ × √ × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

噪声暴露与整改复测

给 EHS、职业卫生与车间整改负责人 的离线记录计算插件:输入带有仪器证书和测量前后校准记录的岗位分段 LAeq,计算日 LEX,8h、周 LEX,40h、剂量、主导工序与同工种贡献,并管理「责任人 → 期限 → 同岗位复测 → 允许关闭」的整改闭环。

核心不是把免费网页上的日/周公式再包装一次,而是保留仪器证据、分段测量、未测工时、整改责任与复测证据链。插件不采集麦克风、不申请录音权限、不充当声级计、不出具职业卫生合规证书。

功能边界

  • 仪器证据:证书编号与有效期、测前/测后校准分别判定;证书必须覆盖 asOfDate 和每一个工作测量日,过期、未覆盖、缺记录或超过允差均标记证据无效。
  • 多岗位多日:每个工作日可包含多个 { task, laEq, hours } 分段,按能量汇总,不做 dBA 算术平均。
  • 日/周暴露:输出 LEX,8h、周 LEX,40h、日/周剂量以及 80/85 dBA 管理提示。
  • 贡献与排序:按工序累计能量与占比,指出主导工序;按 workerGroup 汇总同工种。priorityIndex=周剂量×接触人数 仅用于排序,不是法规风险分。
  • 数据门禁:未测工时、不完整周、非法日期、重复 ID、非法分段会标记 invalid/incomplete,相应日或周值不可用,绝不把缺测静默按 0。
  • 整改闭环:每项整改有责任人、期限和 OPEN/DONE/CLOSED 状态。CLOSED 必须有同岗位、原测量日之后的复测值、复测日期和证据;复测达到或超过 85 dBA 时仍须继续整改。
  • 审计 CSV:一个文件包含仪器证据、日暴露和整改复测三区,UTF-8 单 BOM,默认写 Android 应用外部私有目录。

计算公式

单段声能 Eᵢ = hoursᵢ × 10^(LAeqᵢ/10)
日能量 E = ΣEᵢ
LEX,8h = 10 × log10(E/8)
周 LEX,40h = 10 × log10(Σ工作日E/40)
日剂量(%) = E / (8 × 10^8.5) × 100
周剂量(%) = Σ工作日E / (40 × 10^8.5) × 100

剂量参考为 85 dBA × 8 h = 100%;周剂量用 40 小时作分母。示例:90 dBA 持续 8 小时,LEX,8h=90 dBA,日剂量=316.256%;4 h 的 94 dBA 加 4 h 的 90 dBA,LEX,8h=92.445 dBA,而不是算术平均 92 dBA。

offDuty=true 只表示明确的非工作日,能量为 0、LEX,8h 不可用;非工作日若仍带测量分段则判无效。工作日分段合计不足 8 小时判 incomplete;合计超过 24 小时判 invalid。同一岗位所有工作日的 weekComplete 必须一致:全部 true 且记录有效时才输出周值,全部 false 为 incomplete,true/false 混用(包括字段缺失后的 false)为 invalid;休息日不参与该一致性判断。只有休息日、没有工作日也不能形成完整暴露周。

80/85 dBA 是界面管理提示:BELOW_80、BETWEEN_80_85、OVER_85。它们不替代适用法规、测量规范或职业卫生专业判断。

快速接入

import { noisePlan, noiseExport, noiseVersion } from '@/uni_modules/szhzy-noise-exposure'

const options = {
  asOfDate: '2026-11-11',
  instrument: {
    serial: 'SLM-2026-017', certificateNo: 'CAL-2026-0318',
    validUntil: '2027-03-18', referenceDb: 94,
    preCalDb: 93.8, postCalDb: 94.1, toleranceDb: 0.3
  },
  jobs: [{
    jobId: 'JOB-PRESS', workerGroup: '冲压工', contactCount: 12,
    daily: [{
      dayId: 'D1', date: '2026-11-02', offDuty: false, weekComplete: true,
      segments: [
        { task: '冲压主机', laEq: 94, hours: 4 },
        { task: '首件检验', laEq: 88, hours: 4 }
      ]
    }]
  }],
  actions: [{
    actionId: 'ACT-01', jobId: 'JOB-PRESS', measureDayId: 'D1',
    owner: '设备主管', dueDate: '2026-11-20', status: 'CLOSED',
    recheckDate: '2026-11-10', recheckLex8: 83.7,
    evidence: '同岗位复测记录 RC-01'
  }]
}
const result = noisePlan(options)
// result.jobs[0].daily[0].lex8 = 91.963
// result.actions[0].changeDb = -8.263,closureValid = true

const exported = noiseExport(options)
const version = noiseVersion()

周结果需要完整周记录;上面单日接入例只用于说明字段,实际周计算应提供该岗位完整周的日记录。Android 真机需使用包含本插件的自定义基座,标准基座不含三方 UTS 插件。

API

函数 返回
noisePlan(options) 仪器证据、岗位日/周暴露、贡献、同工种、整改复测与问题清单
noiseExport(options) 计算并导出 噪声暴露整改审计.csv,返回路径与字节数
noiseVersion() 版本字符串,当前为 1.0.0

计算与导出统一返回 { ok, code, message, ... }。ok=true 表示输入已被处理,不等于证据有效或职业卫生合规;应同时检查 status、validForAssessment、evidence 和整改字段。基准日期非法或没有岗位时 ok=false。不可用的公开数值字段返回 null。

顶层与仪器字段

字段 约束
asOfDate 必填,严格 YYYY-MM-DD;核心层不读设备时钟
instrument.serial / certificateNo 必填,仪器和校准证书身份
instrument.validUntil 必填,证书有效期;早于 asOfDate 为 EXPIRED,任一工作测量日晚于有效期为 EXPIRED_ON_MEASURE_DATE
referenceDb 校准参考值,0–200 dB
preCalDb / postCalDb 测量前后校准读数,0–200 dB
toleranceDb 允差,大于 0 且不超过 5 dB;前后读数分别与参考值比较
dir 仅 noiseExport 使用;缺省为应用外部私有目录

岗位、日记录与分段

字段 约束
job.jobId 岗位唯一 ID,不可重复
job.workerGroup 同工种分组名称
job.contactCount 接触人数,1–1000000 的整数;同一 workerGroup 各岗位必须填同一组总人数,汇总只计一次,冲突为 invalid
job.daily 每岗位 1–31 条日记录
daily.dayId 岗位内唯一 ID
daily.date 严格 YYYY-MM-DD
daily.offDuty true 为显式非工作日,此时 segments 必须为空
daily.weekComplete 本周是否完整;同岗位所有工作日必须一致,全 false 为 incomplete,混用为 invalid,休息日忽略
segments.task 工序名称,用于能量贡献和主导工序
segments.laEq 分段等效声级,0–140 dBA
segments.hours 分段小时,大于 0;日合计 8–24 小时才可输出日值

整改字段与关闭规则

字段 约束
actionId 全局唯一整改 ID
jobId / measureDayId 必须关联已提供岗位及其原测量日记录
owner / dueDate 责任人和期限均必填
status OPEN / DONE / CLOSED
recheckDate 同岗位复测日期,不早于原测量日且不晚于 asOfDate
recheckLex8 复测 LEX,8h,0–140 dBA
evidence 复测记录或附件引用;CLOSED 时必填

只有 CLOSED 且关联有效、复测有效、证据非空、复测值低于 85 dBA 时,closureValid=true。否则 effectiveStatus=REOPEN。输出 originalLex8、recheckLex8、changeDb=复测−原值、residualOver85、overdueDays 与 issueCode。无效关闭即使登记为 CLOSED,也继续计入待整改和逾期判断。

主要输出

  • evidence:certificateStatus、preCalStatus、postCalStatus、前后偏差、measurementDayCount、uncoveredDate、valid。
  • jobs[].daily[]:能量、记录工时、LEX,8h、日剂量、状态、80/85 提示、主导工序。
  • jobs[]:周能量、LEX,40h、周剂量、排序指数、周状态、工序贡献数组。
  • groups[]:同工种人数、能量占比、LEX,40h、周剂量和排序指数。
  • actions[]:整改执行状态、复测前后变化、残余超限、关闭有效性与逾期。
  • issues[]:数据问题码、级别、对象与说明。

工程与隐私

  • core.uts 是纯逻辑层:无平台 import、无异常语句、无正则、无可选链,不读时钟、文件或网络。
  • Android 公开层只负责 UTSJSONObject 与嵌套数组转换;文件层只负责 CSV 落盘。
  • 无三方依赖,不申请系统权限,不采集麦克风,不采集、上传或记录业务数据。
  • 演示工程 Android 走真实插件;H5 仅展示由同一核心层预计算的 JSON,明确标注「示例数据 / H5 预览」,不代表插件支持 Web。

验证状态

  • Node 22 核心与公开 API 回归:280 项通过,0 项失败;含 94/93/90/80/85 手算、能量归一、跨日周、贡献、缺测/休息日、基准日有效但测量日过期、同工种人数冲突与不完整组汇总、重复 ID、非法日期、关闭门禁、残余超限与 CSV 转义。
  • 通用发布前校验:10 个发布文件全部通过(清单、价格、编码、权限、零依赖与敏感信息)。
  • UTS→Kotlin 真编译:已执行;cli launch app-android --compile true 编译成功,index.kt 1486 行,含 noiseOf / noiseAuditCsv 与测量日证书门禁符号。
  • Android 真机与设备端 CSV:未执行(ADB 无在线设备),不声称真机通过。
  • 市场截图:3 张 H5 真实渲染图,分别呈现仪器证据、岗位暴露/贡献、整改复测;已检查内容差异与页面完整性,不代表插件支持 Web。
  • 插件市场发布:本版本在门禁通过后提交,最终状态以公开页与交付发布清单为准。

购买前必读

仅支持 Android,最低 Android 6.0(minSdkVersion 23)。iOS、鸿蒙、小程序和 Web 均未实现。输入必须来自适用的测量仪器和真实记录;本插件不校验测量方案是否满足法规,不替代具备相应能力的职业卫生人员,不输出合规证书。请先用本厂仪器记录和整改流程完成验收。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无系统权限,不申请录音或存储权限。导出文件写到应用外部私有目录。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集、不上传任何数据,不访问网络,不写日志,不采集麦克风。仪器、岗位暴露与整改记录只在内存中计算;审计 CSV 由调用方主动导出,默认写应用外部私有目录。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。