Optora

Ingestion

Drop the folder. Check the answers.

Every file is recognised from its own columns — a deterministic recogniser first, and a model only for a file nothing local can name, allowed one role from a fixed list. Nothing imports until a review screen has shown what each file will do, including the ones that will do nothing.

A folder of exports

Event logs, counter snapshots, tag archives, quality readings, order books — dropped as they are.

Recognised

Each file's role worked out from its own columns, and a saved mapping applied where one already fits.

Reviewed — nothing has imported yet

Data rows
1,204
Will import
1,191
Skipped, named in a CSV
13

Imported

Every figure downstream traces back to these rows — and the 13 that didn't parse are counted against it, not vanished.

Every five minutes

A scheduled export lands in a watched folder on a five-minute cycle — fast enough, because every decision here is the same at five minutes as at five seconds.

From inside your own network

A collector on your side of the firewall watches that folder or reads your historian's API. Optora receives outbound HTTPS and nothing else; no port opens.

From the ERP

A template — JSON, not code — pulls orders, item masters and stock through the same recogniser as a dropped folder. It may not compute, and a row that stops arriving is never read as cancelled.

The engine

The arithmetic, in full.

Where the shift wentOne 480-minute shift
Downtime — AvailabilitySpeed — PerformanceRejects — QualityPlanned break — not a loss

307.8 of the 450 planned minutes were fully productive — OEE 68.4%. The break narrows the denominator rather than counting as a loss; every other step is one of the three factors taking its share.

Each factor, and the ratio behind it.
FactorRatioValue
Availability405 / 4500.90
Performance19,440 / 24,3000.80
Quality12,312 / 12,9600.95
OEE0.90 × 0.80 × 0.950.684

12,960 units at an ideal 1.5 s each is 19,440 seconds of work against 24,300 of run time; 12,312 of them were good.

A measured zero is 100%. An unmeasured nothing is “No data”.

What each factor needs before it prints, and what happens to OEE when it cannot.
FactorNeedsOtherwise
AvailabilityPlanned secondsNo data
PerformanceRun time, and an ideal cycle time it actually sawNo data — and OEE goes with it
QualityUnits, and a reject source somebody mappedNo data — and OEE continues as A × P

Classification

The Six Big Losses, as rules.

LossFactorDefault rule
BreakdownsAvailabilityAn unplanned stop of ten minutes or more, with an equipment-related reason code.
Setup & ChangeoverAvailabilityAny event tagged as a changeover. Always this line's own work, so never cascade.
Minor StopsPerformanceAn unplanned stop under the ten-minute threshold.
Reduced SpeedPerformanceNot a discrete event — the gap between actual output and what the run time should have produced.
Startup RejectsQualityRejects within fifteen minutes of a stop turning back into a run.
Production RejectsQualityRejects during steady-state running, outside that startup window.

A starved stop is never a breakdown, however long it ran.

Length is evidence of severity, not of cause — so every loss also records whether it was this line's own fault or something upstream starving it.

Reduced Speed is the one loss deliberately not stored as an event — writing it out per-event would mean inventing a split across stops nobody measured.

Breakdown or minor stop is judged on the whole outage, not on each logged row.

One outage, graded whole: 15 min ≥ 10 min → Breakdown

JAM · 8 minNO_MATERIAL · 7 min

Row by row, both fragments sit under the threshold — a real breakdown would file as two minor stops.

The second half

Then it plans the work.

The same job, sized two waysA 25-hour job at the ideal rate
Line measured at
At the ideal rate
25 hAt the measured rate
45.5 h38.5 h33.3 h

The dashed rule is where the ideal-rate schedule promised delivery. The 20.513.58.3 hours past it were always going to happen — restating the plan at the measured rate admits it before the week starts.

Telling somebody

A finding nobody sees is not a finding.

A watch rule fires when a figure crosses its line and stays there for the dwell. Every message deliberately not sent gets a receipt. And the handover is written before the next shift arrives.

One rule, ten pollsScrap over 3% for 15 minutes · polled every 5
0
0
5
10
15
0
5

Ten polls, five minutes apart. One transient, over the line for a single poll: counted, never announced. One breach announced once, on the fourth reading over — when 15 minutes have been held. Then a clear, and a second breach on its own clock.

The AI

Where the model is, and where it is not.

The model is involved almost everywhere and is trusted with nothing that can be checked another way. That is not a compromise between the two; it is the design.

What it does

  • Writes the report, the handover, and what changed since you last looked
  • Groups your stop codes into named failure modes, glossed from your own manual
  • Suggests a reason for an unlabelled stop from this station's own history
  • Reads a photograph of an HMI or a handwritten shift sheet
  • Proposes an operating model for a plant that has not configured one
  • Argues for a schedule, and proposes scenarios from an outcome described in words
  • Answers a question about the plant or the plan, from figures the engine computed first
  • Drafts a watch rule from a sentence and backtests it before you save
  • Finds the theme in six sources of free text nobody was assigned to notice

What it never does

  • Produce a figure — every number is computed in code from your rows first, and the model's prose is checked back against the result before storage
  • Decide whether a finding is statistically significant
  • Write to your production record from a photograph or a note
  • Change a shift calendar, a loss rule, a threshold or a column mapping on its own — those four re-score numbers you have already published
  • Decide which rows count — an ERP template it authors may not carry a filter
  • Write a watcher's message — the sweep that fires a rule calls no model at all

Bring one export and check the arithmetic yourself.