skill-bill 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +128 -0
- package/dist/.gen-inputs.json +30 -0
- package/dist/account/accounts.d.ts +98 -0
- package/dist/account/accounts.d.ts.map +1 -0
- package/dist/account/accounts.js +184 -0
- package/dist/account/accounts.js.map +1 -0
- package/dist/account/commands.d.ts +18 -0
- package/dist/account/commands.d.ts.map +1 -0
- package/dist/account/commands.js +21 -0
- package/dist/account/commands.js.map +1 -0
- package/dist/account/declaration.d.ts +9 -0
- package/dist/account/declaration.d.ts.map +1 -0
- package/dist/account/declaration.js +70 -0
- package/dist/account/declaration.js.map +1 -0
- package/dist/account/index.d.ts +15 -0
- package/dist/account/index.d.ts.map +1 -0
- package/dist/account/index.js +15 -0
- package/dist/account/index.js.map +1 -0
- package/dist/account/pageParts.d.ts +127 -0
- package/dist/account/pageParts.d.ts.map +1 -0
- package/dist/account/pageParts.js +222 -0
- package/dist/account/pageParts.js.map +1 -0
- package/dist/account/params.d.ts +52 -0
- package/dist/account/params.d.ts.map +1 -0
- package/dist/account/params.js +153 -0
- package/dist/account/params.js.map +1 -0
- package/dist/account/query.d.ts +11 -0
- package/dist/account/query.d.ts.map +1 -0
- package/dist/account/query.js +10 -0
- package/dist/account/query.js.map +1 -0
- package/dist/account/read.d.ts +8 -0
- package/dist/account/read.d.ts.map +1 -0
- package/dist/account/read.js +56 -0
- package/dist/account/read.js.map +1 -0
- package/dist/account/scene-add.d.ts +3 -0
- package/dist/account/scene-add.d.ts.map +1 -0
- package/dist/account/scene-add.js +54 -0
- package/dist/account/scene-add.js.map +1 -0
- package/dist/account/scene-transfer.d.ts +3 -0
- package/dist/account/scene-transfer.d.ts.map +1 -0
- package/dist/account/scene-transfer.js +73 -0
- package/dist/account/scene-transfer.js.map +1 -0
- package/dist/account/scene-update.d.ts +3 -0
- package/dist/account/scene-update.d.ts.map +1 -0
- package/dist/account/scene-update.js +56 -0
- package/dist/account/scene-update.js.map +1 -0
- package/dist/account/scene.d.ts +73 -0
- package/dist/account/scene.d.ts.map +1 -0
- package/dist/account/scene.js +34 -0
- package/dist/account/scene.js.map +1 -0
- package/dist/account/template-form.d.ts +52 -0
- package/dist/account/template-form.d.ts.map +1 -0
- package/dist/account/template-form.js +125 -0
- package/dist/account/template-form.js.map +1 -0
- package/dist/account/template-summary.d.ts +38 -0
- package/dist/account/template-summary.d.ts.map +1 -0
- package/dist/account/template-summary.js +179 -0
- package/dist/account/template-summary.js.map +1 -0
- package/dist/account/template-update.d.ts +35 -0
- package/dist/account/template-update.d.ts.map +1 -0
- package/dist/account/template-update.js +193 -0
- package/dist/account/template-update.js.map +1 -0
- package/dist/account/write.d.ts +14 -0
- package/dist/account/write.d.ts.map +1 -0
- package/dist/account/write.js +166 -0
- package/dist/account/write.js.map +1 -0
- package/dist/analysis/agg.d.ts +135 -0
- package/dist/analysis/agg.d.ts.map +1 -0
- package/dist/analysis/agg.js +196 -0
- package/dist/analysis/agg.js.map +1 -0
- package/dist/analysis/cards.d.ts +40 -0
- package/dist/analysis/cards.d.ts.map +1 -0
- package/dist/analysis/cards.js +97 -0
- package/dist/analysis/cards.js.map +1 -0
- package/dist/analysis/commands.d.ts +17 -0
- package/dist/analysis/commands.d.ts.map +1 -0
- package/dist/analysis/commands.js +28 -0
- package/dist/analysis/commands.js.map +1 -0
- package/dist/analysis/declaration.d.ts +9 -0
- package/dist/analysis/declaration.d.ts.map +1 -0
- package/dist/analysis/declaration.js +368 -0
- package/dist/analysis/declaration.js.map +1 -0
- package/dist/analysis/index.d.ts +14 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +14 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/pageParts.d.ts +103 -0
- package/dist/analysis/pageParts.d.ts.map +1 -0
- package/dist/analysis/pageParts.js +158 -0
- package/dist/analysis/pageParts.js.map +1 -0
- package/dist/{policy/analysis.d.ts → analysis/params.d.ts} +1 -1
- package/dist/analysis/params.d.ts.map +1 -0
- package/dist/{policy/analysis.js → analysis/params.js} +10 -4
- package/dist/analysis/params.js.map +1 -0
- package/dist/analysis/read.d.ts +26 -0
- package/dist/analysis/read.d.ts.map +1 -0
- package/dist/analysis/read.js +84 -0
- package/dist/analysis/read.js.map +1 -0
- package/dist/analysis/scene-account.d.ts +3 -0
- package/dist/analysis/scene-account.d.ts.map +1 -0
- package/dist/analysis/scene-account.js +88 -0
- package/dist/analysis/scene-account.js.map +1 -0
- package/dist/analysis/scene-activity.d.ts +3 -0
- package/dist/analysis/scene-activity.d.ts.map +1 -0
- package/dist/analysis/scene-activity.js +108 -0
- package/dist/analysis/scene-activity.js.map +1 -0
- package/dist/analysis/scene-anomaly.d.ts +3 -0
- package/dist/analysis/scene-anomaly.d.ts.map +1 -0
- package/dist/analysis/scene-anomaly.js +173 -0
- package/dist/analysis/scene-anomaly.js.map +1 -0
- package/dist/analysis/scene-cat-compare.d.ts +3 -0
- package/dist/analysis/scene-cat-compare.d.ts.map +1 -0
- package/dist/analysis/scene-cat-compare.js +128 -0
- package/dist/analysis/scene-cat-compare.js.map +1 -0
- package/dist/analysis/scene-cat-trend.d.ts +3 -0
- package/dist/analysis/scene-cat-trend.d.ts.map +1 -0
- package/dist/analysis/scene-cat-trend.js +121 -0
- package/dist/analysis/scene-cat-trend.js.map +1 -0
- package/dist/analysis/scene-category.d.ts +3 -0
- package/dist/analysis/scene-category.d.ts.map +1 -0
- package/dist/analysis/scene-category.js +104 -0
- package/dist/analysis/scene-category.js.map +1 -0
- package/dist/analysis/scene-debt.d.ts +3 -0
- package/dist/analysis/scene-debt.d.ts.map +1 -0
- package/dist/analysis/scene-debt.js +111 -0
- package/dist/analysis/scene-debt.js.map +1 -0
- package/dist/analysis/scene-distribution.d.ts +3 -0
- package/dist/analysis/scene-distribution.d.ts.map +1 -0
- package/dist/analysis/scene-distribution.js +144 -0
- package/dist/analysis/scene-distribution.js.map +1 -0
- package/dist/analysis/scene-insight.d.ts +3 -0
- package/dist/analysis/scene-insight.d.ts.map +1 -0
- package/dist/analysis/scene-insight.js +151 -0
- package/dist/analysis/scene-insight.js.map +1 -0
- package/dist/analysis/scene-installment.d.ts +3 -0
- package/dist/analysis/scene-installment.d.ts.map +1 -0
- package/dist/analysis/scene-installment.js +168 -0
- package/dist/analysis/scene-installment.js.map +1 -0
- package/dist/analysis/scene-ledger.d.ts +3 -0
- package/dist/analysis/scene-ledger.d.ts.map +1 -0
- package/dist/analysis/scene-ledger.js +80 -0
- package/dist/analysis/scene-ledger.js.map +1 -0
- package/dist/analysis/scene-monthly.d.ts +3 -0
- package/dist/analysis/scene-monthly.d.ts.map +1 -0
- package/dist/analysis/scene-monthly.js +79 -0
- package/dist/analysis/scene-monthly.js.map +1 -0
- package/dist/analysis/scene-overview.d.ts +3 -0
- package/dist/analysis/scene-overview.d.ts.map +1 -0
- package/dist/analysis/scene-overview.js +82 -0
- package/dist/analysis/scene-overview.js.map +1 -0
- package/dist/analysis/scene-period-compare.d.ts +3 -0
- package/dist/analysis/scene-period-compare.d.ts.map +1 -0
- package/dist/analysis/scene-period-compare.js +127 -0
- package/dist/analysis/scene-period-compare.js.map +1 -0
- package/dist/analysis/scene-range-compare.d.ts +3 -0
- package/dist/analysis/scene-range-compare.d.ts.map +1 -0
- package/dist/analysis/scene-range-compare.js +144 -0
- package/dist/analysis/scene-range-compare.js.map +1 -0
- package/dist/analysis/scene-refund.d.ts +3 -0
- package/dist/analysis/scene-refund.d.ts.map +1 -0
- package/dist/analysis/scene-refund.js +78 -0
- package/dist/analysis/scene-refund.js.map +1 -0
- package/dist/analysis/scene-reimburse.d.ts +3 -0
- package/dist/analysis/scene-reimburse.d.ts.map +1 -0
- package/dist/analysis/scene-reimburse.js +88 -0
- package/dist/analysis/scene-reimburse.js.map +1 -0
- package/dist/analysis/scene-stats.d.ts +3 -0
- package/dist/analysis/scene-stats.d.ts.map +1 -0
- package/dist/analysis/scene-stats.js +80 -0
- package/dist/analysis/scene-stats.js.map +1 -0
- package/dist/analysis/scene-structure.d.ts +3 -0
- package/dist/analysis/scene-structure.d.ts.map +1 -0
- package/dist/analysis/scene-structure.js +93 -0
- package/dist/analysis/scene-structure.js.map +1 -0
- package/dist/analysis/scene-top-freq.d.ts +3 -0
- package/dist/analysis/scene-top-freq.d.ts.map +1 -0
- package/dist/analysis/scene-top-freq.js +91 -0
- package/dist/analysis/scene-top-freq.js.map +1 -0
- package/dist/analysis/scene-top.d.ts +3 -0
- package/dist/analysis/scene-top.d.ts.map +1 -0
- package/dist/analysis/scene-top.js +69 -0
- package/dist/analysis/scene-top.js.map +1 -0
- package/dist/analysis/scene-trend.d.ts +3 -0
- package/dist/analysis/scene-trend.d.ts.map +1 -0
- package/dist/analysis/scene-trend.js +131 -0
- package/dist/analysis/scene-trend.js.map +1 -0
- package/dist/analysis/scene-week.d.ts +3 -0
- package/dist/analysis/scene-week.d.ts.map +1 -0
- package/dist/analysis/scene-week.js +128 -0
- package/dist/analysis/scene-week.js.map +1 -0
- package/dist/analysis/scene-yearly.d.ts +3 -0
- package/dist/analysis/scene-yearly.d.ts.map +1 -0
- package/dist/analysis/scene-yearly.js +103 -0
- package/dist/analysis/scene-yearly.js.map +1 -0
- package/dist/analysis/scene-yoy.d.ts +3 -0
- package/dist/analysis/scene-yoy.d.ts.map +1 -0
- package/dist/analysis/scene-yoy.js +95 -0
- package/dist/analysis/scene-yoy.js.map +1 -0
- package/dist/analysis/scene.d.ts +240 -0
- package/dist/analysis/scene.d.ts.map +1 -0
- package/dist/analysis/scene.js +47 -0
- package/dist/analysis/scene.js.map +1 -0
- package/dist/analysis/template-bars.d.ts +3 -0
- package/dist/analysis/template-bars.d.ts.map +1 -0
- package/dist/analysis/template-bars.js +64 -0
- package/dist/analysis/template-bars.js.map +1 -0
- package/dist/analysis/template-charts.d.ts +3 -0
- package/dist/analysis/template-charts.d.ts.map +1 -0
- package/dist/analysis/template-charts.js +55 -0
- package/dist/analysis/template-charts.js.map +1 -0
- package/dist/analysis/template-compare.d.ts +3 -0
- package/dist/analysis/template-compare.d.ts.map +1 -0
- package/dist/analysis/template-compare.js +54 -0
- package/dist/analysis/template-compare.js.map +1 -0
- package/dist/analysis/template-insight.d.ts +3 -0
- package/dist/analysis/template-insight.d.ts.map +1 -0
- package/dist/analysis/template-insight.js +56 -0
- package/dist/analysis/template-insight.js.map +1 -0
- package/dist/analysis/template-tables.d.ts +3 -0
- package/dist/analysis/template-tables.d.ts.map +1 -0
- package/dist/analysis/template-tables.js +49 -0
- package/dist/analysis/template-tables.js.map +1 -0
- package/dist/analysis/views.d.ts +35 -0
- package/dist/analysis/views.d.ts.map +1 -0
- package/dist/{render → analysis}/views.js +2 -55
- package/dist/analysis/views.js.map +1 -0
- package/dist/cli/cmd_read.js +158 -415
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts +16 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +81 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/health.d.ts +7 -0
- package/dist/cli/health.d.ts.map +1 -0
- package/dist/cli/health.js +32 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/registry.d.ts +15 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +30 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -0
- package/dist/fetch/db.d.ts +9 -0
- package/dist/fetch/db.d.ts.map +1 -1
- package/dist/fetch/db.js +19 -2
- package/dist/fetch/db.js.map +1 -1
- package/dist/fetch/index.d.ts +2 -2
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +2 -2
- package/dist/fetch/index.js.map +1 -1
- package/dist/fetch/paths.d.ts +16 -4
- package/dist/fetch/paths.d.ts.map +1 -1
- package/dist/fetch/paths.js +54 -24
- package/dist/fetch/paths.js.map +1 -1
- package/dist/goal/commands.d.ts +18 -0
- package/dist/goal/commands.d.ts.map +1 -0
- package/dist/goal/commands.js +21 -0
- package/dist/goal/commands.js.map +1 -0
- package/dist/goal/declaration.d.ts +9 -0
- package/dist/goal/declaration.d.ts.map +1 -0
- package/dist/goal/declaration.js +71 -0
- package/dist/goal/declaration.js.map +1 -0
- package/dist/goal/goalData.d.ts +126 -0
- package/dist/goal/goalData.d.ts.map +1 -0
- package/dist/goal/goalData.js +228 -0
- package/dist/goal/goalData.js.map +1 -0
- package/dist/goal/index.d.ts +19 -0
- package/dist/goal/index.d.ts.map +1 -0
- package/dist/goal/index.js +19 -0
- package/dist/goal/index.js.map +1 -0
- package/dist/goal/pageParts.d.ts +140 -0
- package/dist/goal/pageParts.d.ts.map +1 -0
- package/dist/goal/pageParts.js +233 -0
- package/dist/goal/pageParts.js.map +1 -0
- package/dist/goal/params.d.ts +63 -0
- package/dist/goal/params.d.ts.map +1 -0
- package/dist/goal/params.js +164 -0
- package/dist/goal/params.js.map +1 -0
- package/dist/goal/query.d.ts +12 -0
- package/dist/goal/query.d.ts.map +1 -0
- package/dist/goal/query.js +10 -0
- package/dist/goal/query.js.map +1 -0
- package/dist/goal/read.d.ts +5 -0
- package/dist/goal/read.d.ts.map +1 -0
- package/dist/goal/read.js +79 -0
- package/dist/goal/read.js.map +1 -0
- package/dist/goal/scene-budget.d.ts +3 -0
- package/dist/goal/scene-budget.d.ts.map +1 -0
- package/dist/goal/scene-budget.js +125 -0
- package/dist/goal/scene-budget.js.map +1 -0
- package/dist/goal/scene-saving.d.ts +3 -0
- package/dist/goal/scene-saving.d.ts.map +1 -0
- package/dist/goal/scene-saving.js +116 -0
- package/dist/goal/scene-saving.js.map +1 -0
- package/dist/goal/scene-set-budget.d.ts +3 -0
- package/dist/goal/scene-set-budget.d.ts.map +1 -0
- package/dist/goal/scene-set-budget.js +94 -0
- package/dist/goal/scene-set-budget.js.map +1 -0
- package/dist/goal/scene-set-saving.d.ts +3 -0
- package/dist/goal/scene-set-saving.d.ts.map +1 -0
- package/dist/goal/scene-set-saving.js +66 -0
- package/dist/goal/scene-set-saving.js.map +1 -0
- package/dist/goal/scene.d.ts +142 -0
- package/dist/goal/scene.d.ts.map +1 -0
- package/dist/goal/scene.js +51 -0
- package/dist/goal/scene.js.map +1 -0
- package/dist/goal/template-form.d.ts +32 -0
- package/dist/goal/template-form.d.ts.map +1 -0
- package/dist/goal/template-form.js +124 -0
- package/dist/goal/template-form.js.map +1 -0
- package/dist/goal/template-progress.d.ts +47 -0
- package/dist/goal/template-progress.d.ts.map +1 -0
- package/dist/goal/template-progress.js +79 -0
- package/dist/goal/template-progress.js.map +1 -0
- package/dist/goal/write.d.ts +6 -0
- package/dist/goal/write.d.ts.map +1 -0
- package/dist/goal/write.js +131 -0
- package/dist/goal/write.js.map +1 -0
- package/dist/health.d.ts +41 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +456 -0
- package/dist/health.js.map +1 -0
- package/dist/help/declaration.d.ts +9 -0
- package/dist/help/declaration.d.ts.map +1 -0
- package/dist/help/declaration.js +28 -0
- package/dist/help/declaration.js.map +1 -0
- package/dist/help/helpFile.d.ts +88 -0
- package/dist/help/helpFile.d.ts.map +1 -0
- package/dist/help/helpFile.js +119 -0
- package/dist/help/helpFile.js.map +1 -0
- package/dist/help/helpPaths.d.ts +11 -0
- package/dist/help/helpPaths.d.ts.map +1 -0
- package/dist/help/helpPaths.js +36 -0
- package/dist/help/helpPaths.js.map +1 -0
- package/dist/help/index.d.ts +2 -0
- package/dist/help/index.d.ts.map +1 -1
- package/dist/help/index.js +2 -0
- package/dist/help/index.js.map +1 -1
- package/dist/help/items.d.ts +17 -0
- package/dist/help/items.d.ts.map +1 -0
- package/dist/help/items.js +5 -0
- package/dist/help/items.js.map +1 -0
- package/dist/help/lookup.d.ts +1 -1
- package/dist/help/lookup.d.ts.map +1 -1
- package/dist/help/lookup.js +5 -4
- package/dist/help/lookup.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/link/declaration.d.ts +9 -0
- package/dist/link/declaration.d.ts.map +1 -0
- package/dist/link/declaration.js +40 -0
- package/dist/link/declaration.js.map +1 -0
- package/dist/output.d.ts +21 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +48 -0
- package/dist/output.js.map +1 -0
- package/dist/query/commands.d.ts +17 -0
- package/dist/query/commands.d.ts.map +1 -0
- package/dist/query/commands.js +36 -0
- package/dist/query/commands.js.map +1 -0
- package/dist/query/declaration.d.ts +9 -0
- package/dist/query/declaration.d.ts.map +1 -0
- package/dist/query/declaration.js +251 -0
- package/dist/query/declaration.js.map +1 -0
- package/dist/query/detail.d.ts +28 -0
- package/dist/query/detail.d.ts.map +1 -0
- package/dist/query/detail.js +143 -0
- package/dist/query/detail.js.map +1 -0
- package/dist/query/index.d.ts +19 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +12 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/items.d.ts +22 -0
- package/dist/query/items.d.ts.map +1 -0
- package/dist/query/items.js +7 -0
- package/dist/query/items.js.map +1 -0
- package/dist/query/list.d.ts +100 -0
- package/dist/query/list.d.ts.map +1 -0
- package/dist/query/list.js +247 -0
- package/dist/query/list.js.map +1 -0
- package/dist/query/pageParts.d.ts +6 -0
- package/dist/query/pageParts.d.ts.map +1 -0
- package/dist/query/pageParts.js +18 -0
- package/dist/query/pageParts.js.map +1 -0
- package/dist/query/read.d.ts +17 -0
- package/dist/query/read.d.ts.map +1 -0
- package/dist/query/read.js +324 -0
- package/dist/query/read.js.map +1 -0
- package/dist/render/envelope.d.ts.map +1 -1
- package/dist/render/envelope.js +21 -16
- package/dist/render/envelope.js.map +1 -1
- package/dist/render/errors.d.ts +1 -1
- package/dist/render/errors.d.ts.map +1 -1
- package/dist/render/errors.js.map +1 -1
- package/dist/render/html.d.ts +0 -1
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +2 -4
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +6 -3
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +9 -2
- package/dist/render/index.js.map +1 -1
- package/dist/render/templates.js +1 -1
- package/dist/render/templates.js.map +1 -1
- package/dist/setup/backups.d.ts +52 -0
- package/dist/setup/backups.d.ts.map +1 -0
- package/dist/setup/backups.js +172 -0
- package/dist/setup/backups.js.map +1 -0
- package/dist/setup/blocked.d.ts +12 -0
- package/dist/setup/blocked.d.ts.map +1 -0
- package/dist/setup/blocked.js +65 -0
- package/dist/setup/blocked.js.map +1 -0
- package/dist/setup/commands.d.ts +10 -0
- package/dist/setup/commands.d.ts.map +1 -0
- package/dist/setup/commands.js +12 -0
- package/dist/setup/commands.js.map +1 -0
- package/dist/setup/declaration.d.ts +9 -0
- package/dist/setup/declaration.d.ts.map +1 -0
- package/dist/setup/declaration.js +92 -0
- package/dist/setup/declaration.js.map +1 -0
- package/dist/setup/import.d.ts +8 -0
- package/dist/setup/import.d.ts.map +1 -0
- package/dist/setup/import.js +111 -0
- package/dist/setup/import.js.map +1 -0
- package/dist/setup/importer.d.ts +79 -0
- package/dist/setup/importer.d.ts.map +1 -0
- package/dist/setup/importer.js +231 -0
- package/dist/setup/importer.js.map +1 -0
- package/dist/setup/index.d.ts +8 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +8 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/pageParts.d.ts +93 -0
- package/dist/setup/pageParts.d.ts.map +1 -0
- package/dist/setup/pageParts.js +197 -0
- package/dist/setup/pageParts.js.map +1 -0
- package/dist/setup/params.d.ts +43 -0
- package/dist/setup/params.d.ts.map +1 -0
- package/dist/setup/params.js +94 -0
- package/dist/setup/params.js.map +1 -0
- package/dist/setup/restore.d.ts +5 -0
- package/dist/setup/restore.d.ts.map +1 -0
- package/dist/setup/restore.js +129 -0
- package/dist/setup/restore.js.map +1 -0
- package/dist/setup/run.d.ts +5 -0
- package/dist/setup/run.d.ts.map +1 -0
- package/dist/setup/run.js +188 -0
- package/dist/setup/run.js.map +1 -0
- package/dist/setup/scene-backup-create.d.ts +3 -0
- package/dist/setup/scene-backup-create.d.ts.map +1 -0
- package/dist/setup/scene-backup-create.js +26 -0
- package/dist/setup/scene-backup-create.js.map +1 -0
- package/dist/setup/scene-backup-list.d.ts +3 -0
- package/dist/setup/scene-backup-list.d.ts.map +1 -0
- package/dist/setup/scene-backup-list.js +24 -0
- package/dist/setup/scene-backup-list.js.map +1 -0
- package/dist/setup/scene-import.d.ts +3 -0
- package/dist/setup/scene-import.d.ts.map +1 -0
- package/dist/setup/scene-import.js +36 -0
- package/dist/setup/scene-import.js.map +1 -0
- package/dist/setup/scene-init-status.d.ts +14 -0
- package/dist/setup/scene-init-status.d.ts.map +1 -0
- package/dist/setup/scene-init-status.js +16 -0
- package/dist/setup/scene-init-status.js.map +1 -0
- package/dist/setup/scene-init.d.ts +3 -0
- package/dist/setup/scene-init.d.ts.map +1 -0
- package/dist/setup/scene-init.js +25 -0
- package/dist/setup/scene-init.js.map +1 -0
- package/dist/setup/scene-restore.d.ts +3 -0
- package/dist/setup/scene-restore.d.ts.map +1 -0
- package/dist/setup/scene-restore.js +33 -0
- package/dist/setup/scene-restore.js.map +1 -0
- package/dist/setup/scene.d.ts +26 -0
- package/dist/setup/scene.d.ts.map +1 -0
- package/dist/setup/scene.js +42 -0
- package/dist/setup/scene.js.map +1 -0
- package/dist/setup/status.d.ts +47 -0
- package/dist/setup/status.d.ts.map +1 -0
- package/dist/setup/status.js +68 -0
- package/dist/setup/status.js.map +1 -0
- package/dist/setup/steps.d.ts +66 -0
- package/dist/setup/steps.d.ts.map +1 -0
- package/dist/setup/steps.js +123 -0
- package/dist/setup/steps.js.map +1 -0
- package/dist/setup/template-list.d.ts +29 -0
- package/dist/setup/template-list.d.ts.map +1 -0
- package/dist/setup/template-list.js +187 -0
- package/dist/setup/template-list.js.map +1 -0
- package/dist/setup/template-receipt.d.ts +18 -0
- package/dist/setup/template-receipt.d.ts.map +1 -0
- package/dist/setup/template-receipt.js +93 -0
- package/dist/setup/template-receipt.js.map +1 -0
- package/dist/setup/template-wizard.d.ts +64 -0
- package/dist/setup/template-wizard.d.ts.map +1 -0
- package/dist/setup/template-wizard.js +233 -0
- package/dist/setup/template-wizard.js.map +1 -0
- package/dist/{policy → shared}/category.d.ts +0 -6
- package/dist/shared/category.d.ts.map +1 -0
- package/dist/{policy → shared}/category.js +16 -54
- package/dist/shared/category.js.map +1 -0
- package/dist/shared/commandSpec.d.ts +75 -0
- package/dist/shared/commandSpec.d.ts.map +1 -0
- package/dist/shared/commandSpec.js +2 -0
- package/dist/shared/commandSpec.js.map +1 -0
- package/dist/shared/copyArea.d.ts +51 -0
- package/dist/shared/copyArea.d.ts.map +1 -0
- package/dist/shared/copyArea.js +124 -0
- package/dist/shared/copyArea.js.map +1 -0
- package/dist/shared/dateRange.d.ts +31 -0
- package/dist/shared/dateRange.d.ts.map +1 -0
- package/dist/shared/dateRange.js +121 -0
- package/dist/shared/dateRange.js.map +1 -0
- package/dist/shared/docPage.d.ts +21 -0
- package/dist/shared/docPage.d.ts.map +1 -0
- package/dist/shared/docPage.js +120 -0
- package/dist/shared/docPage.js.map +1 -0
- package/dist/shared/kpi.d.ts +21 -0
- package/dist/shared/kpi.d.ts.map +1 -0
- package/dist/shared/kpi.js +20 -0
- package/dist/shared/kpi.js.map +1 -0
- package/dist/shared/pageIdentity.d.ts +39 -0
- package/dist/shared/pageIdentity.d.ts.map +1 -0
- package/dist/shared/pageIdentity.js +45 -0
- package/dist/shared/pageIdentity.js.map +1 -0
- package/dist/shared/pageSections.d.ts +23 -0
- package/dist/shared/pageSections.d.ts.map +1 -0
- package/dist/shared/pageSections.js +52 -0
- package/dist/shared/pageSections.js.map +1 -0
- package/dist/shared/pageShell.d.ts +24 -0
- package/dist/shared/pageShell.d.ts.map +1 -0
- package/dist/shared/pageShell.js +37 -0
- package/dist/shared/pageShell.js.map +1 -0
- package/dist/shared/params.d.ts +11 -0
- package/dist/shared/params.d.ts.map +1 -0
- package/dist/shared/params.js +60 -0
- package/dist/shared/params.js.map +1 -0
- package/dist/shared/sourceLine.d.ts +19 -0
- package/dist/shared/sourceLine.d.ts.map +1 -0
- package/dist/shared/sourceLine.js +52 -0
- package/dist/shared/sourceLine.js.map +1 -0
- package/dist/shared/writeParts.d.ts +64 -0
- package/dist/shared/writeParts.d.ts.map +1 -0
- package/dist/shared/writeParts.js +39 -0
- package/dist/shared/writeParts.js.map +1 -0
- package/dist/triggers/routeSpec.d.ts +109 -0
- package/dist/triggers/routeSpec.d.ts.map +1 -0
- package/dist/triggers/routeSpec.js +19 -0
- package/dist/triggers/routeSpec.js.map +1 -0
- package/dist/triggers/wake-assets.d.ts +15 -0
- package/dist/triggers/wake-assets.d.ts.map +1 -0
- package/dist/triggers/wake-assets.js +67 -0
- package/dist/triggers/wake-assets.js.map +1 -0
- package/dist/triggers/wakeTable.d.ts +18 -0
- package/dist/triggers/wakeTable.d.ts.map +1 -0
- package/dist/triggers/wakeTable.js +135 -0
- package/dist/triggers/wakeTable.js.map +1 -0
- package/dist/write/blockedFold.d.ts +10 -0
- package/dist/write/blockedFold.d.ts.map +1 -0
- package/dist/write/blockedFold.js +31 -0
- package/dist/write/blockedFold.js.map +1 -0
- package/dist/write/blockedSlots.d.ts +39 -0
- package/dist/write/blockedSlots.d.ts.map +1 -0
- package/dist/write/blockedSlots.js +108 -0
- package/dist/write/blockedSlots.js.map +1 -0
- package/dist/write/candidatePick.d.ts +50 -0
- package/dist/write/candidatePick.d.ts.map +1 -0
- package/dist/write/candidatePick.js +116 -0
- package/dist/write/candidatePick.js.map +1 -0
- package/dist/write/collect.d.ts +20 -0
- package/dist/write/collect.d.ts.map +1 -0
- package/dist/write/collect.js +15 -0
- package/dist/write/collect.js.map +1 -0
- package/dist/write/collectBody.d.ts +29 -0
- package/dist/write/collectBody.d.ts.map +1 -0
- package/dist/write/collectBody.js +196 -0
- package/dist/write/collectBody.js.map +1 -0
- package/dist/write/collectFrame.d.ts +17 -0
- package/dist/write/collectFrame.d.ts.map +1 -0
- package/dist/write/collectFrame.js +36 -0
- package/dist/write/collectFrame.js.map +1 -0
- package/dist/write/commands.d.ts +10 -0
- package/dist/write/commands.d.ts.map +1 -0
- package/dist/write/commands.js +20 -0
- package/dist/write/commands.js.map +1 -0
- package/dist/write/declaration.d.ts +9 -0
- package/dist/write/declaration.d.ts.map +1 -0
- package/dist/write/declaration.js +239 -0
- package/dist/write/declaration.js.map +1 -0
- package/dist/write/diffTable.d.ts +26 -0
- package/dist/write/diffTable.d.ts.map +1 -0
- package/dist/write/diffTable.js +77 -0
- package/dist/write/diffTable.js.map +1 -0
- package/dist/write/duplicateNote.d.ts +40 -0
- package/dist/write/duplicateNote.d.ts.map +1 -0
- package/dist/write/duplicateNote.js +96 -0
- package/dist/write/duplicateNote.js.map +1 -0
- package/dist/write/emptyNote.d.ts +15 -0
- package/dist/write/emptyNote.d.ts.map +1 -0
- package/dist/write/emptyNote.js +27 -0
- package/dist/write/emptyNote.js.map +1 -0
- package/dist/write/errorReceipt.d.ts +21 -0
- package/dist/write/errorReceipt.d.ts.map +1 -0
- package/dist/write/errorReceipt.js +37 -0
- package/dist/write/errorReceipt.js.map +1 -0
- package/dist/write/flowSteps.d.ts +25 -0
- package/dist/write/flowSteps.d.ts.map +1 -0
- package/dist/write/flowSteps.js +49 -0
- package/dist/write/flowSteps.js.map +1 -0
- package/dist/write/index.d.ts +18 -0
- package/dist/write/index.d.ts.map +1 -0
- package/dist/write/index.js +13 -0
- package/dist/write/index.js.map +1 -0
- package/dist/write/installmentPreview.d.ts +23 -0
- package/dist/write/installmentPreview.d.ts.map +1 -0
- package/dist/write/installmentPreview.js +144 -0
- package/dist/write/installmentPreview.js.map +1 -0
- package/dist/write/outsideScan.d.ts +34 -0
- package/dist/write/outsideScan.d.ts.map +1 -0
- package/dist/write/outsideScan.js +116 -0
- package/dist/write/outsideScan.js.map +1 -0
- package/dist/write/pageParts.d.ts +69 -0
- package/dist/write/pageParts.d.ts.map +1 -0
- package/dist/write/pageParts.js +80 -0
- package/dist/write/pageParts.js.map +1 -0
- package/dist/write/photoEscape.d.ts +53 -0
- package/dist/write/photoEscape.d.ts.map +1 -0
- package/dist/write/photoEscape.js +139 -0
- package/dist/write/photoEscape.js.map +1 -0
- package/dist/write/prefillNote.d.ts +21 -0
- package/dist/write/prefillNote.d.ts.map +1 -0
- package/dist/write/prefillNote.js +79 -0
- package/dist/write/prefillNote.js.map +1 -0
- package/dist/write/receipt.d.ts +18 -0
- package/dist/write/receipt.d.ts.map +1 -0
- package/dist/write/receipt.js +11 -0
- package/dist/write/receipt.js.map +1 -0
- package/dist/write/receiptBody.d.ts +10 -0
- package/dist/write/receiptBody.d.ts.map +1 -0
- package/dist/write/receiptBody.js +111 -0
- package/dist/write/receiptBody.js.map +1 -0
- package/dist/write/receiptOut.d.ts +14 -0
- package/dist/write/receiptOut.d.ts.map +1 -0
- package/dist/write/receiptOut.js +13 -0
- package/dist/write/receiptOut.js.map +1 -0
- package/dist/write/receiptParts.d.ts +12 -0
- package/dist/write/receiptParts.d.ts.map +1 -0
- package/dist/write/receiptParts.js +38 -0
- package/dist/write/receiptParts.js.map +1 -0
- package/dist/write/recentPicks.d.ts +34 -0
- package/dist/write/recentPicks.d.ts.map +1 -0
- package/dist/write/recentPicks.js +65 -0
- package/dist/write/recentPicks.js.map +1 -0
- package/dist/write/record.d.ts +13 -0
- package/dist/write/record.d.ts.map +1 -0
- package/dist/{policy → write}/record.js +12 -28
- package/dist/write/record.js.map +1 -0
- package/dist/write/recordPicker.d.ts +32 -0
- package/dist/write/recordPicker.d.ts.map +1 -0
- package/dist/write/recordPicker.js +201 -0
- package/dist/write/recordPicker.js.map +1 -0
- package/dist/write/rowEditorTable.d.ts +31 -0
- package/dist/write/rowEditorTable.d.ts.map +1 -0
- package/dist/write/rowEditorTable.js +103 -0
- package/dist/write/rowEditorTable.js.map +1 -0
- package/dist/write/scene-batch.d.ts +3 -0
- package/dist/write/scene-batch.d.ts.map +1 -0
- package/dist/write/scene-batch.js +37 -0
- package/dist/write/scene-batch.js.map +1 -0
- package/dist/write/scene-borrow.d.ts +3 -0
- package/dist/write/scene-borrow.d.ts.map +1 -0
- package/dist/write/scene-borrow.js +166 -0
- package/dist/write/scene-borrow.js.map +1 -0
- package/dist/write/scene-collect.d.ts +3 -0
- package/dist/write/scene-collect.d.ts.map +1 -0
- package/dist/write/scene-collect.js +155 -0
- package/dist/write/scene-collect.js.map +1 -0
- package/dist/write/scene-expense.d.ts +3 -0
- package/dist/write/scene-expense.d.ts.map +1 -0
- package/dist/write/scene-expense.js +50 -0
- package/dist/write/scene-expense.js.map +1 -0
- package/dist/write/scene-income.d.ts +3 -0
- package/dist/write/scene-income.d.ts.map +1 -0
- package/dist/write/scene-income.js +51 -0
- package/dist/write/scene-income.js.map +1 -0
- package/dist/write/scene-installment.d.ts +3 -0
- package/dist/write/scene-installment.d.ts.map +1 -0
- package/dist/write/scene-installment.js +52 -0
- package/dist/write/scene-installment.js.map +1 -0
- package/dist/write/scene-lend.d.ts +3 -0
- package/dist/write/scene-lend.d.ts.map +1 -0
- package/dist/write/scene-lend.js +165 -0
- package/dist/write/scene-lend.js.map +1 -0
- package/dist/write/scene-photo.d.ts +3 -0
- package/dist/write/scene-photo.d.ts.map +1 -0
- package/dist/write/scene-photo.js +108 -0
- package/dist/write/scene-photo.js.map +1 -0
- package/dist/write/scene-plain.d.ts +3 -0
- package/dist/write/scene-plain.d.ts.map +1 -0
- package/dist/write/scene-plain.js +52 -0
- package/dist/write/scene-plain.js.map +1 -0
- package/dist/write/scene-refund.d.ts +3 -0
- package/dist/write/scene-refund.d.ts.map +1 -0
- package/dist/write/scene-refund.js +139 -0
- package/dist/write/scene-refund.js.map +1 -0
- package/dist/write/scene-reimburse-done.d.ts +3 -0
- package/dist/write/scene-reimburse-done.d.ts.map +1 -0
- package/dist/write/scene-reimburse-done.js +151 -0
- package/dist/write/scene-reimburse-done.js.map +1 -0
- package/dist/write/scene-reimburse.d.ts +3 -0
- package/dist/write/scene-reimburse.d.ts.map +1 -0
- package/dist/write/scene-reimburse.js +65 -0
- package/dist/write/scene-reimburse.js.map +1 -0
- package/dist/write/scene-repay.d.ts +3 -0
- package/dist/write/scene-repay.d.ts.map +1 -0
- package/dist/write/scene-repay.js +155 -0
- package/dist/write/scene-repay.js.map +1 -0
- package/dist/write/scene-restore.d.ts +3 -0
- package/dist/write/scene-restore.d.ts.map +1 -0
- package/dist/write/scene-restore.js +59 -0
- package/dist/write/scene-restore.js.map +1 -0
- package/dist/write/scene-undo.d.ts +3 -0
- package/dist/write/scene-undo.d.ts.map +1 -0
- package/dist/write/scene-undo.js +57 -0
- package/dist/write/scene-undo.js.map +1 -0
- package/dist/write/scene-update.d.ts +3 -0
- package/dist/write/scene-update.d.ts.map +1 -0
- package/dist/write/scene-update.js +57 -0
- package/dist/write/scene-update.js.map +1 -0
- package/dist/write/scene.d.ts +86 -0
- package/dist/write/scene.d.ts.map +1 -0
- package/dist/write/scene.js +44 -0
- package/dist/write/scene.js.map +1 -0
- package/dist/write/slots.d.ts +16 -0
- package/dist/write/slots.d.ts.map +1 -0
- package/dist/write/slots.js +73 -0
- package/dist/write/slots.js.map +1 -0
- package/dist/write/sourceNote.d.ts +5 -0
- package/dist/write/sourceNote.d.ts.map +1 -0
- package/dist/write/sourceNote.js +37 -0
- package/dist/write/sourceNote.js.map +1 -0
- package/dist/write/summaryRow.d.ts +44 -0
- package/dist/write/summaryRow.d.ts.map +1 -0
- package/dist/write/summaryRow.js +86 -0
- package/dist/write/summaryRow.js.map +1 -0
- package/dist/write/template-batch.d.ts +37 -0
- package/dist/write/template-batch.d.ts.map +1 -0
- package/dist/write/template-batch.js +212 -0
- package/dist/write/template-batch.js.map +1 -0
- package/dist/write/template-expense.d.ts +90 -0
- package/dist/write/template-expense.d.ts.map +1 -0
- package/dist/write/template-expense.js +214 -0
- package/dist/write/template-expense.js.map +1 -0
- package/dist/write/template-flow.d.ts +130 -0
- package/dist/write/template-flow.d.ts.map +1 -0
- package/dist/write/template-flow.js +225 -0
- package/dist/write/template-flow.js.map +1 -0
- package/dist/write/template-installment.d.ts +69 -0
- package/dist/write/template-installment.d.ts.map +1 -0
- package/dist/write/template-installment.js +240 -0
- package/dist/write/template-installment.js.map +1 -0
- package/dist/write/template-update.d.ts +83 -0
- package/dist/write/template-update.d.ts.map +1 -0
- package/dist/write/template-update.js +263 -0
- package/dist/write/template-update.js.map +1 -0
- package/dist/write/typeBadge.d.ts +28 -0
- package/dist/write/typeBadge.d.ts.map +1 -0
- package/dist/write/typeBadge.js +76 -0
- package/dist/write/typeBadge.js.map +1 -0
- package/dist/write/userWording.d.ts +32 -0
- package/dist/write/userWording.d.ts.map +1 -0
- package/dist/write/userWording.js +121 -0
- package/dist/write/userWording.js.map +1 -0
- package/dist/write/write.d.ts +9 -0
- package/dist/write/write.d.ts.map +1 -0
- package/dist/write/write.js +186 -0
- package/dist/write/write.js.map +1 -0
- package/dist/write/writeWire.d.ts +16 -0
- package/dist/write/writeWire.d.ts.map +1 -0
- package/dist/write/writeWire.js +109 -0
- package/dist/write/writeWire.js.map +1 -0
- package/package.json +11 -5
- package/dist/policy/accounts.d.ts +0 -13
- package/dist/policy/accounts.d.ts.map +0 -1
- package/dist/policy/accounts.js +0 -31
- package/dist/policy/accounts.js.map +0 -1
- package/dist/policy/analysis.d.ts.map +0 -1
- package/dist/policy/analysis.js.map +0 -1
- package/dist/policy/category.d.ts.map +0 -1
- package/dist/policy/category.js.map +0 -1
- package/dist/policy/goals.d.ts +0 -15
- package/dist/policy/goals.d.ts.map +0 -1
- package/dist/policy/goals.js +0 -33
- package/dist/policy/goals.js.map +0 -1
- package/dist/policy/index.d.ts +0 -13
- package/dist/policy/index.d.ts.map +0 -1
- package/dist/policy/index.js +0 -7
- package/dist/policy/index.js.map +0 -1
- package/dist/policy/record.d.ts +0 -15
- package/dist/policy/record.d.ts.map +0 -1
- package/dist/policy/record.js.map +0 -1
- package/dist/policy/wakewords.d.ts +0 -14
- package/dist/policy/wakewords.d.ts.map +0 -1
- package/dist/policy/wakewords.js +0 -121
- package/dist/policy/wakewords.js.map +0 -1
- package/dist/render/views.d.ts +0 -86
- package/dist/render/views.d.ts.map +0 -1
- package/dist/render/views.js.map +0 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/** 场景件:**看分类**(`kind = 'category'`,命令 `bill.analysis.overview`)——本件只是差异声明与取值,
|
|
2
|
+
* 块位序列住 `./template-bars.ts`(族=读数+条)。
|
|
3
|
+
*
|
|
4
|
+
* 老侧对应件:`scripts/analysis/cli.py` 的 `cmd_category`(`:272-300`)
|
|
5
|
+
* + 模板 `templates/分析/analysis_view.html` 的 `renderCategory`(`:381-418`)。
|
|
6
|
+
*
|
|
7
|
+
* 本件的差异(照老侧那一页逐点对):
|
|
8
|
+
* ① 期间=起止两端(`start`/`end` **同给**,校验走 `./params.js` 的 `needRange`;缺一即缺槽位阻断),
|
|
9
|
+
* 没给就按月(缺 `month` 即本月,老侧 `args.month or date.today()...` 那条兼容路);
|
|
10
|
+
* **两端优先于月份**——老侧 `if args.from_date or args.to_date` 同一条次序;
|
|
11
|
+
* ② 归堆按**一级分类**(老侧 `_agg_expense_by(..., lambda r: _l1(r.category))`),全路径不并档——
|
|
12
|
+
* 与「看月度」那一页(全路径归堆)**故意不同**,两页各有各的口径;
|
|
13
|
+
* ③ 账户筛选与收支方向走 `./agg.js` 的 `filterOf`(老侧 `_filter` 同义);**转账已由聚合件剔掉**
|
|
14
|
+
* (#691 定死的口径,本件不自己看金额正负);
|
|
15
|
+
* ④ 每类均值=该类金额 ÷ 该类笔数(老侧 `c.avg`),条长按**最大一类**折算(老侧 `Math.max(...)`),
|
|
16
|
+
* 环形图圆心读数=本期该方向的合计(老侧 donut 的 `centerValue`);
|
|
17
|
+
* ⑤ 载荷照搬迁前那一支(`./views.js` 的 `buildOverview`),一字不改。
|
|
18
|
+
*/
|
|
19
|
+
import { BillPolicyError } from '../fetch/errors.js';
|
|
20
|
+
import { listRange } from '../fetch/index.js';
|
|
21
|
+
import { aggByL1, filterOf, kpiOf, readWindow, round1, round2 } from './agg.js';
|
|
22
|
+
import { money, pctText } from './pageParts.js';
|
|
23
|
+
import { buildOverview } from './views.js';
|
|
24
|
+
/** 收支方向槽:缺=支出;只认支出/收入两个方向,别的一律如实抛(本件不猜、不兜底)。 */
|
|
25
|
+
function readDirection(params) {
|
|
26
|
+
const raw = params.type;
|
|
27
|
+
if (raw === undefined || raw === null || raw === '')
|
|
28
|
+
return 'expense';
|
|
29
|
+
if (raw === 'expense' || raw === 'income')
|
|
30
|
+
return raw;
|
|
31
|
+
throw new BillPolicyError('POLICY_BAD_INPUT', '收支方向只能取支出或收入:' + JSON.stringify(raw));
|
|
32
|
+
}
|
|
33
|
+
/** 账户筛选槽:给了非空账户名就只看它,没给=全账户(老侧 `args.account` 那条)。 */
|
|
34
|
+
function readAccount(params) {
|
|
35
|
+
return typeof params.account === 'string' ? params.account.trim() : '';
|
|
36
|
+
}
|
|
37
|
+
export const sceneCategory = {
|
|
38
|
+
id: 'category',
|
|
39
|
+
key: 'bill.analysis.overview',
|
|
40
|
+
kind: 'category',
|
|
41
|
+
title: '看分类',
|
|
42
|
+
family: 'bars',
|
|
43
|
+
values: ({ params, db }) => {
|
|
44
|
+
const win = readWindow(params);
|
|
45
|
+
const direction = readDirection(params);
|
|
46
|
+
const account = readAccount(params);
|
|
47
|
+
const records = filterOf(listRange(db, win.from, win.to), { account, direction });
|
|
48
|
+
const kpi = kpiOf(records);
|
|
49
|
+
const cats = aggByL1(records, { direction });
|
|
50
|
+
const side = direction === 'income' ? '收入' : '支出';
|
|
51
|
+
const total = direction === 'income' ? kpi.income : kpi.expense;
|
|
52
|
+
const head = cats[0];
|
|
53
|
+
const max = cats.length === 0 ? 0 : Math.max(...cats.map((c) => c.value));
|
|
54
|
+
return {
|
|
55
|
+
title: '看分类',
|
|
56
|
+
label: win.label,
|
|
57
|
+
from: win.from,
|
|
58
|
+
to: win.to,
|
|
59
|
+
count: records.length,
|
|
60
|
+
conclusion: head === undefined
|
|
61
|
+
? win.label + ' 这段时间一笔' + side + '都没有记。'
|
|
62
|
+
: win.label + ' 的' + side + '共 ' + money(total) + ' 元,分在 ' + String(cats.length) + ' 个一级分类里;'
|
|
63
|
+
+ '最多的是「' + head.key + '」' + money(head.value) + ' 元,占 ' + pctText(head.pct) + '。',
|
|
64
|
+
caliber: '按一级分类归堆(全路径不并档),占比与环形图都按本期' + side + '合计算;条长按最大一类折算。'
|
|
65
|
+
+ '转账不计入收支' + (account === '' ? '。' : ';本页只看账户「' + account + '」的记录。'),
|
|
66
|
+
chips: [win.label],
|
|
67
|
+
payload: buildOverview(win.label, [...records]),
|
|
68
|
+
kpi,
|
|
69
|
+
page: {
|
|
70
|
+
kpis: [
|
|
71
|
+
{ label: '总' + side, value: money(total), unit: '元' },
|
|
72
|
+
{ label: '分类数', value: String(cats.length), unit: '类' },
|
|
73
|
+
{ label: '期间', value: win.label },
|
|
74
|
+
],
|
|
75
|
+
chips: [win.label],
|
|
76
|
+
charts: cats.length === 0 ? [] : [{
|
|
77
|
+
title: '分类占比',
|
|
78
|
+
kind: 'donut',
|
|
79
|
+
input: {
|
|
80
|
+
items: cats.map((c) => ({ label: c.key, value: c.value })),
|
|
81
|
+
options: { centerLabel: '总' + side, centerValue: money(total) },
|
|
82
|
+
},
|
|
83
|
+
}],
|
|
84
|
+
barGroups: [{
|
|
85
|
+
title: '占比明细(' + String(cats.length) + ' 类)',
|
|
86
|
+
rows: cats.map((c) => ({
|
|
87
|
+
label: c.key,
|
|
88
|
+
text: money(c.value) + ' 元 · ' + String(c.count) + ' 笔 · ' + pctText(c.pct)
|
|
89
|
+
+ ' · 均 ' + money(round2(c.value / c.count)),
|
|
90
|
+
pct: max === 0 ? 0 : round1((c.value / max) * 100),
|
|
91
|
+
})),
|
|
92
|
+
emptyText: '这段时间还没有' + side + '记录',
|
|
93
|
+
}],
|
|
94
|
+
listCards: [],
|
|
95
|
+
factCards: [],
|
|
96
|
+
empty: {
|
|
97
|
+
text: win.label + ' 这段时间还没有记录。',
|
|
98
|
+
hint: '先说「记支出」或「记收入」记一笔,回来看这里就有数了。',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=scene-category.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-category.js","sourceRoot":"","sources":["../../src/analysis/scene-category.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-debt.d.ts","sourceRoot":"","sources":["../../src/analysis/scene-debt.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAkDhD,eAAO,MAAM,SAAS,EAAE,aAoEvB,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { allRecords, kpiOf, round2, tagRecords } from './agg.js';
|
|
2
|
+
import { NO_WINDOW, money, textOrDash } from './pageParts.js';
|
|
3
|
+
import { buildTrend } from './views.js';
|
|
4
|
+
/** 备注里那两串标签的**对象名形态**(老侧 `:816-818` 同形):借出看 `#借给X`、借入看 `#向X借`;
|
|
5
|
+
* 解析不出=空串,由调用方记「未知对象」。**标签本身的匹配不在这里**——那走 `./agg.js` 的 `tagRecords`。 */
|
|
6
|
+
function targetOf(note, direction) {
|
|
7
|
+
const hit = direction === '借出' ? /#借给\s*([^\s#]+)/.exec(note) : /#向\s*([^\s#]+)借/.exec(note);
|
|
8
|
+
return hit === null ? '' : hit[1];
|
|
9
|
+
}
|
|
10
|
+
/** 一批记录的金额合计(借贷一律按绝对值累计,老侧 `abs(...)` 同义)。 */
|
|
11
|
+
function totalOf(rows) {
|
|
12
|
+
let sum = 0;
|
|
13
|
+
for (const r of rows)
|
|
14
|
+
sum += Math.abs(r.amount);
|
|
15
|
+
return round2(sum);
|
|
16
|
+
}
|
|
17
|
+
/** 未还的借出/借入按对象归堆(老侧 `by_obj` 同义):先归堆,再按合计降序。
|
|
18
|
+
* 老侧只按键值排序、同额时顺序不定;新侧同额按对象名兜底,读数与老侧一致、次序可复现。 */
|
|
19
|
+
function objectsOf(unpaidLent, unpaidBorrowed) {
|
|
20
|
+
const byObject = new Map();
|
|
21
|
+
const add = (target, side, amount) => {
|
|
22
|
+
const it = byObject.get(target) ?? { lent: 0, borrowed: 0 };
|
|
23
|
+
if (side === '借出')
|
|
24
|
+
it.lent += amount;
|
|
25
|
+
else
|
|
26
|
+
it.borrowed += amount;
|
|
27
|
+
byObject.set(target, it);
|
|
28
|
+
};
|
|
29
|
+
for (const r of unpaidLent)
|
|
30
|
+
add(targetOf(r.note, '借出') || '未知对象', '借出', Math.abs(r.amount));
|
|
31
|
+
for (const r of unpaidBorrowed)
|
|
32
|
+
add(targetOf(r.note, '借入') || '未知对象', '借入', Math.abs(r.amount));
|
|
33
|
+
return [...byObject.entries()]
|
|
34
|
+
.map(([target, v]) => ({
|
|
35
|
+
target,
|
|
36
|
+
lent: round2(v.lent),
|
|
37
|
+
borrowed: round2(v.borrowed),
|
|
38
|
+
total: round2(v.lent + v.borrowed),
|
|
39
|
+
}))
|
|
40
|
+
.sort((a, b) => b.total - a.total || a.target.localeCompare(b.target));
|
|
41
|
+
}
|
|
42
|
+
export const sceneDebt = {
|
|
43
|
+
id: 'debt',
|
|
44
|
+
key: 'bill.analysis.trend',
|
|
45
|
+
kind: 'debt',
|
|
46
|
+
title: '看借贷',
|
|
47
|
+
family: 'tables',
|
|
48
|
+
values: ({ db }) => {
|
|
49
|
+
const all = allRecords(db);
|
|
50
|
+
const lent = tagRecords(all, '借出');
|
|
51
|
+
const borrowed = tagRecords(all, '借入');
|
|
52
|
+
const unpaidLent = tagRecords(lent, '未还');
|
|
53
|
+
const unpaidBorrowed = tagRecords(borrowed, '未还');
|
|
54
|
+
const paidLent = tagRecords(lent, '已还');
|
|
55
|
+
const paidBorrowed = tagRecords(borrowed, '已还');
|
|
56
|
+
// 一笔同时带两个方向标签时只算一条(两侧取自同一个全库数组,同一对象的引用去重即够)。
|
|
57
|
+
const rows = [...new Set([...lent, ...borrowed])];
|
|
58
|
+
const objects = objectsOf(unpaidLent, unpaidBorrowed);
|
|
59
|
+
const lentUnpaidTotal = totalOf(unpaidLent);
|
|
60
|
+
const borrowedUnpaidTotal = totalOf(unpaidBorrowed);
|
|
61
|
+
return {
|
|
62
|
+
title: '看借贷',
|
|
63
|
+
label: '全部时间',
|
|
64
|
+
from: NO_WINDOW,
|
|
65
|
+
to: NO_WINDOW,
|
|
66
|
+
count: rows.length,
|
|
67
|
+
conclusion: rows.length === 0
|
|
68
|
+
? '全库还没有带 #借出/#借入 的记录。'
|
|
69
|
+
: '未还的有 ' + String(objects.length) + ' 个对象:借出 ' + money(lentUnpaidTotal) + ' 元('
|
|
70
|
+
+ String(unpaidLent.length) + ' 笔)、借入 ' + money(borrowedUnpaidTotal) + ' 元('
|
|
71
|
+
+ String(unpaidBorrowed.length) + ' 笔);已还清的 借出 ' + String(paidLent.length) + ' 笔、借入 '
|
|
72
|
+
+ String(paidBorrowed.length) + ' 笔。',
|
|
73
|
+
caliber: '借贷按备注里的 #借出/#借入 两个标签取记录,同一笔要同时带 #未还 或 #已还 才算进那一栏;'
|
|
74
|
+
+ '对象名读备注里的 #借给X/#向X借,读不出来记作「未知对象」;转账不计入收支。',
|
|
75
|
+
chips: [],
|
|
76
|
+
payload: buildTrend('debt', [...rows]),
|
|
77
|
+
kpi: kpiOf(rows),
|
|
78
|
+
page: {
|
|
79
|
+
kpis: [
|
|
80
|
+
{ label: '借出未还', value: money(lentUnpaidTotal), unit: '元' },
|
|
81
|
+
{ label: '借入未还', value: money(borrowedUnpaidTotal), unit: '元' },
|
|
82
|
+
{ label: '已还(借出)', value: String(paidLent.length), unit: '笔' },
|
|
83
|
+
{ label: '已还(借入)', value: String(paidBorrowed.length), unit: '笔' },
|
|
84
|
+
],
|
|
85
|
+
chips: [],
|
|
86
|
+
tables: [{
|
|
87
|
+
title: '对象列表(' + String(objects.length) + ' 人)',
|
|
88
|
+
columns: [
|
|
89
|
+
{ key: 'target', label: '对象' },
|
|
90
|
+
{ key: 'lent', label: '借出未还', align: 'right' },
|
|
91
|
+
{ key: 'borrowed', label: '借入未还', align: 'right' },
|
|
92
|
+
{ key: 'total', label: '合计', align: 'right' },
|
|
93
|
+
],
|
|
94
|
+
rows: objects.map((o) => ({
|
|
95
|
+
target: textOrDash(o.target),
|
|
96
|
+
lent: money(o.lent),
|
|
97
|
+
borrowed: money(o.borrowed),
|
|
98
|
+
total: money(o.total),
|
|
99
|
+
})),
|
|
100
|
+
emptyText: '暂无未还借贷',
|
|
101
|
+
}],
|
|
102
|
+
factCards: [],
|
|
103
|
+
empty: {
|
|
104
|
+
text: '全库还没有借贷记录。',
|
|
105
|
+
hint: '先说「记借出」或「记借入」记一笔,回来看这里就有数了。',
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=scene-debt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-debt.js","sourceRoot":"","sources":["../../src/analysis/scene-debt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-distribution.d.ts","sourceRoot":"","sources":["../../src/analysis/scene-distribution.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AAoD3D,eAAO,MAAM,iBAAiB,EAAE,aA8E/B,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/** 场景件:**看分布**(`kind = 'distribution'`,命令 `bill.analysis.trend`)——本件只是差异声明与取值,
|
|
2
|
+
* 块位序列住 `./template-charts.ts`(族=读数+图;#729)。
|
|
3
|
+
*
|
|
4
|
+
* 老侧对应件:`scripts/analysis/cli.py` 的 `cmd_distribution`(`:632-666`)
|
|
5
|
+
* + 模板 `templates/分析/analysis_view.html` 的 `renderDistribution`(`:769-797`)。
|
|
6
|
+
*
|
|
7
|
+
* 本件的差异(照老侧那一页逐点对;#688 §四 裁定 3 的图判据住本件):
|
|
8
|
+
* ① 窗口两态同老侧:给了 `start`+`end` 就走区间(缺一即报缺槽位),否则取一个月(缺=本月);
|
|
9
|
+
* ② 五档与半开区间**逐字照老侧**(`10 元以下` 是 `0 ≤ 金额 < 10`,`500 以上` 是 `≥ 500`);
|
|
10
|
+
* ③ 图卡=**柱图**:`singleColor`(色由公共层管)+ `showValues` + 纵轴**可读刻度**(`yTicks: 4`);
|
|
11
|
+
* ④ **零值不出柱身**:笔数为 0 的档不进图元,但明细里**照实写 0 笔**(老侧那五行一条不减);
|
|
12
|
+
* ⑤ **点数不足改出说明句**:五档一笔都没有时图卡改出说明句,不画一张全 0 的柱子;
|
|
13
|
+
* ⑥ 收支方向按参数取(缺=支出);老侧把未识别的方向悄悄当收入,本件改成立即报参数错。
|
|
14
|
+
*
|
|
15
|
+
* 谁在用(一个调用点,指名):`src/analysis/read.ts` 的 `pageOf`——`family === 'charts'` 的 4 件场景
|
|
16
|
+
* 由落点表 `./scene.js` 取到本件。
|
|
17
|
+
*/
|
|
18
|
+
import { BillPolicyError } from '../fetch/errors.js';
|
|
19
|
+
import { monthRange } from '../shared/dateRange.js';
|
|
20
|
+
import { filterOf, kpiOf, round1, thisMonth, windowRecords } from './agg.js';
|
|
21
|
+
import { pctText, windowLabel } from './pageParts.js';
|
|
22
|
+
import { needMonth, needRange } from './params.js';
|
|
23
|
+
import { buildTrend } from './views.js';
|
|
24
|
+
/** 五档金额区间(半开区间 `[lo, hi)`;`hi` 为 `null` 即「以上」)——老侧 `cmd_distribution` 的同一张档表。 */
|
|
25
|
+
const BUCKETS = [
|
|
26
|
+
{ name: '10 元以下', lo: 0, hi: 10 },
|
|
27
|
+
{ name: '10~50', lo: 10, hi: 50 },
|
|
28
|
+
{ name: '50~100', lo: 50, hi: 100 },
|
|
29
|
+
{ name: '100~500', lo: 100, hi: 500 },
|
|
30
|
+
{ name: '500 以上', lo: 500, hi: null },
|
|
31
|
+
];
|
|
32
|
+
/** 一个金额落在哪一档。 */
|
|
33
|
+
function inBucket(bucket, amount) {
|
|
34
|
+
return bucket.hi === null ? amount >= bucket.lo : (amount >= bucket.lo && amount < bucket.hi);
|
|
35
|
+
}
|
|
36
|
+
/** 收支方向(缺=支出)。只认支出/收入两种写法;别的形态立即报参数错,不悄悄当收入。 */
|
|
37
|
+
function directionOf(params) {
|
|
38
|
+
const raw = params['type'];
|
|
39
|
+
if (raw === undefined || raw === null || raw === '')
|
|
40
|
+
return { key: 'expense', word: '支出' };
|
|
41
|
+
if (raw === 'expense' || raw === '支出')
|
|
42
|
+
return { key: 'expense', word: '支出' };
|
|
43
|
+
if (raw === 'income' || raw === '收入')
|
|
44
|
+
return { key: 'income', word: '收入' };
|
|
45
|
+
throw new BillPolicyError('POLICY_BAD_INPUT', '收支方向只认支出/收入');
|
|
46
|
+
}
|
|
47
|
+
/** 柱图纵轴的上界:抬到「刻度条数 − 1」的整数倍——笔数是整数,否则刻度会印出「1.33 笔」。 */
|
|
48
|
+
function axisTopOf(max, ticks) {
|
|
49
|
+
const segments = Math.max(ticks - 1, 1);
|
|
50
|
+
return max <= 0 ? segments : Math.ceil(max / segments) * segments;
|
|
51
|
+
}
|
|
52
|
+
/** 柱图的数据:笔数为 0 的档不进图元(零值不出柱身);一档都不剩时改出说明句。 */
|
|
53
|
+
function barInputOf(buckets, emptyText) {
|
|
54
|
+
const bars = buckets.filter((b) => b.count > 0);
|
|
55
|
+
if (bars.length === 0)
|
|
56
|
+
return { items: [], options: { emptyText } };
|
|
57
|
+
const max = bars.reduce((m, b) => (b.count > m ? b.count : m), 0);
|
|
58
|
+
return {
|
|
59
|
+
items: bars.map((b) => ({ label: b.name, value: b.count })),
|
|
60
|
+
options: {
|
|
61
|
+
singleColor: true,
|
|
62
|
+
showValues: true,
|
|
63
|
+
yTicks: 4,
|
|
64
|
+
yMax: axisTopOf(max, 4),
|
|
65
|
+
format: (v) => String(v) + ' 笔',
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export const sceneDistribution = {
|
|
70
|
+
id: 'distribution',
|
|
71
|
+
key: 'bill.analysis.trend',
|
|
72
|
+
kind: 'distribution',
|
|
73
|
+
title: '看分布',
|
|
74
|
+
family: 'charts',
|
|
75
|
+
values: ({ params, db }) => {
|
|
76
|
+
/* ① 窗口:给了起止日就走区间(缺一即报缺槽位),否则取一个月(缺=本月)。 */
|
|
77
|
+
const hasRange = params['start'] !== undefined || params['end'] !== undefined;
|
|
78
|
+
const month = params['month'] === undefined ? thisMonth() : needMonth(params);
|
|
79
|
+
const range = hasRange ? needRange(params) : monthRange(month);
|
|
80
|
+
const periodLabel = hasRange ? windowLabel(range.start, range.end) : month;
|
|
81
|
+
/* ② 取数与方向筛选(转账已由 `filterOf` 剔除)。 */
|
|
82
|
+
const rows = windowRecords(db, range.start, range.end);
|
|
83
|
+
const direction = directionOf(params);
|
|
84
|
+
const recs = filterOf(rows, { direction: direction.key });
|
|
85
|
+
const total = recs.length;
|
|
86
|
+
/* ③ 五档笔数与占比(老侧同式:分母=这一侧的笔数,一笔都没有时占比写 0)。 */
|
|
87
|
+
const buckets = BUCKETS.map((b) => {
|
|
88
|
+
const count = recs.filter((r) => inBucket(b, Math.abs(r.amount))).length;
|
|
89
|
+
return { name: b.name, count, pct: total === 0 ? 0 : round1((count / total) * 100) };
|
|
90
|
+
});
|
|
91
|
+
const top = buckets.reduce((best, b) => (b.count > best.count ? b : best), buckets[0]);
|
|
92
|
+
const empties = buckets.filter((b) => b.count === 0).map((b) => '「' + b.name + '」');
|
|
93
|
+
const kpi = kpiOf(recs);
|
|
94
|
+
/* ④ 结论句与口径句:零值档不出柱身但明细照实写 0 笔;一笔都没有时图卡改出说明句。 */
|
|
95
|
+
const conclusion = total === 0
|
|
96
|
+
? periodLabel + ' 这段时间没有' + direction.word + '记录。'
|
|
97
|
+
: periodLabel + ' 一共 ' + String(total) + ' 笔' + direction.word + ':最多的是「' + top.name + '」'
|
|
98
|
+
+ String(top.count) + ' 笔 · ' + pctText(top.pct)
|
|
99
|
+
+ (empties.length === 0
|
|
100
|
+
? ';五个金额档都有落点。'
|
|
101
|
+
: ';' + empties.join('、') + ' 这 ' + String(empties.length) + ' 档一笔都没有。');
|
|
102
|
+
const caliber = [
|
|
103
|
+
'金额按绝对值归五档,区间左闭右开:「10 元以下」「10~50」「50~100」「100~500」「500 以上」',
|
|
104
|
+
'笔数为 0 的档不出柱身,明细里照实写 0 笔',
|
|
105
|
+
total === 0 ? '这段时间一笔都没有,图卡改出说明句' : '',
|
|
106
|
+
'转账不计入收支',
|
|
107
|
+
].filter((s) => s !== '').join(';') + '。';
|
|
108
|
+
return {
|
|
109
|
+
title: '看分布',
|
|
110
|
+
label: periodLabel,
|
|
111
|
+
from: range.start,
|
|
112
|
+
to: range.end,
|
|
113
|
+
count: total,
|
|
114
|
+
conclusion,
|
|
115
|
+
caliber,
|
|
116
|
+
chips: [],
|
|
117
|
+
payload: buildTrend('distribution', [...recs]),
|
|
118
|
+
kpi,
|
|
119
|
+
page: {
|
|
120
|
+
kpis: [
|
|
121
|
+
{ label: '统计口径', value: direction.word },
|
|
122
|
+
{ label: '总笔数', value: String(total), unit: '笔' },
|
|
123
|
+
{ label: '期间', value: periodLabel },
|
|
124
|
+
],
|
|
125
|
+
chips: [],
|
|
126
|
+
charts: [{
|
|
127
|
+
title: '金额区间分布',
|
|
128
|
+
kind: 'bar',
|
|
129
|
+
input: barInputOf(buckets, periodLabel + ' 一笔都没有,五个金额档都是空的。'),
|
|
130
|
+
}],
|
|
131
|
+
listCards: [],
|
|
132
|
+
factCards: [{
|
|
133
|
+
title: '各区间明细',
|
|
134
|
+
rows: buckets.map((b) => ({ k: b.name, v: String(b.count) + ' 笔 · ' + pctText(b.pct) })),
|
|
135
|
+
}],
|
|
136
|
+
empty: {
|
|
137
|
+
text: periodLabel + ' 这段时间还没有记录。',
|
|
138
|
+
hint: '先说「记支出」或「记收入」记一笔,回来看这里就有数了。',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=scene-distribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-distribution.js","sourceRoot":"","sources":["../../src/analysis/scene-distribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-insight.d.ts","sourceRoot":"","sources":["../../src/analysis/scene-insight.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AA0B3D,eAAO,MAAM,YAAY,EAAE,aAyG1B,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/** 场景件:**看洞察**(`kind = 'insight'`,命令 `bill.analysis.trend`)——本件只是差异声明与取值,
|
|
2
|
+
* 块位序列住 `./template-insight.ts`(族=解读+多卡)。
|
|
3
|
+
*
|
|
4
|
+
* 老侧对应件:`scripts/analysis/cli.py` 的 `cmd_insight`(`:725-739`,事实层走 `scripts/insights.py` 的
|
|
5
|
+
* `build_insight_facts`=`:42-170`)+ 模板 `templates/分析/analysis_view.html` 的 `renderInsight`(`:862-914`)。
|
|
6
|
+
*
|
|
7
|
+
* 本件的差异(照老侧那一页逐点对):
|
|
8
|
+
* ① **区间**=库里**最后一条记录所在月**往前数 `months` 个月(不是今天)——老侧拿全库记录算区间汇总,
|
|
9
|
+
* 新侧先把窗口切出来再算,于是「区间支出/收入/净额/笔数」与「大额支出」都落在这段窗口里;
|
|
10
|
+
* ② **月度均值/最大偏离月**照老侧那一支:均值=窗口内各月支出的算术平均,偏离度=
|
|
11
|
+
* (该月支出 − 均值)/均值,取绝对值最大的那个月(均值不是两段均值,是「每月支出」的平均);
|
|
12
|
+
* 老侧还算了一个中位数,但那一页没有它的落点(老页面只摆 3 行事实),本件不产出无落点的数;
|
|
13
|
+
* ③ 老侧那一段 `parseAiNote`(把 AI 解读文本切段)**不照抄**(#688 §二 C8):新侧分析页由本地 CLI
|
|
14
|
+
* 渲染、没有 AI 解读文本可切,解读那一段由页头**结论句**承载(把「这批数说明了什么」写进 `conclusion`);
|
|
15
|
+
* ④ **载荷**照搬迁前那一支(`./views.js` 的 `buildTrend`),一字不改。
|
|
16
|
+
*/
|
|
17
|
+
import { BillPolicyError } from '../fetch/errors.js';
|
|
18
|
+
import { listRange } from '../fetch/index.js';
|
|
19
|
+
import { monthRange } from '../shared/dateRange.js';
|
|
20
|
+
import { aggByL1, allRecords, dayOf, expenseTop, firstTimeOf, kpiOf, lastTimeOf, monthOf, monthSeries, prevMonth, round1, thisMonth } from './agg.js';
|
|
21
|
+
import { money, pctText, signedMoney, windowLabel } from './pageParts.js';
|
|
22
|
+
import { buildTrend } from './views.js';
|
|
23
|
+
/** 窗口月数(缺省 6,与老侧 `args.months or 6` 同义);形态不对即阻断。 */
|
|
24
|
+
function monthsOf(params) {
|
|
25
|
+
const raw = params.months;
|
|
26
|
+
if (raw === undefined || raw === null || raw === '')
|
|
27
|
+
return 6;
|
|
28
|
+
const n = typeof raw === 'string' ? Number(raw.trim()) : raw;
|
|
29
|
+
if (typeof n !== 'number' || !Number.isFinite(n) || n < 1) {
|
|
30
|
+
throw new BillPolicyError('POLICY_BAD_INPUT', 'months 须是大于 0 的数:' + JSON.stringify(raw));
|
|
31
|
+
}
|
|
32
|
+
return Math.floor(n);
|
|
33
|
+
}
|
|
34
|
+
/** 从 `end` 这个月往回数 `months` 个月,返回起点月(闭区间:含 `end` 那一月)。 */
|
|
35
|
+
function startMonthOf(end, months) {
|
|
36
|
+
let cur = end;
|
|
37
|
+
for (let i = 1; i < months; i += 1)
|
|
38
|
+
cur = prevMonth(cur);
|
|
39
|
+
return cur;
|
|
40
|
+
}
|
|
41
|
+
/** 偏离度的上屏写法(正数带 `+`;老侧 `fmtPct(max_deviation.deviation_pct)` 同义)。 */
|
|
42
|
+
function devText(pct) {
|
|
43
|
+
return (pct >= 0 ? '+' : '') + pctText(pct);
|
|
44
|
+
}
|
|
45
|
+
export const sceneInsight = {
|
|
46
|
+
id: 'insight',
|
|
47
|
+
key: 'bill.analysis.trend',
|
|
48
|
+
kind: 'insight',
|
|
49
|
+
title: '看洞察',
|
|
50
|
+
family: 'insight',
|
|
51
|
+
values: ({ params, db }) => {
|
|
52
|
+
const months = monthsOf(params);
|
|
53
|
+
const lastTime = lastTimeOf(allRecords(db));
|
|
54
|
+
const endMonth = lastTime === '' ? thisMonth() : monthOf(lastTime);
|
|
55
|
+
const startMonth = startMonthOf(endMonth, months);
|
|
56
|
+
const records = listRange(db, startMonth + '-01', monthRange(endMonth).end);
|
|
57
|
+
const kpi = kpiOf(records);
|
|
58
|
+
const cats = aggByL1(records);
|
|
59
|
+
const top = cats.slice(0, 8);
|
|
60
|
+
const max = cats.reduce((m, c) => Math.max(m, c.value), 0);
|
|
61
|
+
const series = monthSeries(records, months);
|
|
62
|
+
const mean = series.length === 0 ? 0 : series.reduce((s, m) => s + m.expense, 0) / series.length;
|
|
63
|
+
let worst;
|
|
64
|
+
for (const m of series) {
|
|
65
|
+
const pct = mean === 0 ? 0 : round1(((m.expense - mean) / mean) * 100);
|
|
66
|
+
if (worst === undefined || Math.abs(pct) > Math.abs(worst.pct))
|
|
67
|
+
worst = { month: m.month, pct };
|
|
68
|
+
}
|
|
69
|
+
const tops = expenseTop(records, 10);
|
|
70
|
+
const head = cats[0];
|
|
71
|
+
const span = windowLabel(dayOf(firstTimeOf(records)), dayOf(lastTimeOf(records)));
|
|
72
|
+
const label = '近 ' + String(months) + ' 个月(' + startMonth + ' ~ ' + endMonth + ')';
|
|
73
|
+
/* 月度走势:支出/收入两条系列;**没有记录的月给 `null`**(图上断开、不按 0 画)。 */
|
|
74
|
+
const points = (pick) => series.map((m) => ({ label: m.month, value: m.count === 0 ? null : pick(m) }));
|
|
75
|
+
const expenseItems = points((m) => m.expense);
|
|
76
|
+
const chart = {
|
|
77
|
+
title: '月度走势(近 ' + String(months) + ' 个月)',
|
|
78
|
+
kind: 'line',
|
|
79
|
+
input: {
|
|
80
|
+
items: expenseItems,
|
|
81
|
+
options: {
|
|
82
|
+
yTicks: 3,
|
|
83
|
+
labels: 'select',
|
|
84
|
+
legend: true,
|
|
85
|
+
gapStyle: 'dashed',
|
|
86
|
+
series: [
|
|
87
|
+
{ name: '支出', items: expenseItems },
|
|
88
|
+
{ name: '收入', items: points((m) => m.income) },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
title: '看洞察',
|
|
95
|
+
label,
|
|
96
|
+
from: startMonth + '-01',
|
|
97
|
+
to: monthRange(endMonth).end,
|
|
98
|
+
count: records.length,
|
|
99
|
+
conclusion: kpi.count === 0
|
|
100
|
+
? label + ' 一条记录都没有。'
|
|
101
|
+
: label + ' 共 ' + String(kpi.count) + ' 笔:支出 ' + money(kpi.expense) + ' 元、收入 ' + money(kpi.income)
|
|
102
|
+
+ ' 元、净额 ' + money(kpi.net) + ' 元'
|
|
103
|
+
+ (head === undefined ? '。' : ';花得最多的是「' + head.key + '」' + money(head.value) + ' 元(占 ' + pctText(head.pct) + ')')
|
|
104
|
+
+ (worst === undefined ? '。' : ';' + worst.month + ' 支出偏离月均 ' + devText(worst.pct) + '。'),
|
|
105
|
+
caliber: '区间按库里最后一条记录所在的月份往前数 ' + String(months) + ' 个月(不按今天);分类按一级归堆(两级/三级分类并到一级),条长按最大一类折算;月度走势里没有记录的月不补 0、在图上断开;转账不计入收支。',
|
|
106
|
+
chips: [],
|
|
107
|
+
payload: buildTrend('insight', [...records], { limit: 10 }),
|
|
108
|
+
kpi,
|
|
109
|
+
page: {
|
|
110
|
+
kpis: [
|
|
111
|
+
{ label: '区间支出', value: money(kpi.expense), unit: '元' },
|
|
112
|
+
{ label: '区间收入', value: money(kpi.income), unit: '元' },
|
|
113
|
+
{ label: '净额', value: money(kpi.net), unit: '元', detail: kpi.net >= 0 ? '收大于支' : '支大于收' },
|
|
114
|
+
{ label: '笔数', value: String(kpi.count), unit: '笔' },
|
|
115
|
+
],
|
|
116
|
+
factCards: [{
|
|
117
|
+
title: '这批数的事实',
|
|
118
|
+
rows: [
|
|
119
|
+
{ k: '区间', v: span },
|
|
120
|
+
{ k: '趋势均值', v: money(mean) + ' 元/月' },
|
|
121
|
+
{ k: '最大偏离月', v: worst === undefined ? '' : worst.month + '(' + devText(worst.pct) + ')' },
|
|
122
|
+
],
|
|
123
|
+
}],
|
|
124
|
+
barGroups: [{
|
|
125
|
+
title: '消费习惯(分类分布,共 ' + String(cats.length) + ' 类)',
|
|
126
|
+
rows: top.map((c) => ({
|
|
127
|
+
label: c.key,
|
|
128
|
+
text: money(c.value) + ' 元 · ' + String(c.count) + ' 笔 · ' + pctText(c.pct),
|
|
129
|
+
pct: max === 0 ? 0 : round1((c.value / max) * 100),
|
|
130
|
+
})),
|
|
131
|
+
emptyText: '这一段还没有支出记录',
|
|
132
|
+
}],
|
|
133
|
+
charts: [chart],
|
|
134
|
+
listCards: [{
|
|
135
|
+
title: '大额支出 TOP ' + String(tops.length),
|
|
136
|
+
rows: tops.map((r) => ({
|
|
137
|
+
left: dayOf(r.time),
|
|
138
|
+
main: r.note === '' ? r.category : r.category + ' · ' + r.note,
|
|
139
|
+
right: signedMoney(r.amount),
|
|
140
|
+
})),
|
|
141
|
+
emptyText: '这一段还没有支出记录',
|
|
142
|
+
}],
|
|
143
|
+
empty: {
|
|
144
|
+
text: '这 ' + String(months) + ' 个月里一条记录都没有。',
|
|
145
|
+
hint: '先说「记支出」或「记收入」记一笔,回来看这里就有数了。',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=scene-insight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-insight.js","sourceRoot":"","sources":["../../src/analysis/scene-insight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-installment.d.ts","sourceRoot":"","sources":["../../src/analysis/scene-installment.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA+FhD,eAAO,MAAM,gBAAgB,EAAE,aA4F9B,CAAC"}
|