ReFix Classes Tranversal GS1CodeParser
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 6m4s

This commit is contained in:
Leandro Hernan Rojas 2025-08-27 18:25:25 -03:00
parent 8303751ab7
commit 2d1dc71343
3 changed files with 92 additions and 23 deletions

View File

@ -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; }
}
}

View File

@ -0,0 +1,44 @@
namespace Transversal.Models
{
/// <summary>
/// Resultado del análisis de un código GS1 escaneado.
/// Contiene la información parseada de acuerdo a los Application Identifiers (AIs).
/// </summary>
public class Gs1ScanResult
{
/// <summary>
/// GTIN (AI 01). Identificador global del producto.
/// Puede provenir del código de fábrica, del GTIN oficial o de un código alternativo.
/// </summary>
public string? Gtin { get; set; }
/// <summary>
/// Lote / Batch (AI 10). Identifica el lote de producción del producto.
/// </summary>
public string? Lot { get; set; }
/// <summary>
/// Fecha de vencimiento (AI 17).
/// Se expresa en formato YYYY-MM-DD. Puede ser null si el producto no aplica trazabilidad por fecha.
/// </summary>
public DateTime? ExpirationDate { get; set; }
/// <summary>
/// Número de serie (AI 21).
/// Aplica para productos con trazabilidad por unidad.
/// </summary>
public string? Serial { get; set; }
/// <summary>
/// Código original leído (raw input).
/// Puede ser un código GS1 completo o un valor tipeado manualmente.
/// </summary>
public string? Raw { get; set; }
/// <summary>
/// Variante o presentación (AI 22).
/// Identifica una sub-versión del GTIN en caso de existir.
/// </summary>
public string? Variant { get; set; }
}
}

View File

@ -1,4 +1,6 @@
using Domain.Dtos.Stock; //using Domain.Dtos.Stock;
using Transversal.Models;
namespace Transversal.Services namespace Transversal.Services
{ {
@ -103,12 +105,10 @@ namespace Transversal.Services
} }
} }
} }
return result; return result;
} }
// === Helpers === // === Helpers ===
private static bool TryTakeFixed(string s, ref int i, int length, out string value) private static bool TryTakeFixed(string s, ref int i, int length, out string value)
{ {
value = string.Empty; value = string.Empty;
@ -132,13 +132,13 @@ namespace Transversal.Services
return s.Substring(start, i - start); return s.Substring(start, i - start);
} }
private static bool LooksLikeNextAi(string s, int index) //private static bool LooksLikeNextAi(string s, int index)
{ //{
if (index + 1 >= s.Length) return false; // if (index + 1 >= s.Length) return false;
return char.IsDigit(s[index]) && char.IsDigit(s[index + 1]) && // return char.IsDigit(s[index]) && char.IsDigit(s[index + 1]) &&
(s[index] == '0' || s[index] == '1' || s[index] == '2') && // (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"); // (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) private static void SkipUnknownUntilFnc1(string s, ref int i)
{ {
@ -174,6 +174,43 @@ namespace Transversal.Services
while (i < s.Length && s[i] != FNC1) i++; while (i < s.Length && s[i] != FNC1) i++;
return s.Substring(start, i - start); return s.Substring(start, i - start);
} }
} }
//public class Gs1ScanResult
//{
// /// <summary>
// /// GTIN (AI 01). Identificador global del producto.
// /// Puede provenir del código de fábrica, del GTIN oficial o de un código alternativo.
// /// </summary>
// public string? Gtin { get; set; }
// /// <summary>
// /// Lote / Batch (AI 10). Identifica el lote de producción del producto.
// /// </summary>
// public string? Lot { get; set; }
// /// <summary>
// /// Fecha de vencimiento (AI 17).
// /// Se expresa en formato YYYY-MM-DD. Puede ser null si el producto no aplica trazabilidad por fecha.
// /// </summary>
// public DateTime? ExpirationDate { get; set; }
// /// <summary>
// /// Número de serie (AI 21).
// /// Aplica para productos con trazabilidad por unidad.
// /// </summary>
// public string? Serial { get; set; }
// /// <summary>
// /// Código original leído (raw input).
// /// Puede ser un código GS1 completo o un valor tipeado manualmente.
// /// </summary>
// public string? Raw { get; set; }
// /// <summary>
// /// Variante o presentación (AI 22).
// /// Identifica una sub-versión del GTIN en caso de existir.
// /// </summary>
// public string? Variant { get; set; }
//}
} }