< Summary

Information
Class: FAU.Entidades.IrpfMensual
Assembly: FAU.Entidades
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Entidades/IrpfMensual.cs
Line coverage
86%
Covered lines: 13
Uncovered lines: 2
Coverable lines: 15
Total lines: 101
Line coverage: 86.6%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Id()100%11100%
get_LiquidacionId()100%11100%
get_PersonaId()100%11100%
get_IngresosGravados()100%11100%
get_DeduccionAportes()100%11100%
get_DeduccionHijos()100%11100%
get_DeduccionConyuge()100%11100%
get_DeduccionProfesional()100%11100%
get_TasaDeduccionProfesional()100%11100%
get_TotalDeducciones()100%11100%
get_BaseImponibleNeta()100%11100%
get_TotalIrpf()100%11100%
get_Liquidacion()100%210%
get_Persona()100%210%
get_IrpfDetalleFranjas()100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Entidades/IrpfMensual.cs

#LineLine coverage
 1using System.ComponentModel.DataAnnotations;
 2using System.ComponentModel.DataAnnotations.Schema;
 3
 4namespace FAU.Entidades;
 5
 6/// <summary>
 7/// Resultado del cálculo IRPF por persona en un período de liquidación.
 8/// Mapea a tabla irpf_mensual - almacena el resumen IRPF y detalles para auditoría, Formulario 470, etc.
 9/// Unicidad: (liquidacion_id, persona_id) - una fila por persona por período.
 10/// </summary>
 11[Table("irpf_mensual")]
 12public class IrpfMensual
 13{
 14    [Key]
 15    [Column("id")]
 1516    public long Id { get; set; }
 17
 18    [Required]
 19    [Column("liquidacion_id")]
 820    public long LiquidacionId { get; set; }
 21
 22    [Required]
 23    [Column("persona_id")]
 824    public long PersonaId { get; set; }
 25
 26    /// <summary>
 27    /// Ingresos gravados (haberes + compensaciones, excl. asignación familiar)
 28    /// Este es el base gravada ANTES de deducciones.
 29    /// </summary>
 30    [Required]
 31    [Column("ingresos_gravados", TypeName = "numeric(14,2)")]
 432    public decimal IngresosGravados { get; set; }
 33
 34    /// <summary>
 35    /// Deducción por aportes jubilatorios = Montepio + FONASA + FRL
 36    /// </summary>
 37    [Required]
 38    [Column("deduccion_aportes", TypeName = "numeric(14,2)")]
 439    public decimal DeduccionAportes { get; set; }
 40
 41    /// <summary>
 42    /// Deducción por hijos menores o con discapacidad = N * 13 BPC anuales / 12
 43    /// </summary>
 44    [Required]
 45    [Column("deduccion_hijos", TypeName = "numeric(14,2)")]
 446    public decimal DeduccionHijos { get; set; }
 47
 48    /// <summary>
 49    /// Deducción por cónyuge sin ingresos = 13 BPC anuales / 12
 50    /// </summary>
 51    [Required]
 52    [Column("deduccion_conyuge", TypeName = "numeric(14,2)")]
 453    public decimal DeduccionConyuge { get; set; }
 54
 55    /// <summary>
 56    /// Deducción profesional = IngresoGravados * TasaDeduccionProfesional
 57    /// Tasa es 8% (0.08) si base >= umbral BPC, 14% (0.14) si base < umbral BPC
 58    /// </summary>
 59    [Required]
 60    [Column("deduccion_profesional", TypeName = "numeric(14,2)")]
 461    public decimal DeduccionProfesional { get; set; }
 62
 63    /// <summary>
 64    /// Tasa de deducción profesional aplicada: 0.08 (8%) o 0.14 (14%)
 65    /// Registrado para trazabilidad y auditoría.
 66    /// </summary>
 67    [Required]
 68    [Column("tasa_deduccion_profesional", TypeName = "numeric(5,4)")]
 469    public decimal TasaDeduccionProfesional { get; set; }
 70
 71    /// <summary>
 72    /// Total de deducciones = DeduccionAportes + DeduccionHijos + DeduccionConyuge + DeduccionProfesional
 73    /// </summary>
 74    [Required]
 75    [Column("total_deducciones", TypeName = "numeric(14,2)")]
 476    public decimal TotalDeducciones { get; set; }
 77
 78    /// <summary>
 79    /// Base imponible neta = IngresosGravados - TotalDeducciones
 80    /// Si es negativa, se clampea a 0 y TotalIrpf resultante es 0.
 81    /// </summary>
 82    [Required]
 83    [Column("base_imponible_neta", TypeName = "numeric(14,2)")]
 484    public decimal BaseImponibleNeta { get; set; }
 85
 86    /// <summary>
 87    /// IRPF total calculado = suma de IRPF por cada franja progresiva aplicada a BaseImponibleNeta
 88    /// </summary>
 89    [Required]
 90    [Column("total_irpf", TypeName = "numeric(14,2)")]
 1791    public decimal TotalIrpf { get; set; }
 92
 93    // Navigation properties
 94    [ForeignKey("LiquidacionId")]
 095    public virtual Periodo? Liquidacion { get; set; }
 96
 97    [ForeignKey("PersonaId")]
 098    public virtual Persona? Persona { get; set; }
 99
 11100    public virtual ICollection<IrpfDetalleFranjas> IrpfDetalleFranjas { get; set; } = new List<IrpfDetalleFranjas>();
 101}