Factorizer/Cluster ERP WikiCluster ERP Türkçe
Home / Overview

Explanation

What is Cluster ERP

Product scope of Cluster ERP, its three clients, its 28 backend modules, and the global and multi-language intent stated in the project rules.

Cluster ERP is a modular enterprise resource planning system written in Python. This page describes its scope as the code defines it: the server, the three ways to reach it, and the 28 backend modules with one line each. It does not explain how the parts work together; see the architecture overview for that.

In short

  • The package is named cluster-erp, describes itself as a "Modular Enterprise Resource Planning System", and declares a proprietary license (pyproject.toml:5-10, LICENSE).
  • The server is a FastAPI application built by the factory create_app (src/cluster_erp/server/app.py:1287).
  • Business features live in 28 modules under src/cluster_erp/modules/. Each one subclasses ModuleBase (src/cluster_erp/core/module_base.py:14).
  • There are three clients: the web app in webapp/, the PySide6 desktop client, and the HTTP API itself (src/cluster_erp/server/app.py:1633-1644, pyproject.toml:86-88).
  • The project rules aim at all countries and many languages.

How it works

The server process starts from python -m cluster_erp.server.main, which runs uvicorn with the create_app factory (src/cluster_erp/server/main.py:39-41). At start-up the module registry loads every enabled module, and each module adds its routes, EventBus handlers, and screen metadata (src/cluster_erp/core/module_registry.py:32-56). The details are on server startup and app factory and module lifecycle.

The three clients

Client What it is Entry point Source
Web app A vanilla JavaScript single-page app served by the same server at /app webapp/index.html src/cluster_erp/server/app.py:1633-1644
Desktop client A PySide6 application installed through the desktop extra cluster-erp-desktop script, cluster_erp.desktop.main:main pyproject.toml:68-73, pyproject.toml:88
HTTP API JSON routes under /api/v1/, one prefix per module ModuleBase.api_prefix src/cluster_erp/core/module_base.py:36-38

Both clients draw their screens from the module metadata served at GET /api/v1/_meta (src/cluster_erp/server/app.py:1518-1556). The web app section and the desktop section document the clients.

The 28 backend modules

The table lists every folder in src/cluster_erp/modules/ (28 folders, counted with ls, excluding __pycache__). The description column quotes the module's own description property. The default value of enabled_modules lists the same 28 names (src/cluster_erp/config/settings.py:535-564).

Module Description from code Source
analytics Analytics: semantic layer, safe query generation, correctness gates src/cluster_erp/modules/analytics/module.py:39
app_store App catalogue, entitlements and installs src/cluster_erp/modules/app_store/module.py:36
auth Authentication, authorization (RBAC + ABAC), and approval chains src/cluster_erp/modules/auth/module.py:26
bom Bill of Materials, multi-level product structure management src/cluster_erp/modules/bom/module.py:30
calendars Working-time templates, calendars, and exceptions src/cluster_erp/modules/calendars/module.py:27
costing Cost analysis, labor/overhead rates, CBS, margin calculation src/cluster_erp/modules/costing/module.py:26
crm Customer and RFQ management with state machine and inbox src/cluster_erp/modules/crm/module.py:29
currencies Currency management and exchange rate tracking src/cluster_erp/modules/currencies/module.py:29
design_engineering Design lifecycle, versioning, and engineering change notes (ECN) src/cluster_erp/modules/design_engineering/module.py:26
documents Document management with versioning and approval workflows src/cluster_erp/modules/documents/module.py:29
fleet Fleet management: vehicles, machines, custom tracking src/cluster_erp/modules/fleet/module.py:150
intranet Intranet: news, policies, directory, leave, requests, delivery src/cluster_erp/modules/intranet/module.py:45
inventory Inventory management: warehouses, stock levels, batch and serial tracking src/cluster_erp/modules/inventory/module.py:27
logs Activity and error logging src/cluster_erp/modules/logs/module.py:26
mail Connect external mail accounts (Gmail/Outlook/IMAP) and read/compose mail src/cluster_erp/modules/mail/module.py:29
nesting Sheet-metal nesting optimization: layout planning and material utilization src/cluster_erp/modules/nesting/module.py:26
owned_organisations Manage owned organisations, departments, and employees src/cluster_erp/modules/owned_organisations/module.py:29
parties Manage all parties: individuals, organisations, addresses, and communication channels src/cluster_erp/modules/parties/module.py:33-35
privacy Data-subject requests: access, rectification, erasure, objection src/cluster_erp/modules/privacy/module.py:36
procurement Purchase requests, purchase orders, critical materials, MRP, substitution groups src/cluster_erp/modules/procurement/module.py:29
production Production management: work centers, routings, production orders src/cluster_erp/modules/production/module.py:29
products_and_services Material master: products, services, categories, and units src/cluster_erp/modules/products_and_services/module.py:29
projects Project management, kick-off, schedules, actions, and fixtures src/cluster_erp/modules/projects/module.py:29
purchasing_quotations Supplier quotation register: standalone and RFQ-linked quotations, comparison, award, price history src/cluster_erp/modules/purchasing_quotations/module.py:30-33
quotations Quotation management with feasibility, costing, and approval workflow src/cluster_erp/modules/quotations/module.py:29
records Record lifecycle: deactivation reasons and reactivation src/cluster_erp/modules/records/module.py:34
sales_orders Sales orders: PO check and frozen PO revisions, units, shipments, proof of delivery, export documents src/cluster_erp/modules/sales_orders/module.py:29-32
subscriptions Recurring subscription plans and customer subscriptions src/cluster_erp/modules/subscriptions/module.py:26

Some descriptions are lightly edited in the table: punctuation dashes are replaced by commas, "&" is written as "and", and the sales_orders text omits the words "(assets)" and "with packages, transport". Each module has its own page in the modules section.

Why it is built this way

The project's written engineering rules state the intent: the product targets all countries. Language, currency, date format, address structure, and tax system must work independently of the country. A new language is a new JSON file with no code change. Reference data such as countries, address levels, and currencies is kept in the database, not in code.

The code reflects parts of this intent:

  • The web app reads its language list from webapp/i18n/languages.json, which lists tr and en.
  • Currencies are rows of core_currencies, seeded from the ISO 4217 set (src/cluster_erp/core/currencies.py:57-89, src/cluster_erp/core/currencies.py:1811-1852).
  • Countries are rows of parties_countries, seeded at start-up by the parties module (src/cluster_erp/modules/parties/settings/models.py:12-13, src/cluster_erp/modules/parties/module.py:41-42).

See reference data and core i18n for the details.

Rules and boundaries

The project's written engineering rules list binding rules: no guessing, no hardcoding, no direct module-to-module calls, Decimal money, no hard delete, the mandatory product, model, and version breakdown, and a metadata-driven web app. The platform section shows the code that enforces each rule, and the decisions section records them.

Interaction with other parts

The server, the clients, and the modules meet in three places: the HTTP API, the metadata document, and the EventBus. The architecture overview draws this as one diagram.

Limits and open points

  • The FastAPI application reports version 0.1.0 (src/cluster_erp/server/app.py:1296-1298), and pyproject.toml:7 declares the same. Release tags such as v0.1.37 appear in the git history. How the two version numbers relate is not determined from code.
  • Which countries a deployment serves is runtime data. It is not determined from code.

Terms introduced

Term Code identifier Definition Turkish term Source
module ModuleBase A backend package under src/cluster_erp/modules/ that owns its routes, events, and metadata. modül src/cluster_erp/core/module_base.py:14
web app webapp/ The browser client in webapp/ that the server serves at /app. web uygulaması src/cluster_erp/server/app.py:1633-1644

Verified against commit 92f8051 on 2026-11-13.

Verified against commit 92f8051 · 2026-11-13