Supply chain and planning on Snowflake

Critical component shortage room on Snowflake

Runs the daily shortage meeting on live projected stock: planning, sourcing, sales and the plant allocate scarce components to orders and write the decisions to the ERP.

SCREENSDATA HANDLERSSNOWFLAKE · READ IN PLACES01 AgendaS02 Component roomS03 AllocationS04 Sourcing actionsS05 Decision logS06 Boarddh_material_masterMaterial masterCONFORMED.MATERIALdh_stock_positionStock positionCONFORMED.STOCK_POSITION ·HISTORY.STOCK_DAILYdh_purchase_order_linePurchase order lineCONFORMED.PURCHASE_ORDER_LINE ·HISTORY.PO_LINE_VERSIONSdh_production_orderProduction orderCONFORMED.PRODUCTION_ORDERdh_sales_order_lineSales order lineCONFORMED.SALES_ORDER_LINEdh_bill_of_materialsBill of materialsCONFORMED.BOM_COMPONENTWRITE BACK TO SNOWFLAKEProduction order → MERGE into LIMA.APP_DECISIONSPurchase order line → MERGE into LIMA.APP_DECISIONS · PO change to the ERPSales order line → MERGE into LIMA.APP_DECISIONSrows stay in Snowflake · access rules applied at read time · each write acknowledged and logged
The screens of the app, the data handler behind each, and the Snowflake 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 Snowflake
catalogue
6
screens on those rows
catalogue
7 days
to production-grade
estimate
3
objects written back
catalogue
0
rows copied to build it
product
What the app reads

The Snowflake objects behind each handler

Tables are read in place through the native Snowflake connector: the app sends only the filter and the columns it needs, Snowflake returns the matching rows. The Backbone landing model (RAW, CONFORMED and HISTORY schemas) is the usual source, so history and aggregates are already prepared.

ObjectRead fromFields the app usesFreshness
Material masterCONFORMED.MATERIALmaterial_id (id) · description (desc) · material_type (type) · plant (plant)prepared by the Backbone; refreshed on its schedule
Stock positionCONFORMED.STOCK_POSITION · HISTORY.STOCK_DAILYon_hand_qty (on hand) · material_id (material) · plant (plant) · storage_location (sloc)prepared by the Backbone; refreshed on its schedule
Purchase order lineCONFORMED.PURCHASE_ORDER_LINE · HISTORY.PO_LINE_VERSIONSordered_qty (qty) · received_qty (received qty) · po_number (number) · po_line (line)prepared by the Backbone; refreshed on its schedule
Production orderCONFORMED.PRODUCTION_ORDERorder_qty (qty) · order_id (number) · material_id (material) · start_date (start)prepared by the Backbone; refreshed on its schedule
Sales order lineCONFORMED.SALES_ORDER_LINEordered_qty (qty) · so_number (number) · so_line (line) · customer_id (customer)prepared by the Backbone; refreshed on its schedule
Bill of materialsCONFORMED.BOM_COMPONENTparent_material (parent) · component_material (component) · component_qty (qty) · valid_from (valid from)prepared by the Backbone; refreshed on its schedule
The trigger

The start criterion in Snowflake's own fields

In plain words: Each working day at 07:00 the app projects stock for every component on the critical list; a component whose projected stock falls below 0 within 4 weeks is on that day's agenda.

The criterion runs in Snowflake 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 Snowflake fields
on_hand_qty + (ordered_qty - received_qty due within 28 days) < demand from order_qty and ordered_qty within 28 days

# the same criterion in canonical fields
{stock.on_hand} + ({po.qty} - {po.received_qty} due within 28 days) < demand from {prod_order.qty} and {so.qty} within 28 days
What the app writes back

Through MERGE and the system of record

Decisions are recorded in a Lima-owned table in Snowflake through stage, COPY INTO and MERGE, so analytics 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 (start and finish dates changed to the allocation) 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
Production orderstart and finish dates changed to the allocationMERGE into LIMA.APP_DECISIONS
Purchase order linepull-in date and quantity changed on the schedule line; premium buy added as a new lineMERGE into LIMA.APP_DECISIONS · PO change to the ERP
Sales order lineconfirmed quantity and date updated on the customer orderMERGE into LIMA.APP_DECISIONS
Acknowledged and logged

Each write stores the identifier Snowflake 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

Snowflake roles and row-access policies are mapped to Lima access policies once, so a person sees the same rows in the app that they see in a worksheet.

  • A Snowflake role for the connector with SELECT on the conformed schemas and INSERT and MERGE on the Lima decision schema
  • A warehouse sized for the app's queries (an X-Small serves most screens)
  • The Backbone landing model in place for the objects the app uses, or your own conformed 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 material master from Snowflake 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 Snowflake 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 placeSnowflake
Decision recordMERGE into a Lima-owned tablebeside the history
Operational writeto the ERP of record through its interfaceacknowledged
GrantsSnowflake roles and row policies honouredat read time
Nearby

This app on other systems, and other apps on Snowflake

Critical component shortage room on

Other apps on Snowflake

Terms on this page

Projected stockOn hand plus receipts due minus demand, computed week by week.
AllocationThe decision of which orders receive a scarce quantity and how much each gets.
Read in placeThe rows stay in Snowflake; the handler sends the filter and the columns and Snowflake returns the matching rows.
Questions

Does this app copy data out of Snowflake?

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

What does Snowflake 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.