ekwo-os 0.9.0 → 0.10.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 (199) hide show
  1. package/README.md +22 -11
  2. package/dist/assets/expected-objects.json +1610 -188
  3. package/dist/assets/migrations/20260929094126_a_setting_nobody_owns.sql +167 -0
  4. package/dist/assets/migrations/20260929103358_a_trail_no_client_rewrites.sql +190 -0
  5. package/dist/assets/migrations/20260929141500_a_bank_account_is_not_an_iban.sql +120 -0
  6. package/dist/assets/migrations/20260929151700_an_archive_is_read_under_the_names_of_today.sql +541 -0
  7. package/dist/assets/migrations/20260929170005_a_member_leaves.sql +241 -0
  8. package/dist/assets/migrations/20260930103815_a_key_holds_what_its_issuer_holds.sql +447 -0
  9. package/dist/assets/migrations/20261002065918_schema_version_0_10_0.sql +46 -0
  10. package/dist/assets/modules/corporate-tax/module.json +12 -0
  11. package/dist/assets/modules/corporate-tax/supabase/migrations/20260930104417_corporate_tax.sql +1746 -0
  12. package/dist/assets/modules/{assets → fixed-assets}/module.json +4 -4
  13. package/dist/assets/modules/fixed-assets/supabase/migrations/20260929151742_assets_schema_is_fixed_assets.sql +1081 -0
  14. package/dist/assets/modules/schema/module.1.json +3 -3
  15. package/dist/assets/seed/104_pack_do.sql +3 -2
  16. package/dist/assets/seed/105_pack_cr.sql +3 -2
  17. package/dist/assets/seed/106_pack_gt.sql +3 -2
  18. package/dist/assets/seed/108_pack_in.sql +3 -2
  19. package/dist/assets/seed/10_pack_be.sql +15 -2
  20. package/dist/assets/seed/110_pack_ge.sql +3 -2
  21. package/dist/assets/seed/111_pack_md.sql +3 -2
  22. package/dist/assets/seed/112_pack_rs.sql +3 -2
  23. package/dist/assets/seed/113_pack_ba.sql +3 -2
  24. package/dist/assets/seed/114_pack_al.sql +3 -2
  25. package/dist/assets/seed/115_pack_mk.sql +3 -2
  26. package/dist/assets/seed/116_pack_me.sql +3 -2
  27. package/dist/assets/seed/117_pack_bh.sql +3 -2
  28. package/dist/assets/seed/118_pack_om.sql +1 -1
  29. package/dist/assets/seed/11_pack_fr.sql +13 -2
  30. package/dist/assets/seed/120_pack_tz.sql +1 -1
  31. package/dist/assets/seed/121_pack_ug.sql +1 -1
  32. package/dist/assets/seed/122_pack_rw.sql +1 -1
  33. package/dist/assets/seed/123_pack_xk.sql +3 -2
  34. package/dist/assets/seed/124_pack_kz.sql +3 -2
  35. package/dist/assets/seed/12_pack_lu.sql +3 -2
  36. package/dist/assets/seed/13_pack_ee.sql +3 -2
  37. package/dist/assets/seed/14_pack_gb.sql +25 -2
  38. package/dist/assets/seed/15_pack_us.sql +19 -2
  39. package/dist/assets/seed/16_pack_ie.sql +3 -2
  40. package/dist/assets/seed/17_pack_nl.sql +22 -3
  41. package/dist/assets/seed/18_pack_de.sql +10 -3
  42. package/dist/assets/seed/19_pack_es.sql +10 -3
  43. package/dist/assets/seed/20_pack_sn.sql +6 -3
  44. package/dist/assets/seed/21_pack_ci.sql +4 -3
  45. package/dist/assets/seed/22_pack_bj.sql +4 -3
  46. package/dist/assets/seed/23_pack_bf.sql +4 -3
  47. package/dist/assets/seed/24_pack_cm.sql +4 -3
  48. package/dist/assets/seed/25_pack_cf.sql +4 -3
  49. package/dist/assets/seed/26_pack_km.sql +4 -3
  50. package/dist/assets/seed/27_pack_cg.sql +4 -3
  51. package/dist/assets/seed/28_pack_ga.sql +4 -3
  52. package/dist/assets/seed/29_pack_gn.sql +2 -2
  53. package/dist/assets/seed/30_pack_gw.sql +4 -3
  54. package/dist/assets/seed/31_pack_gq.sql +4 -3
  55. package/dist/assets/seed/32_pack_ml.sql +4 -3
  56. package/dist/assets/seed/33_pack_ne.sql +4 -3
  57. package/dist/assets/seed/34_pack_cd.sql +2 -2
  58. package/dist/assets/seed/35_pack_td.sql +4 -3
  59. package/dist/assets/seed/36_pack_tg.sql +4 -3
  60. package/dist/assets/seed/37_pack_it.sql +3 -2
  61. package/dist/assets/seed/40_pack_au.sql +15 -2
  62. package/dist/assets/seed/41_pack_nz.sql +1 -1
  63. package/dist/assets/seed/42_pack_mx.sql +16 -3
  64. package/dist/assets/seed/43_pack_pt.sql +3 -2
  65. package/dist/assets/seed/44_pack_ph.sql +1 -1
  66. package/dist/assets/seed/49_pack_ng.sql +8 -4
  67. package/dist/assets/seed/50_pack_sg.sql +10 -2
  68. package/dist/assets/seed/51_pack_jp.sql +3 -2
  69. package/dist/assets/seed/52_pack_hk.sql +1 -1
  70. package/dist/assets/seed/56_pack_th.sql +1 -1
  71. package/dist/assets/seed/57_pack_ua.sql +3 -2
  72. package/dist/assets/seed/58_pack_ca.sql +3 -2
  73. package/dist/assets/seed/60_pack_ae.sql +13 -2
  74. package/dist/assets/seed/61_pack_se.sql +3 -2
  75. package/dist/assets/seed/62_pack_ch.sql +3 -2
  76. package/dist/assets/seed/63_pack_at.sql +3 -2
  77. package/dist/assets/seed/64_pack_pl.sql +3 -2
  78. package/dist/assets/seed/65_pack_dk.sql +3 -2
  79. package/dist/assets/seed/66_pack_no.sql +3 -2
  80. package/dist/assets/seed/67_pack_fi.sql +3 -2
  81. package/dist/assets/seed/68_pack_cz.sql +3 -2
  82. package/dist/assets/seed/69_pack_sk.sql +3 -2
  83. package/dist/assets/seed/70_pack_hu.sql +3 -2
  84. package/dist/assets/seed/71_pack_sa.sql +3 -2
  85. package/dist/assets/seed/72_pack_ro.sql +3 -2
  86. package/dist/assets/seed/73_pack_bg.sql +3 -2
  87. package/dist/assets/seed/74_pack_hr.sql +3 -2
  88. package/dist/assets/seed/75_pack_si.sql +3 -2
  89. package/dist/assets/seed/76_pack_gr.sql +3 -2
  90. package/dist/assets/seed/77_pack_lt.sql +3 -2
  91. package/dist/assets/seed/78_pack_lv.sql +3 -2
  92. package/dist/assets/seed/79_pack_cy.sql +3 -2
  93. package/dist/assets/seed/80_pack_mt.sql +3 -2
  94. package/dist/assets/seed/81_pack_is.sql +3 -2
  95. package/dist/assets/seed/82_pack_tr.sql +3 -2
  96. package/dist/assets/seed/83_pack_eg.sql +3 -2
  97. package/dist/assets/seed/85_pack_tn.sql +3 -2
  98. package/dist/assets/seed/87_pack_il.sql +3 -2
  99. package/dist/assets/seed/88_pack_za.sql +18 -2
  100. package/dist/assets/seed/89_pack_ke.sql +1 -1
  101. package/dist/assets/seed/modules/corporate_tax/10_pack_be.sql +127 -0
  102. package/dist/assets/seed/modules/corporate_tax/11_pack_fr.sql +113 -0
  103. package/dist/assets/seed/modules/corporate_tax/14_pack_gb.sql +100 -0
  104. package/dist/assets/seed/modules/corporate_tax/15_pack_us.sql +97 -0
  105. package/dist/assets/seed/modules/corporate_tax/17_pack_nl.sql +82 -0
  106. package/dist/assets/seed/modules/corporate_tax/18_pack_de.sql +90 -0
  107. package/dist/assets/seed/modules/corporate_tax/19_pack_es.sql +111 -0
  108. package/dist/assets/seed/modules/corporate_tax/20_pack_sn.sql +111 -0
  109. package/dist/assets/seed/modules/corporate_tax/40_pack_au.sql +94 -0
  110. package/dist/assets/seed/modules/corporate_tax/42_pack_mx.sql +82 -0
  111. package/dist/assets/seed/modules/corporate_tax/49_pack_ng.sql +96 -0
  112. package/dist/assets/seed/modules/corporate_tax/50_pack_sg.sql +97 -0
  113. package/dist/assets/seed/modules/corporate_tax/60_pack_ae.sql +84 -0
  114. package/dist/assets/seed/modules/corporate_tax/88_pack_za.sql +87 -0
  115. package/dist/assets/seed/modules/{assets → fixed_assets}/10_pack_be.sql +6 -6
  116. package/dist/assets/seed/modules/{assets → fixed_assets}/11_pack_fr.sql +6 -6
  117. package/dist/assets/seed/modules/{assets → fixed_assets}/14_pack_gb.sql +6 -6
  118. package/dist/assets/seed/modules/{assets → fixed_assets}/15_pack_us.sql +6 -6
  119. package/dist/assets/seed/modules/fixed_assets/17_pack_nl.sql +59 -0
  120. package/dist/assets/seed/modules/fixed_assets/18_pack_de.sql +56 -0
  121. package/dist/assets/seed/modules/fixed_assets/19_pack_es.sql +66 -0
  122. package/dist/assets/seed/modules/fixed_assets/20_pack_sn.sql +57 -0
  123. package/dist/assets/seed/modules/fixed_assets/40_pack_au.sql +57 -0
  124. package/dist/assets/seed/modules/fixed_assets/42_pack_mx.sql +53 -0
  125. package/dist/assets/seed/modules/fixed_assets/49_pack_ng.sql +57 -0
  126. package/dist/assets/seed/modules/fixed_assets/50_pack_sg.sql +57 -0
  127. package/dist/assets/seed/modules/fixed_assets/60_pack_ae.sql +57 -0
  128. package/dist/assets/seed/modules/fixed_assets/88_pack_za.sql +58 -0
  129. package/dist/bootstrap.d.ts +26 -6
  130. package/dist/bootstrap.d.ts.map +1 -1
  131. package/dist/bootstrap.js +34 -15
  132. package/dist/bootstrap.js.map +1 -1
  133. package/dist/bundle.d.ts +4 -3
  134. package/dist/bundle.d.ts.map +1 -1
  135. package/dist/bundle.js +4 -3
  136. package/dist/bundle.js.map +1 -1
  137. package/dist/cli.d.ts.map +1 -1
  138. package/dist/cli.js +5 -0
  139. package/dist/cli.js.map +1 -1
  140. package/dist/commands/init.d.ts +1 -1
  141. package/dist/commands/init.d.ts.map +1 -1
  142. package/dist/commands/init.js +40 -9
  143. package/dist/commands/init.js.map +1 -1
  144. package/dist/commands/module.d.ts.map +1 -1
  145. package/dist/commands/module.js +17 -1
  146. package/dist/commands/module.js.map +1 -1
  147. package/dist/commands/pack.d.ts.map +1 -1
  148. package/dist/commands/pack.js +13 -4
  149. package/dist/commands/pack.js.map +1 -1
  150. package/dist/doctor.d.ts +22 -0
  151. package/dist/doctor.d.ts.map +1 -1
  152. package/dist/doctor.js +112 -8
  153. package/dist/doctor.js.map +1 -1
  154. package/dist/index.d.ts +3 -3
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +2 -2
  157. package/dist/index.js.map +1 -1
  158. package/dist/module/read.d.ts +20 -7
  159. package/dist/module/read.d.ts.map +1 -1
  160. package/dist/module/read.js +41 -14
  161. package/dist/module/read.js.map +1 -1
  162. package/dist/pack/compile.d.ts +23 -7
  163. package/dist/pack/compile.d.ts.map +1 -1
  164. package/dist/pack/compile.js +60 -27
  165. package/dist/pack/compile.js.map +1 -1
  166. package/dist/pack/corporate-tax.d.ts +164 -0
  167. package/dist/pack/corporate-tax.d.ts.map +1 -0
  168. package/dist/pack/corporate-tax.js +517 -0
  169. package/dist/pack/corporate-tax.js.map +1 -0
  170. package/dist/pack/describe.d.ts +9 -4
  171. package/dist/pack/describe.d.ts.map +1 -1
  172. package/dist/pack/describe.js +5 -3
  173. package/dist/pack/describe.js.map +1 -1
  174. package/dist/pack/read.d.ts +27 -11
  175. package/dist/pack/read.d.ts.map +1 -1
  176. package/dist/pack/read.js +112 -33
  177. package/dist/pack/read.js.map +1 -1
  178. package/dist/pack/territories.d.ts +1 -1
  179. package/dist/pack/territories.js +0 -0
  180. package/dist/pack/vat-codes.d.ts +18 -18
  181. package/dist/pack/vat-codes.js +24 -24
  182. package/dist/pack/vat-codes.js.map +1 -1
  183. package/dist/schema.d.ts +1 -1
  184. package/dist/schema.d.ts.map +1 -1
  185. package/dist/schema.js +1 -1
  186. package/dist/schema.js.map +1 -1
  187. package/dist/sql.d.ts.map +1 -1
  188. package/dist/sql.js +3 -1
  189. package/dist/sql.js.map +1 -1
  190. package/package.json +3 -3
  191. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260913081447_assets.sql +0 -0
  192. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260913104234_foreign_key_indexes.sql +0 -0
  193. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260913104500_assets_capabilities.sql +0 -0
  194. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260914122100_assets_round_at_the_currency.sql +0 -0
  195. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260914145012_assets_accounts_in_use.sql +0 -0
  196. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260914151530_assets_grants_its_own_rights.sql +0 -0
  197. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260918113912_assets_client_reads.sql +0 -0
  198. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260918150801_assets_leave_with_the_company.sql +0 -0
  199. /package/dist/assets/modules/{assets → fixed-assets}/supabase/migrations/20260922162600_assets_reference_for_a_known_caller.sql +0 -0
package/README.md CHANGED
@@ -60,7 +60,7 @@ either.
60
60
  It asks for the connection string, the country, the chart of accounts and
61
61
  the language where the pack offers a choice, your organisation, the
62
62
  currency, the first company, the address of the first administrator and —
63
- optionally — the IBAN of your main bank account, then does the rest. Five
63
+ optionally — the identifier of your main bank account (an IBAN, a routing number and an account number, a sort code… whatever your country's banks use), then does the rest. Five
64
64
  to ten seconds on a free project. Nothing is preselected for you on the
65
65
  three questions whose wrong answer is expensive: the country, the chart and
66
66
  the language.
@@ -90,7 +90,7 @@ npx -y ekwo-os@latest init \
90
90
  --admin-email "you@example.com" \
91
91
  --admin-password "a-long-password" \
92
92
  --fiscal-year 2026 \
93
- --iban "BE71096123456769" \
93
+ --bank-identifier "BE71096123456769" \
94
94
  --yes
95
95
  ```
96
96
 
@@ -151,7 +151,7 @@ first administrator, `init_instance()` and `claim_instance_admin()`, and
151
151
  nothing else. The instance row records no country. A flag that only describes
152
152
  a company — `--country`, `--company`, `--chart`, `--language`, `--currency`,
153
153
  `--fiscal-year`, `--fiscal-year-start`, `--vat-period`, `--filing-period`,
154
- `--iban`, `--bic`, `--bank-name` — is refused with it, exit code 2, before the
154
+ `--bank-identifier` (and its old spelling `--iban`), `--bic`, `--bank-name` — is refused with it, exit code 2, before the
155
155
  database is touched: it would describe nothing.
156
156
 
157
157
  **`ekwo company new` is `create_company()`**, the function the `create_company`
@@ -274,7 +274,7 @@ and read by a person.
274
274
  | 1 | Applies `supabase/migrations/*.sql` in order | Recorded in `supabase_migrations.schema_migrations`, the Supabase CLI's own history table, so `supabase db push` and `ekwo migrate` stay interchangeable |
275
275
  | 2 | Applies every reference seed of `supabase/seed/`, in file-name order: `00_currencies.sql`, `00_territories.sql`, `05_framework_generic.sql`, then one `<n>_pack_<cc>.sql` per country pack, in the order of the number each pack declares | The currencies, the territories the tax rules name, the country-less financial statements every chart falls back on, and every country pack of the release — so a company in any of them can be created later without installing anything. They are exactly the seeds `supabase/config.toml` lists (a list `ekwo pack build` writes from `packs/`), so `supabase db push` installs the same set; a test compares both paths row by row. `90_demo_company.sql` is sample data and is never applied here |
276
276
  | 3 | Creates the first administrator through the Supabase Auth admin API | See below: a database connection cannot be a signed-in user |
277
- | 4 | `init_instance()`, `claim_instance_admin()`, the company, `company_members` as owner, `install_country_template()`, the first financial year, and the bank account when an IBAN was given | The six steps of the root README, in the same order, plus the one thing nobody can derive |
277
+ | 4 | `init_instance()`, `claim_instance_admin()`, the company, `company_members` as owner, `install_country_template()`, the first financial year, and the bank account when an identifier was given | The six steps of the root README, in the same order, plus the one thing nobody can derive |
278
278
  | 5 | Writes `ekwo.json` | The installation: project URL and schema version. Nothing else, ever — no country, since each company carries its own. A file written by 0.6 or earlier also names a country; it is still read, and the key is taken for nothing |
279
279
  | 6 | Asks whether to register with Ekwo | The default answer is no, and no is a supported answer forever |
280
280
 
@@ -671,13 +671,15 @@ for a statement. [`docs/import.md`](../../docs/import.md) is the long form.
671
671
 
672
672
  ## `ekwo module`
673
673
 
674
- A module is a Postgres schema beside the socle — `assets` for fixed assets,
675
- `budgets` for a plan against the ledger. Its migrations travel with this
676
- package, and `ekwo migrate` applies them by default.
674
+ A module is a Postgres schema beside the socle — `fixed_assets` for fixed assets,
675
+ `budgets` for a plan against the ledger, `tax` for the corporate income tax
676
+ estimated from the books. Its migrations travel with this package, and
677
+ `ekwo migrate` applies them by default.
677
678
 
678
679
  ```sh
679
680
  ekwo module list # what this release carries, and what the database holds
680
681
  ekwo module migrate [<code>] # the migrations, and the country seeds they need
682
+ # (the code, `assets`, or the folder, `fixed-assets`)
681
683
  ekwo module enable assets --company "…" # turn it on for one company
682
684
  ekwo module disable assets --company "…" # turn it off; nothing it wrote is deleted
683
685
  ```
@@ -693,6 +695,14 @@ schemas. That is a setting of the API, not of the database, so `ekwo module
693
695
  enable` prints the line to add — Supabase dashboard → Project Settings → API,
694
696
  or `[api] schemas` in `supabase/config.toml`.
695
697
 
698
+ **When a release renames a module's schema**, `ekwo migrate` applies the
699
+ rename and says so: the exposed schemas of the project still name the old one,
700
+ and only the operator can change that. The fixed assets module moved from
701
+ `assets` to `fixed_assets` in its version 2.0.0 — replace one with the other in
702
+ Project Settings → API. Its code, `assets`, is what `ekwo module` takes, and
703
+ never changes; [`modules/fixed-assets/README.md`](../../modules/fixed-assets/README.md#upgrading-from-version-1-of-the-module)
704
+ is the whole upgrade.
705
+
696
706
  **Before `supabase db push`**, run `ekwo migrate --no-modules`. The Supabase
697
707
  CLI knows the socle's migration files and not a module's, so it would report
698
708
  them as history it has no file for.
@@ -819,7 +829,8 @@ statements, the sentences the country requires on an invoice, the translations,
819
829
  and a year of books with the figures it produces. The compiler turns one into
820
830
  `supabase/seed/<n>_pack_<cc>.sql`, which is committed — and, where a pack
821
831
  carries a section for a module, into
822
- `supabase/seed/modules/<code>/<n>_pack_<cc>.sql`, applied by the module
832
+ `supabase/seed/modules/<section>/<n>_pack_<cc>.sql` — `fixed_assets` for the
833
+ fixed assets module — applied by the module
823
834
  migration runner and by nothing else.
824
835
 
825
836
  ```sh
@@ -920,8 +931,8 @@ dashboard under Connect → Session pooler, is the form that is never derived.
920
931
  | `--fiscal-year-start <date>` | The day that year opens, as `YYYY-MM-DD`. Needed only where the pack names no usual opening month (`defaults.fiscal_year_default`). |
921
932
  | `--currency <code>` | Currency of the company. Defaults to the pack's `defaults.currency`. |
922
933
  | `--language <xx>` | Language of the books, two letters. Defaults to `country_defaults.language_default`, which the pack fills. It decides which label of the pack lands on each account; the others are kept in `name_i18n`. |
923
- | `--iban <iban>` | Creates the main bank account, wired to the bank journal and its ledger account. Omitted, no bank account is created and `ekwo doctor` says so. |
924
- | `--bic <bic>` | Optional, on that account. |
934
+ | `--bank-identifier <value>` | Creates the main bank account, wired to the bank journal and its ledger account. What it is written in is the country's: an IBAN, an ABA routing number and an account number (`"021000021 123456789"`), a sort code and an account number, a BSB, an IFSC, a CLABE… `ekwo pack describe <cc>` names it, and it is checked. A country whose pack declares none is asked for an account number as the bank wrote it. `--iban` is the old spelling and is refused where the banks do not use IBANs. Omitted, no bank account is created and `ekwo doctor` says so. |
935
+ | `--bic <bic>` | Optional, on that account, for a bank that has one. |
925
936
  | `--bank-name <name>` | Optional. It also names the account in the books. |
926
937
  | `--demo` | Also load the sample company. |
927
938
  | `--register` | Register without being asked. `--register-email` sets the address. |
@@ -1065,7 +1076,7 @@ node packages/cli/dist/bin.js init \
1065
1076
  --country BE --chart default --language fr \
1066
1077
  --org "Scratch" --company "Scratch BV" \
1067
1078
  --admin-email "you@example.com" --admin-password "a-long-password" \
1068
- --fiscal-year 2026 --iban "BE71096123456769" --yes
1079
+ --fiscal-year 2026 --bank-identifier "BE71096123456769" --yes
1069
1080
 
1070
1081
  # 2. Everything should be green, and nothing pending.
1071
1082
  node packages/cli/dist/bin.js status --db-url "$URL"