Files
shanxia2.0/backend/graphify-out/.graphify_labels.json
T
zlwuandCursor a3fbb92595 chore: update knowledge graphs after vehicle recharge workflow
Refresh AST graphs for backend/frontend and mark completed implementation plan steps.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-26 21:08:05 +08:00

744 lines
33 KiB
JSON
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.
{
"0": "Community 0",
"1": "Community 1",
"2": "Community 2",
"3": "Community 3",
"4": "Community 4",
"5": "Community 5",
"6": "Community 6",
"7": "Community 7",
"8": "Community 8",
"9": "Community 9",
"10": "Community 10",
"11": "Community 11",
"12": "Community 12",
"13": "Community 13",
"14": "Community 14",
"15": "Community 15",
"16": "Community 16",
"17": "Community 17",
"18": "Community 18",
"19": "Community 19",
"20": "Community 20",
"21": "Community 21",
"22": "Community 22",
"23": "Community 23",
"24": "Community 24",
"25": "Community 25",
"26": "Community 26",
"27": "Community 27",
"28": "Community 28",
"29": "Community 29",
"30": "Community 30",
"31": "Community 31",
"32": "Community 32",
"33": "Community 33",
"34": "Community 34",
"35": "Community 35",
"36": "Community 36",
"37": "Community 37",
"38": "Community 38",
"39": "Community 39",
"40": "Community 40",
"41": "Community 41",
"42": "Community 42",
"43": "Community 43",
"44": "Community 44",
"45": "Community 45",
"46": "Community 46",
"47": "Community 47",
"48": "Community 48",
"49": "Community 49",
"50": "Community 50",
"51": "Community 51",
"52": "Community 52",
"53": "Community 53",
"54": "Community 54",
"55": "Community 55",
"56": "Community 56",
"57": "Community 57",
"58": "Community 58",
"59": "Community 59",
"60": "Community 60",
"61": "Community 61",
"62": "Community 62",
"63": "Community 63",
"64": "Community 64",
"65": "Community 65",
"66": "Community 66",
"67": "Community 67",
"68": "Community 68",
"69": "Community 69",
"70": "Community 70",
"71": "Community 71",
"72": "Community 72",
"73": "Community 73",
"74": "Community 74",
"75": "apply_crm_create_by_scope",
"76": "opportunity_follow.py",
"77": "Community 77",
"78": "Community 78",
"79": "PlCarrier",
"80": "resolve_crm_product",
"81": "customer_follow.py",
"82": "list_duty_staff_users",
"83": "Community 83",
"84": "Community 84",
"85": "allocate_next_biz_no",
"86": "Community 86",
"87": "list_customers",
"88": "CrmProduct",
"89": "pl_ocr_service.py",
"90": "WechatMessageService",
"91": "unsettled_plans_q_filter",
"92": "Community 92",
"93": "api_request_log_middleware.py",
"94": "assert_contract_editable_for_update",
"95": "test_pl_public_link_archived.py",
"96": "minio_url.py",
"97": "contact.py",
"98": "LocalStorage",
"99": "redis_client.py",
"100": "price_letter_detail",
"101": "tenant.py",
"102": "BaseStorage",
"103": "pl_internal_customer.py",
"104": "apply_crm_create_by_scope",
"105": "pool_customer_assign",
"106": "site.py",
"107": "apply_pl_scope",
"108": "statistics.py",
"109": "test_pl_plan_stop_rules.py",
"110": "pool_rule.py",
"111": "test_pl_public_transport_history.py",
"112": "merge_duplicate_crm_customers.py",
"113": "dict_type.py",
"114": "dept.py",
"115": "site.py",
"116": "Community 116",
"117": "pl_plan_list_attachments.py",
"118": "Community 118",
"119": "Community 119",
"121": "_build_user_info_payload",
"122": "post.py",
"123": "customer_options",
"124": "LocalStorage",
"125": "ethnic.py",
"126": "oper_log.py",
"127": "Any",
"128": "api_crypto.py",
"129": "BaseStorage",
"130": "_filter_export_rows_by_ids",
"131": "resolve_crm_product",
"132": ".to_list_kwargs",
"133": "inventory_id.py",
"134": "list_contacts",
"135": "context.py",
"136": "get_db_current_user_optional",
"137": "iter_user_menu_perm_codes",
"140": "crm_export_columns.py",
"142": "clear_pl_plan_instance_data.py",
"143": "create_from_quote",
"144": "response.py",
"145": "list_products",
"146": "dict_data.py",
"147": "Community 147",
"148": "plan_has_incomplete_hazard_cert_exists",
"149": ".to_tenant_user_dict",
"150": "list_product_options",
"152": "register_local_callback",
"153": "web_login_rsa_public_key",
"154": "redis_client.py",
"155": "WechatMessageService",
"156": "list_product_options",
"157": "datetime_parse.py",
"158": "create_from_quote",
"159": "web_login_rsa_public_key",
"160": "get_client_ip",
"161": "context.py",
"162": ".to_tenant_user_dict",
"163": "MinIOStorage",
"164": "storage.py",
"165": "list_duty_staff_users",
"166": "code:block1 (/iflytek/shanxia2.0/backend)",
"167": "migrate_crm_product.py",
"168": "run_auto_generate_monthly_plans",
"169": "merge_duplicate_crm_customers.py",
"170": "mp_webview_ticket.py",
"171": "inventory.py",
"172": "vehicle_maintenance.py",
"173": "resolve_create_time_bounds",
"174": "test_pl_vehicle_ops_list_filters.py",
"175": "pl_ocr_service.py",
"176": "invoice_list_filters.py",
"178": "build_contract_template_column_filters",
"179": "test_pl_vehicle_personnel_photo_schema.py",
"182": "vehicle_recharge.py",
"183": "resolve_name_pinyin_abbr",
"184": "verify_plan_archive_zip_export.py",
"185": "public_transport_site.py",
"186": "BaseStorage",
"187": "price_letter.py",
"189": "build_customer_column_filters",
"191": "pl_plan_cert_perm.py",
"192": "assert_row_deletable_by_creator",
"193": "CRUDBase",
"194": "Settings",
"195": "role.py",
"196": "sample_code.py",
"197": "start-prod.sh",
"198": "login_crypto.py",
"199": "WechatMessageService",
"200": "quote_share_log.py",
"202": "build_clue_column_filters",
"203": "product_list_filters.py",
"204": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"206": "crm_quote_pdf.py",
"207": "shanxia2.0 后端骨架(FastAPI)",
"209": "storage.py",
"210": "customer_pool.py",
"212": "contract_list_filters.py",
"213": "web_auth_roles.py",
"214": "timedelta",
"215": "Java: batchSubmitApproval",
"216": "build_plan_column_filters",
"217": "pl_plan_list_attachments.py",
"219": "expense_item.py",
"222": "start.sh",
"223": "vehicle_recharge.py",
"225": "FakeRedis",
"226": "invoice.py",
"227": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"233": "code:block1 (backend/)",
"235": "wx_qr_session.py",
"238": "vehicle_urea.py",
"239": "shanxia2.0 Backend 生产部署说明",
"240": "reimburse.py",
"241": "public_inventory.py",
"242": "base.py",
"243": "dashboard.py",
"244": "workflow.py",
"245": "vehicle_maintenance.py",
"246": "db_collation.py",
"248": "build_reimburse_column_filters",
"249": "code:block1 (/iflytek/shanxia2.0/backend)",
"250": "menu.py",
"251": "dept.py",
"253": "send_delivery_notice",
"254": "Activate.ps1",
"255": "vehicle_fuel.py",
"256": "Java: createFromOpportunity — 返回合同 id",
"257": "mini_auth.py",
"259": "dict_type.py",
"260": "tenant.py",
"262": "Java Controller TODO — 保持 pending,记录备注",
"263": "__init__.py",
"266": "menu.py",
"267": "post.py",
"268": "leave.py",
"269": "site.py",
"272": "default_settlement_clause",
"273": "storage.py",
"274": "user.py",
"275": "fix_pl_transport_db_link_stop_ids.py",
"280": "resolve_wechat_login_user",
"281": "apply_crm_owner_scope",
"282": "crm_quote_pdf.py",
"286": "shanxia2.0 后端骨架(FastAPI)",
"287": "test_wx_qr_session.py",
"290": "按入参整表覆盖合同扫描件;attachments=[] 表示清空。",
"291": "Java: createFromQuote — 返回合同 id",
"298": "collect_unique_delivery_date_strings",
"301": "price_letter.py",
"302": "clear_pl_plan_instance_data.py",
"304": "__init__.py",
"306": "__init__.py",
"307": "__init__.py",
"308": "__init__.py",
"309": "__init__.py",
"310": "__init__.py",
"311": "__init__.py",
"312": "__init__.py",
"313": "DictLabelResolver",
"314": "order_status_compat.py",
"315": "base_data.py",
"316": "get_active",
"317": "shanxia2.0 Backend 生产部署说明",
"323": "customer_stop_pref.py",
"324": "db_collation.py",
"325": "__init__.py",
"326": "customer_pool.py",
"327": "io_order.py",
"328": "_plan_plate_match",
"331": "common.py",
"332": "_plan_product_name_exists",
"336": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"338": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"344": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"345": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"346": "__init__.py",
"347": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"348": "Activate.ps1",
"349": "__init__.py",
"350": "statistics.py",
"351": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"352": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"353": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"354": "__init__.py",
"355": "__init__.py",
"356": "__init__.py",
"358": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"359": "创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输)",
"360": "列表展示用:优先 CRM 标准名(详情仍返回库内 product_name,以便编辑反推别名)。",
"361": "列表展示用:优先 CRM 标准名(详情仍返回库内 product_name,以便编辑反推别名)。",
"362": "列表展示用:优先 CRM 标准名(详情仍返回库内 product_name,以便编辑反推别名)。",
"363": "__init__.py",
"364": "__init__.py",
"365": "__init__.py",
"366": "__init__.py",
"367": "__init__.py",
"368": "__init__.py",
"369": "列表展示用:优先 CRM 标准名(详情仍返回库内 product_name,以便编辑反推别名)。",
"371": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"372": "列表展示用:优先 CRM 标准名(详情仍返回库内 product_name,以便编辑反推别名)。",
"374": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"375": "__init__.py",
"376": "生成计划编号 POYYYYMMDD###(当日 3 位序号,每日重置)",
"377": "生成计划编号 POYYYYMMDD###(当日 3 位序号,每日重置)",
"378": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"380": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"382": "__init__.py",
"383": "__init__.py",
"384": "__init__.py",
"385": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"387": "返回全部审批动作,按时间正序排列,用于展示完整审批历史。",
"389": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"390": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"391": "生成计划编号 POYYYYMMDD###(当日 3 位序号,每日重置)",
"395": "生成计划编号 POYYYYMMDD###(当日 3 位序号,每日重置)",
"396": "生成计划编号 POYYYYMMDD###(当日 3 位序号,每日重置)",
"400": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"401": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"402": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"403": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"404": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"405": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"407": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"408": "__init__.py",
"409": "__init__.py",
"410": "__init__.py",
"411": "__init__.py",
"412": "__init__.py",
"413": "__init__.py",
"414": "__init__.py",
"415": "__init__.py",
"416": "__init__.py",
"417": "更新计划危化品产品证书(购买证/运输证/合法使用证明,不触发安排运输)",
"419": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"420": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"421": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"422": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"423": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"424": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"425": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"426": "获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。",
"428": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"430": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"431": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"432": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"433": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"434": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"435": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"436": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"437": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"438": "将历史分装单号统一为 NO:SXFZYYYYMMDD-###",
"440": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"441": "将历史分装单号统一为 NO:SXFZYYYYMMDD-###",
"442": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"443": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"445": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"446": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"447": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"448": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"449": "将历史分装单号统一为 NO:SXFZYYYYMMDD-###",
"450": "作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。",
"451": "将历史分装单号统一为 NO:SXFZYYYYMMDD-###",
"452": "强制修改跟进状态(仅改字段,不作废联动、不补运输安排)。需权限 pl:plan:force-follow-status。",
"454": "将历史分装单号统一为 NO:SXFZYYYYMMDD-###",
"456": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"457": "分配分装单号 NO:SXFZYYYYMMDD-###(按租户每日递增)",
"458": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"459": "分配分装单号 NO:SXFZYYYYMMDD-###(按租户每日递增)",
"460": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"462": "分配分装单号 NO:SXFZYYYYMMDD-###(按租户每日递增)",
"464": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"465": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"467": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"469": "分配分装单号 NO:SXFZYYYYMMDD-###(按租户每日递增)",
"470": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"471": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"472": "分配分装单号 NO:SXFZYYYYMMDD-###(按租户每日递增)",
"473": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"474": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"475": "按送货客户聚合送(提)货单打印数据;不传 customerId 时仅返回客户选项。",
"476": "导出计划列表(当前筛选全量,或 ids 已选)。",
"477": "导出计划列表(当前筛选全量,或 ids 已选)。",
"478": "导出计划列表(当前筛选全量,或 ids 已选)。",
"479": "导出计划列表(当前筛选全量,或 ids 已选)。",
"480": "导出计划列表(当前筛选全量,或 ids 已选)。",
"481": "导出计划列表(当前筛选全量,或 ids 已选)。",
"482": "导出计划列表(当前筛选全量,或 ids 已选)。",
"483": "导出计划列表(当前筛选全量,或 ids 已选)。",
"484": "导出计划列表(当前筛选全量,或 ids 已选)。",
"487": "表单可安排数量 + 问号弹窗:合同用量与已安排计划列表。",
"488": "表单可安排数量 + 问号弹窗:合同用量与已安排计划列表。",
"489": "表单可安排数量 + 问号弹窗:合同用量与已安排计划列表。",
"490": "表单可安排数量 + 问号弹窗:合同用量与已安排计划列表。",
"491": "表单可安排数量 + 问号弹窗:合同用量与已安排计划列表。",
"493": "表单可安排数量 + 问号弹窗:合同用量与已安排计划列表。",
"494": "表单可安排数量 + 问号弹窗:合同用量与已安排计划列表。",
"495": "code:bash (cd /path/to/shanxia2.0)",
"496": "code:bash (./start-prod.sh status # 查看状态)",
"497": "code:bash (curl -s http://127.0.0.1:9111/health)",
"498": "code:bash (cd /iflytek/shanxia2.0/backend)",
"499": "code:bash (python -m venv venv)",
"500": "code:bash (pip install -r requirements.txt)",
"501": "code:env (# 数据库配置)",
"502": "code:bash (uvicorn app.main:app --reload --port 8000)",
"503": "BaseModel",
"504": "PlanResourceSnapshotMixin",
"505": "_format_plan_date",
"506": "_resolve_plan_flags",
"507": "transport.py",
"509": "_transport_has_db_links",
"511": "vehicle_urea.py",
"512": "_avatar_url_field",
"513": "_build_user_info_payload",
"514": "_jwt_user_payload",
"520": "与 web-admin 静态路由 meta.roles(admin/super_admin)对齐的单元素数组。",
"521": "与 web-admin `userInfo` 字段约定一致。",
"526": "_web_role_list",
"527": "auth.py",
"528": "__init__.py",
"529": "send_delivery_warning",
"530": "send_order_status",
"531": "send_payment_success",
"532": "send_refund_result",
"533": "send_urge_notification",
"534": "get",
"535": "get_multi_with_filters",
"536": "contract_approver_setting.py",
"537": "contract.py",
"538": "Java: deleteWithValidByIds — 软删除",
"539": "Java: deleteWithValidByIds — 软删除",
"541": "Java: deleteWithValidByIds — 软删除",
"542": "Java: deleteWithValidByIds — 软删除",
"543": "框架合同提交审批校验:仅要求有产品明细;调价区间为可选,不强制。",
"544": "框架合同提交审批校验:仅要求有产品明细;调价区间为可选,不强制。",
"546": "框架合同提交审批校验:仅要求有产品明细;调价区间为可选,不强制。",
"547": "Java: deleteWithValidByIds — 软删除",
"549": "框架合同提交审批校验:仅要求有产品明细;调价区间为可选,不强制。",
"551": "Java: batchSubmitApproval",
"554": "Java: batchSubmitApproval",
"555": "Java: batchSubmitApproval",
"556": "Java: withdrawApproval",
"557": "Java: withdrawApproval",
"559": "Java: batchSubmitApproval",
"561": "Java: withdrawApproval",
"562": "按入参整表覆盖合同扫描件;attachments=[] 表示清空。",
"563": "按入参整表覆盖合同扫描件;attachments=[] 表示清空。",
"564": "按入参整表覆盖合同扫描件;attachments=[] 表示清空。",
"566": "按入参整表覆盖合同扫描件;attachments=[] 表示清空。",
"568": "Java: createFromQuote — 返回合同 id",
"571": "Java: createFromQuote — 返回合同 id",
"572": "Java: createFromQuote — 返回合同 id",
"573": "Java: createFromQuote — 返回合同 id",
"575": "Java: renewContract — 基础续签",
"576": "Java: renewContract — 基础续签",
"577": "Java: renewContract — 基础续签",
"578": "Java: renewContract — 基础续签",
"581": "Java: renewContract — 基础续签",
"582": "Java: queryList for export",
"583": "Java: queryList for export",
"584": "Java: queryList for export",
"585": "Java: queryList for export",
"586": "Java: queryList for export",
"587": "Java: createFromOpportunity — 返回合同 id",
"588": "Java: createFromOpportunity — 返回合同 id",
"589": "Java: createFromOpportunity — 返回合同 id",
"590": "Java: createFromOpportunity — 返回合同 id",
"592": "Java: createFromOpportunity — 返回合同 id",
"593": "Java: batchAssignOwner",
"594": "Java: createFromOpportunity — 返回合同 id",
"596": "Java: downloadContractPdf — 返回合同文件 URL/路径",
"597": "Java: generateTemplateNo — TMPL{yyyyMMdd}{4位序号}",
"599": "Java: batchAssignOwner",
"600": "Java: batchAssignOwner",
"601": "Java: batchAssignOwner",
"602": "Java: batchAssignOwner",
"604": "Java: downloadContractPdf — 返回合同文件 URL/路径",
"605": "Java: downloadContractPdf — 返回合同文件 URL/路径",
"606": "Java: batchAssignOwner",
"608": "Java: downloadContractPdf — 返回合同文件 URL/路径",
"610": "Java: generateTemplateNo — TMPL{yyyyMMdd}{4位序号}",
"612": "Java: generateTemplateNo — TMPL{yyyyMMdd}{4位序号}",
"613": "Java: downloadContractPdf — 返回合同文件 URL/路径",
"615": "Java: generateTemplateNo — TMPL{yyyyMMdd}{4位序号}",
"616": "Java Controller TODO — 保持 pending,记录备注",
"619": "Java Controller TODO — 保持 pending,记录备注",
"620": "Java Controller TODO — 保持 pending,记录备注",
"621": "Java Controller TODO — 保持 pending,记录备注",
"622": "Java Controller TODO — 保持 pending,记录备注",
"623": "Java Controller TODO — 保持 pending,记录备注",
"626": "根据供需方面板与主数据生成/校正合同名称。",
"627": "Java: generateContractNo — {供方编码}/X-JT{yyyyMMdd}{3位序号} 流水与撞号检测须含软删:uk_contr",
"628": "Java: generateContractNo — {供方编码}/X-JT{yyyyMMdd}{3位序号} 流水与撞号检测须含软删:uk_contr",
"631": "租户内合同编号是否已占用(含软删,保证全局唯一)。",
"633": "标准编号替换日期段,保留序号;非标准返回 None。",
"634": "租户内合同编号是否已占用(含软删,保证全局唯一)。",
"639": "将标准合同编号日期段对齐签订日;撞号则序号顺延(含软删查重)。 非标准编号原样返回。无签订日则原样返回。",
"640": "按面板单位全称精确匹配交易主体/客户主数据,取 shortName;对不上则用全称。",
"642": "按面板单位全称精确匹配交易主体/客户主数据,取 shortName;对不上则用全称。",
"644": "前端预览误用单位全称时,名称片段会等于面板/客户/开票全称。",
"645": "按面板供方(partyA)-需方(partyB)生成:{供方简称}-{需方简称}({合同编号})。 - 名称为空:按主数据简称自动生成 - 名",
"646": "前端预览误用单位全称时,名称片段会等于面板/客户/开票全称。",
"650": "按面板供方(partyA)-需方(partyB)生成:{供方简称}-{需方简称}({合同编号})。 - 名称为空:按主数据简称自动生成 - 名",
"651": "customer_follow.py",
"652": "customer_pool.py",
"653": "customer.py",
"655": "invoice_info.py",
"656": "pool_rule.py",
"657": "price_letter.py",
"658": "generate_auto_product_no",
"659": "product.py",
"660": "报价自动建档时生成产品编号(与产品管理新增规则一致)",
"661": "Java: resolveProductIdForQuoteItem(CrmProduct 无 tax_rate,跳过税率匹配)",
"662": "quote_approver_setting.py",
"682": "statistics.py",
"683": "supplier_info.py",
"684": "__init__.py",
"685": "leave.py",
"686": "menu_favorite.py",
"687": "base.py",
"688": "__tablename__",
"689": "__init__.py",
"701": "attachment.py",
"702": "auth.py",
"703": "advance.py",
"704": "validate_expense_item_id",
"705": "attachment.py",
"706": "validate_parent_id",
"707": "__init__.py",
"708": "invoice.py",
"709": "coerce_attachment_id",
"710": "details_must_not_be_empty",
"711": "reimburse.py",
"712": "validate_advance_id",
"713": "validate_expense_item_id",
"714": "validate_invoice_id",
"715": "workflow.py",
"716": "validate_approver_id",
"717": "common.py",
"718": "clue.py",
"719": "contact.py",
"720": "contract_approver_setting.py",
"721": "contract.py",
"732": "customer_follow.py",
"733": "_forbid_legacy_invoice_fields",
"734": "customer.py",
"736": "invoice_info.py",
"737": "opportunity.py",
"738": "pool_rule.py",
"739": "product.py",
"740": "quote_approver_setting.py",
"741": "quote.py",
"742": "supplier_info.py",
"743": "dashboard.py",
"744": "__init__.py",
"745": "plans.py",
"746": "public_inventory.py",
"747": "weighing.py",
"748": "duty.py",
"749": "_split_work_plans",
"750": "__init__.py",
"751": "leave.py",
"752": "menu_favorite.py",
"753": "menu.py",
"754": "customer_stop_pref.py",
"755": "check_ids",
"756": "freight.py",
"757": "__init__.py",
"758": "io_order.py",
"759": "plan.py",
"762": "_coerce_resource_snapshot",
"763": "transport_address.py",
"764": "validate_coordinates",
"765": "transport.py",
"766": "validate_fuel_category",
"767": "validate_fuel_liters",
"768": "validate_odometer_km",
"769": "validate_amount",
"770": "validate_amount",
"771": "validate_recharge_type",
"772": "validate_amount",
"773": "validate_apply_amount",
"774": "validate_quantity",
"775": "workflow.py",
"776": "approve",
"777": "create",
"778": "finance_issue_stats",
"779": "get_by_id",
"780": "get_paged",
"781": "global_status_counts",
"782": "issue",
"783": "_latest_approval_per_node",
"784": "_my_apply_base",
"785": "my_apply_stats",
"786": "offset_amount_map",
"787": "pending_approval_stats",
"788": "advance.py",
"789": "_query_approvals",
"790": "同一节点多次审批时,取 approval_time 最新的一条作为当前节点状态。",
"792": "reject",
"793": "soft_delete",
"794": "submit",
"795": "_tenant_no",
"796": "update",
"797": "withdraw",
"798": "_workflow_nodes",
"799": "count_invoice_attach_by_biz_ids",
"800": "create",
"801": "get_by_biz",
"802": "get_by_id",
"803": "attachment.py",
"804": "soft_delete",
"805": "_tenant_no",
"806": "get_by_id",
"807": "get_paged",
"808": "base.py",
"809": "soft_delete",
"810": "update",
"811": "_build_tree",
"812": "create",
"813": "get_by_id",
"814": "get_item_tree",
"815": "expense_item.py",
"816": "soft_delete",
"817": "_tenant_no",
"818": "update",
"819": "can_query_others_wallet",
"820": "_count_invoices",
"821": "create",
"822": "delete",
"823": "get_mine_summary",
"824": "is_wallet_admin",
"825": "add_entry",
"826": "assert_can_delete_invoice",
"827": "calc_summary",
"828": "debit_reimburse",
"829": "list_entries",
"830": "_lock_summary",
"831": "refresh_summary",
"832": "release_reimburse",
"833": "list_ledgers",
"834": "list_wallets",
"835": "_lookup_user_name",
"836": "out_rows_with_attachments",
"837": "invoice.py",
"840": "_require_wallet_admin",
"841": "_resolve_owner",
"842": "_resolve_owner_for_query",
"843": "_summary_to_dict",
"844": "_tenant_no",
"845": "list_sort.py",
"846": "_approval_record_dict",
"847": "batch_offset",
"848": "build_apply_out_with_details",
"849": "build_expense_name_condition",
"850": "can_change_applicant",
"851": "detail_expense_keyword_match",
"852": "finance_payment_stats",
"853": "get_by_id",
"854": "get_details",
"855": "get_details_map_by_reimburse_ids",
"856": "get_linked_invoice_ids",
"857": "get_linked_invoice_ids_map",
"858": "get_linked_invoices_brief",
"859": "get_paged",
"860": "global_status_counts",
"861": "_has_debit_reimburse",
"862": "_latest_approval_per_node",
"863": "_my_apply_base",
"864": "my_apply_stats",
"865": "normalize_invoice_links",
"866": "offset",
"867": "out_one_with_attachment_counts",
"868": "out_rows_with_attachment_counts",
"869": "pay",
"870": "reimburse.py",
"871": "_query_approvals",
"874": "reject",
"875": "resolve_applicant",
"876": "soft_delete",
"877": "submit",
"878": "sync_reimburse_invoices",
"879": "_tenant_no",
"880": "update_with_details",
"881": "withdraw",
"882": "_workflow_nodes",
"883": "ensure_by_biz_type",
"884": "get_by_biz_type",
"885": "get_by_id",
"886": "get_paged",
"887": "workflow.py",
"888": "save_nodes",
"889": "soft_delete",
"890": "_tenant_no",
"891": "update",
"892": "__init__.py",
"893": "list_sort.py",
"894": "list_sort.py",
"895": "plan_list_filters.py",
"898": "返回 productId -> 三数量字段。",
"900": "按复合键匹配合同产品行;同键多行时 quantity 相加(防御)。",
"907": "product_id -> {archivedQty, arrangedUnarchivedQty, arrangedTotalQty}",
"915": "按段 upsert 地磅出入库与 link:新建 / 就地更新 / 取消勾选软删。 返回 (link_results, warnings)。已过磅取消",
"919": "勾选「生成地磅单」:按产品生成/复用地磅计划,并创建关联出入库单。",
"920": "未过磅且状态可作废时,可就地更新日期/往来/车牌/数量。",
"923": "就地更新已有出入库可变字段;不可编辑时写 warnings,不抛错。",
"925": "按装货/送货段勾选生成地磅计划与出入库单。",
"935": "__init__.py",
"936": "list_sort.py",
"938": "构建归档导出数据行:每计划 × 每段次 × 每段产品一行。",
"941": "单侧保存计划合同关联(旧计划级接口,兼容保留)。",
"967": "_soft_delete_plan_stops",
"971": "_resolve_plan_flags",
"972": "_compare",
"973": "_get_variable",
"974": "_parse_node_config",
"975": "_parse_variables",
"976": "__init__.py",
"977": "分配同租户、同报销日期下的标题序号(MAX+1)。 配合 uk_tenant_reimburse_date_title_seq 唯一约束,并发冲突时由上",
"980": "code:bash (cd /path/to/shanxia2.0)",
"981": "code:bash (./start-prod.sh status # 查看状态)",
"982": "code:bash (curl -s http://127.0.0.1:9111/health)",
"983": "code:bash (cd /iflytek/shanxia2.0/backend)",
"984": "code:bash (python -m venv venv)",
"985": "code:bash (pip install -r requirements.txt)",
"986": "code:env (# 数据库配置)",
"987": "code:bash (uvicorn app.main:app --reload --port 8000)",
"988": "BaseModel",
"989": "BxApplyListExportBody",
"990": "BxExportBodyBase",
"991": "CustomerColumnFilterMixin",
"992": "PlanResourceSnapshotMixin",
"993": "import_key",
"994": ".getdel",
"995": "test_consume_unknown_returns_none",
"996": "test_consume_without_redis_raises",
"997": "test_issue_and_consume_once",
"998": "test_issue_without_redis_falls_back_to_signed",
"999": "test_issue_without_redis_raises",
"1000": "test_recharge_record_badge_counts_only_pending_etc"
}