lambda-erp 0.3.2__tar.gz → 0.3.4__tar.gz

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 (83) hide show
  1. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/PKG-INFO +1 -1
  2. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/chat.py +10 -3
  3. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/pyproject.toml +1 -1
  4. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/.gitignore +0 -0
  5. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/LICENSE +0 -0
  6. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/README.md +0 -0
  7. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/__init__.py +0 -0
  8. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/attachments.py +0 -0
  9. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/auth.py +0 -0
  10. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/bootstrap.py +0 -0
  11. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/demo_limits.py +0 -0
  12. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/deps.py +0 -0
  13. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/errors.py +0 -0
  14. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/main.py +0 -0
  15. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/oauth.py +0 -0
  16. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/pdf.py +0 -0
  17. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/providers.py +0 -0
  18. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/remarks_md.py +0 -0
  19. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/__init__.py +0 -0
  20. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/accounting.py +0 -0
  21. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/admin.py +0 -0
  22. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/analytics.py +0 -0
  23. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/bank_reconciliation.py +0 -0
  24. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/chat_api.py +0 -0
  25. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/documents.py +0 -0
  26. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/masters.py +0 -0
  27. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/proposals.py +0 -0
  28. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/reports.py +0 -0
  29. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/routers/setup.py +0 -0
  30. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/services.py +0 -0
  31. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/templates/document.html +0 -0
  32. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/api/templates/proposal.html +0 -0
  33. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/docs/agents/README.md +0 -0
  34. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/frontend/LICENSE +0 -0
  35. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/frontend/README.md +0 -0
  36. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/frontend/src/api/client.ts +0 -0
  37. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/__init__.py +0 -0
  38. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/__init__.py +0 -0
  39. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/bank_transaction.py +0 -0
  40. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/budget.py +0 -0
  41. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/chart_of_accounts.py +0 -0
  42. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/general_ledger.py +0 -0
  43. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/journal_entry.py +0 -0
  44. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/payment_entry.py +0 -0
  45. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/pos_invoice.py +0 -0
  46. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/purchase_invoice.py +0 -0
  47. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/revaluation.py +0 -0
  48. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/sales_invoice.py +0 -0
  49. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/__init__.py +0 -0
  50. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/engine.py +0 -0
  51. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/pack.py +0 -0
  52. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/packs/__init__.py +0 -0
  53. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/packs/ch.py +0 -0
  54. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/packs/de_common.py +0 -0
  55. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/packs/de_skr03.py +0 -0
  56. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/packs/de_skr04.py +0 -0
  57. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/packs/generic.py +0 -0
  58. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/profiles.py +0 -0
  59. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/setup/spine.py +0 -0
  60. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/accounting/subscription.py +0 -0
  61. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/buying/__init__.py +0 -0
  62. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/buying/purchase_order.py +0 -0
  63. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/controllers/__init__.py +0 -0
  64. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/controllers/currency.py +0 -0
  65. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/controllers/defaults.py +0 -0
  66. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/controllers/pricing_rule.py +0 -0
  67. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/controllers/taxes_and_totals.py +0 -0
  68. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/database.py +0 -0
  69. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/exceptions.py +0 -0
  70. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/hooks.py +0 -0
  71. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/model.py +0 -0
  72. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/selling/__init__.py +0 -0
  73. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/selling/proposal.py +0 -0
  74. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/selling/quotation.py +0 -0
  75. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/selling/sales_order.py +0 -0
  76. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/simulation.py +0 -0
  77. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/stock/__init__.py +0 -0
  78. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/stock/delivery_note.py +0 -0
  79. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/stock/purchase_receipt.py +0 -0
  80. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/stock/stock_entry.py +0 -0
  81. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/stock/stock_ledger.py +0 -0
  82. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/lambda_erp/utils.py +0 -0
  83. {lambda_erp-0.3.2 → lambda_erp-0.3.4}/terraform/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lambda-erp
3
- Version: 0.3.2
3
+ Version: 0.3.4
4
4
  Summary: Core ERP logic - accounting, sales, purchasing, inventory
5
5
  Author: TORUS INVESTMENTS AG
6
6
  License-Expression: Apache-2.0
@@ -595,6 +595,7 @@ TOOLS = [
595
595
  "description": "Recommended: the column(s) to search, e.g. [\"city\"] or [\"customer_name\"]. Narrowing here is faster and avoids matching unrelated columns. Omit only when you genuinely don't know which field holds the value, to search all standard text fields.",
596
596
  },
597
597
  "limit": {"type": "integer", "description": "Optional max number of results. OMIT for no cap — returns ALL matches (e.g. to see the entire chart of accounts). Pass a number only to bound a large list."},
598
+ "include_disabled": {"type": "boolean", "description": "Default false (active records only). Set true to ALSO return disabled/archived records — needed to find a record you must inspect, re-enable, or reference, or to answer 'what's disabled'. Retry with this if a lookup for a record you know exists comes back empty."},
598
599
  },
599
600
  "required": ["master_type"],
600
601
  },
@@ -1326,9 +1327,14 @@ def _handle_search_masters(args):
1326
1327
 
1327
1328
  doctype, _name_field = entry
1328
1329
  has_disabled = "disabled" in db._get_table_columns(doctype)
1330
+ # Active-only by default (retired/archived records are hidden — you shouldn't
1331
+ # book to them or wade through them). Set include_disabled to reach a disabled
1332
+ # record you need to inspect, re-enable, or reference. Only meaningful when the
1333
+ # table has a `disabled` column.
1334
+ filter_disabled = has_disabled and not bool(args.get("include_disabled"))
1329
1335
 
1330
1336
  if not query:
1331
- filters = {"disabled": 0} if has_disabled else None
1337
+ filters = {"disabled": 0} if filter_disabled else None
1332
1338
  return db.get_all(doctype, filters=filters, fields=["*"], limit=limit)
1333
1339
 
1334
1340
  # Optional `fields` narrows the search to specific columns — cheaper, more
@@ -1343,7 +1349,7 @@ def _handle_search_masters(args):
1343
1349
  else:
1344
1350
  search_cols = _master_search_columns(db, doctype)
1345
1351
 
1346
- active_prefix = "disabled = 0 AND " if has_disabled else ""
1352
+ active_prefix = "disabled = 0 AND " if filter_disabled else ""
1347
1353
 
1348
1354
  # Case-insensitive substring match. lower() on both sides is portable (bare
1349
1355
  # LIKE is case-insensitive on SQLite but case-sensitive on Postgres, which
@@ -1359,7 +1365,7 @@ def _handle_search_masters(args):
1359
1365
  return [dict(r) for r in rows]
1360
1366
 
1361
1367
  # Nothing matched literally — try fuzzy matching to catch misspellings.
1362
- return _fuzzy_master_search(db, doctype, search_cols, query, has_disabled, limit=limit)
1368
+ return _fuzzy_master_search(db, doctype, search_cols, query, filter_disabled, limit=limit)
1363
1369
 
1364
1370
 
1365
1371
  def _ignored_master_fields(master_type: str, data: dict) -> list[str]:
@@ -1908,6 +1914,7 @@ You help users manage their business by creating documents, looking up data, and
1908
1914
  Only state that something was done — created, changed, enabled/disabled, booked, repointed — **after a tool call returns a success result that confirms it**, and check the returned record actually reflects the change (after `update_master` with {{"disabled": 0}}, confirm the returned row shows `disabled = 0`; after submitting a journal entry, confirm it posted non-zero GL). If a tool returns an error, a warning, or a record that doesn't reflect your intent, tell the user it did **not** work and why — never smooth it over as success.
1909
1915
  - If a capability doesn't exist, say so plainly. There is **no rename** for accounts or other masters — a master's identifying `name`/number is immutable; you can only edit display fields or create a new record and migrate. Never claim you "renamed" an account.
1910
1916
  - Never assert a field or capability is missing without checking (e.g. an item's income account) — verify with `get_master_fields` / `search_masters` first.
1917
+ - A master you can't find via `search_masters` may just be **disabled** (search hides disabled by default). Retry with `include_disabled: true` before concluding it doesn't exist — you need this to re-enable a disabled account.
1911
1918
  - If you can't confirm an action took effect, re-fetch and look, or tell the user you couldn't confirm it — never guess.
1912
1919
 
1913
1920
  ## Answering data questions — three paths
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lambda-erp"
3
- version = "0.3.2"
3
+ version = "0.3.4"
4
4
  description = "Core ERP logic - accounting, sales, purchasing, inventory"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes