Take the account-plus-subaccount coding block apart by purpose, decide what becomes a main account and what becomes a financial dimension, and design account structures that reproduce the validation Acumatica achieved through masks and class rules.
The Organisational Modelling module fixed the legal-entity set. This module takes the coding block apart.
It is worth being precise about the structural difference before designing anything.
The concept note lists six things a subaccount may encode: department, location, branch, product line, project, and legacy reporting exceptions. The last of those is the important one, because it is where estates hide their history.
If the segment answers "what is this balance?" — restricted versus unrestricted, capital versus revenue, accrued versus billed — it is main account meaning. If the segment answers "who, where or on what?" — department, site, product line, project, customer segment — it is dimension meaning.
Acumatica constrains what is postable through masks and class rules. The mask says which segment values are permitted, or derived, in a given context. This is genuinely elegant in the source and it has no single equivalent in the target, because the target separates the two jobs a mask performs.
Acumatica estates often carry currency complexity in the branch structure — a branch reporting in one currency, consolidating into another, with a third view maintained for a parent. It is worth stating the target constraint early, because it changes what people ask for.
The playbook gives an explicit target-side order, and it is worth following even when the team is tempted to parallelise:
The validation set for this path names two finance checks explicitly: trial balance by tenant and branch classification, and account and subaccount combination coverage.
The account-plus-subaccount model looks ready to migrate because it is already segmented. That appearance is the trap. A subaccount segment carries meaning by position and convention, and a financial dimension carries meaning by declaration, so the work is recovering intent rather than re-segmenting a string.