using SIGCM2.Application.IngresosBrutos.Dtos; using SIGCM2.Application.TiposDeIva.Dtos; using SIGCM2.Domain.Fiscal; namespace SIGCM2.Api.Contracts.Fiscal; // ── IVA Request records ─────────────────────────────────────────────────────── /// ADM-009: Create TipoDeIva request body. public sealed record CreateTipoDeIvaRequest( string? Codigo, string? Descripcion, decimal? Porcentaje, bool? AplicaIVA, string? VigenciaDesde, string? VigenciaHasta = null); /// /// ADM-009: Update TipoDeIva request body — only cosmetic fields. /// Porcentaje is intentionally absent; any attempt to pass it in the body /// is detected via raw JSON inspection and returns 409. /// public sealed record UpdateTipoDeIvaRequest( string? Codigo, string? Descripcion, bool? AplicaIVA, bool? Activo); /// ADM-009: Create new TipoDeIva version request body. public sealed record NuevaVersionTipoDeIvaRequest( decimal? Porcentaje, string? VigenciaDesde); // ── IIBB Request records ────────────────────────────────────────────────────── /// ADM-009: Create IngresosBrutos request body. public sealed record CreateIngresosBrutosRequest( string? Provincia, string? Descripcion, decimal? Alicuota, string? VigenciaDesde, string? VigenciaHasta = null); /// /// ADM-009: Update IngresosBrutos request body — only cosmetic fields. /// Alicuota and Provincia are intentionally absent. /// public sealed record UpdateIngresosBrutosRequest( string? Descripcion, bool? Activo); /// ADM-009: Create new IngresosBrutos version request body. public sealed record NuevaVersionIngresosBrutosRequest( decimal? Alicuota, string? VigenciaDesde); // ── Shared Response records ─────────────────────────────────────────────────── /// ADM-009: Response for nueva-version operations. public sealed record NuevaVersionResponse( int PredecesoraId, int NuevaVersionId); // ── Mapper ──────────────────────────────────────────────────────────────────── /// /// Maps Application-layer DTOs to API response shapes. /// Application DTOs are already well-formed for most cases; /// IIBB Provincia is mapped to its display string for the API. /// public static class FiscalContractMapper { public static object ToIvaResponse(TipoDeIvaDto dto) => new { dto.Id, dto.Codigo, dto.Descripcion, dto.Porcentaje, dto.AplicaIVA, dto.Activo, dto.VigenciaDesde, dto.VigenciaHasta, dto.PredecesorId, dto.FechaCreacion, dto.FechaModificacion }; public static object ToIibbResponse(IngresosBrutosDto dto) => new { dto.Id, Provincia = dto.Provincia.ToDisplayString(), dto.Descripcion, dto.Alicuota, dto.Activo, dto.VigenciaDesde, dto.VigenciaHasta, dto.PredecesorId, dto.FechaCreacion, dto.FechaModificacion }; public static object ToHistorialIvaResponse(HistorialCadenaDto dto) => new { dto.Id, dto.Codigo, dto.Porcentaje, dto.VigenciaDesde, dto.VigenciaHasta, dto.PredecesorId, dto.Version }; public static object ToHistorialIibbResponse(HistorialCadenaIibbDto dto) => new { dto.Id, Provincia = dto.Provincia.ToDisplayString(), dto.Alicuota, dto.VigenciaDesde, dto.VigenciaHasta, dto.PredecesorId, dto.Version }; }