lambda-erp 0.8.30__tar.gz → 0.8.32__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.30 → lambda_erp-0.8.32}/PKG-INFO +10 -10
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/README.md +9 -8
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/chat.py +271 -105
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/demo_limits.py +1 -1
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/providers.py +20 -41
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/admin.py +2 -2
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/analytics.py +138 -6
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/pyproject.toml +1 -2
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/terraform/README.md +11 -14
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/.gitignore +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/LICENSE +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/attachments.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/auth.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/bootstrap.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/deps.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/errors.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/list_values.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/main.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/oauth.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/pdf.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/remarks_md.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/accounting.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/actions.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/availability.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/bank_reconciliation.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/bank_statements.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/chat_api.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/documents.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/masters.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/mcp.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/proposals.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/reports.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/routers/setup.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/services.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/templates/document.html +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/templates/proposal.html +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/api/tool_permissions.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/docs/agents/README.md +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/frontend/LICENSE +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/frontend/README.md +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/frontend/src/api/client.ts +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/bank_account.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/bank_reconciliation.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/bank_statement_import.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/bank_transaction.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/budget.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/camt.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/chart_of_accounts.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/general_ledger.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/journal_entry.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/payment_entry.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/pos_invoice.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/purchase_invoice.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/revaluation.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/sales_invoice.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/engine.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/pack.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/packs/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/packs/ch.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/packs/de_common.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/packs/de_skr03.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/packs/de_skr04.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/packs/generic.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/profiles.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/setup/spine.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/accounting/subscription.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/assets/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/assets/asset.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/assets/reservation.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/buying/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/buying/purchase_order.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/controllers/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/controllers/currency.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/controllers/defaults.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/controllers/pricing_rule.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/controllers/taxes_and_totals.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/database.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/exceptions.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/hooks.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/model.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/selling/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/selling/proposal.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/selling/quotation.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/selling/sales_order.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/simulation.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/stock/__init__.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/stock/delivery_note.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/stock/purchase_receipt.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/stock/stock_entry.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/stock/stock_ledger.py +0 -0
- {lambda_erp-0.8.30 → lambda_erp-0.8.32}/lambda_erp/utils.py +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: lambda-erp
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.32
|
|
4
4
|
Summary: Core ERP logic - accounting, sales, purchasing, inventory
|
|
5
5
|
Author: TORUS INVESTMENTS AG
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
7
|
License-File: LICENSE
|
|
8
8
|
Requires-Python: >=3.10
|
|
9
|
-
Requires-Dist: anthropic>=0.40
|
|
10
9
|
Requires-Dist: bcrypt>=5
|
|
11
10
|
Requires-Dist: defusedxml>=0.7
|
|
12
11
|
Requires-Dist: fastapi>=0.115
|
|
@@ -96,8 +95,8 @@ Each of those is hours of skilled work today. With a capable LLM in the loop, th
|
|
|
96
95
|
│ - GPT-5.6 drives the reasoning loop │
|
|
97
96
|
│ - Tool-use: document CRUD, search, │
|
|
98
97
|
│ reports, aggregations, analytics │
|
|
99
|
-
│ - Delegates report specs to
|
|
100
|
-
│
|
|
98
|
+
│ - Delegates report specs to a separate │
|
|
99
|
+
│ GPT-5.6 Terra specialist call │
|
|
101
100
|
└──────────────────┬───────────────────────┘
|
|
102
101
|
│
|
|
103
102
|
▼
|
|
@@ -133,7 +132,7 @@ Each of those is hours of skilled work today. With a capable LLM in the loop, th
|
|
|
133
132
|
| Frontend | React + Vite + TypeScript + Tailwind + Recharts |
|
|
134
133
|
| Chat transport | WebSocket |
|
|
135
134
|
| LLM orchestrator | OpenAI (configurable) |
|
|
136
|
-
|
|
|
135
|
+
| Report specialist | OpenAI GPT-5.6 Terra (configurable) |
|
|
137
136
|
| Auth | JWT httponly cookie, three roles + demo |
|
|
138
137
|
|
|
139
138
|
---
|
|
@@ -217,7 +216,7 @@ You need Docker and Compose v2. The canonical installs:
|
|
|
217
216
|
Then, from the repo root:
|
|
218
217
|
|
|
219
218
|
```bash
|
|
220
|
-
cp .env.example .env # add your OPENAI_API_KEY
|
|
219
|
+
cp .env.example .env # add your OPENAI_API_KEY
|
|
221
220
|
docker compose up --build
|
|
222
221
|
```
|
|
223
222
|
|
|
@@ -262,14 +261,15 @@ Open `http://localhost:5173`. Vite proxies `/api/*` to the backend.
|
|
|
262
261
|
|
|
263
262
|
```
|
|
264
263
|
OPENAI_API_KEY=sk-...
|
|
265
|
-
|
|
266
|
-
ANTHROPIC_CODE_MODEL=claude-opus-4-7 # optional, default shown
|
|
264
|
+
LAMBDA_ERP_REPORT_MODEL=gpt-5.6-terra # optional specialist override; default shown
|
|
267
265
|
LAMBDA_ERP_ADMIN_EMAIL=admin@example.com # optional, seeds the admin at boot
|
|
268
266
|
LAMBDA_ERP_ADMIN_PASSWORD=... # optional, required with the line above
|
|
269
267
|
LAMBDA_ERP_ADMIN_NAME=Administrator # optional, display name for the seeded admin
|
|
270
268
|
```
|
|
271
269
|
|
|
272
|
-
Chat
|
|
270
|
+
Chat and custom-report specification generation share `OPENAI_API_KEY`. Both
|
|
271
|
+
the orchestrator and report specialist default to GPT-5.6 Terra; the specialist
|
|
272
|
+
can be overridden with `LAMBDA_ERP_REPORT_MODEL`.
|
|
273
273
|
|
|
274
274
|
**Seeded admin.** By default the first person to register becomes the admin. Set `LAMBDA_ERP_ADMIN_EMAIL` + `LAMBDA_ERP_ADMIN_PASSWORD` to instead provision that admin automatically at startup — useful when the database is recreated on every deploy, so a redeployed instance can't be claimed by whoever visits first. It's create-if-missing and idempotent (an existing account with that email is promoted to an enabled admin; its password is left untouched), and the password is only ever read from the environment.
|
|
275
275
|
|
|
@@ -487,4 +487,4 @@ Release notes live in [CHANGELOG.md](./CHANGELOG.md). Releases are tagged
|
|
|
487
487
|
|
|
488
488
|
## Trademarks and affiliations
|
|
489
489
|
|
|
490
|
-
Lambda ERP and [lambda.dev](https://lambda.dev/) are product and trade names of **TORUS INVESTMENTS AG**. It is not affiliated with, endorsed by, or sponsored by OpenAI, Anthropic, SAP, Oracle, Microsoft, or any other company named in this repository. SAP, Business One, S/4HANA, Oracle, NetSuite, Microsoft, Dynamics, OpenAI, GPT, Anthropic, and Claude are trademarks of their respective owners and are referenced here only for descriptive and comparative purposes (nominative fair use).
|
|
490
|
+
Lambda ERP and [lambda.dev](https://lambda.dev/) are product and trade names of **TORUS INVESTMENTS AG**. It is not affiliated with, endorsed by, or sponsored by OpenAI, Anthropic, SAP, Oracle, Microsoft, or any other company named in this repository. SAP, Business One, S/4HANA, Oracle, NetSuite, Microsoft, Dynamics, OpenAI, GPT, Anthropic, and Claude are trademarks of their respective owners and are referenced here only for descriptive and comparative purposes (nominative fair use). The ERP uses the OpenAI API as a customer; you supply your own API key.
|
|
@@ -67,8 +67,8 @@ Each of those is hours of skilled work today. With a capable LLM in the loop, th
|
|
|
67
67
|
│ - GPT-5.6 drives the reasoning loop │
|
|
68
68
|
│ - Tool-use: document CRUD, search, │
|
|
69
69
|
│ reports, aggregations, analytics │
|
|
70
|
-
│ - Delegates report specs to
|
|
71
|
-
│
|
|
70
|
+
│ - Delegates report specs to a separate │
|
|
71
|
+
│ GPT-5.6 Terra specialist call │
|
|
72
72
|
└──────────────────┬───────────────────────┘
|
|
73
73
|
│
|
|
74
74
|
▼
|
|
@@ -104,7 +104,7 @@ Each of those is hours of skilled work today. With a capable LLM in the loop, th
|
|
|
104
104
|
| Frontend | React + Vite + TypeScript + Tailwind + Recharts |
|
|
105
105
|
| Chat transport | WebSocket |
|
|
106
106
|
| LLM orchestrator | OpenAI (configurable) |
|
|
107
|
-
|
|
|
107
|
+
| Report specialist | OpenAI GPT-5.6 Terra (configurable) |
|
|
108
108
|
| Auth | JWT httponly cookie, three roles + demo |
|
|
109
109
|
|
|
110
110
|
---
|
|
@@ -188,7 +188,7 @@ You need Docker and Compose v2. The canonical installs:
|
|
|
188
188
|
Then, from the repo root:
|
|
189
189
|
|
|
190
190
|
```bash
|
|
191
|
-
cp .env.example .env # add your OPENAI_API_KEY
|
|
191
|
+
cp .env.example .env # add your OPENAI_API_KEY
|
|
192
192
|
docker compose up --build
|
|
193
193
|
```
|
|
194
194
|
|
|
@@ -233,14 +233,15 @@ Open `http://localhost:5173`. Vite proxies `/api/*` to the backend.
|
|
|
233
233
|
|
|
234
234
|
```
|
|
235
235
|
OPENAI_API_KEY=sk-...
|
|
236
|
-
|
|
237
|
-
ANTHROPIC_CODE_MODEL=claude-opus-4-7 # optional, default shown
|
|
236
|
+
LAMBDA_ERP_REPORT_MODEL=gpt-5.6-terra # optional specialist override; default shown
|
|
238
237
|
LAMBDA_ERP_ADMIN_EMAIL=admin@example.com # optional, seeds the admin at boot
|
|
239
238
|
LAMBDA_ERP_ADMIN_PASSWORD=... # optional, required with the line above
|
|
240
239
|
LAMBDA_ERP_ADMIN_NAME=Administrator # optional, display name for the seeded admin
|
|
241
240
|
```
|
|
242
241
|
|
|
243
|
-
Chat
|
|
242
|
+
Chat and custom-report specification generation share `OPENAI_API_KEY`. Both
|
|
243
|
+
the orchestrator and report specialist default to GPT-5.6 Terra; the specialist
|
|
244
|
+
can be overridden with `LAMBDA_ERP_REPORT_MODEL`.
|
|
244
245
|
|
|
245
246
|
**Seeded admin.** By default the first person to register becomes the admin. Set `LAMBDA_ERP_ADMIN_EMAIL` + `LAMBDA_ERP_ADMIN_PASSWORD` to instead provision that admin automatically at startup — useful when the database is recreated on every deploy, so a redeployed instance can't be claimed by whoever visits first. It's create-if-missing and idempotent (an existing account with that email is promoted to an enabled admin; its password is left untouched), and the password is only ever read from the environment.
|
|
246
247
|
|
|
@@ -458,4 +459,4 @@ Release notes live in [CHANGELOG.md](./CHANGELOG.md). Releases are tagged
|
|
|
458
459
|
|
|
459
460
|
## Trademarks and affiliations
|
|
460
461
|
|
|
461
|
-
Lambda ERP and [lambda.dev](https://lambda.dev/) are product and trade names of **TORUS INVESTMENTS AG**. It is not affiliated with, endorsed by, or sponsored by OpenAI, Anthropic, SAP, Oracle, Microsoft, or any other company named in this repository. SAP, Business One, S/4HANA, Oracle, NetSuite, Microsoft, Dynamics, OpenAI, GPT, Anthropic, and Claude are trademarks of their respective owners and are referenced here only for descriptive and comparative purposes (nominative fair use).
|
|
462
|
+
Lambda ERP and [lambda.dev](https://lambda.dev/) are product and trade names of **TORUS INVESTMENTS AG**. It is not affiliated with, endorsed by, or sponsored by OpenAI, Anthropic, SAP, Oracle, Microsoft, or any other company named in this repository. SAP, Business One, S/4HANA, Oracle, NetSuite, Microsoft, Dynamics, OpenAI, GPT, Anthropic, and Claude are trademarks of their respective owners and are referenced here only for descriptive and comparative purposes (nominative fair use). The ERP uses the OpenAI API as a customer; you supply your own API key.
|