M9: kvitt-import Splitwise importer (SPEC §10.8, FR-17)

CLI per §10.8 with --help, --dry-run and a summary; English and Swedish
headers with member columns matched by name; CSV quoting; payments as
settlements with one allocation; trailing totals row used to reconcile
the account balance (mismatch rolls back, exit 4); non-SEK rows abort
unless --fx; committed category table data/splitwise_categories.csv;
idempotent re-runs through import_key; rows validated with the server's
push checks, audited with source import, no pushes; one BEGIN IMMEDIATE
transaction. Tests over synthetic fixtures only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
2026-10-18 07:45:32 +02:00
parent d9dd5848fe
commit 50339aef6d
21 changed files with 3097 additions and 13 deletions
@@ -0,0 +1,74 @@
splitwise_name,language,default_key
Groceries,en,groceries
Food and drink - Other,en,groceries
Liquor,en,groceries
Dining out,en,restaurants
Electronics,en,home
Furniture,en,home
Household supplies,en,home
Maintenance,en,home
Mortgage,en,home
Rent,en,home
Services,en,home
Pets,en,home
Home - Other,en,home
Electricity,en,utilities
Heat/gas,en,utilities
Water,en,utilities
Trash,en,utilities
TV/Phone/Internet,en,utilities
Cleaning,en,utilities
Utilities - Other,en,utilities
Bicycle,en,transport
Bus/train,en,transport
Car,en,transport
Gas/fuel,en,transport
Parking,en,transport
Taxi,en,transport
Transportation - Other,en,transport
Hotel,en,travel
Plane,en,travel
Games,en,entertainment
Movies,en,entertainment
Music,en,entertainment
Sports,en,entertainment
Entertainment - Other,en,entertainment
Medical expenses,en,health
Clothing,en,shopping
Gifts,en,shopping
General,en,other
Childcare,en,other
Education,en,other
Insurance,en,other
Taxes,en,other
Life - Other,en,other
Other,en,other
Livsmedel,sv,groceries
Mat och dryck - Övrigt,sv,groceries
Alkohol,sv,groceries
Restaurangbesök,sv,restaurants
Elektronik,sv,home
Möbler,sv,home
Förbrukningsvaror,sv,home
Skötsel/underhåll,sv,home
Avbetalning/Amortering,sv,home
Hyra,sv,home
Hem - Övrigt,sv,home
TV/telefon/internet,sv,utilities
Buss/tåg,sv,transport
Bil,sv,transport
Bensin/bränsle,sv,transport
Parkering,sv,transport
Taxi,sv,transport
Transport - Övrigt,sv,transport
Hotell,sv,travel
Musik,sv,entertainment
Filmer,sv,entertainment
Sport,sv,entertainment
Underhållning - Övrigt,sv,entertainment
Sjukvård/medicin,sv,health
Presenter,sv,shopping
Allmänt,sv,other
Barnomsorg,sv,other
Försäkringar,sv,other
Skatter,sv,other
1 splitwise_name language default_key
2 Groceries en groceries
3 Food and drink - Other en groceries
4 Liquor en groceries
5 Dining out en restaurants
6 Electronics en home
7 Furniture en home
8 Household supplies en home
9 Maintenance en home
10 Mortgage en home
11 Rent en home
12 Services en home
13 Pets en home
14 Home - Other en home
15 Electricity en utilities
16 Heat/gas en utilities
17 Water en utilities
18 Trash en utilities
19 TV/Phone/Internet en utilities
20 Cleaning en utilities
21 Utilities - Other en utilities
22 Bicycle en transport
23 Bus/train en transport
24 Car en transport
25 Gas/fuel en transport
26 Parking en transport
27 Taxi en transport
28 Transportation - Other en transport
29 Hotel en travel
30 Plane en travel
31 Games en entertainment
32 Movies en entertainment
33 Music en entertainment
34 Sports en entertainment
35 Entertainment - Other en entertainment
36 Medical expenses en health
37 Clothing en shopping
38 Gifts en shopping
39 General en other
40 Childcare en other
41 Education en other
42 Insurance en other
43 Taxes en other
44 Life - Other en other
45 Other en other
46 Livsmedel sv groceries
47 Mat och dryck - Övrigt sv groceries
48 Alkohol sv groceries
49 Restaurangbesök sv restaurants
50 Elektronik sv home
51 Möbler sv home
52 Förbrukningsvaror sv home
53 Skötsel/underhåll sv home
54 Avbetalning/Amortering sv home
55 Hyra sv home
56 Hem - Övrigt sv home
57 TV/telefon/internet sv utilities
58 Buss/tåg sv transport
59 Bil sv transport
60 Bensin/bränsle sv transport
61 Parkering sv transport
62 Taxi sv transport
63 Transport - Övrigt sv transport
64 Hotell sv travel
65 Musik sv entertainment
66 Filmer sv entertainment
67 Sport sv entertainment
68 Underhållning - Övrigt sv entertainment
69 Sjukvård/medicin sv health
70 Presenter sv shopping
71 Allmänt sv other
72 Barnomsorg sv other
73 Försäkringar sv other
74 Skatter sv other