lambda-erp 0.1.29__tar.gz → 0.1.30__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 (69) hide show
  1. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/PKG-INFO +1 -1
  2. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/chat.py +9 -1
  3. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/pyproject.toml +1 -1
  4. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/.gitignore +0 -0
  5. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/LICENSE +0 -0
  6. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/README.md +0 -0
  7. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/__init__.py +0 -0
  8. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/attachments.py +0 -0
  9. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/auth.py +0 -0
  10. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/bootstrap.py +0 -0
  11. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/demo_limits.py +0 -0
  12. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/deps.py +0 -0
  13. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/errors.py +0 -0
  14. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/main.py +0 -0
  15. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/pdf.py +0 -0
  16. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/providers.py +0 -0
  17. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/remarks_md.py +0 -0
  18. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/__init__.py +0 -0
  19. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/accounting.py +0 -0
  20. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/admin.py +0 -0
  21. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/analytics.py +0 -0
  22. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/bank_reconciliation.py +0 -0
  23. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/documents.py +0 -0
  24. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/masters.py +0 -0
  25. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/proposals.py +0 -0
  26. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/reports.py +0 -0
  27. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/routers/setup.py +0 -0
  28. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/services.py +0 -0
  29. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/templates/document.html +0 -0
  30. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/api/templates/proposal.html +0 -0
  31. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/docs/agents/README.md +0 -0
  32. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/frontend/README.md +0 -0
  33. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/frontend/src/api/client.ts +0 -0
  34. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/__init__.py +0 -0
  35. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/__init__.py +0 -0
  36. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/bank_transaction.py +0 -0
  37. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/budget.py +0 -0
  38. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/chart_of_accounts.py +0 -0
  39. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/general_ledger.py +0 -0
  40. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/journal_entry.py +0 -0
  41. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/payment_entry.py +0 -0
  42. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/pos_invoice.py +0 -0
  43. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/purchase_invoice.py +0 -0
  44. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/revaluation.py +0 -0
  45. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/sales_invoice.py +0 -0
  46. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/accounting/subscription.py +0 -0
  47. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/buying/__init__.py +0 -0
  48. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/buying/purchase_order.py +0 -0
  49. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/__init__.py +0 -0
  50. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/currency.py +0 -0
  51. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/defaults.py +0 -0
  52. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/pricing_rule.py +0 -0
  53. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/controllers/taxes_and_totals.py +0 -0
  54. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/database.py +0 -0
  55. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/exceptions.py +0 -0
  56. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/hooks.py +0 -0
  57. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/model.py +0 -0
  58. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/__init__.py +0 -0
  59. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/proposal.py +0 -0
  60. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/quotation.py +0 -0
  61. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/selling/sales_order.py +0 -0
  62. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/simulation.py +0 -0
  63. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/__init__.py +0 -0
  64. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/delivery_note.py +0 -0
  65. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/purchase_receipt.py +0 -0
  66. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/stock_entry.py +0 -0
  67. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/stock/stock_ledger.py +0 -0
  68. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/lambda_erp/utils.py +0 -0
  69. {lambda_erp-0.1.29 → lambda_erp-0.1.30}/terraform/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lambda-erp
3
- Version: 0.1.29
3
+ Version: 0.1.30
4
4
  Summary: Core ERP logic - accounting, sales, purchasing, inventory
5
5
  Author: TORUS INVESTMENTS AG
6
6
  License-Expression: MIT
@@ -1708,11 +1708,19 @@ Shape — note it does NOT use `items`:
1708
1708
 
1709
1709
  To build one: ensure each offer already exists as its own Quotation (create them first if needed), then call create_document with doctype "proposal" and a data object whose `quotations` array references those quotations by name. Do NOT submit it; link the user to the PDF at `/api/documents/proposal/<name>/pdf` (and the editor at `/app/proposal/<name>`).
1710
1710
 
1711
+ ### Recurring offer lines (quotation line `frequency`)
1712
+ A **Quotation** line item carries an optional `frequency` that controls how it is billed and totalled on the offer:
1713
+ - `One-time` (the default) — a normal one-off line.
1714
+ - `Monthly` / `Quarterly` / `Half-Yearly` / `Yearly` — a recurring line.
1715
+ When a quote mixes one-time and recurring lines, the one-time lines form the headline grand total (the "Gesamttotal"), and each recurring cadence is totalled **separately** (its own net + MWSt) so a monthly fee never inflates the one-time total. To put a recurring service ON the offer as a real line, set that line's `frequency` alongside its item_code / qty / rate — e.g. a CHF 380 line with `frequency` set to `Monthly`. These values match the Subscription billing intervals exactly; the Quotation itself still posts nothing to the ledger.
1716
+
1717
+ Use the line `frequency` for a recurring item that is genuinely part of the quote. For recurring info you only want to SHOW but that is NOT part of the quotation (a "billed separately after implementation" aside), use the `>> … | …` notes markup below instead — that is cosmetic free text, not a line item, and never enters any total.
1718
+
1711
1719
  ### Notes / Terms markup (the `remarks` field)
1712
1720
  The `remarks` (Notes / Terms) field on quotations, sales orders, and invoices renders on the PDF with a small markup vocabulary, so when a user dictates offer notes, conditions, recurring services, or a sign-off you can compose a polished closing block instead of a flat paragraph. Put this ONLY in `remarks` (never in item descriptions):
1713
1721
  - `# Heading` at the start of a line -> bold heading
1714
1722
  - `*italic*` or `_italic_` -> italic; `**bold**` -> bold
1715
- - `>> Period | Amount` at the start of a line -> a right-aligned price line that sits beside the heading/description above it; use it for separately- or recurring-billed items, e.g. `>> Monatlich | CHF 380.—`
1723
+ - A line starting with `>>` is a price line, split by the FIRST `|` pipe: the text BEFORE the pipe goes in the left (frequency) column, the text AFTER it in the right (amount) column — both placed literally as you write them, NOT interpreted (it does not know "Monatlich" is a frequency or that "CHF 380" is a number). Omit the pipe to put everything in the amount column. The two columns line up with the line-items table's frequency/amount columns, so use it for a separately- or recurring-billed item, e.g. `>> Monatlich | CHF 380.—`.
1716
1724
  - Separate blocks with a blank line; a single newline is just a line break.
1717
1725
  Plain text (no special characters) still renders fine, so only reach for the markup when it improves a customer-facing note.
1718
1726
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lambda-erp"
3
- version = "0.1.29"
3
+ version = "0.1.30"
4
4
  description = "Core ERP logic - accounting, sales, purchasing, inventory"
5
5
  readme = "README.md"
6
6
  license = "MIT"
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