ekwo-os 0.4.1
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.
- package/README.md +873 -0
- package/dist/args.d.ts +57 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +134 -0
- package/dist/args.js.map +1 -0
- package/dist/assets/expected-objects.json +9432 -0
- package/dist/assets/migrations/20260911120000_core_companies.sql +260 -0
- package/dist/assets/migrations/20260911120100_accounts_journals.sql +211 -0
- package/dist/assets/migrations/20260911120200_contacts.sql +90 -0
- package/dist/assets/migrations/20260911120300_taxes.sql +146 -0
- package/dist/assets/migrations/20260911120400_entries.sql +338 -0
- package/dist/assets/migrations/20260911120500_documents.sql +279 -0
- package/dist/assets/migrations/20260911120600_payments_reconciliation.sql +251 -0
- package/dist/assets/migrations/20260911120700_bank.sql +178 -0
- package/dist/assets/migrations/20260911120800_analytics_attachments.sql +128 -0
- package/dist/assets/migrations/20260911120900_post_document.sql +279 -0
- package/dist/assets/migrations/20260911121000_reporting.sql +235 -0
- package/dist/assets/migrations/20260911121100_country_templates.sql +226 -0
- package/dist/assets/migrations/20260911121200_fec.sql +71 -0
- package/dist/assets/migrations/20260911130000_instance.sql +77 -0
- package/dist/assets/migrations/20260911130100_instance_members.sql +224 -0
- package/dist/assets/migrations/20260911140000_instance_admins.sql +112 -0
- package/dist/assets/migrations/20260911160000_tax_posting_templates_unique.sql +17 -0
- package/dist/assets/migrations/20260911170000_document_amount_paid.sql +82 -0
- package/dist/assets/migrations/20260911173000_post_payment.sql +122 -0
- package/dist/assets/migrations/20260911173100_sequence_counters_under_rls.sql +84 -0
- package/dist/assets/migrations/20260911183000_country_journal_defaults.sql +143 -0
- package/dist/assets/migrations/20260911193853_line_account_defaults.sql +274 -0
- package/dist/assets/migrations/20260911195054_products.sql +221 -0
- package/dist/assets/migrations/20260911210131_anon_surface.sql +85 -0
- package/dist/assets/migrations/20260912074712_country_packs.sql +318 -0
- package/dist/assets/migrations/20260912080311_report_code_and_region.sql +198 -0
- package/dist/assets/migrations/20260912081014_pack_certification_maintained.sql +31 -0
- package/dist/assets/migrations/20260912081015_pack_certification_backfill.sql +16 -0
- package/dist/assets/migrations/20260912090407_tax_report_boxes.sql +329 -0
- package/dist/assets/migrations/20260912091917_tax_on_base_value.sql +25 -0
- package/dist/assets/migrations/20260912091918_tax_engine_columns.sql +776 -0
- package/dist/assets/migrations/20260912094412_opening_and_closing.sql +759 -0
- package/dist/assets/migrations/20260912095825_charts_of_accounts.sql +326 -0
- package/dist/assets/migrations/20260912100412_financial_statements.sql +632 -0
- package/dist/assets/migrations/20260912104719_one_formula_evaluator.sql +209 -0
- package/dist/assets/migrations/20260912105720_entry_kind_appropriation.sql +26 -0
- package/dist/assets/migrations/20260912105721_appropriation_entry_kind.sql +444 -0
- package/dist/assets/migrations/20260912111751_document_rules.sql +274 -0
- package/dist/assets/migrations/20260912112132_cash_basis_vat_and_fx.sql +1189 -0
- package/dist/assets/migrations/20260913074512_modules.sql +493 -0
- package/dist/assets/migrations/20260913075903_asset_disposal_roles.sql +47 -0
- package/dist/assets/migrations/20260913083216_capabilities.sql +637 -0
- package/dist/assets/migrations/20260913083901_company_invitations.sql +262 -0
- package/dist/assets/migrations/20260913084402_user_preferences.sql +376 -0
- package/dist/assets/migrations/20260913084847_company_profile.sql +261 -0
- package/dist/assets/migrations/20260913085436_numbering_reads_the_pack.sql +235 -0
- package/dist/assets/migrations/20260913085932_api_keys.sql +303 -0
- package/dist/assets/migrations/20260913090216_fiscal_year_bounds.sql +159 -0
- package/dist/assets/migrations/20260913092527_entries_import.sql +219 -0
- package/dist/assets/migrations/20260913101536_null_safe_guards.sql +188 -0
- package/dist/assets/migrations/20260913102115_installer_is_named.sql +462 -0
- package/dist/assets/migrations/20260913102758_no_currency_default.sql +138 -0
- package/dist/assets/migrations/20260913103355_cash_basis_needs_a_box.sql +453 -0
- package/dist/assets/migrations/20260913104014_aged_balance_named_group.sql +79 -0
- package/dist/assets/migrations/20260913104232_foreign_key_indexes.sql +144 -0
- package/dist/assets/migrations/20260913105120_declared_no_reader.sql +41 -0
- package/dist/assets/migrations/20260913111407_pack_languages.sql +223 -0
- package/dist/assets/migrations/20260913112233_schema_comments_for_a_reader.sql +27 -0
- package/dist/assets/migrations/20260913114535_fec_opening_balances.sql +307 -0
- package/dist/assets/migrations/20260914103412_audit_log.sql +509 -0
- package/dist/assets/migrations/20260914111907_pack_upgrade.sql +428 -0
- package/dist/assets/migrations/20260914120500_rounding_reads_the_currency.sql +206 -0
- package/dist/assets/migrations/20260914121200_amounts_round_at_the_currency.sql +2403 -0
- package/dist/assets/migrations/20260914134325_schema_version_0_2_0.sql +36 -0
- package/dist/assets/migrations/20260914143915_accounts_in_use.sql +428 -0
- package/dist/assets/migrations/20260914144731_account_code_frozen.sql +99 -0
- package/dist/assets/migrations/20260914151207_schema_grants_its_own_rights.sql +284 -0
- package/dist/assets/migrations/20260914152840_pack_upgrade_records_its_own_line.sql +237 -0
- package/dist/assets/migrations/20260914163943_declaration_periodicity.sql +349 -0
- package/dist/assets/migrations/20260915094000_foreign_services_received.sql +37 -0
- package/dist/assets/migrations/20260915094500_mentions_read_a_foreign_service.sql +72 -0
- package/dist/assets/migrations/20260915153000_document_shares.sql +568 -0
- package/dist/assets/migrations/20260915160000_ec_sales_list.sql +181 -0
- package/dist/assets/migrations/20260915161842_pack_sources.sql +56 -0
- package/dist/assets/migrations/20260915170500_schema_version_0_3_0.sql +45 -0
- package/dist/assets/migrations/20260915174500_a_vat_category_is_a_code.sql +177 -0
- package/dist/assets/migrations/20260915180000_document_rule_references.sql +85 -0
- package/dist/assets/migrations/20260915181000_territories.sql +342 -0
- package/dist/assets/migrations/20260915181500_ec_sales_list_reads_the_territories.sql +222 -0
- package/dist/assets/migrations/20260915182000_intracom_triangular.sql +53 -0
- package/dist/assets/migrations/20260915182500_a_triangular_supply_says_reverse_charge.sql +99 -0
- package/dist/assets/migrations/20260915191200_a_document_knows_its_language.sql +633 -0
- package/dist/assets/migrations/20260915195000_a_price_that_holds_its_tax.sql +649 -0
- package/dist/assets/migrations/20260915200000_a_posting_names_its_boxes.sql +1004 -0
- package/dist/assets/migrations/20260916094500_a_company_files_more_than_one_declaration.sql +795 -0
- package/dist/assets/migrations/20260916103000_a_ledger_line_names_its_posting.sql +902 -0
- package/dist/assets/migrations/20260916123000_a_vocabulary_for_a_tax_that_is_not_a_vat.sql +144 -0
- package/dist/assets/migrations/20260916124000_a_box_can_be_a_rate_of_a_box.sql +525 -0
- package/dist/assets/migrations/20260916125000_a_tax_follows_the_territory.sql +1318 -0
- package/dist/assets/migrations/20260916126000_a_tax_point_and_its_exception.sql +1211 -0
- package/dist/assets/migrations/20260917090000_a_counterparty_that_learns.sql +561 -0
- package/dist/assets/migrations/20260917120000_what_the_money_pays.sql +545 -0
- package/dist/assets/migrations/20260917150000_a_filing_is_a_row.sql +488 -0
- package/dist/assets/migrations/20260917170000_when_it_is_due.sql +194 -0
- package/dist/assets/migrations/20260917180000_a_box_is_a_number_and_a_kind.sql +213 -0
- package/dist/assets/migrations/20260917190000_what_a_declaration_owes.sql +486 -0
- package/dist/assets/migrations/20260917200000_what_moved_after_it_went.sql +227 -0
- package/dist/assets/migrations/20260918090000_a_form_names_its_file.sql +27 -0
- package/dist/assets/migrations/20260918110000_a_deposit_and_what_came_back.sql +286 -0
- package/dist/assets/migrations/20260918113741_a_fourth_preset_is_named.sql +9 -0
- package/dist/assets/migrations/20260918113807_a_client_reads_and_hands_over.sql +96 -0
- package/dist/assets/migrations/20260918114322_two_definer_functions_check_their_caller.sql +75 -0
- package/dist/assets/migrations/20260918130000_every_company_somebody_keeps.sql +177 -0
- package/dist/assets/migrations/20260918140000_a_session_nobody_prepared.sql +40 -0
- package/dist/assets/migrations/20260918141107_a_line_keeps_the_tax_it_was_posted_with.sql +256 -0
- package/dist/assets/migrations/20260918141342_a_company_has_an_electronic_address.sql +66 -0
- package/dist/assets/migrations/20260918141605_an_invoice_reads_whole_from_the_views.sql +313 -0
- package/dist/assets/migrations/20260918141627_a_policy_asks_once.sql +132 -0
- package/dist/assets/migrations/20260918143352_a_suggestion_reads_the_words_once.sql +204 -0
- package/dist/assets/migrations/20260918143417_a_reference_of_the_caller_and_a_rehearsal.sql +115 -0
- package/dist/assets/migrations/20260918150712_a_company_leaves_with_its_books.sql +1119 -0
- package/dist/assets/migrations/20260918150931_a_statement_is_imported_once.sql +654 -0
- package/dist/assets/migrations/20260918161204_a_posted_document_does_not_move.sql +437 -0
- package/dist/assets/migrations/20260918161538_a_posted_entry_does_not_move.sql +252 -0
- package/dist/assets/migrations/20260918171946_an_entry_is_posted_by_post_entry.sql +289 -0
- package/dist/assets/migrations/20260918174312_schema_version_0_4_0.sql +53 -0
- package/dist/assets/modules/assets/module.json +13 -0
- package/dist/assets/modules/assets/supabase/migrations/20260913081447_assets.sql +1190 -0
- package/dist/assets/modules/assets/supabase/migrations/20260913104234_foreign_key_indexes.sql +47 -0
- package/dist/assets/modules/assets/supabase/migrations/20260913104500_assets_capabilities.sql +145 -0
- package/dist/assets/modules/assets/supabase/migrations/20260914122100_assets_round_at_the_currency.sql +564 -0
- package/dist/assets/modules/assets/supabase/migrations/20260914145012_assets_accounts_in_use.sql +37 -0
- package/dist/assets/modules/assets/supabase/migrations/20260914151530_assets_grants_its_own_rights.sql +63 -0
- package/dist/assets/modules/assets/supabase/migrations/20260918113912_assets_client_reads.sql +20 -0
- package/dist/assets/modules/assets/supabase/migrations/20260918150801_assets_leave_with_the_company.sql +41 -0
- package/dist/assets/modules/budgets/module.json +12 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260913083012_budgets.sql +210 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260913104233_foreign_key_indexes.sql +37 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260913104501_budgets_capabilities.sql +72 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260914122400_budgets_round_at_the_currency.sql +68 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260914145048_budgets_accounts_in_use.sql +30 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260914151812_budgets_grants_its_own_rights.sql +31 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260918113954_budgets_client_reads.sql +20 -0
- package/dist/assets/modules/budgets/supabase/migrations/20260918150823_budgets_leave_with_the_company.sql +37 -0
- package/dist/assets/modules/schema/module.1.json +69 -0
- package/dist/assets/seed/00_currencies.sql +15 -0
- package/dist/assets/seed/00_territories.sql +280 -0
- package/dist/assets/seed/05_framework_generic.sql +110 -0
- package/dist/assets/seed/10_pack_be.sql +1284 -0
- package/dist/assets/seed/11_pack_fr.sql +1112 -0
- package/dist/assets/seed/12_pack_lu.sql +2484 -0
- package/dist/assets/seed/13_pack_ee.sql +733 -0
- package/dist/assets/seed/14_pack_gb.sql +796 -0
- package/dist/assets/seed/15_pack_us.sql +751 -0
- package/dist/assets/seed/90_demo_company.sql +368 -0
- package/dist/assets/seed/modules/assets/10_pack_be.sql +58 -0
- package/dist/assets/seed/modules/assets/11_pack_fr.sql +57 -0
- package/dist/assets/seed/modules/assets/14_pack_gb.sql +58 -0
- package/dist/assets/seed/modules/assets/15_pack_us.sql +60 -0
- package/dist/auth.d.ts +59 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +134 -0
- package/dist/auth.js.map +1 -0
- package/dist/bin.d.ts +6 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +8 -0
- package/dist/bin.js.map +1 -0
- package/dist/books.d.ts +60 -0
- package/dist/books.d.ts.map +1 -0
- package/dist/books.js +168 -0
- package/dist/books.js.map +1 -0
- package/dist/bootstrap.d.ts +236 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +459 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/bundle.d.ts +27 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +47 -0
- package/dist/bundle.js.map +1 -0
- package/dist/checklist.d.ts +35 -0
- package/dist/checklist.d.ts.map +1 -0
- package/dist/checklist.js +64 -0
- package/dist/checklist.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +318 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/company.d.ts +59 -0
- package/dist/commands/company.d.ts.map +1 -0
- package/dist/commands/company.js +287 -0
- package/dist/commands/company.js.map +1 -0
- package/dist/commands/contact.d.ts +9 -0
- package/dist/commands/contact.d.ts.map +1 -0
- package/dist/commands/contact.js +82 -0
- package/dist/commands/contact.js.map +1 -0
- package/dist/commands/demo.d.ts +19 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +72 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +68 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/document.d.ts +17 -0
- package/dist/commands/document.d.ts.map +1 -0
- package/dist/commands/document.js +217 -0
- package/dist/commands/document.js.map +1 -0
- package/dist/commands/init.d.ts +31 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +535 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +24 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +128 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/migrate.d.ts +30 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +115 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/module.d.ts +32 -0
- package/dist/commands/module.d.ts.map +1 -0
- package/dist/commands/module.js +285 -0
- package/dist/commands/module.js.map +1 -0
- package/dist/commands/pack.d.ts +22 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +481 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/payment.d.ts +15 -0
- package/dist/commands/payment.d.ts.map +1 -0
- package/dist/commands/payment.js +97 -0
- package/dist/commands/payment.js.map +1 -0
- package/dist/commands/register.d.ts +20 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +134 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +134 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/whoami.d.ts +21 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +133 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/company.d.ts +16 -0
- package/dist/company.d.ts.map +1 -0
- package/dist/company.js +26 -0
- package/dist/company.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +50 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +79 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +116 -0
- package/dist/connection.js.map +1 -0
- package/dist/context.d.ts +47 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +93 -0
- package/dist/context.js.map +1 -0
- package/dist/doctor.d.ts +45 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +448 -0
- package/dist/doctor.js.map +1 -0
- package/dist/grants.d.ts +88 -0
- package/dist/grants.d.ts.map +1 -0
- package/dist/grants.js +174 -0
- package/dist/grants.js.map +1 -0
- package/dist/identity.d.ts +54 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +132 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/inventory.d.ts +155 -0
- package/dist/inventory.d.ts.map +1 -0
- package/dist/inventory.js +303 -0
- package/dist/inventory.js.map +1 -0
- package/dist/migrations.d.ts +76 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +226 -0
- package/dist/migrations.js.map +1 -0
- package/dist/module/read.d.ts +91 -0
- package/dist/module/read.d.ts.map +1 -0
- package/dist/module/read.js +172 -0
- package/dist/module/read.js.map +1 -0
- package/dist/output.d.ts +110 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +173 -0
- package/dist/output.js.map +1 -0
- package/dist/pack/certification.d.ts +27 -0
- package/dist/pack/certification.d.ts.map +1 -0
- package/dist/pack/certification.js +38 -0
- package/dist/pack/certification.js.map +1 -0
- package/dist/pack/compile.d.ts +75 -0
- package/dist/pack/compile.d.ts.map +1 -0
- package/dist/pack/compile.js +801 -0
- package/dist/pack/compile.js.map +1 -0
- package/dist/pack/filing.d.ts +48 -0
- package/dist/pack/filing.d.ts.map +1 -0
- package/dist/pack/filing.js +56 -0
- package/dist/pack/filing.js.map +1 -0
- package/dist/pack/read.d.ts +766 -0
- package/dist/pack/read.d.ts.map +1 -0
- package/dist/pack/read.js +2336 -0
- package/dist/pack/read.js.map +1 -0
- package/dist/pack/schema.d.ts +26 -0
- package/dist/pack/schema.d.ts.map +1 -0
- package/dist/pack/schema.js +181 -0
- package/dist/pack/schema.js.map +1 -0
- package/dist/pack/territories.d.ts +98 -0
- package/dist/pack/territories.d.ts.map +1 -0
- package/dist/pack/territories.js +0 -0
- package/dist/pack/territories.js.map +1 -0
- package/dist/pack/upgrade.d.ts +86 -0
- package/dist/pack/upgrade.d.ts.map +1 -0
- package/dist/pack/upgrade.js +76 -0
- package/dist/pack/upgrade.js.map +1 -0
- package/dist/pack/vat-codes.d.ts +273 -0
- package/dist/pack/vat-codes.d.ts.map +1 -0
- package/dist/pack/vat-codes.js +513 -0
- package/dist/pack/vat-codes.js.map +1 -0
- package/dist/profiles.d.ts +67 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +187 -0
- package/dist/profiles.js.map +1 -0
- package/dist/prompt.d.ts +40 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +120 -0
- package/dist/prompt.js.map +1 -0
- package/dist/registry.d.ts +84 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +104 -0
- package/dist/registry.js.map +1 -0
- package/dist/rest.d.ts +81 -0
- package/dist/rest.d.ts.map +1 -0
- package/dist/rest.js +245 -0
- package/dist/rest.js.map +1 -0
- package/dist/schema.d.ts +15 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +15 -0
- package/dist/schema.js.map +1 -0
- package/dist/seeds.d.ts +27 -0
- package/dist/seeds.d.ts.map +1 -0
- package/dist/seeds.js +47 -0
- package/dist/seeds.js.map +1 -0
- package/dist/session.d.ts +39 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +92 -0
- package/dist/session.js.map +1 -0
- package/dist/sql.d.ts +48 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +112 -0
- package/dist/sql.js.map +1 -0
- package/dist/status.d.ts +94 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +120 -0
- package/dist/status.js.map +1 -0
- package/dist/ui.d.ts +55 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +114 -0
- package/dist/ui.js.map +1 -0
- package/package.json +29 -0
- package/schema/output.1.json +613 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
-- Ekwo OS — a box is a number *and* a kind.
|
|
2
|
+
--
|
|
3
|
+
-- `tax_filing_boxes` was keyed on (filing, box), and that key is wrong. A box
|
|
4
|
+
-- number does not identify a figure on every form: the French CA3 prints the
|
|
5
|
+
-- base and the tax of the same rate on one line, which is why `vat_return()`
|
|
6
|
+
-- has answered with a `kind` beside every box since the day it was written,
|
|
7
|
+
-- and why `report_arithmetic` can name `08|base` and `08|tax` apart.
|
|
8
|
+
--
|
|
9
|
+
-- Freezing that return into a table keyed on the box alone loses the
|
|
10
|
+
-- distinction, and it does not lose it quietly: the second row of the same
|
|
11
|
+
-- line collides, and preparing a French declaration fails on a unique
|
|
12
|
+
-- constraint. A Belgian one does not, because that form prints the two on
|
|
13
|
+
-- separate lines — which is exactly how a key that is right in one country and
|
|
14
|
+
-- wrong in the next gets written in the first place.
|
|
15
|
+
--
|
|
16
|
+
-- Found by the test that settles a declaration in the pack that names the
|
|
17
|
+
-- account for it, three days after the table landed. Kept here as the third
|
|
18
|
+
-- incident this schema carries: **a figure of a declaration is identified by
|
|
19
|
+
-- the box and by what the box is holding.**
|
|
20
|
+
|
|
21
|
+
-- The kind, as the return already gives it: `base`, `tax`, or `total` for a
|
|
22
|
+
-- figure the form computes from others.
|
|
23
|
+
alter table tax_filing_boxes
|
|
24
|
+
add column if not exists kind text not null default 'tax';
|
|
25
|
+
|
|
26
|
+
-- What was already frozen, where the form itself answers. A box that exists
|
|
27
|
+
-- under one kind only on the form it belongs to is that kind, whatever the
|
|
28
|
+
-- default above put there; a box that exists under two could not have been
|
|
29
|
+
-- stored twice under the old key, so there is nothing ambiguous left to fix.
|
|
30
|
+
update tax_filing_boxes b
|
|
31
|
+
set kind = t.kind
|
|
32
|
+
from tax_filings f
|
|
33
|
+
join tax_report_templates r on r.code = f.report_code
|
|
34
|
+
join tax_report_box_templates t
|
|
35
|
+
on t.country = r.country and t.report_code = r.code
|
|
36
|
+
where b.filing_id = f.id
|
|
37
|
+
and t.box = b.box
|
|
38
|
+
and not exists (
|
|
39
|
+
select 1 from tax_report_box_templates o
|
|
40
|
+
where o.country = t.country and o.report_code = t.report_code
|
|
41
|
+
and o.box = t.box and o.kind <> t.kind
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
alter table tax_filing_boxes drop constraint tax_filing_boxes_pkey;
|
|
45
|
+
alter table tax_filing_boxes add primary key (filing_id, box, kind);
|
|
46
|
+
|
|
47
|
+
alter table tax_filing_boxes
|
|
48
|
+
add constraint tax_filing_boxes_kind check (kind in ('base', 'tax', 'total'));
|
|
49
|
+
|
|
50
|
+
comment on column tax_filing_boxes.kind is
|
|
51
|
+
'What this figure is on the form: the base of a rate, the tax on it, or a total the form computes. Part of the key, because a form is free to print a base and a tax on the same line and two of them have to be able to sit there.';
|
|
52
|
+
|
|
53
|
+
-- ---------------------------------------------------------------------------
|
|
54
|
+
-- The three functions that read or write those rows
|
|
55
|
+
-- ---------------------------------------------------------------------------
|
|
56
|
+
|
|
57
|
+
create or replace function prepare_filing(
|
|
58
|
+
p_company_id uuid,
|
|
59
|
+
p_from date,
|
|
60
|
+
p_to date,
|
|
61
|
+
p_report_code text default null
|
|
62
|
+
)
|
|
63
|
+
returns tax_filings
|
|
64
|
+
language plpgsql
|
|
65
|
+
volatile
|
|
66
|
+
security invoker
|
|
67
|
+
as $$
|
|
68
|
+
declare
|
|
69
|
+
v_code text;
|
|
70
|
+
v_filing tax_filings;
|
|
71
|
+
begin
|
|
72
|
+
v_code := coalesce(p_report_code, periodic_return_code(p_company_id));
|
|
73
|
+
if v_code is null then
|
|
74
|
+
raise exception 'no_report_code: the pack of this company names no periodic return, so say which form this is';
|
|
75
|
+
end if;
|
|
76
|
+
|
|
77
|
+
select * into v_filing
|
|
78
|
+
from tax_filings f
|
|
79
|
+
where f.company_id = p_company_id
|
|
80
|
+
and f.report_code = v_code
|
|
81
|
+
and f.period_start = p_from
|
|
82
|
+
and f.period_end = p_to
|
|
83
|
+
and f.state <> 'superseded';
|
|
84
|
+
|
|
85
|
+
if found and v_filing.state not in ('draft', 'ready') then
|
|
86
|
+
raise exception 'filing_already_% : % for % to % has gone; a change to it is a corrective',
|
|
87
|
+
v_filing.state, v_code, p_from, p_to;
|
|
88
|
+
end if;
|
|
89
|
+
|
|
90
|
+
if not found then
|
|
91
|
+
insert into tax_filings (company_id, report_code, period_start, period_end)
|
|
92
|
+
values (p_company_id, v_code, p_from, p_to)
|
|
93
|
+
returning * into v_filing;
|
|
94
|
+
else
|
|
95
|
+
update tax_filings set state = 'draft' where id = v_filing.id returning * into v_filing;
|
|
96
|
+
delete from tax_filing_boxes where filing_id = v_filing.id;
|
|
97
|
+
end if;
|
|
98
|
+
|
|
99
|
+
insert into tax_filing_boxes (filing_id, box, kind, amount)
|
|
100
|
+
select v_filing.id, r.box, r.kind, r.amount
|
|
101
|
+
from vat_return(p_company_id, p_from, p_to, v_code) r
|
|
102
|
+
where not r.hidden;
|
|
103
|
+
|
|
104
|
+
update tax_filings set prepared_at = now() where id = v_filing.id
|
|
105
|
+
returning * into v_filing;
|
|
106
|
+
|
|
107
|
+
return v_filing;
|
|
108
|
+
end;
|
|
109
|
+
$$;
|
|
110
|
+
|
|
111
|
+
comment on function prepare_filing(uuid, date, date, text) is
|
|
112
|
+
'Computes the declaration and keeps the answer, box by box and kind by kind. Called again on a draft it refreshes; on a declaration that has gone it refuses and says the word for what is needed instead — a corrective.';
|
|
113
|
+
|
|
114
|
+
revoke execute on function prepare_filing(uuid, date, date, text) from public, anon;
|
|
115
|
+
grant execute on function prepare_filing(uuid, date, date, text) to authenticated, service_role;
|
|
116
|
+
|
|
117
|
+
create or replace function supersede_filing(p_filing_id uuid)
|
|
118
|
+
returns tax_filings
|
|
119
|
+
language plpgsql
|
|
120
|
+
volatile
|
|
121
|
+
security invoker
|
|
122
|
+
as $$
|
|
123
|
+
declare
|
|
124
|
+
v_old tax_filings;
|
|
125
|
+
v_new tax_filings;
|
|
126
|
+
begin
|
|
127
|
+
select * into v_old from tax_filings f where f.id = p_filing_id;
|
|
128
|
+
if not found then
|
|
129
|
+
raise exception 'not_found: filing %', p_filing_id using errcode = 'no_data_found';
|
|
130
|
+
end if;
|
|
131
|
+
if v_old.state in ('draft', 'ready') then
|
|
132
|
+
raise exception 'filing_not_sent: a declaration that has not gone is corrected by preparing it again';
|
|
133
|
+
end if;
|
|
134
|
+
if v_old.state = 'superseded' then
|
|
135
|
+
raise exception 'filing_already_superseded: % was already replaced', p_filing_id;
|
|
136
|
+
end if;
|
|
137
|
+
|
|
138
|
+
update tax_filings set state = 'superseded' where id = p_filing_id;
|
|
139
|
+
|
|
140
|
+
insert into tax_filings (company_id, report_code, period_start, period_end,
|
|
141
|
+
due_date, supersedes_id)
|
|
142
|
+
values (v_old.company_id, v_old.report_code, v_old.period_start, v_old.period_end,
|
|
143
|
+
v_old.due_date, v_old.id)
|
|
144
|
+
returning * into v_new;
|
|
145
|
+
|
|
146
|
+
insert into tax_filing_boxes (filing_id, box, kind, amount)
|
|
147
|
+
select v_new.id, r.box, r.kind, r.amount
|
|
148
|
+
from vat_return(v_old.company_id, v_old.period_start, v_old.period_end, v_old.report_code) r
|
|
149
|
+
where not r.hidden;
|
|
150
|
+
|
|
151
|
+
update tax_filings set prepared_at = now() where id = v_new.id returning * into v_new;
|
|
152
|
+
|
|
153
|
+
return v_new;
|
|
154
|
+
end;
|
|
155
|
+
$$;
|
|
156
|
+
|
|
157
|
+
comment on function supersede_filing(uuid) is
|
|
158
|
+
'Opens a corrective: the declaration that went becomes superseded and a new draft is prepared from today''s ledger, pointing at it. What was sent stays as it was sent.';
|
|
159
|
+
|
|
160
|
+
revoke execute on function supersede_filing(uuid) from public, anon;
|
|
161
|
+
grant execute on function supersede_filing(uuid) to authenticated, service_role;
|
|
162
|
+
|
|
163
|
+
-- The drift is compared on the same key, and answers with it: a line saying
|
|
164
|
+
-- box 08 moved, on a form where 08 is a base and a tax, is half an answer.
|
|
165
|
+
drop function if exists filing_drift(uuid);
|
|
166
|
+
|
|
167
|
+
create or replace function filing_drift(p_filing_id uuid)
|
|
168
|
+
returns table (
|
|
169
|
+
box text,
|
|
170
|
+
kind text,
|
|
171
|
+
filed numeric,
|
|
172
|
+
ledger numeric,
|
|
173
|
+
difference numeric
|
|
174
|
+
)
|
|
175
|
+
language plpgsql
|
|
176
|
+
stable
|
|
177
|
+
security invoker
|
|
178
|
+
as $$
|
|
179
|
+
declare
|
|
180
|
+
v_filing tax_filings;
|
|
181
|
+
begin
|
|
182
|
+
select * into v_filing from tax_filings f where f.id = p_filing_id;
|
|
183
|
+
if not found then
|
|
184
|
+
raise exception 'not_found: filing %', p_filing_id using errcode = 'no_data_found';
|
|
185
|
+
end if;
|
|
186
|
+
|
|
187
|
+
return query
|
|
188
|
+
with today as (
|
|
189
|
+
select r.box, r.kind, r.amount
|
|
190
|
+
from vat_return(v_filing.company_id, v_filing.period_start, v_filing.period_end,
|
|
191
|
+
v_filing.report_code) r
|
|
192
|
+
where not r.hidden
|
|
193
|
+
),
|
|
194
|
+
filed as (
|
|
195
|
+
select b.box, b.kind, b.amount from tax_filing_boxes b where b.filing_id = p_filing_id
|
|
196
|
+
)
|
|
197
|
+
select coalesce(f.box, t.box),
|
|
198
|
+
coalesce(f.kind, t.kind),
|
|
199
|
+
coalesce(f.amount, 0),
|
|
200
|
+
coalesce(t.amount, 0),
|
|
201
|
+
coalesce(t.amount, 0) - coalesce(f.amount, 0)
|
|
202
|
+
from filed f
|
|
203
|
+
full outer join today t on t.box = f.box and t.kind = f.kind
|
|
204
|
+
where coalesce(t.amount, 0) <> coalesce(f.amount, 0)
|
|
205
|
+
order by 1, 2;
|
|
206
|
+
end;
|
|
207
|
+
$$;
|
|
208
|
+
|
|
209
|
+
comment on function filing_drift(uuid) is
|
|
210
|
+
'Box by box and kind by kind, what the ledger says now against what was filed, for the figures where the two disagree. Empty is the answer everybody wants; anything else is either a corrective to file or an entry in the wrong period.';
|
|
211
|
+
|
|
212
|
+
revoke execute on function filing_drift(uuid) from public, anon;
|
|
213
|
+
grant execute on function filing_drift(uuid) to authenticated, service_role;
|