Cobrança {{ $cobranca->seu_numero }}
Voltar @if ($cobranca->pode_editar) Editar @endif
@php $gatewayStatusNormalizado = strtoupper( trim( (string) $cobranca->gateway_status ) ); $statusLocal = $cobranca->status; $statusLocalExibicao = $cobranca->status_exibicao; $emitidaAsaas = $cobranca->gateway === 'asaas' && filled( $cobranca->gateway_payment_id ); $clienteSincronizado = $cobranca->cliente->gateway === 'asaas' && filled( $cobranca->cliente ->gateway_customer_id ); /* * Estados terminais e financeiros. * * O status local e o status do Asaas são avaliados * juntos. Assim a interface continua coerente mesmo * durante pequenas diferenças de tempo entre a ação * local e o recebimento do webhook. */ $cobrancaCancelada = $statusLocal === \App\Enums\StatusCobranca::CANCELADO || in_array( $gatewayStatusNormalizado, [ 'DELETED', 'CANCELLED', 'CANCELED', 'PAYMENT_DELETED', 'PAYMENT_BANK_SLIP_CANCELLED', ], true ); $cobrancaEstornada = $statusLocal === \App\Enums\StatusCobranca::ESTORNADO || in_array( $gatewayStatusNormalizado, [ 'REFUNDED', 'PAYMENT_REFUNDED', ], true ); $cobrancaParcialmenteEstornada = $statusLocal === \App\Enums\StatusCobranca::PARCIALMENTE_ESTORNADO || in_array( $gatewayStatusNormalizado, [ 'PARTIALLY_REFUNDED', 'PAYMENT_PARTIALLY_REFUNDED', ], true ); $cobrancaPaga = $statusLocal === \App\Enums\StatusCobranca::PAGO || in_array( $gatewayStatusNormalizado, [ 'RECEIVED', 'CONFIRMED', 'RECEIVED_IN_CASH', 'PAYMENT_RECEIVED', 'PAYMENT_CONFIRMED', ], true ); $cobrancaVencida = $statusLocal === \App\Enums\StatusCobranca::VENCIDO || $statusLocalExibicao === \App\Enums\StatusCobranca::VENCIDO->value || in_array( $gatewayStatusNormalizado, [ 'OVERDUE', 'PAYMENT_OVERDUE', ], true ); $cobrancaFalhou = $statusLocal === \App\Enums\StatusCobranca::FALHOU || in_array( $gatewayStatusNormalizado, [ 'FALHOU', 'FAILED', 'PAYMENT_CREDIT_CARD_CAPTURE_REFUSED', ], true ); $cobrancaProcessando = $statusLocal === \App\Enums\StatusCobranca::PROCESSANDO || in_array( $gatewayStatusNormalizado, [ 'PROCESSING', 'REFUND_REQUESTED', 'AWAITING_RISK_ANALYSIS', 'DUNNING_REQUESTED', 'CHARGEBACK_REQUESTED', 'CHARGEBACK_DISPUTE', 'AWAITING_CHARGEBACK_REVERSAL', ], true ); $cobrancaPendenteEmissao = $statusLocal === \App\Enums\StatusCobranca::PENDENTE_EMISSAO; $cobrancaAReceber = $statusLocal === \App\Enums\StatusCobranca::A_RECEBER || ( $emitidaAsaas && $gatewayStatusNormalizado === 'PENDING' ); $cobrancaRascunho = $statusLocal === \App\Enums\StatusCobranca::RASCUNHO; /* * A prioridade é importante: * cancelamento e estorno prevalecem sobre o último * status financeiro que possa ter vindo no payload. */ $statusFinanceiro = match (true) { $cobrancaCancelada => 'cancelado', $cobrancaEstornada => 'estornado', $cobrancaParcialmenteEstornada => 'parcialmente-estornado', $cobrancaPaga => 'pago', $cobrancaVencida => 'vencido', $cobrancaFalhou => 'falhou', $cobrancaProcessando => 'processando', $cobrancaPendenteEmissao => 'pendente-emissao', $cobrancaAReceber => 'a-receber', $cobrancaRascunho => 'rascunho', default => 'neutro', }; $statusFinanceiroLabel = match ( $statusFinanceiro ) { 'cancelado' => 'Cancelado', 'estornado' => 'Estornado', 'parcialmente-estornado' => 'Parcialmente estornado', 'pago' => 'Pago', 'vencido' => 'Vencido', 'falhou' => 'Falhou', 'processando' => 'Processando', 'pendente-emissao' => 'Pendente de emissão', 'a-receber' => 'A receber', 'rascunho' => 'Rascunho', default => $statusLocalExibicao ?: 'Não informado', }; /* * Variantes disponíveis no componente x-ui.badge. */ $statusVariant = match ( $statusFinanceiro ) { 'pago' => 'success', 'vencido', 'falhou', 'estornado' => 'danger', 'a-receber' => 'primary', 'pendente-emissao', 'parcialmente-estornado' => 'warning', 'processando' => 'info', default => 'neutral', }; $statusAsaasExibicao = match (true) { $cobrancaCancelada => 'Cancelado', $cobrancaEstornada => 'Estornado', $cobrancaParcialmenteEstornada => 'Parcialmente estornado', in_array( $gatewayStatusNormalizado, [ 'RECEIVED', 'CONFIRMED', 'RECEIVED_IN_CASH', 'PAYMENT_RECEIVED', 'PAYMENT_CONFIRMED', ], true ) => 'Pago', in_array( $gatewayStatusNormalizado, [ 'OVERDUE', 'PAYMENT_OVERDUE', ], true ) => 'Vencido', $gatewayStatusNormalizado === 'PENDING' => 'Aguardando pagamento', in_array( $gatewayStatusNormalizado, [ 'FALHOU', 'FAILED', 'PAYMENT_CREDIT_CARD_CAPTURE_REFUSED', ], true ) => 'Falhou', in_array( $gatewayStatusNormalizado, [ 'PROCESSING', 'REFUND_REQUESTED', 'AWAITING_RISK_ANALYSIS', 'DUNNING_REQUESTED', 'CHARGEBACK_REQUESTED', 'CHARGEBACK_DISPUTE', 'AWAITING_CHARGEBACK_REVERSAL', ], true ) => 'Processando', filled($cobranca->gateway_status) => \Illuminate\Support\Str::headline( strtolower( $cobranca->gateway_status ) ), default => 'Não informado', }; $mensagemStatus = match ( $statusFinanceiro ) { 'cancelado' => 'A cobrança foi cancelada. O vínculo com o Asaas foi preservado somente para histórico e auditoria.', 'estornado' => 'O valor recebido nesta cobrança foi estornado.', 'parcialmente-estornado' => 'Parte do valor recebido nesta cobrança foi estornada.', 'pago' => 'O pagamento foi reconhecido e a cobrança está concluída.', 'vencido' => 'A cobrança venceu e continua aguardando regularização pelo cliente.', 'falhou' => 'A última operação não foi concluída. Confira o erro registrado antes de tentar novamente.', 'processando' => 'A cobrança está sendo processada. Aguarde a conclusão da operação.', 'a-receber' => 'A cobrança foi emitida e está aguardando pagamento.', 'pendente-emissao' => 'A cobrança ainda não foi enviada ao Asaas. Revise os dados antes da emissão.', 'rascunho' => 'A cobrança está em rascunho e existe somente no Conectaê.', default => $emitidaAsaas ? 'A cobrança está vinculada ao Asaas e será atualizada automaticamente pelos webhooks.' : 'A cobrança existe somente no Conectaê.', }; $podeArquivar = in_array( $statusLocal, [ \App\Enums\StatusCobranca::RASCUNHO, \App\Enums\StatusCobranca::PENDENTE_EMISSAO, \App\Enums\StatusCobranca::FALHOU, \App\Enums\StatusCobranca::CANCELADO, ], true ) && !$emitidaAsaas && blank( $cobranca->codigo_solicitacao ); @endphp
{{-- Integração Asaas --}}
in_array( $statusFinanceiro, [ 'cancelado', 'rascunho', 'neutro', ], true ), 'border-red-200 bg-red-50' => in_array( $statusFinanceiro, [ 'vencido', 'falhou', 'estornado', ], true ), 'border-emerald-200 bg-emerald-50' => $statusFinanceiro === 'pago', 'border-indigo-200 bg-indigo-50' => $statusFinanceiro === 'a-receber', 'border-amber-200 bg-amber-50' => in_array( $statusFinanceiro, [ 'pendente-emissao', 'parcialmente-estornado', ], true ), 'border-sky-200 bg-sky-50' => $statusFinanceiro === 'processando', ]) >

Integração com o Asaas

{{ $statusFinanceiroLabel }} {{ $emitidaAsaas ? 'Emitida no Asaas' : 'Somente local' }}
@if ($emitidaAsaas)

{{ $mensagemStatus }}

Payment ID {{ $cobranca->gateway_payment_id }}
Status no Asaas {{ $statusAsaasExibicao }}
@else

{{ $mensagemStatus }}

Cliente Asaas: {{ $clienteSincronizado ? $cobranca->cliente ->gateway_customer_id : 'será sincronizado automaticamente' }}

@endif @if ($cobranca->ultimo_erro)
Último erro: {{ $cobranca->ultimo_erro }}
@endif
@if ( !$emitidaAsaas && $cobranca->pode_emitir )
@csrf Emitir no Asaas
@endif @if ( !$cobrancaCancelada && $cobranca->invoice_url ) Abrir fatura @endif @if ( !$cobrancaCancelada && $cobranca->bank_slip_url ) Abrir boleto @endif
{{-- Resumo --}}

Valor

{{ $cobranca->valor_formatado }}

Vencimento

{{ $cobranca->data_vencimento ?->format('d/m/Y') ?? 'Não informado' }}

Status

{{ $statusFinanceiroLabel }}

Competência

{{ $cobranca->competencia_formatada }}

Cliente
{{ $cobranca->cliente->nome }}
{{ $cobranca->cliente->cnpj_formatado }}
Contrato
@if ($cobranca->contrato) {{ $cobranca->contrato->numero }} — {{ $cobranca->contrato->titulo }} @else Cobrança avulsa @endif
Referência local
{{ $cobranca->seu_numero }}
External reference
{{ $cobranca->external_reference ?: 'Será definida na emissão' }}
Descrição
{{ $cobranca->descricao }}

Multa

{{ $cobranca->multa_formatada }}

Juros de mora

{{ $cobranca->juros_mora_formatado }}

Desconto

{{ $cobranca->desconto_formatado }}

@if ( (float) $cobranca->desconto_valor > 0 && $cobranca->data_limite_desconto )

Até {{ $cobranca->data_limite_desconto ->format('d/m/Y') }}

@endif
@if ( !$cobrancaCancelada && ( $cobranca->invoice_url || $cobranca->bank_slip_url || $cobranca->linha_digitavel || $cobranca->pix_copia_cola ) )
@if ($cobranca->linha_digitavel)

Linha digitável

{{ $cobranca->linha_digitavel }}

@endif @if ($cobranca->pix_copia_cola)

Pix copia e cola

{{ $cobranca->pix_copia_cola }}

@endif
@endif @if ($cobranca->observacoes)

{{ $cobranca->observacoes }}

@endif