{{-- resources/views/logs/emision/index.blade.php --}} @php if (!function_exists('highlight_json')) { function highlight_json($json) { if (!is_string($json)) $json = json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); if (empty($json)) return '[Sin contenido]'; $formatted = json_encode(json_decode($json, true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); if ($formatted === null) $formatted = htmlspecialchars($json); $formatted = preg_replace('/"([^"]+)"\s*:/', '"$1":', $formatted); $formatted = preg_replace('/: "([^"]+)"/', ': "$1"', $formatted); $formatted = preg_replace('/: (\d+(\.\d+)?)/', ': $1', $formatted); $formatted = preg_replace('/: (true|false|null)/i', ': $1', $formatted); return '
' . $formatted . '
'; } } @endphp Logs de Emisión por PAS {{-- Bootstrap 5 + Icons (CDN) --}}
{{-- Header + Formulario --}}

Logs de Emisión por PAS

@if($pas && $date) {{ $prevDate }} {{ $nextDate }} @endif
@if($errorMessage)
{{ $errorMessage }}
@endif
@if($fileExists && $summary) {{-- KPIs + Toolbar sticky --}}

Entradas

{{ $summary['total_entries'] }}

Intentos (Emitir)

{{ $summary['emit_attempts'] }}

Pólizas generadas

{{ $summary['emit_success'] }}

Errores

{{ $summary['errors'] }}

Tasa de éxito

{{ $summary['success_rate'] }}%

Raw
@if(!empty($summary['top_paquetes']))
Top paquetes: @foreach($summary['top_paquetes'] as $paq => $cnt) Paquete {{ $paq }} ({{ $cnt }}) @endforeach
@endif
PAS {{ $pas }} Fecha {{ $date }}
{{-- Tabs de filtro --}}
{{-- Lista de entradas --}}
@foreach($entries as $i => $e) @php $facts = $e['facts'] ?? []; $badge = $e['type']==='result' ? ($e['error'] ? 'danger' : ($e['success'] ? 'success' : 'secondary')) : ($e['type']==='attempt' ? 'info' : 'secondary'); $label = $e['type']==='result' ? ($e['error'] ? 'Error' : ($e['success'] ? 'OK' : 'Resultado')) : ($e['type']==='attempt' ? 'Intento' : 'Info'); $req = is_array($e['request']) ? json_encode($e['request'], JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE) : (string) $e['request']; $res = is_array($e['response']) ? json_encode($e['response'], JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE) : (string) $e['response']; $resultadoTxt = strtoupper($facts['resultado'] ?? '—'); $obs = trim((string)($facts['observaciones'] ?? '')); @endphp

{{-- Ficha de hechos --}}
Resultado: {{ $resultadoTxt }} @if(!empty($facts['numero_poliza'])) Póliza: {{ $facts['numero_poliza'] }}@endif @if(!empty($facts['numero_propuesta'])) Propuesta: {{ $facts['numero_propuesta'] }}@endif @if(!empty($facts['patente'])) Patente: {{ $facts['patente'] }}@endif @if(!empty($facts['cuit_mask'])) CUIT: {{ $facts['cuit_mask'] }}@endif @if(!empty($facts['paquete'])) Paquete: {{ $facts['paquete'] }}@endif @if(isset($facts['prima'])) Prima: ${{ number_format((float)$facts['prima'],2,',','.') }}@endif @if(!empty($facts['vigencia_desde']) || !empty($facts['vigencia_hasta'])) Vigencia: {{ $facts['vigencia_desde'] ?? '—' }} → {{ $facts['vigencia_hasta'] ?? '—' }} @endif
@if($obs)
{{ $obs }}
@endif
{{-- REQUEST --}} @if($req)
REQUEST
{!! highlight_json($req) !!}
@endif {{-- RESPUESTA --}} @if($res)
RESPUESTA
{!! highlight_json($res) !!}
@endif
Ver bloque sin procesar
{{ $e['raw'] }}
@endforeach
@elseif($pas && $date && !$fileExists && !$errorMessage)
No hay log para {{ $date }} en el PAS {{ $pas }}.
@endif

* Datos sensibles (Tarjeta/CBU/CUIT/Documento/CVV) son ocultados automáticamente, dejando solo los últimos dígitos o con enmascarado intermedio.

{{-- Helper para colorear JSON en servidor --}} @php if (!function_exists('highlight_json')) { function highlight_json($jsonStr) { $escaped = htmlspecialchars($jsonStr, ENT_QUOTES, 'UTF-8'); // claves $escaped = preg_replace('/(".*?")(\s*:\s*)/u', '$1$2', $escaped); // strings $escaped = preg_replace('/:\s*(".*?")/u', ': $1', $escaped); // números $escaped = preg_replace('/:\s*(-?\d+(?:\.\d+)?)/u', ': $1', $escaped); // boolean $escaped = preg_replace('/:\s*(true|false)/ui', ': $1', $escaped); // null $escaped = preg_replace('/:\s*(null)/ui', ': $1', $escaped); return $escaped; } } @endphp