Skip to main content

incident-brief-pdf

Build the downloadable incident brief PDF — cover + KPI strip + OEE chart + downtime timeline + root-cause narrative + supplier/material signals + recommended actions + sign-off, per SOP §7.1. Renders via the inline HTML template + Playwright.

الانتقال إلى التثبيت

معلومات المصدر

المستودع
aiappsgbb/kratos-agent
آخر نشاط في المصدر
٩ يونيو ٢٠٢٦ في ١٤:٥٣
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٢٤
التفرعات
٢٢

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
3 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
incident-brief-pdf
description
Build the downloadable incident brief PDF — cover + KPI strip + OEE chart + downtime timeline + root-cause narrative + supplier/material signals + recommended actions + sign-off, per SOP §7.1. Renders via the inline HTML template + Playwright.
enabled
true
## Instructions Use this skill when Frank asks for "the brief", "the PDF", "send it to Wes", or any variation. This is the **deliverable** the persona exists to produce, and per SOP §7 it is **required** for any §4.3-or-above escalation. ### Workflow 1. **Gather the data** by chaining other skills first: - OEE 7-day trend via `iot_get_oee` (plant, line, date_from=7d-ago) - Downtime events via `iot_list_downtime_events` (plant, line, since=7d-ago) - Device twin via `iot_get_device` (the equipment in the headline) - Telemetry window via `iot_get_telemetry` (the spindle, last 72h) - Production order via `sap_get_production_order` (the `related_po_id` from downtime) - Vendor via `sap_get_vendor` (the supplier blamed in the PO, with `blocked_for_posting` flag) - Supervisor + manager via `workday_get_employee` (Frank + Wes, for sign-off block) 2. **Read the policy** via the **plant-policy-reference** skill — §7.1 defines the contents and order; do not deviate. 3. **Read the chart** that **oee-analysis** already generated at `/tmp/oee-trend-<plant>-line-<N>-<date>.png`. If it doesn't exist yet, generate it before continuing. 4. **Render** by invoking `scripts/render_incident_brief.py` via `code_interpreter`. Pass the gathered data as a single JSON blob: ```bash python /app/use-cases/plant-floor-supervisor/skills/incident-brief-pdf/scripts/render_incident_brief.py \ --plant-id P-CLE \ --line "Line 3 — Precision" \ --date 2026-06-09 \ --data-json '<JSON with headline, kpis, downtime, narrative, supplier, recommendations, signoff>' \ --chart-path /tmp/oee-trend-p-cle-line-3-2026-06-09.png \ --out /tmp/line-3-incident-brief-2026-06-09.pdf ``` 5. **Confirm in chat:** "Incident brief saved to `/tmp/line-3-incident-brief-2026-06-09.pdf` — N pages, includes OEE chart, M downtime events, root-cause narrative, K recommended actions." Reference the path so **file-sharing** picks it up. 6. **Offer the natural next step:** "Want me to log the maintenance work order against DEV-3001 and draft Wes the cover email?" — handoff to **servicenow** (work order) + **m365-graph** (email). Do NOT auto-start writes. ### Assets - `assets/incident-brief.html` — HTML template, navy/gold Olympus theme. Self-contained CSS, embeds the chart as base64 PNG, generates the §7 sections in order. ### data-json shape (what `render_incident_brief.py` expects) ```json { "headline": "Line 3 Precision Spindle — vibration alarm + 4 micro-stops", "kpis": { "oee_pct": 49, "target_oee_pct": 80, "vs_target_pct": -31, "wow_delta_pp": -10, "downtime_minutes_period": 142 }, "downtime": [ {"id": "DT-3004", "started_at": "...", "duration_minutes": 28, "cause_code": "VIB_ALARM", "lot_id": null, "related_po_id": "PO-9003"}, "..." ], "device": { "id": "DEV-3001", "display_name": "CLE-L3-SPINDLE-01", "vendor": "Siemens", "model": "SINAMICS S210", "status": "Warning", "status_note": "...", "latest_vibration_mm_s": 5.4, "vibration_threshold_mm_s": 4.5 }, "production_order": { "id": "PO-9003", "material": "MAT-201 — Model A", "qty_produced": 120, "qty_ordered": 150, "qty_scrap": 30, "scrap_pct": 20.0, "status": "Issue", "issue": "..." }, "supplier": { "id": "V-1201", "name": "Northbridge", "blocked_for_posting": true, "block_reason": "Quality hold pending QA dispute (May 2026)", "rejected_lots": ["Q-NB-44193", "Q-NB-44197"] }, "narrative": "Two-paragraph free-text narrative …", "recommendations": [ "Log P2 maintenance work order against CI-DEV-3001 with Plant Maintenance", "Quarantine remaining Northbridge lots on the floor (per SOP §5.3)", "Reassign Devon to Line 1 backfill until spindle is inspected", "Escalate to QA Cleveland lead (cc on brief, per §4.3)" ], "signoff": { "supervisor_name": "Frank Delgado", "supervisor_email": "frank.delgado@…", "manager_name": "Wesley Park", "manager_email": "wesley.park@…" } } ``` ### Constraints - **Always include all §7.1 sections in order.** If a section has nothing to report (e.g. no supplier signal), print "None this period" — do not skip the heading. - The chart must be the one **oee-analysis** generated, not a re-render — keeps the PDF consistent with what Frank already saw in chat. - File size budget: < 2 MB. If the chart pushes over, drop to 100 DPI. - **Do not auto-send.** Building the PDF is allowed; emailing it is a write and must go through **m365-graph** (email section). ### When NOT to use - For a verbal summary of what's happening on the floor — answer inline, don't render a PDF. - For interim numbers (line still running, no §4.3 trigger) — answer inline. - Per SOP §7 a brief is only required for §4.3 or above — don't generate one for a 5-minute stop.
عرض على GitHub