ZuloOne
English
Sign in
Menu

Core (System, layerId 0)

Updated

Purpose#

Core is the platform's system model: isSystem: true, layerId: 0, modelId: 00000000-0000-0000-0000-000000000000. Unlike the business modules on the Base/Solution/Customization layers, Core does not describe a business domain — it carries base services and extension points that the business layer uses, but it almost never fills them with its own content.

Actual contents#

The folders are declared (reserved for future content), but almost none of them have real contents at the moment. There are only two exceptions:

Folder State
Dictionaries/, Documents/, Registers/, LinkTables/, Analytics/, EDTs/, TableParts/, NumberSequences/, Reports/Views/, Scripts/, VirtualTotals/, WidgetAssignments/, Widgets/, OutboundChannels/ Empty — reserved for system objects of future platform versions
Services/NumberSequences/ Real contents — the only real Core service
TotalDrivers/{DefaultTotalDriver, FifoTotalDriver, MoneyTotalDriver, StockBaseTotalDriver, VirtualTotalDriver}/ Real contents — 5 system totals drivers

Services/NumberSequences#

Service NumberSequences, namespace: "Core", description: "Number sequences: next/preview/raw by sequence name". The pair is NumberSequences.json + NumberSequencesService.script.json/.cs. The contract INumberSequences is what any model reads after declaring numberSequenceMetaId on its object (NumberSequence).

TotalDrivers/*#

Five system totals drivers are the base calculation algorithms for Register.totalDriverMetaId:

Driver Algorithm
DefaultTotalDriver Standard accumulation calculation (single-entry register)
FifoTotalDriver Lot-based FIFO calculation (cost)
MoneyTotalDriver Money totals calculation (not about isDoubleEntry; that is a register flag and is independent of the driver)
StockBaseTotalDriver Base balance algorithm (inherited by store registers)
VirtualTotalDriver Calculation for VirtualTotal — a declarative union of several registers

Each driver carries *.engine.cs — a read-only copy of the platform engine (root CLAUDE.md, "What is forbidden", §2). You can and should read it to understand the algorithm, but you cannot edit it: export rejects changes.

Empty folders — why this is normal#

An object module (Events/<Name>EventHandler.* and so on; see the root CLAUDE.md, "Object modules always exist") is created by the platform in advance for future system entities. Until such an entity exists, the folder is empty. That is not a sync error and not a reason to create files in it by hand: Core changes only from the platform source side.

Events / Chain of Command#

It does not accumulate business events. Core provides EXTENSION POINTS (service contracts, base drivers), not its own use of them; extension comes from Base/Solution layer models through [ExtensionOf]/driver overrides, not the other way around.

Was this page helpful?