Best practice for Multi-Business Unit data isolation and approval under a Single Company

Hi everyone,

We operate as a single legal company with a single accounting entity, but we have two independent business lines: Marine Equipment and Meteorological Products. (Note: These two business lines might be split into separate legal companies in the future, but for now they must run under this single company.)

Operational teams (Sales, Purchase, Manufacturing, Stock) are fully divided per business line, while Finance oversees both.

Core Requirements:

  1. Data Isolation: Staff in Marine Equipment should only see Marine data; Meteorological staff only see Meteorological data.

  2. Line-Specific Approvals: We plan to restrict Submit permissions so only managers can submit drafts. Marine managers must only review/submit Marine drafts, and Meteorological managers for Meteorological records.

My Concerns & Blockers:

  • Using standard User Permissions requires configuring rules across $N$ users and $M$ DocTypes ($N \times M$ maintenance overhead), which is tedious and unmaintainable.

  • I considered filtering by Cost Center or Department, but many standard operational DocTypes (e.g., Production Plan, Work Order, etc.) do not natively carry these fields. Adding and maintaining custom fields across dozens of DocTypes is troublesome.

What is the cleanest, lowest-maintenance pattern in ERPNext to achieve cross-module BU isolation and line-specific approval without heavy manual maintenance, while keeping future separation in mind?

Hi @shijian

Easiest way I can think of is to create 3 companies: one for Marine, one for Meteorological, and a third one as the Parent. When you make the Parent, tick “Is Group”, and set it as the Parent Company in the other two.

Then for each user, go to User Permission, add Company = “their own company”, and tick “Apply to All Document Types”. Now they only see their own company’s data, and managers can only submit their own drafts.

For finance, give access to the Parent company and open the Consolidated Financial Statement report. It adds up both companies in one place. To see the individual accounts of a business line, just select that subsidiary company in the report.

Only thing is each company keeps its own books, so if you need one single set of accounts, this won’t work. Good part is, since you may split into separate legal companies later, this setup is already ready for it.

Hope this helps​:victory_hand:

Is it reasonable to have a new Business Unit field associated with the pertinent records, and subsequently create restrictions and consent policies based on this rather than having to create individual User Permissions for all DocTypes? I’m interested in how well it works in areas such as Manufacturing or Stock, where the typical documents do not always contain a Department or Cost Center.

Hi @BlakeWest

Well yeah that works too. Make Business Unit an Accounting Dimension and it shows up on Work Order, Production Plan etc. as well. Then one User Permission per user on it, tick “Apply to All Document Types”, done. If one company and one set of books is fine for you, go for it.

But @shijian said they might split into two legal companies later, so I’d still go with separate companies. Everything is already split by company, so when the split comes there’s nothing to move. With the dimension way it’s still one company and one chart of accounts, so you’ll have to sort out the books later.

If the split is only a maybe, either one is fine​:+1:

(post deleted by author)

Thanks for the clarification! @Jatin_Banshpal

So if I understand correctly:
Whether we go with multi-company, manually add a custom field to all forms, or use Accounting Dimensions, they all fundamentally rely on User Permissions (with Apply to All Document Types) under the hood to achieve the data isolation between business units?

In other words, Accounting Dimensions basically saves me the tedious work of manually adding custom fields across dozens of DocTypes (along with benefits in GL entry tracking and financial reporting). Am I getting this right?

Also, is User Permission the only standard way in ERPNext to achieve this kind of isolation, or are there any alternative patterns/approaches commonly used for this?