@actual-app/core 26.3.0

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.
Files changed (358) hide show
  1. package/.swcrc +11 -0
  2. package/bin/build-browser +40 -0
  3. package/bin/copy-migrations +9 -0
  4. package/db.sqlite +0 -0
  5. package/default-db.sqlite +0 -0
  6. package/migrations/.force-copy-windows +0 -0
  7. package/migrations/1548957970627_remove-db-version.sql +5 -0
  8. package/migrations/1550601598648_payees.sql +23 -0
  9. package/migrations/1555786194328_remove_category_group_unique.sql +25 -0
  10. package/migrations/1561751833510_indexes.sql +7 -0
  11. package/migrations/1567699552727_budget.sql +38 -0
  12. package/migrations/1582384163573_cleared.sql +6 -0
  13. package/migrations/1597756566448_rules.sql +10 -0
  14. package/migrations/1608652596043_parent_field.sql +13 -0
  15. package/migrations/1608652596044_trans_views.sql +56 -0
  16. package/migrations/1612625548236_optimize.sql +7 -0
  17. package/migrations/1614782639336_trans_views2.sql +33 -0
  18. package/migrations/1615745967948_meta.sql +10 -0
  19. package/migrations/1616167010796_accounts_order.sql +5 -0
  20. package/migrations/1618975177358_schedules.sql +28 -0
  21. package/migrations/1632571489012_remove_cache.js +136 -0
  22. package/migrations/1679728867040_rules_conditions.sql +5 -0
  23. package/migrations/1681115033845_add_schedule_name.sql +5 -0
  24. package/migrations/1682974838138_remove_payee_rules.sql +5 -0
  25. package/migrations/1685007876842_add_category_hidden.sql +6 -0
  26. package/migrations/1686139660866_remove_account_type.sql +5 -0
  27. package/migrations/1688749527273_transaction_filters.sql +10 -0
  28. package/migrations/1688841238000_add_account_type.sql +5 -0
  29. package/migrations/1691233396000_add_schedule_next_date_tombstone.sql +5 -0
  30. package/migrations/1694438752000_add_goal_targets.sql +7 -0
  31. package/migrations/1697046240000_add_reconciled.sql +5 -0
  32. package/migrations/1704572023730_add_account_sync_source.sql +5 -0
  33. package/migrations/1704572023731_add_missing_goCardless_sync_source.sql +9 -0
  34. package/migrations/1707267033000_reports.sql +28 -0
  35. package/migrations/1712784523000_unhide_input_group.sql +8 -0
  36. package/migrations/1716359441000_include_current.sql +5 -0
  37. package/migrations/1720310586000_link_transfer_schedules.sql +19 -0
  38. package/migrations/1720664867241_add_payee_favorite.sql +5 -0
  39. package/migrations/1720665000000_goal_context.sql +6 -0
  40. package/migrations/1722717601000_reports_move_selected_categories.js +55 -0
  41. package/migrations/1722804019000_create_dashboard_table.js +69 -0
  42. package/migrations/1723665565000_prefs.js +59 -0
  43. package/migrations/1730744182000_fix_dashboard_table.sql +7 -0
  44. package/migrations/1736640000000_custom_report_sorting.sql +7 -0
  45. package/migrations/1737158400000_add_learn_categories_to_payees.sql +5 -0
  46. package/migrations/1738491452000_sorting_rename.sql +13 -0
  47. package/migrations/1739139550000_bank_sync_page.sql +7 -0
  48. package/migrations/1740506588539_add_last_reconciled_at.sql +5 -0
  49. package/migrations/1745425408000_update_budgetType_pref.sql +7 -0
  50. package/migrations/1749799110000_add_tags.sql +10 -0
  51. package/migrations/1749799110001_tags_tombstone.sql +5 -0
  52. package/migrations/1754611200000_add_category_template_settings.sql +5 -0
  53. package/migrations/1759260219000_add_trim_interval_report_setting.sql +6 -0
  54. package/migrations/1759842823172_add_isGlobal_to_preferences.sql +1 -0
  55. package/migrations/1762178745667_rename_csv_skip_lines_pref.sql +8 -0
  56. package/migrations/1765518577215_multiple_dashboards.js +30 -0
  57. package/migrations/1768872504000_add_payee_locations.sql +21 -0
  58. package/package.json +128 -0
  59. package/src/mocks/arbitrary-schema.ts +162 -0
  60. package/src/mocks/budget.ts +901 -0
  61. package/src/mocks/files/8859-1.qfx +63 -0
  62. package/src/mocks/files/best.data-ever$.QFX +124 -0
  63. package/src/mocks/files/big.data.QiF +91 -0
  64. package/src/mocks/files/budgets/.commit-to-git +0 -0
  65. package/src/mocks/files/camt/camt.053.payee-memo.xml +127 -0
  66. package/src/mocks/files/camt/camt.053.xml +463 -0
  67. package/src/mocks/files/credit-card.ofx +11 -0
  68. package/src/mocks/files/data-multi-decimal.ofx +64 -0
  69. package/src/mocks/files/data-payee-memo.ofx +75 -0
  70. package/src/mocks/files/data-payee-memo.qif +17 -0
  71. package/src/mocks/files/data.ofx +124 -0
  72. package/src/mocks/files/data.qfx +124 -0
  73. package/src/mocks/files/data.qif +91 -0
  74. package/src/mocks/files/default-budget-template/db.sqlite +0 -0
  75. package/src/mocks/files/default-budget-template/metadata.json +6 -0
  76. package/src/mocks/files/html-vals.qfx +17 -0
  77. package/src/mocks/index.ts +221 -0
  78. package/src/mocks/migrations/1508717984291_up_add-poop.sql +13 -0
  79. package/src/mocks/migrations/1508718036311_up_modify-poop.sql +2 -0
  80. package/src/mocks/migrations/1508727787513_remove-is_income.sql +15 -0
  81. package/src/mocks/random.ts +16 -0
  82. package/src/mocks/setup.ts +180 -0
  83. package/src/mocks/spreadsheet.ts +101 -0
  84. package/src/mocks/util.ts +82 -0
  85. package/src/platform/client/connection/README.md +3 -0
  86. package/src/platform/client/connection/__mocks__/index.ts +67 -0
  87. package/src/platform/client/connection/index-types.ts +95 -0
  88. package/src/platform/client/connection/index.browser.ts +213 -0
  89. package/src/platform/client/connection/index.ts +155 -0
  90. package/src/platform/client/undo/index.ts +59 -0
  91. package/src/platform/exceptions/__mocks__/index.ts +7 -0
  92. package/src/platform/exceptions/index.ts +9 -0
  93. package/src/platform/server/asyncStorage/__mocks__/index.ts +50 -0
  94. package/src/platform/server/asyncStorage/index-types.ts +35 -0
  95. package/src/platform/server/asyncStorage/index.api.ts +2 -0
  96. package/src/platform/server/asyncStorage/index.electron.ts +88 -0
  97. package/src/platform/server/asyncStorage/index.ts +126 -0
  98. package/src/platform/server/connection/README.md +3 -0
  99. package/src/platform/server/connection/__mocks__/index.ts +15 -0
  100. package/src/platform/server/connection/index-types.ts +20 -0
  101. package/src/platform/server/connection/index.api.ts +13 -0
  102. package/src/platform/server/connection/index.electron.ts +102 -0
  103. package/src/platform/server/connection/index.ts +154 -0
  104. package/src/platform/server/fetch/__mocks__/index.ts +3 -0
  105. package/src/platform/server/fetch/index.api.ts +1 -0
  106. package/src/platform/server/fetch/index.electron.ts +18 -0
  107. package/src/platform/server/fetch/index.ts +20 -0
  108. package/src/platform/server/fs/index.api.ts +198 -0
  109. package/src/platform/server/fs/index.electron.ts +208 -0
  110. package/src/platform/server/fs/index.test.ts +117 -0
  111. package/src/platform/server/fs/index.ts +416 -0
  112. package/src/platform/server/fs/path-join.api.ts +1 -0
  113. package/src/platform/server/fs/path-join.electron.ts +1 -0
  114. package/src/platform/server/fs/path-join.ts +97 -0
  115. package/src/platform/server/fs/shared.ts +33 -0
  116. package/src/platform/server/indexeddb/index.ts +115 -0
  117. package/src/platform/server/log/index.ts +43 -0
  118. package/src/platform/server/sqlite/index.api.ts +2 -0
  119. package/src/platform/server/sqlite/index.electron.ts +134 -0
  120. package/src/platform/server/sqlite/index.test.ts +108 -0
  121. package/src/platform/server/sqlite/index.ts +241 -0
  122. package/src/platform/server/sqlite/normalise.ts +9 -0
  123. package/src/platform/server/sqlite/unicodeLike.test.ts +58 -0
  124. package/src/platform/server/sqlite/unicodeLike.ts +31 -0
  125. package/src/server/__mocks__/post.ts +9 -0
  126. package/src/server/__snapshots__/main.test.ts.snap +199 -0
  127. package/src/server/__snapshots__/sheet.test.ts.snap +9 -0
  128. package/src/server/accounts/__snapshots__/sync.test.ts.snap +136 -0
  129. package/src/server/accounts/app-bank-sync.test.ts +136 -0
  130. package/src/server/accounts/app.ts +1294 -0
  131. package/src/server/accounts/link.ts +25 -0
  132. package/src/server/accounts/payees.ts +36 -0
  133. package/src/server/accounts/sync.test.ts +679 -0
  134. package/src/server/accounts/sync.ts +1168 -0
  135. package/src/server/accounts/title/index.ts +60 -0
  136. package/src/server/accounts/title/lower-case.ts +93 -0
  137. package/src/server/accounts/title/specials.ts +21 -0
  138. package/src/server/admin/app.ts +241 -0
  139. package/src/server/api-models.ts +244 -0
  140. package/src/server/api.test.ts +36 -0
  141. package/src/server/api.ts +1030 -0
  142. package/src/server/app.ts +91 -0
  143. package/src/server/aql/compiler.test.ts +966 -0
  144. package/src/server/aql/compiler.ts +1222 -0
  145. package/src/server/aql/exec.test.ts +289 -0
  146. package/src/server/aql/exec.ts +128 -0
  147. package/src/server/aql/index.ts +41 -0
  148. package/src/server/aql/schema/executors.test.ts +420 -0
  149. package/src/server/aql/schema/executors.ts +345 -0
  150. package/src/server/aql/schema/index.test.ts +67 -0
  151. package/src/server/aql/schema/index.ts +409 -0
  152. package/src/server/aql/schema-helpers.test.ts +242 -0
  153. package/src/server/aql/schema-helpers.ts +208 -0
  154. package/src/server/aql/views.test.ts +62 -0
  155. package/src/server/aql/views.ts +57 -0
  156. package/src/server/auth/app.ts +387 -0
  157. package/src/server/bench.ts +29 -0
  158. package/src/server/budget/actions.ts +686 -0
  159. package/src/server/budget/app.ts +469 -0
  160. package/src/server/budget/base.test.ts +340 -0
  161. package/src/server/budget/base.ts +339 -0
  162. package/src/server/budget/category-template-context.test.ts +1658 -0
  163. package/src/server/budget/category-template-context.ts +862 -0
  164. package/src/server/budget/cleanup-template.pegjs +27 -0
  165. package/src/server/budget/cleanup-template.ts +408 -0
  166. package/src/server/budget/envelope.ts +403 -0
  167. package/src/server/budget/goal-template.pegjs +110 -0
  168. package/src/server/budget/goal-template.ts +309 -0
  169. package/src/server/budget/report.ts +308 -0
  170. package/src/server/budget/schedule-template.test.ts +184 -0
  171. package/src/server/budget/schedule-template.ts +351 -0
  172. package/src/server/budget/statements.ts +60 -0
  173. package/src/server/budget/template-notes.test.ts +393 -0
  174. package/src/server/budget/template-notes.ts +323 -0
  175. package/src/server/budget/util.ts +25 -0
  176. package/src/server/budgetfiles/__snapshots__/backups.test.ts.snap +101 -0
  177. package/src/server/budgetfiles/app.ts +672 -0
  178. package/src/server/budgetfiles/backups.test.ts +79 -0
  179. package/src/server/budgetfiles/backups.ts +251 -0
  180. package/src/server/cloud-storage.ts +467 -0
  181. package/src/server/dashboard/app.ts +373 -0
  182. package/src/server/db/__snapshots__/index.test.ts.snap +271 -0
  183. package/src/server/db/index.test.ts +300 -0
  184. package/src/server/db/index.ts +855 -0
  185. package/src/server/db/mappings.ts +59 -0
  186. package/src/server/db/sort.ts +58 -0
  187. package/src/server/db/types/index.ts +342 -0
  188. package/src/server/db/util.ts +36 -0
  189. package/src/server/encryption/app.ts +133 -0
  190. package/src/server/encryption/encryption-internals.api.ts +2 -0
  191. package/src/server/encryption/encryption-internals.electron.ts +89 -0
  192. package/src/server/encryption/encryption-internals.ts +109 -0
  193. package/src/server/encryption/encryption.test.ts +19 -0
  194. package/src/server/encryption/index.test.ts +19 -0
  195. package/src/server/encryption/index.ts +89 -0
  196. package/src/server/errors.ts +110 -0
  197. package/src/server/filters/app.ts +191 -0
  198. package/src/server/importers/actual.ts +49 -0
  199. package/src/server/importers/index.ts +58 -0
  200. package/src/server/importers/ynab4-types.ts +163 -0
  201. package/src/server/importers/ynab4.ts +470 -0
  202. package/src/server/importers/ynab5-types.ts +290 -0
  203. package/src/server/importers/ynab5.ts +1193 -0
  204. package/src/server/main-app.ts +25 -0
  205. package/src/server/main.test.ts +392 -0
  206. package/src/server/main.ts +336 -0
  207. package/src/server/migrate/__snapshots__/migrations.test.ts.snap +17 -0
  208. package/src/server/migrate/cli.ts +100 -0
  209. package/src/server/migrate/migrations.test.ts +81 -0
  210. package/src/server/migrate/migrations.ts +192 -0
  211. package/src/server/models.ts +184 -0
  212. package/src/server/mutators.ts +139 -0
  213. package/src/server/notes/app.ts +18 -0
  214. package/src/server/payees/app.ts +351 -0
  215. package/src/server/polyfills.ts +26 -0
  216. package/src/server/post.ts +219 -0
  217. package/src/server/preferences/app.ts +249 -0
  218. package/src/server/prefs.ts +91 -0
  219. package/src/server/reports/app.ts +187 -0
  220. package/src/server/rules/action.ts +344 -0
  221. package/src/server/rules/app.ts +193 -0
  222. package/src/server/rules/condition.ts +436 -0
  223. package/src/server/rules/customFunctions.ts +61 -0
  224. package/src/server/rules/formula-action.test.ts +175 -0
  225. package/src/server/rules/handlebars-helpers.ts +131 -0
  226. package/src/server/rules/index.test.ts +1095 -0
  227. package/src/server/rules/index.ts +22 -0
  228. package/src/server/rules/rule-indexer.ts +89 -0
  229. package/src/server/rules/rule-utils.ts +274 -0
  230. package/src/server/rules/rule.ts +193 -0
  231. package/src/server/schedules/app.test.ts +502 -0
  232. package/src/server/schedules/app.ts +644 -0
  233. package/src/server/schedules/find-schedules.ts +391 -0
  234. package/src/server/server-config.ts +59 -0
  235. package/src/server/sheet.test.ts +101 -0
  236. package/src/server/sheet.ts +280 -0
  237. package/src/server/spreadsheet/__snapshots__/spreadsheet.test.ts.snap +5 -0
  238. package/src/server/spreadsheet/app.ts +54 -0
  239. package/src/server/spreadsheet/globals.ts +13 -0
  240. package/src/server/spreadsheet/graph-data-structure.ts +165 -0
  241. package/src/server/spreadsheet/scratch +60 -0
  242. package/src/server/spreadsheet/spreadsheet.test.ts +191 -0
  243. package/src/server/spreadsheet/spreadsheet.ts +523 -0
  244. package/src/server/spreadsheet/util.ts +15 -0
  245. package/src/server/sql/init.sql +88 -0
  246. package/src/server/sync/__snapshots__/sync.test.ts.snap +31 -0
  247. package/src/server/sync/app.ts +29 -0
  248. package/src/server/sync/encoder.ts +129 -0
  249. package/src/server/sync/index.ts +820 -0
  250. package/src/server/sync/make-test-message.ts +19 -0
  251. package/src/server/sync/migrate.test.ts +169 -0
  252. package/src/server/sync/migrate.ts +48 -0
  253. package/src/server/sync/repair.ts +39 -0
  254. package/src/server/sync/reset.ts +91 -0
  255. package/src/server/sync/sync.property.test.ts +385 -0
  256. package/src/server/sync/sync.test.ts +349 -0
  257. package/src/server/sync/utils.ts +3 -0
  258. package/src/server/tags/app.ts +101 -0
  259. package/src/server/tests/mockData.json +9352 -0
  260. package/src/server/tests/mockSyncServer.ts +119 -0
  261. package/src/server/tools/app.ts +152 -0
  262. package/src/server/transactions/__snapshots__/transaction-rules.test.ts.snap +173 -0
  263. package/src/server/transactions/__snapshots__/transfer.test.ts.snap +655 -0
  264. package/src/server/transactions/app.ts +136 -0
  265. package/src/server/transactions/export/export-to-csv.ts +132 -0
  266. package/src/server/transactions/import/__snapshots__/parse-file.test.ts.snap +1582 -0
  267. package/src/server/transactions/import/ofx2json.test.ts +33 -0
  268. package/src/server/transactions/import/ofx2json.ts +157 -0
  269. package/src/server/transactions/import/parse-file.test.ts +224 -0
  270. package/src/server/transactions/import/parse-file.ts +286 -0
  271. package/src/server/transactions/import/qif2json.ts +110 -0
  272. package/src/server/transactions/import/xmlcamt2json.ts +168 -0
  273. package/src/server/transactions/index.ts +196 -0
  274. package/src/server/transactions/merge.test.ts +370 -0
  275. package/src/server/transactions/merge.ts +139 -0
  276. package/src/server/transactions/transaction-rules.test.ts +994 -0
  277. package/src/server/transactions/transaction-rules.ts +1038 -0
  278. package/src/server/transactions/transfer.test.ts +221 -0
  279. package/src/server/transactions/transfer.ts +173 -0
  280. package/src/server/undo.ts +271 -0
  281. package/src/server/update.ts +37 -0
  282. package/src/server/util/budget-name.ts +61 -0
  283. package/src/server/util/custom-sync-mapping.ts +48 -0
  284. package/src/server/util/rschedule.ts +9 -0
  285. package/src/shared/__mocks__/platform.ts +7 -0
  286. package/src/shared/__snapshots__/months.test.ts.snap +21 -0
  287. package/src/shared/arithmetic.test.ts +112 -0
  288. package/src/shared/arithmetic.ts +170 -0
  289. package/src/shared/async.test.ts +135 -0
  290. package/src/shared/async.ts +76 -0
  291. package/src/shared/constants.ts +5 -0
  292. package/src/shared/currencies.ts +70 -0
  293. package/src/shared/dashboard.ts +260 -0
  294. package/src/shared/environment.ts +18 -0
  295. package/src/shared/errors.ts +195 -0
  296. package/src/shared/locale.ts +27 -0
  297. package/src/shared/location-utils.test.ts +69 -0
  298. package/src/shared/location-utils.ts +49 -0
  299. package/src/shared/months.test.ts +5 -0
  300. package/src/shared/months.ts +485 -0
  301. package/src/shared/normalisation.ts +6 -0
  302. package/src/shared/platform.electron.ts +21 -0
  303. package/src/shared/platform.ts +20 -0
  304. package/src/shared/query.ts +176 -0
  305. package/src/shared/rules.test.ts +56 -0
  306. package/src/shared/rules.ts +371 -0
  307. package/src/shared/schedules.test.ts +570 -0
  308. package/src/shared/schedules.ts +560 -0
  309. package/src/shared/test-helpers.ts +156 -0
  310. package/src/shared/transactions.test.ts +275 -0
  311. package/src/shared/transactions.ts +433 -0
  312. package/src/shared/transfer.test.ts +75 -0
  313. package/src/shared/transfer.ts +16 -0
  314. package/src/shared/user.ts +4 -0
  315. package/src/shared/util.test.ts +240 -0
  316. package/src/shared/util.ts +633 -0
  317. package/src/types/api-handlers.ts +287 -0
  318. package/src/types/budget.ts +8 -0
  319. package/src/types/file.ts +47 -0
  320. package/src/types/handlers.ts +46 -0
  321. package/src/types/models/account.ts +24 -0
  322. package/src/types/models/bank-sync.ts +23 -0
  323. package/src/types/models/bank.ts +6 -0
  324. package/src/types/models/category-group.ts +11 -0
  325. package/src/types/models/category.ts +13 -0
  326. package/src/types/models/dashboard.ts +199 -0
  327. package/src/types/models/gocardless.ts +84 -0
  328. package/src/types/models/import-transaction.ts +56 -0
  329. package/src/types/models/index.ts +23 -0
  330. package/src/types/models/nearby-payee.ts +7 -0
  331. package/src/types/models/note.ts +4 -0
  332. package/src/types/models/openid.ts +8 -0
  333. package/src/types/models/payee-location.ts +8 -0
  334. package/src/types/models/payee.ts +10 -0
  335. package/src/types/models/pluggyai.ts +19 -0
  336. package/src/types/models/reports.ts +144 -0
  337. package/src/types/models/rule.ts +174 -0
  338. package/src/types/models/schedule.ts +49 -0
  339. package/src/types/models/simplefin.ts +28 -0
  340. package/src/types/models/tags.ts +6 -0
  341. package/src/types/models/templates.ts +135 -0
  342. package/src/types/models/transaction-filter.ts +9 -0
  343. package/src/types/models/transaction.ts +39 -0
  344. package/src/types/models/user-access.ts +10 -0
  345. package/src/types/models/user.ts +25 -0
  346. package/src/types/prefs.ts +167 -0
  347. package/src/types/server-events.ts +86 -0
  348. package/src/types/server-handlers.ts +27 -0
  349. package/src/types/util.ts +26 -0
  350. package/tsconfig.json +34 -0
  351. package/typings/pegjs.ts +1 -0
  352. package/typings/process-worker.ts +12 -0
  353. package/typings/vite-plugin-peggy-loader.ts +1 -0
  354. package/typings/window.ts +62 -0
  355. package/vite.config.ts +109 -0
  356. package/vite.desktop.config.ts +59 -0
  357. package/vitest.config.ts +43 -0
  358. package/vitest.web.config.ts +38 -0
@@ -0,0 +1,124 @@
1
+ OFXHEADER:100
2
+ DATA:OFXSGML
3
+ VERSION:102
4
+ SECURITY:NONE
5
+ ENCODING:USASCII
6
+ CHARSET:1252
7
+ COMPRESSION:NONE
8
+ OLDFILEUID:NONE
9
+ NEWFILEUID:NONE
10
+
11
+ <OFX>
12
+ <SIGNONMSGSRSV1>
13
+ <SONRS>
14
+ <STATUS>
15
+ <CODE>0
16
+ <SEVERITY>INFO
17
+ </STATUS>
18
+ <DTSERVER>20190124212851.000[0:UTC]
19
+ <LANGUAGE>ENG
20
+ <DTACCTUP>20190124212851.000[0:UTC]
21
+ <FI>
22
+ <ORG>Bank of America
23
+ <FID>5959
24
+ </FI>
25
+ <INTU.BID>6526
26
+ <INTU.USERID>jlongster03
27
+ </SONRS>
28
+ </SIGNONMSGSRSV1>
29
+ <BANKMSGSRSV1>
30
+ <STMTTRNRS>
31
+ <TRNUID>0
32
+ <STATUS>
33
+ <CODE>0
34
+ <SEVERITY>INFO
35
+ </STATUS>
36
+ <STMTRS>
37
+ <CURDEF>USD
38
+ <BANKACCTFROM>
39
+ <BANKID>012345678
40
+ <ACCTID>123456789123
41
+ <ACCTTYPE>CHECKING
42
+ </BANKACCTFROM>
43
+ <BANKTRANLIST>
44
+ <DTSTART>20190119120000
45
+ <DTEND>20190124120000
46
+ <STMTTRN>
47
+ <TRNTYPE>DEBIT
48
+ <DTPOSTED>20190123120000
49
+ <TRNAMT>-30.00
50
+ <FITID>00092990122-30.00019012312798.01
51
+ <NAME>PATIENT FIRST TOKEN 01/22 PURCHA
52
+ </STMTTRN>
53
+ <STMTTRN>
54
+ <TRNTYPE>DEBIT
55
+ <DTPOSTED>20190123120000
56
+ <TRNAMT>-3.77
57
+ <FITID>00092990121-3.77019012312828.01
58
+ <NAME>STARBUCKS STORE 07604 01/21 PURC
59
+ </STMTTRN>
60
+ <STMTTRN>
61
+ <TRNTYPE>DEBIT
62
+ <DTPOSTED>20190123120000
63
+ <TRNAMT>-9.62
64
+ <FITID>00092990121-9.62019012312831.78
65
+ <NAME>STARBUCKS STORE 07604 01/21 PURC
66
+ </STMTTRN>
67
+ <STMTTRN>
68
+ <TRNTYPE>DEBIT
69
+ <DTPOSTED>20190122120000
70
+ <TRNAMT>-115.99
71
+ <FITID>00090231800-115.99019012212841.40
72
+ <NAME>VERIZON DES:PAYMENTREC ID:XXXXX3
73
+ </STMTTRN>
74
+ <STMTTRN>
75
+ <TRNTYPE>DEBIT
76
+ <DTPOSTED>20190122120000
77
+ <TRNAMT>-10.34
78
+ <FITID>00092990120-10.34019012212957.39
79
+ <NAME>URBAN FARMHOUSE NO 2 01/19 PURCH
80
+ </STMTTRN>
81
+ <STMTTRN>
82
+ <TRNTYPE>DEBIT
83
+ <DTPOSTED>20190122120000
84
+ <TRNAMT>-22.53
85
+ <FITID>00092990120-22.53019012212967.73
86
+ <NAME>URBAN FARMHOUSE NO 2 01/19 PURCH
87
+ </STMTTRN>
88
+ <STMTTRN>
89
+ <TRNTYPE>DEBIT
90
+ <DTPOSTED>20190122120000
91
+ <TRNAMT>-108.71
92
+ <FITID>00092990119-108.71019012212990.26
93
+ <NAME>TMOBILE*AUTO PAY 01/19 PURCHASE
94
+ </STMTTRN>
95
+ <STMTTRN>
96
+ <TRNTYPE>DEBIT
97
+ <DTPOSTED>20190122120000
98
+ <TRNAMT>-25.00
99
+ <FITID>00092990118-25.00019012213098.97
100
+ <NAME>COUNTY WASTE 01/18 PURCHASE 804-
101
+ </STMTTRN>
102
+ <STMTTRN>
103
+ <TRNTYPE>DEBIT
104
+ <DTPOSTED>20190122120000
105
+ <TRNAMT>-32.38
106
+ <FITID>00092990118-32.38019012213123.97
107
+ <NAME>REGENCY MART CITGO 01/18 PURCHAS
108
+ </STMTTRN>
109
+ <STMTTRN>
110
+ <TRNTYPE>DEBIT
111
+ <DTPOSTED>20190122120000
112
+ <TRNAMT>-6.07
113
+ <FITID>00092990117-6.07019012213156.35
114
+ <NAME>CHICK-FIL-A #01342 01/17 PURCHAS
115
+ </STMTTRN>
116
+ </BANKTRANLIST>
117
+ <LEDGERBAL>
118
+ <BALAMT>12798.01
119
+ <DTASOF>20190124212851
120
+ </LEDGERBAL>
121
+ </STMTRS>
122
+ </STMTTRNRS>
123
+ </BANKMSGSRSV1>
124
+ </OFX>
@@ -0,0 +1,124 @@
1
+ OFXHEADER:100
2
+ DATA:OFXSGML
3
+ VERSION:102
4
+ SECURITY:NONE
5
+ ENCODING:USASCII
6
+ CHARSET:1252
7
+ COMPRESSION:NONE
8
+ OLDFILEUID:NONE
9
+ NEWFILEUID:NONE
10
+
11
+ <OFX>
12
+ <SIGNONMSGSRSV1>
13
+ <SONRS>
14
+ <STATUS>
15
+ <CODE>0
16
+ <SEVERITY>INFO
17
+ </STATUS>
18
+ <DTSERVER>20190124212851.000[0:UTC]
19
+ <LANGUAGE>ENG
20
+ <DTACCTUP>20190124212851.000[0:UTC]
21
+ <FI>
22
+ <ORG>Bank of America
23
+ <FID>5959
24
+ </FI>
25
+ <INTU.BID>6526
26
+ <INTU.USERID>jlongster03
27
+ </SONRS>
28
+ </SIGNONMSGSRSV1>
29
+ <BANKMSGSRSV1>
30
+ <STMTTRNRS>
31
+ <TRNUID>0
32
+ <STATUS>
33
+ <CODE>0
34
+ <SEVERITY>INFO
35
+ </STATUS>
36
+ <STMTRS>
37
+ <CURDEF>USD
38
+ <BANKACCTFROM>
39
+ <BANKID>012345678
40
+ <ACCTID>123456789123
41
+ <ACCTTYPE>CHECKING
42
+ </BANKACCTFROM>
43
+ <BANKTRANLIST>
44
+ <DTSTART>20190119120000
45
+ <DTEND>20190124120000
46
+ <STMTTRN>
47
+ <TRNTYPE>DEBIT
48
+ <DTPOSTED>20190123120000
49
+ <TRNAMT>-30.00
50
+ <FITID>00092990122-30.00019012312798.01
51
+ <NAME>PATIENT FIRST TOKEN 01/22 PURCHA
52
+ </STMTTRN>
53
+ <STMTTRN>
54
+ <TRNTYPE>DEBIT
55
+ <DTPOSTED>20190123120000
56
+ <TRNAMT>-3.77
57
+ <FITID>00092990121-3.77019012312828.01
58
+ <NAME>STARBUCKS STORE 07604 01/21 PURC
59
+ </STMTTRN>
60
+ <STMTTRN>
61
+ <TRNTYPE>DEBIT
62
+ <DTPOSTED>20190123120000
63
+ <TRNAMT>-9.62
64
+ <FITID>00092990121-9.62019012312831.78
65
+ <NAME>STARBUCKS STORE 07604 01/21 PURC
66
+ </STMTTRN>
67
+ <STMTTRN>
68
+ <TRNTYPE>DEBIT
69
+ <DTPOSTED>20190122120000
70
+ <TRNAMT>-115.99
71
+ <FITID>00090231800-115.99019012212841.40
72
+ <NAME>VERIZON DES:PAYMENTREC ID:XXXXX3
73
+ </STMTTRN>
74
+ <STMTTRN>
75
+ <TRNTYPE>DEBIT
76
+ <DTPOSTED>20190122120000
77
+ <TRNAMT>-10.34
78
+ <FITID>00092990120-10.34019012212957.39
79
+ <NAME>URBAN FARMHOUSE NO 2 01/19 PURCH
80
+ </STMTTRN>
81
+ <STMTTRN>
82
+ <TRNTYPE>DEBIT
83
+ <DTPOSTED>20190122120000
84
+ <TRNAMT>-22.53
85
+ <FITID>00092990120-22.53019012212967.73
86
+ <NAME>URBAN FARMHOUSE NO 2 01/19 PURCH
87
+ </STMTTRN>
88
+ <STMTTRN>
89
+ <TRNTYPE>DEBIT
90
+ <DTPOSTED>20190122120000
91
+ <TRNAMT>-108.71
92
+ <FITID>00092990119-108.71019012212990.26
93
+ <NAME>TMOBILE*AUTO PAY 01/19 PURCHASE
94
+ </STMTTRN>
95
+ <STMTTRN>
96
+ <TRNTYPE>DEBIT
97
+ <DTPOSTED>20190122120000
98
+ <TRNAMT>-25.00
99
+ <FITID>00092990118-25.00019012213098.97
100
+ <NAME>COUNTY WASTE 01/18 PURCHASE 804-
101
+ </STMTTRN>
102
+ <STMTTRN>
103
+ <TRNTYPE>DEBIT
104
+ <DTPOSTED>20190122120000
105
+ <TRNAMT>-32.38
106
+ <FITID>00092990118-32.38019012213123.97
107
+ <NAME>REGENCY MART CITGO 01/18 PURCHAS
108
+ </STMTTRN>
109
+ <STMTTRN>
110
+ <TRNTYPE>DEBIT
111
+ <DTPOSTED>20190122120000
112
+ <TRNAMT>-6.07
113
+ <FITID>00092990117-6.07019012213156.35
114
+ <NAME>CHICK-FIL-A #01342 01/17 PURCHAS
115
+ </STMTTRN>
116
+ </BANKTRANLIST>
117
+ <LEDGERBAL>
118
+ <BALAMT>12798.01
119
+ <DTASOF>20190124212851
120
+ </LEDGERBAL>
121
+ </STMTRS>
122
+ </STMTTRNRS>
123
+ </BANKMSGSRSV1>
124
+ </OFX>
@@ -0,0 +1,91 @@
1
+ !Type:Bank
2
+ D12/19/18
3
+ PCOUNTY WASTE 12/18 PURCHASE 804-8439288 VA
4
+ T-25.00
5
+ C*
6
+ ^
7
+ D12/19/18
8
+ PõSSELDORF KÖLN SALON - LIBBIE GR 12/18 PURCHASE RICHMOND VA
9
+ T-45.00
10
+ C*
11
+ ^
12
+ D12/19/18
13
+ PLOFT 0845 CHES 12/19 PURCHASE RICHMOND VA
14
+ T-31.33
15
+ C*
16
+ ^
17
+ D12/19/18
18
+ PTARGET T- 1130 12/19 PURCHASE Richmond VA
19
+ T-6.31
20
+ C*
21
+ ^
22
+ D12/19/18
23
+ PTARGET DEBIT CRD ACH TRAN CO ID:XXXXX15170 POS TARGET -1018 RICHMOND V
24
+ T-41.92
25
+ C*
26
+ ^
27
+ D12/19/18
28
+ PTARGET DEBIT CRD DES:ACH TRAN ID:XXXXX0370723991 INDN:S LONG 9321 CO I
29
+ T-24.01
30
+ C*
31
+ ^
32
+ D12/19/18
33
+ PTARGET DEBIT CRD DES:ACH TRAN ID:XXXXX0370723991 INDN:S LONG 9703 CO I
34
+ T-12.00
35
+ C*
36
+ ^
37
+ D12/20/18
38
+ PBKOFAMERICA MOBILE 12/20 3705340250 DEPOSIT *MOBILE VA
39
+ T874.85
40
+ C*
41
+ ^
42
+ D12/20/18
43
+ PAMAZON.COM*M21KD0HA0 AM 12/19 PURCHASE AMZN.COM/BILL WA
44
+ T-12.63
45
+ C*
46
+ ^
47
+ D12/20/18
48
+ PTARGET DEBIT CRD DES:ACH TRAN ID:XXXXX0370723991 INDN:S LONG 6486 CO I
49
+ T-36.00
50
+ C*
51
+ ^
52
+ D12/21/18
53
+ PSTARBUCKS STORE 07604 12/19 PURCHASE RICHMOND VA
54
+ T-5.21
55
+ C*
56
+ ^
57
+ D12/21/18
58
+ PAMAZON.COM*M236431E2 AM 12/19 PURCHASE AMZN.COM/BILL WA
59
+ T-34.70
60
+ C*
61
+ ^
62
+ D12/21/18
63
+ PSTARBUCKS STORE 07604 12/19 PURCHASE RICHMOND VA
64
+ T-5.41
65
+ C*
66
+ ^
67
+ D12/21/18
68
+ PAMAZON.COM*M208P98U1 AM 12/19 PURCHASE AMZN.COM/BILL WA
69
+ T-105.29
70
+ C*
71
+ ^
72
+ D12/21/18
73
+ PAMAZON.COM*M29QF7M71 AM 12/19 PURCHASE AMZN.COM/BILL WA
74
+ T-7.36
75
+ C*
76
+ ^
77
+ D12/21/18
78
+ PAMAZON.COM*M20VB1851 AM 12/20 PURCHASE AMZN.COM/BILL WA
79
+ T-12.85
80
+ C*
81
+ ^
82
+ D12/21/18
83
+ PAMZN MKTP US*M27HH51C2 12/20 PURCHASE AMZN.COM/BILL WA
84
+ T-12.99
85
+ C*
86
+ ^
87
+ D12/21/18
88
+ PCVS/PHARM 0154 12/21 PURCHASE RICHMOND VA
89
+ T-62.78
90
+ C*
91
+ ^
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "Default-Test-Db",
3
+ "budgetName": "Default Test Db",
4
+ "budgetVersion": "0.0.1",
5
+ "isCached": true
6
+ }
@@ -0,0 +1,17 @@
1
+ OFXHEADER:100
2
+ DATA:OFXSGML
3
+ VERSION:102
4
+ SECURITY:NONE
5
+ ENCODING:USASCII
6
+ CHARSET:1252
7
+ COMPRESSION:NONE
8
+ OLDFILEUID:NONE
9
+ NEWFILEUID:NONE
10
+
11
+ <OFX><SIGNONMSGSRSV1><SONRS><STATUS><CODE>0<SEVERITY>INFO<MESSAGE>OK</STATUS><DTSERVER>20231106023518<LANGUAGE>ENG<DTPROFUP>20231106023518<DTACCTUP>20231106023518<INTU.BID>00005</SONRS></SIGNONMSGSRSV1>
12
+ <BANKMSGSRSV1><STMTTRNRS><TRNUID>20231106023518<STATUS><CODE>0<SEVERITY>INFO<MESSAGE>OK</STATUS>
13
+ <STMTRS><CURDEF>CAD<BANKACCTFROM><BANKID>000000000<ACCTID>00000 00-00000<ACCTTYPE>CHECKING</BANKACCTFROM>
14
+ <BANKTRANLIST><DTSTART>20190731120000<DTEND>20231031120000
15
+ <STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20230509120000.000[-5:EST]<TRNAMT>-1.00<FITID>23129130032333396279270000<NAME>000000000000000<MEMO>PREAUTHORIZED DEBIT;B.C. HYDRO &amp; POWER AUTHORITY;Electronic Funds Transfer</STMTTRN>
16
+ <STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20230301120000.000[-5:EST]<TRNAMT>-1.00<FITID>23060061032549554596530000<NAME>TPAY &amp;lt;DEFTPYMT&amp;gt;<MEMO>PREAUTHORIZED DEBIT;LUXMORE REALTY PPTY MGMT;Electronic Funds Transfer</STMTTRN>
17
+ </BANKTRANLIST><LEDGERBAL><BALAMT>1111.11<DTASOF>20231106023518</LEDGERBAL><AVAILBAL><BALAMT>1111.11<DTASOF>20231106023518</AVAILBAL></STMTRS></STMTTRNRS></BANKMSGSRSV1></OFX>
@@ -0,0 +1,221 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+
3
+ import * as monthUtils from '../shared/months';
4
+ import type {
5
+ AccountEntity,
6
+ CategoryEntity,
7
+ CategoryGroupEntity,
8
+ TransactionEntity,
9
+ } from '../types/models';
10
+
11
+ import { random } from './random';
12
+
13
+ export function generateAccount(
14
+ name: AccountEntity['name'],
15
+ isConnected?: boolean,
16
+ offbudget?: boolean,
17
+ ): AccountEntity {
18
+ const offlineAccount: AccountEntity = {
19
+ id: uuidv4(),
20
+ name,
21
+ offbudget: offbudget ? 1 : 0,
22
+ sort_order: 0,
23
+ last_reconciled: null,
24
+ tombstone: 0,
25
+ closed: 0,
26
+ ...emptySyncFields(),
27
+ };
28
+
29
+ if (isConnected) {
30
+ return {
31
+ ...offlineAccount,
32
+ balance_current: Math.floor(random() * 100000),
33
+ bankId: Math.floor(random() * 10000).toString(),
34
+ bankName: 'boa',
35
+ bank: Math.floor(random() * 10000).toString(),
36
+ account_id: 'idx',
37
+ mask: 'xxx',
38
+ official_name: 'boa',
39
+ balance_available: 0,
40
+ balance_limit: 0,
41
+ account_sync_source: 'goCardless',
42
+ last_sync: new Date().getTime().toString(),
43
+ };
44
+ }
45
+
46
+ return offlineAccount;
47
+ }
48
+
49
+ function emptySyncFields(): Pick<
50
+ AccountEntity,
51
+ | 'account_id'
52
+ | 'bank'
53
+ | 'bankId'
54
+ | 'bankName'
55
+ | 'mask'
56
+ | 'official_name'
57
+ | 'balance_current'
58
+ | 'balance_available'
59
+ | 'balance_limit'
60
+ | 'account_sync_source'
61
+ | 'last_sync'
62
+ > {
63
+ return {
64
+ account_id: null,
65
+ bank: null,
66
+ bankId: null,
67
+ bankName: null,
68
+ mask: null,
69
+ official_name: null,
70
+ balance_current: null,
71
+ balance_available: null,
72
+ balance_limit: null,
73
+ account_sync_source: null,
74
+ last_sync: null,
75
+ };
76
+ }
77
+
78
+ let sortOrder = 1;
79
+ export function generateCategory(
80
+ name: string,
81
+ group: string,
82
+ isIncome: boolean = false,
83
+ ): CategoryEntity {
84
+ return {
85
+ id: uuidv4(),
86
+ name,
87
+ group,
88
+ is_income: isIncome,
89
+ sort_order: sortOrder++,
90
+ };
91
+ }
92
+
93
+ let groupSortOrder = 1;
94
+ export function generateCategoryGroup(
95
+ name: string,
96
+ isIncome: boolean = false,
97
+ ): CategoryGroupEntity {
98
+ return {
99
+ id: uuidv4(),
100
+ name,
101
+ is_income: isIncome,
102
+ sort_order: groupSortOrder++,
103
+ };
104
+ }
105
+
106
+ export type CategoryGroupDefinition = Omit<
107
+ CategoryGroupEntity,
108
+ 'id' | 'categories'
109
+ > & {
110
+ categories: Omit<CategoryEntity, 'id' | 'group'>[];
111
+ };
112
+
113
+ export function generateCategoryGroups(
114
+ definition: Partial<CategoryGroupDefinition>[],
115
+ ): CategoryGroupEntity[] {
116
+ return definition.map(group => {
117
+ const g = generateCategoryGroup(group.name ?? '', group.is_income);
118
+
119
+ if (!group.categories) {
120
+ return g;
121
+ }
122
+
123
+ return {
124
+ ...g,
125
+ categories: group.categories.map(cat =>
126
+ generateCategory(cat.name, g.id, cat.is_income),
127
+ ),
128
+ };
129
+ });
130
+ }
131
+
132
+ function _generateTransaction(
133
+ data: Partial<TransactionEntity> & Pick<TransactionEntity, 'account'>,
134
+ ): TransactionEntity {
135
+ return {
136
+ id: data.id || uuidv4(),
137
+ amount: data.amount || Math.floor(random() * 10000 - 7000),
138
+ payee: data.payee || 'payed-to',
139
+ notes: 'Notes',
140
+ account: data.account,
141
+ date: data.date || monthUtils.currentDay(),
142
+ sort_order: data.sort_order != null ? data.sort_order : 1,
143
+ cleared: false,
144
+ ...(data.category && { category: data.category }),
145
+ };
146
+ }
147
+
148
+ export function generateTransaction(
149
+ data: Partial<TransactionEntity> & Pick<TransactionEntity, 'account'>,
150
+ splitAmount?: number,
151
+ showError: boolean = false,
152
+ ) {
153
+ const result: TransactionEntity[] = [];
154
+
155
+ const trans = _generateTransaction(data);
156
+ result.push(trans);
157
+
158
+ if (splitAmount) {
159
+ const parent = trans;
160
+ parent.is_parent = true;
161
+
162
+ result.push(
163
+ {
164
+ id: parent.id + '/' + uuidv4(),
165
+ amount: trans.amount - splitAmount,
166
+ account: parent.account,
167
+ date: parent.date,
168
+ is_child: true,
169
+ },
170
+ {
171
+ id: parent.id + '/' + uuidv4(),
172
+ amount: splitAmount,
173
+ account: parent.account,
174
+ date: parent.date,
175
+ is_child: true,
176
+ },
177
+ );
178
+
179
+ if (showError) {
180
+ const last = result[result.length - 1];
181
+ last.amount += 500;
182
+ last.error = {
183
+ type: 'SplitTransactionError',
184
+ version: 1,
185
+ difference: 500,
186
+ };
187
+ }
188
+ }
189
+
190
+ return result;
191
+ }
192
+
193
+ export function generateTransactions(
194
+ count: number,
195
+ accountId: string,
196
+ groupId: string,
197
+ splitAtIndexes: number[] = [],
198
+ showError: boolean = false,
199
+ ): TransactionEntity[] {
200
+ const transactions: TransactionEntity[] = [];
201
+
202
+ for (let i = 0; i < count; i++) {
203
+ const isSplit = splitAtIndexes.includes(i);
204
+
205
+ transactions.push.apply(
206
+ transactions,
207
+ generateTransaction(
208
+ {
209
+ account: accountId,
210
+ category: groupId,
211
+ ...(isSplit && { amount: 50 }),
212
+ sort_order: i,
213
+ },
214
+ isSplit ? 30 : undefined,
215
+ showError,
216
+ ),
217
+ );
218
+ }
219
+
220
+ return transactions;
221
+ }
@@ -0,0 +1,13 @@
1
+
2
+ CREATE TABLE poop
3
+ (id INT PRIMARY KEY,
4
+ name TEXT);
5
+
6
+ CREATE TABLE person
7
+ (id INT PRIMARY KEY,
8
+ name TEXT,
9
+ poops INT,
10
+ FOREIGN KEY(poops) REFERENCES poop(id));
11
+
12
+ INSERT INTO poop (id, name) VALUES (1, 'monday');
13
+ INSERT INTO person (id, name, poops) VALUES (1, 'james', 1);
@@ -0,0 +1,2 @@
1
+ ALTER TABLE poop ADD COLUMN is_income INTEGER DEFAULT 0;
2
+ ALTER TABLE poop ADD COLUMN is_expense INTEGER DEFAULT 0;
@@ -0,0 +1,15 @@
1
+ PRAGMA foreign_keys = OFF;
2
+
3
+ ALTER TABLE poop RENAME TO tmp_poop;
4
+
5
+ CREATE TABLE poop
6
+ (id INT PRIMARY KEY,
7
+ name TEXT,
8
+ is_expense INTEGER);
9
+
10
+ INSERT INTO poop
11
+ SELECT id, name, is_expense FROM tmp_poop;
12
+
13
+ DROP TABLE tmp_poop;
14
+
15
+ PRAGMA foreign_keys = ON;
@@ -0,0 +1,16 @@
1
+ import * as Platform from '../shared/platform';
2
+
3
+ // Fake "random" function used to have stable data structures for
4
+ // e2e and visual regression tests
5
+ let pseudoRandomIterator = 0;
6
+ function pseudoRandom(): number {
7
+ pseudoRandomIterator += 0.45;
8
+
9
+ if (pseudoRandomIterator > 1) {
10
+ pseudoRandomIterator = 0;
11
+ }
12
+
13
+ return pseudoRandomIterator;
14
+ }
15
+
16
+ export const random = Platform.isPlaywright ? pseudoRandom : Math.random;