Chimmani
W-07Palantir Foundry · Case study · In review

EHS Insight Hub

I designed and built a Palantir Foundry widget that puts EHS cases, events, concerns and insights into one ontology of 12 object types, computes KPIs and status in a single logic layer, and presents them in a layout EHS users already know from Gensuite.

Palantir FoundryOntologyTypeScriptReactKPI logic
At a glance · the 20-second version

One ontology for the whole EHS record, one place where every KPI and status is decided, and a view sites already know how to read.

12ontology object types behind one widget
Role
Designed the ontology, wrote the KPI and status logic, built the widget
When
2026, alongside the Foundry migration at Hexion
Stack
Palantir Foundry Ontology, custom widget in TypeScript and React
Status
Built and verified on a Foundry branch; merge proposal in review
  1. Problem

    Cases, events, concerns and the insights drawn from them lived as separate lists, so a site's safety picture had to be stitched together by hand, and each report could count the same thing differently.

  2. What I did

    Modelled the EHS record as 12 linked object types in the Foundry ontology, moved every KPI and status rule into one logic module, and built a widget on top in the Gensuite layout.

  3. Status

    On the branch the ontology indexes 190 cases, 1,221 events, 11,546 concerns and 82 insights. The merge proposal is in review.

  4. Why it matters

    A KPI on a dashboard is only trustworthy if every screen computes it the same way. Putting the rules in one place, on one governed model, makes the number traceable back to its records.

Step 1 · Problem

The situation

EHS work produces several kinds of record that belong together. An event happens at a site. A case is opened to manage it. Concerns are raised along the way, some of them before anything goes wrong. Over time, patterns across all of these become insights that leadership should act on. In most EHS systems these sit in separate modules and separate exports, so seeing one site's picture means joining them by hand.

That join is where numbers drift. When each report applies its own filter for what counts as open, overdue or closed, two dashboards can show two different figures for the same site in the same week. The Gensuite refresh attacked the same problem at the point of capture. Hexion's move to Palantir Foundry gave me the chance to fix it in the data model rather than in each report.

Step 2 · Constraints

Constraints

  • The people using it already work in Gensuite every day. A new tool that asked them to learn a new layout would compete with the system of record instead of supporting it.
  • KPIs and status labels feed management reporting, so they had to be computed the same way everywhere, from rules that a reviewer can read.
  • The ontology is shared with the wider Foundry migration, so changes go through a branch and a reviewed proposal before reaching main. Nothing ships by editing production directly.
  • EHS records are sensitive. Nothing from the tenant appears on this page: the view below is a mock-up with invented values.
Step 3 · What I did

What I built

The work has three layers. The ontology gives every EHS record a typed object with links to the records it relates to, so a case knows its events and an insight knows the concerns behind it. A single logic module computes every KPI and decides every status label from those objects. The widget only displays what the logic returns, so no screen carries a rule of its own.

  1. RecordsEHS source datacases, events, concerns
  2. Ontology12 object typestyped, linked, governed
  3. LogicKPI & statusone module, every rule
  4. ViewInsight Hub widgetGensuite-style layout
Figure 1 Records become typed, linked objects in the Foundry ontology. One logic module computes KPIs and status from those objects, and the widget only renders the result.

The core object types

Four of the twelve object types carry most of the story.

EventWhat happenedan incident or occurrence at a site
CaseHow it is managedownership, actions, status, due dates
ConcernWhat people raisedobservations and reported issues
InsightWhat it adds up toa pattern leadership should act on
Figure 2 The four core object types. Each is a typed object in the ontology, linked to the others so the widget can move from an insight to the records behind it.

The view

The widget follows the Gensuite pattern of KPI tiles above a status-coloured list, so an EHS user can read it without training. The mock-up below shows that layout. Every value in it is invented.

EHS Insight HubMock data
24Open cases
5Overdue
138Concerns, 30 days
86%Closed on time
CaseSiteTypeStatus
C-1042Site ANear missOverdue
C-1039Site CFirst aidDue this week
C-1031Site BProcess safetyAwaiting review
C-1027Site AEnvironmentalClosed
Figure 3 Illustrative mock-up of the widget layout: KPI tiles above a status list, as in Gensuite. Sites, case numbers and values are invented; no tenant data is shown.
Step 4 · Decisions

Decisions I made and why

  • I put every KPI and status rule in one logic module instead of inside each view. When the definition of overdue changes, it changes once, and every tile and list agrees.
  • I modelled insights as objects in the ontology, not as text in a report. That way an insight keeps its links to the concerns and events behind it, and anyone can trace the claim back to the records.
  • I copied the Gensuite layout on purpose. Familiarity was worth more than novelty for people who spend their day in the system of record.
  • I built on a branch and sent it through a merge proposal, the same review path as the rest of the Foundry migration, rather than editing the shared ontology directly.
Step 5 · Status

Where it stands

The ontology and widget are built and verified on a Foundry branch. On that branch, the 12 object types index 190 cases, 1,221 events, 11,546 concerns and 82 insights. The merge proposal that brings it to main is in review. I will update this page when it merges.

Cases
190
Events
1,221
Concerns
11,546
Insights
82
What it means for a leader

When a safety KPI reaches a review meeting, someone should be able to ask where it came from and get an answer in one click. Here each number comes from one rule in code, applied to typed records that link back to the events and concerns behind them.

← All case studies The RPT report series