['status' => 'pending', 'name' => '血糖血压记录详情', 'reason' => '按记录ID读取任意患者的血糖血压记录,无逐条权限校验(BloodRecordLogic::detail),现有校验函数只接受诊单ID;可改用 tcm.diagnosis/trackingWindow 按诊单查询'], 'tcm.bloodRecord/getBloodSugarTrend' => ['status' => 'open', 'kind' => 'detail', 'name' => '血糖趋势(按诊单)', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => ['days' => '最近天数,默认 7'], 'note' => 'id 为诊单ID;按天返回空腹/餐后2小时/其他血糖(每天取第一条有效值)'], 'tcm.bloodRecord/getRecordsByPatient' => ['status' => 'open', 'kind' => 'detail', 'name' => '血糖血压记录(按诊单)', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => [], 'note' => 'id 为诊单ID;返回该诊单全部血糖血压记录(按日期倒序)'], 'tcm.dietRecord/detail' => ['status' => 'pending', 'name' => '饮食记录详情', 'reason' => '按记录ID读取任意患者的饮食记录,无逐条权限校验(DietRecordLogic::detail);可改用 tcm.diagnosis/trackingWindow 按诊单查询'], 'tcm.dietRecord/getRecordsByPatient' => ['status' => 'open', 'kind' => 'detail', 'name' => '饮食记录(按诊单)', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => [], 'note' => 'id 为诊单ID'], 'tcm.exerciseRecord/detail' => ['status' => 'pending', 'name' => '运动记录详情', 'reason' => '按记录ID读取任意患者的运动记录,无逐条权限校验(ExerciseRecordLogic::detail);可改用 tcm.diagnosis/trackingWindow 按诊单查询'], 'tcm.exerciseRecord/getExerciseTrend' => ['status' => 'open', 'kind' => 'detail', 'name' => '运动时长趋势(按诊单)', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => ['start_date' => '开始日期 YYYY-MM-DD(与 end_date 同时传)', 'end_date' => '结束日期 YYYY-MM-DD', 'days' => '不传日期时取最近天数,默认 7'], 'note' => 'id 为诊单ID'], 'tcm.exerciseRecord/getRecordsByPatient' => ['status' => 'open', 'kind' => 'detail', 'name' => '运动记录(按诊单)', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => [], 'note' => 'id 为诊单ID'], // ───────────── 诊单 ───────────── 'tcm.diagnosis/lists' => ['status' => 'open', 'kind' => 'list', 'params_allow' => [ 'keyword' => '患者姓名或手机号(模糊)', 'patient_name' => '患者姓名(模糊)', 'patient_id' => '患者ID(诊单 patient_id)', 'gender' => '性别 1男 0女', 'diagnosis_type' => '诊断类型(字典值)', 'syndrome_type' => '证型(字典值)', 'status' => '诊单状态 1启用 0禁用', 'assistant_id' => '医助(后台账号)ID', 'assistant_dept_id' => '医助所属部门ID(含下级部门)', 'start_time' => '诊断日期起(须与 end_time 同时传)', 'end_time' => '诊断日期止', 'diagnosis_confirmed' => '是否已确认诊单 1是 0否', 'appointment_date' => '挂号日期 YYYY-MM-DD', 'has_appointment' => '是否有有效挂号 1是 0否', 'completed_appointment' => '传 1 只看有已完成挂号的诊单', 'only_has_prescription' => '传 1 只看已开方的诊单', 'latest_appointment_start_date' => '最近一次挂号日期起 YYYY-MM-DD', 'latest_appointment_end_date' => '最近一次挂号日期止 YYYY-MM-DD', 'latest_appointment_channel_source' => '最近一次挂号的渠道来源(字典值)', 'latest_assign_start_date' => '最近一次指派医助日期起 YYYY-MM-DD', 'latest_assign_end_date' => '最近一次指派医助日期止 YYYY-MM-DD', 'sort_unserved_days' => '按未服务天数排序 asc/desc', ], // pending_assign=1(全局禁用)会跳过医助本人过滤和数据范围,配合关键词可按姓名/手机/身份证全库检索(DiagnosisLists:76-98、929-1014) 'forbid' => ['pending_assign', 'pending_assign_keyword', 'pending_assign_order_month'], 'note' => '医助角色只看本人诊单,其余按数据范围(诊单医助 ∈ 可见账号);不含「待分配医助」视图'], // 编辑页详情:控制器会顺手 markAssignRead 写库,改为直接调 DiagnosisLogic::detail(只读),并用列表同口径校验逐条可见 'tcm.diagnosis/detail' => ['status' => 'open', 'kind' => 'detail', 'name' => '诊单详情', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'args' => ['id', 'admin_id', 'admin_info']], 'handler' => ['logic' => [DiagnosisLogic::class, 'detail'], 'args' => ['params', 'admin_info'], 'validate' => [DiagnosisValidate::class, 'id'], 'error' => [DiagnosisLogic::class, 'getError']], 'params_allow' => [], 'note' => '后台原接口无逐条校验,这里补上与诊单列表一致的可见性校验'], // builtin:DiagnosisLogic::readonlyDetail(DiagnosisLogic.php:4241)先调 canViewReadonlyDiagnosis(:4251/:4301); // 控制器会顺手 markAssignRead 写库,故改为直接调 Logic 'tcm.diagnosis/readonlyDetail' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'handler' => ['logic' => [DiagnosisLogic::class, 'readonlyDetail'], 'args' => ['params', 'admin_id', 'admin_info'], 'validate' => [DiagnosisValidate::class, 'readonlyDetail'], 'error' => [DiagnosisLogic::class, 'getError']], 'params_allow' => [], 'note' => '返回最近挂号、诊单病例、医生备注、跟踪备注、未服务天数'], // builtin:DiagnosisController::trackingWindow(controller/tcm/DiagnosisController.php:175)先调 canViewReadonlyDiagnosis; // 权限点沿用控制器注释写明的 tcm.diagnosis/readonlyDetail(trackingWindow 本身未在菜单登记) 'tcm.diagnosis/trackingWindow' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'perm' => 'tcm.diagnosis/readonlyDetail', 'name' => '诊单跟踪记录(血糖血压/饮食/运动)', 'params_allow' => ['start_date' => '开始日期 YYYY-MM-DD', 'end_date' => '结束日期 YYYY-MM-DD'], 'note' => 'id 为诊单ID;不传日期返回全部记录,建议按日期区间查询'], 'tcm.diagnosis/trackingNotes' => ['status' => 'open', 'kind' => 'detail', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => [], 'note' => 'id 为诊单ID;最近 60 条跟踪备注(按天合并,每天一条)'], 'tcm.diagnosis/guahaoLogList' => ['status' => 'open', 'kind' => 'detail', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => [], 'note' => 'id 为诊单ID;挂号/取消挂号操作日志(最多 200 条)'], 'tcm.diagnosis/getCallRecords' => ['status' => 'open', 'kind' => 'detail', 'name' => '诊单通话记录(含录音与转写)', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => [], 'note' => 'id 为诊单ID;录音/录像地址按附件处理,transcript_text 为通话转写全文'], // builtin:DiagnosisController::getImChatMessages(DiagnosisController.php:453)先调 canViewReadonlyDiagnosis,诊单ID已转 int; // only_archived=1 只读本地归档,不调用腾讯 IM、不写库。不设为 detail:zyt_file 走详情分支时不带 force 'tcm.diagnosis/getImChatMessages' => ['status' => 'open', 'kind' => 'report', 'guard' => 'builtin', 'name' => '诊单 IM 聊天记录(已归档)', 'params_allow' => ['diagnosis_id' => '诊单ID(必填)'], 'force' => ['only_archived' => 1], 'note' => '只返回已归档到本地的患者与医生/医助 IM 消息(同一患者的历次诊单合并)'], 'tcm.diagnosis/getWechatChatRecords' => ['status' => 'open', 'kind' => 'detail', 'name' => '企业微信聊天记录(按诊单)', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => ['page_no' => '页码,每页 20 条'], 'forbid' => ['patient_id', 'page_size'], 'note' => 'id 为诊单ID;按聊天时间倒序'], 'tcm.diagnosis/aiPatientOptions' => ['status' => 'open', 'kind' => 'list', // builtin:DiagnosisAiLogic::patientOptions(logic/tcm/DiagnosisAiLogic.php:150)校验 tcm.diagnosis/aiAssistant 权限并按 MyPatientLogic::applyScope 收窄 'params_allow' => ['keyword' => '患者姓名、手机号或诊单ID/患者ID'], 'note' => '「我的患者」范围内的启用诊单;还需要 tcm.diagnosis/aiAssistant 权限;手机号已脱敏,每页最多 50 条'], // builtin:DiagnosisAiLogic::getSavedReports(DiagnosisAiLogic.php:275)→ loadAuthorizedDiagnosis(:1151)校验 tcm.diagnosis/aiReports 权限 + MyPatientLogic::canAccessDiagnosis 'tcm.diagnosis/aiReports' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'name' => '诊单 AI 报告(已保存)', 'params_allow' => [], 'note' => 'id 为诊单ID;只读已保存的报告,不触发模型调用;case_summary 为患者纵向资料摘要,内容较长'], // builtin:PatientAiReportLogic::reports(logic/tcm/PatientAiReportLogic.php:130)→ loadAuthorizedDiagnoses(:349)校验权限 + MyPatientLogic::applyScope 'tcm.diagnosis/patientAiReports' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'id_param' => 'patient_id', 'params_allow' => [], 'note' => 'id 为患者ID(诊单 patient_id);只读历史报告快照,不触发模型调用'], 'tcm.diagnosis/assistantDiagnosisStats' => ['status' => 'open', 'kind' => 'report', 'name' => '医助诊单统计(按部门/按人)', 'params_allow' => ['days' => '最近天数(1-90,默认 7;0 表示今天)', 'start_time' => '开始时间 YYYY-MM-DD HH:mm:ss', 'end_time' => '结束时间 YYYY-MM-DD HH:mm:ss'], 'note' => '按诊单创建时间统计各医助新建诊单数,只含当前账号数据范围内的医助'], 'tcm.diagnosis/getAssistants' => ['status' => 'open', 'kind' => 'report', 'name' => '医助名单', 'params_allow' => [], 'note' => '按当前账号数据范围返回在职医助(ID、姓名、登录账号、部门),可用于把姓名换成 assistant_id'], 'tcm.diagnosis/getDoctors' => ['status' => 'open', 'kind' => 'report', 'name' => '医生名单', 'params_allow' => [], 'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到全部(在职医生 ID、姓名、登录账号)'], 'tcm.diagnosis/searchPatient' => ['status' => 'pending', 'name' => '全库搜索患者', 'reason' => '按姓名/手机号/身份证号在全部诊单中模糊搜索并返回手机号、身份证号,不按数据范围过滤,且未登记权限点(DiagnosisController::searchPatient);需改为按数据范围检索,可用 tcm.diagnosis/lists 的 keyword 替代'], 'tcm.diagnosis/getWechatExternalContact' => ['status' => 'pending', 'name' => '患者企微外部联系人', 'reason' => '调用企业微信会话存档接口(外部调用),且按 patient_id 可取任意患者姓名、手机号、external_userid,无逐条权限校验(DiagnosisLogic::getWechatExternalContact)'], 'tcm.diagnosis/getMsgAuditPermitUsers' => ['status' => 'excluded', 'name' => '企微会话存档成员', 'reason' => '企业微信会话存档配置信息(开启存档的成员),需调用企业微信接口,不属于业务数据'], 'tcm.diagnosis/diagnosisDetail' => ['status' => 'excluded', 'name' => '诊单详情(患者端)', 'reason' => '患者端接口:只比对请求里的 user_id 与诊单 patient_id,不是后台账号的数据权限校验;后台请用 tcm.diagnosis/readonlyDetail'], 'tcm.diagnosis/getDoctorSignature' => ['status' => 'excluded', 'name' => '医助通话签名', 'reason' => '为任意 doctor_{ID} 生成 TRTC/IM UserSig(凭据)并调用腾讯 IM,不对 AI 开放'], 'tcm.diagnosis/getPatientSignature' => ['status' => 'excluded', 'name' => '患者通话签名', 'reason' => '为任意患者生成 TRTC/IM UserSig(凭据)并调用腾讯 IM,不对 AI 开放'], 'tcm.diagnosis/watchCall' => ['status' => 'excluded', 'reason' => '返回旁观视频通话的 TRTC 进房参数与 UserSig(凭据),并调用腾讯 IM,不对 AI 开放'], 'tcm.diagnosis/test' => ['status' => 'excluded', 'name' => '诊单测试接口', 'reason' => '测试接口'], // ───────────── 诊单待办 ───────────── 'tcm.diagnosisTodo/lists' => ['status' => 'open', 'kind' => 'list', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => ['diagnosis_id' => '诊单ID(必填)', 'status' => '状态 0待执行 1已发送 2已取消 3发送失败', 'creator_id' => '创建人ID'], 'note' => '后台列表只按诊单ID过滤、不校验诊单归属,这里补上诊单可见性校验'], 'tcm.diagnosisTodo/detail' => ['status' => 'pending', 'name' => '诊单待办详情', 'reason' => '按待办ID读取任意诊单的待办,无逐条权限校验(DiagnosisTodoLogic::detail);可改用 tcm.diagnosisTodo/lists(按诊单ID,已校验诊单可见)'], // ───────────── 处方 ───────────── 'tcm.prescription/lists' => ['status' => 'open', 'kind' => 'list', 'params_allow' => ['patient_name' => '患者姓名(模糊)', 'sn' => '处方编号(模糊)', 'start_time' => '创建时间起(须与 end_time 同时传)', 'end_time' => '创建时间止', 'creator_ids' => '开方医生ID,多个用逗号分隔', 'audit_filter' => '审核:passed 已通过 / not_passed 未通过 / pending 待审 / rejected 驳回', 'source_filter' => '来源:system 系统代开 / manual 手工开方'], 'note' => '非全量角色只看共享、本人开具、本人为医助或指定给本人角色的处方,并叠加数据范围(开方人/医助)'], 'tcm.prescription/detail' => ['status' => 'pending', 'reason' => 'PrescriptionLogic::canViewPrescription(:83-139)对 order_edit_all_roles 角色及任何拥有 tcm.prescriptionOrder/detail 权限的账号放行全部处方,不受数据范围限制,比处方列表宽;可改用 tcm.prescription/listByDiagnosis'], 'tcm.prescription/getByAppointment' => ['status' => 'pending', 'name' => '按挂号取处方', 'reason' => '按挂号ID取处方只做 canViewPrescription 校验(同 tcm.prescription/detail,全量角色和业务订单详情权限可看任意处方);可改用 tcm.prescription/listByDiagnosis'], // builtin:PrescriptionLogic::listByDiagnosis(logic/tcm/PrescriptionLogic.php:1046)先调 canViewReadonlyDiagnosis(:1049),再逐条 canViewPrescription 过滤(:1061) 'tcm.prescription/listByDiagnosis' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'id_param' => 'diagnosis_id', 'name' => '诊单处方列表', 'params_allow' => [], 'note' => 'id 为诊单ID;返回该诊单下当前账号可见的全部处方(含作废)'], // ───────────── 处方 AI 分析(控制器拒绝未知参数,并按 PrescriptionAiAccess 重新校验账号与数据范围) ───────────── // builtin:PrescriptionAiLogic::detail(logic/tcm/PrescriptionAiLogic.php:105)→ loadBatch/visibleBatch(:345/:354):处方可见 + 诊单“我的患者”范围 + 来源快照授权 'tcm.prescriptionAi/detail' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'id_param' => 'batch_id', 'params_allow' => [], 'note' => 'id 为分析批次 batch_id(来自处方AI历史/状态);含各模型报告正文与复核意见'], // builtin:PrescriptionAiLogic::reports(:60)按 Access::prescription / Access::diagnosis 校验,并逐条 visibleBatch 过滤后再分页 'tcm.prescriptionAi/reports' => ['status' => 'open', 'kind' => 'report', 'params_allow' => ['prescription_id' => '处方ID(与 diagnosis_id 二选一)', 'diagnosis_id' => '诊单ID(与 prescription_id 二选一)', 'page_no' => '页码', 'page_size' => '每页条数,最多 50'], 'note' => '历次处方 AI 分析批次(摘要,不含报告正文;正文用 tcm.prescriptionAi/detail)'], // builtin:PrescriptionAiLogic::statuses(:20)逐个 Access::prescription + visibleBatch 'tcm.prescriptionAi/statuses' => ['status' => 'open', 'kind' => 'report', 'params_allow' => ['ids' => '处方ID数组(或逗号分隔),最多 100 个'], 'note' => '无权查看的处方不会出现在结果中'], // builtin:PrescriptionAiLogic::statistics(:204)逐批 visibleBatch 过滤 'tcm.prescriptionAi/statistics' => ['status' => 'open', 'kind' => 'report', 'params_allow' => ['date_from' => '开始日期 YYYY-MM-DD(默认 30 天前)', 'date_to' => '结束日期 YYYY-MM-DD(跨度不超过一年)', 'doctor_id' => '医生ID'], 'note' => '按医生统计处方 AI 药味与剂量一致度(不代表临床准确率),只计当前账号可见的批次'], // ───────────── 处方库(协定方模板,非患者数据) ───────────── 'tcm.prescriptionLibrary/lists' => ['status' => 'open', 'kind' => 'list', 'name' => '处方库列表', 'params_allow' => ['prescription_name' => '处方名称(模糊)', 'is_public' => '是否公开 1是 0否', 'creator_id' => '创建人ID', 'formula_type' => '主方 / 辅方'], // prescribing_creator_id:开方页导入专用,可读取指定医生的非公开处方(PrescriptionLibraryLists:37-44) 'forbid' => ['prescribing_creator_id'], 'note' => '管理角色看全部;其余账号看本人创建和公开的处方'], // builtin:PrescriptionLibraryLogic::detail(logic/tcm/PrescriptionLibraryLogic.php:192,校验在 :200):本人创建、公开或管理角色 'tcm.prescriptionLibrary/detail' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'name' => '处方库详情', 'params_allow' => []], // builtin:PrescriptionLibraryAiLogic::getSavedReports(logic/tcm/PrescriptionLibraryAiLogic.php:60)→ loadAuthorizedPrescription(:371)校验权限 + PrescriptionLibraryLogic::detail 'tcm.prescriptionLibrary/aiReports' => ['status' => 'open', 'kind' => 'detail', 'guard' => 'builtin', 'name' => '处方库 AI 解释', 'params_allow' => [], 'note' => 'id 为处方库ID;只读已保存的解释,不触发模型调用'], // builtin:PrescriptionLibraryAiLogic::getMissingReports(:83)校验权限,并按本人/公开/管理角色收窄(:103-108) 'tcm.prescriptionLibrary/missingAiReports' => ['status' => 'open', 'kind' => 'report', 'name' => '处方库待生成 AI 解释清单', 'params_allow' => ['limit' => '返回条数 1-500,默认 500']], // ───────────── 处方业务订单 ───────────── 'tcm.prescriptionOrder/lists' => ['status' => 'open', 'kind' => 'list', 'params_allow' => [ 'order_no' => '业务订单号(模糊)', 'prescription_id' => '处方ID', 'diagnosis_id' => '诊单ID', 'patient_id' => '患者ID(诊单 patient_id,跨诊单)', 'patient_keyword' => '患者姓名或手机号(模糊)', 'fulfillment_status' => '履约状态 1待双审通过 2待发货 3已完成 4已取消 5已发货 6已签收 7进行中 8暂不制药 9拒收 10退款 11保留药方 12制药缓发', 'prescription_audit_status' => '处方审核 0待审核 1通过 2驳回', 'payment_slip_audit_status' => '支付单审核 0待审核 1通过 2驳回', 'start_time' => '创建时间起 YYYY-MM-DD HH:mm:ss(也是 extend 金额统计区间,不传为今天)', 'end_time' => '创建时间止 YYYY-MM-DD HH:mm:ss', 'doctor_id' => '开方医生ID', 'assistant_id' => '订单创建人(医助)ID,仅数据范围内有效', 'assistant_dept_id' => '订单创建人所属部门ID(含下级部门)', 'audit_admin_id' => '审核人(下单角色)ID', 'audit_admin_keyword' => '审核人姓名(模糊)', 'express_company' => '快递公司 sf 顺丰 / jd 京东', 'express_keyword' => '快递单号或快递公司(模糊)', 'service_channel' => '服务渠道(0 表示未指派)', 'supply_mode' => '供货方式 gancao 甘草 / direct 洛阳直发 / self 自营', 'has_aux_formula' => '是否含辅方 1是 0否', 'exclude_fulfillment_cancelled' => '传 1 剔除已取消/拒收/退款订单', ], // scene=diagnosis_edit(全局禁用)+ patient_id + context_diagnosis_id 会跳过创建人可见性和数据范围(PrescriptionOrderLists:121-127、464-482); // yeji_* 业绩看板侧栏参数会跳过「仅本人订单」(:487-526、1326-1359) 'forbid' => ['scene', 'context_diagnosis_id', 'yeji_order_drawer', 'yeji_drawer_match_table_performance', 'yeji_er_center_revisit_only', 'yeji_er_center_revisit_slot', 'yeji_table_row_dept_ids', 'dept_ids', 'channel_code', 'create_time'], 'note' => '非全量角色默认只看本人创建的订单(有「查看本人开方订单」权限时含本人开方的订单),再叠加数据范围;extend.stats_* 为列表顶部金额统计(口径见 stats_scope);内部成本仅财务角色可见'], 'tcm.prescriptionOrder/detail' => ['status' => 'pending', 'reason' => 'PrescriptionOrderLogic::canAccessOrder(:377-398)对拥有任一 tcm.prescriptionOrder/* 权限的账号直接放行(hasPrescriptionOrderMenuAccess),全量角色也不受数据范围限制,可读取列表范围外的任意订单;需补充与列表一致的逐条校验'], 'tcm.prescriptionOrder/logs' => ['status' => 'pending', 'reason' => '逐条校验同 canAccessOrder:拥有任一业务订单权限即可读取任意订单的操作日志;需补充与列表一致的逐条校验'], 'tcm.prescriptionOrder/logisticsTrace' => ['status' => 'pending', 'reason' => '本地无轨迹时调用快递100接口(外部调用,无参数可限定只读本地缓存),且逐条校验同 canAccessOrder(任一业务订单权限即放行);物流请用专用工具 zyt_logistics_order / zyt_logistics_patient(按订单列表的可见范围找订单,读已同步轨迹,按需限次实时查询)'], 'tcm.prescriptionOrder/export' => ['status' => 'excluded', 'reason' => '导出文件接口;查询请用 tcm.prescriptionOrder/lists'], // builtin 归属规则:OrderLogic::listPaidOrdersForDiagnosis(logic/order/OrderLogic.php:1303,:1317-1322)非全量角色且非该诊单医助时只返回本人创建的收款单; // 后台原接口不校验诊单归属,这里补上诊单可见性校验 'tcm.prescriptionOrder/paidPayOrders' => ['status' => 'open', 'kind' => 'detail', 'guard' => ['callable' => [DiagnosisLogic::class, 'canViewReadonlyDiagnosis'], 'param' => 'diagnosis_id', 'args' => ['id', 'admin_id', 'admin_info']], 'params_allow' => ['prescription_order_id' => '编辑中的业务订单ID(其已关联的收款单也列出)'], 'note' => 'id 为诊单ID;该诊单下已支付、尚未被其他业务订单占用的收款单(2026-04-20 之后创建)'], ];