@classytic/ledger-bd 0.5.0 → 0.5.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/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { AccountType } from "@classytic/ledger";
1
+ import { AccountResolverConfig, AccountType } from "@classytic/ledger";
2
2
 
3
3
  //#region src/accounts/assets.d.ts
4
4
  declare const CURRENT_ASSETS: AccountType[];
@@ -371,6 +371,9 @@ declare const BD_ACCOUNT_CODES: {
371
371
  type BDAccountCode = (typeof BD_ACCOUNT_CODES)[keyof typeof BD_ACCOUNT_CODES];
372
372
  type BDAccountKey = keyof typeof BD_ACCOUNT_CODES;
373
373
  //#endregion
374
+ //#region src/accounts/account-rules.d.ts
375
+ declare const BD_ACCOUNT_RULES: AccountResolverConfig;
376
+ //#endregion
374
377
  //#region src/accounts/index.d.ts
375
378
  /** Complete flat array of all BD account types + tax sub-accounts + group labels */
376
379
  declare const BD_ACCOUNT_TYPES: readonly AccountType[];
@@ -498,4 +501,4 @@ declare const ALL_DIVISIONS: ("Dhaka" | "Chittagong" | "Rajshahi" | "Khulna" | "
498
501
  */
499
502
  declare const bangladeshPack: import("@classytic/ledger").CountryPack;
500
503
  //#endregion
501
- export { ADMIN_EXPENSES, ALL_DIVISIONS, ALL_TAX_ACCOUNTS, ASSETS, BANKING_REVENUE, type BDAccountCode, type BDAccountKey, BD_ACCOUNT_CODES, BD_ACCOUNT_TYPES, BD_DIVISIONS, COGS, COST_OF_SERVICES, CURRENT_ASSETS, CURRENT_LIABILITIES, DEPRECIATION, DIRECT_LABOR, DIRECT_MATERIALS, DIVISIONS, EMPLOYEE_COSTS, EQUITY, EXPENSES, FINANCIAL_EXPENSES, INDUSTRY_REVENUE, LIABILITIES, MANUFACTURING_OVERHEAD, NGO_REVENUE, NON_CURRENT_ASSETS, NON_CURRENT_LIABILITIES, OTHER_INCOME, OTHER_OPERATING, PREMISES_COSTS, PROVISIONS, PURCHASES, REVENUE, SALES_REVENUE, SELLING_DISTRIBUTION, ALL_TAX_CODES as TAX_CODES, TAX_CODES_BY_DIVISION, TAX_EXPENSE, TAX_RECEIVABLE_ACCOUNTS, TDS_LIABILITY_ACCOUNTS, VAT_ASSET_ACCOUNTS, VAT_LIABILITY_ACCOUNTS, VDS_LIABILITY_ACCOUNTS, bangladeshPack, getTaxCodeDetails, mushakReturnTemplate };
504
+ export { ADMIN_EXPENSES, ALL_DIVISIONS, ALL_TAX_ACCOUNTS, ASSETS, BANKING_REVENUE, type BDAccountCode, type BDAccountKey, BD_ACCOUNT_CODES, BD_ACCOUNT_RULES, BD_ACCOUNT_TYPES, BD_DIVISIONS, COGS, COST_OF_SERVICES, CURRENT_ASSETS, CURRENT_LIABILITIES, DEPRECIATION, DIRECT_LABOR, DIRECT_MATERIALS, DIVISIONS, EMPLOYEE_COSTS, EQUITY, EXPENSES, FINANCIAL_EXPENSES, INDUSTRY_REVENUE, LIABILITIES, MANUFACTURING_OVERHEAD, NGO_REVENUE, NON_CURRENT_ASSETS, NON_CURRENT_LIABILITIES, OTHER_INCOME, OTHER_OPERATING, PREMISES_COSTS, PROVISIONS, PURCHASES, REVENUE, SALES_REVENUE, SELLING_DISTRIBUTION, ALL_TAX_CODES as TAX_CODES, TAX_CODES_BY_DIVISION, TAX_EXPENSE, TAX_RECEIVABLE_ACCOUNTS, TDS_LIABILITY_ACCOUNTS, VAT_ASSET_ACCOUNTS, VAT_LIABILITY_ACCOUNTS, VDS_LIABILITY_ACCOUNTS, bangladeshPack, getTaxCodeDetails, mushakReturnTemplate };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { defineCountryPack } from "@classytic/ledger";
1
+ import { ACCOUNT_PURPOSE, defineCountryPack } from "@classytic/ledger";
2
2
  //#region src/accounts/assets.ts
3
3
  const A$2 = "Balance Sheet-Asset";
4
4
  const CURRENT_ASSETS = [
@@ -6673,6 +6673,264 @@ const BD_ACCOUNT_CODES = {
6673
6673
  SHRINKAGE: "6711"
6674
6674
  };
6675
6675
  //#endregion
6676
+ //#region src/accounts/account-rules.ts
6677
+ /**
6678
+ * Bangladesh default account-resolution ruleset.
6679
+ *
6680
+ * Ships the "smart defaults" a BD deployment gets for free: which expense
6681
+ * account a bill line lands on from its description keywords or a picked
6682
+ * category, which cash/clearing account a payment method maps to, and which
6683
+ * inventory account a stock type uses. Consumed by `createAccountResolver`
6684
+ * (`@classytic/ledger`); the host layers DB-configured overrides on top with
6685
+ * `mergeAccountConfig`, and any line can still carry an explicit accountCode
6686
+ * that bypasses resolution entirely (the accountant escape hatch).
6687
+ *
6688
+ * These are DEFAULTS, not law — every rule is data a deployment can override
6689
+ * without a code change. The matcher is the primitives condition DSL, so a
6690
+ * keyword rule reads `keywords contains 'poster'`.
6691
+ *
6692
+ * Resolution CONTEXT the host is expected to pass (all optional):
6693
+ * - `keywords: string[]` — normalized tokens from the line description
6694
+ * - `category: string` — an explicit user-picked expense category
6695
+ * - `paymentMethod: string`— for the `cash` purpose (cash/card/bkash/bank…)
6696
+ * - `inventoryType: string`— for the `inventory` purpose
6697
+ */
6698
+ /**
6699
+ * An expense keyword rule: matches when the line's `keywords` array contains
6700
+ * ANY of `words`. Keyword rules sit at priority 10 — above category rules (5)
6701
+ * so a specific word ("poster") beats a broad category ("marketing").
6702
+ */
6703
+ function keywordExpense(id, words, use, label) {
6704
+ return {
6705
+ id,
6706
+ purpose: ACCOUNT_PURPOSE.EXPENSE,
6707
+ priority: 10,
6708
+ use,
6709
+ label,
6710
+ when: { any: words.map((w) => ({
6711
+ field: "keywords",
6712
+ op: "contains",
6713
+ value: w
6714
+ })) }
6715
+ };
6716
+ }
6717
+ /** A category rule: matches an explicit picked category (priority 5). */
6718
+ function categoryExpense(id, category, use, label) {
6719
+ return {
6720
+ id,
6721
+ purpose: ACCOUNT_PURPOSE.EXPENSE,
6722
+ priority: 5,
6723
+ use,
6724
+ label,
6725
+ when: {
6726
+ field: "category",
6727
+ op: "eq",
6728
+ value: category
6729
+ }
6730
+ };
6731
+ }
6732
+ const BD_ACCOUNT_RULES = {
6733
+ rules: [
6734
+ keywordExpense("bd-print", [
6735
+ "print",
6736
+ "printing",
6737
+ "poster",
6738
+ "card",
6739
+ "cards",
6740
+ "stationery",
6741
+ "flyer",
6742
+ "banner",
6743
+ "brochure",
6744
+ "invitation"
6745
+ ], "6301", "Printing & Stationery"),
6746
+ keywordExpense("bd-venue", [
6747
+ "hall",
6748
+ "venue",
6749
+ "event",
6750
+ "entertainment",
6751
+ "hospitality",
6752
+ "catering",
6753
+ "conference",
6754
+ "seminar",
6755
+ "reception"
6756
+ ], "6803", "Entertainment / Hospitality"),
6757
+ keywordExpense("bd-digital", [
6758
+ "facebook",
6759
+ "google",
6760
+ "seo",
6761
+ "digital",
6762
+ "social",
6763
+ "boost",
6764
+ "adwords",
6765
+ "meta"
6766
+ ], "6402", "Digital Marketing"),
6767
+ keywordExpense("bd-advert", [
6768
+ "advert",
6769
+ "advertisement",
6770
+ "publicity",
6771
+ "promo",
6772
+ "promotion",
6773
+ "campaign",
6774
+ "billboard",
6775
+ "signage"
6776
+ ], "6401", "Advertisement & Publicity"),
6777
+ keywordExpense("bd-rent", ["rent", "lease"], "6201", "Office Rent"),
6778
+ keywordExpense("bd-repair", [
6779
+ "repair",
6780
+ "maintenance",
6781
+ "servicing",
6782
+ "refurbish"
6783
+ ], "6207", "Office Repairs & Maintenance"),
6784
+ keywordExpense("bd-legal", [
6785
+ "legal",
6786
+ "lawyer",
6787
+ "professional",
6788
+ "consultant",
6789
+ "consulting",
6790
+ "audit",
6791
+ "accounting",
6792
+ "notary"
6793
+ ], "6309", "Legal Fee & Professional Charges"),
6794
+ keywordExpense("bd-travel", [
6795
+ "travel",
6796
+ "conveyance",
6797
+ "taxi",
6798
+ "uber",
6799
+ "pathao",
6800
+ "transport",
6801
+ "fare",
6802
+ "ticket"
6803
+ ], "6414", "Travel & Conveyance"),
6804
+ keywordExpense("bd-fuel", [
6805
+ "fuel",
6806
+ "petrol",
6807
+ "diesel",
6808
+ "octane",
6809
+ "lubricant"
6810
+ ], "6807", "Fuel & Lubricants"),
6811
+ categoryExpense("bd-cat-printing", "printing", "6301", "Printing & Stationery"),
6812
+ categoryExpense("bd-cat-venue", "venue", "6803", "Entertainment / Hospitality"),
6813
+ categoryExpense("bd-cat-marketing", "marketing", "6401", "Advertisement & Publicity"),
6814
+ categoryExpense("bd-cat-rent", "rent", "6201", "Office Rent"),
6815
+ categoryExpense("bd-cat-repairs", "repairs", "6207", "Office Repairs & Maintenance"),
6816
+ categoryExpense("bd-cat-professional", "professional", "6309", "Legal Fee & Professional Charges"),
6817
+ categoryExpense("bd-cat-travel", "travel", "6414", "Travel & Conveyance"),
6818
+ categoryExpense("bd-cat-fuel", "fuel", "6807", "Fuel & Lubricants"),
6819
+ {
6820
+ id: "bd-pay-cash",
6821
+ purpose: ACCOUNT_PURPOSE.CASH,
6822
+ priority: 10,
6823
+ use: BD_ACCOUNT_CODES.PETTY_CASH,
6824
+ label: "Cash in Hand",
6825
+ when: {
6826
+ field: "paymentMethod",
6827
+ op: "eq",
6828
+ value: "cash"
6829
+ }
6830
+ },
6831
+ {
6832
+ id: "bd-pay-card",
6833
+ purpose: ACCOUNT_PURPOSE.CASH,
6834
+ priority: 10,
6835
+ use: BD_ACCOUNT_CODES.GATEWAY_CLEARING,
6836
+ label: "Gateway Clearing",
6837
+ when: {
6838
+ field: "paymentMethod",
6839
+ op: "in",
6840
+ value: [
6841
+ "card",
6842
+ "stripe",
6843
+ "sslcommerz",
6844
+ "visa",
6845
+ "mastercard"
6846
+ ]
6847
+ }
6848
+ },
6849
+ {
6850
+ id: "bd-pay-mfs",
6851
+ purpose: ACCOUNT_PURPOSE.CASH,
6852
+ priority: 10,
6853
+ use: BD_ACCOUNT_CODES.MOBILE_MONEY_MERCHANT,
6854
+ label: "Mobile Money",
6855
+ when: {
6856
+ field: "paymentMethod",
6857
+ op: "in",
6858
+ value: [
6859
+ "bkash",
6860
+ "nagad",
6861
+ "rocket",
6862
+ "mfs",
6863
+ "mobile",
6864
+ "upay"
6865
+ ]
6866
+ }
6867
+ },
6868
+ {
6869
+ id: "bd-pay-bank",
6870
+ purpose: ACCOUNT_PURPOSE.CASH,
6871
+ priority: 10,
6872
+ use: BD_ACCOUNT_CODES.CASH,
6873
+ label: "Cash at Bank",
6874
+ when: {
6875
+ field: "paymentMethod",
6876
+ op: "in",
6877
+ value: [
6878
+ "bank",
6879
+ "bank_transfer",
6880
+ "cheque",
6881
+ "eft",
6882
+ "rtgs"
6883
+ ]
6884
+ }
6885
+ },
6886
+ {
6887
+ id: "bd-inv-raw",
6888
+ purpose: ACCOUNT_PURPOSE.INVENTORY,
6889
+ priority: 10,
6890
+ use: BD_ACCOUNT_CODES.RAW_MATERIALS,
6891
+ label: "Raw Materials",
6892
+ when: {
6893
+ field: "inventoryType",
6894
+ op: "eq",
6895
+ value: "raw_materials"
6896
+ }
6897
+ },
6898
+ {
6899
+ id: "bd-inv-finished",
6900
+ purpose: ACCOUNT_PURPOSE.INVENTORY,
6901
+ priority: 10,
6902
+ use: BD_ACCOUNT_CODES.FINISHED_GOODS,
6903
+ label: "Finished Goods",
6904
+ when: {
6905
+ field: "inventoryType",
6906
+ op: "eq",
6907
+ value: "finished_goods"
6908
+ }
6909
+ },
6910
+ {
6911
+ id: "bd-inv-merch",
6912
+ purpose: ACCOUNT_PURPOSE.INVENTORY,
6913
+ priority: 10,
6914
+ use: BD_ACCOUNT_CODES.MERCHANDISE,
6915
+ label: "Merchandise",
6916
+ when: {
6917
+ field: "inventoryType",
6918
+ op: "eq",
6919
+ value: "merchandise"
6920
+ }
6921
+ }
6922
+ ],
6923
+ defaults: {
6924
+ [ACCOUNT_PURPOSE.EXPENSE]: "6822",
6925
+ [ACCOUNT_PURPOSE.COGS]: BD_ACCOUNT_CODES.COGS_MATERIALS,
6926
+ [ACCOUNT_PURPOSE.REVENUE]: BD_ACCOUNT_CODES.SALES_REVENUE,
6927
+ [ACCOUNT_PURPOSE.RECEIVABLE]: BD_ACCOUNT_CODES.AR,
6928
+ [ACCOUNT_PURPOSE.PAYABLE]: BD_ACCOUNT_CODES.AP,
6929
+ [ACCOUNT_PURPOSE.CASH]: BD_ACCOUNT_CODES.CASH,
6930
+ [ACCOUNT_PURPOSE.INVENTORY]: BD_ACCOUNT_CODES.MERCHANDISE
6931
+ }
6932
+ };
6933
+ //#endregion
6676
6934
  //#region src/accounts/index.ts
6677
6935
  const A = "Balance Sheet-Asset";
6678
6936
  const L = "Balance Sheet-Liability";
@@ -7607,4 +7865,4 @@ const bangladeshPack = defineCountryPack({
7607
7865
  ]
7608
7866
  });
7609
7867
  //#endregion
7610
- export { ADMIN_EXPENSES, ALL_DIVISIONS, ALL_TAX_ACCOUNTS, ASSETS, BANKING_REVENUE, BD_ACCOUNT_CODES, BD_ACCOUNT_TYPES, BD_DIVISIONS, COGS, COST_OF_SERVICES, CURRENT_ASSETS, CURRENT_LIABILITIES, DEPRECIATION, DIRECT_LABOR, DIRECT_MATERIALS, DIVISIONS, EMPLOYEE_COSTS, EQUITY, EXPENSES, FINANCIAL_EXPENSES, INDUSTRY_REVENUE, LIABILITIES, MANUFACTURING_OVERHEAD, NGO_REVENUE, NON_CURRENT_ASSETS, NON_CURRENT_LIABILITIES, OTHER_INCOME, OTHER_OPERATING, PREMISES_COSTS, PROVISIONS, PURCHASES, REVENUE, SALES_REVENUE, SELLING_DISTRIBUTION, ALL_TAX_CODES as TAX_CODES, TAX_CODES_BY_DIVISION, TAX_EXPENSE, TAX_RECEIVABLE_ACCOUNTS, TDS_LIABILITY_ACCOUNTS, VAT_ASSET_ACCOUNTS, VAT_LIABILITY_ACCOUNTS, VDS_LIABILITY_ACCOUNTS, bangladeshPack, getTaxCodeDetails, mushakReturnTemplate };
7868
+ export { ADMIN_EXPENSES, ALL_DIVISIONS, ALL_TAX_ACCOUNTS, ASSETS, BANKING_REVENUE, BD_ACCOUNT_CODES, BD_ACCOUNT_RULES, BD_ACCOUNT_TYPES, BD_DIVISIONS, COGS, COST_OF_SERVICES, CURRENT_ASSETS, CURRENT_LIABILITIES, DEPRECIATION, DIRECT_LABOR, DIRECT_MATERIALS, DIVISIONS, EMPLOYEE_COSTS, EQUITY, EXPENSES, FINANCIAL_EXPENSES, INDUSTRY_REVENUE, LIABILITIES, MANUFACTURING_OVERHEAD, NGO_REVENUE, NON_CURRENT_ASSETS, NON_CURRENT_LIABILITIES, OTHER_INCOME, OTHER_OPERATING, PREMISES_COSTS, PROVISIONS, PURCHASES, REVENUE, SALES_REVENUE, SELLING_DISTRIBUTION, ALL_TAX_CODES as TAX_CODES, TAX_CODES_BY_DIVISION, TAX_EXPENSE, TAX_RECEIVABLE_ACCOUNTS, TDS_LIABILITY_ACCOUNTS, VAT_ASSET_ACCOUNTS, VAT_LIABILITY_ACCOUNTS, VDS_LIABILITY_ACCOUNTS, bangladeshPack, getTaxCodeDetails, mushakReturnTemplate };
package/package.json CHANGED
@@ -1,89 +1,89 @@
1
- {
2
- "name": "@classytic/ledger-bd",
3
- "version": "0.5.0",
4
- "description": "Bangladesh country pack for @classytic/ledger — BFRS chart of accounts, NBR VAT/TDS tax codes, Mushak 9.1 return",
5
- "type": "module",
6
- "sideEffects": false,
7
- "main": "./dist/index.mjs",
8
- "module": "./dist/index.mjs",
9
- "types": "./dist/index.d.mts",
10
- "exports": {
11
- ".": {
12
- "types": "./dist/index.d.mts",
13
- "import": "./dist/index.mjs",
14
- "default": "./dist/index.mjs"
15
- },
16
- "./verticals": {
17
- "types": "./dist/verticals/index.d.mts",
18
- "import": "./dist/verticals/index.mjs",
19
- "default": "./dist/verticals/index.mjs"
20
- },
21
- "./reporting/nbr-schedule": {
22
- "types": "./dist/reporting/nbr-schedule/index.d.mts",
23
- "import": "./dist/reporting/nbr-schedule/index.mjs",
24
- "default": "./dist/reporting/nbr-schedule/index.mjs"
25
- }
26
- },
27
- "files": [
28
- "dist",
29
- "README.md",
30
- "CHANGELOG.md",
31
- "LICENSE"
32
- ],
33
- "repository": {
34
- "type": "git",
35
- "url": "git+https://github.com/classytic/ledger-bd.git"
36
- },
37
- "bugs": {
38
- "url": "https://github.com/classytic/ledger-bd/issues"
39
- },
40
- "homepage": "https://github.com/classytic/ledger-bd#readme",
41
- "publishConfig": {
42
- "access": "public"
43
- },
44
- "keywords": [
45
- "accounting",
46
- "bangladesh",
47
- "bfrs",
48
- "nbr",
49
- "vat",
50
- "tds",
51
- "mushak",
52
- "chart-of-accounts",
53
- "tax",
54
- "double-entry"
55
- ],
56
- "author": "Classytic <classytic.dev@gmail.com> (https://github.com/classytic)",
57
- "license": "MIT",
58
- "peerDependencies": {
59
- "@classytic/ledger": ">=0.15.0"
60
- },
61
- "engines": {
62
- "node": ">=22"
63
- },
64
- "scripts": {
65
- "build": "tsdown",
66
- "dev": "tsdown --watch",
67
- "typecheck": "tsc --noEmit",
68
- "prepublishOnly": "npm run build && npm run typecheck",
69
- "test": "vitest run",
70
- "test:watch": "vitest",
71
- "push": "classytic-push",
72
- "release:tag": "node -e \"require('child_process').execSync('npm run push -- v'+require('./package.json').version,{stdio:'inherit'})\"",
73
- "release": "npm run push -- main && npm run release:tag && npm publish"
74
- },
75
- "devDependencies": {
76
- "@classytic/dev-tools": "^0.2.0",
77
- "@classytic/ledger": "^0.15.0",
78
- "@classytic/mongokit": "^3.17.0",
79
- "@classytic/primitives": "^0.9.1",
80
- "@classytic/repo-core": "^0.7.0",
81
- "@types/node": "^22.0.0",
82
- "mongodb-memory-server": "^11.0.1",
83
- "mongoose": "^9.3.3",
84
- "tsdown": "^0.22.3",
85
- "typescript": "^5.7.0",
86
- "vitest": "^3.0.0",
87
- "zod": "^4.4.3"
88
- }
89
- }
1
+ {
2
+ "name": "@classytic/ledger-bd",
3
+ "version": "0.5.1",
4
+ "description": "Bangladesh country pack for @classytic/ledger \u00e2\u20ac\u201d BFRS chart of accounts, NBR VAT/TDS tax codes, Mushak 9.1 return",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "main": "./dist/index.mjs",
8
+ "module": "./dist/index.mjs",
9
+ "types": "./dist/index.d.mts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.mts",
13
+ "import": "./dist/index.mjs",
14
+ "default": "./dist/index.mjs"
15
+ },
16
+ "./verticals": {
17
+ "types": "./dist/verticals/index.d.mts",
18
+ "import": "./dist/verticals/index.mjs",
19
+ "default": "./dist/verticals/index.mjs"
20
+ },
21
+ "./reporting/nbr-schedule": {
22
+ "types": "./dist/reporting/nbr-schedule/index.d.mts",
23
+ "import": "./dist/reporting/nbr-schedule/index.mjs",
24
+ "default": "./dist/reporting/nbr-schedule/index.mjs"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md",
30
+ "CHANGELOG.md",
31
+ "LICENSE"
32
+ ],
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/classytic/ledger-bd.git"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/classytic/ledger-bd/issues"
39
+ },
40
+ "homepage": "https://github.com/classytic/ledger-bd#readme",
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "keywords": [
45
+ "accounting",
46
+ "bangladesh",
47
+ "bfrs",
48
+ "nbr",
49
+ "vat",
50
+ "tds",
51
+ "mushak",
52
+ "chart-of-accounts",
53
+ "tax",
54
+ "double-entry"
55
+ ],
56
+ "author": "Classytic <classytic.dev@gmail.com> (https://github.com/classytic)",
57
+ "license": "MIT",
58
+ "peerDependencies": {
59
+ "@classytic/ledger": ">=0.15.0"
60
+ },
61
+ "engines": {
62
+ "node": ">=22"
63
+ },
64
+ "scripts": {
65
+ "build": "tsdown",
66
+ "dev": "tsdown --watch",
67
+ "typecheck": "tsc --noEmit",
68
+ "prepublishOnly": "npm run build && npm run typecheck",
69
+ "test": "vitest run",
70
+ "test:watch": "vitest",
71
+ "push": "classytic-push",
72
+ "release:tag": "node -e \"require('child_process').execSync('npm run push -- v'+require('./package.json').version,{stdio:'inherit'})\"",
73
+ "release": "npm run push -- main && npm run release:tag && npm publish"
74
+ },
75
+ "devDependencies": {
76
+ "@classytic/dev-tools": "^0.2.0",
77
+ "@classytic/ledger": "^0.15.0",
78
+ "@classytic/mongokit": "^3.17.0",
79
+ "@classytic/primitives": "^0.9.1",
80
+ "@classytic/repo-core": "^0.7.0",
81
+ "@types/node": "^22.0.0",
82
+ "mongodb-memory-server": "^11.0.1",
83
+ "mongoose": "^9.3.3",
84
+ "tsdown": "^0.22.3",
85
+ "typescript": "^5.7.0",
86
+ "vitest": "^3.0.0",
87
+ "zod": "^4.4.3"
88
+ }
89
+ }