{{-- Control Variables --}} @php // Imports use Carbon\Carbon; use App\Helpers\Database\SatCatalogsHelper; use App\Helpers\Support\PdfResourcesHelper; use App\Helpers\Support\TaxCertificateHelper; use App\Helpers\Formats\FormatCurrencyHelper; use App\Helpers\Formats\QuantityConverterHelper; use App\Enums\Invoicing\BillableService; use App\Helpers\Formats\TextTransformHelper; // Variables // Classes $contrast_color = PdfResourcesHelper::getTextContrastColor($invoice->taxFormat->base_color ?? "#0D6889"); // Header $tax_folio = $invoice->sat_uuid ?? "0000XXXX-00XX-00XX-00XX-000XXX"; //TODO $cds_issuer = TaxCertificateHelper::serialHexToSatCertificateNumber($issuer->cer_serial_number); $emission_date = Carbon::parse($invoice->date)->format('d/m/Y H:i:s'); $certification_date = Carbon::parse($invoice->certification_date ?? "2099-01-01")->format('d/m/Y H:i:s'); $serie_folio = ($invoice->taxFormat->serie ?? $invoice->invoice_type)."-X"; if (!in_array(null, [$invoice->system_service_id, $invoice->system_service_type], true)) { $label = BillableService::labelFrom($invoice->system_service_type); if ($label) $serie_folio .= " | ".$label." #{$invoice->system_service_id}"; } @endphp {{ $title }} @include('invoicing.invoices.pdf.resources.invoice-styles') {{-- Watermark --}}
PREVIEW
{{-- Header --}}
{{-- Logo --}}
{{-- Footer --}} {{-- Content --}}
{{-- Receiver - Issuer - CFDI Data --}}
{{-- Issuer & Receiver Data --}}
{{-- Issuer (RFC) --}} {{-- Issuer (Name) --}} {{-- Receiver (RFC) --}} {{-- Receiver (Name) --}} {{-- Receiver (CP) --}} {{-- Receiver (Tax System) --}} {{-- Receiver (CFDI Use) --}}
RFC emisor: {{ $issuer->tax_id }}
Nombre emisor: {{ $issuer->legal_name }}
RFC receptor: {{ $invoice->receptor->tax_id }}
Nombre receptor: {{ $invoice->receptor->legal_name }}
Código postal del receptor: {{ $invoice->receptor->zip }}
Régimen fiscal del receptor: {{ SatCatalogsHelper::getItem('c_RegimenFiscal', $invoice->receptor->tax_system, false) }}
Uso de CFDI: {{ SatCatalogsHelper::getItem('c_UsoCFDI', $invoice->cfdi_use, false) }}
{{-- CFDI Data --}}
{{-- Invoice (SAT UUID) --}} {{-- Invoice (CSD Number) --}} {{-- Invoice (Series & Folio) --}} {{-- Issuer (CP) --}} {{-- Invoice (Emission Date) --}} {{-- Invoice (Type) --}} {{-- Issuer (Tax System) --}} {{-- Invoice (Export) --}} @if (in_array($invoice->invoice_type, ['I', 'E'])) @endif
Folio fiscal: {{ $tax_folio }}
No. de serie del CSD: {{ $cds_issuer }}
Serie y folio: {{ $serie_folio }}
Código postal del emisor: {{ $issuer->zip }}
Fecha y hora de operación: {{ $emission_date }}
Efecto de Comprobante: {{ SatCatalogsHelper::getItem('c_TipoDeComprobante', $invoice->invoice_type, false) }}
Régimen Fiscal: {{ SatCatalogsHelper::getItem('c_RegimenFiscal', $issuer->tax_system, false) }}
Exportación: {{ SatCatalogsHelper::getItem('c_Exportacion', $invoice->export, false) }}
{{-- Concepts --}}
{{-- Control Variables --}} @php $federal_tax_config = [ [ 'label' => 'IVA', 'type' => 'Traslado', 'rate_path' => 'taxes.iva.rate', 'charge_path'=> 'taxes.iva', ], [ 'label' => 'IEPS', 'type' => 'Traslado', 'rate_path' => 'taxes.ieps.rate', 'charge_path'=> 'taxes.ieps', ], [ 'label' => 'ISR', 'type' => 'Retención', 'rate_path' => 'withholding_taxes.isr.rate', 'charge_path'=> 'withholding_taxes.isr', ], [ 'label' => 'IVA', 'type' => 'Retención', 'rate_path' => 'withholding_taxes.iva.rate', 'charge_path'=> 'withholding_taxes.iva', ], ]; @endphp {{-- Title --}}

Conceptos:

{{-- Concepts Summary --}} @foreach ($invoice->taxItems as $concept) {{-- Fiscal Data --}} {{-- Taxes & Description --}} @php // Normalizar impuestos federales $federal_taxes = (array) ($concept->tax_profile ?? []); $federal_tax_charges = (array) ($concept->tax_charges_summary ?? []); @endphp {{-- Description --}} {{-- Taxes --}} {{-- Separator --}} @if (!$loop->last) @endif @endforeach
Clave del Producto y/o Servicio Cantidad Clave de Unidad Unidad Valor Unitario Importe Descuento Objeto Impuesto
{{ $concept->prod_serv_key }} {{ $concept->quantity }} {{ $concept->unit_key }} {{ SatCatalogsHelper::getUnit($concept->unit_key, false) }} {{ number_format($concept->unit_price, 6) }} {{ number_format($concept->subtotal, 6) }} {{ number_format($concept->discount_total, 6) }} {{ SatCatalogsHelper::getItem('c_ObjetoImp', $concept->object_tax, false) }}
Descripción {{ $concept->name }}
@if (!in_array($concept->description, [__('neutral_words')['none'], __('neutral_words')['none_2']])) {{ mb_strtoupper($concept->description) }}
@endif
@if ($concept->object_tax === '04') @else @foreach ($federal_tax_config as $tax) @php $rate = data_get($federal_taxes, $tax['rate_path']); $charge = data_get($federal_tax_charges, $tax['charge_path']); $base = null; if (!is_null($rate) && !is_null($charge)) { $rateNum = (float) $rate; $chargeNum = (float) $charge; $base = ($rateNum != 0.0) ? ($chargeNum / $rateNum) : 0.0; } @endphp @if (!is_null($rate)) @endif @endforeach @endif
Impuestos Tipo Base Tipo Factor Tasa o Cuota Importe
IVA Trasladado Exento {{ number_format($invoice->subtotal, 6) }} {{ QuantityConverterHelper::str_toStrPercentage(0.0) }} {{ number_format(0.0, 6) }}
{{ $tax['label'] }} {{ $tax['type'] }} {{ number_format($base, 6) }} Tasa {{ QuantityConverterHelper::str_toStrPercentage($rate) }} {{ number_format($charge, 6) }}
 
{{-- Totals & Payment Data --}}
{{-- Payment Data --}}
{{-- Head Spacemen --}} {{-- Body --}} {{-- Currency --}} {{-- Currency --}} {{-- Currency --}}
 
Moneda: {{ SatCatalogsHelper::getItem('c_Moneda', $invoice->currency, false) }}
Forma de pago: {{ SatCatalogsHelper::getItem('c_FormaPago', $invoice->payment_form, false) }}
Método de pago: {{ SatCatalogsHelper::getItem('c_MetodoPago', $invoice->payment_method, false) }}
{{-- Totals & Federal Taxes Breakdown --}}
{{-- Head Spacemen --}} {{-- Body --}} {{-- Subtotal --}} {{-- Taxes Breakdown --}} @php $federal_tax_profile = []; // Group concepts taxes by tax foreach ($invoice->taxItems as $item) { $profile = $item->tax_profile ?? []; $charges = $item->tax_charges_summary ?? []; if ($item->object_tax === "04") { $federal_tax_profile["IVA_Trasladado_Exento"] = [ 'label' => "IVA", 'type' => "Exento", 'rate' => 0.00, 'charge' => 0.0, ]; } else { foreach ($federal_tax_config as $ftx) { $rate = data_get($profile, $ftx['rate_path']); $charge = data_get($charges, $ftx['charge_path']); if ($rate === null || $charge === null) continue; $key = $ftx['label'] . '_' . $rate; if (!isset($federal_tax_profile[$key])) { $federal_tax_profile[$key] = [ 'label' => $ftx['label'], 'type' => $ftx['type'], 'rate' => $rate, 'charge' => 0 ]; } $federal_tax_profile[$key]['charge'] += $charge; } } } @endphp {{-- Total --}}
 
Subtotal {{ FormatCurrencyHelper::formatCurrency($invoice->subtotal, $invoice->currency) }}
Impuestos {{-- Head Spacemen --}} {{-- Body --}} @foreach ($federal_tax_profile as $label => $ftx_profile) @endforeach
{{ $ftx_profile['label'] }} {{ $ftx_profile['type'] }} {{ QuantityConverterHelper::str_toStrPercentage($ftx_profile['rate']) }} {{ FormatCurrencyHelper::formatCurrency($ftx_profile['charge'], $invoice->currency) }}
Total {{ FormatCurrencyHelper::formatCurrency($invoice->total, $invoice->currency) }}
{{-- Related Documents --}} @if ($invoice->related_documents) {{-- Title --}}

Documentos Relacionados:

@foreach ($invoice->related_documents as $rd) @php $relation_type = collect($document_relations) ->firstWhere('item_key', $rd->relation_type)?->label; @endphp @endforeach
Tipo de Relación Folio Fiscal Relacionado
{{ TextTransformHelper::trimText($relation_type, 35) }} {{ $rd->uuid }}
@endif {{-- Local Taxes Complement --}} @php // Normalizar impuestos locales siempre a objeto con propiedades $ltx_summary = is_array($invoice->local_taxes) ? (object) $invoice->local_taxes : ($invoice->local_taxes ?? (object)[]); $transferred = collect(data_get($ltx_summary, 'transferred', [])); $withheld = collect(data_get($ltx_summary, 'withheld', [])); $ltx_tr_total = $transferred->sum(fn ($item) => (float) data_get($item, 'charge', 0)); $ltx_rt_total = $withheld->sum(fn ($item) => (float) data_get($item, 'charge', 0)); @endphp @if (count($ltx_summary->transferred) || count($ltx_summary->withheld))
{{-- Title --}}

Complementos de impuestos locales (V1.0):

{{-- Local Taxes Breakdown --}} {{-- Transferred --}} @if (count($ltx_summary->transferred)) {{-- Header & Total Transferred --}} {{-- Breakdown --}} @foreach ($ltx_summary->transferred as $ltx_tr) @php $ltx_tr = (array) $ltx_tr; @endphp @endforeach
Monto total de traslados:
{{ $ltx_tr_total }}
Impuesto Local Trasladado Tasa de Traslado Importe
{{ $ltx_tr['name'] }} {{ QuantityConverterHelper::str_toStrPercentage($ltx_tr['rate'], 2, false) }} {{ $ltx_tr['charge'] }}
@endif {{-- Withheld --}} @if (count($ltx_summary->withheld)) {{-- Header & Total Transferred --}} {{-- Breakdown --}} @foreach ($ltx_summary->withheld as $ltx_rt) @php $ltx_rt = (array) $ltx_rt; @endphp @endforeach
Monto total de retenciones:
{{ $ltx_rt_total }}
Impuesto Local Retenido Tasa de Retención Importe
{{ $ltx_rt['name'] }} {{ QuantityConverterHelper::str_toStrPercentage($ltx_rt['rate'], 2, false) }} {{ $ltx_rt['charge'] }}
@endif
@endif {{-- SAT Certificates --}}
{{-- CFDI Seal & SAT Seal --}}
@php $illusionary_certificated_data = 'Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repudiandae nemo debitis recusandae maiores natus doloribus quaerat? Delectus quasi nobis reprehenderit vel molestias quis ullam, qui rerum a suscipit nulla harum!'; @endphp {{-- CFDI Seal --}}

Sello digital del CFDI:
{{ $illusionary_certificated_data }}

{{-- SAT Seal --}}

Sello digital del SAT:
{{ $illusionary_certificated_data }}

{{-- QR - Original String --}}
{{-- QR Code --}}
Invoice QR

Prov. Cert. {{ data_get($invoice, 'response_payload.stamp.rfc_provider_cert', 'PPD101129EA3') }}

{{-- Original String --}}

Cadena Original del Complemento de certificación digital del SAT:
{{ $illusionary_certificated_data }}