feat(P11-P12): 落地治理开关与移动端MVP(G0-G6/H1/M1-M4)

- 新增 Feature Flag 模型、评估服务与管理 API(erp_sync/invoice_verification)\n- 完成 ERP 与验真灰度收口(路由/服务/作业统一判定)\n- 补齐 pay 与手动 sync 的 department_id 灰度上下文\n- 增加管理后台开关页、PWA 基础设施与移动拍照/审批页面\n- 增加回归脚本、安全基线与压测脚本,更新文档与执行合同\n\nIssue: G0,G1,G2,G3,G4,G5,G6,H1,M1,M2,M3,M4
这个提交包含在:
2026-02-11 20:33:30 +08:00
父节点 3813d1955e
当前提交 3b221a2202
共修改 44 个文件,包含 6760 行新增和 74 行删除
+47
查看文件
@@ -153,6 +153,50 @@ const { getConfig } = require('./src/config');
NODE
}
set_verification_flag() {
local mode="$1"
DATABASE_URL="$DATABASE_URL" MODE="$mode" node <<'NODE'
require("dotenv/config");
const { createPrismaClient } = require("./src/prismaClient");
(async () => {
const mode = process.env.MODE;
const { prisma, pool } = createPrismaClient();
await prisma.$connect();
try {
await prisma.featureFlag.upsert({
where: { flag_key: "invoice_verification" },
create: {
flag_key: "invoice_verification",
override_mode: mode,
rollout_type: "global",
department_ids: [],
note: "regression-verification",
},
update: {
override_mode: mode,
rollout_type: "global",
department_ids: [],
note: "regression-verification",
version: { increment: 1 },
},
});
} finally {
await prisma.$disconnect();
await pool.end();
}
})().catch((error) => {
console.error(error);
process.exit(1);
});
NODE
}
echo "[0/6] Ensure verification feature flag force_on"
set_verification_flag "force_on"
echo "[1/6] Login finance_mgr"
TOKEN="$(login "$FINANCE_MGR_IDENTIFIER" "$FINANCE_MGR_PASSWORD" "$TMP_DIR/login.json")"
@@ -184,3 +228,6 @@ if [[ "$status" != "409" ]]; then
fi
echo "[OK] Verification regression passed"
echo "[post] Reset verification feature flag force_off"
set_verification_flag "force_off"