feat(cra): Maßnahmen-Provenienz + Lizenzklasse je Normquelle
Jede Normreferenz einer Maßnahme wird lizenzklassifiziert (eu_law / public_domain / open / paid_reference) — paid-reference-Normen werden nur als Verweis geführt, nie im Text gespeichert (idea/expression). Kuratierte Maßnahmen tragen Tier 'core', KI-/Fallback-Maßnahmen 'review' (indikativ). Frontend zeigt Quellen-Badges + "indikativ"-Kennzeichnung. Methodik in docs-src/development/mapping-methodology.md (Szenario C, Due-Diligence). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -48,8 +48,23 @@ function FindingDetail({ f, measuresById }: { f: CRAFinding; measuresById: Recor
|
||||
return (
|
||||
<li key={mid} className="text-sm text-gray-700 dark:text-gray-200">
|
||||
<span className="font-medium">{m ? m.name : mid}</span>
|
||||
{m?.tier === 'review' && (
|
||||
<span title="KI-vorgeschlagen — mit DSB/Auditor verifizieren" className="ml-1 rounded bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300 px-1 py-0.5 text-[11px]">indikativ</span>
|
||||
)}
|
||||
{m?.description ? <span className="text-gray-500"> — {m.description}</span> : null}
|
||||
{m?.norm_refs?.length ? <span className="text-gray-400"> · {m.norm_refs.join(', ')}</span> : null}
|
||||
{m?.norm_sources?.length ? (
|
||||
<span className="mt-1 flex flex-wrap gap-1">
|
||||
{m.norm_sources.map((s) => (
|
||||
<span key={s.ref} title={s.label}
|
||||
className={`rounded px-1.5 py-0.5 text-[11px] ${
|
||||
s.license_class === 'paid_reference'
|
||||
? 'bg-amber-50 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300'
|
||||
: 'bg-emerald-50 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300'}`}>
|
||||
{s.ref}{s.license_class === 'paid_reference' ? ' · nur Verweis' : ''}
|
||||
</span>
|
||||
))}
|
||||
</span>
|
||||
) : (m?.norm_refs?.length ? <span className="text-gray-400"> · {m.norm_refs.join(', ')}</span> : null)}
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
|
||||
Reference in New Issue
Block a user