skill-bill 0.2.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 +3 -2
- package/dist/.gen-inputs.json +21 -5
- 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 -40
- package/dist/analysis/views.js.map +1 -0
- package/dist/cli/cmd_read.js +54 -302
- 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 +1 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +9 -1
- package/dist/cli/registry.js.map +1 -1
- 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 +6 -1
- package/dist/fetch/db.d.ts.map +1 -1
- package/dist/fetch/db.js +8 -3
- package/dist/fetch/db.js.map +1 -1
- package/dist/fetch/index.d.ts +1 -1
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +1 -1
- 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/{render → help}/helpFile.d.ts +5 -2
- package/dist/help/helpFile.d.ts.map +1 -0
- package/dist/{render → help}/helpFile.js +13 -4
- 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 -1
- package/dist/help/index.d.ts.map +1 -1
- package/dist/help/index.js +2 -1
- 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 +2 -2
- 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/query/commands.d.ts +0 -2
- package/dist/query/commands.d.ts.map +1 -1
- package/dist/query/commands.js +0 -4
- package/dist/query/commands.js.map +1 -1
- 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 +4 -2
- package/dist/query/detail.d.ts.map +1 -1
- package/dist/query/detail.js +60 -32
- package/dist/query/detail.js.map +1 -1
- package/dist/query/index.d.ts +8 -2
- package/dist/query/index.d.ts.map +1 -1
- package/dist/query/index.js.map +1 -1
- 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 +31 -9
- package/dist/query/list.d.ts.map +1 -1
- package/dist/query/list.js +192 -55
- package/dist/query/list.js.map +1 -1
- 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 +8 -12
- package/dist/query/read.d.ts.map +1 -1
- package/dist/query/read.js +86 -63
- package/dist/query/read.js.map +1 -1
- package/dist/render/envelope.d.ts.map +1 -1
- package/dist/render/envelope.js +3 -11
- package/dist/render/envelope.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 +1 -3
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +5 -6
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +8 -4
- package/dist/render/index.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 -11
- package/dist/shared/category.d.ts.map +1 -0
- package/dist/{policy → shared}/category.js +15 -60
- package/dist/shared/category.js.map +1 -0
- package/dist/shared/commandSpec.d.ts +13 -10
- package/dist/shared/commandSpec.d.ts.map +1 -1
- package/dist/shared/copyArea.d.ts +1 -1
- package/dist/shared/copyArea.d.ts.map +1 -1
- package/dist/shared/copyArea.js +6 -4
- package/dist/shared/copyArea.js.map +1 -1
- 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 +5 -1
- package/dist/shared/docPage.d.ts.map +1 -1
- package/dist/shared/docPage.js +50 -41
- package/dist/shared/docPage.js.map +1 -1
- 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 +11 -2
- package/dist/shared/pageIdentity.d.ts.map +1 -1
- package/dist/shared/pageIdentity.js +14 -2
- package/dist/shared/pageIdentity.js.map +1 -1
- 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 +2 -2
- package/dist/shared/pageShell.d.ts.map +1 -1
- package/dist/shared/pageShell.js +5 -10
- package/dist/shared/pageShell.js.map +1 -1
- 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 +5 -3
- package/dist/shared/writeParts.d.ts.map +1 -1
- package/dist/shared/writeParts.js.map +1 -1
- 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 +4 -26
- package/dist/triggers/wake-assets.d.ts.map +1 -1
- package/dist/triggers/wake-assets.js +52 -936
- package/dist/triggers/wake-assets.js.map +1 -1
- 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/{shared → write}/blockedSlots.d.ts +1 -1
- package/dist/write/blockedSlots.d.ts.map +1 -0
- package/dist/{shared → write}/blockedSlots.js +10 -7
- package/dist/write/blockedSlots.js.map +1 -0
- package/dist/write/candidatePick.d.ts.map +1 -0
- package/dist/{shared → write}/candidatePick.js +4 -3
- package/dist/write/candidatePick.js.map +1 -0
- package/dist/{record → write}/collect.d.ts +6 -4
- package/dist/write/collect.d.ts.map +1 -0
- package/dist/write/collect.js.map +1 -0
- package/dist/{record → write}/collectBody.d.ts +3 -3
- package/dist/write/collectBody.d.ts.map +1 -0
- package/dist/{record → write}/collectBody.js +13 -13
- package/dist/write/collectBody.js.map +1 -0
- package/dist/{shared → write}/collectFrame.d.ts +3 -1
- package/dist/{shared → write}/collectFrame.d.ts.map +1 -1
- package/dist/write/collectFrame.js +36 -0
- package/dist/write/collectFrame.js.map +1 -0
- package/dist/{record → write}/commands.d.ts +0 -1
- package/dist/write/commands.d.ts.map +1 -0
- package/dist/{record → write}/commands.js +0 -2
- 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.map +1 -0
- package/dist/{shared → write}/diffTable.js +1 -1
- package/dist/write/diffTable.js.map +1 -0
- package/dist/write/duplicateNote.d.ts.map +1 -0
- package/dist/{shared → write}/duplicateNote.js +4 -4
- package/dist/write/duplicateNote.js.map +1 -0
- package/dist/write/emptyNote.d.ts.map +1 -0
- package/dist/{shared → write}/emptyNote.js +2 -2
- package/dist/write/emptyNote.js.map +1 -0
- package/dist/{shared → write}/errorReceipt.d.ts +1 -1
- package/dist/write/errorReceipt.d.ts.map +1 -0
- package/dist/{shared → write}/errorReceipt.js +2 -2
- package/dist/write/errorReceipt.js.map +1 -0
- package/dist/write/flowSteps.d.ts.map +1 -0
- package/dist/{shared → write}/flowSteps.js +1 -1
- package/dist/write/flowSteps.js.map +1 -0
- package/dist/{record → write}/index.d.ts +7 -3
- package/dist/write/index.d.ts.map +1 -0
- package/dist/{record → write}/index.js +1 -0
- package/dist/write/index.js.map +1 -0
- package/dist/write/installmentPreview.d.ts.map +1 -0
- package/dist/{shared → write}/installmentPreview.js +3 -3
- package/dist/write/installmentPreview.js.map +1 -0
- package/dist/write/outsideScan.d.ts.map +1 -0
- package/dist/{shared → write}/outsideScan.js +7 -7
- 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.map +1 -0
- package/dist/{shared → write}/photoEscape.js +16 -16
- package/dist/write/photoEscape.js.map +1 -0
- package/dist/write/prefillNote.d.ts.map +1 -0
- package/dist/{shared → write}/prefillNote.js +6 -5
- package/dist/write/prefillNote.js.map +1 -0
- package/dist/{record → write}/receipt.d.ts +5 -3
- package/dist/write/receipt.d.ts.map +1 -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/{record → write}/receiptBody.js +24 -25
- 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/{shared → write}/receiptParts.d.ts +1 -1
- package/dist/write/receiptParts.d.ts.map +1 -0
- package/dist/{shared → write}/receiptParts.js +3 -3
- package/dist/write/receiptParts.js.map +1 -0
- package/dist/{shared → write}/recentPicks.d.ts +14 -6
- 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/write/record.js +46 -0
- package/dist/write/record.js.map +1 -0
- package/dist/write/recordPicker.d.ts.map +1 -0
- package/dist/{shared → write}/recordPicker.js +3 -3
- package/dist/write/recordPicker.js.map +1 -0
- package/dist/write/rowEditorTable.d.ts.map +1 -0
- package/dist/{shared → write}/rowEditorTable.js +1 -1
- package/dist/write/rowEditorTable.js.map +1 -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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.map +1 -0
- package/dist/write/scene-update.js +57 -0
- package/dist/write/scene-update.js.map +1 -0
- package/dist/{record → write}/scene.d.ts +16 -9
- package/dist/write/scene.d.ts.map +1 -0
- package/dist/{record → write}/scene.js +6 -1
- package/dist/write/scene.js.map +1 -0
- package/dist/write/slots.d.ts.map +1 -0
- package/dist/{record → write}/slots.js +9 -8
- package/dist/{record → write}/slots.js.map +1 -1
- 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.map +1 -0
- package/dist/{shared → write}/summaryRow.js +11 -7
- 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/{shared → write}/typeBadge.d.ts +9 -2
- package/dist/write/typeBadge.d.ts.map +1 -0
- package/dist/{shared → write}/typeBadge.js +16 -8
- package/dist/write/typeBadge.js.map +1 -0
- package/dist/{shared → write}/userWording.d.ts +2 -24
- package/dist/write/userWording.d.ts.map +1 -0
- package/dist/{shared → write}/userWording.js +12 -22
- package/dist/write/userWording.js.map +1 -0
- package/dist/write/write.d.ts.map +1 -0
- package/dist/{record → write}/write.js +7 -7
- package/dist/write/write.js.map +1 -0
- package/dist/{help → write}/writeWire.d.ts +1 -1
- package/dist/{help → write}/writeWire.d.ts.map +1 -1
- package/dist/{help → write}/writeWire.js +3 -3
- package/dist/write/writeWire.js.map +1 -0
- package/package.json +3 -3
- package/dist/help/writeWire.js.map +0 -1
- 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 -27
- package/dist/policy/record.d.ts.map +0 -1
- package/dist/policy/record.js +0 -89
- package/dist/policy/record.js.map +0 -1
- package/dist/policy/wakewords.d.ts +0 -18
- package/dist/policy/wakewords.d.ts.map +0 -1
- package/dist/policy/wakewords.js +0 -126
- package/dist/policy/wakewords.js.map +0 -1
- package/dist/record/collect.d.ts.map +0 -1
- package/dist/record/collect.js.map +0 -1
- package/dist/record/collectBody.d.ts.map +0 -1
- package/dist/record/collectBody.js.map +0 -1
- package/dist/record/commands.d.ts.map +0 -1
- package/dist/record/commands.js.map +0 -1
- package/dist/record/index.d.ts.map +0 -1
- package/dist/record/index.js.map +0 -1
- package/dist/record/receipt.d.ts.map +0 -1
- package/dist/record/receipt.js.map +0 -1
- package/dist/record/receiptBody.d.ts +0 -5
- package/dist/record/receiptBody.d.ts.map +0 -1
- package/dist/record/receiptBody.js.map +0 -1
- package/dist/record/scene-batch.d.ts.map +0 -1
- package/dist/record/scene-batch.js +0 -211
- package/dist/record/scene-batch.js.map +0 -1
- package/dist/record/scene-borrow.d.ts.map +0 -1
- package/dist/record/scene-borrow.js +0 -285
- package/dist/record/scene-borrow.js.map +0 -1
- package/dist/record/scene-collect.d.ts.map +0 -1
- package/dist/record/scene-collect.js +0 -294
- package/dist/record/scene-collect.js.map +0 -1
- package/dist/record/scene-expense.d.ts.map +0 -1
- package/dist/record/scene-expense.js +0 -21
- package/dist/record/scene-expense.js.map +0 -1
- package/dist/record/scene-income.d.ts.map +0 -1
- package/dist/record/scene-income.js +0 -219
- package/dist/record/scene-income.js.map +0 -1
- package/dist/record/scene-installment.d.ts.map +0 -1
- package/dist/record/scene-installment.js +0 -248
- package/dist/record/scene-installment.js.map +0 -1
- package/dist/record/scene-lend.d.ts.map +0 -1
- package/dist/record/scene-lend.js +0 -273
- package/dist/record/scene-lend.js.map +0 -1
- package/dist/record/scene-photo.d.ts.map +0 -1
- package/dist/record/scene-photo.js +0 -262
- package/dist/record/scene-photo.js.map +0 -1
- package/dist/record/scene-plain.d.ts.map +0 -1
- package/dist/record/scene-plain.js +0 -221
- package/dist/record/scene-plain.js.map +0 -1
- package/dist/record/scene-refund.d.ts.map +0 -1
- package/dist/record/scene-refund.js +0 -281
- package/dist/record/scene-refund.js.map +0 -1
- package/dist/record/scene-reimburse-done.d.ts.map +0 -1
- package/dist/record/scene-reimburse-done.js +0 -288
- package/dist/record/scene-reimburse-done.js.map +0 -1
- package/dist/record/scene-reimburse.d.ts.map +0 -1
- package/dist/record/scene-reimburse.js +0 -224
- package/dist/record/scene-reimburse.js.map +0 -1
- package/dist/record/scene-repay.d.ts.map +0 -1
- package/dist/record/scene-repay.js +0 -294
- package/dist/record/scene-repay.js.map +0 -1
- package/dist/record/scene-restore.d.ts.map +0 -1
- package/dist/record/scene-restore.js +0 -250
- package/dist/record/scene-restore.js.map +0 -1
- package/dist/record/scene-undo.d.ts.map +0 -1
- package/dist/record/scene-undo.js +0 -262
- package/dist/record/scene-undo.js.map +0 -1
- package/dist/record/scene-update.d.ts.map +0 -1
- package/dist/record/scene-update.js +0 -249
- package/dist/record/scene-update.js.map +0 -1
- package/dist/record/scene.d.ts.map +0 -1
- package/dist/record/scene.js.map +0 -1
- package/dist/record/slots.d.ts.map +0 -1
- package/dist/record/write.d.ts.map +0 -1
- package/dist/record/write.js.map +0 -1
- package/dist/render/helpFile.d.ts.map +0 -1
- package/dist/render/helpFile.js.map +0 -1
- package/dist/render/helpPaths.d.ts +0 -19
- package/dist/render/helpPaths.d.ts.map +0 -1
- package/dist/render/helpPaths.js +0 -19
- package/dist/render/helpPaths.js.map +0 -1
- package/dist/render/views.d.ts +0 -64
- package/dist/render/views.d.ts.map +0 -1
- package/dist/render/views.js.map +0 -1
- package/dist/shared/blockedSlots.d.ts.map +0 -1
- package/dist/shared/blockedSlots.js.map +0 -1
- package/dist/shared/candidatePick.d.ts.map +0 -1
- package/dist/shared/candidatePick.js.map +0 -1
- package/dist/shared/collectFrame.js +0 -34
- package/dist/shared/collectFrame.js.map +0 -1
- package/dist/shared/diffTable.d.ts.map +0 -1
- package/dist/shared/diffTable.js.map +0 -1
- package/dist/shared/duplicateNote.d.ts.map +0 -1
- package/dist/shared/duplicateNote.js.map +0 -1
- package/dist/shared/emptyNote.d.ts.map +0 -1
- package/dist/shared/emptyNote.js.map +0 -1
- package/dist/shared/errorReceipt.d.ts.map +0 -1
- package/dist/shared/errorReceipt.js.map +0 -1
- package/dist/shared/flowSteps.d.ts.map +0 -1
- package/dist/shared/flowSteps.js.map +0 -1
- package/dist/shared/installmentPreview.d.ts.map +0 -1
- package/dist/shared/installmentPreview.js.map +0 -1
- package/dist/shared/outsideScan.d.ts.map +0 -1
- package/dist/shared/outsideScan.js.map +0 -1
- package/dist/shared/photoEscape.d.ts.map +0 -1
- package/dist/shared/photoEscape.js.map +0 -1
- package/dist/shared/prefillNote.d.ts.map +0 -1
- package/dist/shared/prefillNote.js.map +0 -1
- package/dist/shared/receiptParts.d.ts.map +0 -1
- package/dist/shared/receiptParts.js.map +0 -1
- package/dist/shared/recentPicks.d.ts.map +0 -1
- package/dist/shared/recentPicks.js +0 -41
- package/dist/shared/recentPicks.js.map +0 -1
- package/dist/shared/recordPicker.d.ts.map +0 -1
- package/dist/shared/recordPicker.js.map +0 -1
- package/dist/shared/rowEditorTable.d.ts.map +0 -1
- package/dist/shared/rowEditorTable.js.map +0 -1
- package/dist/shared/summaryRow.d.ts.map +0 -1
- package/dist/shared/summaryRow.js.map +0 -1
- package/dist/shared/typeBadge.d.ts.map +0 -1
- package/dist/shared/typeBadge.js.map +0 -1
- package/dist/shared/userWording.d.ts.map +0 -1
- package/dist/shared/userWording.js.map +0 -1
- /package/dist/{shared → write}/candidatePick.d.ts +0 -0
- /package/dist/{record → write}/collect.js +0 -0
- /package/dist/{shared → write}/diffTable.d.ts +0 -0
- /package/dist/{shared → write}/duplicateNote.d.ts +0 -0
- /package/dist/{shared → write}/emptyNote.d.ts +0 -0
- /package/dist/{shared → write}/flowSteps.d.ts +0 -0
- /package/dist/{shared → write}/installmentPreview.d.ts +0 -0
- /package/dist/{shared → write}/outsideScan.d.ts +0 -0
- /package/dist/{shared → write}/photoEscape.d.ts +0 -0
- /package/dist/{shared → write}/prefillNote.d.ts +0 -0
- /package/dist/{record → write}/receipt.js +0 -0
- /package/dist/{shared → write}/recordPicker.d.ts +0 -0
- /package/dist/{shared → write}/rowEditorTable.d.ts +0 -0
- /package/dist/{record → write}/scene-batch.d.ts +0 -0
- /package/dist/{record → write}/scene-borrow.d.ts +0 -0
- /package/dist/{record → write}/scene-collect.d.ts +0 -0
- /package/dist/{record → write}/scene-expense.d.ts +0 -0
- /package/dist/{record → write}/scene-income.d.ts +0 -0
- /package/dist/{record → write}/scene-installment.d.ts +0 -0
- /package/dist/{record → write}/scene-lend.d.ts +0 -0
- /package/dist/{record → write}/scene-photo.d.ts +0 -0
- /package/dist/{record → write}/scene-plain.d.ts +0 -0
- /package/dist/{record → write}/scene-refund.d.ts +0 -0
- /package/dist/{record → write}/scene-reimburse-done.d.ts +0 -0
- /package/dist/{record → write}/scene-reimburse.d.ts +0 -0
- /package/dist/{record → write}/scene-repay.d.ts +0 -0
- /package/dist/{record → write}/scene-restore.d.ts +0 -0
- /package/dist/{record → write}/scene-undo.d.ts +0 -0
- /package/dist/{record → write}/scene-update.d.ts +0 -0
- /package/dist/{record → write}/slots.d.ts +0 -0
- /package/dist/{shared → write}/summaryRow.d.ts +0 -0
- /package/dist/{record → write}/write.d.ts +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { SerializableEnvelope, StatusKind } from 'base-paint';
|
|
2
|
+
import type { DataTableColumn, DataTableRow, KpiCardInput, ParamFieldInput } from 'base-paint/blocks';
|
|
3
|
+
import type { PageShellInput } from '../shared/pageShell.js';
|
|
4
|
+
import type { GoalBudgetStatus, GoalSavingStatus } from './goalData.js';
|
|
5
|
+
/** 目标域各页的眉标:**只在本域写一次**(共用位不持「域名→取值」表)。 */
|
|
6
|
+
export declare const EYEBROW = "\u8BB0\u8D26\uFF5C\u76EE\u6807\u57DF";
|
|
7
|
+
/** 本域各页统一走它:补上眉标再转共用位的 `pageShell`;调用点写法 `pageShell({…})` 不变。 */
|
|
8
|
+
export declare function goalPageShell(input: Omit<PageShellInput, 'eyebrow'>): string;
|
|
9
|
+
/** 写命令两页的页面内置 envelope(采集页 `ok:false`、回执页 `ok:true`;两页同一形状 `receipt`)。 */
|
|
10
|
+
export declare function envelopeOf(key: string, ok: boolean, message: string): SerializableEnvelope;
|
|
11
|
+
/** 读命令那一页的 envelope(形状 `list`,`items` 必有、`total` 可选;判据不许宽过公共层)。 */
|
|
12
|
+
export declare function listEnvelopeOf(key: string, data: {
|
|
13
|
+
readonly items: unknown[];
|
|
14
|
+
readonly total?: number;
|
|
15
|
+
}): SerializableEnvelope;
|
|
16
|
+
/** 缺值占位(裁定 4)。 */
|
|
17
|
+
export declare const MISSING = "\u2014";
|
|
18
|
+
/** 金额文本:两位小数。数字照实写(含 0);不是有限数就写缺值占位。 */
|
|
19
|
+
export declare function money(n: number | null | undefined): string;
|
|
20
|
+
/** 进度百分比的双端夹取(**唯一定义地**,见件头口径):条长与上屏的百分数同取一份。 */
|
|
21
|
+
export declare function clampPct(n: number | null | undefined): number;
|
|
22
|
+
/** 百分比文本:一位小数(老侧 `fmtPct` 同口径),值已双端夹取。 */
|
|
23
|
+
export declare function pctText(n: number | null | undefined): string;
|
|
24
|
+
/** 月底预测那一句(**唯一定义地**;#688 §二 C13 的三态)。
|
|
25
|
+
*
|
|
26
|
+
* 三态判据与阈值逐字照老侧 `目标/budget_view.html:214-219`:`diff > 0.01` 预计超、
|
|
27
|
+
* `diff < -0.01` 预计省、其间预计持平。**空预测=空串**(`month_end_proj` 为 `null` 是「这一月没有预测可给」,
|
|
28
|
+
* 老侧那一支同样是空串——它靠 `b.month_end_proj != null && b.days_elapsed` 两个假值反查,新侧只判一处)。 */
|
|
29
|
+
export declare function monthEndHintOf(item: {
|
|
30
|
+
readonly month_end_proj: number | null;
|
|
31
|
+
readonly daily_avg: number | null;
|
|
32
|
+
readonly amount: number;
|
|
33
|
+
}): string;
|
|
34
|
+
/** 一个值写成上屏文本:空白串与缺值一律 `—`(不写 `undefined`、不留空)。 */
|
|
35
|
+
export declare function textOrDash(v: unknown): string;
|
|
36
|
+
/** 预算状态的说法(老侧 `budget_view.html:101-105` 的 `STATUS_META` 逐字)。 */
|
|
37
|
+
export declare const BUDGET_STATUS_META: Readonly<Record<GoalBudgetStatus, {
|
|
38
|
+
readonly kind: StatusKind;
|
|
39
|
+
readonly label: string;
|
|
40
|
+
}>>;
|
|
41
|
+
/** 目标状态的说法(老侧 `saving_view.html:99-104` 的 `STATUS_META` 逐字;档位照老侧 `:220` 的映射)。 */
|
|
42
|
+
export declare const SAVING_STATUS_META: Readonly<Record<GoalSavingStatus, {
|
|
43
|
+
readonly kind: StatusKind;
|
|
44
|
+
readonly label: string;
|
|
45
|
+
}>>;
|
|
46
|
+
/** 类型徽章那一串(唤醒词 + 口径 + 状态徽章 + 下一步动作):四枚形状各自独立,不拼分隔符串。
|
|
47
|
+
* 形状照写入域 `../write/typeBadge.js` 与账户域 `../account/pageParts.js` 的同一套,本件只喂目标自己的取值。 */
|
|
48
|
+
export declare function badgeOf(input: {
|
|
49
|
+
readonly word: string;
|
|
50
|
+
/** 第二枚胶囊那句话(本域页面的口径;空串=只出唤醒词那一枚)。 */
|
|
51
|
+
readonly caliber: string;
|
|
52
|
+
readonly status: StatusKind;
|
|
53
|
+
readonly statusText: string;
|
|
54
|
+
/** 下一步动作(整句;空串=不出)。按句号分行,一句一行口径。 */
|
|
55
|
+
readonly next: string;
|
|
56
|
+
}): string;
|
|
57
|
+
/** 字段卡的一格(普通数据:参数名/中文名/怎么给/是否必需)。 */
|
|
58
|
+
export interface GoalField {
|
|
59
|
+
readonly name: string;
|
|
60
|
+
readonly label: string;
|
|
61
|
+
readonly hint: string;
|
|
62
|
+
readonly required: boolean;
|
|
63
|
+
}
|
|
64
|
+
/** 字段卡的格子:一律由 `renderParamForm` 出(标签与控件配对、每格带 `name`)。
|
|
65
|
+
* 值一律取本次参数——老侧表单页也是把 AI 解析出的字段透传回来回显(`render.py:126-127` 那一类)。 */
|
|
66
|
+
export declare function slotFieldsOf(params: Record<string, unknown>, fields: readonly GoalField[]): ParamFieldInput[];
|
|
67
|
+
/** 缺项阻断条:**收进折叠区**(点开才看得见),里面是「还缺什么」表 + 只读的口令原文 + 一句口径。
|
|
68
|
+
* 铁口径(照 #688 裁定 9):缺项时**不出**可复制的写库指令——页面上那条口令只给看不给复制。 */
|
|
69
|
+
export declare function blockedFoldOf(input: {
|
|
70
|
+
readonly blocked: readonly {
|
|
71
|
+
readonly name: string;
|
|
72
|
+
readonly label: string;
|
|
73
|
+
readonly why: string;
|
|
74
|
+
}[];
|
|
75
|
+
/** 补齐后照抄的那条命令原文(缺的值留成尖括号占位符;「确认覆盖」那一格写 `true`)。 */
|
|
76
|
+
readonly command: string;
|
|
77
|
+
}): string;
|
|
78
|
+
/** 复制指令块(过程型页的「照这句跟助手说一遍」):走公共层 `renderPreBlock` 的自带复制按钮。 */
|
|
79
|
+
export declare function promptBlockOf(prompt: string, label?: string): string;
|
|
80
|
+
/** 复制区(数据位 + 日志位;三格式与双按钮由共用件给)。 */
|
|
81
|
+
export declare function copyZoneOf(input: {
|
|
82
|
+
readonly envelope: SerializableEnvelope;
|
|
83
|
+
readonly title: string;
|
|
84
|
+
readonly key: string;
|
|
85
|
+
readonly params: Record<string, unknown>;
|
|
86
|
+
readonly source: string;
|
|
87
|
+
readonly detail: string;
|
|
88
|
+
readonly actionAt: string;
|
|
89
|
+
}): string;
|
|
90
|
+
/** 空态(含「接下来怎么办」那一句):预算表为空、目标表为空、当月无记录几处共用。 */
|
|
91
|
+
export declare function emptyOf(input: {
|
|
92
|
+
readonly title?: string;
|
|
93
|
+
readonly text: string;
|
|
94
|
+
readonly next: string;
|
|
95
|
+
}): string;
|
|
96
|
+
/** 来源脚注(结果型页恒出,照 #688 §五 5.2 第 26 行):三样值由调用方给。 */
|
|
97
|
+
export declare function sourceNoteOf(input: {
|
|
98
|
+
readonly sourceText: string;
|
|
99
|
+
readonly start: string;
|
|
100
|
+
readonly end: string;
|
|
101
|
+
readonly count: number;
|
|
102
|
+
}): string;
|
|
103
|
+
/** 缺项时那条口令原文:缺的值留成尖括号占位符,**只给看不给复制**。
|
|
104
|
+
* 两处与账户域不同:①「确认覆盖」那一格映射成 `true`(它不是用户填的槽位,是「覆盖掉那一条」这个意图);
|
|
105
|
+
* ②其余格按参数名映射。 */
|
|
106
|
+
export declare function blockedCommandOf(key: string, params: Record<string, unknown>, blocked: readonly {
|
|
107
|
+
readonly name: string;
|
|
108
|
+
readonly label: string;
|
|
109
|
+
}[]): string;
|
|
110
|
+
/** 回执页的状态卡:新设/覆盖了旧的 + 一句写入去向的说明。 */
|
|
111
|
+
export declare function receiptStatusCard(overwritten: boolean): KpiCardInput;
|
|
112
|
+
/** 一格的状态值:值 + 一句说明。 */
|
|
113
|
+
export declare function statusCard(value: string, detail: string): KpiCardInput;
|
|
114
|
+
/** 页尾「对账信息」折叠区:本次写入的**可核对信息**(改了几处/什么时候写的/怎么核对)。 */
|
|
115
|
+
export declare function reconcileOf(input: {
|
|
116
|
+
readonly actionAt: string;
|
|
117
|
+
readonly changed: number;
|
|
118
|
+
readonly note: string;
|
|
119
|
+
}): string;
|
|
120
|
+
/** 采集页/回执页明细表的列(**这一族页型唯一定义地**:表头文本与每格 `data-label` 同源)。 */
|
|
121
|
+
export declare const DETAIL_COLUMNS: readonly DataTableColumn[];
|
|
122
|
+
/** 明细表的行:普通数据,按面量接口给(`renderDataTable` 收 `Record<string, unknown>`)。 */
|
|
123
|
+
export declare function detailRows(rows: readonly {
|
|
124
|
+
readonly k: string;
|
|
125
|
+
readonly v: string;
|
|
126
|
+
}[]): readonly DataTableRow[];
|
|
127
|
+
/** 复制日志第 3 段的三句来源:给机器看的那句可带载体名,上屏(来源脚注)的那句只写人话
|
|
128
|
+
* (照 #688 裁定 1:库文件名、命令名与脚本路径一律不上屏)。 */
|
|
129
|
+
export declare const SOURCE_COLLECT = "\u76EE\u6807\u8868\uFF08\u53EA\u8BFB\uFF1A\u8FD9\u4E00\u9875\u5148\u4E0D\u5199\u5E93\uFF0C\u53EA\u91C7\u96C6\uFF09";
|
|
130
|
+
export declare const SOURCE_WRITE = "\u76EE\u6807\u8868\uFF08\u5199\u5E93\u56DE\u6267\uFF09";
|
|
131
|
+
export declare const SOURCE_COLLECT_TEXT = "\u76EE\u6807\u8868\uFF08\u53EA\u8BFB\uFF09";
|
|
132
|
+
export declare const SOURCE_WRITE_TEXT = "\u76EE\u6807\u8868\uFF08\u5199\u5165\uFF09";
|
|
133
|
+
/** 采集页/回执页复制口令那一段(「照这句跟助手说一遍」):说清是哪条词、每一格填什么。
|
|
134
|
+
* 空着的格写 `____`(必填)或 `____(选填)`,与老侧复制文本的占位写法同义(老侧写 `__如:3000__`)。 */
|
|
135
|
+
export declare function promptOf(word: string, slots: readonly {
|
|
136
|
+
readonly name: string;
|
|
137
|
+
readonly label: string;
|
|
138
|
+
readonly required: boolean;
|
|
139
|
+
}[], params: Record<string, unknown>): string;
|
|
140
|
+
//# sourceMappingURL=pageParts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageParts.d.ts","sourceRoot":"","sources":["../../src/goal/pageParts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/** 目标域页内共件:**本域眉标**、**两张页型共用的页框**、**几处取值口径**(金额文本、状态说法、
|
|
2
|
+
* 进度百分比夹取、字段卡的格子、缺项折叠区、复制区与来源脚注)。
|
|
3
|
+
*
|
|
4
|
+
* 谁在用(三个调用点,指名):
|
|
5
|
+
* ① `src/goal/template-form.ts`——设定表单页型(采集页 + 回执页)两个调用点;
|
|
6
|
+
* ② `src/goal/template-progress.ts`——进度视图页型(结果型 ⑥)两个调用点(预算/目标各一张);
|
|
7
|
+
* ③ `src/goal/scene-{set-budget,set-saving,budget,saving}.ts`——四件场景件取文案与取值口径。
|
|
8
|
+
*
|
|
9
|
+
* 本件**不含块位序列**(那是两份模板件的活),也不碰库与文件:只把普通数据加工成普通数据/
|
|
10
|
+
* 把公共层区块接成一串。分家理由与写入域、账户域同:块序的变化频率与取值口径不同,抄多份就会改一处漏几处。
|
|
11
|
+
*
|
|
12
|
+
* 口径(一处定义,别处不许再写第二份):
|
|
13
|
+
* - **眉标**=`记账 · 目标域`(`shared/pageShell.ts` 不持「域名 → 取值」表,照 #688 §二 A1「域自报眉标」);
|
|
14
|
+
* - **缺值一律 `—`**(#688 裁定 4;数字 0 是真实读数,照实写 0);
|
|
15
|
+
* - **金额两位小数**(`toFixed(2)`,与查询域/账户域同一口径;老侧的千分位分隔符不照抄——
|
|
16
|
+
* 数值格式统一由公共层读数卡与表格承载,页面本地不另造一套格式化);
|
|
17
|
+
* - **进度百分比双端夹取 `0 ≤ pct ≤ 100`**(#688 §二 C13:老侧 `budget_view.html:209` 只有上界
|
|
18
|
+
* `Math.min(pct,100)`、负值会画负宽度且 `:228` 显示负百分比,而同域 `saving_view.html:208` 是双端——
|
|
19
|
+
* **同域两套下界口径,新侧取双端**;公共层读数卡的 `bar.pct` 本来就是 0–100 的闭区间,
|
|
20
|
+
* 夹取必须在进条之前完成,故这里是唯一一处);
|
|
21
|
+
* - **内部标识不上屏**(#688 裁定 1):页面上不出现 `bill.`、库文件名、脚本路径、参数名——
|
|
22
|
+
* 唯一例外是复制载荷区与两处「口令原文」块(复制指令块、缺项折叠里的明文),那两处是给助手照抄的原文。
|
|
23
|
+
*/
|
|
24
|
+
import { renderStatusBadge } from 'base-paint';
|
|
25
|
+
import { renderCaliberLine, renderChips, renderDataTable, renderDisclosure, renderEmptyBlock, renderPreBlock } from 'base-paint/blocks';
|
|
26
|
+
import { copyArea, copyLog } from '../shared/copyArea.js';
|
|
27
|
+
import { DOC_SKILL, DOC_VERSION, sceneKeyOf } from '../shared/pageIdentity.js';
|
|
28
|
+
import { pageShell } from '../shared/pageShell.js';
|
|
29
|
+
import { sourceLine } from '../shared/sourceLine.js';
|
|
30
|
+
import { commandLine } from '../shared/writeParts.js';
|
|
31
|
+
/** 目标域各页的眉标:**只在本域写一次**(共用位不持「域名→取值」表)。 */
|
|
32
|
+
export const EYEBROW = '记账|目标域';
|
|
33
|
+
/** 本域各页统一走它:补上眉标再转共用位的 `pageShell`;调用点写法 `pageShell({…})` 不变。 */
|
|
34
|
+
export function goalPageShell(input) {
|
|
35
|
+
return pageShell({ ...input, eyebrow: EYEBROW });
|
|
36
|
+
}
|
|
37
|
+
/** 写命令两页的页面内置 envelope(采集页 `ok:false`、回执页 `ok:true`;两页同一形状 `receipt`)。 */
|
|
38
|
+
export function envelopeOf(key, ok, message) {
|
|
39
|
+
return { version: DOC_VERSION, skill: DOC_SKILL, shape: 'receipt', key: sceneKeyOf(key), data: { ok, message } };
|
|
40
|
+
}
|
|
41
|
+
/** 读命令那一页的 envelope(形状 `list`,`items` 必有、`total` 可选;判据不许宽过公共层)。 */
|
|
42
|
+
export function listEnvelopeOf(key, data) {
|
|
43
|
+
return { version: DOC_VERSION, skill: DOC_SKILL, shape: 'list', key: sceneKeyOf(key), data };
|
|
44
|
+
}
|
|
45
|
+
/** 缺值占位(裁定 4)。 */
|
|
46
|
+
export const MISSING = '—';
|
|
47
|
+
/** 金额文本:两位小数。数字照实写(含 0);不是有限数就写缺值占位。 */
|
|
48
|
+
export function money(n) {
|
|
49
|
+
if (n === null || n === undefined || !Number.isFinite(n))
|
|
50
|
+
return MISSING;
|
|
51
|
+
return n.toFixed(2);
|
|
52
|
+
}
|
|
53
|
+
/** 进度百分比的双端夹取(**唯一定义地**,见件头口径):条长与上屏的百分数同取一份。 */
|
|
54
|
+
export function clampPct(n) {
|
|
55
|
+
if (n === null || n === undefined || !Number.isFinite(n))
|
|
56
|
+
return 0;
|
|
57
|
+
return Math.min(Math.max(n, 0), 100);
|
|
58
|
+
}
|
|
59
|
+
/** 百分比文本:一位小数(老侧 `fmtPct` 同口径),值已双端夹取。 */
|
|
60
|
+
export function pctText(n) {
|
|
61
|
+
return clampPct(n).toFixed(1) + '%';
|
|
62
|
+
}
|
|
63
|
+
/** 月底预测那一句(**唯一定义地**;#688 §二 C13 的三态)。
|
|
64
|
+
*
|
|
65
|
+
* 三态判据与阈值逐字照老侧 `目标/budget_view.html:214-219`:`diff > 0.01` 预计超、
|
|
66
|
+
* `diff < -0.01` 预计省、其间预计持平。**空预测=空串**(`month_end_proj` 为 `null` 是「这一月没有预测可给」,
|
|
67
|
+
* 老侧那一支同样是空串——它靠 `b.month_end_proj != null && b.days_elapsed` 两个假值反查,新侧只判一处)。 */
|
|
68
|
+
export function monthEndHintOf(item) {
|
|
69
|
+
if (item.month_end_proj === null || item.daily_avg === null)
|
|
70
|
+
return '';
|
|
71
|
+
const diff = item.month_end_proj - item.amount;
|
|
72
|
+
const hint = diff > 0.01 ? '预计超 ' + money(diff) + ' 元'
|
|
73
|
+
: diff < -0.01 ? '预计省 ' + money(Math.abs(diff)) + ' 元' : '预计持平';
|
|
74
|
+
return '日均 ' + money(item.daily_avg) + ' 元 · 按此节奏月底预计 ' + money(item.month_end_proj) + ' 元(' + hint + ')';
|
|
75
|
+
}
|
|
76
|
+
/** 一个值写成上屏文本:空白串与缺值一律 `—`(不写 `undefined`、不留空)。 */
|
|
77
|
+
export function textOrDash(v) {
|
|
78
|
+
const s = typeof v === 'string' ? v.trim() : v === null || v === undefined ? '' : String(v);
|
|
79
|
+
return s === '' ? MISSING : s;
|
|
80
|
+
}
|
|
81
|
+
/** 预算状态的说法(老侧 `budget_view.html:101-105` 的 `STATUS_META` 逐字)。 */
|
|
82
|
+
export const BUDGET_STATUS_META = {
|
|
83
|
+
ok: { kind: 'ok', label: '预算内' },
|
|
84
|
+
warn: { kind: 'warn', label: '接近上限' },
|
|
85
|
+
over: { kind: 'danger', label: '已超支' },
|
|
86
|
+
};
|
|
87
|
+
/** 目标状态的说法(老侧 `saving_view.html:99-104` 的 `STATUS_META` 逐字;档位照老侧 `:220` 的映射)。 */
|
|
88
|
+
export const SAVING_STATUS_META = {
|
|
89
|
+
done: { kind: 'ok', label: '已达成' },
|
|
90
|
+
on_track: { kind: 'ok', label: '进行中' },
|
|
91
|
+
behind: { kind: 'warn', label: '进度落后' },
|
|
92
|
+
na: { kind: 'empty', label: '暂无进度' },
|
|
93
|
+
};
|
|
94
|
+
/** 类型徽章那一串(唤醒词 + 口径 + 状态徽章 + 下一步动作):四枚形状各自独立,不拼分隔符串。
|
|
95
|
+
* 形状照写入域 `../write/typeBadge.js` 与账户域 `../account/pageParts.js` 的同一套,本件只喂目标自己的取值。 */
|
|
96
|
+
export function badgeOf(input) {
|
|
97
|
+
const items = input.caliber === '' ? [{ text: input.word }] : [{ text: input.word }, { text: input.caliber }];
|
|
98
|
+
const parts = [renderChips({ items }), renderStatusBadge({ status: input.status, text: input.statusText })];
|
|
99
|
+
const next = input.next.trim();
|
|
100
|
+
if (next !== '') {
|
|
101
|
+
for (const line of next.split('。').map((s) => s.trim()).filter((s) => s !== '')) {
|
|
102
|
+
parts.push(renderCaliberLine(line + '。'));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return parts.join('');
|
|
106
|
+
}
|
|
107
|
+
/** 字段卡的格子:一律由 `renderParamForm` 出(标签与控件配对、每格带 `name`)。
|
|
108
|
+
* 值一律取本次参数——老侧表单页也是把 AI 解析出的字段透传回来回显(`render.py:126-127` 那一类)。 */
|
|
109
|
+
export function slotFieldsOf(params, fields) {
|
|
110
|
+
return fields.map((f) => {
|
|
111
|
+
const raw = params[f.name];
|
|
112
|
+
const value = raw === true ? '是' : raw === false || raw === undefined || raw === null ? '' : String(raw).trim();
|
|
113
|
+
return {
|
|
114
|
+
name: f.name,
|
|
115
|
+
label: f.label,
|
|
116
|
+
hint: f.hint,
|
|
117
|
+
...(f.required ? { required: true } : {}),
|
|
118
|
+
...(value === '' ? {} : { value }),
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/** 缺项阻断条:**收进折叠区**(点开才看得见),里面是「还缺什么」表 + 只读的口令原文 + 一句口径。
|
|
123
|
+
* 铁口径(照 #688 裁定 9):缺项时**不出**可复制的写库指令——页面上那条口令只给看不给复制。 */
|
|
124
|
+
export function blockedFoldOf(input) {
|
|
125
|
+
if (input.blocked.length === 0)
|
|
126
|
+
return '';
|
|
127
|
+
return renderChips({ items: input.blocked.map((b) => ({ text: b.label })) })
|
|
128
|
+
+ renderDisclosure({
|
|
129
|
+
title: '还缺什么(点开看补齐后照抄的那条)',
|
|
130
|
+
contentHtml: renderDataTable({
|
|
131
|
+
columns: [
|
|
132
|
+
{ key: 'label', label: '还缺哪一项' },
|
|
133
|
+
{ key: 'why', label: '为什么进不去' },
|
|
134
|
+
],
|
|
135
|
+
rows: input.blocked.map((b) => ({ label: b.label, why: b.why === '没给' ? '这一项没给' : b.why })),
|
|
136
|
+
caption: '缺一项就先不写进去',
|
|
137
|
+
}) + renderPreBlock({ command: input.command, label: '口令原文(只给看不给复制)' })
|
|
138
|
+
+ renderCaliberLine('这一页先不写库;补齐之后照上面那句跟助手说一遍才会写。'),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/** 复制指令块(过程型页的「照这句跟助手说一遍」):走公共层 `renderPreBlock` 的自带复制按钮。 */
|
|
142
|
+
export function promptBlockOf(prompt, label = '复制给助手:这一句可以直接复制') {
|
|
143
|
+
return renderPreBlock({
|
|
144
|
+
label,
|
|
145
|
+
command: prompt,
|
|
146
|
+
actionId: 'ilife-goal-prompt',
|
|
147
|
+
copyText: prompt,
|
|
148
|
+
copyLabel: label,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/** 复制区(数据位 + 日志位;三格式与双按钮由共用件给)。 */
|
|
152
|
+
export function copyZoneOf(input) {
|
|
153
|
+
return copyArea({
|
|
154
|
+
data: { envelope: input.envelope, title: input.title },
|
|
155
|
+
log: {
|
|
156
|
+
envelope: input.envelope,
|
|
157
|
+
copyLog: copyLog({
|
|
158
|
+
command: commandLine(input.key, input.params),
|
|
159
|
+
source: input.source,
|
|
160
|
+
detail: input.detail,
|
|
161
|
+
actionAt: input.actionAt,
|
|
162
|
+
version: DOC_VERSION,
|
|
163
|
+
}),
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/** 空态(含「接下来怎么办」那一句):预算表为空、目标表为空、当月无记录几处共用。 */
|
|
168
|
+
export function emptyOf(input) {
|
|
169
|
+
return renderEmptyBlock({ ...(input.title === undefined ? {} : { title: input.title }), text: input.text, hint: input.next });
|
|
170
|
+
}
|
|
171
|
+
/** 来源脚注(结果型页恒出,照 #688 §五 5.2 第 26 行):三样值由调用方给。 */
|
|
172
|
+
export function sourceNoteOf(input) {
|
|
173
|
+
return sourceLine({ source: input.sourceText, start: input.start, end: input.end, count: input.count });
|
|
174
|
+
}
|
|
175
|
+
/** 缺项时那条口令原文:缺的值留成尖括号占位符,**只给看不给复制**。
|
|
176
|
+
* 两处与账户域不同:①「确认覆盖」那一格映射成 `true`(它不是用户填的槽位,是「覆盖掉那一条」这个意图);
|
|
177
|
+
* ②其余格按参数名映射。 */
|
|
178
|
+
export function blockedCommandOf(key, params, blocked) {
|
|
179
|
+
const filled = { ...params };
|
|
180
|
+
for (const b of blocked) {
|
|
181
|
+
filled[b.name] = b.name === 'force' ? true : '<' + b.label + '>';
|
|
182
|
+
}
|
|
183
|
+
return commandLine(key, filled);
|
|
184
|
+
}
|
|
185
|
+
/** 回执页的状态卡:新设/覆盖了旧的 + 一句写入去向的说明。 */
|
|
186
|
+
export function receiptStatusCard(overwritten) {
|
|
187
|
+
return statusCard(overwritten ? '覆盖了旧的' : '新设的', overwritten ? '同月同类那一条已按新值改写' : '这一条是这次新加的');
|
|
188
|
+
}
|
|
189
|
+
/** 一格的状态值:值 + 一句说明。 */
|
|
190
|
+
export function statusCard(value, detail) {
|
|
191
|
+
return { label: '状态', value, detail };
|
|
192
|
+
}
|
|
193
|
+
/** 页尾「对账信息」折叠区:本次写入的**可核对信息**(改了几处/什么时候写的/怎么核对)。 */
|
|
194
|
+
export function reconcileOf(input) {
|
|
195
|
+
return renderDisclosure({
|
|
196
|
+
title: '对账信息',
|
|
197
|
+
contentHtml: renderDataTable({
|
|
198
|
+
columns: [{ key: 'k', label: '哪一项' }, { key: 'v', label: '记成什么' }],
|
|
199
|
+
rows: [
|
|
200
|
+
{ k: '改了目标表里几处', v: String(input.changed) + ' 处' },
|
|
201
|
+
{ k: '写入时间', v: input.actionAt },
|
|
202
|
+
{ k: '怎么核对', v: input.note },
|
|
203
|
+
],
|
|
204
|
+
}),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
/** 采集页/回执页明细表的列(**这一族页型唯一定义地**:表头文本与每格 `data-label` 同源)。 */
|
|
208
|
+
export const DETAIL_COLUMNS = [
|
|
209
|
+
{ key: 'k', label: '哪一项' },
|
|
210
|
+
{ key: 'v', label: '记成什么' },
|
|
211
|
+
];
|
|
212
|
+
/** 明细表的行:普通数据,按面量接口给(`renderDataTable` 收 `Record<string, unknown>`)。 */
|
|
213
|
+
export function detailRows(rows) {
|
|
214
|
+
return rows.map((r) => ({ ...r }));
|
|
215
|
+
}
|
|
216
|
+
/** 复制日志第 3 段的三句来源:给机器看的那句可带载体名,上屏(来源脚注)的那句只写人话
|
|
217
|
+
* (照 #688 裁定 1:库文件名、命令名与脚本路径一律不上屏)。 */
|
|
218
|
+
export const SOURCE_COLLECT = '目标表(只读:这一页先不写库,只采集)';
|
|
219
|
+
export const SOURCE_WRITE = '目标表(写库回执)';
|
|
220
|
+
export const SOURCE_COLLECT_TEXT = '目标表(只读)';
|
|
221
|
+
export const SOURCE_WRITE_TEXT = '目标表(写入)';
|
|
222
|
+
/** 采集页/回执页复制口令那一段(「照这句跟助手说一遍」):说清是哪条词、每一格填什么。
|
|
223
|
+
* 空着的格写 `____`(必填)或 `____(选填)`,与老侧复制文本的占位写法同义(老侧写 `__如:3000__`)。 */
|
|
224
|
+
export function promptOf(word, slots, params) {
|
|
225
|
+
const lines = slots.map((s) => {
|
|
226
|
+
const raw = params[s.name];
|
|
227
|
+
const v = raw === true ? '是' : raw === false || raw === undefined || raw === null ? '' : String(raw).trim();
|
|
228
|
+
const blank = s.required ? '____' : '____(选填)';
|
|
229
|
+
return ' ' + s.label + ': ' + (v === '' ? blank : v);
|
|
230
|
+
});
|
|
231
|
+
return '请加载「饼干记账」技能,帮我' + word + ':\n\n' + lines.join('\n');
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=pageParts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageParts.js","sourceRoot":"","sources":["../../src/goal/pageParts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** 写命令的两支操作(老侧 `goal/cli.py` 的 set-budget/set-saving 两个子命令)。 */
|
|
2
|
+
export type GoalWriteOp = 'set-budget' | 'set-saving';
|
|
3
|
+
/** 读命令的两支操作(老侧 `goal/cli.py` 的 budget/saving 两个子命令)。 */
|
|
4
|
+
export type GoalReadOp = 'budget' | 'saving';
|
|
5
|
+
/** 目标域四支操作的合集(域声明 `preset.op` 的取值面)。 */
|
|
6
|
+
export type GoalOp = GoalWriteOp | GoalReadOp;
|
|
7
|
+
/** 两位小数(金额的每一格都过它:老侧每处 `round(x, 2)` 同一口径)。 */
|
|
8
|
+
export declare function round2(n: number): number;
|
|
9
|
+
/** 本地日期串 `YYYY-MM-DD`(**全仓仅此一处**:目标域的「今天」照老侧 `date.today()` 取本地时区)。 */
|
|
10
|
+
export declare function localDay(now?: Date): string;
|
|
11
|
+
/** 本地月份串 `YYYY-MM`(同上,用于「不填月份=本月」)。 */
|
|
12
|
+
export declare function localMonth(now?: Date): string;
|
|
13
|
+
/** 写命令的 op 归一:只认两支;缺省/非法一律抛——op 是这一条命令自己的判别式,**不猜**
|
|
14
|
+
* (老侧靠子命令名认,两处同口径;与账户域 `parseAccountOp` 同一套判法)。 */
|
|
15
|
+
export declare function parseGoalWriteOp(params: Record<string, unknown>): GoalWriteOp;
|
|
16
|
+
/** 读命令的 op 归一:**缺省=budget**(照老侧「看预算」是这一域最常读的一支、也是搬迁前
|
|
17
|
+
* `cmd_read.ts` 那条 `op === 'budget' || params.op === undefined` 的缺省口径);两支之外抛。 */
|
|
18
|
+
export declare function parseGoalReadOp(params: Record<string, unknown>): GoalReadOp;
|
|
19
|
+
/** 一个槽位:参数名/中文名/怎么给/是否必需。 */
|
|
20
|
+
export interface GoalSlot {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly label: string;
|
|
23
|
+
readonly hint: string;
|
|
24
|
+
readonly required: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** 一处阻断:哪一格/中文名/为什么进不去(`没给` 与值不对共用一张表)。 */
|
|
27
|
+
export interface GoalBlocked {
|
|
28
|
+
readonly name: string;
|
|
29
|
+
readonly label: string;
|
|
30
|
+
readonly why: string;
|
|
31
|
+
}
|
|
32
|
+
/** 「确认覆盖」那一格:老侧 `cli.py:143` 的 `--force`。它不是一个用户填的槽位,
|
|
33
|
+
* 而是「同月同类预算已存在」这件事的出口,故单立一格(同账户域 `CHANGE_SLOT` 的处置)。 */
|
|
34
|
+
export declare const FORCE_SLOT: GoalSlot;
|
|
35
|
+
/** 写命令两支操作的槽位表(**唯一定义地**):字段卡照它出,缺项探针照它算。
|
|
36
|
+
* 中文名照老侧表单页的字段题头(`budget_form.html:58-68`/`saving_form.html:57-63`)。 */
|
|
37
|
+
export declare const GOAL_WRITE_SLOTS: Readonly<Record<GoalWriteOp, readonly GoalSlot[]>>;
|
|
38
|
+
/** 一个值算不算「给了」:`undefined`/`null`/`false`/空白串都不算。 */
|
|
39
|
+
export declare function isGiven(v: unknown): boolean;
|
|
40
|
+
/** 一个值写成文本(认字符串与有限数;其余形态一律当没给——不猜)。 */
|
|
41
|
+
export declare function textOf(v: unknown): string;
|
|
42
|
+
/** 数字解析:认数字与非空数字串;解析不了给 `null`(不在这里报错,报错归调用方)。 */
|
|
43
|
+
export declare function numberOf(v: unknown): number | null;
|
|
44
|
+
/** 金额:正数(老侧 `cli.py:133`/`:227` 的「必须 > 0」)。给的是钱,负数与 0 都不成立。 */
|
|
45
|
+
export declare function validateAmount(raw: unknown): number;
|
|
46
|
+
/** 本支写操作当下缺什么、哪一格的值进不去(**空数组=可以往下走写库那一步**)。
|
|
47
|
+
* 同月同类预算撞车那一处住 `./write.js` 的 `budgetBlockedOf`——本件只吃参数,不碰库与文件。 */
|
|
48
|
+
export declare function goalBlocked(op: GoalWriteOp, params: Record<string, unknown>): readonly GoalBlocked[];
|
|
49
|
+
/** 设定预算的真值校验(阻断闸门放行之后才会走到这里):金额为正数、月份归一(不给=本月)、分类可空。
|
|
50
|
+
* `force` 不在这里判——它是不是必需,取决于库里有没有同月同类那一条(住 `./write.js`)。 */
|
|
51
|
+
export declare function validateSetBudget(params: Record<string, unknown>): {
|
|
52
|
+
month: string;
|
|
53
|
+
category: string;
|
|
54
|
+
amount: number;
|
|
55
|
+
force: boolean;
|
|
56
|
+
};
|
|
57
|
+
/** 设定目标的真值校验:目标名必填、金额为正数、截止日可空(给了就须是真实日期)。 */
|
|
58
|
+
export declare function validateSetSaving(params: Record<string, unknown>): {
|
|
59
|
+
name: string;
|
|
60
|
+
amount: number;
|
|
61
|
+
deadline: string | null;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/goal/params.ts"],"names":[],"mappings":"AA2BA,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC;AAEtD,wDAAwD;AACxD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7C,wCAAwC;AACxC,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;AAE9C,+CAA+C;AAC/C,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAGvD;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAEzD;AAED;oDACoD;AACpD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAI7E;AAED;kFACkF;AAClF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAK3E;AAED,6BAA6B;AAC7B,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAMD;yDACyD;AACzD,eAAO,MAAM,UAAU,EAAE,QAAiE,CAAC;AAE3F;yEACyE;AACzE,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,CAAC,CAW/E,CAAC;AAEF,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAG3C;AAED,uCAAuC;AACvC,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAGzC;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMlD;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAMnD;AAED;oEACoE;AACpE,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,WAAW,EAAE,CAqBpG;AAYD;6DAC6D;AAC7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAMtI;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAS5H"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/** 目标域·命令参数与槽位表(**唯一定义地**):写命令的两支操作(设定预算/设定目标)、
|
|
2
|
+
* 读命令的两支操作(看预算/看目标)、每支要哪些槽位、缺项与「值不对」怎么报。
|
|
3
|
+
*
|
|
4
|
+
* 谁在用(四个调用点,指名):
|
|
5
|
+
* ① `src/goal/write.ts`——写命令处理体:拿 `goalBlocked` 当闸门(非空即出采集页、不写库),
|
|
6
|
+
* 闸门放行之后才调 `validateSetBudget`/`validateSetSaving` 做真值校验;
|
|
7
|
+
* ② `src/goal/read.ts`——读命令处理体:`parseGoalReadOp` 认哪一支(预算执行/目标进度);
|
|
8
|
+
* ③ `src/goal/scene-set-{budget,saving}.ts`——写命令两件场景件按 `GOAL_WRITE_SLOTS[op]` 出字段卡、
|
|
9
|
+
* 按 `goalBlocked` 出缺项标签;
|
|
10
|
+
* ④ `src/goal/template-form.ts`——采集页的缺项标签与口令原文读同一份阻断表。
|
|
11
|
+
*
|
|
12
|
+
* 老侧对应件:`scripts/goal/cli.py`(四支的真值校验)与 `scripts/goal/render.py`(四张页的字段与文案)。
|
|
13
|
+
* 口径按本文重摆,三处与老侧不同(逐条进 `docs/skills/skill-bill/t730-差异表.md`):
|
|
14
|
+
* - **缺失与「值不对」分开**:老侧两种情况都是 `raise ValueError` 一句话(`cli.py:133-137`/`:226-236`),
|
|
15
|
+
* 页上看不出缺哪一格;新侧按 #688 裁定 9 出**缺项阻断条**,逐项点名(`why` 说清为什么进不去)。
|
|
16
|
+
* - **同月同类预算撞车**:老侧 `cli.py:143-147` 在 CLI 里回一句「确认覆盖请加 --force」;
|
|
17
|
+
* 新侧提进阻断表(`force` 那一格),采集页当场把「已存在哪一条」摊开——老侧表单页
|
|
18
|
+
* `budget_form.html:129-134` 本来就画这条冲突提示,新侧只是把它接到同一条阻断路径上(裁定 9)。
|
|
19
|
+
* - **月份与截止日的归一**:取 `../shared/dateRange.js` 的 `normalizeMonth`/`normalizeDate`(真源一处);
|
|
20
|
+
* 老侧那两条正则(`cli.py:46-47`)在归一这一层与之一致(月份 `YYYY-MM`、日期 `YYYY-MM-DD` 且真实日期)。
|
|
21
|
+
*
|
|
22
|
+
* 「今天/本月」按**本地时钟**取(老侧 `date.today()` 同口径):本件给 `localDay`/`localMonth` 两件,
|
|
23
|
+
* 域内别处不许再各写一份本地日期算式(`new Date().toISOString()` 是 UTC 日,跨零点会差一天)。
|
|
24
|
+
*/
|
|
25
|
+
import { BillPolicyError } from '../fetch/errors.js';
|
|
26
|
+
import { MONTH_RE, normalizeDate, normalizeMonth } from '../shared/dateRange.js';
|
|
27
|
+
/** 两位小数(金额的每一格都过它:老侧每处 `round(x, 2)` 同一口径)。 */
|
|
28
|
+
export function round2(n) {
|
|
29
|
+
return Math.round(n * 100) / 100;
|
|
30
|
+
}
|
|
31
|
+
/** 本地日期串 `YYYY-MM-DD`(**全仓仅此一处**:目标域的「今天」照老侧 `date.today()` 取本地时区)。 */
|
|
32
|
+
export function localDay(now = new Date()) {
|
|
33
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
34
|
+
return String(now.getFullYear()) + '-' + pad(now.getMonth() + 1) + '-' + pad(now.getDate());
|
|
35
|
+
}
|
|
36
|
+
/** 本地月份串 `YYYY-MM`(同上,用于「不填月份=本月」)。 */
|
|
37
|
+
export function localMonth(now = new Date()) {
|
|
38
|
+
return localDay(now).slice(0, 7);
|
|
39
|
+
}
|
|
40
|
+
/** 写命令的 op 归一:只认两支;缺省/非法一律抛——op 是这一条命令自己的判别式,**不猜**
|
|
41
|
+
* (老侧靠子命令名认,两处同口径;与账户域 `parseAccountOp` 同一套判法)。 */
|
|
42
|
+
export function parseGoalWriteOp(params) {
|
|
43
|
+
const op = params['op'];
|
|
44
|
+
if (op === 'set-budget' || op === 'set-saving')
|
|
45
|
+
return op;
|
|
46
|
+
throw new BillPolicyError('POLICY_BAD_INPUT', 'op 非法(只认 set-budget/set-saving):' + JSON.stringify(op));
|
|
47
|
+
}
|
|
48
|
+
/** 读命令的 op 归一:**缺省=budget**(照老侧「看预算」是这一域最常读的一支、也是搬迁前
|
|
49
|
+
* `cmd_read.ts` 那条 `op === 'budget' || params.op === undefined` 的缺省口径);两支之外抛。 */
|
|
50
|
+
export function parseGoalReadOp(params) {
|
|
51
|
+
const op = params['op'];
|
|
52
|
+
if (op === undefined || op === null || op === '')
|
|
53
|
+
return 'budget';
|
|
54
|
+
if (op === 'budget' || op === 'saving')
|
|
55
|
+
return op;
|
|
56
|
+
throw new BillPolicyError('POLICY_BAD_INPUT', 'op 非法(只认 budget/saving):' + JSON.stringify(op));
|
|
57
|
+
}
|
|
58
|
+
function slot(name, label, hint, required) {
|
|
59
|
+
return { name, label, hint, required };
|
|
60
|
+
}
|
|
61
|
+
/** 「确认覆盖」那一格:老侧 `cli.py:143` 的 `--force`。它不是一个用户填的槽位,
|
|
62
|
+
* 而是「同月同类预算已存在」这件事的出口,故单立一格(同账户域 `CHANGE_SLOT` 的处置)。 */
|
|
63
|
+
export const FORCE_SLOT = slot('force', '确认覆盖', '已经有同月同类的预算时,要覆盖它就把这一格给上', true);
|
|
64
|
+
/** 写命令两支操作的槽位表(**唯一定义地**):字段卡照它出,缺项探针照它算。
|
|
65
|
+
* 中文名照老侧表单页的字段题头(`budget_form.html:58-68`/`saving_form.html:57-63`)。 */
|
|
66
|
+
export const GOAL_WRITE_SLOTS = {
|
|
67
|
+
'set-budget': [
|
|
68
|
+
slot('amount', '金额', '每月的预算上限,写正数,如 3000', true),
|
|
69
|
+
slot('month', '月份', '选填,如 2026-09;不填就是本月起', false),
|
|
70
|
+
slot('category', '分类', '选填,如 餐饮;不填 = 全月总预算', false),
|
|
71
|
+
],
|
|
72
|
+
'set-saving': [
|
|
73
|
+
slot('name', '目标', '想存钱买什么,一句话说清,如 换手机', true),
|
|
74
|
+
slot('amount', '金额', '目标总额,写正数,如 10000', true),
|
|
75
|
+
slot('deadline', '截止日期', '选填,如 2026-12-31;不填 = 无截止日期', false),
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
/** 一个值算不算「给了」:`undefined`/`null`/`false`/空白串都不算。 */
|
|
79
|
+
export function isGiven(v) {
|
|
80
|
+
if (v === undefined || v === null || v === false)
|
|
81
|
+
return false;
|
|
82
|
+
return !(typeof v === 'string' && v.trim() === '');
|
|
83
|
+
}
|
|
84
|
+
/** 一个值写成文本(认字符串与有限数;其余形态一律当没给——不猜)。 */
|
|
85
|
+
export function textOf(v) {
|
|
86
|
+
if (typeof v === 'string')
|
|
87
|
+
return v.trim();
|
|
88
|
+
return typeof v === 'number' && Number.isFinite(v) ? String(v) : '';
|
|
89
|
+
}
|
|
90
|
+
/** 数字解析:认数字与非空数字串;解析不了给 `null`(不在这里报错,报错归调用方)。 */
|
|
91
|
+
export function numberOf(v) {
|
|
92
|
+
if (v === undefined || v === null || typeof v === 'boolean')
|
|
93
|
+
return null;
|
|
94
|
+
const raw = typeof v === 'string' ? v.trim() : v;
|
|
95
|
+
if (raw === '')
|
|
96
|
+
return null;
|
|
97
|
+
const n = typeof raw === 'number' ? raw : Number(raw);
|
|
98
|
+
return Number.isFinite(n) ? n : null;
|
|
99
|
+
}
|
|
100
|
+
/** 金额:正数(老侧 `cli.py:133`/`:227` 的「必须 > 0」)。给的是钱,负数与 0 都不成立。 */
|
|
101
|
+
export function validateAmount(raw) {
|
|
102
|
+
const n = numberOf(raw);
|
|
103
|
+
if (n === null || n <= 0) {
|
|
104
|
+
throw new BillPolicyError('POLICY_BAD_INPUT', '金额须为正数:' + JSON.stringify(raw));
|
|
105
|
+
}
|
|
106
|
+
return round2(n);
|
|
107
|
+
}
|
|
108
|
+
/** 本支写操作当下缺什么、哪一格的值进不去(**空数组=可以往下走写库那一步**)。
|
|
109
|
+
* 同月同类预算撞车那一处住 `./write.js` 的 `budgetBlockedOf`——本件只吃参数,不碰库与文件。 */
|
|
110
|
+
export function goalBlocked(op, params) {
|
|
111
|
+
const out = [];
|
|
112
|
+
for (const s of GOAL_WRITE_SLOTS[op]) {
|
|
113
|
+
if (s.required && !isGiven(params[s.name]))
|
|
114
|
+
out.push({ name: s.name, label: s.label, why: '没给' });
|
|
115
|
+
}
|
|
116
|
+
if (isGiven(params['amount'])) {
|
|
117
|
+
const n = numberOf(params['amount']);
|
|
118
|
+
if (n === null || n <= 0)
|
|
119
|
+
out.push({ name: 'amount', label: '金额', why: '要写正数(如 3000)' });
|
|
120
|
+
}
|
|
121
|
+
if (op === 'set-budget') {
|
|
122
|
+
const month = textOf(params['month']);
|
|
123
|
+
if (month !== '' && !MONTH_RE.test(month)) {
|
|
124
|
+
out.push({ name: 'month', label: '月份', why: '要写成 2026-09 这样(年-月),不填就是本月' });
|
|
125
|
+
}
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
128
|
+
const deadline = textOf(params['deadline']);
|
|
129
|
+
if (deadline !== '' && !isRealDate(deadline)) {
|
|
130
|
+
out.push({ name: 'deadline', label: '截止日期', why: '要写成 2026-12-31 这样(年-月-日)' });
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
/** 一个日期串是不是真实日期(老侧 `cli.py:232-236` 的 `strptime` 同口径:2 月 30 这类要挡住)。 */
|
|
135
|
+
function isRealDate(s) {
|
|
136
|
+
try {
|
|
137
|
+
normalizeDate(s, 'deadline');
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** 设定预算的真值校验(阻断闸门放行之后才会走到这里):金额为正数、月份归一(不给=本月)、分类可空。
|
|
145
|
+
* `force` 不在这里判——它是不是必需,取决于库里有没有同月同类那一条(住 `./write.js`)。 */
|
|
146
|
+
export function validateSetBudget(params) {
|
|
147
|
+
const amount = validateAmount(params['amount']);
|
|
148
|
+
const month = params['month'] === undefined || params['month'] === null || params['month'] === ''
|
|
149
|
+
? localMonth() : normalizeMonth(params['month']);
|
|
150
|
+
const category = typeof params['category'] === 'string' ? params['category'].trim() : '';
|
|
151
|
+
return { month, category, amount, force: params['force'] === true };
|
|
152
|
+
}
|
|
153
|
+
/** 设定目标的真值校验:目标名必填、金额为正数、截止日可空(给了就须是真实日期)。 */
|
|
154
|
+
export function validateSetSaving(params) {
|
|
155
|
+
const raw = params['name'];
|
|
156
|
+
if (typeof raw !== 'string' || raw.trim() === '') {
|
|
157
|
+
throw new BillPolicyError('POLICY_MISSING_SLOT', '缺槽位 name(储蓄目标名)');
|
|
158
|
+
}
|
|
159
|
+
const amount = validateAmount(params['amount']);
|
|
160
|
+
const deadline = params['deadline'] === undefined || params['deadline'] === null || params['deadline'] === ''
|
|
161
|
+
? null : normalizeDate(params['deadline'], 'deadline');
|
|
162
|
+
return { name: raw.trim(), amount, deadline };
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=params.js.map
|