# Graph Report - bx-mobile (2026-08-17) ## Corpus Check - 59 files · ~50,517 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: `43d53cb9` - 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._