lambda-erp 0.8.27__tar.gz → 0.8.28__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.
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/PKG-INFO +1 -1
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/chat.py +17 -20
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/pyproject.toml +1 -1
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/.gitignore +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/LICENSE +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/README.md +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/attachments.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/auth.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/bootstrap.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/demo_limits.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/deps.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/errors.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/list_values.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/main.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/oauth.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/pdf.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/providers.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/remarks_md.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/accounting.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/actions.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/admin.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/analytics.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/availability.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/bank_reconciliation.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/bank_statements.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/chat_api.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/documents.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/masters.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/mcp.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/proposals.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/reports.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/routers/setup.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/services.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/templates/document.html +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/api/templates/proposal.html +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/docs/agents/README.md +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/frontend/LICENSE +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/frontend/README.md +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/frontend/src/api/client.ts +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/bank_account.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/bank_reconciliation.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/bank_statement_import.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/bank_transaction.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/budget.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/camt.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/chart_of_accounts.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/general_ledger.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/journal_entry.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/payment_entry.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/pos_invoice.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/purchase_invoice.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/revaluation.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/sales_invoice.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/engine.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/pack.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/packs/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/packs/ch.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/packs/de_common.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/packs/de_skr03.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/packs/de_skr04.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/packs/generic.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/profiles.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/setup/spine.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/accounting/subscription.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/assets/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/assets/asset.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/assets/reservation.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/buying/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/buying/purchase_order.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/controllers/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/controllers/currency.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/controllers/defaults.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/controllers/pricing_rule.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/controllers/taxes_and_totals.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/database.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/exceptions.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/hooks.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/model.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/selling/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/selling/proposal.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/selling/quotation.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/selling/sales_order.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/simulation.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/stock/__init__.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/stock/delivery_note.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/stock/purchase_receipt.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/stock/stock_entry.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/stock/stock_ledger.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/lambda_erp/utils.py +0 -0
- {lambda_erp-0.8.27 → lambda_erp-0.8.28}/terraform/README.md +0 -0
|
@@ -899,17 +899,16 @@ TOOLS = [
|
|
|
899
899
|
"type": "function",
|
|
900
900
|
"function": {
|
|
901
901
|
"name": "reconcile_bank_transaction",
|
|
902
|
-
"description": "Reconcile imported bank transactions after explicit user confirmation. mode=invoice_payment creates and submits a Payment Entry allocated to one or more invoices; mode=existing_voucher links an already-submitted Payment Entry or Journal Entry with an exactly matching bank leg
|
|
902
|
+
"description": "Reconcile imported bank transactions after explicit user confirmation. Always pass bank_transactions: use a one-item list for an individual reconciliation and the complete list returned by an existing_voucher_group suggestion for a grouped reconciliation. mode=invoice_payment creates and submits a Payment Entry allocated to one or more invoices; mode=existing_voucher links an already-submitted Payment Entry or Journal Entry with an exactly matching bank leg, atomically for a group; mode=journal creates and submits a two-sided Journal Entry against a non-bank, non-AR/AP account. invoice_payment and journal accept exactly one bank transaction. This posts or links real accounting data. Never call in the same turn as the first proposal; confirmed must reflect a later explicit confirmation.",
|
|
903
903
|
"parameters": {
|
|
904
904
|
"type": "object",
|
|
905
905
|
"properties": {
|
|
906
|
-
"bank_transaction": {"type": "string"},
|
|
907
906
|
"bank_transactions": {
|
|
908
907
|
"type": "array",
|
|
909
908
|
"items": {"type": "string"},
|
|
910
|
-
"minItems":
|
|
909
|
+
"minItems": 1,
|
|
911
910
|
"maxItems": 100,
|
|
912
|
-
"description": "
|
|
911
|
+
"description": "Bank Transaction names to reconcile: exactly one for an individual match/payment/journal, or the complete exact group returned by the suggestion.",
|
|
913
912
|
},
|
|
914
913
|
"mode": {"type": "string", "enum": ["invoice_payment", "existing_voucher", "journal"]},
|
|
915
914
|
"allocations": {
|
|
@@ -931,7 +930,7 @@ TOOLS = [
|
|
|
931
930
|
"remarks": {"type": "string"},
|
|
932
931
|
"confirmed": {"type": "boolean"},
|
|
933
932
|
},
|
|
934
|
-
"required": ["
|
|
933
|
+
"required": ["bank_transactions", "mode", "confirmed"],
|
|
935
934
|
},
|
|
936
935
|
},
|
|
937
936
|
},
|
|
@@ -2083,35 +2082,32 @@ def _handle_reconcile_bank_transaction(args, user_info: dict | None = None):
|
|
|
2083
2082
|
)
|
|
2084
2083
|
}
|
|
2085
2084
|
from lambda_erp.accounting.bank_reconciliation import (
|
|
2086
|
-
reconcile_with_existing_voucher,
|
|
2087
2085
|
reconcile_with_existing_voucher_group,
|
|
2088
2086
|
reconcile_with_journal,
|
|
2089
2087
|
reconcile_with_payment,
|
|
2090
2088
|
)
|
|
2091
2089
|
user = (user_info or {}).get("name")
|
|
2092
2090
|
mode = args.get("mode")
|
|
2091
|
+
bank_transactions = args.get("bank_transactions")
|
|
2092
|
+
if not isinstance(bank_transactions, list) or not bank_transactions:
|
|
2093
|
+
return {"error": "bank_transactions must contain at least one Bank Transaction name"}
|
|
2094
|
+
if mode in {"invoice_payment", "journal"} and len(bank_transactions) != 1:
|
|
2095
|
+
return {"error": f"mode={mode} requires exactly one bank transaction"}
|
|
2096
|
+
bank_transaction = bank_transactions[0]
|
|
2093
2097
|
try:
|
|
2094
2098
|
if mode == "invoice_payment":
|
|
2095
2099
|
return reconcile_with_payment(
|
|
2096
|
-
|
|
2100
|
+
bank_transaction, args.get("allocations") or [],
|
|
2097
2101
|
conversion_rate=args.get("conversion_rate"), user=user, confirmed=True,
|
|
2098
2102
|
)
|
|
2099
2103
|
if mode == "existing_voucher":
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
if args.get("bank_transaction") not in group:
|
|
2103
|
-
return {"error": "bank_transactions must include bank_transaction"}
|
|
2104
|
-
return reconcile_with_existing_voucher_group(
|
|
2105
|
-
group, args.get("voucher_type"), args.get("voucher_no"),
|
|
2106
|
-
user=user, confirmed=True,
|
|
2107
|
-
)
|
|
2108
|
-
return reconcile_with_existing_voucher(
|
|
2109
|
-
args.get("bank_transaction"), args.get("voucher_type"), args.get("voucher_no"),
|
|
2104
|
+
return reconcile_with_existing_voucher_group(
|
|
2105
|
+
bank_transactions, args.get("voucher_type"), args.get("voucher_no"),
|
|
2110
2106
|
user=user, confirmed=True,
|
|
2111
2107
|
)
|
|
2112
2108
|
if mode == "journal":
|
|
2113
2109
|
return reconcile_with_journal(
|
|
2114
|
-
|
|
2110
|
+
bank_transaction, args.get("counterparty_account"),
|
|
2115
2111
|
conversion_rate=args.get("conversion_rate"), remarks=args.get("remarks"),
|
|
2116
2112
|
user=user, confirmed=True,
|
|
2117
2113
|
)
|
|
@@ -2573,8 +2569,9 @@ one transaction or every transaction in an exact `existing_voucher_group`,
|
|
|
2573
2569
|
voucher changes the GL and may change invoice outstanding amounts. Ask for explicit confirmation in
|
|
2574
2570
|
a later user turn, then call `reconcile_bank_transaction` with `confirmed=true`. Clearly disclose any
|
|
2575
2571
|
unallocated on-account remainder. Disclose all group members and their total before asking for
|
|
2576
|
-
confirmation
|
|
2577
|
-
|
|
2572
|
+
confirmation. Every reconciliation call uses `bank_transactions`: pass a one-item list for an
|
|
2573
|
+
individual reconciliation; for a group, copy the complete list from the suggestion and never add or
|
|
2574
|
+
omit IDs.
|
|
2578
2575
|
Never match a Bank Transaction directly to an invoice because that
|
|
2579
2576
|
would omit the cash posting. For reversals, first explain whether the voucher was created by the
|
|
2580
2577
|
reconciliation (it will be cancelled and reversed) or merely linked (it will only be unlinked), and
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|