feat(iace): CE-Flag auf Komponenten + AIAG-VDA Action Priority (AP)
Build + Deploy / build-admin-compliance (push) Successful in 1m54s
Build + Deploy / build-backend-compliance (push) Successful in 11s
Build + Deploy / build-ai-sdk (push) Successful in 10s
Build + Deploy / build-developer-portal (push) Successful in 11s
Build + Deploy / build-tts (push) Successful in 12s
Build + Deploy / build-document-crawler (push) Successful in 11s
Build + Deploy / build-dsms-gateway (push) Successful in 11s
Build + Deploy / build-dsms-node (push) Successful in 12s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 15s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m25s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Successful in 41s
CI / test-python-backend (push) Successful in 37s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 21s
CI / validate-canonical-controls (push) Successful in 14s
Build + Deploy / trigger-orca (push) Successful in 2m14s

CE-Flag:
- Toggle "Bereits CE-gekennzeichnet" im ComponentForm
- ce_marked Boolean auf Component (via metadata JSONB, kein DB-Change)
- Hinweis "(Nur Schnittstellen bewerten)" im Formular

AIAG-VDA Action Priority:
- CalculateAP(S,O,D) → H/M/L nach AIAG-VDA FMEA Handbuch 2019
- AP-Spalte in FMEA-Worksheet: H=rot, M=gelb, L=grün
- Ergänzt (nicht ersetzt) die bestehende RPZ-Berechnung

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-12 09:15:43 +02:00
parent f5664612ad
commit 4e865d2997
5 changed files with 83 additions and 0 deletions
@@ -28,6 +28,15 @@ export interface FMEARow {
occurrence: number
detection: number
rpz: number
ap: 'H' | 'M' | 'L'
}
/** AIAG-VDA Action Priority (2019 Handbook) */
export function calculateAP(s: number, o: number, d: number): 'H' | 'M' | 'L' {
if (s >= 9) return (o >= 4 || d >= 7) ? 'H' : (o >= 2 || d >= 5) ? 'M' : 'L'
if (s >= 7) return (o >= 5 || d >= 8) ? 'H' : (o >= 3 || d >= 5) ? 'M' : 'L'
if (s >= 5) return (o >= 7 || d >= 9) ? 'H' : (o >= 4 || d >= 7) ? 'M' : 'L'
return (o >= 8 && d >= 9) ? 'H' : (o >= 6 || d >= 8) ? 'M' : 'L'
}
export function useFMEA(projectId: string) {
@@ -99,6 +108,7 @@ export function useFMEA(projectId: string) {
occurrence: o,
detection: d,
rpz: s * o * d,
ap: calculateAP(s, o, d),
})
}
}
@@ -79,6 +79,7 @@ export default function FMEAPage() {
<th className="px-3 py-2.5 text-center text-xs font-medium text-gray-500 uppercase w-12">O</th>
<th className="px-3 py-2.5 text-center text-xs font-medium text-gray-500 uppercase w-12">D</th>
<th className="px-3 py-2.5 text-center text-xs font-medium text-gray-500 uppercase w-16">RPZ</th>
<th className="px-3 py-2.5 text-center text-xs font-medium text-gray-500 uppercase w-12">AP</th>
<th className="px-3 py-2.5 text-left text-xs font-medium text-gray-500 uppercase">Bewertung</th>
<th className="px-3 py-2.5 text-left text-xs font-medium text-gray-500 uppercase">Erkennung</th>
</tr>
@@ -121,6 +122,15 @@ function FMEATableRow({ row }: { row: FMEARow }) {
{row.rpz}
</span>
</td>
<td className="px-3 py-2.5 text-center">
<span className={`inline-flex items-center px-2 py-1 rounded text-xs font-bold ${
row.ap === 'H' ? 'bg-red-600 text-white' :
row.ap === 'M' ? 'bg-yellow-500 text-white' :
'bg-green-500 text-white'
}`}>
{row.ap}
</span>
</td>
<td className="px-3 py-2.5">
<span className={`text-xs px-2 py-0.5 rounded-full ${color}`}>{rpzLabel(row.rpz)}</span>
</td>