From 2d1dc71343fe3c6a5a016820ec32a3c5597e3251 Mon Sep 17 00:00:00 2001 From: Leandro Hernan Rojas Date: Wed, 27 Aug 2025 18:25:25 -0300 Subject: [PATCH] ReFix Classes Tranversal GS1CodeParser --- Domain/Dtos/Stock/Gs1ScanResult.cs | 12 ------ Transversal/Models/Gs1ScanResult.cs | 44 ++++++++++++++++++++ Transversal/Services/Gs1CodeParser.cs | 59 ++++++++++++++++++++++----- 3 files changed, 92 insertions(+), 23 deletions(-) delete mode 100644 Domain/Dtos/Stock/Gs1ScanResult.cs create mode 100644 Transversal/Models/Gs1ScanResult.cs diff --git a/Domain/Dtos/Stock/Gs1ScanResult.cs b/Domain/Dtos/Stock/Gs1ScanResult.cs deleted file mode 100644 index 6eb98cd..0000000 --- a/Domain/Dtos/Stock/Gs1ScanResult.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Domain.Dtos.Stock -{ - public class Gs1ScanResult - { - public string? Gtin { get; set; } - public string? Lot { get; set; } - public DateTime? ExpirationDate { get; set; } - public string? Serial { get; set; } - public string? Raw { get; set; } - public string? Variant { get; set; } - } -} diff --git a/Transversal/Models/Gs1ScanResult.cs b/Transversal/Models/Gs1ScanResult.cs new file mode 100644 index 0000000..7204425 --- /dev/null +++ b/Transversal/Models/Gs1ScanResult.cs @@ -0,0 +1,44 @@ +namespace Transversal.Models +{ + /// + /// Resultado del análisis de un código GS1 escaneado. + /// Contiene la información parseada de acuerdo a los Application Identifiers (AIs). + /// + public class Gs1ScanResult + { + /// + /// GTIN (AI 01). Identificador global del producto. + /// Puede provenir del código de fábrica, del GTIN oficial o de un código alternativo. + /// + public string? Gtin { get; set; } + + /// + /// Lote / Batch (AI 10). Identifica el lote de producción del producto. + /// + public string? Lot { get; set; } + + /// + /// Fecha de vencimiento (AI 17). + /// Se expresa en formato YYYY-MM-DD. Puede ser null si el producto no aplica trazabilidad por fecha. + /// + public DateTime? ExpirationDate { get; set; } + + /// + /// Número de serie (AI 21). + /// Aplica para productos con trazabilidad por unidad. + /// + public string? Serial { get; set; } + + /// + /// Código original leído (raw input). + /// Puede ser un código GS1 completo o un valor tipeado manualmente. + /// + public string? Raw { get; set; } + + /// + /// Variante o presentación (AI 22). + /// Identifica una sub-versión del GTIN en caso de existir. + /// + public string? Variant { get; set; } + } +} diff --git a/Transversal/Services/Gs1CodeParser.cs b/Transversal/Services/Gs1CodeParser.cs index ef1fd99..9ff8fa7 100644 --- a/Transversal/Services/Gs1CodeParser.cs +++ b/Transversal/Services/Gs1CodeParser.cs @@ -1,4 +1,6 @@ -using Domain.Dtos.Stock; +//using Domain.Dtos.Stock; + +using Transversal.Models; namespace Transversal.Services { @@ -103,12 +105,10 @@ namespace Transversal.Services } } } - return result; } // === Helpers === - private static bool TryTakeFixed(string s, ref int i, int length, out string value) { value = string.Empty; @@ -132,13 +132,13 @@ namespace Transversal.Services return s.Substring(start, i - start); } - private static bool LooksLikeNextAi(string s, int index) - { - if (index + 1 >= s.Length) return false; - return char.IsDigit(s[index]) && char.IsDigit(s[index + 1]) && - (s[index] == '0' || s[index] == '1' || s[index] == '2') && - (s.Substring(index, 2) is "01" or "10" or "11" or "17" or "21" or "22"); - } + //private static bool LooksLikeNextAi(string s, int index) + //{ + // if (index + 1 >= s.Length) return false; + // return char.IsDigit(s[index]) && char.IsDigit(s[index + 1]) && + // (s[index] == '0' || s[index] == '1' || s[index] == '2') && + // (s.Substring(index, 2) is "01" or "10" or "11" or "17" or "21" or "22"); + //} private static void SkipUnknownUntilFnc1(string s, ref int i) { @@ -174,6 +174,43 @@ namespace Transversal.Services while (i < s.Length && s[i] != FNC1) i++; return s.Substring(start, i - start); } - } + //public class Gs1ScanResult + //{ + // /// + // /// GTIN (AI 01). Identificador global del producto. + // /// Puede provenir del código de fábrica, del GTIN oficial o de un código alternativo. + // /// + // public string? Gtin { get; set; } + + // /// + // /// Lote / Batch (AI 10). Identifica el lote de producción del producto. + // /// + // public string? Lot { get; set; } + + // /// + // /// Fecha de vencimiento (AI 17). + // /// Se expresa en formato YYYY-MM-DD. Puede ser null si el producto no aplica trazabilidad por fecha. + // /// + // public DateTime? ExpirationDate { get; set; } + + // /// + // /// Número de serie (AI 21). + // /// Aplica para productos con trazabilidad por unidad. + // /// + // public string? Serial { get; set; } + + // /// + // /// Código original leído (raw input). + // /// Puede ser un código GS1 completo o un valor tipeado manualmente. + // /// + // public string? Raw { get; set; } + + // /// + // /// Variante o presentación (AI 22). + // /// Identifica una sub-versión del GTIN en caso de existir. + // /// + // public string? Variant { get; set; } + //} + }