@extends('admin.layout') @section('title', __('admin.pipeline.title').' · '.__('admin.brand')) @section('content') @php $entityLabel = static function ($row): string { $entity = $row->entity ?? null; if ($entity && isset($entity->name)) { return (string) $entity->name; } return ($row->entity_type ?? '—').' #'.($row->entity_id ?? '—'); }; @endphp
{{ __('admin.pipeline.eyebrow') }}

{{ __('admin.pipeline.title') }}

{{ __('admin.pipeline.subtitle') }}

@csrf
@if (! $canonicalAutoApplyEnabled)
{{ __('admin.pipeline.lock_notice') }}
@endif
◈
{{ $metrics['pending_proposals'] }}{{ __('admin.pipeline.metrics.pending_proposals') }}
!
{{ $metrics['open_conflicts'] }}{{ __('admin.pipeline.metrics.open_conflicts') }}
✓
{{ $metrics['candidate_decisions'] }}{{ __('admin.pipeline.metrics.review_decisions') }}
↺
{{ $metrics['applied_decisions'] }}{{ __('admin.pipeline.metrics.applied_decisions') }}

{{ __('admin.pipeline.proposals.title') }}

{{ __('admin.pipeline.proposals.hint') }}

@forelse ($proposals as $proposal) @empty @endforelse
{{ __('admin.entity') }}{{ __('admin.field') }}{{ __('admin.value') }}{{ __('admin.source') }}{{ __('admin.confidence') }}{{ __('admin.status') }}
{{ $entityLabel($proposal) }}{{ $proposal->entity_type }} #{{ $proposal->entity_id }} {{ $proposal->field_key ?: '—' }} {{ json_encode(data_get($proposal->proposed_value, 'value', $proposal->proposed_value), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) }} {{ $proposal->source?->name ?? $proposal->producer_type }} {{ $proposal->confidence !== null ? number_format((float) $proposal->confidence * 100, 0).' %' : '—' }} {{ __('admin.pipeline.proposal_statuses.'.$proposal->status) }} {{ __('admin.open') }}
{{ __('admin.pipeline.proposals.empty') }}
@if ($proposals->hasPages()) @endif

{{ __('admin.pipeline.conflicts.title') }}

{{ __('admin.pipeline.conflicts.hint') }}

@forelse ($conflicts as $conflict) @empty @endforelse
{{ __('admin.entity') }}{{ __('admin.field') }}{{ __('admin.severity') }}{{ __('admin.status') }}{{ __('admin.detected') }}
{{ $entityLabel($conflict) }}{{ $conflict->entity_type }} #{{ $conflict->entity_id }} {{ $conflict->field_key }} {{ __('admin.pipeline.severities.'.$conflict->severity) }} {{ __('admin.pipeline.conflict_statuses.'.$conflict->status) }} {{ $conflict->detected_at?->diffForHumans() }} {{ __('admin.open') }}
{{ __('admin.pipeline.conflicts.empty') }}

{{ __('admin.pipeline.decisions.title') }}

{{ __('admin.pipeline.decisions.hint') }}

@forelse ($decisions as $decision) @empty @endforelse
{{ __('admin.entity') }}{{ __('admin.field') }}{{ __('admin.pipeline.decisions.reason') }}{{ __('admin.pipeline.decisions.score') }}{{ __('admin.status') }}{{ __('admin.pipeline.decisions.decided') }}
{{ $entityLabel($decision) }}{{ $decision->entity_type }} #{{ $decision->entity_id }} {{ $decision->field_key }} {{ $decision->reason_code }} {{ $decision->decision_score !== null ? number_format((float) $decision->decision_score, 3) : '—' }} {{ __('admin.pipeline.decision_statuses.'.$decision->status) }} {{ $decision->decided_at?->diffForHumans() }} {{ __('admin.open') }}
{{ __('admin.pipeline.decisions.empty') }}

{{ __('admin.pipeline.policies.title') }}

{{ __('admin.pipeline.policies.hint') }}

{{ $policies->count() }}
@forelse ($policies as $policy) @empty @endforelse
{{ __('admin.type') }}{{ __('admin.field') }}{{ __('admin.pipeline.policies.strategy') }}{{ __('admin.pipeline.policies.minimum_confidence') }}{{ __('admin.pipeline.policies.auto_apply') }}{{ __('admin.pipeline.policies.sources') }}
{{ __('admin.pipeline.entity_types.'.$policy->entity_type) }} {{ $policy->field_key }} {{ $policy->strategy }} {{ number_format((float) $policy->minimum_confidence * 100, 0) }} % {{ $policy->auto_apply ? __('admin.yes') : __('admin.no') }}
@foreach ((array) $policy->source_priorities as $source => $priority){{ $source }} {{ $priority }}@endforeach
{{ __('admin.pipeline.policies.empty') }}
@endsection