StockLive · Geelong Engineering Workshop

Domain model map

A Day 2–4 synthesis of the emerging Exchange and Sale domain direction, from Sale types through Auction, Lot, Appraisal, Declaration, configuration, integration, and Bid.

How to read this map Solid green nodes are agreed in the workshop. Amber dashed nodes are proposed or need confirmation. Purple nodes are versioned configuration. Grey dashed nodes are injected or external to the owning engine. The map is a synthesis, not an automatically generated schema.

Sale → Sale types → Auction → Lot → Bid

StockLive domain model relationships Sale has Auction and Catalog subtypes. Auction contains Lots. Lot is the central aggregate root with Declaration, Appraisal, and many Bids. Appraisal Config and Declaration Config are stored separately, belong to Livestock Type Config, and each has a type of Integration, Import, or Internal. AGGREGATE FAMILYSalecommon Sale characteristics Sale subtypesinherit Sale, specialise behaviour Catalogstandalone area · Buy Now · advertising Auctionauction event · mirrors legacy Sale Lotcentral aggregate root · summary held here Bid · many per Lotamount · placed_at · lot_id · bidder_id* Declarationbelongs on Lot Appraisalbelongs on Lot Appraisal Configstored separately · form version Declaration Configstored separately · form version Livestock Type Configowns both config models Config typeIntegration · ImportInternal · providers* * Bid fields are provisional; identity, status, currency and reconciliation remain open. Config options apply to both config models.
agreed proposed / open configuration / form data injected / external

Day 2 · context

Dashboard entry, identity, authorization, Organisation scope, Manage versus Platform, and the split application direction were established. Permify and role-based context shape what a user can see and do.

Day 3 · model direction

The bloated Lot architecture led to the Exchange engine direction. Appraisal replaced Assessment, form configs became versioned, and raw appraisal data was separated from the Lot summary.

Day 4 · convergence

Listing, Item, and Consignment were removed from the target model. Lot became central, Bids moved directly onto Lot, and Catalog became a standalone Sale subtype.

Lot relationships

  • Lot is the central aggregate root.
  • A Lot can have many Bids.
  • Declaration and Appraisal belong directly to the Lot.
  • Appraisal Summary remains Lot-held summary data where required.

Configuration relationships

  • Appraisal Config and Declaration Config are stored separately from Lot and Bid.
  • Both config models belong to Livestock Type Config.
  • Each config has a type: Integration, Import, or Internal.
  • Integration configs can identify Agrinous, Frisbee, or Optiweigh.

Catalog boundary

  • Catalog inherits Sale characteristics.
  • Catalog is separate from Auction.
  • It has its own namespace, routing, actions, and indexes.
  • Its discussed functions are advertising, Buy Now, and integration.

Domain detail and status

Sale agreed base
Common characteristics inherited by Auction and Catalog. Legacy Sale remains relevant during migration.
Auction agreed subtype
Exchange auction event; mirrors the legacy Sale while both structures coexist.
Catalog agreed subtype
Sale subtype outside the Auction indexing path, with different attributes and standalone behaviour.
Lot aggregate root
Owns the Lot-level declaration, appraisal summary, lifecycle, and history.
Bid provisional fields
Belongs directly to Lot; current fields are amount, placed-at, Lot ID, and Bidder ID. Stable identity, status, currency, and reconciliation still need confirmation.
Appraisal agreed
Appraisal data belongs directly to Lot. Any summary representation is held on Lot.
Declaration agreed
Declaration data belongs directly to Lot and uses the versioned Declaration Config.
Appraisal Config / Declaration Config agreed
Separate, versioned form-related models belonging to Livestock Type Config. They are not part of Bid and each has type Integration, Import, or Internal; an Integration config can identify Agrinous, Frisbee, or Optiweigh.

Injected context

The Exchange engine receives shared context rather than owning these domains:

  • Sale
  • Organisation
  • Agent / User

Contact and Property are not injected into Exchange under the current direction.

External integration

Nexlot integrates directly with Lot / AuctionLot. Raw provider payloads and incomplete records need staging, stable import identity, and a replayable bid backfill path.

Integration is represented as a config type, with the external provider identified on that configuration.

Explicitly removed

not in target model

  • Listing as a standalone entity.
  • Item as a separate Exchange model.
  • Consignment and derived grouping as entities.

Sources: Day 2 scratchpad, Day 3 scratchpad, Day 4 scratchpad, and the technical capability map. Created as a planning aid; it does not replace an ADR or database schema.