Supply chain and planning on Databricks

Excess and obsolete inventory review on Databricks

Finds stock with cover above a threshold or a long idle time, gives each position to its planner with the options, and posts the decision in the ERP.

SCREENSDATA HANDLERSDATABRICKS · READ IN PLACES01 Excess positionsS02 Position detailS03 DispositionS04 Finance reviewS05 Warehouse executionS06 Boarddh_stock_positionStock positionsilver.stock_position · gold.stock_dailydh_material_masterMaterial mastersilver.materialdh_forecastForecastsilver.forecast · gold.forecast_versionsdh_sales_order_lineSales order linesilver.sales_order_linedh_batchBatchsilver.batchdh_journal_lineJournal linesilver.journal_line · gold.journal_linesWRITE BACK TO DATABRICKSStock position → MERGE INTO gold.lima_app_decisionsMaterial master → MERGE INTO gold.lima_app_decisions · operational write to the ERPJournal line → MERGE INTO gold.lima_app_decisionsrows stay in Databricks · access rules applied at read time · each write acknowledged and logged
The screens of the app, the data handler behind each, and the Databricks object it reads in place. Writes below the line go through MERGE into a Lima-owned table, with the operational write to the ERP of record.
6
objects read in place from Databricks
catalogue
6
screens on those rows
catalogue
6 days
to production-grade
estimate
3
objects written back
catalogue
0
rows copied to build it
product
What the app reads

The Databricks objects behind each handler

Delta tables in Unity Catalog are read in place through a SQL warehouse: the app sends only the filter and the columns it needs. The Backbone landing model (bronze, silver and gold) is the usual source, so history and aggregates are already prepared and lineage is registered in Unity Catalog.

ObjectRead fromFields the app usesFreshness
Stock positionsilver.stock_position · gold.stock_dailyon_hand_qty (on hand) · stock_value (value) · last_movement_date (last movement) · material_id (material)prepared by the Backbone; refreshed on its schedule
Material mastersilver.materialmaterial_id (id) · description (desc) · material_type (type) · plant (plant)prepared by the Backbone; refreshed on its schedule
Forecastsilver.forecast · gold.forecast_versionsforecast_qty (qty) · material_id (material) · plant (plant) · period (period)prepared by the Backbone; refreshed on its schedule
Sales order linesilver.sales_order_lineordered_qty (qty) · so_number (number) · so_line (line) · customer_id (customer)prepared by the Backbone; refreshed on its schedule
Batchsilver.batchbatch_id (batch) · material_id (material) · expiry_date (expiry) · production_date (produced)prepared by the Backbone; refreshed on its schedule
Journal linesilver.journal_line · gold.journal_linesdocument_id (document) · gl_account (account) · amount_lc (amount) · cost_center (cost center)prepared by the Backbone; refreshed on its schedule
The trigger

The start criterion in Databricks's own fields

In plain words: A stock position worth more than 5,000 whose on-hand quantity covers more than 12 months of forecast and open orders, or whose last movement is older than 180 days.

The criterion runs in Databricks through the data handler, so only the matching rows return. The editor shows the rows it selects, and their count, as it is written.

# start criterion in Databricks fields
stock_value > 5000 and (on_hand_qty > 12 months of forecast_qty + ordered_qty or last_movement_date < today - 180)

# the same criterion in canonical fields
{stock.value} > 5000 and ({stock.on_hand} > 12 months of {forecast.qty} + {so.qty} or {stock.last_movement} < today - 180)
What the app writes back

Through MERGE and the system of record

Decisions are recorded in a Lima-owned gold table with MERGE INTO, so notebooks and dashboards see them next to the history. The operational write goes to the system of record through its released interface, and the app records the acknowledgement. For this app the operational change (transfer to another plant or scrap posted as a goods movement) goes to SAP S/4HANA or Oracle Fusion through its released interface, and the pair pages for those systems show the exact call.

ObjectWhat changesInterface
Stock positiontransfer to another plant or scrap posted as a goods movement; quantity moved to blocked stock while a decision is openMERGE INTO gold.lima_app_decisions
Material masterplant status set to phase-out so planning stops creating new ordersMERGE INTO gold.lima_app_decisions · operational write to the ERP
Journal linethe agreed reserve change posted as a journal at month endMERGE INTO gold.lima_app_decisions
Acknowledged and logged

Each write stores the identifier Databricks returns beside the decision, the person and the time, so the log answers who changed what, and the reconciliation shows it arrived.

Access and prerequisites

What is in place before the first build

Unity Catalog grants and row filters are mapped to Lima access policies once, so a person sees the same rows in the app that they see in a notebook.

  • A service principal with SELECT on the silver and gold schemas and MODIFY on the Lima decision schema
  • A SQL warehouse (a small serverless warehouse serves most screens)
  • The Backbone landing model in place for the objects the app uses, or your own silver tables registered
  • The system of record connected for the operational write
Register the handlers6 objects from the catalog; each shows its rows at once.
Why the lake

History and aggregates, read where they land

This app reads stock position from Databricks because the screens need history at scale: months of rows, aggregates by period, several versions. The Backbone lands the objects in the conformed model and refreshes them on a schedule, and the handler reads them in place with the filter and the columns pushed down. The person's grants in Databricks decide what they see.

The operational rows the person acts on can come live from the ERP in the same app: one handler per object per system, and a screen that shows both.

Readsconformed and history tables, in placeDatabricks
Decision recordMERGE into a Lima-owned tablebeside the history
Operational writeto the ERP of record through its interfaceacknowledged
GrantsDatabricks roles and row policies honouredat read time
Nearby

This app on other systems, and other apps on Databricks

Excess and obsolete inventory review on

Other apps on Databricks

Terms on this page

CoverThe months of demand the on-hand quantity serves: on hand divided by the average monthly forecast and orders.
ReserveThe amount finance sets aside against stock that may sell below its book value.
Read in placeThe rows stay in Databricks; the handler sends the filter and the columns and Databricks returns the matching rows.
Questions

Does this app copy data out of Databricks?

The screens read through handlers that leave the rows in Databricks. The conformed tables it reads were landed there by the Backbone from the ERP; the app reads them there.

What does Databricks need to allow?

The prerequisites above: an integration identity with read rights on the objects listed and write rights on the interfaces named, connectivity, and the scopes agreed with the process owner.

Can I run it on another system as well?

Yes. The screens, criteria and roles stay; the handlers are re-bound to the other system's objects, and the app's other system pages show them.

See this app on your data

Bring the process and the systems it touches. In the first session we register the data handlers, draw the levels or the lanes and run the first screen on your live rows.