@extends('layouts.dashboard.inface', ['section' => 'finance']) @section('content')
@include('realEstates.finance.nav', ['title' => $loan->name])

{{ $loan->project->name }} · {{ $loan->currency }}

{{ $loan->investor?->name ?? config('finance.financing_types.'.$loan->type) }} · {{ config('finance.financing_statuses.'.$loan->status) }}

Capital pactado: {{ \App\Domain\Finance\Money::format($loan->principal_amount) }} · Tasa: {{ \App\Domain\Finance\FinanceNumber::format($loan->interest_rate) }}% · {{ config('finance.interest_types.'.$loan->interest_type) }}

Inicio: {{ $loan->start_date }} · Vencimiento: {{ $loan->maturity_date }} · {{ config('finance.payment_frequencies.'.$loan->payment_frequency) }} · Desembolso: {{ $loan->funded_date ?? 'No registrado' }}

{{ $loan->notes }}

@if($loan->maturity_date < now()->toDateString() && \App\Domain\Finance\Money::of($balance['estimated_total_balance'])->isPositive())

Vencido con saldo pendiente al corte actual.

@endif
@if($loan->status === 'draft')@can('financing.manage')Editar borrador@endcan @endif @can('financial_reports.view')Estado del préstamo CSV@endcan
@foreach(['principal_paid' => 'Capital pagado', 'interest_paid' => 'Intereses pagados', 'penalty_paid' => 'Penalizaciones pagadas', 'principal_balance' => 'Capital pendiente', 'interest_accrued' => 'Interés devengado estimado', 'estimated_interest_balance' => 'Interés pendiente estimado', 'estimated_total_balance' => 'Saldo total estimado'] as $field => $label)

{{ $label }} · {{ $loan->currency }}

{{ \App\Domain\Finance\Money::format($balance[$field]) }}

@endforeach

Corte: {{ now()->toDateString() }}. El interés se calcula desde el desembolso, sobre capital pendiente, sin capitalización. Las penalizaciones requieren captura y justificación. Los borradores y las cancelaciones no generan saldo.

@can('financing.manage') @if($loan->status === 'draft')
@csrf

Confirmar recepción del préstamo

@include('realEstates.finance.fields', ['record' => ['funded_date' => now()->toDateString()], 'fields' => ['funded_date' => ['Fecha real de recepción', 'date', true], 'payment_method' => ['Método', config('finance.methods'), true], 'reference' => ['Referencia / comprobante', 'text']]]) @include('realEstates.finance.confirm')
@elseif(in_array($loan->status, ['active','defaulted'], true))
@csrf

Registrar pago real

@include('realEstates.finance.fields', ['record' => ['payment_date' => now()->toDateString(), 'principal_amount' => '0', 'interest_amount' => '0', 'penalty_amount' => '0'], 'fields' => ['payment_date' => ['Fecha del pago', 'date', true], 'principal_amount' => ['Abono a capital', 'money', true], 'interest_amount' => ['Interés', 'money', true], 'penalty_amount' => ['Penalización', 'money', true], 'payment_method' => ['Método', config('finance.methods'), true], 'reference' => ['Referencia', 'text'], 'notes' => ['Notas / justificación de penalización', 'textarea']]])

El total se calcula en el servidor. Los abonos no pueden superar el capital ni el interés pendiente en la fecha del pago.

@include('realEstates.finance.confirm')
@endif @endcan

Historial de pagos

@forelse($loan->payments->sortByDesc('id') as $payment)@foreach(['principal_amount','interest_amount','penalty_amount','total_amount'] as $field)@endforeach@empty@endforelse
Fecha / IDCapitalInterésPenalizaciónTotalReferencia / usuarioEstado / corrección
{{ $payment->payment_date }} · #{{ $payment->id }}{{ \App\Domain\Finance\Money::format($payment->$field) }}{{ $payment->reference ?? '—' }}

{{ $payment->notes }}

Usuario {{ $payment->created_by }} · {{ $payment->created_at }}

@if($payment->reversed_at)Revertido: {{ $payment->reversal_reason }}@else @can('financing.manage')
@csrf@include('realEstates.finance.confirm', ['message' => 'Revertir este registro incorrecto; no realizar una devolución.'])
@else Vigente @endcan @endif
Sin pagos.
@if($loan->status !== 'cancelled')@can('financing.manage')
@csrf

Cancelar por error de captura

Solo cuando no hay pagos vigentes. Si hubo un desembolso mal capturado se revierte su registro. Esto no liquida una deuda real: para ello registra el pago correspondiente.

@include('realEstates.finance.confirm', ['message' => 'Confirmo que es una corrección de captura y autorizo revertir los registros asociados.'])
@endcan @endif
@endsection