# idempiere/idempiere architecture

> Architecture diagram of the GitHub repository idempiere/idempiere, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/idempiere/idempiere
- Repository: https://github.com/idempiere/idempiere

## Overview

iDempiere is a modular ERP, CRM, and supply-chain platform. Its user-facing workflow is to enter or import business data, validate it through model callouts, run business processes, and manage document actions; results can include operational records and formatted reports. The tree also shows inventory reservation and storage maintenance, database partition support, and extension management. Sampled excerpts confirm several SQL, document-event, report-layout, and storage-migration operations; unsampled subsystem links are kept broad rather than inferred as call chains.

Main entry points: [`org.adempiere.base.process/src/org/compiere/process`](https://github.com/idempiere/idempiere/tree/master/org.adempiere.base.process/src/org/compiere/process) (Business processes), [`org.adempiere.base/src/org/adempiere/process/RecreateStorageReservation.java`](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/adempiere/process/RecreateStorageReservation.java) (Reservation repair), [`org.adempiere.base.process/src/org/idempiere/process/MigrateStorageProvider.java`](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base.process/src/org/idempiere/process/MigrateStorageProvider.java) (Storage migration), [`org.adempiere.base/src/org/compiere/print/ReportEngine.java`](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/print/ReportEngine.java) (Report generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_business["Business operations"]
  node_callouts["Model callouts<br/>[model]"]
  node_processes["Business processes<br/>[process]"]
  node_imports["Data import<br/>[process]"]
end

subgraph group_platform["ERP platform"]
  node_documents["Document actions"]
  node_events["Event dispatch"]
  node_factories["Service factories<br/>[base]"]
  node_businessdata[("Business records")]
  node_partitioning["Database partitioning"]
end

subgraph group_inventory["Inventory and storage"]
  node_onhand["On-hand stock"]
  node_reservation["Reservation repair"]
  node_cleanup["Storage cleanup"]
  node_storage_migration["Storage migration"]
  node_storage_provider["Storage providers"]
  node_reservationdata[("Reservation records")]
end

subgraph group_outputs["Reporting and extensions"]
  node_reports["Report generation<br/>[ReportEngine.java]"]
  node_layout["Report layout<br/>[LayoutEngine.java]"]
  node_extensions["Extension management"]
end

node_user(("Business user"))
node_database[("ERP database")]
node_printer["Print destination"]

node_user -->|"edits fields"| node_callouts
node_user -->|"runs processes"| node_processes
node_user -->|"starts imports"| node_imports
node_processes -->|"manages actions"| node_documents
node_documents -->|"dispatches events"| node_events
node_processes -->|"updates records"| node_businessdata
node_imports -->|"loads records"| node_businessdata
node_reservation -->|"reads and rebuilds"| node_database
node_reservation -->|"recreates rows"| node_reservationdata
node_cleanup -->|"cleans and moves"| node_database
node_onhand -->|"queries and saves"| node_database
node_storage_migration -->|"selects providers"| node_storage_provider
node_storage_migration -->|"updates metadata"| node_database
node_reports -->|"builds layout"| node_layout
node_reports -->|"submits print job"| node_printer
node_layout -->|"reads print data"| node_database
node_partitioning -->|"creates partitions"| node_database
node_extensions -->|"checks and saves"| node_database
node_extensions -->|"manages bundles"| node_factories

click node_callouts "https://github.com/idempiere/idempiere/tree/master/org.adempiere.base.callout/src/org/compiere/model"
click node_processes "https://github.com/idempiere/idempiere/tree/master/org.adempiere.base.process/src/org/compiere/process"
click node_imports "https://github.com/idempiere/idempiere/tree/master/org.adempiere.base.process/src/org/compiere/process"
click node_documents "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/process/DocumentEngine.java"
click node_events "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/adempiere/base/AnnotationBasedEventManager.java"
click node_factories "https://github.com/idempiere/idempiere/tree/master/org.adempiere.base/src/org/adempiere/base"
click node_onhand "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/model/MStorageOnHand.java"
click node_reservation "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/adempiere/process/RecreateStorageReservation.java"
click node_cleanup "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base.process/src/org/compiere/process/StorageCleanup.java"
click node_storage_migration "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base.process/src/org/idempiere/process/MigrateStorageProvider.java"
click node_reports "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/print/ReportEngine.java"
click node_layout "https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/print/layout/LayoutEngine.java"
click node_extensions "https://github.com/idempiere/idempiere/blob/master/org.idempiere.extension.manager/src/org/idempiere/extension/manager/form/ExtensionBrowserService.java"
click node_partitioning "https://github.com/idempiere/idempiere/blob/master/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/partition/TablePartitionService.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_callouts,node_processes,node_imports,node_user toneBlue
class node_documents,node_events,node_factories,node_businessdata,node_partitioning,node_database toneAmber
class node_onhand,node_reservation,node_cleanup,node_storage_migration,node_storage_provider,node_reservationdata toneMint
class node_reports,node_layout,node_extensions toneRose
class node_printer toneIndigo
```

## Components

### Business operations

- [Model callouts](https://github.com/idempiere/idempiere/tree/master/org.adempiere.base.callout/src/org/compiere/model): `org.adempiere.base.callout/src/org/compiere/model`
- [Business processes](https://github.com/idempiere/idempiere/tree/master/org.adempiere.base.process/src/org/compiere/process): `org.adempiere.base.process/src/org/compiere/process`
- [Data import](https://github.com/idempiere/idempiere/tree/master/org.adempiere.base.process/src/org/compiere/process): `org.adempiere.base.process/src/org/compiere/process`

### ERP platform

- [Document actions](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/process/DocumentEngine.java): `org.adempiere.base/src/org/compiere/process/DocumentEngine.java`
- [Event dispatch](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/adempiere/base/AnnotationBasedEventManager.java): `org.adempiere.base/src/org/adempiere/base/AnnotationBasedEventManager.java`
- [Service factories](https://github.com/idempiere/idempiere/tree/master/org.adempiere.base/src/org/adempiere/base): `org.adempiere.base/src/org/adempiere/base`
- **Business records**
- [Database partitioning](https://github.com/idempiere/idempiere/blob/master/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/partition/TablePartitionService.java): `org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/partition/TablePartitionService.java`

### Inventory and storage

- [On-hand stock](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/model/MStorageOnHand.java): `org.adempiere.base/src/org/compiere/model/MStorageOnHand.java`
- [Reservation repair](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/adempiere/process/RecreateStorageReservation.java): `org.adempiere.base/src/org/adempiere/process/RecreateStorageReservation.java`
- [Storage cleanup](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base.process/src/org/compiere/process/StorageCleanup.java): `org.adempiere.base.process/src/org/compiere/process/StorageCleanup.java`
- [Storage migration](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base.process/src/org/idempiere/process/MigrateStorageProvider.java): `org.adempiere.base.process/src/org/idempiere/process/MigrateStorageProvider.java`
- **Storage providers**
- **Reservation records**

### Reporting and extensions

- [Report generation](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/print/ReportEngine.java): `org.adempiere.base/src/org/compiere/print/ReportEngine.java`
- [Report layout](https://github.com/idempiere/idempiere/blob/master/org.adempiere.base/src/org/compiere/print/layout/LayoutEngine.java): `org.adempiere.base/src/org/compiere/print/layout/LayoutEngine.java`
- [Extension management](https://github.com/idempiere/idempiere/blob/master/org.idempiere.extension.manager/src/org/idempiere/extension/manager/form/ExtensionBrowserService.java): `org.idempiere.extension.manager/src/org/idempiere/extension/manager/form/ExtensionBrowserService.java`

### Other components

- **Business user**
- **ERP database**
- **Print destination**

## Connections

- Business user → Model callouts: edits fields
- Business user → Business processes: runs processes
- Business user → Data import: starts imports
- Business processes → Document actions: manages actions
- Document actions → Event dispatch: dispatches events
- Business processes → Business records: updates records
- Data import → Business records: loads records
- Reservation repair → ERP database: reads and rebuilds
- Reservation repair → Reservation records: recreates rows
- Storage cleanup → ERP database: cleans and moves
- On-hand stock → ERP database: queries and saves
- Storage migration → Storage providers: selects providers
- Storage migration → ERP database: updates metadata
- Report generation → Report layout: builds layout
- Report generation → Print destination: submits print job
- Report layout → ERP database: reads print data
- Database partitioning → ERP database: creates partitions
- Extension management → ERP database: checks and saves
- Extension management → Service factories: manages bundles
