补齐源快照、资料预演、正式导入及工资核算的依赖链路。 新增版本化输入、逐段 FIFO、生成锁和结构化当月调整, 并提供默认关闭的周期采集、有限重试及 Windows 托管。 原始客户资料、私有配置及首页改动不纳入本次提交。 BREAKING CHANGE: 升级前需应用新增迁移,并通过 PAYROLL_MAKER_USER_ID 绑定实际工资制作人,否则业务只读。 旧单批次核算默认关闭;历史兼容需显式启用 PAYROLL_ALLOW_LEGACY_CALCULATION。生产启用和真实金额待验收。
86 lines
4.8 KiB
Python
86 lines
4.8 KiB
Python
"""核对报告中的固定业务说明,未知编码保留以便排查。"""
|
||
|
||
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
|