This commit is contained in:
gr
2026-10-15 11:03:54 +08:00
parent 70ddc1a70a
commit bb28d93cec
64 changed files with 12747 additions and 420 deletions
+23 -6
View File
@@ -18,8 +18,12 @@
* 子接口自身已登记时仍按自身判断(与后台一致);未登记时依次改用 Tab 权限(tabLeaderboard/tabDoctor/tabZyyt…)
* 或页面权限 fans/yeji ——后台对未登记接口不校验、只靠这些权限控制页面可见,这样不会比后台页面更宽。
* - timeout:业绩看板、医生统计、提成结算、综合转化是多张大表的聚合(后台控制器自己放宽到 120 秒),单条 SQL 超时放宽到 30 秒。
* - controller:晚于 generated.php 生成的 action(如 stats.assistantPerformance/revisitRate)显式写 controller 以通过 AiMcpUnitTest 的
* 资源存在性校验;重跑 catalog.php --write 后可去掉该键。
*/
use app\adminapi\controller\stats\AssistantPerformanceController;
$dateRange = [
'start_date' => '开始日期 YYYY-MM-DD(不传默认今天)',
'end_date' => '结束日期 YYYY-MM-DD(不传同开始日期)',
@@ -43,9 +47,18 @@ return [
],
],
'stats.assistantPerformance/revisitRate' => [
'status' => 'open', 'kind' => 'report', 'name' => '医助个人业绩 · 我的复诊接诊率',
'controller' => AssistantPerformanceController::class, 'http' => 'GET',
'note' => '仅返回当前账号本人的复诊接诊率行(RevisitRateLogic::assistantOverview:从 stats.revisitRate/overview 全量结果中按本人 assistant_id 挑出一行,不含其他医助、不含部门/合计行),口径与复诊接诊率页一致(inherit_mode 固定取配置 project.revisit_rate.default_inherit_mode,默认 slot=继承患者按继承时诊次从第 k+1 诊起计入分母)。row 字段:assigned_count 新指派数、inherit_count 继承数、assigned_total_count 被指派合计、visit{N}_count/_den/_rate 各诊次单数/分母/接诊率(den=0 为 null)、visit_all_count/_den/_rate 复诊合计(可超 100%);slots 为诊次列范围。本人非二中心医助(in_scope=false)或当月无任何被指派/成交(in_scope=true)时 row=null。结果缓存 600 秒。',
'params_allow' => [
'month' => '统计月份 YYYY-MM(默认本月)',
],
],
'stats.autoAssignLog/lists' => [
'status' => 'open', 'kind' => 'list', 'name' => '待分配诊单自动指派日志',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到全部自动指派日志(含患者姓名、手机号快照)。数据由定时任务 tcm:auto-assign-pending 写入,每条待指派诊单一行;action 1=已分配、0=未分配,tier 为医助上月二诊复诊接诊率档位(gt70/60_70/50_60),reason 为分配或不分配原因。',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到全部自动指派日志(含患者姓名、手机号快照)。数据由定时任务 tcm:auto-assign-pending 写入,每条待指派诊单一行;action 1=已分配、0=未分配,tier 为医助上月二诊复诊接诊率档位(gt70/60_70/50_60),reason 为分配或不分配原因。口径:visit2_rate=新口径(inherit_mode=slot,分母=新指派+起算诊次≤2 的继承)、visit2_rate_new_assign=旧口径(分母仅新指派)、rate_version=本批次分档所用口径(v1=旧 v2=新,由配置 project.revisit_rate.auto_assign_tier_field 决定;2026-10 前的历史行无 visit2_rate_new_assign、rate_version=v1 且 visit2_rate 即旧口径)。',
'params_allow' => [
'run_date' => '执行日期 YYYY-MM-DD(精确匹配)',
'start_date' => '执行日期起 YYYY-MM-DD',
@@ -172,39 +185,43 @@ return [
'stats.revisitRate/assignLines' => [
'status' => 'open', 'kind' => 'report', 'name' => '复诊接诊率 · 被指派明细',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到二中心全部医助当月被指派的诊单(含患者姓名、手机号)。口径:按指派操作时间落月、非继承指派、医助×诊单去重,剔除名下有拒收/退款订单的诊单;仅统计二中心及其下级部门。不传 assistant_id/dept_id 时返回全部。',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到二中心全部医助当月被指派的诊单(含患者姓名、手机号)。口径:按指派操作时间落月、医助×诊单去重,剔除名下有拒收/退款订单的诊单;仅统计二中心及其下级部门。行字段 assign_type=new(新指派,is_inherit=0)/inherit(继承,is_inherit=1,含历史回退自动分配行),inherit_visit_slot=继承时患者已完成诊次 k,entry_slot=起算诊次(max(2,k+1);新指派恒为 2)。部门/合计范围下诊单对任一医助为新指派即记 new,否则记 inherit 且 entry 取最小,故 kind=all 的「new 行数 + entry<=N 的 inherit 行数」= 复诊接诊率 visit{N}_den。inherit_mode=exclude 时只有 new 行(旧口径)。不传 assistant_id/dept_id 时返回全部。',
'params_allow' => [
'month' => '统计月份 YYYY-MM(默认本月)',
'dept_ids' => '部门筛选(限二中心子树),多个逗号分隔',
'assistant_id' => '只看某医助',
'dept_id' => '只看某部门分组(0=未分配部门)',
'inherit_mode' => '口径:slot=继承按继承时诊次计入分母(默认,配置 project.revisit_rate.default_inherit_mode)/ exclude=继承不计分母(旧口径,与 2026-10 前一致)',
'kind' => '行类型:new 仅新指派 / inherit 仅继承 / all 两者(默认 all)',
],
],
'stats.revisitRate/deptOptions' => [
'status' => 'open', 'kind' => 'report', 'name' => '复诊接诊率 · 部门选项',
'note' => '二中心及其下级部门(id、pid、name),供 dept_ids 参数取值。',
'note' => '二中心及其下级部门(id、pid、name),供 revisitRate 各接口 dept_ids 参数取值;不受 inherit_mode 影响。',
'params_allow' => [],
],
'stats.revisitRate/overview' => [
'status' => 'open', 'kind' => 'report', 'name' => '复诊接诊率',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到二中心全部医助的数据。口径:当月被指派数=当月非继承指派的医助×诊单(剔除名下有拒收/退款订单的诊单);N 诊单数=当月下单且为该诊单全局第 N 笔计入业绩的业务订单(剔除取消/拒收/退款,诊次跨月累计),归属下单时的持有医助;N 诊接诊率=N 诊单数÷当月被指派数(往月指派当月成交会使比率超过 100%)。按部门→医助分组并有合计行。',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到二中心全部医助的数据。口径 v2(每列独立分母):assigned_count=新指派数(当月 is_inherit=0 的医助×诊单,剔除名下有拒收/退款订单的诊单,语义与旧版「当月被指派数」相同);inherit_count=继承数(当月 is_inherit=1、from≠to,同诊单多次继承取最早,既新指派又继承只算新指派;含历史回退自动分配行);assigned_total_count=两者并集;visit{N}_count=当月下单且为该诊单全局第 N 笔计入业绩的业务订单(剔除取消/拒收/退款,诊次跨月累计),归属下单时的持有医助;visit{N}_den=新指派数+起算诊次≤N 的继承数(起算诊次=继承时已完成诊次+1,最小 2);visit{N}_rate=count÷den(den=0 为 null;往月指派当月成交会使比率超过 100%);visit_all_count=Σ visit{N}_count、visit_all_den=assigned_total_count、visit_all_rate=复诊合计接诊率(可超 100%);visit2_rate_new_assign=旧口径二诊率(分母仅新指派,自动分配过渡期分档用)。slots 为列范围(2~max(4,分子最大诊次,最大起算诊次),上限 50)。inherit_mode=exclude 复现旧口径:inherit_count=0、visit{N}_den=assigned_count,assigned_count/visit{N}_count/visit{N}_rate 与 2026-10 前逐值一致。继承分母依赖 is_inherit 列,2026-06 之前的继承无法回溯。按部门→医助分组并有合计行(部门/合计按诊单去重,继承起算诊次取部门内最小)。',
'params_allow' => [
'month' => '统计月份 YYYY-MM(默认本月)',
'dept_ids' => '部门筛选(限二中心子树,含下级),多个逗号分隔',
'inherit_mode' => '口径:slot=继承按继承时诊次计入每列独立分母(默认,配置 project.revisit_rate.default_inherit_mode)/ exclude=继承不计分母(旧口径)',
],
],
'stats.revisitRate/visitOrderLines' => [
'status' => 'open', 'kind' => 'report', 'name' => '复诊接诊率 · N 诊订单明细',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到二中心全部医助的 N 诊订单(含订单号、金额、患者姓名、手机号)。与复诊接诊率“N 诊单数”同口径,可对账。',
'note' => '后台本身不按数据范围过滤:拥有该权限的账号可看到二中心全部医助的 N 诊订单(含订单号、金额、患者姓名、手机号)。与复诊接诊率“N 诊单数”(visit{N}_count) 同口径,可对账;slot=0 返回全部 N>=2 的订单,与「复诊合计单数」(visit_all_count) 对账,行字段 visit_slot 标明诊次。分子不受 inherit_mode 影响。',
'params_allow' => [
'month' => '统计月份 YYYY-MM(默认本月)',
'slot' => '诊次 N(必填,2=二诊,最大 50)',
'slot' => '诊次 N(必填,2=二诊,最大 50;0=全部 N>=2 即复诊合计)',
'dept_ids' => '部门筛选(限二中心子树),多个逗号分隔',
'assistant_id' => '只看某医助',
'dept_id' => '只看某部门分组(0=未分配部门)',
'inherit_mode' => '口径 slot|exclude(仅影响医助范围判定,不影响订单归属)',
],
],