{{ HEALTH.factory || 'Factory' }}
{{ shiftLabel }} · {{ clock }}
{{ n }}
{{ LIVE.status === 'live' ? 'LIVE' : LIVE.status === 'poll' ? 'POLL' : 'STREAM OFF' }}
edge→factory {{ LIVE.linkRx }}
{{ OV.data ? OV.data.kpis.RUNNING : '—' }}/{{ OV.data ? OV.data.kpis.machines_total : '—' }} online
{{ OV.data.kpis.critical_alarms }} critical
{{ OV.data.kpis.active_alarms }}
{{ AUTH.user || 'anonymous' }} ({{ AUTH.role }})
{{ TOAST.msg }}
Loading factory data…
{{ OV.error }}
{{ k.val }}
{{ k.lab }}
{{ k.sub }}
PRODUCTION FLOW (today) Molding → X-Ray → Packaging
{{ fmt(OV.data.flow.molding_cycles_today) }}
MOLDING CYCLES
{{ fmt(OV.data.flow.xray_inspected_today) }}
X-RAY INSPECTED
{{ fmt(OV.data.flow.xray_accepted_today) }}
ACCEPTED
{{ fmt(OV.data.flow.xray_rejected_today) }}
REJECTED
{{ OV.data.flow.packaging_status }}
PACKAGING
PRODUCTION & QUALITY / HOUR (24 h)
No data available
MACHINE MATRIX {{ OV.data.kpis.machines_total }} machines · click = details, no machine control
{{ m.serial }}
{{ m.state }}
{{ m.model || '—' }}{{ m.site || '' }}
Recipe: {{ m.recipe || '—' }}
Cycles: {{ m.cycles_today }}
Alarms: {{ m.active_alarms }}
OEE: No data{{ m.hb_age_s!==null ? fmtAge(m.hb_age_s) : 'hb: —' }}
AI OVERVIEW
AI model not configured
Nema aktivnih predikcija — sustav ne generira lažne AI preporuke.
freshness: {{ new Date(OV.data.generated_at).toLocaleTimeString() }} · query {{ OV.data.query_ms }} ms ·
sources: {{ Object.values(OV.data.sources).join(', ') }}
· last error: {{ OV.error }}
MACHINES total {{ MA.data.total }}
Loading…
{{ MA.error }}
| Machine | Model | Site | Customer | Recipe | State | Heartbeat | Cycles today | Alarms |
|---|---|---|---|---|---|---|---|---|
| {{ m.serial }} | {{ m.model || '—' }} | {{ m.site || '—' }} | {{ m.customer || '—' }} | {{ m.recipe || '—' }} | {{ m.state }} | {{ m.hb_age_s!==null ? fmtAge(m.hb_age_s) : '—' }} | {{ m.cycles_today }} | {{ m.active_alarms }} |
| No machines match filters | ||||||||
{{ fmt(AL.data.analytics.kpis.active) }}
ACTIVE ALARMS
{{ AL.data.analytics.kpis.critical }}
CRITICAL
{{ AL.data.analytics.kpis.unacknowledged }}
UNACKNOWLEDGED (dashboard)
{{ AL.data.analytics.kpis.last_24h }}
ALARM EVENTS 24 H
ALARM TIMELINE (24 h)
No alarm events in last 24 h
PARETO — NAJČEŠĆI ALARMI (24 h)
No data available
ACTIVE ALARMS ACK = operator je vidio alarm (nije PLC reset)
Loading…
{{ AL.error }}
| Time | Machine | Tag | Name | Priority | Value / Limit | ACK | |
|---|---|---|---|---|---|---|---|
| {{ new Date(a.ts).toLocaleString() }} | {{ a.machine_id }} | {{ a.tag }} | {{ a.name || a.message }} | {{ a.priority || '—' }} | {{ a.value }} / {{ a.limit }} | {{ a.ack.acked_by }} ✓ UNACK | |
| No active alarms | |||||||
Loading production data…
{{ PR.error }}
{{ k.val }}
{{ k.lab }}
{{ k.sub }}
OUTPUT & CYCLE TIME / HOUR (24 h)
No data available
PRODUCTION BY MACHINE (today)
{{ b.machine_id }}
{{ b.cycles }} cyc · {{ b.avg_s }} s
No data available
PARETO — ALARM EVENTS (24 h) proxy za zastoje · downtime izvor: Not configured
No alarms in last 24 h
BATCHES (today) latest {{ PR.data.batches.length }}
| Batch | Recipe | Mould | Cycles | Avg cycle | First | Last |
|---|---|---|---|---|---|---|
| {{ b.batch_id }} | {{ b.recipe || '—' }} | {{ b.mould || '—' }} | {{ b.cycles }} | {{ b.avg_s }} s | {{ new Date(b.first).toLocaleTimeString() }} | {{ new Date(b.last).toLocaleTimeString() }} |
No batches today
freshness: {{ new Date(PR.data.generated_at).toLocaleTimeString() }} · query {{ PR.data.query_ms }} ms ·
sources: {{ Object.values(PR.data.sources).join(', ') }}
Loading…
{{ TW.error }}
MATERIAL FLOW — STVARNE PROTOČNOSTI (danas)
queue {{ fmt(TW.data.queues[i-1].units) }}
{{ TW.data.queues[i-1].note }} {{ TW.data.queues[i-1].note }}
{{ TW.data.queues[i-1].note }} {{ TW.data.queues[i-1].note }}
{{ st.name }}
{{ st.status==='live' ? 'LIVE' : 'NOT CONFIGURED' }}
{{ fmt(st.today) }}
današnji output · {{ fmt(st.per_hour) }}/h
avg cycle {{ st.avg_cycle_s }} s
avg ADR {{ fmt(st.avg_inference_ms) }} ms
No data source
(packaging line nije spojena)
(packaging line nije spojena)
BOTTLENECK
{{ TW.data.bottleneck }}
No data available
iz stvarnih satnih protočnosti
WHAT-IF SIMULACIJA (§15.3)
{{ TW.data.whatif.note }}
Simulation only – no machine parameters will be changed
CLOSED LOOP (§15.4)
Molding → X-Ray → ADR/AI → Recipe preporuka.
Optimizacija recepta je preporuka — nema automatskog write-backa prema stroju.
Loading…
{{ QL.error }}
X-RAY QUEUE (ukupno)
REVIEW
{{ fmt(QL.data.kpis.queue.pending_review) }}
{{ fmt(QL.data.kpis.queue.pending_review) }}
ACCEPT
{{ fmt(QL.data.kpis.queue.accepted) }}
{{ fmt(QL.data.kpis.queue.accepted) }}
REJECT
{{ fmt(QL.data.kpis.queue.rejected) }}
{{ fmt(QL.data.kpis.queue.rejected) }}
AI/ADR status · {{ fmt(QL.data.kpis.queue.total) }} inspekcija
DANAS
ACCEPT {{ fmt(QL.data.kpis.today.accept) }}
REJECT {{ fmt(QL.data.kpis.today.reject) }}
REVIEW {{ fmt(QL.data.kpis.today.review) }}
FPY {{ QL.data.kpis.first_pass_yield_pct !== null ? QL.data.kpis.first_pass_yield_pct + ' %' : 'No data' }}
· reject {{ QL.data.kpis.reject_pct !== null ? QL.data.kpis.reject_pct + ' %' : 'No data' }}
NDT ODLUKE
{{ r }}: {{ c }}
Još nema NDT odluka
Konačni Accept/Reject: Quality/NDT uloge
DEFECT PARETO (tip × ADR status)
{{ d.type }}
{{ d.status }}
{{ fmt(d.count) }}
No indications data
24 H INSPEKCIJE PO SATU
No inspections in last 24h
TRACEABILITY (§17.6) — shot → proces → X-ray → ADR → NDT
{{ QL.trace.error }}
No data for shot {{ QL.trace.shot_id }}
PROCES: cycle {{ (c.cycle_time_ms/1000).toFixed(1) }} s · {{ fmt(c.max_pressure_bar) }} bar · {{ fmt(c.mean_piston_velocity_m_s) }} m/s · batch {{ c.batch_id || '—' }} · mould {{ c.mould_id || '—' }} · recipe {{ c.recipe_id || '—' }}
X-RAY: {{ x.ai_result }}
conf {{ fmt(x.confidence) }} % · model {{ x.model || '—' }} · stroj {{ x.machine || '—' }} · {{ fmtAge(x.created_at) }}
· {{ x.indications.length }} indicacija
NDT: {{ n.result }} by {{ n.user_id }} ({{ n.role }}) {{ fmtAge(n.ts) }} — {{ n.comment }}
ZADNJIH 50 INSPEKCIJA
| Shot | Stroj | Batch | Part | ADR | Conf % | Model | ADR ms | Kad | NDT odluka |
|---|---|---|---|---|---|---|---|---|---|
| {{ x.shot_id }} | {{ x.machine || '—' }} | {{ x.batch_id || '—' }} | {{ x.part_id || '—' }} | {{ x.ai_result }} | {{ fmt(x.confidence) }} | {{ x.model || '—' }} | {{ fmt(x.inference_ms) }} | {{ fmtAge(x.created_at) }} |
NDT Accept/Reject je vidljiv samo Quality/NDT/admin ulogama (§17.7).
X-RAY VIEWER
{{ QL.data.viewer.note }}
loading…
shot {{ r.shot_id }}
{{ r.ai_result }}
Loading…
{{ AI.error }}
AI model not configured
{{ AI.data.note }}
Bez lažnih predikcija (§16) — acknowledge/explainability UI aktivira se automatski kad model počne pisati predikcije.
ACTIVE PREDICTIONS
{{ fmt(AI.data.kpis.active) }}
HIGH RISK (4 h, ≥70 %)
{{ fmt(AI.data.kpis.high_risk_4h) }}
STATUS
LIVE
PREDIKCIJE
| Kad | Stroj | Tip | Rizik % | Horizont min | Conf % | Model | Ack |
|---|---|---|---|---|---|---|---|
| {{ fmtAge(p.ts) }} | {{ p.machine_id }} | {{ p.kind }} | {{ fmt(p.risk_pct) }} | {{ fmt(p.horizon_min) }} | {{ fmt(p.confidence) }} | {{ p.model }} {{ p.model_version }} | {{ p.acked_by ? p.acked_by : '—' }} |
Loading…
kWh (24H)
{{ EN.data.kpis.kwh_24h }}
AVG POWER
{{ (EN.data.kpis.avg_power_w/1000).toFixed(2) }} kW
PEAK POWER
{{ (EN.data.kpis.peak_power_w/1000).toFixed(2) }} kW
READINGS (24H)
{{ EN.data.kpis.readings_24h }}
kWh PO SATU (24H)
PO STROJU
| Stroj | kWh (24h) | Avg W | Peak W | Readings |
|---|---|---|---|---|
| {{ m.machine_id }} | {{ m.kwh_24h }} | {{ m.avg_w }} | {{ m.peak_w }} | {{ m.readings }} |
{{ EN.data.note }}
Energy metering — Not configured
{{ EN.data.note }}
Potrebni izvori (§18):
• {{ r }}
KPI-jevi (kW, kWh, CO₂, €/kom) prikazat će se kad mjerenja postoje — bez izmišljenih vrijednosti.
SHOT {{ QIMG.shot }} — X-RAY
Učitavanje slike…
{{ QIMG.err }}
GENERIRANJE
iz stvarnih production/quality/alarm podataka · reportlab PDF + UTF-8 CSV
{{ RP.error }}
REPORT LIBRARY
Loading…
Nema generiranih izvještaja
| Naziv | Tip | Period | Status | Format | Veličina | Checksum | Generirao | Odobrio | ↓ | Akcije |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.name }} | {{ r.kind }} | {{ r.period }} | {{ r.status }} | {{ r.format }} | {{ fmt(r.size_bytes) }} B | {{ (r.checksum||'').slice(0,10) }}… | {{ r.created_by }} | {{ r.approved_by || '—' }} | {{ fmt(r.downloads) }} |
Izvještaji se spremaju na S3 objektni storage (object_key s3:…) uz sha256 checksum i lokalni fallback; audit bilježi generiranje/odobrenje/preuzimanje (§19.5). XLSX (openpyxl) dostupan preko XLSX gumba ili ?fmt=xlsx (§19.3).
{{ pageMeta.title }}
{{ pageMeta.note }}
Planirani izvor podataka: {{ pageMeta.src }}