chore: update graphify after reimburse occur_date changes

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-17 16:06:22 +08:00
1 parent 43d53cb9dd
commit dea4159636
30 files changed
+32530 -6407

No files matched your search

@@ -187,7 +187,6 @@
"185": "vehicle_urea.py",
"186": "transport_address.py",
"187": "price_letter_detail",
"188": "context.py",
"189": "create",
"190": "menu.py",
"192": "pool_rule.py",
@@ -197,7 +196,6 @@
"196": "crm_contract_sub_routes.py",
"197": "_coerce_resource_snapshot",
"198": "user.py",
"199": "unsettled_plans_q_filter",
"200": "register_local_callback",
"202": "statistics.py",
"203": "__init__.py",
+13 -13
View File
@@ -1,7 +1,7 @@
# Graph Report - backend (2026-08-16)
# Graph Report - backend (2026-08-17)
## Corpus Check
- 323 files · ~214,466 words
- 323 files · ~214,471 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
@@ -10,7 +10,7 @@
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `42ad8964`
- Built from commit: `6b2147aa`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@@ -262,8 +262,8 @@ Cohesion: 0.14
Nodes (15): BxAdvanceApply, BxAdvanceApproval, AdvanceService, Any, Session, 同一节点多次审批时,取 approval_time 最新的一条作为当前节点状态。, 返回全部审批动作,按时间正序排列,用于展示完整审批历史。, current_month_bounds() (+7 more)
### Community 14 - "Community 14"
Cohesion: 0.14
Nodes (27): approve_carrier(), create_carrier(), get_carrier(), update_carrier(), PlCarrier, carrier_to_read(), CarrierBase, CarrierCreate (+19 more)
Cohesion: 0.11
Nodes (29): create_carrier(), get_carrier(), update_carrier(), PlCarrier, carrier_to_read(), CarrierBase, CarrierCreate, CarrierQualificationBase (+21 more)
### Community 15 - "Community 15"
Cohesion: 0.10
@@ -422,8 +422,8 @@ Cohesion: 0.10
Nodes (32): advance_issue_stats(), batch_offset(), export_advance_issues(), issue_advance(), list_advance_issues(), list_advance_offset_records(), list_pending_payments(), list_processed_payments() (+24 more)
### Community 64 - "Community 64"
Cohesion: 0.17
Nodes (7): _vehicle_to_read(), PersonnelUpdate, VehicleBase, VehicleCreate, VehicleRead, VehicleUpdate, 车辆/人员 Schema 接受 photoUrls。
Cohesion: 0.29
Nodes (16): paste_recognize_commit(), PlVehicle, ConflictAction, PasteCommitBody, PasteCommitResult, PastePersonnelIn, PasteVehicleIn, 运输计划 - 三方粘贴识别提交 Schema (+8 more)
### Community 65 - "Community 65"
Cohesion: 0.11
@@ -554,8 +554,8 @@ Cohesion: 0.16
Nodes (29): create_instance(), create_process_def(), create_task(), get_all_tasks_for_business(), get_instance(), get_latest_version(), get_nodes_by_version(), get_pending_tasks_by_node() (+21 more)
### Community 109 - "Community 109"
Cohesion: 0.13
Nodes (36): bind_vehicle_driver(), create_vehicle(), get_vehicle(), paste_recognize_commit(), update_vehicle(), _vehicle_to_detail(), generate_uuid(), PlVehicle (+28 more)
Cohesion: 0.16
Nodes (22): bind_vehicle_driver(), create_vehicle(), get_vehicle(), update_vehicle(), _vehicle_to_detail(), _vehicle_to_read(), generate_uuid(), PlVehiclePersonnel (+14 more)
### Community 110 - "Base"
Cohesion: 0.22
@@ -578,8 +578,8 @@ Cohesion: 0.24
Nodes (12): DbSequence, 地磅(db)模块数据模型 — 对齐 docs/sql/db_tables.sql, _allocate_inbound_outbound_id(), _ensure_sequence_row(), max_numeric_inbound_outbound_id(), next_inbound_outbound_id(), Session, 出入库单 id 生成 — 租户内纯数字自增,并发安全。 (+4 more)
### Community 115 - "site.py"
Cohesion: 0.17
Nodes (31): create_driver(), create_personnel(), delete_driver(), delete_personnel(), delete_vehicle(), get_driver(), get_personnel(), list_carriers() (+23 more)
Cohesion: 0.15
Nodes (34): approve_carrier(), create_driver(), create_personnel(), delete_driver(), delete_personnel(), delete_vehicle(), get_driver(), get_personnel() (+26 more)
### Community 116 - "Community 116"
Cohesion: 0.17
@@ -821,9 +821,9 @@ Nodes (6): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `generate_uuid()` connect `Community 109` to `Community 0`, `plan.py`, `Community 4`, `Community 5`, `Community 6`, `Community 134`, `Community 8`, `statistics.py`, `Community 136`, `Community 11`, `Community 13`, `Community 14`, `SysEthnic`, `dict_data.py`, `Community 15`, `Community 16`, `Community 21`, `Community 24`, `response.py`, `Community 25`, `utils.py`, `Community 29`, `Community 28`, `customer_update`, `Community 33`, `get_client_ip`, `Community 36`, `Community 39`, `minio_url.py`, `Community 43`, `Community 45`, `resolve_create_time_bounds`, `Community 48`, `OSSStorage`, `Community 53`, `Community 58`, `Community 61`, `Community 62`, `storage.py`, `get_current_user_by_token`, `Community 66`, `Community 68`, `Community 65`, `Community 67`, `Community 71`, `register_local_callback`, `Community 83`, `Community 86`, `Community 87`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `Community 95`, `apply_crm_create_by_scope`, `apply_pl_scope`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 122`, `customer_pool.py`?**
- **Why does `generate_uuid()` connect `Community 109` to `Community 0`, `plan.py`, `Community 4`, `Community 5`, `Community 6`, `Community 134`, `Community 8`, `statistics.py`, `Community 136`, `Community 11`, `Community 13`, `Community 14`, `SysEthnic`, `dict_data.py`, `Community 15`, `Community 16`, `Community 21`, `Community 24`, `response.py`, `Community 25`, `utils.py`, `Community 29`, `Community 28`, `customer_update`, `Community 33`, `get_client_ip`, `Community 36`, `Community 39`, `minio_url.py`, `Community 43`, `Community 45`, `resolve_create_time_bounds`, `Community 48`, `OSSStorage`, `Community 53`, `Community 58`, `Community 61`, `Community 62`, `Community 64`, `storage.py`, `get_current_user_by_token`, `Community 66`, `Community 68`, `Community 65`, `Community 67`, `Community 71`, `register_local_callback`, `Community 83`, `Community 86`, `Community 87`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `Community 95`, `apply_crm_create_by_scope`, `apply_pl_scope`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 122`, `customer_pool.py`?**
_High betweenness centrality (0.093) - this node is a cross-community bridge._
- **Why does `get_tenant_no()` connect `Community 7` to `Community 0`, `Community 1`, `Community 2`, `Community 5`, `Community 8`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 16`, `Community 18`, `Community 19`, `__init__.py`, `Community 24`, `Community 27`, `customer_update`, `Community 33`, `__init__.py`, `Community 38`, `minio_url.py`, `Community 43`, `Community 45`, `Community 50`, `Community 51`, `OSSStorage`, `Community 54`, `Community 58`, `Community 60`, `Community 62`, `Community 63`, `storage.py`, `Community 66`, `Community 65`, `Community 71`, `Community 78`, `Community 109`, `site.py`, `Community 127`?**
- **Why does `get_tenant_no()` connect `Community 7` to `Community 0`, `Community 1`, `Community 2`, `Community 5`, `Community 8`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 16`, `Community 18`, `Community 19`, `__init__.py`, `Community 24`, `Community 27`, `customer_update`, `Community 33`, `__init__.py`, `Community 38`, `minio_url.py`, `Community 43`, `Community 45`, `Community 50`, `Community 51`, `OSSStorage`, `Community 54`, `Community 58`, `Community 60`, `Community 62`, `Community 63`, `Community 64`, `storage.py`, `Community 66`, `Community 65`, `Community 71`, `Community 78`, `Community 109`, `site.py`, `Community 127`?**
_High betweenness centrality (0.073) - this node is a cross-community bridge._
- **Why does `Settings` connect `price_letter_detail` to `_ensure_subpack_slip_no`, `Community 35`, `Community 67`, `Community 37`, `Community 73`, `Community 42`, `Base`, `Community 52`, `Community 59`, `Community 30`?**
_High betweenness centrality (0.069) - this node is a cross-community bridge._
+42 -42
View File
@@ -4940,7 +4940,7 @@
"source_location": "L202",
"_origin": "ast",
"id": "app_api_pl_base_data_approve_carrier",
"community": 14,
"community": 115,
"norm_label": "approve_carrier()"
},
{
@@ -4960,7 +4960,7 @@
"source_location": "L240",
"_origin": "ast",
"id": "app_api_pl_base_data_vehicle_to_read",
"community": 64,
"community": 109,
"norm_label": "_vehicle_to_read()"
},
{
@@ -5180,7 +5180,7 @@
"source_location": "L1017",
"_origin": "ast",
"id": "app_api_pl_base_data_paste_recognize_commit",
"community": 109,
"community": 64,
"norm_label": "paste_recognize_commit()"
},
{
@@ -22220,7 +22220,7 @@
"source_location": "L57",
"_origin": "ast",
"id": "app_models_pl_models_plvehicle",
"community": 109,
"community": 64,
"norm_label": "plvehicle"
},
{
@@ -26750,7 +26750,7 @@
"source_location": "L174",
"_origin": "ast",
"id": "app_schemas_pl_base_data_vehiclebase",
"community": 64,
"community": 14,
"norm_label": "vehiclebase"
},
{
@@ -26760,7 +26760,7 @@
"source_location": "L190",
"_origin": "ast",
"id": "app_schemas_pl_base_data_vehiclecreate",
"community": 64,
"community": 14,
"norm_label": "vehiclecreate"
},
{
@@ -26770,7 +26770,7 @@
"source_location": "L196",
"_origin": "ast",
"id": "app_schemas_pl_base_data_vehicleupdate",
"community": 64,
"community": 14,
"norm_label": "vehicleupdate"
},
{
@@ -26780,7 +26780,7 @@
"source_location": "L213",
"_origin": "ast",
"id": "app_schemas_pl_base_data_vehicleread",
"community": 64,
"community": 109,
"norm_label": "vehicleread"
},
{
@@ -26820,7 +26820,7 @@
"source_location": "L268",
"_origin": "ast",
"id": "app_schemas_pl_base_data_personnelupdate",
"community": 64,
"community": 115,
"norm_label": "personnelupdate"
},
{
@@ -26940,7 +26940,7 @@
"source_location": "L392",
"_origin": "ast",
"id": "app_schemas_pl_base_data_personnellistresponse",
"community": 14,
"community": 115,
"norm_label": "personnellistresponse"
},
{
@@ -27530,7 +27530,7 @@
"source_location": "L1",
"_origin": "ast",
"id": "app_schemas_pl_paste_recognize",
"community": 109,
"community": 64,
"norm_label": "paste_recognize.py"
},
{
@@ -27540,7 +27540,7 @@
"source_location": "L7",
"_origin": "ast",
"id": "app_schemas_pl_paste_recognize_conflictaction",
"community": 109,
"community": 64,
"norm_label": "conflictaction"
},
{
@@ -27550,7 +27550,7 @@
"source_location": "L15",
"_origin": "ast",
"id": "app_schemas_pl_paste_recognize_pastepersonnelin",
"community": 109,
"community": 64,
"norm_label": "pastepersonnelin"
},
{
@@ -27560,7 +27560,7 @@
"source_location": "L24",
"_origin": "ast",
"id": "app_schemas_pl_paste_recognize_pastevehiclein",
"community": 109,
"community": 64,
"norm_label": "pastevehiclein"
},
{
@@ -27570,7 +27570,7 @@
"source_location": "L34",
"_origin": "ast",
"id": "app_schemas_pl_paste_recognize_pastecommitbody",
"community": 109,
"community": 64,
"norm_label": "pastecommitbody"
},
{
@@ -27580,7 +27580,7 @@
"source_location": "L45",
"_origin": "ast",
"id": "app_schemas_pl_paste_recognize_pastecommitresult",
"community": 109,
"community": 64,
"norm_label": "pastecommitresult"
},
{
@@ -27590,7 +27590,7 @@
"source_location": "L1",
"_origin": "ast",
"id": "app_schemas_pl_paste_recognize_rationale_1",
"community": 109,
"community": 64,
"norm_label": "\u8fd0\u8f93\u8ba1\u5212 - \u4e09\u65b9\u7c98\u8d34\u8bc6\u522b\u63d0\u4ea4 schema"
},
{
@@ -34310,7 +34310,7 @@
"source_location": "L1",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service",
"community": 109,
"community": 64,
"norm_label": "pl_paste_recognize_service.py"
},
{
@@ -34320,7 +34320,7 @@
"source_location": "L22",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_conflict_map",
"community": 109,
"community": 64,
"norm_label": "_conflict_map()"
},
{
@@ -34330,7 +34330,7 @@
"source_location": "L34",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_find_personnel_by_id_card",
"community": 109,
"community": 64,
"norm_label": "_find_personnel_by_id_card()"
},
{
@@ -34340,7 +34340,7 @@
"source_location": "",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_py_session",
"community": 109,
"community": 64,
"norm_label": "session"
},
{
@@ -34350,7 +34350,7 @@
"source_location": "L51",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_find_vehicle_by_plate",
"community": 109,
"community": 64,
"norm_label": "_find_vehicle_by_plate()"
},
{
@@ -34370,7 +34370,7 @@
"source_location": "L85",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_get_vehicle",
"community": 109,
"community": 64,
"norm_label": "_get_vehicle()"
},
{
@@ -34380,7 +34380,7 @@
"source_location": "L100",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_resolve_personnel",
"community": 109,
"community": 64,
"norm_label": "_resolve_personnel()"
},
{
@@ -34390,7 +34390,7 @@
"source_location": "L154",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_resolve_vehicle",
"community": 109,
"community": 64,
"norm_label": "_resolve_vehicle()"
},
{
@@ -34400,7 +34400,7 @@
"source_location": "L222",
"_origin": "ast",
"id": "app_services_pl_paste_recognize_service_commit_paste_recognize",
"community": 109,
"community": 64,
"norm_label": "commit_paste_recognize()"
},
{
@@ -42519,7 +42519,7 @@
"label": "test_volume_quarterly_other_labels()",
"file_type": "code",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L18",
"source_location": "L19",
"_origin": "ast",
"id": "tests_test_crm_settlement_clause_test_volume_quarterly_other_labels",
"community": 162,
@@ -42529,7 +42529,7 @@
"label": "test_unknown_falls_back_to_arrive()",
"file_type": "code",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L24",
"source_location": "L25",
"_origin": "ast",
"id": "tests_test_crm_settlement_clause_test_unknown_falls_back_to_arrive",
"community": 162,
@@ -42539,7 +42539,7 @@
"label": "test_empty_falls_back_to_arrive()",
"file_type": "code",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L28",
"source_location": "L29",
"_origin": "ast",
"id": "tests_test_crm_settlement_clause_test_empty_falls_back_to_arrive",
"community": 162,
@@ -43982,7 +43982,7 @@
"source_location": "L1",
"_origin": "ast",
"id": "tests_test_pl_vehicle_personnel_photo_schema",
"community": 64,
"community": 14,
"norm_label": "test_pl_vehicle_personnel_photo_schema.py"
},
{
@@ -43992,7 +43992,7 @@
"source_location": "L7",
"_origin": "ast",
"id": "tests_test_pl_vehicle_personnel_photo_schema_test_vehicle_create_accepts_photo_urls",
"community": 64,
"community": 14,
"norm_label": "test_vehicle_create_accepts_photo_urls()"
},
{
@@ -44002,7 +44002,7 @@
"source_location": "L19",
"_origin": "ast",
"id": "tests_test_pl_vehicle_personnel_photo_schema_test_vehicle_update_accepts_photo_urls",
"community": 64,
"community": 14,
"norm_label": "test_vehicle_update_accepts_photo_urls()"
},
{
@@ -44012,7 +44012,7 @@
"source_location": "L24",
"_origin": "ast",
"id": "tests_test_pl_vehicle_personnel_photo_schema_test_personnel_create_accepts_photo_urls",
"community": 64,
"community": 14,
"norm_label": "test_personnel_create_accepts_photo_urls()"
},
{
@@ -44022,7 +44022,7 @@
"source_location": "L37",
"_origin": "ast",
"id": "tests_test_pl_vehicle_personnel_photo_schema_test_personnel_update_accepts_photo_urls",
"community": 64,
"community": 14,
"norm_label": "test_personnel_update_accepts_photo_urls()"
},
{
@@ -44032,7 +44032,7 @@
"source_location": "L1",
"_origin": "ast",
"id": "tests_test_pl_vehicle_personnel_photo_schema_rationale_1",
"community": 64,
"community": 14,
"norm_label": "\u8f66\u8f86/\u4eba\u5458 schema \u63a5\u53d7 photourls\u3002"
},
{
@@ -191868,7 +191868,7 @@
"context": "call",
"confidence": "EXTRACTED",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L29",
"source_location": "L30",
"weight": 1.0,
"source": "tests_test_crm_settlement_clause_test_empty_falls_back_to_arrive",
"target": "app_services_crm_settlement_clause_default_settlement_clause",
@@ -191890,7 +191890,7 @@
"context": "call",
"confidence": "EXTRACTED",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L25",
"source_location": "L26",
"weight": 1.0,
"source": "tests_test_crm_settlement_clause_test_unknown_falls_back_to_arrive",
"target": "app_services_crm_settlement_clause_default_settlement_clause",
@@ -191901,7 +191901,7 @@
"context": "call",
"confidence": "EXTRACTED",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L19",
"source_location": "L20",
"weight": 1.0,
"source": "tests_test_crm_settlement_clause_test_volume_quarterly_other_labels",
"target": "app_services_crm_settlement_clause_default_settlement_clause",
@@ -222401,7 +222401,7 @@
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L28",
"source_location": "L29",
"weight": 1.0,
"source": "tests_test_crm_settlement_clause",
"target": "tests_test_crm_settlement_clause_test_empty_falls_back_to_arrive",
@@ -222421,7 +222421,7 @@
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L24",
"source_location": "L25",
"weight": 1.0,
"source": "tests_test_crm_settlement_clause",
"target": "tests_test_crm_settlement_clause_test_unknown_falls_back_to_arrive",
@@ -222431,7 +222431,7 @@
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "tests/test_crm_settlement_clause.py",
"source_location": "L18",
"source_location": "L19",
"weight": 1.0,
"source": "tests_test_crm_settlement_clause",
"target": "tests_test_crm_settlement_clause_test_volume_quarterly_other_labels",
@@ -224201,5 +224201,5 @@
}
],
"hyperedges": [],
"built_at_commit": "42ad896456ce79943af4052ead798ed944d94cab"
"built_at_commit": "6b2147aa46329daea439b797a11e84e1d9d3103f"
}
+145 -151
View File
@@ -1,16 +1,16 @@
# Graph Report - backend (2026-08-17)
## Corpus Check
- 323 files · ~214,471 words
- 325 files · ~214,627 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 4799 nodes · 16478 edges · 545 communities (527 shown, 18 thin omitted)
- 4805 nodes · 16492 edges · 543 communities (526 shown, 17 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 728 edges (avg confidence: 0.62)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `6b2147aa`
- Built from commit: `43d53cb9`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@@ -156,12 +156,10 @@
- [[_COMMUNITY_resolve_create_time_bounds|resolve_create_time_bounds]]
- [[_COMMUNITY_excel_export.py|excel_export.py]]
- [[_COMMUNITY_price_letter_detail|price_letter_detail]]
- [[_COMMUNITY_context.py|context.py]]
- [[_COMMUNITY_storage.py|storage.py]]
- [[_COMMUNITY_get_current_user_by_token|get_current_user_by_token]]
- [[_COMMUNITY_PlFreightSettlementTransport|PlFreightSettlementTransport]]
- [[_COMMUNITY_crm_contract_sub_routes.py|crm_contract_sub_routes.py]]
- [[_COMMUNITY_unsettled_plans_q_filter|unsettled_plans_q_filter]]
- [[_COMMUNITY_register_local_callback|register_local_callback]]
- [[_COMMUNITY___init__.py|__init__.py]]
- [[_COMMUNITY_crm_quote_pdf.py|crm_quote_pdf.py]]
@@ -211,7 +209,7 @@
## Import Cycles
- None detected.
## Communities (545 total, 18 thin omitted)
## Communities (543 total, 17 thin omitted)
### Community 0 - "Community 0"
Cohesion: 0.16
@@ -226,8 +224,8 @@ Cohesion: 0.21
Nodes (27): _apply_inventory_product_update(), _apply_inventory_update(), _base_query(), create_inventory(), create_link_for_plan(), delete_inventory(), _generate_batch_no(), _get_inventory() (+19 more)
### Community 3 - "Community 3"
Cohesion: 0.09
Nodes (96): attachment_download_url(), attachment_preview_url(), AttachmentDownloadUrlBody, create_dept(), create_dict_data(), create_dict_type(), create_menu(), create_menu_favorite() (+88 more)
Cohesion: 0.08
Nodes (100): attachment_download_url(), attachment_preview_url(), AttachmentDownloadUrlBody, create_dept(), create_dict_data(), create_dict_type(), create_menu(), create_menu_favorite() (+92 more)
### Community 4 - "Community 4"
Cohesion: 0.09
@@ -235,7 +233,7 @@ Nodes (76): _apply_list_filters(), assign_opportunities(), batch_update_expect_d
### Community 5 - "Community 5"
Cohesion: 0.08
Nodes (78): archive_plan(), create_plan_full(), get_plan(), 创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输), update_plan(), update_plan_driver_feedback(), update_plan_site_feedback(), PlPlan (+70 more)
Nodes (69): create_plan_full(), 创建运输计划(完整表单:供方/需方 + 产品库产品 + 可选预选车辆,不自动安排运输), update_plan(), PlPlanProduct, PlPlanTransport, 计划产品明细表 pl_plan_product, 计划-运输关联表 pl_plan_transport, PlanArchiveFreightBlock (+61 more)
### Community 6 - "Community 6"
Cohesion: 0.18
@@ -243,11 +241,11 @@ Nodes (32): assign_customer(), batch_claim_customers(), check_duplicate_customer
### Community 7 - "Community 7"
Cohesion: 0.04
Nodes (217): clue_assign(), clue_check_convert(), clue_check_duplicate(), clue_convert(), clue_create(), clue_delete(), clue_detail(), clue_export() (+209 more)
Nodes (211): clue_assign(), clue_check_convert(), clue_check_duplicate(), clue_convert(), clue_create(), clue_delete(), clue_detail(), clue_export() (+203 more)
### Community 8 - "Community 8"
Cohesion: 0.10
Nodes (67): register_quote_routes(), accept_quote(), assert_quote_editable_for_update(), _build_quote_filters(), calculate_quote_amount(), create_new_version(), create_quote(), _decimal_value() (+59 more)
Cohesion: 0.11
Nodes (48): assert_quote_editable_for_update(), _build_quote_filters(), calculate_quote_amount(), create_new_version(), create_quote(), _decimal_value(), _enrich_contact_fields(), _enrich_supplier_name() (+40 more)
### Community 11 - "Community 11"
Cohesion: 0.10
@@ -255,19 +253,19 @@ Nodes (55): cancel_apply(), create_apply(), create_disburse(), delete_applies(),
### Community 12 - "Community 12"
Cohesion: 0.05
Nodes (71): contact_add(), contact_delete(), contact_update(), BaseModel, AttachmentUploadResponse, ChangePasswordRequest, Config, LoginRequest (+63 more)
Nodes (72): customer_create(), customer_update(), customer_name_exists(), BaseModel, AttachmentUploadResponse, ChangePasswordRequest, Config, LoginRequest (+64 more)
### Community 13 - "Community 13"
Cohesion: 0.14
Nodes (15): BxAdvanceApply, BxAdvanceApproval, AdvanceService, Any, Session, 同一节点多次审批时,取 approval_time 最新的一条作为当前节点状态。, 返回全部审批动作,按时间正序排列,用于展示完整审批历史。, current_month_bounds() (+7 more)
Cohesion: 0.10
Nodes (39): bx_health(), 报销(bx)API 路由聚合 — REST 风格,协议对齐 bx 原系统。, P0 健康检查:验证 bx 路由已挂载且响应协议为 code=0。, approve_reimburse(), approved_by_me(), _build_details_data(), create_reimburse(), delete_reimburse() (+31 more)
### Community 14 - "Community 14"
Cohesion: 0.11
Nodes (29): create_carrier(), get_carrier(), update_carrier(), PlCarrier, carrier_to_read(), CarrierBase, CarrierCreate, CarrierQualificationBase (+21 more)
Cohesion: 0.30
Nodes (12): PlCarrier, assert_carrier_eligible_for_transport(), carrier_agreement_expired(), carrier_audit_approved(), carrier_eligible_for_transport(), carrier_qualification_complete(), date, 资质附件均为选填,保留函数签名供兼容调用。 (+4 more)
### Community 15 - "Community 15"
Cohesion: 0.10
Nodes (40): approve_reimburse(), approved_by_me(), _build_details_data(), create_reimburse(), delete_reimburse(), get_approval_history(), get_approvals(), get_generated_title() (+32 more)
Cohesion: 0.11
Nodes (15): BxReimburseApply, BxReimburseApproval, BxReimburseDetail, BxReimburseInvoice, BxReimburseOffset, ReimburseApplyOut, ReimburseInvoiceBriefOut, Any (+7 more)
### Community 16 - "Community 16"
Cohesion: 0.09
@@ -275,11 +273,11 @@ Nodes (60): cancel_apply(), create_apply(), create_record(), delete_applies(), d
### Community 18 - "Community 18"
Cohesion: 0.11
Nodes (41): advance_pending_approval_stats(), advance_status_counts(), approve_advance(), approved_by_me(), create_advance(), delete_advance(), _fill_offset_amounts(), get_advance() (+33 more)
Nodes (39): advance_pending_approval_stats(), advance_status_counts(), approve_advance(), approved_by_me(), create_advance(), delete_advance(), _fill_offset_amounts(), get_advance() (+31 more)
### Community 19 - "Community 19"
Cohesion: 0.11
Nodes (38): register_contract_routes(), batch_assign_owner(), batch_submit_contract_approval(), create_from_opportunity(), create_from_quote(), download_contract_pdf(), finish_contract(), generate_template_no() (+30 more)
Cohesion: 0.12
Nodes (41): register_contract_routes(), batch_assign_owner(), batch_submit_contract_approval(), contract_row_to_dict(), download_contract_pdf(), _ensure_contract_in_scope(), export_contracts(), finish_contract() (+33 more)
### Community 21 - "Community 21"
Cohesion: 0.15
@@ -294,40 +292,40 @@ Cohesion: 0.15
Nodes (6): convert_heic_to_jpeg(), process_image_content(), QiniuStorage, 将 HEIC/HEIF 格式转换为 JPEG 格式, 处理图片内容,如果是 HEIC 格式则转换为 JPEG, BytesIO
### Community 24 - "Community 24"
Cohesion: 0.19
Nodes (28): _apply_plan_product_update(), _apply_plan_update(), AutoGenerateMonthlyResult, _base_query(), create_plan(), _generate_plan_no(), get_plan(), _get_plan_by_id_only() (+20 more)
Cohesion: 0.17
Nodes (31): _apply_plan_product_update(), _apply_plan_update(), AutoGenerateMonthlyResult, _base_query(), create_plan(), delete_plan(), _generate_plan_no(), get_plan() (+23 more)
### Community 25 - "Community 25"
Cohesion: 0.09
Nodes (39): PlTransportProductBrandQty, PlTransportProductFeedback, 运输单按产品回传 pl_transport_product_feedback, 运输单产品回传品牌数量 pl_transport_product_brand_qty, load_brand_qtys_by_plan_product_ids(), persist_plan_product_brand_qtys(), Any, Decimal (+31 more)
Cohesion: 0.12
Nodes (28): PlInventory, PlInventoryTransaction, 库存流水表 pl_inventory_transaction, load_brand_qtys_by_plan_product_ids(), persist_plan_product_brand_qtys(), Any, Decimal, Session (+20 more)
### Community 26 - "Community 26"
Cohesion: 0.21
Nodes (29): DutyAssignment, DutyDay, DutySlot, 值班排班模型 — docs/superpowers/specs/2026-08-14-duty-schedule-design.md, _assignment_dict(), build_public_url(), _count_active_assignments(), _day_dict() (+21 more)
Cohesion: 0.09
Nodes (58): day_detail(), delete_assignment(), _enrich_assign_names(), month_summary(), Session, 指定用户时补全 personName(用 nick_name)。, save_day(), set_link() (+50 more)
### Community 27 - "Community 27"
Cohesion: 0.11
Nodes (32): CRM 报价单 API 路由 — 挂接到 crm.router, QuoteApproverSettingSaveBody, QuoteAcceptBody, QuoteApprovalApproveBody, QuoteApprovalListBody, QuoteApprovalRefreshNamesBody, QuoteApprovalWithdrawBody, QuoteCreateBody (+24 more)
Cohesion: 0.10
Nodes (33): CRM 报价单 API 路由 — 挂接到 crm.router, total_pages(), QuoteApproverSettingSaveBody, QuoteAcceptBody, QuoteApprovalApproveBody, QuoteApprovalListBody, QuoteApprovalRefreshNamesBody, QuoteApprovalWithdrawBody (+25 more)
### Community 28 - "Community 28"
Cohesion: 0.08
Nodes (71): PlFreightSettlement, PlFreightSettlementApproval, PlFreightSettlementTransport, PlRemittanceVoucher, 运费结算表 pl_freight_settlement, 运费结算审批 pl_freight_settlement_approval, 结算单-运输关联表 pl_freight_settlement_transport, 汇款凭证表 pl_remittance_voucher (+63 more)
Cohesion: 0.10
Nodes (59): PlFreightSettlement, PlFreightSettlementApproval, PlFreightSettlementTransport, 运费结算表 pl_freight_settlement, 运费结算审批 pl_freight_settlement_approval, 结算单-运输关联表 pl_freight_settlement_transport, _advance_after_approval(), _approval_to_dict() (+51 more)
### Community 29 - "Community 29"
Cohesion: 0.12
Nodes (54): _apply_contract_entity_fields(), _build_contract_filters(), _build_contract_name_from_parties(), _build_customer_address(), _calc_amount_with_tax(), contract_no_exists(), _contract_period_key(), contract_row_to_dict() (+46 more)
Nodes (46): _apply_contract_entity_fields(), _build_contract_filters(), _build_contract_name_from_parties(), _build_customer_address(), _calc_amount_with_tax(), contract_no_exists(), _contract_period_key(), create_contract() (+38 more)
### Community 30 - "Community 30"
Cohesion: 0.16
Nodes (26): clear_target_categories(), compute_level(), count_target_rows(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_runtime_settings() (+18 more)
### Community 33 - "Community 33"
Cohesion: 0.17
Nodes (28): CRM 合同子模块路由 — 变更/模板/审批独立页, register_contract_sub_routes(), _change_row_to_dict(), create_contract_change(), execute_change(), export_contract_changes(), _get_change_row(), get_contract_change_detail() (+20 more)
Cohesion: 0.16
Nodes (33): CRM 合同子模块路由 — 变更/模板/审批独立页, register_contract_sub_routes(), _change_row_to_dict(), create_contract_change(), _enrich_change_rows(), execute_change(), export_contract_changes(), export_contract_templates() (+25 more)
### Community 34 - "Community 34"
Cohesion: 0.13
Nodes (26): _business_type_label(), _enrich_task_list(), _leave_form_fields(), list_completed_tasks(), list_my_instances(), list_pending_tasks(), _portal_user_info(), ProcessDefCreateBody (+18 more)
Nodes (23): ProcessDefCreateBody, ProcessDefUpdateBody, PublishVersionBody, 审批意见:前端传 commentText,兼容 comment。, StartInstanceBody, TaskActionBody, 流程实例 wf_process_instance, WfNode (+15 more)
### Community 35 - "Community 35"
Cohesion: 0.18
@@ -342,48 +340,48 @@ Cohesion: 0.20
Nodes (24): count_source_rows(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_runtime_settings(), load_settings_env(), load_user_mapping() (+16 more)
### Community 38 - "Community 38"
Cohesion: 0.19
Nodes (14): create_expense_item(), delete_expense_item(), get_expense_item(), get_expense_item_tree(), Session, update_expense_item(), get_bx_current_user(), BxExpenseItem (+6 more)
Cohesion: 0.20
Nodes (13): create_expense_item(), delete_expense_item(), get_expense_item(), get_expense_item_tree(), Session, update_expense_item(), BxExpenseItem, _coerce_id() (+5 more)
### Community 39 - "Community 39"
Cohesion: 0.13
Nodes (43): assign_clues(), check_convert(), check_duplicate_clue(), convert_clue(), create_clue(), _enrich_user_names(), _ensure_clue_in_scope(), create_clue_follow() (+35 more)
Cohesion: 0.22
Nodes (28): assign_clues(), check_convert(), check_duplicate_clue(), convert_clue(), create_clue(), _enrich_user_names(), _ensure_clue_in_scope(), get_clue() (+20 more)
### Community 42 - "Community 42"
Cohesion: 0.05
Nodes (102): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+94 more)
Cohesion: 0.19
Nodes (32): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+24 more)
### Community 43 - "Community 43"
Cohesion: 0.12
Nodes (25): create_invoice(), delete_invoice(), get_mine_wallet_summary(), list_invoice_ledgers(), list_invoice_wallets(), list_invoices(), Request, Session (+17 more)
Cohesion: 0.09
Nodes (34): create_invoice(), delete_invoice(), get_mine_wallet_summary(), list_invoice_ledgers(), list_invoice_wallets(), list_invoices(), Request, Session (+26 more)
### Community 44 - "Community 44"
Cohesion: 0.21
Nodes (15): day_detail(), delete_assignment(), _enrich_assign_names(), month_summary(), Session, 指定用户时补全 personName(用 nick_name)。, save_day(), set_link() (+7 more)
Cohesion: 0.18
Nodes (31): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), legacy_parent_id(), load_oss_id_to_url(), load_runtime_settings() (+23 more)
### Community 45 - "Community 45"
Cohesion: 0.07
Nodes (87): _build_public_page(), _format_file_size(), _format_plan_date(), get_public_transport(), _get_transport_by_token(), _parse_feedback_images(), Session, UploadFile (+79 more)
Cohesion: 0.08
Nodes (71): get_plan_arrange_info(), 获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。, _apply_plan_logistics_from_payload(), _apply_transport_arrange_fields(), arrange_transport(), _assert_vehicle_carrier_eligible(), _build_arrange_result(), _build_driver_url() (+63 more)
### Community 46 - "Community 46"
Cohesion: 0.19
Nodes (15): 返回 (作废, 归档)。现场链接实际走入库/出库单公共页。, _resolve_io_order_link_flags(), _resolve_site_link_flags(), _resolve_driver_link_flags(), 运输计划司机/现场公共链接:归档后应标记并拦截写操作。, test_driver_link_flags_archived_when_plan_archived(), test_driver_link_flags_voided_by_transport_cancelled(), test_driver_link_flags_voided_takes_precedence_shape() (+7 more)
Nodes (28): apply_biz_backfill(), BackfillRule, BizRef, build_biz_index(), count_target_rows(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows() (+20 more)
### Community 48 - "Community 48"
Cohesion: 0.14
Nodes (20): get_last_month_range(), month_range(), date, Session, 地磅计划按月自动生成 — 迁移自 simple-dibang-xiaoshou/auto-create-plan/auto_create_monthly_pla, 按月自动生成采购计划。 - 默认仅在每月 1 日执行(force=True 时跳过该限制,供手动触发验收) - 遍历所有租户,按上月计划模板生, run_auto_generate_monthly_plans(), default_execution_status() (+12 more)
Cohesion: 0.30
Nodes (10): get_last_month_range(), month_range(), date, Session, 地磅计划按月自动生成 — 迁移自 simple-dibang-xiaoshou/auto-create-plan/auto_create_monthly_pla, 按月自动生成采购计划。 - 默认仅在每月 1 日执行(force=True 时跳过该限制,供手动触发验收) - 遍历所有租户,按上月计划模板生, run_auto_generate_monthly_plans(), default_execution_status() (+2 more)
### Community 49 - "Community 49"
Cohesion: 0.58
Nodes (9): _apply_create_range(), _base_query(), get_clue_level_statistics(), get_clue_overview_statistics(), get_clue_owner_statistics(), get_clue_source_statistics(), get_clue_trend_statistics(), Any (+1 more)
### Community 50 - "Community 50"
Cohesion: 0.11
Nodes (17): category_add(), category_delete(), category_tree(), category_update(), product_delete(), product_update(), 删除产品(支持单条 body.id 和批量 body.ids), CategoryDeleteBody (+9 more)
Cohesion: 0.12
Nodes (15): category_add(), category_delete(), category_tree(), category_update(), product_delete(), 删除产品(支持单条 body.id 和批量 body.ids), CategoryDeleteBody, ProductAliasItem (+7 more)
### Community 51 - "Community 51"
Cohesion: 0.35
Nodes (15): _cargo_stats(), get_dashboard_stats(), get_inbound_by_cargo(), get_inbound_by_partner_cargo(), get_outbound_by_cargo(), get_outbound_by_partner_cargo(), _partner_cargo_stats(), Session (+7 more)
Cohesion: 0.27
Nodes (16): _cargo_stats(), get_dashboard_stats(), get_inbound_by_cargo(), get_inbound_by_partner_cargo(), get_outbound_by_cargo(), get_outbound_by_partner_cargo(), _partner_cargo_stats(), Session (+8 more)
### Community 52 - "Community 52"
Cohesion: 0.18
@@ -406,32 +404,32 @@ Cohesion: 0.20
Nodes (28): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+20 more)
### Community 60 - "Community 60"
Cohesion: 0.12
Nodes (16): 供方全量列表(下拉)— Java: CrmSupplierInfoController.listAll, 供方详情 — Java: CrmSupplierInfoController.getInfo, 新增供方 — Java: CrmSupplierInfoController.add, 修改供方 — Java: CrmSupplierInfoController.edit, 删除供方 — Java: CrmSupplierInfoController.remove, supplier_info_add(), supplier_info_delete(), supplier_info_detail() (+8 more)
Cohesion: 0.10
Nodes (19): 分页查询供方列表 — Java: CrmSupplierInfoController.list, 供方全量列表(下拉)— Java: CrmSupplierInfoController.listAll, 供方详情 — Java: CrmSupplierInfoController.getInfo, 新增供方 — Java: CrmSupplierInfoController.add, 修改供方 — Java: CrmSupplierInfoController.edit, 删除供方 — Java: CrmSupplierInfoController.remove, supplier_info_add(), supplier_info_delete() (+11 more)
### Community 61 - "Community 61"
Cohesion: 0.11
Nodes (45): PlPlanProduct, PlTransportDbLink, 计划产品明细表 pl_plan_product, 运输-地磅出入库关联 pl_transport_db_link, _apply_plan_quantity_delta(), _create_db_inventory(), _create_db_plan(), DibangInventoryLinkResult (+37 more)
Cohesion: 0.10
Nodes (48): _generate_notify_message(), PlPlan, PlTransportDbLink, 运输-地磅出入库关联 pl_transport_db_link, parse_date_str(), _apply_plan_quantity_delta(), _create_db_inventory(), _create_db_plan() (+40 more)
### Community 62 - "Community 62"
Cohesion: 0.17
Nodes (29): _apply_weighing_product_update(), _apply_weighing_update(), _base_query(), create_weighing(), delete_weighing(), _get_weighing(), get_weighing_related(), list_weighing() (+21 more)
Cohesion: 0.19
Nodes (26): _apply_weighing_product_update(), _apply_weighing_update(), _base_query(), create_weighing(), delete_weighing(), _get_weighing(), get_weighing_related(), list_weighing() (+18 more)
### Community 63 - "Community 63"
Cohesion: 0.10
Nodes (32): advance_issue_stats(), batch_offset(), export_advance_issues(), issue_advance(), list_advance_issues(), list_advance_offset_records(), list_pending_payments(), list_processed_payments() (+24 more)
Cohesion: 0.22
Nodes (22): advance_issue_stats(), batch_offset(), export_advance_issues(), issue_advance(), list_advance_issues(), list_advance_offset_records(), list_pending_payments(), list_processed_payments() (+14 more)
### Community 64 - "Community 64"
Cohesion: 0.29
Nodes (16): paste_recognize_commit(), PlVehicle, ConflictAction, PasteCommitBody, PasteCommitResult, PastePersonnelIn, PasteVehicleIn, 运输计划 - 三方粘贴识别提交 Schema (+8 more)
### Community 65 - "Community 65"
Cohesion: 0.11
Nodes (60): cancel_apply(), create_apply(), create_process(), delete_applies(), delete_processes(), get_apply(), get_process(), list_applies() (+52 more)
Cohesion: 0.15
Nodes (42): PlVehicleMaintenanceApply, PlVehicleMaintenanceProcess, 车辆维保申请 pl_vehicle_maintenance_apply, 车辆维保处理登记 pl_vehicle_maintenance_process, Decimal, VehicleMaintenanceApplyCreate, VehicleMaintenanceApplyRead, VehicleMaintenanceApplyReminder (+34 more)
### Community 66 - "Community 66"
Cohesion: 0.14
Nodes (21): create_workflow(), delete_workflow(), get_workflow(), get_workflow_by_biz_type(), list_workflows(), Session, save_workflow_nodes(), update_workflow() (+13 more)
Cohesion: 0.09
Nodes (33): create_workflow(), delete_workflow(), get_workflow(), get_workflow_by_biz_type(), list_workflows(), Session, save_workflow_nodes(), update_workflow() (+25 more)
### Community 67 - "Community 67"
Cohesion: 0.12
@@ -442,20 +440,20 @@ Cohesion: 0.33
Nodes (13): _build_tree(), _cascade_soft_delete(), _collect_with_ancestors(), create_dept(), get_dept(), list_depts(), list_depts_tree(), Any (+5 more)
### Community 69 - "Community 69"
Cohesion: 0.12
Nodes (31): _append_user_scope_conditions(), apply_data_scope(), assert_row_in_data_scope(), _collect_scope_ids(), _get_child_dept_ids(), get_user_dept_id(), Session, 数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3 (+23 more)
Cohesion: 0.11
Nodes (33): _append_user_scope_conditions(), apply_data_scope(), assert_row_in_data_scope(), _collect_scope_ids(), _get_child_dept_ids(), get_user_dept_id(), Session, 数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3 (+25 more)
### Community 70 - "Community 70"
Cohesion: 0.18
Nodes (18): align_contract_no_to_sign_date(), generate_contract_no(), date, Java: generateContractNo — {供方编码}/X-JT{yyyyMMdd}{3位序号} 流水与撞号检测须含软删:uk_contr, 标准编号替换日期段,保留序号;非标准返回 None。, 将标准合同编号日期段对齐签订日;撞号则序号顺延(含软删查重)。 非标准编号原样返回。无签订日则原样返回。, replace_contract_no_date(), _mock_last_contract() (+10 more)
### Community 71 - "Community 71"
Cohesion: 0.14
Nodes (25): list_vehicles(), PlCert, CertRead, VehicleListResponse, SnapshotCertRead, SnapshotPersonnelRow, certs_to_read(), list_owner_certs() (+17 more)
Cohesion: 0.11
Nodes (31): PlCert, PlDocumentReminder, 证件到期提醒表 pl_document_reminder, CertRead, 运输计划 - 安排运输时车辆/人员/证件资源快照 Schema, SnapshotCertRead, SnapshotPersonnelRow, TransportResourceSnapshot (+23 more)
### Community 72 - "Community 72"
Cohesion: 0.30
Nodes (12): business_type_from_path(), title_from_path(), _apply_oper_log_scope(), get_oper_log(), list_oper_logs(), _oper_log_row_in_scope(), _oper_status(), Any (+4 more)
Cohesion: 0.24
Nodes (20): register_quote_routes(), accept_quote(), _ensure_quote_in_scope(), generate_pdf(), generate_share(), get_quote(), get_quote_detail(), _get_quote_in_scope() (+12 more)
### Community 73 - "Community 73"
Cohesion: 0.20
@@ -463,15 +461,15 @@ Nodes (25): derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), l
### Community 74 - "Community 74"
Cohesion: 0.11
Nodes (18): ApiCryptoMiddleware, ApiRequestLogMiddleware, _db_pool_keepalive_loop(), _error_json(), lifespan(), Exception, Request, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误 (+10 more)
Nodes (17): ApiCryptoMiddleware, _db_pool_keepalive_loop(), _error_json(), lifespan(), Exception, Request, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin (+9 more)
### Community 77 - "Community 77"
Cohesion: 0.11
Nodes (12): get_wechat_pay_client(), get_wechat_pay_v2(), Any, 微信支付工具模块 支持微信支付 V3 API 文档参考: https://pay.weixin.qq.com/docs/v3/apis/index.html, 统一下单接口 (V3) Args: out_trade_no: 商户订单号 total_amo, 申请退款 Args: out_trade_no: 商户订单号 total_amount: 订单, 小程序调起支付的二次签名参数(与公众号 JSAPI 规则一致), 统一下单 (V2 API) Args: out_trade_no: 商户订单号 total_f (+4 more)
### Community 78 - "Community 78"
Cohesion: 0.19
Nodes (23): delete_plan(), delete_carrier(), unbind_vehicle_driver(), delete_plan(), _actor_ids(), _actor_names(), assert_row_deletable_by_creator(), assert_rows_deletable_by_creator() (+15 more)
Cohesion: 0.24
Nodes (18): _actor_ids(), _actor_names(), assert_row_deletable_by_creator(), assert_rows_deletable_by_creator(), can_delete_by_creator(), is_super_admin(), normalize_user_info(), Any (+10 more)
### Community 81 - "Community 81"
Cohesion: 0.29
@@ -494,8 +492,8 @@ Cohesion: 0.11
Nodes (32): approve_quote(), can_user_approve(), create_approval_records(), delete_pending_approvals(), get_quote_approval(), invalidate_all_approvals(), list_quote_approvals(), Any (+24 more)
### Community 88 - "Any"
Cohesion: 0.33
Nodes (9): grab(), normalize_person_name(), test_grab_rejects_duplicate_same_shift(), test_grab_rejects_invalid_user(), test_grab_rejects_when_closed(), test_grab_rejects_when_full(), test_normalize_person_name_empty(), test_normalize_person_name_ok() (+1 more)
Cohesion: 0.29
Nodes (14): create_clue_follow(), delete_clue_follow(), get_clue_follow(), get_follow_statistics(), list_clue_follows(), Any, Session, 更新线索跟进记录,必要时同步线索 next_time (+6 more)
### Community 89 - "pl_ocr_service.py"
Cohesion: 0.19
@@ -514,8 +512,8 @@ Cohesion: 0.33
Nodes (8): allocate_next_biz_no(), _format_biz_no(), _prefix_for(), datetime, Session, 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, BizNoKind
### Community 94 - "response.py"
Cohesion: 0.21
Nodes (16): get_web_auth_menu_codes(), 获取当前用户菜单权限标识(sys_menu.perms,经角色继承)。, _expand_with_ancestor_menu_ids(), _granted_menu_ids_for_user(), iter_user_menu_perm_codes(), _map_role_name_to_web(), Session, Web 管理端登录:基于 V0.3 sys_user / sys_user_role / sys_role 的角色与菜单权限解析 (+8 more)
Cohesion: 0.19
Nodes (15): get_user_menu_codes(), Session, 读取用户授权的菜单权限标识集合(与前端 meta.menuCode / perms 对齐)。, _expand_with_ancestor_menu_ids(), _granted_menu_ids_for_user(), iter_user_menu_perm_codes(), _map_role_name_to_web(), Session (+7 more)
### Community 95 - "Community 95"
Cohesion: 0.35
@@ -546,44 +544,44 @@ Cohesion: 0.15
Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import WechatMes, 发送订单状态通知 Args: openid: 用户openid order_n, 发送支付成功通知 Args: openid: 用户openid order_n, 发送配送通知 Args: openid: 配送员openid task_no:, 发送配送时效预警 Args: openid: 配送员openid task_n, 发送退款结果通知 Args: openid: 用户openid order_n, 发送催单通知给配送员 Args: deliver_openid: 配送员openid, 发送模板消息 Args: openid: 用户openid template_ (+1 more)
### Community 106 - "Community 106"
Cohesion: 0.11
Nodes (17): get_current_user(), get_current_user_by_token(), Session, 根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期), 获取当前用户(sync 依赖,配合 sync 路由在线程池执行,避免阻塞事件循环)。, _auto_fill_create_dept_id(), get_db(), ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID (+9 more)
Cohesion: 0.67
Nodes (3): get_db_current_user_optional(), Session, 有 Bearer 且为 admin/super_admin 时返回上下文,否则 None(供三方 H5 无登录调用)。
### Community 107 - "apply_pl_scope"
Cohesion: 0.16
Nodes (29): create_instance(), create_process_def(), create_task(), get_all_tasks_for_business(), get_instance(), get_latest_version(), get_nodes_by_version(), get_pending_tasks_by_node() (+21 more)
Cohesion: 0.15
Nodes (32): create_instance(), create_process_def(), create_task(), get_all_tasks_for_business(), get_instance(), get_latest_version(), get_nodes_by_version(), get_pending_tasks_by_node() (+24 more)
### Community 109 - "Community 109"
Cohesion: 0.16
Nodes (22): bind_vehicle_driver(), create_vehicle(), get_vehicle(), update_vehicle(), _vehicle_to_detail(), _vehicle_to_read(), generate_uuid(), PlVehiclePersonnel (+14 more)
Cohesion: 0.17
Nodes (21): bind_vehicle_driver(), create_vehicle(), get_vehicle(), list_vehicles(), update_vehicle(), _vehicle_to_detail(), _vehicle_to_read(), generate_uuid() (+13 more)
### Community 110 - "Base"
Cohesion: 0.22
Nodes (10): Config, decrypt_login_payload(), ensure_initialized(), extract_login_credentials(), get_public_pem(), Any, 登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。, Base64 密文 -> JSON 对象(须含 username、password、ts 毫秒时间戳)。 (+2 more)
Cohesion: 0.31
Nodes (9): decrypt_login_payload(), ensure_initialized(), extract_login_credentials(), get_public_pem(), Any, 登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。, Base64 密文 -> JSON 对象(须含 username、password、ts 毫秒时间戳)。, 从请求体解析用户名、密码。 返回 (username, password, error_message);error_message 非空时表示失败。 (+1 more)
### Community 111 - "Community 111"
Cohesion: 0.28
Nodes (14): _assert_editable(), _build_public_page(), _format_file_size(), _get_inventory_by_token(), get_public_inventory(), _parse_feedback_images(), Session, UploadFile (+6 more)
### Community 112 - "SysApiRequestLog"
Cohesion: 0.50
Nodes (4): ApiRequestLogCRUD, Session, SysApiRequestLog, SysApiRequestLogHis
Cohesion: 0.16
Nodes (15): ApiRequestLogCRUD, Session, list_ethnics(), Any, Session, 民族码表 CRUD(全局 sys_ethnic), _row_to_dict(), 数据模型(与 docs/sql/shanxia2.0.sql 全库导出基线对齐的核心系统表) (+7 more)
### Community 113 - "quote_share_log.py"
Cohesion: 0.26
Nodes (12): list_share_logs(), _parse_user_agent(), Any, Session, CRM 报价单分享访问日志 CRUD — 对照 CrmQuoteShareLogServiceImpl.java, Java: statisticsVisits, 简易 User-Agent 解析(替代 Hutool UserAgentUtil), Java: queryLogsByQuoteId (+4 more)
### Community 114 - "db_models.py"
Cohesion: 0.24
Nodes (12): DbSequence, 地磅(db)模块数据模型 — 对齐 docs/sql/db_tables.sql, _allocate_inbound_outbound_id(), _ensure_sequence_row(), max_numeric_inbound_outbound_id(), next_inbound_outbound_id(), Session, 出入库单 id 生成 — 租户内纯数字自增,并发安全。 (+4 more)
Cohesion: 0.16
Nodes (17): list_public_vehicle_plates(), Session, 地磅公共只读:免登车牌 options(现场填写页), 免登:按出入库/计划解析 tenant_no,返回 pl_vehicle 车牌(self + carrier)。, _resolve_tenant_no(), DbSequence, 地磅(db)模块数据模型 — 对齐 docs/sql/db_tables.sql, _allocate_inbound_outbound_id() (+9 more)
### Community 115 - "site.py"
Cohesion: 0.15
Nodes (34): approve_carrier(), create_driver(), create_personnel(), delete_driver(), delete_personnel(), delete_vehicle(), get_driver(), get_personnel() (+26 more)
Cohesion: 0.09
Nodes (55): approve_carrier(), create_carrier(), create_driver(), create_personnel(), delete_carrier(), delete_driver(), delete_personnel(), delete_vehicle() (+47 more)
### Community 116 - "Community 116"
Cohesion: 0.17
Nodes (28): batch_insert_quote_products(), calculate_subtotal(), _decimal_value(), delete_products_by_quote_id(), _ensure_quote_parent_scope(), _get_field(), get_quote_product(), insert_quote_product() (+20 more)
Cohesion: 0.18
Nodes (27): calculate_subtotal(), _decimal_value(), delete_products_by_quote_id(), _ensure_quote_parent_scope(), _get_field(), get_quote_product(), insert_quote_product(), list_products_by_quote_ids() (+19 more)
### Community 118 - "Community 118"
Cohesion: 0.20
@@ -618,21 +616,25 @@ Cohesion: 0.12
Nodes (24): _auto_contract_name_body(), generate_contract_name(), 按面板单位全称精确匹配交易主体/客户主数据,取 shortName;对不上则用全称。, 前端预览误用单位全称时,名称片段会等于面板/客户/开票全称。, 按面板供方(partyA)-需方(partyB)生成:{供方简称}-{需方简称}({合同编号})。 - 名称为空:按主数据简称自动生成 - 名, resolve_party_short_name(), _strip_contract_name_no_suffix(), _user_contract_name_uses_party_full_name() (+16 more)
### Community 130 - "datetime_parse.py"
Cohesion: 0.23
Nodes (14): _claims_from_auth(), _format_body_bytes(), _persist_log(), Any, Request, 统一记录 API 请求/响应出入参的中间件, _redact_obj(), _schedule_persist_log() (+6 more)
Cohesion: 0.15
Nodes (24): ApiRequestLogMiddleware, _claims_from_auth(), _format_body_bytes(), _persist_log(), Any, Request, 统一记录 API 请求/响应出入参的中间件, _redact_obj() (+16 more)
### Community 131 - "LocalStorage"
Cohesion: 0.60
Nodes (3): assert_contract_editable_for_update(), test_assert_allows_editable(), test_assert_rejects_non_editable()
### Community 132 - "crm_supplier_hazard.py"
Cohesion: 0.47
Nodes (5): list_public_vehicle_plates(), Session, 地磅公共只读:免登车牌 options(现场填写页), 免登:按出入库/计划解析 tenant_no,返回 pl_vehicle 车牌(self + carrier)。, _resolve_tenant_no()
Cohesion: 0.18
Nodes (12): invoice_info_add(), invoice_info_by_customer(), _invoice_info_by_customer_impl(), invoice_info_delete(), invoice_info_list(), invoice_info_set_default(), 按客户ID查询开票信息(与 by-customer 等价), InvoiceInfoByCustomerBody (+4 more)
### Community 134 - "Community 134"
Cohesion: 0.25
Nodes (18): batch_generate_sample_codes(), batch_issue_sample_codes(), batch_revoke_sample_codes(), create_sample_code(), get_sample_code(), list_sample_codes(), _parse_issued_time(), Any (+10 more)
### Community 135 - "unsettled_plans_q_filter"
Cohesion: 0.16
Nodes (23): Session, recognize_cert(), RecognizeCertBody, cancel_apply(), create_apply(), create_process(), delete_applies(), delete_processes() (+15 more)
### Community 136 - "Community 136"
Cohesion: 0.19
Nodes (18): create_role(), get_role(), get_role_data_scope(), get_role_menu_ids(), list_roles(), Any, Session, 角色 CRUD(sys_role / sys_role_menu / sys_role_data_scope_detail) (+10 more)
@@ -651,23 +653,23 @@ Nodes (15): get_storage(), download_file_bytes(), file_stream(), get_access_url(
### Community 141 - "PlTransport"
Cohesion: 0.19
Nodes (15): approve_task(), _assert_wf_instance_in_scope(), create_process_def(), delete_process_def(), get_business_all_tasks(), _get_business_form_fields(), get_designer_data(), get_instance_detail() (+7 more)
Nodes (23): approve_task(), _assert_wf_instance_in_scope(), _business_type_label(), create_process_def(), delete_process_def(), _enrich_task_list(), get_business_all_tasks(), _get_business_form_fields() (+15 more)
### Community 143 - "SysEthnic"
Cohesion: 0.22
Nodes (17): _apply_list_filters(), create_supplier_info(), get_supplier_info(), list_all_supplier_info(), list_supplier_info(), Any, Session, CRM 供方信息 CRUD — 对照 CrmSupplierInfoServiceImpl.java (+9 more)
Cohesion: 0.21
Nodes (17): apply_crm_create_by_scope(), _apply_list_filters(), create_supplier_info(), list_all_supplier_info(), list_supplier_info(), Any, Session, CRM 供方信息 CRUD — 对照 CrmSupplierInfoServiceImpl.java (+9 more)
### Community 144 - "dict_data.py"
Cohesion: 0.27
Nodes (11): create_dict_data(), get_dict_data(), list_dict_data(), list_dict_data_options(), Any, Session, 字典数据 CRUD(sys_dict_data), 字典下拉选项:租户主数据,忽略数据范围(user_info 保留兼容调用方,不参与过滤)。 (+3 more)
### Community 145 - "resolve_crm_product"
Cohesion: 0.24
Nodes (9): _dispatch_local(), Any, 工作流回调服务 —— 流程状态变更时通知业务系统, 注册本地回调函数。当 callback_url 以 path 开头时直接调用 fn。, 尝试本地直调。返回 True 表示已处理,False 表示无匹配的本地回调。, 流程实例状态变更后,向业务系统发送回调通知。 优先级: 1. 如果 callback_url 是内部路径(以 / 开头),优先尝试本地直调, register_local_callback(), trigger_callback() (+1 more)
Cohesion: 0.17
Nodes (11): price_letter_add(), price_letter_detail(), price_letter_list(), price_letter_update(), price_letter_void(), PriceLetterCreateBody, PriceLetterDetailBody, PriceLetterListBody (+3 more)
### Community 146 - "__init__.py"
Cohesion: 0.23
Nodes (8): menu_badge_stats(), Session, Session, recognize_cert(), RecognizeCertBody, RecognizeCertResult, get_db_current_user(), PlMenuBadgeStatsRead
Cohesion: 0.22
Nodes (11): menu_badge_stats(), Session, RecognizeCertResult, _auto_fill_create_dept_id(), get_db(), ORM before_insert 钩子:当 create_dept_id 为空时,自动从请求上下文填充当前用户部门 ID, get_db_current_user(), 地磅模块认证适配:门户 JWT 用户 → db 业务上下文。 (+3 more)
### Community 147 - "Community 147"
Cohesion: 0.37
@@ -691,47 +693,47 @@ Nodes (8): create_oss(), get_oss_by_id(), get_oss_by_url(), Session, 按主键 i
### Community 159 - "customer_update"
Cohesion: 0.11
Nodes (35): 报销模块认证适配:门户 JWT 用户 → bx 业务上下文。, BxReimburseInvoice, BxReimburseOffset, BxWorkflowNode, 报销(bx)模块数据模型 — 对齐 docs/sql/20260606_bx_tables.sql, filter_current_cycle_approvals(), 审批轮次过滤 — 驳回后重新提交时,进度接口仅展示当前轮次。, 审批进度仅展示当前轮次;完整历史由 get_approval_history 返回。 (+27 more)
Nodes (33): filter_current_cycle_approvals(), 审批轮次过滤 — 驳回后重新提交时,进度接口仅展示当前轮次。, 审批进度仅展示当前轮次;完整历史由 get_approval_history 返回。, allocate_reimburse_title_seq(), format_reimburse_title(), generate_apply_code(), generate_title(), is_auto_reimburse_title() (+25 more)
### Community 160 - "register_local_callback"
Cohesion: 0.07
Nodes (38): API 路由包 — 山峡化工生产一体化门户, create_leave(), delete_leave(), get_leave(), _leave_local_callback(), leave_workflow_callback(), list_leaves(), Session (+30 more)
Cohesion: 0.09
Nodes (29): API 路由包 — 山峡化工生产一体化门户, create_leave(), delete_leave(), get_leave(), _leave_local_callback(), leave_workflow_callback(), list_leaves(), Session (+21 more)
### Community 161 - "backfill_crm_contract_attachment_urls.py"
Cohesion: 0.33
Nodes (8): Any, should_skip_release(), summarize_entries(), 提交占用可超过已上传总额,余额可为负(补票后再回升)。, test_release_idempotent_guard(), test_summarize_allows_negative_balance(), test_summarize_delete_and_release(), test_summarize_upload_and_reimburse()
Cohesion: 0.24
Nodes (11): extract_minio_object_key(), join_relative_urls(), normalize_oss_storage_url(), MinIO 附件 URL 规范化(数据迁移共用)。 背景 ---- CRM / 地磅 / 报销与 shanxia2.0 共用同一 MinIO(bucket 默, 业务表 OSS ID 串 → 相对 URL 串(用于客户证照、跟进附件等)。, 去掉预签名 query(``?X-Amz-...``)。, 将绝对/相对 URL 规范为 MinIO object key(不含 bucket)。, 迁移 CRM ``sys_oss`` 行:``url`` + ``file_name`` → 门户相对路径。 (+3 more)
### Community 162 - ".to_tenant_user_dict"
Cohesion: 0.42
Nodes (7): default_settlement_clause(), test_advance_payment_clause(), test_arrive_payment_clause(), test_empty_falls_back_to_arrive(), test_monthly_settlement_clause_uses_label(), test_unknown_falls_back_to_arrive(), test_volume_quarterly_other_labels()
### Community 163 - "__init__.py"
Cohesion: 0.20
Nodes (15): bind_biz(), delete_attachment(), download_file(), list_by_biz(), _parse_id_list(), preview_attachment(), Session, UploadFile (+7 more)
Cohesion: 0.13
Nodes (22): bind_biz(), delete_attachment(), download_file(), list_by_biz(), _parse_id_list(), preview_attachment(), Session, UploadFile (+14 more)
### Community 164 - "get_client_ip"
Cohesion: 0.11
Nodes (36): _avatar_url_field(), _build_user_info_payload(), _jwt_user_payload(), logout(), 公共接口(Web 登录、刷新 Token、登出;用户模型对齐 docs/sql/shanxia2.0.sql 基线), 登出:吊销 Redis 会话(若已配置 REDIS_HOST)。无 Token 或已失效时仍返回成功(幂等)。, 与 web-admin 静态路由 meta.roles(admin/super_admin)对齐的单元素数组。, 与 web-admin `userInfo` 字段约定一致。 (+28 more)
Cohesion: 0.10
Nodes (43): _avatar_url_field(), _build_user_info_payload(), _jwt_user_payload(), logout(), 公共接口(Web 登录、刷新 Token、登出;用户模型对齐 docs/sql/shanxia2.0.sql 基线), 登出:吊销 Redis 会话(若已配置 REDIS_HOST)。无 Token 或已失效时仍返回成功(幂等)。, 与 web-admin 静态路由 meta.roles(admin/super_admin)对齐的单元素数组。, 与 web-admin `userInfo` 字段约定一致。 (+35 more)
### Community 170 - "test_quote_approver_setting.py"
Cohesion: 0.22
Nodes (3): BaseStorage, 带下载文件名的访问 URL;默认实现为普通访问地址。, 浏览器内联预览 URL;默认实现为普通访问地址。
### Community 171 - "minio_url.py"
Cohesion: 0.12
Nodes (29): pool_rule_add(), pool_rule_delete(), pool_rule_detail(), pool_rule_execute(), pool_rule_list(), pool_rule_update(), pool_rule_update_status(), create_pool_rule() (+21 more)
Cohesion: 0.11
Nodes (31): get_pool_record(), list_pool_records(), Any, Session, _row_to_dict(), total_pages(), create_pool_rule(), delete_pool_rules() (+23 more)
### Community 172 - "apply_pl_scope"
Cohesion: 0.38
Nodes (7): change_current_user_password(), get_current_user_profile(), public_quote_share(), Request, Session, 获取当前用户信息(与 sys_user 字段对应)。, 公开分享查看报价单 — Java: GET /share/{shareCode}(无 JWT)
Cohesion: 0.31
Nodes (9): change_current_user_password(), get_current_user_profile(), get_web_auth_menu_codes(), public_quote_share(), Request, Session, 获取当前用户信息(与 sys_user 字段对应)。, 获取当前用户菜单权限标识(sys_menu.perms,经角色继承)。 (+1 more)
### Community 173 - "resolve_create_time_bounds"
Cohesion: 0.07
Nodes (52): _build_page(), _get_by_token(), _make_handlers(), _models(), Session, 运输计划 · 入库/出库单现场免登录公共 API, BizAttachment, PlDocumentReminder (+44 more)
Cohesion: 0.04
Nodes (91): _build_page(), _get_by_token(), _models(), Session, 运输计划 · 入库/出库单现场免登录公共 API, SoftDeleteModel, BizAttachment, PlDriver (+83 more)
### Community 174 - "register_local_callback"
Cohesion: 0.11
Nodes (31): _build_public_page(), _build_site_product_read(), _format_file_size(), get_public_site(), _get_site_link_by_token(), _parse_feedback_images(), Session, UploadFile (+23 more)
Cohesion: 0.07
Nodes (56): 返回 (作废, 归档)。现场链接实际走入库/出库单公共页。, _resolve_io_order_link_flags(), _build_public_page(), _build_site_product_read(), _format_file_size(), get_public_site(), _get_site_link_by_token(), _parse_feedback_images() (+48 more)
### Community 179 - "test_pl_vehicle_personnel_photo_schema.py"
Cohesion: 0.27
@@ -739,7 +741,7 @@ Nodes (16): add_favorite(), count_active(), find_active(), find_soft_deleted(),
### Community 180 - "OSSStorage"
Cohesion: 0.06
Nodes (63): _build_driver_url(), cancel_plan(), cancel_plan_wait_notice(), count_plans_by_contract(), create_from_contract(), create_plan(), _determine_plan_type(), _ensure_subpack_slip_no() (+55 more)
Nodes (73): archive_plan(), _build_driver_url(), cancel_plan(), cancel_plan_wait_notice(), count_plans_by_contract(), create_from_contract(), create_plan(), delete_plan() (+65 more)
### Community 181 - "allocate_next_biz_no"
Cohesion: 0.28
@@ -749,21 +751,17 @@ Nodes (11): assert_products_allowed_for_supplier(), enrich_products_with_hazard_
Cohesion: 0.45
Nodes (11): _customer_base_query(), get_follow_statistics(), get_industry_statistics(), get_level_statistics(), get_overview_statistics(), get_owner_statistics(), get_source_statistics(), get_trend_statistics() (+3 more)
### Community 183 - "resolve_create_time_bounds"
Cohesion: 0.49
Nodes (10): apply_pl_scope(), Session, build_menu_badge_counts(), count_document_reminder_expired_pending(), count_freight_approval_pending(), count_freight_disburse_pending(), _count_pending_applies(), count_plan_archive_pending() (+2 more)
### Community 184 - "excel_export.py"
Cohesion: 0.27
Nodes (8): CRM 模块 Excel 导出列定义(字段与字典类型对齐 Java *Vo @ExcelDictFormat)。, _build_workbook(), DictLabelResolver, ExportColumn, Any, Excel 导出工具:集中处理字典 code → label(对齐 Java ExcelDictConvert / ExcelDictPreloadConver, 导出列定义,dict_type 非空时自动将字典 value 转为 label。, 导出单元格解析:按列配置做字典翻译或自定义格式化。
### Community 187 - "price_letter_detail"
Cohesion: 0.67
Nodes (3): Web 管理端约定角色(由 sys_role.role_name 映射而来,非数据库枚举), UserRole, str
### Community 188 - "context.py"
Cohesion: 0.67
Nodes (3): parse_optional_plan_datetime(), datetime, 运输计划相关日期时间解析:前端 date-picker 仅传 YYYY-MM-DD。
### Community 193 - "storage.py"
Cohesion: 0.13
Nodes (18): pool_customer_assign(), pool_customer_claim(), pool_customer_list(), pool_record_detail(), pool_record_list(), get_pool_record(), list_pool_records(), Any (+10 more)
Cohesion: 0.17
Nodes (11): pool_customer_assign(), pool_customer_claim(), pool_customer_list(), pool_record_detail(), pool_record_list(), PoolAssignBody, PoolClaimBody, PoolCustomerListBody (+3 more)
### Community 194 - "get_current_user_by_token"
Cohesion: 0.40
@@ -777,13 +775,9 @@ Nodes (3): Any, 供 get_tenant_no 等门户工具使用。, 与门户 JWT / appl
Cohesion: 0.20
Nodes (4): _guess_preview_content_type(), OSSStorage, 文件存储工具模块 支持多种存储方式: 1. 本地存储 (local) - 默认 2. 七牛云存储 (qiniu) - 推荐生产环境使用 3. 阿里云OSS (, 按对象键后缀推断内联预览 Content-Type(纠正上传时未写入 MIME 的情况)。
### Community 199 - "unsettled_plans_q_filter"
Cohesion: 0.36
Nodes (7): list_ethnics(), Any, Session, 民族码表 CRUD(全局 sys_ethnic), _row_to_dict(), 民族码表 sys_ethnic(国标 GB/T 3304,全局), SysEthnic
### Community 200 - "register_local_callback"
Cohesion: 0.12
Nodes (38): apply_site_feedback(), build_io_order_site_url(), create_io_order_for_transport(), _dibang_qty_by_plan_product(), enrich_io_items_with_brand_feedback(), enrich_io_order_dict(), _format_io_product_summary_line(), get_active_io_order_for_plan() (+30 more)
Cohesion: 0.51
Nodes (10): apply_site_feedback(), OrderItem, _header(), _item(), test_apply_site_feedback_does_not_reset_first_submitted_at(), test_apply_site_feedback_keeps_in_progress_when_requested(), test_apply_site_feedback_rejects_already_voided(), test_apply_site_feedback_rejects_invalid_status() (+2 more)
### Community 203 - "__init__.py"
Cohesion: 0.09
@@ -798,8 +792,8 @@ Cohesion: 0.18
Nodes (10): 1. 创建虚拟环境, 2. 安装依赖, 3. 配置环境变量, 4. 启动服务, API 路由分组, shanxia2.0 后端骨架(FastAPI), 开发规范, 快速开始 (+2 more)
### Community 220 - "api_crypto_middleware.py"
Cohesion: 0.15
Nodes (21): _claims_from_auth(), _coerce_post_method_override_to_get(), _get_redis_client(), _is_crypto_api(), _json_error_response(), _mark_nonce_once(), _nonce_key(), Redis (+13 more)
Cohesion: 0.13
Nodes (22): _claims_from_auth(), _coerce_post_method_override_to_get(), _get_redis_client(), _is_crypto_api(), _json_error_response(), _mark_nonce_once(), _nonce_key(), Redis (+14 more)
### Community 237 - "order_status_compat.py"
Cohesion: 0.36
@@ -816,22 +810,22 @@ Nodes (6): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时
## Knowledge Gaps
- **30 isolated node(s):** `Config`, `Config`, `Config`, `Config`, `Config` (+25 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **18 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **17 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `generate_uuid()` connect `Community 109` to `Community 0`, `plan.py`, `Community 4`, `Community 5`, `Community 6`, `Community 134`, `Community 8`, `statistics.py`, `Community 136`, `Community 11`, `Community 13`, `Community 14`, `SysEthnic`, `dict_data.py`, `Community 15`, `Community 16`, `Community 21`, `Community 24`, `response.py`, `Community 25`, `utils.py`, `Community 29`, `Community 28`, `customer_update`, `Community 33`, `get_client_ip`, `Community 36`, `Community 39`, `minio_url.py`, `Community 43`, `Community 45`, `resolve_create_time_bounds`, `Community 48`, `OSSStorage`, `Community 53`, `Community 58`, `Community 61`, `Community 62`, `Community 64`, `storage.py`, `get_current_user_by_token`, `Community 66`, `Community 68`, `Community 65`, `Community 67`, `Community 71`, `register_local_callback`, `Community 83`, `Community 86`, `Community 87`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `Community 95`, `apply_crm_create_by_scope`, `apply_pl_scope`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 122`, `customer_pool.py`?**
_High betweenness centrality (0.093) - this node is a cross-community bridge._
- **Why does `get_tenant_no()` connect `Community 7` to `Community 0`, `Community 1`, `Community 2`, `Community 5`, `Community 8`, `Community 11`, `Community 12`, `Community 13`, `Community 14`, `Community 15`, `Community 16`, `Community 18`, `Community 19`, `__init__.py`, `Community 24`, `Community 27`, `customer_update`, `Community 33`, `__init__.py`, `Community 38`, `minio_url.py`, `Community 43`, `Community 45`, `Community 50`, `Community 51`, `OSSStorage`, `Community 54`, `Community 58`, `Community 60`, `Community 62`, `Community 63`, `Community 64`, `storage.py`, `Community 66`, `Community 65`, `Community 71`, `Community 78`, `Community 109`, `site.py`, `Community 127`?**
- **Why does `generate_uuid()` connect `Community 109` to `Community 0`, `plan.py`, `Community 4`, `Community 5`, `Community 6`, `Community 134`, `Community 8`, `statistics.py`, `Community 136`, `Community 11`, `SysEthnic`, `dict_data.py`, `Community 15`, `Community 18`, `Community 16`, `Community 21`, `Community 24`, `response.py`, `Community 25`, `utils.py`, `Community 29`, `Community 28`, `customer_update`, `Community 33`, `get_client_ip`, `Community 36`, `Community 39`, `minio_url.py`, `Community 43`, `Community 45`, `resolve_create_time_bounds`, `Community 48`, `OSSStorage`, `Community 53`, `Community 58`, `Community 61`, `Community 62`, `Community 64`, `Community 65`, `get_current_user_by_token`, `Community 66`, `Community 68`, `Community 67`, `Community 71`, `Community 83`, `Community 86`, `Community 87`, `Any`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `Community 95`, `apply_crm_create_by_scope`, `apply_pl_scope`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 122`, `customer_pool.py`?**
_High betweenness centrality (0.088) - this node is a cross-community bridge._
- **Why does `get_tenant_no()` connect `Community 7` to `Community 0`, `Community 1`, `Community 2`, `crm_supplier_hazard.py`, `Community 5`, `unsettled_plans_q_filter`, `Community 11`, `Community 12`, `Community 13`, `Community 15`, `Community 16`, `resolve_crm_product`, `Community 18`, `Community 19`, `__init__.py`, `Community 24`, `Community 27`, `customer_update`, `Community 33`, `__init__.py`, `Community 38`, `Community 43`, `Community 45`, `Community 50`, `Community 51`, `OSSStorage`, `Community 54`, `Community 58`, `Community 60`, `Community 62`, `Community 63`, `Community 64`, `storage.py`, `Community 66`, `Community 72`, `Community 109`, `site.py`, `Community 127`?**
_High betweenness centrality (0.073) - this node is a cross-community bridge._
- **Why does `Settings` connect `price_letter_detail` to `_ensure_subpack_slip_no`, `Community 35`, `Community 67`, `Community 37`, `Community 73`, `Community 42`, `Base`, `Community 52`, `Community 59`, `Community 30`?**
_High betweenness centrality (0.069) - this node is a cross-community bridge._
- **Why does `BaseModel` connect `Community 12` to `Community 0`, `Community 1`, `Community 2`, `Community 3`, `crm_supplier_hazard.py`, `Community 5`, `unsettled_plans_q_filter`, `Community 7`, `Community 11`, `Community 13`, `Community 15`, `Community 16`, `resolve_crm_product`, `__init__.py`, `Community 18`, `Community 24`, `Community 26`, `Community 27`, `register_local_callback`, `Community 33`, `Community 34`, `__init__.py`, `Community 38`, `Community 43`, `Community 45`, `resolve_create_time_bounds`, `Community 50`, `Community 51`, `OSSStorage`, `Community 54`, `Community 58`, `Community 60`, `Community 62`, `Community 63`, `Community 64`, `storage.py`, `Community 66`, `Community 65`, `Community 71`, `Community 109`, `Community 111`, `site.py`, `Community 119`, `Community 127`?**
_High betweenness centrality (0.070) - this node is a cross-community bridge._
- **Are the 8 inferred relationships involving `DbUserContext` (e.g. with `InventoryRelatedData` and `AutoGenerateMonthlyResult`) actually correct?**
_`DbUserContext` has 8 INFERRED edges - model-reasoned connections that need verification._
- **What connects `API 路由包 — 山峡化工生产一体化门户`, `返回运营端角色下拉选项(label=库中角色名,value=Web 角色码)。`, `返回用户下拉选项(label=昵称,value=用户ID,附带 nickName/userNo)。 供申请人/审批人等选择场景使用,返回本租户全部有效` to the rest of the system?**
_553 weakly-connected nodes found - possible documentation gaps or missing edges._
_554 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Community 1` be split into smaller, more focused modules?**
_Cohesion score 0.07804878048780488 - nodes in this community are weakly interconnected._
- **Should `Community 3` be split into smaller, more focused modules?**
_Cohesion score 0.0896276036187671 - nodes in this community are weakly interconnected._
_Cohesion score 0.08261945554920998 - nodes in this community are weakly interconnected._
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "label": "test_crm_settlement_clause.py", "file_type": "code", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_advance_payment_clause", "label": "test_advance_payment_clause()", "file_type": "code", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L4"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_arrive_payment_clause", "label": "test_arrive_payment_clause()", "file_type": "code", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L8"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_monthly_settlement_clause_uses_label", "label": "test_monthly_settlement_clause_uses_label()", "file_type": "code", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L12"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_volume_quarterly_other_labels", "label": "test_volume_quarterly_other_labels()", "file_type": "code", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L19"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_unknown_falls_back_to_arrive", "label": "test_unknown_falls_back_to_arrive()", "file_type": "code", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L25"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_empty_falls_back_to_arrive", "label": "test_empty_falls_back_to_arrive()", "file_type": "code", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L29"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "target": "app_services_crm_settlement_clause", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_advance_payment_clause", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_arrive_payment_clause", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_monthly_settlement_clause_uses_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_volume_quarterly_other_labels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L19", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_unknown_falls_back_to_arrive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L25", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_empty_falls_back_to_arrive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_crm_settlement_clause.py", "source_location": "L29", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_advance_payment_clause", "callee": "default_settlement_clause", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_crm_settlement_clause.py", "source_location": "L5", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_crm_settlement_clause_test_arrive_payment_clause", "callee": "default_settlement_clause", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backeLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_py", "label": "reimburse.py", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_coerce_id", "label": "_coerce_id()", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L9"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimbursedetailcreate", "label": "ReimburseDetailCreate", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L15"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimbursedetailcreate_validate_expense_item_id", "label": ".validate_expense_item_id()", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L25"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimbursedetailout", "label": "ReimburseDetailOut", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L32"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseinvoicelinkin", "label": "ReimburseInvoiceLinkIn", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L43"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseinvoicelinkin_validate_invoice_id", "label": ".validate_invoice_id()", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L53"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseinvoicelinkin_coerce_attachment_id", "label": ".coerce_attachment_id()", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L61"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseinvoicebriefout", "label": "ReimburseInvoiceBriefOut", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L65"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapplycreate", "label": "ReimburseApplyCreate", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L78"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapplycreate_details_must_not_be_empty", "label": ".details_must_not_be_empty()", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L91"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapplycreate_coerce_applicant_id", "label": ".coerce_applicant_id()", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L98"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapplyupdate", "label": "ReimburseApplyUpdate", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L102"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapplyupdate_coerce_applicant_id", "label": ".coerce_applicant_id()", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L115"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimbursesubmitbody", "label": "ReimburseSubmitBody", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L119"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapplyout", "label": "ReimburseApplyOut", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L126"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapprovalcreate", "label": "ReimburseApprovalCreate", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L156"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapprovalout", "label": "ReimburseApprovalOut", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L163"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimbursemystatsout", "label": "ReimburseMyStatsOut", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L176"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_reimburseapproverpendingstatsout", "label": "ReimburseApproverPendingStatsOut", "file_type": "code", "source_file": "app/schemas/bx/reimburse.py", "source_location": "L188"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_schemas_bx_reimburse_payrequest", "label": "PayRequest", "file_type": "code", "source_file":Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_py", "label": "crm_settlement_clause.py", "file_type": "code", "source_file": "app/services/crm_settlement_clause.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_default_settlement_clause", "label": "default_settlement_clause()", "file_type": "code", "source_file": "app/services/crm_settlement_clause.py", "source_location": "L23"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/crm_settlement_clause.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_default_settlement_clause", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/crm_settlement_clause.py", "source_location": "L23", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_default_settlement_clause", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/crm_settlement_clause.py", "source_location": "L24", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_default_settlement_clause", "callee": "ADVANCE_CLAUSE", "is_member_call": false, "indirect": true, "context": "return", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/crm_settlement_clause.py", "source_location": "L26"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_default_settlement_clause", "callee": "ARRIVE_CLAUSE", "is_member_call": false, "indirect": true, "context": "return", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/crm_settlement_clause.py", "source_location": "L34"}], "callable_nids": ["users_wuzilong_work_00code_shanxia2_0_backend_app_services_crm_settlement_clause_default_settlement_clause"]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_py", "label": "bx_codegen.py", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_generate_apply_code", "label": "generate_apply_code()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L15"}, {"id": "session", "label": "Session", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_parse_reimburse_date", "label": "parse_reimburse_date()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L40"}, {"id": "date", "label": "date", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py"}, {"id": "datetime", "label": "datetime", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_parse_optional_date", "label": "parse_optional_date()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L53"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_format_reimburse_title", "label": "format_reimburse_title()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L67"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_is_auto_reimburse_title", "label": "is_auto_reimburse_title()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L71"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_preview_reimburse_title_seq", "label": "preview_reimburse_title_seq()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L75"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_allocate_reimburse_title_seq", "label": "allocate_reimburse_title_seq()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L94"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_generate_title", "label": "generate_title()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L116"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_resolve_reimburse_title", "label": "resolve_reimburse_title()", "file_type": "code", "source_file": "app/utils/bx_codegen.py", "source_location": "L129"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_rationale_1", "label": "\u62a5\u9500\u5355\u53f7/\u6807\u9898\u751f\u6210\uff08\u4ece bx-backend \u8fc1\u79fb\uff0c\u589e\u52a0 tenant_no \u9694\u79bb\uff09\u3002", "file_type": "rationale", "source_file": "app/utils/bx_codegen.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_rationale_16", "label": "\u751f\u6210\u987a\u5e8f\u5355\u53f7\uff1a{prefix}{YYYYMMDD}{3\u4f4d\u5e8f\u53f7}\u3002 prefix \u793a\u4f8b\uff1aBYJ\uff08\u5907\u7528\u91d1\uff09\u3001BX\uff08\u62a5\u9500\uff09\u3002", "file_type": "rationale", "source_file": "app/utils/bx_codegen.py", "source_location": "L16"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_rationale_54", "label": "\u53ef\u9009\u65e5\u671f\uff1a\u7a7a \u2192 None\uff1b\u5408\u6cd5 YYYY-MM-DD / date / datetime \u2192 date\u3002", "file_type": "rationale", "source_file": "app/utils/bx_codegen.py", "source_location": "L54"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_rationale_100", "label": "\u5206\u914d\u540c\u79df\u6237\u3001\u540c\u62a5\u9500\u65e5\u671f\u4e0b\u7684\u6807\u9898\u5e8f\u53f7\uff08MAX+1\uff09\u3002 \u914d\u5408 uk_tenant_reimburse_date_title_seq \u552f\u4e00\u7ea6\u675f\uff0c\u5e76\u53d1\u51b2\u7a81\u65f6\u7531\u4e0a", "file_type": "rationale", "source_file": "app/utils/bx_codegen.py", "source_location": "L100"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_rationale_123", "label": "\u9884\u89c8\u7528\u6807\u9898\u751f\u6210\uff08\u63d0\u4ea4\u65f6\u4ecd\u4f1a\u5728\u670d\u52a1\u7aef\u91cd\u65b0\u5206\u914d\u5e8f\u53f7\u4ee5\u4fdd\u8bc1\u5e76\u53d1\u5b89\u5168\uff09\u3002", "file_type": "rationale", "source_file": "app/utils/bx_codegen.py", "source_location": "L123"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_utils_bx_codegen_rationale_137", "label": "\u786e\u5b9a\u6700\u7ec8\u6807\u9898\u4e0e title_seq\u3002 - \u672a\u586b\u6807\u9898\u6216\u4ecd\u4e3a\u81ea\u52a8\u6807\u9898\u683c\u5f0f\u65f6\uff1a\u6309\u62a5\u9500\u65e5\u671f\u91cd\u65b0\u5206\u914d\uLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_py", "label": "reimburse.py", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_tenant", "label": "_tenant()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L30"}, {"id": "session", "label": "Session", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py"}, {"id": "bxusercontext", "label": "BxUserContext", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_build_details_data", "label": "_build_details_data()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L34"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_get_generated_title", "label": "get_generated_title()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L71"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_list_reimburses", "label": "list_reimburses()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L88"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_my_reimburses", "label": "my_reimburses()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L134"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_my_reimburse_stats", "label": "my_reimburse_stats()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L179"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_reimburse_status_counts", "label": "reimburse_status_counts()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L189"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_pending_approval", "label": "pending_approval()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L198"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_pending_approval_stats", "label": "pending_approval_stats()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L230"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_approved_by_me", "label": "approved_by_me()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L240"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_get_reimburse", "label": "get_reimburse()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L272"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_get_approvals", "label": "get_approvals()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L286"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_get_approval_history", "label": "get_approval_history()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L299"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_create_reimburse", "label": "create_reimburse()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L312"}, {"id": "reimburseapplycreate", "label": "ReimburseApplyCreate", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_update_reimburse", "label": "update_reimburse()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L366"}, {"id": "reimburseapplyupdate", "label": "ReimburseApplyUpdate", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_submit_reimburse", "label": "submit_reimburse()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L411"}, {"id": "reimbursesubmitbody", "label": "ReimburseSubmitBody", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_bx_reimburse_approve_reimburse", "label": "approve_reimburse()", "file_type": "code", "source_file": "app/api/bx/reimburse.py", "source_location": "L433"}, {"id": "reimburseapprovalcreate", "label": "ReimburseApprovalCreate", "fileLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_py", "label": "reimburse.py", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice", "label": "ReimburseService", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L56"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_tenant_no", "label": "._tenant_no()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L58"}, {"id": "session", "label": "Session", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py"}, {"id": "bxusercontext", "label": "BxUserContext", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_can_change_applicant", "label": ".can_change_applicant()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L62"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_resolve_applicant", "label": ".resolve_applicant()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L71"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_get_by_id", "label": ".get_by_id()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L109"}, {"id": "bxreimburseapply", "label": "BxReimburseApply", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_get_paged", "label": ".get_paged()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L122"}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_soft_delete", "label": ".soft_delete()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L136"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_workflow_nodes", "label": "._workflow_nodes()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L143"}, {"id": "bxworkflownode", "label": "BxWorkflowNode", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_pending_approval", "label": ".pending_approval()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L156"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_approved_by_me", "label": ".approved_by_me()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L222"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_has_debit_reimburse", "label": "._has_debit_reimburse()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L283"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_normalize_invoice_links", "label": ".normalize_invoice_links()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L297"}, {"id": "reimburseinvoicelinkin", "label": "ReimburseInvoiceLinkIn", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_sync_reimburse_invoices", "label": ".sync_reimburse_invoices()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L329"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_get_linked_invoice_ids", "label": ".get_linked_invoice_ids()", "file_type": "code", "source_file": "app/services/bx/reimburse.py", "source_location": "L418"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_reimburse_reimburseservice_get_linked_invoices_brief", "label": ".get_linked_invoLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_py", "label": "test_bx_optional_date.py", "file_type": "code", "source_file": "tests/test_bx_optional_date.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_none_and_blank", "label": "test_parse_optional_date_none_and_blank()", "file_type": "code", "source_file": "tests/test_bx_optional_date.py", "source_location": "L8"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_string_and_date", "label": "test_parse_optional_date_string_and_date()", "file_type": "code", "source_file": "tests/test_bx_optional_date.py", "source_location": "L14"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_invalid", "label": "test_parse_optional_date_invalid()", "file_type": "code", "source_file": "tests/test_bx_optional_date.py", "source_location": "L20"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_bx_optional_date.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_bx_optional_date.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_py", "target": "app_utils_bx_codegen", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_bx_optional_date.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_none_and_blank", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_bx_optional_date.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_string_and_date", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_bx_optional_date.py", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_invalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_bx_optional_date.py", "source_location": "L20", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_none_and_blank", "callee": "parse_optional_date", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_optional_date.py", "source_location": "L9", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_none_and_blank", "callee": "parse_optional_date", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_optional_date.py", "source_location": "L10", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_none_and_blank", "callee": "parse_optional_date", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_optional_date.py", "source_location": "L11", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_string_and_date", "callee": "parse_optional_date", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_optional_date.py", "source_location": "L15", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_string_and_date", "callee": "date", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_optional_date.py", "source_location": "L15", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_tests_test_bx_optional_date_test_parse_optional_date_string_and_date", "callee": "parse_optional_date", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_optional_date.py", "source_location": "L16", "receiver": null}, {"caller_nid": "users_wuzilong_work_00codeLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_py", "label": "bx_models.py", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxexpenseitem", "label": "BxExpenseItem", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L10"}, {"id": "base", "label": "Base", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxworkflowdef", "label": "BxWorkflowDef", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L33"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxworkflownode", "label": "BxWorkflowNode", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L62"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxadvanceapply", "label": "BxAdvanceApply", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L95"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxadvanceapproval", "label": "BxAdvanceApproval", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L128"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxreimburseapply", "label": "BxReimburseApply", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L151"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxreimbursedetail", "label": "BxReimburseDetail", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L189"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxreimburseapproval", "label": "BxReimburseApproval", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L211"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxreimburseoffset", "label": "BxReimburseOffset", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L234"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxattachment", "label": "BxAttachment", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L252"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxinvoice", "label": "BxInvoice", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L275"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxinvoiceledger", "label": "BxInvoiceLedger", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L297"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxreimburseinvoice", "label": "BxReimburseInvoice", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L322"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxinvoicewalletsummary", "label": "BxInvoiceWalletSummary", "file_type": "code", "source_file": "app/models/bx_models.py", "source_location": "L340"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_rationale_1", "label": "\u62a5\u9500\uff08bx\uff09\u6a21\u5757\u6570\u636e\u6a21\u578b \u2014 \u5bf9\u9f50 docs/sql/20260606_bx_tables.sql", "file_type": "rationale", "source_file": "app/models/bx_models.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/models/bx_models.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_py", "target": "sqlalchemy", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/models/bx_models.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/models/bx_models.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_py", "target": "app_core_database", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/models/bx_models.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_models_bx_models_bxexpenseitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/bx_models.py", "source_location": "L10", "weight": 1.0}, {"source": Line truncated
+1 -1
View File
@@ -1 +1 @@
{"/Users/zlwu/work/00code/shanxia2.0/backend/start-prod.sh":{"size":7357,"mtime_ns":1782639355476060453,"hash":"ca89869446be74a2bf2367b3b28f448580220859a39a84ad9613ac5fe35a8433"},"/Users/zlwu/work/00code/shanxia2.0/backend/start.sh":{"size":9548,"mtime_ns":1780114661446983244,"hash":"4d632863e8a0cd81194b491d83a0218a4157435ae812dec76a6f6197b4d48e57"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/__init__.py":{"size":21,"mtime_ns":1780113982281973984,"hash":"60a04ff08fd97084e83ea809fd13feda6d2848be20ebf309e31fc1dad7523230"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/main.py":{"size":6280,"mtime_ns":1782790852770448643,"hash":"8f9da799977bee7134d87a26ff8434ac5ef8eabb0b7368dd537eee49ad7fd00b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/__init__.py":{"size":2207,"mtime_ns":1783208067881286091,"hash":"313e6da0e91d743ce891dd283458c79b50b24c4d909dc96ca7b3fd9d2bfa5013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/auth.py":{"size":7457,"mtime_ns":1782790841500516545,"hash":"34bac56e1c2cb6215f4b5fa2dc32d77d4b4abca51428819eebf4afd269cc51cf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto.py":{"size":1870,"mtime_ns":1780108930724444498,"hash":"c04b748aea86890a5971f749523c7b17dbad1ddd6f9f7f07a5679d159c984e33"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/login_crypto.py":{"size":3858,"mtime_ns":1780108930725155710,"hash":"b82d51afabf2293a9cb1fb2e5f994c383948e7f47ea95fe674686b4f3f3342b1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/config.py":{"size":6958,"mtime_ns":1784032424448146538,"hash":"c2fb44aedb880733de28afa7f92d2c1c681eb600f821bbeba2bcda3933e5bc37"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_pay.py":{"size":23585,"mtime_ns":1780108930725768130,"hash":"3d52265ce65d21e7103f94afa1e8547aee0823b5ea6d65c50317436ac81fb4fc"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_request_log_middleware.py":{"size":11971,"mtime_ns":1782701669198208175,"hash":"0b84c32828939e6102bb3647691fa8f04b1f68e0e0e9f28127374cc44e19a11c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/database.py":{"size":1510,"mtime_ns":1782790847265601586,"hash":"8bc9c8ae62e2be2c6920036582ba448dfcd1711c41cebb62274ff6bc6ee14b0b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/security.py":{"size":728,"mtime_ns":1780108930725470004,"hash":"df0f01115064f7b8de1c81dbe9a6db39360c236610b68c33b3234a51d7f0025b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/request_payload.py":{"size":2842,"mtime_ns":1780108930725350836,"hash":"e9937151530ab1417ef297aef59111977725cf90be2a8fa76c00a0618789aba0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/__init__.py":{"size":61,"mtime_ns":1780108930724312414,"hash":"3dd1842ee59b0c804176b03b4b8a323bd4a252b7feb1bbc32db64f3a8928570e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/response.py":{"size":1824,"mtime_ns":1780108930725412462,"hash":"f1739352d65ea8287d76e282a59553aa8d63c97e35764c64ac378aa5bd9c347e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/menu_guard.py":{"size":1611,"mtime_ns":1780108930725223002,"hash":"3e26077288c3620a4780038b891a326206b45bffe00aca545bdae30172487235"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_collation.py":{"size":548,"mtime_ns":1780108930725025043,"hash":"0c680e25a18244ca839a7de6ed1f4313b33bc8da118d89c463aee1b6af00c6f9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/context.py":{"size":421,"mtime_ns":1780108930724824458,"hash":"83a10aee67162374993c10a30bf8bb8bd9c4b35cf48f42c832415ccebd91660f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/utils.py":{"size":1498,"mtime_ns":1780108930725607296,"hash":"09323693661c1d4560458b86a954128ccff82bbaf6522da0b44f24da99ddf9ea"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py":{"size":14141,"mtime_ns":1782855136810943216,"hash":"3ae2c413c10898a8adb3d6773870bafbfbc18c739c10e0e8b4f765b4b5ca6c08"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/order_status_compat.py":{"size":2828,"mtime_ns":1780108930725284669,"hash":"5349e5a0745ee6734c4a995337779307adefc46f453906171988a77de2081540"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/exceptions.py":{"size":4946,"mtime_ns":1780108930725084335,"hash":"79c997d964bca1a4f12f2b92fb1f181fdb9e2b3cf72eae39f4cc164d23794fd7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/data_scope.py":{"size":8043,"mtime_ns":1782648925694296304,"hash":"626dff86937e5cacec634ecbc61cd53d3763d760223a1d4ec7cd11f64e59a220"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/admin_request_json.py":{"size":2669,"mtime_ns":1780108930724378914,"hash":"4f68b3cf84291e7bddad6ecf4bb4d29ca5e1ec246a9f7f9c4cf5909d0ec1174a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto_middleware.py":{"size":10876,"mtime_ns":1782790001926627098,"hash":"b39f128b6612589ea6ac5babd30752e9585b3af07b82bb1ad53c9e3c0d90816f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_message.py":{"size":11194,"mtime_ns":1780108930725684255,"hash":"5086070deb14d99d1a69e419b2299ec4Line truncated
{"/Users/zlwu/work/00code/shanxia2.0/backend/start-prod.sh":{"size":7357,"mtime_ns":1782639355476060453,"hash":"ca89869446be74a2bf2367b3b28f448580220859a39a84ad9613ac5fe35a8433"},"/Users/zlwu/work/00code/shanxia2.0/backend/start.sh":{"size":9548,"mtime_ns":1780114661446983244,"hash":"4d632863e8a0cd81194b491d83a0218a4157435ae812dec76a6f6197b4d48e57"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/__init__.py":{"size":21,"mtime_ns":1780113982281973984,"hash":"60a04ff08fd97084e83ea809fd13feda6d2848be20ebf309e31fc1dad7523230"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/main.py":{"size":6280,"mtime_ns":1782790852770448643,"hash":"8f9da799977bee7134d87a26ff8434ac5ef8eabb0b7368dd537eee49ad7fd00b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/__init__.py":{"size":2207,"mtime_ns":1783208067881286091,"hash":"313e6da0e91d743ce891dd283458c79b50b24c4d909dc96ca7b3fd9d2bfa5013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/auth.py":{"size":7457,"mtime_ns":1782790841500516545,"hash":"34bac56e1c2cb6215f4b5fa2dc32d77d4b4abca51428819eebf4afd269cc51cf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto.py":{"size":1870,"mtime_ns":1780108930724444498,"hash":"c04b748aea86890a5971f749523c7b17dbad1ddd6f9f7f07a5679d159c984e33"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/login_crypto.py":{"size":3858,"mtime_ns":1780108930725155710,"hash":"b82d51afabf2293a9cb1fb2e5f994c383948e7f47ea95fe674686b4f3f3342b1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/config.py":{"size":6958,"mtime_ns":1784032424448146538,"hash":"c2fb44aedb880733de28afa7f92d2c1c681eb600f821bbeba2bcda3933e5bc37"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_pay.py":{"size":23585,"mtime_ns":1780108930725768130,"hash":"3d52265ce65d21e7103f94afa1e8547aee0823b5ea6d65c50317436ac81fb4fc"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_request_log_middleware.py":{"size":11971,"mtime_ns":1782701669198208175,"hash":"0b84c32828939e6102bb3647691fa8f04b1f68e0e0e9f28127374cc44e19a11c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/database.py":{"size":1510,"mtime_ns":1782790847265601586,"hash":"8bc9c8ae62e2be2c6920036582ba448dfcd1711c41cebb62274ff6bc6ee14b0b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/security.py":{"size":728,"mtime_ns":1780108930725470004,"hash":"df0f01115064f7b8de1c81dbe9a6db39360c236610b68c33b3234a51d7f0025b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/request_payload.py":{"size":2842,"mtime_ns":1780108930725350836,"hash":"e9937151530ab1417ef297aef59111977725cf90be2a8fa76c00a0618789aba0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/__init__.py":{"size":61,"mtime_ns":1780108930724312414,"hash":"3dd1842ee59b0c804176b03b4b8a323bd4a252b7feb1bbc32db64f3a8928570e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/response.py":{"size":1824,"mtime_ns":1780108930725412462,"hash":"f1739352d65ea8287d76e282a59553aa8d63c97e35764c64ac378aa5bd9c347e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/menu_guard.py":{"size":1611,"mtime_ns":1780108930725223002,"hash":"3e26077288c3620a4780038b891a326206b45bffe00aca545bdae30172487235"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_collation.py":{"size":548,"mtime_ns":1780108930725025043,"hash":"0c680e25a18244ca839a7de6ed1f4313b33bc8da118d89c463aee1b6af00c6f9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/context.py":{"size":421,"mtime_ns":1780108930724824458,"hash":"83a10aee67162374993c10a30bf8bb8bd9c4b35cf48f42c832415ccebd91660f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/utils.py":{"size":1498,"mtime_ns":1780108930725607296,"hash":"09323693661c1d4560458b86a954128ccff82bbaf6522da0b44f24da99ddf9ea"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py":{"size":14141,"mtime_ns":1782855136810943216,"hash":"3ae2c413c10898a8adb3d6773870bafbfbc18c739c10e0e8b4f765b4b5ca6c08"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/order_status_compat.py":{"size":2828,"mtime_ns":1780108930725284669,"hash":"5349e5a0745ee6734c4a995337779307adefc46f453906171988a77de2081540"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/exceptions.py":{"size":4946,"mtime_ns":1780108930725084335,"hash":"79c997d964bca1a4f12f2b92fb1f181fdb9e2b3cf72eae39f4cc164d23794fd7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/data_scope.py":{"size":8043,"mtime_ns":1782648925694296304,"hash":"626dff86937e5cacec634ecbc61cd53d3763d760223a1d4ec7cd11f64e59a220"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/admin_request_json.py":{"size":2669,"mtime_ns":1780108930724378914,"hash":"4f68b3cf84291e7bddad6ecf4bb4d29ca5e1ec246a9f7f9c4cf5909d0ec1174a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto_middleware.py":{"size":10876,"mtime_ns":1782790001926627098,"hash":"b39f128b6612589ea6ac5babd30752e9585b3af07b82bb1ad53c9e3c0d90816f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_message.py":{"size":11194,"mtime_ns":1780108930725684255,"hash":"5086070deb14d99d1a69e419b2299ec4Line truncated
+4 -4
View File
@@ -63,12 +63,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">4799 nodes &middot; 16478 edges &middot; 545 communities</div>
<div id="stats">4805 nodes &middot; 16492 edges &middot; 543 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "app_init", "label": "__init__.py", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 304, "community_name": "__init__.py", "source_file": "app/__init__.py", "file_type": "code", "degree": 0}, {"id": "app_api_init", "label": "__init__.py", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.6, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 160, "community_name": "register_local_callback", "source_file": "app/api/__init__.py", "file_type": "code", "degree": 10}, {"id": "app_api_init_rationale_1", "label": "API \u8def\u7531\u5305 \u2014 \u5c71\u5ce1\u5316\u5de5\u751f\u4ea7\u4e00\u4f53\u5316\u95e8\u6237", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "API \u8def\u7531\u5305 \u2014 \u5c71\u5ce1\u5316\u5de5\u751f\u4ea7\u4e00\u4f53\u5316\u95e8\u6237", "community": 160, "community_name": "register_local_callback", "source_file": "app/api/__init__.py", "file_type": "rationale", "degree": 1}, {"id": "app_api_admin", "label": "admin.py", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 17.7, "font": {"size": 12, "color": "#ffffff"}, "title": "admin.py", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 119}, {"id": "app_api_admin_list_roles_for_select", "label": "list_roles_for_select()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "list_roles_for_select()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_py_session", "label": "Session", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 13.7, "font": {"size": 0, "color": "#ffffff"}, "title": "Session", "community": 3, "community_name": "Community 3", "source_file": "", "file_type": "code", "degree": 57}, {"id": "app_api_admin_list_users_for_select", "label": "list_users_for_select()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "list_users_for_select()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_list_roles_for_designer", "label": "list_roles_for_designer()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "list_roles_for_designer()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_tenantcreatebody", "label": "TenantCreateBody", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.6, "font": {"size": 0, "color": "#ffffff"}, "title": "TenantCreateBody", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 10}, {"id": "app_api_admin_tenantupdatebody", "label": "TenantUpdateBody", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.6, "font": {"size": 0, "color": "#ffffff"}, "title": "TenantUpdateBody", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 10}, {"id": "app_api_admin_list_tenants", "label": "list_tenants()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "list_tenants()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 3}, {"id": "app_api_admin_create_tenant", "label": "create_tenant()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "create_tenant()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_update_tenant", "label": "update_tenant()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border":Line truncated
const RAW_EDGES = [{"from": "app_api_init", "to": "app_api_admin", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_bx_init", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_crm", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_db_init", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_leave", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_menu", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_monitor", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_public", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_workflow", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init_rationale_1", "to": "app_api_init", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_attachment_download_url", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_attachment_preview_url", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_attachmentdownloadurlbody", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_dept", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_dict_data", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_dict_type", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_menu", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_menu_favorite", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_post", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_role_management", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_site", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_tenant", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_user", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_delete_dept", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_delete_dict_data", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"Line truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 35}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 41}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 29}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 98}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 79}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 81}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 33}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 224}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 68}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 1}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 1}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 61}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 83}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 39}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 37}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 81}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 66}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 1}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 47}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 41}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 1}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 35}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 43}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 17}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 30}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 43}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 31}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 35}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 74}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 55}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 27}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 1}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 1}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 29}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 42}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 38}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 31}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 26}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 25}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 45}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 1}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 1}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 108}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 51}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 17}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 96}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 16}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 25}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 10}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 18}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 17}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 31}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 18}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 24}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 1}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 1}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 1}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 20}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 30}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 17}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 48}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 32}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 42}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 18}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 64}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 38}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 38}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 14}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 35}, {"cid": 70, "color": "#4E79A7", "label": "CLine truncated
const RAW_NODES = [{"id": "app_init", "label": "__init__.py", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.0, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 304, "community_name": "__init__.py", "source_file": "app/__init__.py", "file_type": "code", "degree": 0}, {"id": "app_api_init", "label": "__init__.py", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.6, "font": {"size": 0, "color": "#ffffff"}, "title": "__init__.py", "community": 160, "community_name": "register_local_callback", "source_file": "app/api/__init__.py", "file_type": "code", "degree": 10}, {"id": "app_api_init_rationale_1", "label": "API \u8def\u7531\u5305 \u2014 \u5c71\u5ce1\u5316\u5de5\u751f\u4ea7\u4e00\u4f53\u5316\u95e8\u6237", "color": {"background": "#4E79A7", "border": "#4E79A7", "highlight": {"background": "#ffffff", "border": "#4E79A7"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "API \u8def\u7531\u5305 \u2014 \u5c71\u5ce1\u5316\u5de5\u751f\u4ea7\u4e00\u4f53\u5316\u95e8\u6237", "community": 160, "community_name": "register_local_callback", "source_file": "app/api/__init__.py", "file_type": "rationale", "degree": 1}, {"id": "app_api_admin", "label": "admin.py", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 17.7, "font": {"size": 12, "color": "#ffffff"}, "title": "admin.py", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 119}, {"id": "app_api_admin_list_roles_for_select", "label": "list_roles_for_select()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "list_roles_for_select()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_py_session", "label": "Session", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 13.7, "font": {"size": 0, "color": "#ffffff"}, "title": "Session", "community": 3, "community_name": "Community 3", "source_file": "", "file_type": "code", "degree": 57}, {"id": "app_api_admin_list_users_for_select", "label": "list_users_for_select()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "list_users_for_select()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_list_roles_for_designer", "label": "list_roles_for_designer()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "list_roles_for_designer()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_tenantcreatebody", "label": "TenantCreateBody", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.6, "font": {"size": 0, "color": "#ffffff"}, "title": "TenantCreateBody", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 10}, {"id": "app_api_admin_tenantupdatebody", "label": "TenantUpdateBody", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.6, "font": {"size": 0, "color": "#ffffff"}, "title": "TenantUpdateBody", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 10}, {"id": "app_api_admin_list_tenants", "label": "list_tenants()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "list_tenants()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 3}, {"id": "app_api_admin_create_tenant", "label": "create_tenant()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border": "#76B7B2"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "create_tenant()", "community": 3, "community_name": "Community 3", "source_file": "app/api/admin.py", "file_type": "code", "degree": 5}, {"id": "app_api_admin_update_tenant", "label": "update_tenant()", "color": {"background": "#76B7B2", "border": "#76B7B2", "highlight": {"background": "#ffffff", "border":Line truncated
const RAW_EDGES = [{"from": "app_api_init", "to": "app_api_admin", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_bx_init", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_crm", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_db_init", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_leave", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_menu", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_monitor", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_public", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init", "to": "app_api_workflow", "label": "re_exports", "title": "re_exports [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_init_rationale_1", "to": "app_api_init", "label": "rationale_for", "title": "rationale_for [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_attachment_download_url", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_attachment_preview_url", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_attachmentdownloadurlbody", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_dept", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_dict_data", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_dict_type", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_menu", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_menu_favorite", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_post", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_role_management", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_site", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_tenant", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_create_user", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_delete_dept", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_api_admin", "to": "app_api_admin_delete_dict_data", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"Line truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "Community 0", "count": 35}, {"cid": 1, "color": "#F28E2B", "label": "Community 1", "count": 41}, {"cid": 2, "color": "#E15759", "label": "Community 2", "count": 29}, {"cid": 3, "color": "#76B7B2", "label": "Community 3", "count": 103}, {"cid": 4, "color": "#59A14F", "label": "Community 4", "count": 79}, {"cid": 5, "color": "#EDC948", "label": "Community 5", "count": 72}, {"cid": 6, "color": "#B07AA1", "label": "Community 6", "count": 33}, {"cid": 7, "color": "#FF9DA7", "label": "Community 7", "count": 216}, {"cid": 8, "color": "#9C755F", "label": "Community 8", "count": 49}, {"cid": 9, "color": "#BAB0AC", "label": "Community 9", "count": 1}, {"cid": 10, "color": "#4E79A7", "label": "Community 10", "count": 1}, {"cid": 11, "color": "#F28E2B", "label": "Community 11", "count": 61}, {"cid": 12, "color": "#E15759", "label": "Community 12", "count": 85}, {"cid": 13, "color": "#76B7B2", "label": "Community 13", "count": 50}, {"cid": 14, "color": "#59A14F", "label": "Community 14", "count": 14}, {"cid": 15, "color": "#EDC948", "label": "Community 15", "count": 55}, {"cid": 16, "color": "#B07AA1", "label": "Community 16", "count": 66}, {"cid": 17, "color": "#FF9DA7", "label": "Community 17", "count": 1}, {"cid": 18, "color": "#9C755F", "label": "Community 18", "count": 66}, {"cid": 19, "color": "#BAB0AC", "label": "Community 19", "count": 43}, {"cid": 20, "color": "#4E79A7", "label": "Community 20", "count": 1}, {"cid": 21, "color": "#F28E2B", "label": "Community 21", "count": 35}, {"cid": 22, "color": "#E15759", "label": "Community 22", "count": 43}, {"cid": 23, "color": "#76B7B2", "label": "Community 23", "count": 17}, {"cid": 24, "color": "#59A14F", "label": "Community 24", "count": 33}, {"cid": 25, "color": "#EDC948", "label": "Community 25", "count": 31}, {"cid": 26, "color": "#B07AA1", "label": "Community 26", "count": 65}, {"cid": 27, "color": "#FF9DA7", "label": "Community 27", "count": 36}, {"cid": 28, "color": "#9C755F", "label": "Community 28", "count": 61}, {"cid": 29, "color": "#BAB0AC", "label": "Community 29", "count": 47}, {"cid": 30, "color": "#4E79A7", "label": "Community 30", "count": 27}, {"cid": 31, "color": "#F28E2B", "label": "Community 31", "count": 1}, {"cid": 32, "color": "#E15759", "label": "Community 32", "count": 1}, {"cid": 33, "color": "#76B7B2", "label": "Community 33", "count": 34}, {"cid": 34, "color": "#59A14F", "label": "Community 34", "count": 38}, {"cid": 35, "color": "#EDC948", "label": "Community 35", "count": 38}, {"cid": 36, "color": "#B07AA1", "label": "Community 36", "count": 31}, {"cid": 37, "color": "#FF9DA7", "label": "Community 37", "count": 26}, {"cid": 38, "color": "#9C755F", "label": "Community 38", "count": 24}, {"cid": 39, "color": "#BAB0AC", "label": "Community 39", "count": 29}, {"cid": 40, "color": "#4E79A7", "label": "Community 40", "count": 1}, {"cid": 41, "color": "#F28E2B", "label": "Community 41", "count": 1}, {"cid": 42, "color": "#E15759", "label": "Community 42", "count": 34}, {"cid": 43, "color": "#76B7B2", "label": "Community 43", "count": 63}, {"cid": 44, "color": "#59A14F", "label": "Community 44", "count": 33}, {"cid": 45, "color": "#EDC948", "label": "Community 45", "count": 78}, {"cid": 46, "color": "#B07AA1", "label": "Community 46", "count": 29}, {"cid": 47, "color": "#FF9DA7", "label": "Community 47", "count": 1}, {"cid": 48, "color": "#9C755F", "label": "Community 48", "count": 12}, {"cid": 49, "color": "#BAB0AC", "label": "Community 49", "count": 10}, {"cid": 50, "color": "#4E79A7", "label": "Community 50", "count": 16}, {"cid": 51, "color": "#F28E2B", "label": "Community 51", "count": 20}, {"cid": 52, "color": "#E15759", "label": "Community 52", "count": 31}, {"cid": 53, "color": "#76B7B2", "label": "Community 53", "count": 18}, {"cid": 54, "color": "#59A14F", "label": "Community 54", "count": 24}, {"cid": 55, "color": "#EDC948", "label": "Community 55", "count": 1}, {"cid": 56, "color": "#B07AA1", "label": "Community 56", "count": 1}, {"cid": 57, "color": "#FF9DA7", "label": "Community 57", "count": 1}, {"cid": 58, "color": "#9C755F", "label": "Community 58", "count": 20}, {"cid": 59, "color": "#BAB0AC", "label": "Community 59", "count": 30}, {"cid": 60, "color": "#4E79A7", "label": "Community 60", "count": 20}, {"cid": 61, "color": "#F28E2B", "label": "Community 61", "count": 51}, {"cid": 62, "color": "#E15759", "label": "Community 62", "count": 29}, {"cid": 63, "color": "#76B7B2", "label": "Community 63", "count": 24}, {"cid": 64, "color": "#59A14F", "label": "Community 64", "count": 18}, {"cid": 65, "color": "#EDC948", "label": "Community 65", "count": 45}, {"cid": 66, "color": "#B07AA1", "label": "Community 66", "count": 59}, {"cid": 67, "color": "#FF9DA7", "label": "Community 67", "count": 38}, {"cid": 68, "color": "#9C755F", "label": "Community 68", "count": 14}, {"cid": 69, "color": "#BAB0AC", "label": "Community 69", "count": 37}, {"cid": 70, "color": "#4E79A7", "label": "CLine truncated
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
File diff suppressed because it is too large. Load diff
@@ -29,6 +29,7 @@
"27": "index.ts",
"28": "compilerOptions",
"29": "BizError",
"30": "formatApplyDateTime",
"31": "fetchPage",
"32": "loadEditData",
"33": "AdminIndexPage.vue",
@@ -0,0 +1,46 @@
{
"0": "HomePage.vue",
"1": "ApprovalPage.vue",
"2": "PaymentPage.vue",
"3": "RoleManagePage.vue",
"4": "InvoiceWalletAdminPage.vue",
"5": "InvoiceWalletMinePage.vue",
"6": "format.ts",
"7": "MinePage.vue",
"8": "ReimburseApplyPage.vue",
"9": "AdvanceApprovePage.vue",
"10": "AdvanceIssuePage.vue",
"11": "ReimburseApprovePage.vue",
"12": "MenuManagePage.vue",
"13": "UserManagePage.vue",
"14": "AllPage.vue",
"15": "ReimburseDetailPage.vue",
"16": "ExpenseProjectPage.vue",
"17": "dependencies",
"18": "WfReimbursePage.vue",
"19": "ReimburseListPage.vue",
"20": "WfAdvancePage.vue",
"21": "ApprovalDetailPage.vue",
"22": "AdvanceDetailPage.vue",
"23": "compilerOptions",
"24": "LoginPage.vue",
"25": "AdvanceApplyPage.vue",
"26": "useExpenseItemTree.ts",
"27": "index.ts",
"28": "compilerOptions",
"29": "BizError",
"30": "formatApplyDateTime",
"31": "fetchPage",
"32": "loadEditData",
"33": "AdminIndexPage.vue",
"34": "onSubmit",
"35": "components.d.ts",
"36": "MenuEntryCard.vue",
"37": "fetchOffsetAdvances",
"38": "isImageFile",
"39": "loadBizAttachmentsTo",
"40": "findRootForItem",
"41": "env.d.ts",
"42": "HomeLayout.vue",
"43": "vite.config.ts"
}
@@ -0,0 +1,242 @@
# Graph Report - bx-mobile (2026-08-17)
## Corpus Check
- 59 files · ~50,451 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 950 nodes · 1438 edges · 44 communities (36 shown, 8 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 11 edges (avg confidence: 0.53)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `8558d943`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- [[_COMMUNITY_HomePage.vue|HomePage.vue]]
- [[_COMMUNITY_ApprovalPage.vue|ApprovalPage.vue]]
- [[_COMMUNITY_PaymentPage.vue|PaymentPage.vue]]
- [[_COMMUNITY_RoleManagePage.vue|RoleManagePage.vue]]
- [[_COMMUNITY_InvoiceWalletAdminPage.vue|InvoiceWalletAdminPage.vue]]
- [[_COMMUNITY_InvoiceWalletMinePage.vue|InvoiceWalletMinePage.vue]]
- [[_COMMUNITY_format.ts|format.ts]]
- [[_COMMUNITY_MinePage.vue|MinePage.vue]]
- [[_COMMUNITY_ReimburseApplyPage.vue|ReimburseApplyPage.vue]]
- [[_COMMUNITY_AdvanceApprovePage.vue|AdvanceApprovePage.vue]]
- [[_COMMUNITY_AdvanceIssuePage.vue|AdvanceIssuePage.vue]]
- [[_COMMUNITY_ReimburseApprovePage.vue|ReimburseApprovePage.vue]]
- [[_COMMUNITY_MenuManagePage.vue|MenuManagePage.vue]]
- [[_COMMUNITY_UserManagePage.vue|UserManagePage.vue]]
- [[_COMMUNITY_AllPage.vue|AllPage.vue]]
- [[_COMMUNITY_ReimburseDetailPage.vue|ReimburseDetailPage.vue]]
- [[_COMMUNITY_ExpenseProjectPage.vue|ExpenseProjectPage.vue]]
- [[_COMMUNITY_dependencies|dependencies]]
- [[_COMMUNITY_WfReimbursePage.vue|WfReimbursePage.vue]]
- [[_COMMUNITY_ReimburseListPage.vue|ReimburseListPage.vue]]
- [[_COMMUNITY_WfAdvancePage.vue|WfAdvancePage.vue]]
- [[_COMMUNITY_ApprovalDetailPage.vue|ApprovalDetailPage.vue]]
- [[_COMMUNITY_AdvanceDetailPage.vue|AdvanceDetailPage.vue]]
- [[_COMMUNITY_compilerOptions|compilerOptions]]
- [[_COMMUNITY_LoginPage.vue|LoginPage.vue]]
- [[_COMMUNITY_AdvanceApplyPage.vue|AdvanceApplyPage.vue]]
- [[_COMMUNITY_useExpenseItemTree.ts|useExpenseItemTree.ts]]
- [[_COMMUNITY_index.ts|index.ts]]
- [[_COMMUNITY_compilerOptions|compilerOptions]]
- [[_COMMUNITY_BizError|BizError]]
- [[_COMMUNITY_formatApplyDateTime|formatApplyDateTime]]
- [[_COMMUNITY_fetchPage|fetchPage]]
- [[_COMMUNITY_loadEditData|loadEditData]]
- [[_COMMUNITY_AdminIndexPage.vue|AdminIndexPage.vue]]
- [[_COMMUNITY_onSubmit|onSubmit]]
- [[_COMMUNITY_components.d.ts|components.d.ts]]
- [[_COMMUNITY_MenuEntryCard.vue|MenuEntryCard.vue]]
- [[_COMMUNITY_fetchOffsetAdvances|fetchOffsetAdvances]]
- [[_COMMUNITY_isImageFile|isImageFile]]
- [[_COMMUNITY_loadBizAttachmentsTo|loadBizAttachmentsTo]]
- [[_COMMUNITY_findRootForItem|findRootForItem]]
## God Nodes (most connected - your core abstractions)
1. `formatAmount()` - 28 edges
2. `statusLabel()` - 19 edges
3. `compilerOptions` - 18 edges
4. `resolveExpenseDisplay()` - 17 edges
5. `formatApplyDateTime()` - 14 edges
6. `advanceApi` - 11 edges
7. `reimburseApi` - 11 edges
8. `attachmentApi` - 11 edges
9. `useKeywordSearch()` - 11 edges
10. `useExpenseItemTree()` - 10 edges
## Surprising Connections (you probably didn't know these)
- `actualIssuedDisplay()` --calls--> `formatAmount()` [EXTRACTED]
src/views/advance/AdvanceListPage.vue → src/utils/format.ts
- `moneyOrDash()` --calls--> `formatAmount()` [EXTRACTED]
src/views/reimburse/ReimburseListPage.vue → src/utils/format.ts
- `allReimburseLineSubtitle()` --calls--> `resolveExpenseDisplay()` [EXTRACTED]
src/views/all/AllPage.vue → src/hooks/useExpenseItemTree.ts
- `reimburseLineSubtitle()` --calls--> `resolveExpenseDisplay()` [EXTRACTED]
src/views/approval/ApprovalPage.vue → src/hooks/useExpenseItemTree.ts
- `mineReimburseLineSubtitle()` --calls--> `resolveExpenseDisplay()` [EXTRACTED]
src/views/mine/MinePage.vue → src/hooks/useExpenseItemTree.ts
## Import Cycles
- None detected.
## Communities (44 total, 8 thin omitted)
### Community 0 - "HomePage.vue"
Cohesion: 0.05
Nodes (33): reimburseApi, BX_MENU_CATALOG, BxMenuEntry, BxMenuPhase, app, router, routes, MenuItem (+25 more)
### Community 1 - "ApprovalPage.vue"
Cohesion: 0.05
Nodes (38): formatAmount(), actualIssuedDisplay(), popupOffsetTotalDisplay(), actualIssuedDisplay(), detailOffsetTotalDisplay(), actualIssuedDisplay(), moneyOrDash(), actionLoading (+30 more)
### Community 2 - "PaymentPage.vue"
Cohesion: 0.05
Nodes (33): activeTab, actualAmount, detailApplyAttachments, detailData, detailLoading, detailOffsetAttachments, detailOffsetRecords, detailPayAttachments (+25 more)
### Community 3 - "RoleManagePage.vue"
Cohesion: 0.06
Nodes (36): allUsers, collectAllParentIds(), currentPage, editingId, finished, form, handleAssignUserSubmit(), handleDelete() (+28 more)
### Community 4 - "InvoiceWalletAdminPage.vue"
Cohesion: 0.06
Nodes (40): useKeywordSearch(), UseKeywordSearchOptions, detailInvoices, detailSummary, detailUser, fetchInvoices(), fetchWallets(), invFinished (+32 more)
### Community 5 - "InvoiceWalletMinePage.vue"
Cohesion: 0.08
Nodes (20): activeTab, allLedgers, invFinished, invLoading, InvoiceAtt, invoices, invPage, invRefreshing (+12 more)
### Community 6 - "format.ts"
Cohesion: 0.13
Nodes (18): advanceApi, activeTab, actualIssuedDisplay(), currentPage, fetchPage(), finished, handleDelete(), handleSubmit() (+10 more)
### Community 7 - "MinePage.vue"
Cohesion: 0.07
Nodes (34): activeTab, addActions, advanceFinished, advanceList, advanceLoadingMore, advancePage, advanceRefreshing, advanceStatus (+26 more)
### Community 8 - "ReimburseApplyPage.vue"
Cohesion: 0.04
Nodes (33): applicantKeyword, applicantLabel, { applicantOptions, loadApplicantOptions }, applicantPickerColumns, attachItems, auth, balanceInsufficient, DetailLine (+25 more)
### Community 9 - "AdvanceApprovePage.vue"
Cohesion: 0.06
Nodes (32): actionLoading, actionType, activeTab, confirmAction(), currentItem, detailData, downloadPopupFile(), fetchPage() (+24 more)
### Community 10 - "AdvanceIssuePage.vue"
Cohesion: 0.06
Nodes (27): activeTab, actualAmount, confirmIssue(), detailApplyAttachments, detailData, detailIssueAttachments, detailOffsetRecords, fetchList() (+19 more)
### Community 11 - "ReimburseApprovePage.vue"
Cohesion: 0.07
Nodes (31): actionLoading, actionType, activeTab, cardTitle(), confirmAction(), currentItem, detailData, fetchPage() (+23 more)
### Community 12 - "MenuManagePage.vue"
Cohesion: 0.07
Nodes (26): Props, Props, variantClass, menuTypeLabel(), editingId, form, handleDelete(), handleSubmit() (+18 more)
### Community 13 - "UserManagePage.vue"
Cohesion: 0.07
Nodes (29): currentPage, editingId, finished, form, handleDelete(), handleSearch(), handleSubmit(), handleToggleStatus() (+21 more)
### Community 14 - "AllPage.vue"
Cohesion: 0.09
Nodes (27): activeTab, allReimburseCardTitle(), allReimburseLineSubtitle(), allRows, displayList, displayPage, extractRows(), filteredList (+19 more)
### Community 15 - "ReimburseDetailPage.vue"
Cohesion: 0.07
Nodes (30): actionButtons, applyAttachments, approvals, canWithdraw, checkResubmitPrompt(), deleteLoading, detail, detailTab (+22 more)
### Community 16 - "ExpenseProjectPage.vue"
Cohesion: 0.09
Nodes (24): dialogMode, dialogTitle, expandedIds, expenseTree, form, handleDelete(), handleSubmit(), isEdit (+16 more)
### Community 17 - "dependencies"
Cohesion: 0.08
Nodes (25): dependencies, axios, dayjs, jsencrypt, pinia, vant, @vant/use, vue (+17 more)
### Community 18 - "WfReimbursePage.vue"
Cohesion: 0.06
Nodes (36): workflowApi, portalAdminApi, portalAuthApi, portalClient, PortalError, useApplicantOptions(), buildWebEncryptedLoginBody(), approverDisplay (+28 more)
### Community 19 - "ReimburseListPage.vue"
Cohesion: 0.08
Nodes (30): expenseItemApi, ExpenseItem, formatExpenseName(), pickExpenseItemId(), resolveExpenseDisplay(), useExpenseItemTree(), payCardTitle(), lineExpenseDisplay() (+22 more)
### Community 20 - "WfAdvancePage.vue"
Cohesion: 0.12
Nodes (22): approverDisplay, approverKeyword, buildNodePayload(), formData, handleDelete(), handleSubmit(), isEdit, loading (+14 more)
### Community 21 - "ApprovalDetailPage.vue"
Cohesion: 0.07
Nodes (23): actionType, advanceOffsetRecords, advanceOffsetTotalDisplay, approvals, bizType, detail, detailTab, dialogSubmitting (+15 more)
### Community 22 - "AdvanceDetailPage.vue"
Cohesion: 0.10
Nodes (20): paymentApi, actionLoading, approvals, AttachmentInfo, attachments, checkResubmitPrompt(), detail, detailTab (+12 more)
### Community 23 - "compilerOptions"
Cohesion: 0.09
Nodes (21): compilerOptions, allowImportingTsExtensions, baseUrl, isolatedModules, jsx, lib, module, moduleResolution (+13 more)
### Community 24 - "LoginPage.vue"
Cohesion: 0.16
Nodes (15): advanceIssueRecordStatusLabel(), advanceIssueRecordStatusTagClass(), formatApplyDate(), formatDate(), paymentDetailTicketToneClass(), paymentRecordRawStatus(), paymentRecordStatusLabel(), paymentRecordStatusTagClass() (+7 more)
### Community 25 - "AdvanceApplyPage.vue"
Cohesion: 0.13
Nodes (14): SUBMIT_APPROVE_BUTTON_COLOR, attachment, attachmentAccept, fieldErr, form, isEdit, loadEditData(), onSubmit() (+6 more)
### Community 26 - "useExpenseItemTree.ts"
Cohesion: 0.17
Nodes (8): BizError, bxClient, attachmentApi, BxId, invoiceApi, invoiceWalletApi, AttachmentFile, useAttachment()
### Community 27 - "index.ts"
Cohesion: 0.22
Nodes (9): ensureLedgersLoaded(), fetchLedgersPage(), ledgers, loadSummary(), onInvoiceRefresh(), onLedgerLoad(), onLedgerRefresh(), onUploadBeforeClose() (+1 more)
### Community 28 - "compilerOptions"
Cohesion: 0.25
Nodes (7): compilerOptions, allowSyntheticDefaultImports, composite, module, moduleResolution, skipLibCheck, include
### Community 29 - "BizError"
Cohesion: 0.29
Nodes (7): fetchInvoices(), invoiceFiles(), isImage(), kickInvoicePreviewLoads(), normalizeInvoiceFiles(), onInvoiceLoad(), openAttachment()
### Community 31 - "fetchPage"
Cohesion: 0.33
Nodes (6): confirmIssue(), confirmOffset(), fetchPage(), onLoad(), onRefresh(), remainingOffset()
### Community 32 - "loadEditData"
Cohesion: 0.24
Nodes (10): buildAttachItems(), confirmInvoicePicker(), invoiceFileList(), isImageFileType(), kickAttachPreviews(), loadEditData(), onApplicantConfirm(), refreshTitle() (+2 more)
### Community 34 - "onSubmit"
Cohesion: 0.67
Nodes (3): buildInvoicePayload(), onSubmit(), validateReimburseApplyForm()
## Knowledge Gaps
- **485 isolated node(s):** `GlobalComponents`, `name`, `private`, `version`, `type` (+480 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **8 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `statusLabel()` connect `LoginPage.vue` to `ApprovalPage.vue`, `RoleManagePage.vue`, `format.ts`, `MinePage.vue`, `AdvanceApprovePage.vue`, `ReimburseApprovePage.vue`, `MenuManagePage.vue`, `UserManagePage.vue`, `AllPage.vue`, `ReimburseDetailPage.vue`, `ExpenseProjectPage.vue`, `WfReimbursePage.vue`, `ReimburseListPage.vue`, `WfAdvancePage.vue`, `ApprovalDetailPage.vue`, `AdvanceDetailPage.vue`?**
_High betweenness centrality (0.052) - this node is a cross-community bridge._
- **Why does `attachmentApi` connect `useExpenseItemTree.ts` to `PaymentPage.vue`, `InvoiceWalletAdminPage.vue`, `InvoiceWalletMinePage.vue`, `ReimburseApplyPage.vue`, `AdvanceApprovePage.vue`, `AdvanceIssuePage.vue`, `ReimburseApprovePage.vue`, `ReimburseDetailPage.vue`, `AdvanceDetailPage.vue`?**
_High betweenness centrality (0.037) - this node is a cross-community bridge._
- **Why does `formatAmount()` connect `ApprovalPage.vue` to `PaymentPage.vue`, `format.ts`, `MinePage.vue`, `AdvanceApprovePage.vue`, `AdvanceIssuePage.vue`, `ReimburseApprovePage.vue`, `AllPage.vue`, `ReimburseDetailPage.vue`, `ReimburseListPage.vue`, `ApprovalDetailPage.vue`, `AdvanceDetailPage.vue`, `LoginPage.vue`?**
_High betweenness centrality (0.033) - this node is a cross-community bridge._
- **What connects `GlobalComponents`, `name`, `private` to the rest of the system?**
_485 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `HomePage.vue` be split into smaller, more focused modules?**
_Cohesion score 0.05052790346907994 - nodes in this community are weakly interconnected._
- **Should `ApprovalPage.vue` be split into smaller, more focused modules?**
_Cohesion score 0.05496828752642706 - nodes in this community are weakly interconnected._
- **Should `PaymentPage.vue` be split into smaller, more focused modules?**
_Cohesion score 0.046511627906976744 - nodes in this community are weakly interconnected._
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,307 @@
{
"components.d.ts": {
"mtime": 1786541386.8604732,
"ast_hash": "acd22b961d531e34375a554bb346fc16",
"semantic_hash": ""
},
"package.json": {
"mtime": 1786262418.3544664,
"ast_hash": "2c56f1011f791f39d558695e70227717",
"semantic_hash": ""
},
"src/App.vue": {
"mtime": 1786258409.4925685,
"ast_hash": "8af37b4ca96906787c0ad30c2195a7e1",
"semantic_hash": ""
},
"src/api/bxClient.ts": {
"mtime": 1786272029.49382,
"ast_hash": "472cae285e56ad608e6047dd71caab35",
"semantic_hash": ""
},
"src/api/client.ts": {
"mtime": 1786262699.2184267,
"ast_hash": "295a21467ca761b6baeff98e6ff93b89",
"semantic_hash": ""
},
"src/api/index.ts": {
"mtime": 1786273687.6606681,
"ast_hash": "b51e3b26e08c8c82e1f8156ef0eece8f",
"semantic_hash": ""
},
"src/api/portalAdmin.ts": {
"mtime": 1786263461.5863287,
"ast_hash": "83d8872faf79b8ebd58411c8d565741f",
"semantic_hash": ""
},
"src/api/portalAuth.ts": {
"mtime": 1786262637.9121063,
"ast_hash": "6c4beee3155abfa0664c3c9de6cdff9f",
"semantic_hash": ""
},
"src/api/portalClient.ts": {
"mtime": 1786262635.6420074,
"ast_hash": "1ee205b6902f1c93dbc11a29c2a92715",
"semantic_hash": ""
},
"src/components/mobile/ActionCard.vue": {
"mtime": 1786258409.4946604,
"ast_hash": "3ed6d8c80b3b5d63dacec61450851698",
"semantic_hash": ""
},
"src/components/mobile/BottomActionBar.vue": {
"mtime": 1786258409.4949121,
"ast_hash": "6448585d4ae0f6f70fb56656caeedbbc",
"semantic_hash": ""
},
"src/components/mobile/MenuEntryCard.vue": {
"mtime": 1786258409.495158,
"ast_hash": "e8e84961da48ed8e200fcbe3b365a47b",
"semantic_hash": ""
},
"src/components/mobile/MenuNode.vue": {
"mtime": 1786258409.495371,
"ast_hash": "5fda28f023a24fb38dad3b5de05d7149",
"semantic_hash": ""
},
"src/components/mobile/StatusTag.vue": {
"mtime": 1786258409.4955854,
"ast_hash": "0bd0203319d3de141b00937ff3a34887",
"semantic_hash": ""
},
"src/constants/bxMenuCatalog.ts": {
"mtime": 1786951973.0894496,
"ast_hash": "e13a18bc047c9525b1de9d1a7dfc26f8",
"semantic_hash": ""
},
"src/constants/dialog.ts": {
"mtime": 1786258409.4959216,
"ast_hash": "b12fc18e47b1836e657eafa772f12a2f",
"semantic_hash": ""
},
"src/env.d.ts": {
"mtime": 1786258409.4961708,
"ast_hash": "8cbfd5476645cbcda423992b553a2b0c",
"semantic_hash": ""
},
"src/hooks/useApplicantOptions.ts": {
"mtime": 1786263462.7349868,
"ast_hash": "fb4b49a656d6489e705afea04336abf3",
"semantic_hash": ""
},
"src/hooks/useAttachment.ts": {
"mtime": 1786274624.0302958,
"ast_hash": "778f8f6d5423c9ee872d8c15ef19faa8",
"semantic_hash": ""
},
"src/hooks/useExpenseItemTree.ts": {
"mtime": 1786262978.4592369,
"ast_hash": "23a4abb7f84221da6bbfd922615aa7fd",
"semantic_hash": ""
},
"src/hooks/useKeywordSearch.ts": {
"mtime": 1786258409.4969993,
"ast_hash": "ebe0d3a72088d10e31ac1a027145928b",
"semantic_hash": ""
},
"src/main.ts": {
"mtime": 1786258409.4972637,
"ast_hash": "17c17b432119d02ab8581a88b0fa833a",
"semantic_hash": ""
},
"src/router/index.ts": {
"mtime": 1786263467.5198789,
"ast_hash": "00f13c7d9f8072cc8edae38fc80d3858",
"semantic_hash": ""
},
"src/stores/auth.ts": {
"mtime": 1786262800.1033008,
"ast_hash": "ab5bf93e96e56c28dad87aef4d15f120",
"semantic_hash": ""
},
"src/utils/bxPermission.ts": {
"mtime": 1786952059.2422364,
"ast_hash": "7ebf492b706596c35be93134fd7980fd",
"semantic_hash": ""
},
"src/utils/format.ts": {
"mtime": 1786258409.5007405,
"ast_hash": "45f476adfb3b4f832607c2bd03ce3939",
"semantic_hash": ""
},
"src/utils/loginRsa.ts": {
"mtime": 1786262636.993965,
"ast_hash": "3daf5cb7756e16ec2ccbdacdb656b5af",
"semantic_hash": ""
},
"src/views/admin/AdminIndexPage.vue": {
"mtime": 1786258409.5044801,
"ast_hash": "c7f6c14c7e6cdb7884c1403cb73f4617",
"semantic_hash": ""
},
"src/views/admin/ExpenseProjectPage.vue": {
"mtime": 1786270805.4758844,
"ast_hash": "12bcce04f4034b5201b568910d77d334",
"semantic_hash": ""
},
"src/views/admin/MenuManagePage.vue": {
"mtime": 1786262764.1515756,
"ast_hash": "4f4d65b5799fbb7467615e63b6066971",
"semantic_hash": ""
},
"src/views/admin/RoleManagePage.vue": {
"mtime": 1786262744.3694155,
"ast_hash": "5b38f5bcc628ad0f60bf468540912c65",
"semantic_hash": ""
},
"src/views/admin/UserManagePage.vue": {
"mtime": 1786262742.4967825,
"ast_hash": "74c041c94d31210d846b1f7e70632916",
"semantic_hash": ""
},
"src/views/admin/WfAdvancePage.vue": {
"mtime": 1786271317.8028283,
"ast_hash": "7c184f07ed096de56d9b2d551455c2b7",
"semantic_hash": ""
},
"src/views/admin/WfReimbursePage.vue": {
"mtime": 1786263562.3527284,
"ast_hash": "73573acf006975821d4e6b5f889f1e14",
"semantic_hash": ""
},
"src/views/advance/AdvanceApplyPage.vue": {
"mtime": 1786274607.060083,
"ast_hash": "0388180ec78263faa7bdc961c2e8befd",
"semantic_hash": ""
},
"src/views/advance/AdvanceApprovePage.vue": {
"mtime": 1786262982.8888106,
"ast_hash": "5fd378a3749503e624ba89256530dee8",
"semantic_hash": ""
},
"src/views/advance/AdvanceDetailPage.vue": {
"mtime": 1786263563.9671564,
"ast_hash": "05a7d05256cf9cf4756bf5e3df48099e",
"semantic_hash": ""
},
"src/views/advance/AdvanceIssuePage.vue": {
"mtime": 1786274619.3770607,
"ast_hash": "a66baddc29b09c346c713d3b33670c7b",
"semantic_hash": ""
},
"src/views/advance/AdvanceListPage.vue": {
"mtime": 1786258409.5115914,
"ast_hash": "00165608edf432a73e440cf79c802a6d",
"semantic_hash": ""
},
"src/views/all/AllPage.vue": {
"mtime": 1786258409.512023,
"ast_hash": "2e7de29476d83648bf5389e2b348ff7d",
"semantic_hash": ""
},
"src/views/approval/ApprovalDetailPage.vue": {
"mtime": 1786263565.4682083,
"ast_hash": "b6f7cd4519e411f46fe6a39afbe724d7",
"semantic_hash": ""
},
"src/views/approval/ApprovalPage.vue": {
"mtime": 1786258409.5127761,
"ast_hash": "ed8a207d4eb2b7101b5b7652fccfa6dc",
"semantic_hash": ""
},
"src/views/home/HomeLayout.vue": {
"mtime": 1786258409.5132074,
"ast_hash": "59ea72827f9f714afbf5d40c3f197c96",
"semantic_hash": ""
},
"src/views/home/HomePage.vue": {
"mtime": 1786273704.612323,
"ast_hash": "603c38d53a6628addf9c042fa11c9ea9",
"semantic_hash": ""
},
"src/views/invoice/InvoiceWalletAdminPage.vue": {
"mtime": 1786274252.667262,
"ast_hash": "d077e9b9ab5e50b496427f54524b5112",
"semantic_hash": ""
},
"src/views/invoice/InvoiceWalletMinePage.vue": {
"mtime": 1786272743.8449159,
"ast_hash": "25eb05e8f5646f61f18fa785d4313c45",
"semantic_hash": ""
},
"src/views/login/LoginPage.vue": {
"mtime": 1786274902.3611572,
"ast_hash": "5bd43ba543e935727a90f7a1761a2261",
"semantic_hash": ""
},
"src/views/mine/ApplyList.vue": {
"mtime": 1786258409.5147424,
"ast_hash": "6961e7b2e1bbe2688188a77dd2dd04b3",
"semantic_hash": ""
},
"src/views/mine/MinePage.vue": {
"mtime": 1786258409.5150225,
"ast_hash": "0d2f6d0d16f6540b5485550e35e4422b",
"semantic_hash": ""
},
"src/views/payment/PaymentPage.vue": {
"mtime": 1786263041.3961108,
"ast_hash": "340a26617c80f4fa438e97396dcea841",
"semantic_hash": ""
},
"src/views/profile/ProfilePage.vue": {
"mtime": 1786952039.8046649,
"ast_hash": "45d9df6ccc2822c29fad3498afa411e0",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseApplyPage.vue": {
"mtime": 1786539628.8560727,
"ast_hash": "486d15329a2ba654f1e0e85160e66116",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseApprovePage.vue": {
"mtime": 1786262982.8882635,
"ast_hash": "536062ca1df00abeed60b3bea4425166",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseDetailPage.vue": {
"mtime": 1786263505.8691385,
"ast_hash": "8cb48f80786cd6a42009251316baf269",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseListPage.vue": {
"mtime": 1786258409.5181863,
"ast_hash": "7e781609eb8fb307b54bd635519a9c07",
"semantic_hash": ""
},
"test-results/.last-run.json": {
"mtime": 1786258409.5185266,
"ast_hash": "ff6d5dab1dfd50cea584142bc288ce9e",
"semantic_hash": ""
},
"tsconfig.json": {
"mtime": 1786258409.5297976,
"ast_hash": "8bc4a29db666e8111efc537393738b52",
"semantic_hash": ""
},
"tsconfig.node.json": {
"mtime": 1786258409.5300114,
"ast_hash": "767b2e9abe6452170cdc399ca052cfbc",
"semantic_hash": ""
},
"vite.config.ts": {
"mtime": 1786262499.10288,
"ast_hash": "5bcecce02050ac065d288cf69ee03ece",
"semantic_hash": ""
},
"index.html": {
"mtime": 1786279589.5642765,
"ast_hash": "9706c5762709a067ee3f9d3246d5f28a",
"semantic_hash": ""
},
"src/assets/logo.gif": {
"mtime": 1786258409.494151,
"ast_hash": "275126e3913611d6d246019f22089ffe",
"semantic_hash": ""
}
}
+49 -44
View File
@@ -1,16 +1,16 @@
# Graph Report - bx-mobile (2026-08-09)
# Graph Report - bx-mobile (2026-08-17)
## Corpus Check
- 59 files · ~49,502 words
- 59 files · ~50,517 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 938 nodes · 1418 edges · 43 communities (35 shown, 8 thin omitted)
- 950 nodes · 1438 edges · 44 communities (36 shown, 8 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 11 edges (avg confidence: 0.53)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `47a56e40`
- Built from commit: `43d53cb9`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@@ -45,6 +45,7 @@
- [[_COMMUNITY_index.ts|index.ts]]
- [[_COMMUNITY_compilerOptions|compilerOptions]]
- [[_COMMUNITY_BizError|BizError]]
- [[_COMMUNITY_formatApplyDateTime|formatApplyDateTime]]
- [[_COMMUNITY_fetchPage|fetchPage]]
- [[_COMMUNITY_loadEditData|loadEditData]]
- [[_COMMUNITY_AdminIndexPage.vue|AdminIndexPage.vue]]
@@ -64,11 +65,13 @@
5. `formatApplyDateTime()` - 14 edges
6. `advanceApi` - 11 edges
7. `reimburseApi` - 11 edges
8. `useKeywordSearch()` - 11 edges
9. `attachmentApi` - 10 edges
8. `attachmentApi` - 11 edges
9. `useKeywordSearch()` - 11 edges
10. `useExpenseItemTree()` - 10 edges
## Surprising Connections (you probably didn't know these)
- `actualIssuedDisplay()` --calls--> `formatAmount()` [EXTRACTED]
src/views/advance/AdvanceListPage.vue → src/utils/format.ts
- `moneyOrDash()` --calls--> `formatAmount()` [EXTRACTED]
src/views/reimburse/ReimburseListPage.vue → src/utils/format.ts
- `allReimburseLineSubtitle()` --calls--> `resolveExpenseDisplay()` [EXTRACTED]
@@ -77,21 +80,19 @@
src/views/approval/ApprovalPage.vue → src/hooks/useExpenseItemTree.ts
- `mineReimburseLineSubtitle()` --calls--> `resolveExpenseDisplay()` [EXTRACTED]
src/views/mine/MinePage.vue → src/hooks/useExpenseItemTree.ts
- `payCardTitle()` --calls--> `resolveExpenseDisplay()` [EXTRACTED]
src/views/payment/PaymentPage.vue → src/hooks/useExpenseItemTree.ts
## Import Cycles
- None detected.
## Communities (43 total, 8 thin omitted)
## Communities (44 total, 8 thin omitted)
### Community 0 - "HomePage.vue"
Cohesion: 0.05
Nodes (33): reimburseApi, BX_MENU_CATALOG, BxMenuEntry, BxMenuPhase, app, router, routes, MenuItem (+25 more)
### Community 1 - "ApprovalPage.vue"
Cohesion: 0.08
Nodes (25): actionLoading, actionType, bizKind, confirmAction(), currentItem, fetchPage(), finished, { flatList } (+17 more)
Cohesion: 0.05
Nodes (38): formatAmount(), actualIssuedDisplay(), popupOffsetTotalDisplay(), actualIssuedDisplay(), detailOffsetTotalDisplay(), actualIssuedDisplay(), moneyOrDash(), actionLoading (+30 more)
### Community 2 - "PaymentPage.vue"
Cohesion: 0.05
@@ -102,24 +103,24 @@ Cohesion: 0.06
Nodes (36): allUsers, collectAllParentIds(), currentPage, editingId, finished, form, handleAssignUserSubmit(), handleDelete() (+28 more)
### Community 4 - "InvoiceWalletAdminPage.vue"
Cohesion: 0.07
Nodes (38): detailInvoices, detailSummary, detailUser, fetchInvoices(), fetchWallets(), invFinished, invLoading, InvoiceAtt (+30 more)
Cohesion: 0.06
Nodes (40): useKeywordSearch(), UseKeywordSearchOptions, detailInvoices, detailSummary, detailUser, fetchInvoices(), fetchWallets(), invFinished (+32 more)
### Community 5 - "InvoiceWalletMinePage.vue"
Cohesion: 0.07
Nodes (36): activeTab, allLedgers, ensureLedgersLoaded(), fetchInvoices(), fetchLedgersPage(), invFinished, invLoading, InvoiceAtt (+28 more)
Cohesion: 0.08
Nodes (20): activeTab, allLedgers, invFinished, invLoading, InvoiceAtt, invoices, invPage, invRefreshing (+12 more)
### Community 6 - "format.ts"
Cohesion: 0.13
Nodes (17): advanceApi, activeTab, currentPage, fetchPage(), finished, handleDelete(), handleSubmit(), { keyword, clearKeyword, flushSearch } (+9 more)
Nodes (18): advanceApi, activeTab, actualIssuedDisplay(), currentPage, fetchPage(), finished, handleDelete(), handleSubmit() (+10 more)
### Community 7 - "MinePage.vue"
Cohesion: 0.07
Nodes (34): activeTab, addActions, advanceFinished, advanceList, advanceLoadingMore, advancePage, advanceRefreshing, advanceStatus (+26 more)
### Community 8 - "ReimburseApplyPage.vue"
Cohesion: 0.05
Nodes (29): applicantKeyword, applicantLabel, { applicantOptions, loadApplicantOptions }, applicantPickerColumns, auth, balanceInsufficient, DetailLine, detailTotalAmount (+21 more)
Cohesion: 0.04
Nodes (33): applicantKeyword, applicantLabel, { applicantOptions, loadApplicantOptions }, applicantPickerColumns, attachItems, auth, balanceInsufficient, DetailLine (+25 more)
### Community 9 - "AdvanceApprovePage.vue"
Cohesion: 0.06
@@ -142,8 +143,8 @@ Cohesion: 0.07
Nodes (29): currentPage, editingId, finished, form, handleDelete(), handleSearch(), handleSubmit(), handleToggleStatus() (+21 more)
### Community 14 - "AllPage.vue"
Cohesion: 0.06
Nodes (44): advanceIssueRecordStatusLabel(), advanceIssueRecordStatusTagClass(), formatApplyDate(), formatApplyDateTime(), formatDate(), formatDateTime(), paymentDetailTicketToneClass(), paymentRecordRawStatus() (+36 more)
Cohesion: 0.09
Nodes (27): activeTab, allReimburseCardTitle(), allReimburseLineSubtitle(), allRows, displayList, displayPage, extractRows(), filteredList (+19 more)
### Community 15 - "ReimburseDetailPage.vue"
Cohesion: 0.07
@@ -158,12 +159,12 @@ Cohesion: 0.08
Nodes (25): dependencies, axios, dayjs, jsencrypt, pinia, vant, @vant/use, vue (+17 more)
### Community 18 - "WfReimbursePage.vue"
Cohesion: 0.12
Nodes (22): workflowApi, approverDisplay, buildNodePayload(), formData, handleDelete(), handleSubmit(), isEdit, loading (+14 more)
Cohesion: 0.06
Nodes (36): workflowApi, portalAdminApi, portalAuthApi, portalClient, PortalError, useApplicantOptions(), buildWebEncryptedLoginBody(), approverDisplay (+28 more)
### Community 19 - "ReimburseListPage.vue"
Cohesion: 0.11
Nodes (22): activeTab, cardTitle(), currentStatus(), fetchList(), finished, { flatList }, handleDelete(), handleSubmit() (+14 more)
Cohesion: 0.08
Nodes (30): expenseItemApi, ExpenseItem, formatExpenseName(), pickExpenseItemId(), resolveExpenseDisplay(), useExpenseItemTree(), payCardTitle(), lineExpenseDisplay() (+22 more)
### Community 20 - "WfAdvancePage.vue"
Cohesion: 0.12
@@ -182,56 +183,60 @@ Cohesion: 0.09
Nodes (21): compilerOptions, allowImportingTsExtensions, baseUrl, isolatedModules, jsx, lib, module, moduleResolution (+13 more)
### Community 24 - "LoginPage.vue"
Cohesion: 0.13
Nodes (14): portalAdminApi, portalAuthApi, portalClient, PortalError, useApplicantOptions(), buildWebEncryptedLoginBody(), auth, clearError() (+6 more)
Cohesion: 0.16
Nodes (15): advanceIssueRecordStatusLabel(), advanceIssueRecordStatusTagClass(), formatApplyDate(), formatDate(), paymentDetailTicketToneClass(), paymentRecordRawStatus(), paymentRecordStatusLabel(), paymentRecordStatusTagClass() (+7 more)
### Community 25 - "AdvanceApplyPage.vue"
Cohesion: 0.08
Nodes (22): BizError, bxClient, attachmentApi, BxId, invoiceApi, invoiceWalletApi, SUBMIT_APPROVE_BUTTON_COLOR, AttachmentFile (+14 more)
Cohesion: 0.13
Nodes (14): SUBMIT_APPROVE_BUTTON_COLOR, attachment, attachmentAccept, fieldErr, form, isEdit, loadEditData(), onSubmit() (+6 more)
### Community 26 - "useExpenseItemTree.ts"
Cohesion: 0.22
Nodes (8): expenseItemApi, ExpenseItem, formatExpenseName(), pickExpenseItemId(), resolveExpenseDisplay(), useExpenseItemTree(), payCardTitle(), lineExpenseDisplay()
Cohesion: 0.17
Nodes (8): BizError, bxClient, attachmentApi, BxId, invoiceApi, invoiceWalletApi, AttachmentFile, useAttachment()
### Community 27 - "index.ts"
Cohesion: 0.14
Nodes (14): formatAmount(), actualIssuedDisplay(), popupOffsetTotalDisplay(), actualIssuedDisplay(), detailOffsetTotalDisplay(), actualIssuedDisplay(), actualIssuedDisplay(), moneyOrDash() (+6 more)
Cohesion: 0.22
Nodes (9): ensureLedgersLoaded(), fetchLedgersPage(), ledgers, loadSummary(), onInvoiceRefresh(), onLedgerLoad(), onLedgerRefresh(), onUploadBeforeClose() (+1 more)
### Community 28 - "compilerOptions"
Cohesion: 0.25
Nodes (7): compilerOptions, allowSyntheticDefaultImports, composite, module, moduleResolution, skipLibCheck, include
### Community 29 - "BizError"
Cohesion: 0.29
Nodes (7): fetchInvoices(), invoiceFiles(), isImage(), kickInvoicePreviewLoads(), normalizeInvoiceFiles(), onInvoiceLoad(), openAttachment()
### Community 31 - "fetchPage"
Cohesion: 0.33
Nodes (6): confirmIssue(), confirmOffset(), fetchPage(), onLoad(), onRefresh(), remainingOffset()
### Community 32 - "loadEditData"
Cohesion: 0.40
Nodes (5): loadEditData(), onApplicantConfirm(), refreshTitle(), refreshWallet(), todayYmd()
Cohesion: 0.24
Nodes (10): buildAttachItems(), confirmInvoicePicker(), invoiceFileList(), isImageFileType(), kickAttachPreviews(), loadEditData(), onApplicantConfirm(), refreshTitle() (+2 more)
### Community 34 - "onSubmit"
Cohesion: 0.67
Nodes (3): buildInvoicePayload(), onSubmit(), validateReimburseApplyForm()
## Knowledge Gaps
- **481 isolated node(s):** `GlobalComponents`, `name`, `private`, `version`, `type` (+476 more)
- **485 isolated node(s):** `GlobalComponents`, `name`, `private`, `version`, `type` (+480 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **8 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `statusLabel()` connect `AllPage.vue` to `ApprovalPage.vue`, `RoleManagePage.vue`, `format.ts`, `MinePage.vue`, `AdvanceApprovePage.vue`, `ReimburseApprovePage.vue`, `MenuManagePage.vue`, `UserManagePage.vue`, `ReimburseDetailPage.vue`, `ExpenseProjectPage.vue`, `WfReimbursePage.vue`, `ReimburseListPage.vue`, `WfAdvancePage.vue`, `ApprovalDetailPage.vue`, `AdvanceDetailPage.vue`?**
_High betweenness centrality (0.053) - this node is a cross-community bridge._
- **Why does `formatAmount()` connect `index.ts` to `ApprovalPage.vue`, `PaymentPage.vue`, `format.ts`, `MinePage.vue`, `AdvanceApprovePage.vue`, `AdvanceIssuePage.vue`, `ReimburseApprovePage.vue`, `AllPage.vue`, `ReimburseDetailPage.vue`, `ReimburseListPage.vue`, `ApprovalDetailPage.vue`, `AdvanceDetailPage.vue`?**
_High betweenness centrality (0.034) - this node is a cross-community bridge._
- **Why does `attachmentApi` connect `AdvanceApplyPage.vue` to `PaymentPage.vue`, `InvoiceWalletAdminPage.vue`, `InvoiceWalletMinePage.vue`, `AdvanceApprovePage.vue`, `AdvanceIssuePage.vue`, `ReimburseApprovePage.vue`, `ReimburseDetailPage.vue`, `AdvanceDetailPage.vue`?**
_High betweenness centrality (0.024) - this node is a cross-community bridge._
- **Why does `statusLabel()` connect `LoginPage.vue` to `ApprovalPage.vue`, `RoleManagePage.vue`, `format.ts`, `MinePage.vue`, `AdvanceApprovePage.vue`, `ReimburseApprovePage.vue`, `MenuManagePage.vue`, `UserManagePage.vue`, `AllPage.vue`, `ReimburseDetailPage.vue`, `ExpenseProjectPage.vue`, `WfReimbursePage.vue`, `ReimburseListPage.vue`, `WfAdvancePage.vue`, `ApprovalDetailPage.vue`, `AdvanceDetailPage.vue`?**
_High betweenness centrality (0.052) - this node is a cross-community bridge._
- **Why does `attachmentApi` connect `useExpenseItemTree.ts` to `PaymentPage.vue`, `InvoiceWalletAdminPage.vue`, `InvoiceWalletMinePage.vue`, `ReimburseApplyPage.vue`, `AdvanceApprovePage.vue`, `AdvanceIssuePage.vue`, `ReimburseApprovePage.vue`, `ReimburseDetailPage.vue`, `AdvanceDetailPage.vue`?**
_High betweenness centrality (0.037) - this node is a cross-community bridge._
- **Why does `formatAmount()` connect `ApprovalPage.vue` to `PaymentPage.vue`, `format.ts`, `MinePage.vue`, `AdvanceApprovePage.vue`, `AdvanceIssuePage.vue`, `ReimburseApprovePage.vue`, `AllPage.vue`, `ReimburseDetailPage.vue`, `ReimburseListPage.vue`, `ApprovalDetailPage.vue`, `AdvanceDetailPage.vue`, `LoginPage.vue`?**
_High betweenness centrality (0.033) - this node is a cross-community bridge._
- **What connects `GlobalComponents`, `name`, `private` to the rest of the system?**
_481 weakly-connected nodes found - possible documentation gaps or missing edges._
_485 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `HomePage.vue` be split into smaller, more focused modules?**
_Cohesion score 0.05176470588235294 - nodes in this community are weakly interconnected._
_Cohesion score 0.05052790346907994 - nodes in this community are weakly interconnected._
- **Should `ApprovalPage.vue` be split into smaller, more focused modules?**
_Cohesion score 0.07956989247311828 - nodes in this community are weakly interconnected._
_Cohesion score 0.05496828752642706 - nodes in this community are weakly interconnected._
- **Should `PaymentPage.vue` be split into smaller, more focused modules?**
_Cohesion score 0.046511627906976744 - nodes in this community are weakly interconnected._
+4 -4
View File
@@ -63,12 +63,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">938 nodes &middot; 1418 edges &middot; 43 communities</div>
<div id="stats">950 nodes &middot; 1438 edges &middot; 44 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "components_d", "label": "components.d.ts", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "components.d.ts", "community": 35, "community_name": "components.d.ts", "source_file": "components.d.ts", "file_type": "code", "degree": 1}, {"id": "components_d_globalcomponents", "label": "GlobalComponents", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "GlobalComponents", "community": 35, "community_name": "components.d.ts", "source_file": "components.d.ts", "file_type": "code", "degree": 1}, {"id": "package", "label": "package.json", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 12.9, "font": {"size": 0, "color": "#ffffff"}, "title": "package.json", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 7}, {"id": "package_name", "label": "name", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "name", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_private", "label": "private", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "private", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_version", "label": "version", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "version", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_type", "label": "type", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "type", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_scripts", "label": "scripts", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 11.7, "font": {"size": 0, "color": "#ffffff"}, "title": "scripts", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 4}, {"id": "package_scripts_dev", "label": "dev", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "dev", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_scripts_build", "label": "build", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "build", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_scripts_preview", "label": "preview", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "preview", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_dependencies", "label": "dependencies", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 13.8, "font": {"size": 0, "color": "#ffffff"}, "title": "dependencies", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 9}, {"id": "package_dependencies_vant_use", "label": "@vant/use", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "@vant/use", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_dependencies_axios", "label": "axios", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "axios", "community": 17, "communitLine truncated
const RAW_EDGES = [{"from": "components_d", "to": "components_d_globalcomponents", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_dependencies", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_devdependencies", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_name", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_private", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_scripts", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_type", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_version", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_scripts", "to": "package_scripts_build", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_scripts", "to": "package_scripts_dev", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_scripts", "to": "package_scripts_preview", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_axios", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_dayjs", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_jsencrypt", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_pinia", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vant", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vant_use", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vue", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vue_router", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_types_node", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_typescript", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_unplugin_vue_components", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_vant_auto_import_resolver", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_vite", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_vitejs_plugin_vue", "label": "contains", "title": "contLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "HomePage.vue", "count": 51}, {"cid": 1, "color": "#F28E2B", "label": "ApprovalPage.vue", "count": 31}, {"cid": 2, "color": "#E15759", "label": "PaymentPage.vue", "count": 43}, {"cid": 3, "color": "#76B7B2", "label": "RoleManagePage.vue", "count": 42}, {"cid": 4, "color": "#59A14F", "label": "InvoiceWalletAdminPage.vue", "count": 41}, {"cid": 5, "color": "#EDC948", "label": "InvoiceWalletMinePage.vue", "count": 41}, {"cid": 6, "color": "#B07AA1", "label": "format.ts", "count": 19}, {"cid": 7, "color": "#FF9DA7", "label": "MinePage.vue", "count": 40}, {"cid": 8, "color": "#9C755F", "label": "ReimburseApplyPage.vue", "count": 41}, {"cid": 9, "color": "#BAB0AC", "label": "AdvanceApprovePage.vue", "count": 38}, {"cid": 10, "color": "#4E79A7", "label": "AdvanceIssuePage.vue", "count": 36}, {"cid": 11, "color": "#F28E2B", "label": "ReimburseApprovePage.vue", "count": 35}, {"cid": 12, "color": "#E15759", "label": "MenuManagePage.vue", "count": 34}, {"cid": 13, "color": "#76B7B2", "label": "UserManagePage.vue", "count": 34}, {"cid": 14, "color": "#59A14F", "label": "AllPage.vue", "count": 53}, {"cid": 15, "color": "#EDC948", "label": "ReimburseDetailPage.vue", "count": 34}, {"cid": 16, "color": "#B07AA1", "label": "ExpenseProjectPage.vue", "count": 28}, {"cid": 17, "color": "#FF9DA7", "label": "dependencies", "count": 26}, {"cid": 18, "color": "#9C755F", "label": "WfReimbursePage.vue", "count": 26}, {"cid": 19, "color": "#BAB0AC", "label": "ReimburseListPage.vue", "count": 23}, {"cid": 20, "color": "#4E79A7", "label": "WfAdvancePage.vue", "count": 26}, {"cid": 21, "color": "#F28E2B", "label": "ApprovalDetailPage.vue", "count": 29}, {"cid": 22, "color": "#E15759", "label": "AdvanceDetailPage.vue", "count": 24}, {"cid": 23, "color": "#76B7B2", "label": "compilerOptions", "count": 22}, {"cid": 24, "color": "#59A14F", "label": "LoginPage.vue", "count": 21}, {"cid": 25, "color": "#EDC948", "label": "AdvanceApplyPage.vue", "count": 32}, {"cid": 26, "color": "#B07AA1", "label": "useExpenseItemTree.ts", "count": 11}, {"cid": 27, "color": "#FF9DA7", "label": "index.ts", "count": 14}, {"cid": 28, "color": "#9C755F", "label": "compilerOptions", "count": 8}, {"cid": 29, "color": "#BAB0AC", "label": "BizError", "count": 3}, {"cid": 31, "color": "#F28E2B", "label": "fetchPage", "count": 6}, {"cid": 32, "color": "#E15759", "label": "loadEditData", "count": 5}, {"cid": 33, "color": "#76B7B2", "label": "AdminIndexPage.vue", "count": 3}, {"cid": 34, "color": "#59A14F", "label": "onSubmit", "count": 3}, {"cid": 35, "color": "#EDC948", "label": "components.d.ts", "count": 2}, {"cid": 36, "color": "#B07AA1", "label": "MenuEntryCard.vue", "count": 2}, {"cid": 37, "color": "#FF9DA7", "label": "fetchOffsetAdvances", "count": 2}, {"cid": 38, "color": "#9C755F", "label": "isImageFile", "count": 2}, {"cid": 39, "color": "#BAB0AC", "label": "loadBizAttachmentsTo", "count": 2}, {"cid": 40, "color": "#4E79A7", "label": "findRootForItem", "count": 2}, {"cid": 41, "color": "#F28E2B", "label": "env.d.ts", "count": 1}, {"cid": 42, "color": "#E15759", "label": "HomeLayout.vue", "count": 1}, {"cid": 43, "color": "#76B7B2", "label": "vite.config.ts", "count": 1}];
const RAW_NODES = [{"id": "components_d", "label": "components.d.ts", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "components.d.ts", "community": 35, "community_name": "components.d.ts", "source_file": "components.d.ts", "file_type": "code", "degree": 1}, {"id": "components_d_globalcomponents", "label": "GlobalComponents", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "GlobalComponents", "community": 35, "community_name": "components.d.ts", "source_file": "components.d.ts", "file_type": "code", "degree": 1}, {"id": "package", "label": "package.json", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 12.6, "font": {"size": 0, "color": "#ffffff"}, "title": "package.json", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 7}, {"id": "package_name", "label": "name", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "name", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_private", "label": "private", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "private", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_version", "label": "version", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "version", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_type", "label": "type", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "type", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_scripts", "label": "scripts", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 11.5, "font": {"size": 0, "color": "#ffffff"}, "title": "scripts", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 4}, {"id": "package_scripts_dev", "label": "dev", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "dev", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_scripts_build", "label": "build", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "build", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_scripts_preview", "label": "preview", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "preview", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_dependencies", "label": "dependencies", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 13.4, "font": {"size": 0, "color": "#ffffff"}, "title": "dependencies", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 9}, {"id": "package_dependencies_vant_use", "label": "@vant/use", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "@vant/use", "community": 17, "community_name": "dependencies", "source_file": "package.json", "file_type": "code", "degree": 1}, {"id": "package_dependencies_axios", "label": "axios", "color": {"background": "#FF9DA7", "border": "#FF9DA7", "highlight": {"background": "#ffffff", "border": "#FF9DA7"}}, "size": 10.4, "font": {"size": 0, "color": "#ffffff"}, "title": "axios", "community": 17, "communitLine truncated
const RAW_EDGES = [{"from": "components_d", "to": "components_d_globalcomponents", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_dependencies", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_devdependencies", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_name", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_private", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_scripts", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_type", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package", "to": "package_version", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_scripts", "to": "package_scripts_build", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_scripts", "to": "package_scripts_dev", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_scripts", "to": "package_scripts_preview", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_axios", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_dayjs", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_jsencrypt", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_pinia", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vant", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vant_use", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vue", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_dependencies", "to": "package_dependencies_vue_router", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_types_node", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_typescript", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_unplugin_vue_components", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_vant_auto_import_resolver", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_vite", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "package_devdependencies", "to": "package_devdependencies_vitejs_plugin_vue", "label": "contains", "title": "contLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "HomePage.vue", "count": 52}, {"cid": 1, "color": "#F28E2B", "label": "ApprovalPage.vue", "count": 44}, {"cid": 2, "color": "#E15759", "label": "PaymentPage.vue", "count": 43}, {"cid": 3, "color": "#76B7B2", "label": "RoleManagePage.vue", "count": 42}, {"cid": 4, "color": "#59A14F", "label": "InvoiceWalletAdminPage.vue", "count": 44}, {"cid": 5, "color": "#EDC948", "label": "InvoiceWalletMinePage.vue", "count": 25}, {"cid": 6, "color": "#B07AA1", "label": "format.ts", "count": 20}, {"cid": 7, "color": "#FF9DA7", "label": "MinePage.vue", "count": 40}, {"cid": 8, "color": "#9C755F", "label": "ReimburseApplyPage.vue", "count": 47}, {"cid": 9, "color": "#BAB0AC", "label": "AdvanceApprovePage.vue", "count": 38}, {"cid": 10, "color": "#4E79A7", "label": "AdvanceIssuePage.vue", "count": 36}, {"cid": 11, "color": "#F28E2B", "label": "ReimburseApprovePage.vue", "count": 35}, {"cid": 12, "color": "#E15759", "label": "MenuManagePage.vue", "count": 34}, {"cid": 13, "color": "#76B7B2", "label": "UserManagePage.vue", "count": 34}, {"cid": 14, "color": "#59A14F", "label": "AllPage.vue", "count": 31}, {"cid": 15, "color": "#EDC948", "label": "ReimburseDetailPage.vue", "count": 34}, {"cid": 16, "color": "#B07AA1", "label": "ExpenseProjectPage.vue", "count": 28}, {"cid": 17, "color": "#FF9DA7", "label": "dependencies", "count": 26}, {"cid": 18, "color": "#9C755F", "label": "WfReimbursePage.vue", "count": 47}, {"cid": 19, "color": "#BAB0AC", "label": "ReimburseListPage.vue", "count": 34}, {"cid": 20, "color": "#4E79A7", "label": "WfAdvancePage.vue", "count": 26}, {"cid": 21, "color": "#F28E2B", "label": "ApprovalDetailPage.vue", "count": 29}, {"cid": 22, "color": "#E15759", "label": "AdvanceDetailPage.vue", "count": 24}, {"cid": 23, "color": "#76B7B2", "label": "compilerOptions", "count": 22}, {"cid": 24, "color": "#59A14F", "label": "LoginPage.vue", "count": 20}, {"cid": 25, "color": "#EDC948", "label": "AdvanceApplyPage.vue", "count": 17}, {"cid": 26, "color": "#B07AA1", "label": "useExpenseItemTree.ts", "count": 15}, {"cid": 27, "color": "#FF9DA7", "label": "index.ts", "count": 9}, {"cid": 28, "color": "#9C755F", "label": "compilerOptions", "count": 8}, {"cid": 29, "color": "#BAB0AC", "label": "BizError", "count": 7}, {"cid": 30, "color": "#4E79A7", "label": "formatApplyDateTime", "count": 2}, {"cid": 31, "color": "#F28E2B", "label": "fetchPage", "count": 6}, {"cid": 32, "color": "#E15759", "label": "loadEditData", "count": 10}, {"cid": 33, "color": "#76B7B2", "label": "AdminIndexPage.vue", "count": 3}, {"cid": 34, "color": "#59A14F", "label": "onSubmit", "count": 3}, {"cid": 35, "color": "#EDC948", "label": "components.d.ts", "count": 2}, {"cid": 36, "color": "#B07AA1", "label": "MenuEntryCard.vue", "count": 2}, {"cid": 37, "color": "#FF9DA7", "label": "fetchOffsetAdvances", "count": 2}, {"cid": 38, "color": "#9C755F", "label": "isImageFile", "count": 2}, {"cid": 39, "color": "#BAB0AC", "label": "loadBizAttachmentsTo", "count": 2}, {"cid": 40, "color": "#4E79A7", "label": "findRootForItem", "count": 2}, {"cid": 41, "color": "#F28E2B", "label": "env.d.ts", "count": 1}, {"cid": 42, "color": "#E15759", "label": "HomeLayout.vue", "count": 1}, {"cid": 43, "color": "#76B7B2", "label": "vite.config.ts", "count": 1}];
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
File diff suppressed because it is too large. Load diff
+18 -18
View File
@@ -1,7 +1,7 @@
{
"components.d.ts": {
"mtime": 1786274936.6667438,
"ast_hash": "363aa845b3032fa0524566568437f599",
"mtime": 1786541386.8604732,
"ast_hash": "acd22b961d531e34375a554bb346fc16",
"semantic_hash": ""
},
"package.json": {
@@ -70,8 +70,8 @@
"semantic_hash": ""
},
"src/constants/bxMenuCatalog.ts": {
"mtime": 1786271796.535126,
"ast_hash": "487240df97d6b9252eee2a19add2f5a9",
"mtime": 1786951973.0894496,
"ast_hash": "e13a18bc047c9525b1de9d1a7dfc26f8",
"semantic_hash": ""
},
"src/constants/dialog.ts": {
@@ -120,8 +120,8 @@
"semantic_hash": ""
},
"src/utils/bxPermission.ts": {
"mtime": 1786262595.5543869,
"ast_hash": "16c92d2d977c5408d698d66ab5fd02c9",
"mtime": 1786952059.2422364,
"ast_hash": "7ebf492b706596c35be93134fd7980fd",
"semantic_hash": ""
},
"src/utils/format.ts": {
@@ -215,8 +215,8 @@
"semantic_hash": ""
},
"src/views/home/HomePage.vue": {
"mtime": 1786273704.612323,
"ast_hash": "603c38d53a6628addf9c042fa11c9ea9",
"mtime": 1786952152.7384028,
"ast_hash": "1dcfd968b239df0f78c93df998b5abf9",
"semantic_hash": ""
},
"src/views/invoice/InvoiceWalletAdminPage.vue": {
@@ -250,23 +250,23 @@
"semantic_hash": ""
},
"src/views/profile/ProfilePage.vue": {
"mtime": 1786262840.2664106,
"ast_hash": "c519d7eac3af7e06965bef5373183cd9",
"mtime": 1786952039.8046649,
"ast_hash": "45d9df6ccc2822c29fad3498afa411e0",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseApplyPage.vue": {
"mtime": 1786275071.0820756,
"ast_hash": "34fe6c720b58680349afae99f96da901",
"mtime": 1786953790.6232538,
"ast_hash": "a7566b2c97d257f398fe378dbeb6dad5",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseApprovePage.vue": {
"mtime": 1786262982.8882635,
"ast_hash": "536062ca1df00abeed60b3bea4425166",
"mtime": 1786953849.7599635,
"ast_hash": "5ea0b1a115dbebc6685a237546a53b19",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseDetailPage.vue": {
"mtime": 1786263505.8691385,
"ast_hash": "8cb48f80786cd6a42009251316baf269",
"mtime": 1786953824.5852683,
"ast_hash": "66b33a5662ab3b88766997b61ed5fc5c",
"semantic_hash": ""
},
"src/views/reimburse/ReimburseListPage.vue": {
@@ -295,8 +295,8 @@
"semantic_hash": ""
},
"index.html": {
"mtime": 1786258407.1446717,
"ast_hash": "7fd568d0a807a4e5b787071d39d669c3",
"mtime": 1786279589.5642765,
"ast_hash": "9706c5762709a067ee3f9d3246d5f28a",
"semantic_hash": ""
},
"src/assets/logo.gif": {
@@ -184,32 +184,26 @@
"182": "Community 182",
"183": "Ha",
"184": "highlight.ts",
"185": "initLineBrandMetaFromProduct",
"186": "StorageKeyManager",
"187": "Community 187",
"188": "Community 188",
"189": "Community 189",
"190": "error-handle.ts",
"191": "fetchDesignerData",
"192": "handleOpen",
"193": "loadDefaultCustomerOptions",
"194": "fetchData",
"195": "Community 195",
"196": "Community 196",
"197": "handleEdit",
"198": "fetchCustomerDetail",
"199": "fetchData",
"200": "index.js",
"201": "fetchData",
"202": "Community 202",
"208": "menuFavorite.ts",
"209": "Community 209",
"210": "Community 210",
"211": "loadUserOptions",
"212": "index.js",
"213": "Community 213",
"214": "Community 214",
"216": "loadUserOptions",
"217": "index.js",
"218": "index.js",
"220": "index.vue",
@@ -505,7 +499,6 @@
"1223": "emojiimages.min.js",
"1224": "emojis.js",
"1225": "emojis.min.js",
"1226": "index.js",
"1228": "ar.js",
"1229": "bg_BG.js",
"1230": "ca.js",
@@ -202,11 +202,6 @@
"200": "index.js",
"201": "fetchData",
"202": "Community 202",
"203": "prepareLineAliasAndBrandForSubmit",
"204": "types.ts",
"205": "index.vue",
"206": "price-letter.ts",
"207": "product.ts",
"208": "menuFavorite.ts",
"209": "Community 209",
"210": "Community 210",
@@ -214,14 +209,11 @@
"212": "index.js",
"213": "Community 213",
"214": "Community 214",
"215": "index.vue",
"216": "loadUserOptions",
"217": "index.js",
"218": "index.js",
"219": "handleSearch",
"220": "index.vue",
"221": "zh_CN.js",
"222": "loadUserOptions",
"223": "Community 223",
"224": "Community 224",
"225": "getPlMaintenanceApplyStatusLabel",
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff