PayrollManagementSystem/backend/app/services/tplus/report_labels.py
liuwenxin 108bf87225 feat(核算)!: 添加 T+ 正式核算与采集托管
补齐源快照、资料预演、正式导入及工资核算的依赖链路。
新增版本化输入、逐段 FIFO、生成锁和结构化当月调整,
并提供默认关闭的周期采集、有限重试及 Windows 托管。

原始客户资料、私有配置及首页改动不纳入本次提交。

BREAKING CHANGE: 升级前需应用新增迁移,并通过
PAYROLL_MAKER_USER_ID 绑定实际工资制作人,否则业务只读。
旧单批次核算默认关闭;历史兼容需显式启用
PAYROLL_ALLOW_LEGACY_CALCULATION。生产启用和真实金额待验收。
2026-11-02 09:42:53 +08:00

86 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""核对报告中的固定业务说明,未知编码保留以便排查。"""
ACTION_LABELS = {
"CREATE": "新增",
"UPDATE": "更新",
"SKIP": "跳过",
"PENDING": "待补充",
"CONFLICT": "冲突",
"READY": "可核对",
"LEGACY": "旧应收冲平",
"WAITING_SHIPMENT": "预收待发货",
"EXCLUDED": "不纳入本次预演",
}
REASON_LABELS = {
"CUSTOMER_SCOPE_CONFLICT": "同一客户存在不一致的期初或历史范围,请先合并为客户级核对资料",
"GUIDANCE_FINALIZATION_REQUIRED": "发货月份指导成本尚未录入完毕并封存",
"CUSTOMER_SCOPE_ALREADY_SELECTED": "该客户已纳入本次平账,重复选择已跳过",
"FORMAL_TARGET_CHANGED": "正式单据与已导入资料不一致,请先核对差异",
"INDEPENDENT_BUSINESS_REQUIRED": "请先按独立业务核实归属,跨业务冲款边界尚待答复",
"BUSINESS_DATA_PENDING": "该业务仍有资料待补,请查看对应核算预演",
"FORMAL_SOURCE_CHANGED": "源单据或人工依据与正式导入版本不同,请先核对差异",
"SOURCE_ALREADY_IMPORTED": "该源单据已经导入其他业务,不能重复导入",
"CUSTOMER_IMPORT_REQUIRED": "请先完成该客户的基础导入",
"PRODUCT_IMPORT_REQUIRED": "请先完成相关产品的基础导入",
"PERSONNEL_IMPORT_REQUIRED": "请先完成相关业务员及经理的基础导入",
"NOT_IN_PERSONNEL_ROSTER": "不在已确认人员名单中",
"PERSONNEL_IDENTITY_CONFLICT": "工号与名单姓名不一致",
"ROSTER_SOURCE_MISSING": "名单工号未在T+找到",
"BUSINESS_ROLE_MISSING": "系统岗位不存在",
"PRODUCT_CATEGORY_PENDING": "产品核算分类待补",
"PRODUCT_UNIT_PENDING": "产品单位待核对",
"NOT_CUSTOMER_ONLY": "往来单位不是仅客户性质",
"CUSTOMER_ATTRIBUTE_PENDING": "客户属性或负责人待补",
"TARGET_MISSING": "原导入目标已不存在",
"TARGET_UNIQUE_CONFLICT": "与现有记录唯一键冲突",
"DUPLICATE_SOURCE_IDENTITY": "源记录身份重复",
"GROUP_SCOPE_PENDING": "平账范围待确认",
"GROUP_FACT_REQUIRED": "尚未登记该平账组",
"OVERLAPPING_GROUPS": "同一单据被多个平账组重复选取",
"OPENING_BALANCE_PENDING": "期初应收待核实",
"HISTORICAL_SETTLEMENT_PENDING": "历史已核算或已发款待核实",
"VOUCHER_STATE_PENDING": "尚未核实收款已生成凭证",
"ACCOUNTING_VOUCHER_INVALID": "关联凭证缺失、已作废或制单状态异常",
"VOUCHER_EVIDENCE_CONFLICT": "凭证关联与人工核实不一致,请复核",
"NOT_GENERATED_VOUCHER": "无关联总账凭证,不纳入本次预演",
"NOT_RECEIPT": "属于付款单,不作为销售回款核算",
"GUIDANCE_PENDING": "缺少有效指导成本",
"QUANTITY_PENDING": "单位成本对应的发货数量需核对",
"GUIDANCE_MONTH_BASIS_PENDING": "指导价取值月份待确认",
"PREPAYMENT_PARAMETERS_PENDING": "预收业务采用发货日还是收款日参数待确认",
"AUGUST_RULE_PENDING": "8月调整参数待确认",
"PERSONNEL_PENDING": "归属人员待确认",
"CUSTOMER_CATEGORY_PENDING": "客户分类待确认",
"PARAMETERS_PENDING": "计提参数待补",
"NEGATIVE_OR_ZERO_DOCUMENT": "负数或零金额单据需人工核对",
"NEGATIVE_EVENT_REVIEW_REQUIRED": "红冲或作废业务需人工核对",
"LEGACY_SYSTEM_CALCULATES": "只冲旧应收,绩效由原软件计算",
"NO_ACTUAL_SHIPMENT": "未实际发货,暂不计提",
"FREIGHT_PENDING": "运费是否剔除及实际金额待核实",
"SHIPPING_OWNERSHIP_PENDING": "发货业务及人员归属待核实",
"HANDOVER_SHIPMENTS_PENDING": "在职交接的发货归属待核实",
"HANDOVER_PENDING": "离职日期或接手依据待补,不能猜测归属",
"TAX_AMOUNT_PENDING": "源含税金额缺失",
"SHIPMENT_STATE_PENDING": "销货单尚未核实为生效状态",
"GROUP_SOURCE_MISSING": "所选单据不在当前完整快照中",
"GROUP_CUSTOMER_MISMATCH": "平账组含有其他客户单据",
"SHIPMENT_DETAILS_MISSING": "发货明细不完整",
"SOURCE_REFRESH_REQUIRED": "需先完整读取相关源数据",
"AMOUNT_PRECISION_PENDING": "金额精度需核对",
"DATA_VALUE_INVALID": "源日期或金额格式需核对",
}
def reason_label(value):
return ";".join(REASON_LABELS.get(part, part) for part in (value or "").split(",") if part)
def spreadsheet_value(value):
"""防公式注入,并让带前导零的编号在电子表格中保持文本。"""
text = str(value) if value is not None else ""
if text.lstrip(" \t\r\n").startswith(("=", "+", "-", "@")) or (
text.isdigit() and ((text.startswith("0") and len(text) > 1) or len(text) > 15)
):
return "'" + text
return value