{#- SPDX-License-Identifier: Apache-2.0 SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A. -#} {% extends "base.html" %} {% block content %}

Detalle de Nómina: {{ nomina_empleado.empleado.primer_nombre }} {{ nomina_empleado.empleado.primer_apellido }}

Volver a la Nómina
Información del Empleado
Nombre Completo:
{{ nomina_empleado.empleado.primer_nombre }} {% if nomina_empleado.empleado.segundo_nombre %}{{ nomina_empleado.empleado.segundo_nombre }}{% endif %} {{ nomina_empleado.empleado.primer_apellido }} {% if nomina_empleado.empleado.segundo_apellido %}{{ nomina_empleado.empleado.segundo_apellido }}{% endif %}
Identificación:
{{ nomina_empleado.empleado.identificacion_personal }}
Cargo:
{{ nomina_empleado.cargo_snapshot or nomina_empleado.empleado.cargo or 'N/A' }}
Área:
{{ nomina_empleado.area_snapshot or nomina_empleado.empleado.area or 'N/A' }}
Resumen
{% if nomina_empleado.tipo_cambio_aplicado and nomina_empleado.tipo_cambio_aplicado != 1 %} {% endif %}
Salario Base: {{ "{:,.2f}".format(salario_base_visual|float) }}
Total Ingresos: +{{ "{:,.2f}".format(nomina_empleado.total_ingresos|float) }}
Salario Bruto: {{ "{:,.2f}".format(nomina_empleado.salario_bruto|float) }}
Total Deducciones: -{{ "{:,.2f}".format(nomina_empleado.total_deducciones|float) }}
Salario Neto: {{ "{:,.2f}".format(nomina_empleado.salario_neto|float) }}
Tipo de Cambio: {{ "{:.4f}".format(nomina_empleado.tipo_cambio_aplicado|float) }}
Percepciones (Ingresos)
{% if percepciones %} {% for p in percepciones %} {% endfor %}
Concepto Monto
[{{ p.codigo }}]
{{ p.descripcion }}
{{ "{:,.2f}".format(p.monto|float) }}
Total Percepciones {{ "{:,.2f}".format(nomina_empleado.total_ingresos|float) }}
{% else %}
Sin percepciones adicionales
{% endif %}
Deducciones
{% if deducciones %} {% for d in deducciones %} {% endfor %}
Concepto Monto
[{{ d.codigo }}]
{{ d.descripcion }}
{{ "{:,.2f}".format(d.monto|float) }}
Total Deducciones {{ "{:,.2f}".format(nomina_empleado.total_deducciones|float) }}
{% else %}
Sin deducciones
{% endif %}
Novedades Aplicadas al Calculo
Resumen Dinamico
Total novedades aplicadas {{ resumen_novedades.total }}
Con referencia de percepcion {{ resumen_novedades.con_percepcion }}
Con referencia de deduccion {{ resumen_novedades.con_deduccion }}
Sin referencia de catalogo {{ resumen_novedades.sin_referencia_catalogo }}
Distribucion por tipo de valor
{% if resumen_novedades.conteo_tipo_valor %}
{% for tipo_valor, total_novedades in resumen_novedades.conteo_tipo_valor.items() %} {% endfor %}
Tipo Novedades Valor Acumulado
{{ tipo_valor }} {{ total_novedades }} {{ "{:,.2f}".format(resumen_novedades.acumulado_tipo_valor.get(tipo_valor, 0)|float) }}
{% else %}

No hay tipos de valor registrados.

{% endif %}
Conciliacion de Salario Base
Salario base historico {{ "{:,.2f}".format(conciliacion_salario_base.salario_base_historico|float) }}
(-) Ajuste total aplicado al salario base -{{ "{:,.2f}".format(conciliacion_salario_base.ajuste_total_salario_base|float) }}
Salario base resultante {{ "{:,.2f}".format(conciliacion_salario_base.salario_base_resultante|float) }}
{% if conciliacion_salario_base.configuracion_contexto %}
Configuracion utilizada en esta nomina
{% for clave, valor in conciliacion_salario_base.configuracion_contexto|dictsort %} {% endfor %}
Parametro Valor
{{ clave }} {{ valor }}
{% endif %}

Detalle de Novedades Aplicadas
{% if novedades_aplicadas %}
{% for novedad in novedades_aplicadas %} {% set ref_monto = monto_novedad_referencia.get(novedad.id|string) %} {% endfor %}
Fecha Codigo Concepto Tipo Valor Cantidad Monto Detalle Monto Indicadores Estado
{{ novedad.fecha_novedad.strftime('%d/%m/%Y') if novedad.fecha_novedad else '-' }} {{ novedad.codigo_concepto }} {% if novedad.percepcion_id %} {{ percepcion_catalogo.get(novedad.percepcion_id, novedad.codigo_concepto) }} Percepcion {% elif novedad.deduccion_id %} {{ deduccion_catalogo.get(novedad.deduccion_id, novedad.codigo_concepto) }} Deduccion {% else %} {{ novedad.codigo_concepto }} General {% endif %} {{ novedad.tipo_valor or '-' }} {{ "{:,.2f}".format(novedad.valor_cantidad|float) }} {% if ref_monto and ref_monto.monto is not none %} {{ "{:,.2f}".format(ref_monto.monto|float) }} {% else %} - {% endif %} {% if ref_monto and ref_monto.detalle %} {{ ref_monto.detalle }} {% else %} - {% endif %} {% set total_indicadores = 0 %} {% if novedad.es_inasistencia %} {% set total_indicadores = total_indicadores + 1 %} es_inasistencia {% endif %} {% if novedad.descontar_pago_inasistencia %} {% set total_indicadores = total_indicadores + 1 %} descontar_pago {% endif %} {% if novedad.es_descanso_vacaciones %} {% set total_indicadores = total_indicadores + 1 %} descanso {% endif %} {% if total_indicadores == 0 %} - {% endif %} {% if novedad.estado == 'executed' %} executed {% elif novedad.estado == 'pending' %} pending {% else %} {{ novedad.estado }} {% endif %}
{% else %}

No hay novedades aplicadas para este empleado en esta nomina.

{% endif %}
{% if prestaciones %}
Prestaciones (Costo Empleador - No afecta salario neto)
{% for p in prestaciones %} {% endfor %}
Código Concepto Monto
{{ p.codigo }} {{ p.descripcion }} {{ "{:,.2f}".format(p.monto|float) }}
Total Prestaciones (Costo Empleador) {% set total_prestaciones = prestaciones|map(attribute='monto')|sum %} {{ "{:,.2f}".format(total_prestaciones|float) }}
{% endif %}
Período de Nómina
Período:
{{ nomina.periodo_inicio.strftime('%d/%m/%Y') }} - {{ nomina.periodo_fin.strftime('%d/%m/%Y') }}
Fecha de Generación:
{{ nomina.fecha_generacion.strftime('%d/%m/%Y %H:%M') }}
Estado:
{% if nomina.estado == 'generated' %} Generado {% elif nomina.estado == 'approved' %} Aprobado {% elif nomina.estado == 'applied' %} Aplicado {% endif %}
{% endblock %}