Businesses rarely operate in neatly separated roles. A single organization may act as a customer in one transaction, a supplier in another, and even a partner or service provider in a different context. Traditional ERP systems often model these relationships using separate customer and vendor masters, which leads to duplicate records, fragmented history, and ongoing data maintenance challenges. This duplication not only creates operational inefficiencies but also makes it harder to maintain a single, accurate view of the business relationship.
Apache OFBiz solves this problem through its party model, which separates business identity from business function. Instead of creating multiple masters, Apache OFBiz maintains a single party record and dynamically assigns roles based on the commercial context.
In this blog, you will understand how the party model in Apache OFBiz represents complex commercial relationships without creating duplicate master records.
Imagine this situation.
A company:
In many traditional ERP systems, this results in:
But in real life, it is still the same company.
So the real question becomes:
Is it truly a “customer” or a “vendor” — or is it simply a business entity playing different roles depending on the situation?
This is where Apache OFBiz takes a fundamentally different approach.
Most ERP systems classify entities into rigid categories:
Each “master” record mixes:
Apache OFBiz deliberately separates these concerns. It models:
That architectural decision changes everything.
In Apache OFBiz, business relationships are modeled in layers:
I. Party → Identity Layer
II. PartyRole → Capability Layer
III. OrderRole / InvoiceRole → Transaction Layer
Understanding these three layers unlocks the system. Let’s break them down.
In Apache OFBiz, everything begins with a Party.
A Party represents identity. It may later be assigned one or more roles — such as CUSTOMER, VENDOR, or EMPLOYEE — but those behaviors are defined separately through PartyRole.
Before any roles are assigned, the system only needs to answer a simple question:
Is this identity a person or an organization?
That fundamental distinction is captured using PartyType:
|
PartyType |
Meaning |
|
PERSON |
Individual |
|
PARTY_GROUP |
Organization or company |
Example:
|
PartyId |
Name |
PartyType |
|
1000 |
ABC Trading LLC |
PARTY_GROUP |
|
2000 |
Northwind Retail Inc |
PARTY_GROUP |
|
3000 |
SupplyCo Distributors |
PARTY_GROUP |
|
4001 |
John Manager |
PERSON |
Notice what is missing:
There is no “Customer” table.
There is no “Vendor” table.
Those are not identities. They are roles applied to a Party.
Once identity exists, Apache OFBiz defines what that Party is capable of doing. This is done through PartyRole.
PartyRole answers:
What business role can this Party perform?
Example:
|
Party |
Role |
|
Northwind Retail Inc |
CUSTOMER |
|
SupplyCo Distributors |
SUPPLIER |
|
SupplyCo Distributors |
VENDOR |
|
Your Company LLC |
VENDOR |
|
Your Company LLC |
INTERNAL_ORGANIZATIO |
A single Party can have multiple roles. No duplication required.
One of the most common points of confusion for Business Analysts new to Apache OFBiz is the distinction between SUPPLIER and VENDOR.
At first glance, they appear to mean the same thing.
However, within OFBiz, they are used in different functional contexts and serve different purposes in practice.
Understanding this distinction is essential for correctly modeling procurement, transactions, and accounting behavior.
The SUPPLIER role is primarily associated with procurement configuration and sourcing capability.
It represents:
An approved business relationship for purchasing goods or services.
In practical terms, SUPPLIER is commonly used in:
SUPPLIER answers the question: Who are we authorized to buy from?
This role typically exists before any transaction occurs. It enables purchasing teams to configure commercial relationships independently of specific orders. So SUPPLIER lives in the planning and procurement domain.
The VENDOR role functions as the parent in a transactional role hierarchy.
Child roles include:
These roles appear primarily in order and invoice participation.
They answer questions such as:
For example, in a Purchase Order:
|
Role |
Meaning |
|
BILL_FROM_VENDOR |
Legal invoice issuer |
|
SHIP_FROM_VENDOR |
Physical sender of goods |
In accounting terms:
So the VENDOR hierarchy lives in the transactional and accounting domain.
In many implementations, a supplier organization will have:
This allows Apache OFBiz to separate:
This layered modeling provides flexibility without duplicating identity.
It is important to note that Apache OFBiz has evolved over many years, and role terminology may not always be used with rigid semantic boundaries across all modules. The explanation above reflects how these roles are typically interpreted in modern implementations and how they function in transactional and accounting contexts.
In other words, while SUPPLIER and VENDOR often serve distinct functional purposes in practice, their usage may vary depending on module configuration and implementation approach.
The key takeaway is not semantic perfection, but understanding how these roles influence procurement setup, order participation, and accounting behavior.
You may notice the role name INTERNAL_ORGANIZATIO and assume it’s a typo — it’s not. This is an actual role type in Apache OFBiz.
The name appears truncated because the underlying role identifier field in the data model is limited to 20 characters (historically defined as VARCHAR(20)). As a result, longer identifiers such as “INTERNAL_ORGANIZATION” were shortened to fit within that constraint.
This is simply a legacy design decision in the data model and does not affect functionality. Like CUSTOMER or VENDOR, it is a PartyRole assigned to a Party.
But its purpose is different. It identifies:
Which Party represents your own legal company entity inside the system, the entity that owns the General Ledger and financial books.
In multi-party system:
Without this role:
It is critical for accounting integrity.
Roles are organized into parent–child hierarchies. This allows specialization without duplication.
Parent Role: CUSTOMER
If a Party has the CUSTOMER role, it becomes eligible to participate in transactions using one or more specialized child roles. Below given child roles allow Apache OFBiz to model real-world business relationships with precision.
Child Roles:
These allow precision in the Order-to-Cash lifecycle.
In many scenarios, this is the corporate headquarters or finance entity.
Example: A large enterprise places orders through regional offices, but all invoices are billed to corporate HQ.
Example: Goods are billed to Corporate HQ but shipped directly to Warehouse #3.
This role is especially important in:
Example: A regional purchasing office places the order on behalf of the corporate entity.
Example: A distributor buys equipment, but the equipment is installed and used by a specific end customer.
At this point, a practical question often arises:
In our business, the same company places the order, receives the goods, and pays the invoice. Do we really need PLACING_CUSTOMER, BILL_TO_CUSTOMER, and SHIP_TO_CUSTOMER separately?
The answer is yes — but they can all reference the same Party.
Apache OFBiz does not require multiple parties per transaction. It supports them. In simple scenarios, all customer roles can point to the same Party without adding complexity.
The roles exist to make responsibility explicit — not to force multiple entities.
Even if your business is simple today, the structure ensures that future complexity — such as multi-branch billing, drop-shipping, intercompany flows, or franchise networks — can be handled without redesigning the data model.
Apache OFBiz favors clarity and scalability over hidden assumptions. Let's look at how these roles work in B2C and B2B scenarios.
In simple B2C:
|
Role |
Party |
|
PLACING_CUSTOMER |
Northwind Retail Inc |
|
BILL_TO_CUSTOMER |
Northwind Retail Inc |
|
SHIP_TO_CUSTOMER |
Northwind Retail Inc |
|
END_USER_CUSTOMER |
Northwind Retail Inc |
All collapse into one identity.
But in complex B2B:
|
Role |
Party |
|
PLACING_CUSTOMER |
Regional Office |
|
BILL_TO_CUSTOMER |
Corporate HQ |
|
SHIP_TO_CUSTOMER |
Warehouse |
|
END_USER_CUSTOMER |
Franchise Store |
No duplicate master records required.
Parent Role: VENDOR
Child Roles:
This separates:
Again — structured precision without duplication.
Party defines identity. PartyRole defines capability. But business happens in transactions. That is where:
come into play.
They answer:
What is this Party doing right now?
This is where Apache OFBiz becomes powerful. Let's understand this in the Order-to-Cash and Procure-to-Pay lifecycles.
Northwind Retail Inc places Sales Order SO-10045.
Northwind has roles:
Your Company LLC has roles:
|
OrderId |
Role |
Party |
|
SO-10045 |
BILL_TO_CUSTOMER |
Northwind |
|
SO-10045 |
SHIP_TO_CUSTOMER |
Northwind |
|
SO-10045 |
BILL_FROM_VENDOR |
Your Company LLC |
Notice something important, even in a Sales Order, your company acts under the VENDOR hierarchy. Because you are issuing the invoice. Perspective changes. Structure remains consistent.
|
InvoiceId |
Role |
Party |
|
INV-90034 |
BILL_FROM_VENDOR |
Your Company LLC |
|
INV-90034 |
BILL_TO_CUSTOMER |
Northwind |
Based on these roles:
O2C complete.
You purchase components from SupplyCo.
SupplyCo has roles:
|
Purchase OrderId |
Role |
Party |
|
PO-20078 |
BILL_FROM_VENDOR |
SupplyCo |
|
PO-20078 |
SHIP_FROM_VENDOR |
SupplyCo |
|
PO-20078 |
BILL_TO_CUSTOMER |
Your Company LLC |
Perspective flips. Supplier acts under the VENDOR hierarchy. You act under CUSTOMER hierarchy.
|
InvoiceId |
Role |
Party |
|
INV-91088 |
BILL_FROM_VENDOR |
SupplyCo |
|
INV-91088 |
BILL_TO_CUSTOMER |
Your Company |
Based on these roles:
P2P complete.
The most important question is:
How does the system decide who owes whom?
In Apache OFBiz, this decision is primarily driven by roles.
Roles determine:
For example:
If the invoice shows:
Then the customer owes you → AR is created.
If instead:
Then you owe the supplier → AP is created.
Roles clearly define financial direction.
Invoices in Apache OFBiz also have a document type, such as:
Document types help categorize the invoice and apply certain business rules.
However, document type alone does not fully define who owes whom. That relationship is determined by the roles assigned to the parties.
It is also important to recognize that Apache OFBiz has evolved over many years. In some areas of the application logic, document types are used in legacy logic to guide behavior. In other areas, role context plays the primary determining role.
From a modeling perspective, the principle is clear:
Roles identify the financial relationship.
Document types categorize the document.
Both exist in the system, but roles provide the relational clarity needed to determine AR vs AP and party responsibility.
Traditional ERP thinking asks:
Is this entity a customer or a vendor?
Apache OFBiz asks a better question:
What role is this Party playing in this transaction?
Once you separate:
The system becomes coherent.
A single Party can:
Without duplication.
Without master fragmentation.
Without accounting ambiguity.
Apache OFBiz does not classify businesses. It models behavior.
And once that mental shift happens, Party Roles stop being confusing — and start being powerful.
Beyond Commercial Transactions
While this guide focused on Customer, Vendor, and Supplier roles in commercial flows, the same Party model extends far beyond buying and selling. Apache OFBiz also uses PartyRoles and PartyRelationship to model employer–employee relationships, organizational hierarchies, subsidiaries, sales representatives, and many other structured connections between entities. This means the Party framework is not just about transactions — it is a foundational model for representing an entire business ecosystem. We’ll explore that relationship layer in a separate guide.
The party model in Apache OFBiz provides a strong architectural foundation for representing real-world commercial relationships without creating duplicate master records. Backed by the Apache Software Foundation and designed for extensibility, Apache OFBiz enables businesses to maintain a single source of truth while supporting multiple roles dynamically as relationships evolve.
HotWax Systems accelerates this journey through its Accelerator layer on top of Apache OFBiz, delivering modern user experiences, real-time visibility, and pre-configured foundational data models. This enables organizations to implement faster, reduce complexity, and build scalable systems aligned with their operational needs.
If you are exploring Apache OFBiz for your ERP or supply chain initiatives, connect with our team. HotWax Systems specializes in implementing Apache OFBiz and developing tailored solutions that align with your business processes and support long-term growth.