feat(imports): add YNAB CSV import (#2361)

Adds YnabImport (mirroring ActualImport) for YNAB "Export budget" register CSVs:

- Amount — combines the split Outflow/Inflow columns into a single signed amount
  (inflow - |outflow|), stripping currency symbols and thousands separators. A
  single signed Amount column takes precedence when present.
- Category — resolves across export shapes: the combined "Category Group/Category"
  column, the split "Category Group" + "Category", or legacy YNAB 4
  "Master Category" + "Sub Category".
- Names — falls back from a blank Payee to the Memo, then the default row name.
- Validation — requires at least one amount source (Outflow/Inflow or Amount); a
  file exposing none leaves rows un-clean instead of importing zero-dollar entries.

Enables the previously-disabled YNAB option on the imports screen (using the YNAB
logo, like Mint) with its configuration partial, and removes the now-dead
imports.new.coming_soon locale key. Documents the type in the API import-type
enums (rswag request spec + swagger_helper + generated openapi.yaml).

Closes #1255.
This commit is contained in:
ghost
2026-06-15 23:32:17 -07:00
committed by GitHub
parent 6945b5a296
commit 6ea931f3fe
21 changed files with 513 additions and 27 deletions

View File

@@ -1909,8 +1909,12 @@ components:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
valid:
type: boolean
@@ -1997,8 +2001,12 @@ components:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
status:
type: string
@@ -2050,8 +2058,12 @@ components:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
status:
type: string
@@ -5070,8 +5082,12 @@ paths:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
responses:
'200':
@@ -5129,8 +5145,12 @@ paths:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
description: Import type (defaults to TransactionImport)
account_id:
@@ -5236,8 +5256,12 @@ paths:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
description: Import type (defaults to TransactionImport)
account_id:
@@ -5474,8 +5498,12 @@ paths:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
description: Import type to validate (defaults to TransactionImport)
account_id:
@@ -5585,8 +5613,12 @@ paths:
- AccountImport
- MintImport
- ActualImport
- YnabImport
- CategoryImport
- RuleImport
- MerchantImport
- PdfImport
- QifImport
- SureImport
description: Import type to validate (defaults to TransactionImport)
account_id: