age()); } $pagosDB = \Illuminate\Support\Facades\DB::table('Ventas_Pagos') ->where('pedido_id', $ordenId) ->get(); $medios_pago = []; foreach ($pagosDB as $p) { $tipoMetodo = 'EFEC'; if ($p->metodo_pago === 'TARJETA_POS') $tipoMetodo = 'POS'; else if ($p->metodo_pago === 'YAPE_POS') $tipoMetodo = 'YAPE'; else if ($p->metodo_pago === 'PLIN_POS') $tipoMetodo = 'PLIN'; $medios_pago[] = [ 'tipo' => $tipoMetodo, 'monto' => $p->monto + $p->monto_propina, 'referencia' => '-' ]; } $payload = [ 'company_id' => $companyId, 'branch_id' => $branchId, 'serie' => $comprobanteReal ? $comprobanteReal->serie : 'T001', 'correlativo' => $comprobanteReal ? $comprobanteReal->correlativo : rand(1, 999999), 'fecha_emision' => $comprobanteReal ? date('Y-m-d', strtotime($comprobanteReal->fecha_emision)) : date('Y-m-d'), 'moneda' => 'PEN', 'forma_pago_tipo' => 'Contado', 'medios_pago' => !empty($medios_pago) ? $medios_pago : null, 'client' => $mappedCliente, 'detalles' => $mappedDetalles, 'enviar_sunat' => false, 'metodo_envio' => 'individual' ]; $baseUrlGo = config('services.sunat_go.base_url') ?? env('SUNAT_GO_BASE_URL'); $token = config('services.sunat_go.token') ?? env('SUNAT_GO_TOKEN'); if (!$baseUrlGo) { throw new \Exception("Configuración SUNAT_GO_BASE_URL no encontrada en el servidor."); } // Seleccionar endpoint y serie según el tipo solicitado // [FIX] Si no hay comprobante real, forzar nota-venta para evitar quemar correlativos de Boleta/Factura $tipoDocSolicitado = $request->query('tipo', 'nota-venta'); if ($comprobanteReal) { if ($comprobanteReal->tipo_documento_id == 2) { $tipoDocSolicitado = 'invoice'; } elseif ($comprobanteReal->tipo_documento_id == 1) { $tipoDocSolicitado = 'boleta'; } } elseif (in_array($tipoDocSolicitado, ['boleta', 'invoice'])) { \Illuminate\Support\Facades\Log::info("🛡️ [Ticket/Generar] Protegiendo correlativo. Cambiando $tipoDocSolicitado a nota-venta para previsualización."); $tipoDocSolicitado = 'nota-venta'; } $isNotaVenta = ($tipoDocSolicitado === 'nota-venta' || $tipoDocSolicitado === 'pre-cuenta'); $endpoint = ($tipoDocSolicitado === 'invoice') ? '/api/v1/invoices' : (($tipoDocSolicitado === 'boleta') ? '/api/v1/boletas' : '/api/v1/nota-ventas'); if (!$c