217 lines
25 KiB
PHP
217 lines
25 KiB
PHP
<?php
|
||
/**
|
||
* AI 数据目录人工审核:中医诊单与处方(tcm.*)的全部非写、非 POST 接口(51 个)。
|
||
*
|
||
* 约定:
|
||
* - 按诊单/患者/记录ID取数的接口一律按「详情」调用(kind=detail):zyt_get 会把 ID 固定为单个值,
|
||
* 避免数组参数与逐条校验不一致;
|
||
* - 诊单级逐条校验复用 DiagnosisLogic::canViewReadonlyDiagnosis(logic/tcm/DiagnosisLogic.php:4301),
|
||
* 与诊单列表同口径:医助角色仅本人诊单,其余按数据范围(诊单医助 ∈ 可见账号);
|
||
* - 'builtin' 表示接口自身已有逐条校验,函数写在各条目上方注释里。
|
||
*/
|
||
|
||
use app\adminapi\logic\tcm\DiagnosisLogic;
|
||
use app\adminapi\validate\tcm\DiagnosisValidate;
|
||
|
||
return [
|
||
// ───────────── 血糖血压 / 饮食 / 运动记录 ─────────────
|
||
'tcm.bloodRecord/detail' => ['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(任一业务订单权限即放行)'],
|
||
'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 之后创建)'],
|
||
];
|