whisper-money/database/migrations
Víctor Falcón 0b46fff3c2 feat(transactions): split a transaction across multiple categories
Add per-line splitting: a transaction can be divided into lines, each with
its own category, amount and labels, summing to the transaction total. The
transaction's own category is nulled and the lines become the source of truth.

- transaction_splits + label_split tables, TransactionSplit model
- split/unsplit via the existing PATCH update (validated: sum, sign, min 2)
- shared effective-allocation layer (SQL + collection) so every category
  breakdown (dashboard top categories, cashflow sankey/trend/breakdown,
  dashboard analytics, MCP spending) attributes split lines correctly
- budgets attribute per line (category + label match), aggregated per period
- list shows the per-line breakdown, collapsing non-matching lines into a
  'Rest' row under a category/label filter; bulk category assignment skips
  split transactions
- gated behind the TransactionSplitting Pennant feature
2026-07-19 14:28:10 +02:00
..
0001_01_01_000000_create_users_table.php
0001_01_01_000001_create_cache_table.php
0001_01_01_000002_create_jobs_table.php
2025_08_26_100418_add_two_factor_columns_to_users_table.php
2025_11_07_135255_add_encryption_salt_to_users_table.php
2025_11_07_135256_create_encrypted_messages_table.php
2025_11_07_150038_create_banks_table.php
2025_11_07_150122_create_accounts_table.php
2025_11_07_150613_create_categories_table.php
2025_11_07_150659_create_transactions_table.php
2025_11_07_184056_modify_banks_table_add_user_id_and_simplify_name.php
2025_11_07_185018_change_banks_logo_to_text.php
2025_11_08_140230_change_transactions_id_to_uuid.php
2025_11_08_141344_make_category_id_nullable_in_transactions_table.php
2025_11_08_144530_add_soft_deletes_to_transactions_table.php
2025_11_10_110100_create_automation_rules_table.php
2025_11_15_172640_create_account_balances_table.php
2025_11_15_175636_change_transactions_amount_to_bigint.php
2025_11_15_195739_convert_all_ids_to_uuid.php
2025_11_18_184409_create_user_leads_table.php
2025_11_28_104227_add_source_to_transactions_table.php
2025_11_29_170353_add_type_to_categories_table.php
2025_11_29_170955_fix_account_balances_unique_constraint.php
2025_12_01_101443_add_unique_constraint_to_categories_table.php
2025_12_06_112515_create_customer_columns.php
2025_12_06_112516_create_subscriptions_table.php
2025_12_06_112517_create_subscription_items_table.php
2025_12_06_112518_add_meter_id_to_subscription_items_table.php
2025_12_06_112519_add_meter_event_name_to_subscription_items_table.php
2025_12_10_142006_add_onboarded_at_to_users_table.php
2025_12_12_092647_create_labels_table.php
2025_12_12_092650_create_label_transaction_table.php
2025_12_12_092651_create_automation_rule_labels_table.php
2025_12_12_141955_update_labels_unique_constraint_include_deleted_at.php
2025_12_16_151952_create_user_mail_logs_table.php
2025_12_19_092437_create_budgets_table.php
2025_12_19_092443_create_budget_periods_table.php
2025_12_19_092446_create_budget_transactions_table.php
2025_12_20_154221_create_features_table.php
2025_12_29_063338_add_currency_code_to_users_table.php
2026_01_08_192757_add_email_identifier_to_user_mail_logs.php
2026_01_08_204223_update_user_mail_logs_unique_constraint.php
2026_01_21_151353_add_indexes_for_budget_transaction_assignment.php
2026_01_22_071325_add_processing_historical_to_budget_periods.php
2026_01_22_143232_add_locale_to_users_table.php
2026_02_08_103953_create_user_settings_table.php
2026_02_09_110624_add_encrypted_to_accounts_table.php
2026_02_09_131403_make_description_iv_nullable_on_transactions.php
2026_02_09_144915_create_banking_connections_table.php
2026_02_09_144959_add_banking_connection_fields_to_accounts_table.php
2026_02_09_144959_add_external_transaction_id_to_transactions_table.php
2026_02_10_085759_add_aspsp_logo_to_banking_connections_table.php
2026_02_10_095639_add_raw_data_to_transactions_table.php
2026_02_11_113115_add_pending_accounts_data_to_banking_connections_table.php
2026_02_11_113119_add_linked_at_to_accounts_table.php
2026_02_13_083716_add_original_description_to_transactions_table.php
2026_02_18_084241_add_api_token_to_banking_connections_table.php
2026_02_18_110556_add_api_secret_to_banking_connections_table.php
2026_02_20_074846_create_exchange_rates_table.php
2026_02_22_180317_add_invested_amount_to_account_balances_table.php
2026_02_24_193117_fix_budget_transaction_refund_amounts.php
2026_03_03_114620_add_paywall_seen_at_to_users_table.php
2026_03_04_085843_add_waitlist_columns_to_user_leads_table.php
2026_03_04_094926_add_locale_to_user_leads_table.php
2026_03_12_095411_add_iban_to_accounts_table.php
2026_03_18_112307_add_cashflow_direction_to_categories_table.php
2026_03_19_151039_add_include_loans_in_net_worth_chart_to_user_settings_table.php
2026_03_20_110659_create_real_estate_details_table.php
2026_03_20_132058_make_bank_id_nullable_on_accounts_table.php
2026_03_20_154755_add_include_real_estate_in_net_worth_chart_to_user_settings_table.php
2026_03_25_125717_add_revaluation_percentage_to_real_estate_details_table.php
2026_03_25_132244_create_loan_details_table.php
2026_03_30_123011_add_consecutive_sync_failures_to_banking_connections_table.php
2026_03_30_123011_create_banking_sync_logs_table.php
2026_04_14_120000_add_email_verification_to_user_leads_table.php
2026_04_16_063515_add_bank_transactions_email_cutoff_at_to_banking_connections_table.php
2026_04_16_092644_add_timezone_to_users_table.php
2026_04_22_084113_add_deleted_at_to_users_table.php
2026_04_25_092824_add_launch_columns_to_user_leads_table.php
2026_05_05_070442_add_rate_limited_until_to_banking_connections_table.php
2026_05_05_132023_convert_custom_budgets_to_monthly.php
2026_05_13_085027_add_dedup_fingerprint_to_transactions_table.php
2026_05_25_115100_update_default_saving_and_investment_category_types.php
2026_05_26_061232_add_reinvitation_columns_to_user_leads_table.php
2026_05_27_061513_add_counterparty_names_to_transactions_table.php
2026_05_28_073203_update_categories_unique_constraint_for_soft_deletes.php
2026_05_29_085835_update_saving_and_investment_category_cashflow_direction.php
2026_06_01_085554_create_budget_category_table.php
2026_06_01_085554_create_budget_label_table.php
2026_06_01_085554_migrate_budget_category_label_to_pivots.php
2026_06_02_090000_add_parent_id_to_categories_table.php
2026_06_02_094823_add_notify_on_bank_transactions_synced_to_user_settings_table.php
2026_06_05_120000_create_saved_filters_table.php
2026_06_05_185212_add_state_token_to_banking_connections_table.php
2026_06_08_114044_add_analysis_days_to_saved_filters_table.php
2026_06_09_124010_add_analysis_mode_to_saved_filters_table.php
2026_06_10_083644_add_last_logged_in_at_to_users_table.php
2026_06_10_084055_add_last_active_at_to_users_table.php
2026_06_12_134225_create_ai_consents_table.php
2026_06_12_134523_create_suggestion_runs_table.php
2026_06_12_134524_create_rule_suggestions_table.php
2026_06_13_000000_add_is_catch_all_to_budgets_table.php feat: add catch-all budgets (#527) 2026-06-15 16:07:19 +00:00
2026_06_15_120911_add_ai_categorization_fields_to_transactions_table.php
2026_06_15_120911_add_origin_to_automation_rules_table.php
2026_06_15_120911_create_category_corrections_table.php
2026_06_17_081319_add_ai_suggested_category_to_transactions_table.php feat(ai): persist AI categorization suggestions below the label bar (#547) 2026-06-17 08:24:30 +00:00
2026_06_17_114601_create_integration_requests_table.php feat(integration-requests): community board to request & vote bank integrations (#550) 2026-06-17 12:50:51 +00:00
2026_06_17_114602_create_integration_request_votes_table.php feat(integration-requests): community board to request & vote bank integrations (#550) 2026-06-17 12:50:51 +00:00
2026_06_17_120850_add_status_to_integration_requests_table.php feat(integration-requests): community board to request & vote bank integrations (#550) 2026-06-17 12:50:51 +00:00
2026_06_17_122001_seed_initial_integration_requests.php feat(integration-requests): community board to request & vote bank integrations (#550) 2026-06-17 12:50:51 +00:00
2026_06_17_141827_add_comment_to_integration_requests_table.php feat(integration-requests): add not-doable status with a public comment (#552) 2026-06-17 16:36:32 +02:00
2026_06_18_092830_drop_unique_user_vote_from_integration_request_votes_table.php feat(integration-requests): multi-vote, per-plan quota and undo (#554) 2026-06-18 10:06:08 +00:00
2026_06_19_134854_create_stuck_cohort_snapshots_table.php feat(stats): weekly paywall stuck-cohort report to Discord (#563) 2026-06-19 14:12:51 +00:00
2026_06_20_105609_align_accounts_encrypted_flag_with_plaintext_names.php refactor(encryption): strip client-side transaction encryption (#514) 2026-06-20 16:13:26 +00:00
2026_06_20_165235_add_position_to_accounts_table.php feat(accounts): reorder accounts with drag-and-drop (#575) 2026-06-21 11:17:45 +02:00
2026_06_26_124609_add_ai_model_to_transactions_table.php feat(ai): record the model behind each AI categorization (#594) 2026-06-26 12:53:55 +00:00
2026_06_27_000000_backfill_xxx_account_currencies.php fix(open-banking): stop storing the XXX no-currency placeholder on accounts (#602) 2026-06-27 16:01:21 +00:00
2026_06_27_114559_add_refunded_at_to_subscriptions_table.php feat(subscriptions): trial/pricing A/B/C experiment (#600) 2026-06-27 18:00:15 +02:00
2026_06_27_154041_add_hidden_on_dashboard_to_accounts_table.php feat(dashboard): add accounts manager dialog with visibility toggle and reorder (#604) 2026-06-27 16:11:25 +00:00
2026_06_29_161916_add_transactions_last_visited_at_to_users_table.php feat(transactions): make new-transaction marker cross-device (#611) 2026-06-29 19:11:37 +02:00
2026_07_01_064324_add_ai_consent_prompt_dismissed_at_to_users_table.php feat(ai): dismissable AI consent banner that stops after the first decision (#617) 2026-07-01 07:26:36 +00:00
2026_07_02_133321_add_user_source_created_at_index_to_transactions_table.php perf(db): index transactions for the daily synced-email slow query (PHP-LARAVEL-3X) (#622) 2026-07-02 15:51:15 +02:00
2026_07_06_120000_create_spaces_table.php feat(spaces): phase 0 — multi-tenant Space foundation (no behaviour change) (#650) 2026-07-09 14:26:07 +02:00
2026_07_06_120001_create_space_user_table.php feat(spaces): phase 0 — multi-tenant Space foundation (no behaviour change) (#650) 2026-07-09 14:26:07 +02:00
2026_07_06_120002_create_space_invitations_table.php feat(spaces): phase 0 — multi-tenant Space foundation (no behaviour change) (#650) 2026-07-09 14:26:07 +02:00
2026_07_06_120003_add_current_space_id_to_users_table.php feat(spaces): phase 0 — multi-tenant Space foundation (no behaviour change) (#650) 2026-07-09 14:26:07 +02:00
2026_07_06_120004_add_space_id_to_owned_tables.php feat(spaces): phase 0 — multi-tenant Space foundation (no behaviour change) (#650) 2026-07-09 14:26:07 +02:00
2026_07_06_120005_backfill_spaces.php feat(spaces): phase 0 — multi-tenant Space foundation (no behaviour change) (#650) 2026-07-09 14:26:07 +02:00
2026_07_17_125642_create_personal_access_tokens_table.php feat(mcp): read-only MCP server for Pro accounts (#689) 2026-07-17 16:54:15 +02:00
2026_07_17_154027_create_oauth_auth_codes_table.php feat(mcp): add OAuth 2.1 for Claude Desktop & ChatGPT connectors (Phase 3) (#691) 2026-07-17 19:10:48 +02:00
2026_07_17_154028_create_oauth_access_tokens_table.php feat(mcp): add OAuth 2.1 for Claude Desktop & ChatGPT connectors (Phase 3) (#691) 2026-07-17 19:10:48 +02:00
2026_07_17_154029_create_oauth_refresh_tokens_table.php feat(mcp): add OAuth 2.1 for Claude Desktop & ChatGPT connectors (Phase 3) (#691) 2026-07-17 19:10:48 +02:00
2026_07_17_154030_create_oauth_clients_table.php feat(mcp): add OAuth 2.1 for Claude Desktop & ChatGPT connectors (Phase 3) (#691) 2026-07-17 19:10:48 +02:00
2026_07_17_154031_create_oauth_device_codes_table.php feat(mcp): add OAuth 2.1 for Claude Desktop & ChatGPT connectors (Phase 3) (#691) 2026-07-17 19:10:48 +02:00
2026_07_19_114525_create_transaction_splits_table.php feat(transactions): split a transaction across multiple categories 2026-07-19 14:28:10 +02:00
2026_07_19_114526_create_label_split_table.php feat(transactions): split a transaction across multiple categories 2026-07-19 14:28:10 +02:00