Inspection Sticker Pipeline — Operations
Automated pipeline that turns a German vehicle inspection-sticker photo (arriving by email) into a vehicle-record update in the et-operational-platform fleet system.
- Origin: et-operational-platform PR #1113 · infra setup tracked in radieu/p24-infra#2197
- n8n workflow:
Inspection Sticker Processor(idfjfO358D1NCVWrOJ, bms-4) — see inspection-sticker-processor.md - Status: ⏸ inactive — awaiting human validation with one real test email before activation
Architecture
radieu@gmail.com (inspection sticker photo)
│ Gmail Trigger (poll 5 min)
▼
n8n "Inspection Sticker Processor" (bms-4)
│ Parse → Wasabi upload → Claude Vision → build payload
▼
POST {INSPECTION_WEBHOOK_URL} (x-webhook-secret: {INSPECTION_WEBHOOK_SECRET})
▼
et-operational-platform /api/webhooks/inspection-sticker → Supabase vehicle record
Dependencies
| Component | Detail |
|---|---|
| n8n | bms-4 — https://n8n.bms-4.infra.zintegrowana.online |
| Gmail | radieu@gmail.com (OAuth credential P1dYU1OR6Z1qQ0Zu) |
| Wasabi | bucket p24-infra, endpoint s3.eu-central-2.wasabisys.com, prefix inspections/ (credential DC7VuNYMdVTDjjQF) |
| Claude Vision | Anthropic claude-sonnet-4-6, key $env.ANTHROPIC_API_KEY on bms-4 |
| Webhook target | et-operational-platform ($env.INSPECTION_WEBHOOK_URL) |
| Secrets | INSPECTION_WEBHOOK_SECRET + INSPECTION_WEBHOOK_URL in secrets/n8n-bms4.env.sops (PR #2230), synced to bms-4 .env |
Runbook
- Activate (after validation):
/n8n activate fjfO358D1NCVWrOJor n8n UI → toggle Active. - Disable in an incident:
/n8n deactivate fjfO358D1NCVWrOJ. - Per-execution failures (webhook not
ok:true) emailecotrans.automation@gmail.comvia theNotify Failure (email)node (SMTP credential). - Inspect runs: n8n UI → Executions for workflow
fjfO358D1NCVWrOJ. - Secret rotation: rotate
INSPECTION_WEBHOOK_SECRETinsecrets/n8n-bms4.env.sops, run secrets-sync to bms-4, and update the matching value on the et-operational-platform side (shared secret).
Pre-activation validation checklist
Activation is a human gate (production vehicle writes + real Gmail polling). Confirm with one test email:
- Gmail Trigger emits a parseable
subject/from/ body for the Parse Email node. - The image attachment is exposed as binary
attachment_0(adjust if n8n names it otherwise). $('Parse Email').item.binary.attachment_0.dataresolves to base64 for the Claude Vision call.- et-op webhook returns
{ "ok": true }; the false branch emails on failure.
Compliance
dev_r_services— row added for this workflow (compliance_workbook=yes, workbook = this doc).- EU AI Act — this workflow uses an AI system (Claude Vision for sticker OCR). Before activation,
register it in
dev_r_ai_systemsand add it to eu-ai-act-compliance.md (Annex III obligations apply where the extracted data drives fleet-compliance decisions). Tracked as a follow-up on #2197.