Files
mileage-bonus/docs/里程绩效原型_API对接.md
shishengliang 65904c8270 feat: add assessment workbench and September reconciliation
Preserve August hydrogen revision and September audit evidence; calculate interrupted vehicle history across all prior months. Record remaining carry-policy and layout-baseline discrepancies.
2026-10-09 18:21:45 +08:00

5.2 KiB
Raw Permalink Blame History

里程绩效:原型与 API 对接

页面与业务流程

月度核算展示本次批次的考核明细;异常核对定位缺少里程、来源冲突、交车区间重叠;详情按车牌和租赁记录追溯到每日来源及原始行。数据接入接收租赁区间和三类里程长表。规则中心明确参与车辆、有效期、测试候选、来源提供方优先级。API 对接页面展示真实接口状态与契约。

演示数据完全虚构。真实模式与演示模式不混用结果。当前只提供试算,不模拟已审批或已发放。

已接通的本机接口

前端相对路径 /api,开发代理转发 http://127.0.0.1:8765 并移除 /api。JSON 返回 UTF-8;错误体 { "error": "说明" }。状态码 200/201 成功、400 请求错误、404 快照不存在、409 有异常禁止导出。

方法 路径 请求与结果
GET /health 服务状态、引擎 version
POST /imports/leases 原始 xlsx 二进制;返回 id、raw_rows、accepted_rows、issues
POST /imports/mileage?source=hydrogen&provider=guangzhou 原始 xlsx;source 支持 hydrogen/tbox/gps,provider 需与规则对应
GET /imports/{id} 标准化导入快照、行和错误
POST /assessments 下方请求;返回 id/status/summary/issues
GET /assessments/{id} records、daily_trace、issues、excluded、inputs、engine_version
GET /assessments/{id}/export.xlsx ready 时导出业务考核源表;异常返回 409
{
  "lease_import_id": "导入返回的64位ID",
  "mileage_import_ids": ["里程导入ID"],
  "config": {
    "month": "2026-08",
    "test_plates": [],
    "test_threshold_km": 50,
    "source_priority": {
      "hydrogen": ["guangzhou"],
      "tbox": ["vehicle-platform"],
      "gps": ["g7", "dongfang", "xinda", "guangan"]
    },
    "rules": [{
      "plate": "DEMO-001", "target_id": 1,
      "target_name": "交投40辆4.5T普货", "monthly_target_km": 3000,
      "valid_from": "2026-08-01", "valid_to": "2026-08-31"
    }]
  }
}

文件最大 20 MB,解压后最大 200 MB,表头必须在前十行。里程表必填 plate_number,date,mileage_km(日里程,km)。租赁表字段:vehicle_id,plate_number,contract_id,contract_code,project_name,customer_name,business_department_name,business_manager_name,delivery_vehicle_id,delivery_time,return_vehicle_task_id,return_time。未还车可留空最后两项。里程空值不可当零;合法零必须保留。来源提供方顺序用于按日补缺,不能叠加多个 GPS 提供方。

ID 为内容哈希,同输入生成相同快照标识。调用方应保存 ID 并随批次保存输入、规则和引擎版本;重新补数生成新批次,不覆盖旧批次。

最新规则与旧 API 的明确差异

依据项目 8 月说明顶部的当前口径:非测试日有纯氢(含 0)取纯氢,无纯氢取仪表;测试日取 GPS;测试候选日无法判定且无纯氢时兜底 GPS。现有 API 则按区间选来源并对测试日清零,不能直接固化为正式规则。规则中心的 JSON 参数只能配置现有引擎支持项,不能靠改参数完成算法迁移。

最新四名离职人员为全部奖金剔除,不发放不转交。历史说明存在被覆盖的停发、转接口径,应采用带生效月份和批准记录的规则版本。结转、累计补发、历史有效奖励和归属分段需从 calc_engine.py 与最新计算入口抽离;不能以简单完成率乘奖金替代。

后续系统设计(建议契约,尚未实现)

建议实体:source_snapshot、lease_segment、daily_mileage、rule_version、assessment_batch、assessment_record、bonus_ledger、review_event。逐日依据关联来源行;奖金账本以车辆、负责人、政策有效期和所属月份为粒度,金额使用整数分或 Decimal。

建议新增接口:

  • POST /v1/sync-jobs:按月份从车辆平台、租赁系统及 GPS 拉取快照,返回 job_id;通过 GET /v1/jobs/{id} 查询进度与失败原因。
  • GET/POST /v1/rule-versions:草稿规则、版本、生效期和审批记录。
  • POST /v1/assessment-batches:固定输入快照 ID、规则版本 ID、历史账本版本,异步执行;支持 Idempotency-Key。
  • GET /v1/assessment-batches/{id}/records:分页与服务端筛选;详情包含分段和每日证据。
  • GET /v1/assessment-batches/{id}/bonus-ledger:当月、结转、历史补发、累计补发及剔除依据。
  • POST /v1/assessment-batches/{id}/submit、/approve、/lock:核算员提交、复核人审批、财务锁定。未解决异常禁止提交;输入变更后重建批次,锁定结果不可直接改写。

待对接系统提供:租赁区间接口、车辆唯一键、人员及归属变更接口、每日纯氢/仪表/GPS 接口、分页与增量游标、鉴权方法和限流规则。供应商密钥放服务端,不存前端。补数、重复记录、换牌、跨月交还车和跨月规则变更应有回归样本。

验收重点

真实零与空值区分;同日多源仅补缺;交还车及负责人切换不重不漏;测试日判定与所取来源可追溯;单条金额舍入后再汇总;历史奖励不被新政策追溯修改;异常阻止正式导出;同输入可复算;快照不可变。