diff --git a/Models/Models/PhLsmExpeditionDetail.cs b/Models/Models/PhLsmExpeditionDetail.cs
new file mode 100644
index 0000000..7c73696
--- /dev/null
+++ b/Models/Models/PhLsmExpeditionDetail.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+
+namespace Models.Models;
+
+public partial class PhLsmExpeditionDetail
+{
+ ///
+ /// Identificador interno del ítem de expedición
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Referencia a la cabecera de expedición (PhLSM_ExpeditionHeaders)
+ ///
+ public int ExpeditionId { get; set; }
+
+ ///
+ /// Producto médico a despachar
+ ///
+ public int ProductId { get; set; }
+
+ ///
+ /// Cantidad solicitada del producto
+ ///
+ public decimal Quantity { get; set; }
+
+ ///
+ /// Ubicación específica desde donde se despacha este ítem
+ ///
+ public int LocationId { get; set; }
+
+ ///
+ /// Número de lote (si aplica trazabilidad)
+ ///
+ public string? Batch { get; set; }
+
+ ///
+ /// Fecha de vencimiento del producto (si aplica trazabilidad)
+ ///
+ public DateOnly? Expiration { get; set; }
+
+ ///
+ /// Descripción libre del ítem (uso interno o impresión)
+ ///
+ public string? Description { get; set; }
+
+ ///
+ /// Precio estimado unitario del producto (sin efecto contable)
+ ///
+ public decimal? EstimatedUnitprice { get; set; }
+
+ ///
+ /// Moneda del precio estimado (ej: ARS, USD)
+ ///
+ public string? EstimatedCurrency { get; set; }
+
+ ///
+ /// Tipo de cambio aplicado al precio estimado
+ ///
+ public decimal? EstimatedExchangerate { get; set; }
+
+ public virtual PhLsmExpeditionHeader Expedition { get; set; } = null!;
+
+ public virtual PhLsmProduct Product { get; set; } = null!;
+}
diff --git a/Models/Models/PhLsmExpeditionHeader.cs b/Models/Models/PhLsmExpeditionHeader.cs
new file mode 100644
index 0000000..26bdbf5
--- /dev/null
+++ b/Models/Models/PhLsmExpeditionHeader.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+
+namespace Models.Models;
+
+public partial class PhLsmExpeditionHeader
+{
+ ///
+ /// Identificador interno de la expedición
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Referencia al ticket quirúrgico (si aplica)
+ ///
+ public Guid? TicketId { get; set; }
+
+ ///
+ /// Número de expedición (formato EX-00000001)
+ ///
+ public string Expeditionnumber { get; set; } = null!;
+
+ ///
+ /// Ubicación (depósito) desde donde se despacha
+ ///
+ public int LocationId { get; set; }
+
+ ///
+ /// Fecha de emisión de la expedición
+ ///
+ public DateTime Issuedate { get; set; }
+
+ ///
+ /// Estado de la expedición (1=Borrador, 2=Confirmada, etc.)
+ ///
+ public int Status { get; set; }
+
+ ///
+ /// Nombre del destinatario visible en la impresión
+ ///
+ public string? RecipientName { get; set; }
+
+ ///
+ /// Número o referencia externa asociada
+ ///
+ public string? ReferenceNumber { get; set; }
+
+ ///
+ /// Tipo de origen externo (ej: surgery, demo, préstamo)
+ ///
+ public string? OriginType { get; set; }
+
+ ///
+ /// ID externo relacionado a otro módulo (ej: ticket, orden)
+ ///
+ public string? ExternalReference { get; set; }
+
+ ///
+ /// Observaciones generales de la expedición
+ ///
+ public string? Observations { get; set; }
+
+ ///
+ /// Información adicional en formato JSON (ej: paciente, médico, etc.)
+ ///
+ public string? ExtrainfoJson { get; set; }
+
+ ///
+ /// Cantidad de veces que se imprimió la nota de expedición
+ ///
+ public int Printcount { get; set; }
+
+ ///
+ /// Fecha de creación del registro
+ ///
+ public DateTime Createdat { get; set; }
+
+ ///
+ /// Fecha de última modificación del registro
+ ///
+ public DateTime? Modifiedat { get; set; }
+
+ public virtual ICollection PhLsmExpeditionDetails { get; set; } = new List();
+}
diff --git a/Models/Models/PhLsmProduct.cs b/Models/Models/PhLsmProduct.cs
index fc04ca5..a11c9d7 100644
--- a/Models/Models/PhLsmProduct.cs
+++ b/Models/Models/PhLsmProduct.cs
@@ -57,6 +57,10 @@ public partial class PhLsmProduct
public virtual PhLsmProductDivision? Division { get; set; }
+ public virtual ICollection PhLsmExpeditionDetails { get; set; } = new List();
+
+ public virtual ICollection PhLsmProductSetItems { get; set; } = new List();
+
public virtual ICollection PhLsmStockEntries { get; set; } = new List();
public virtual ICollection PhLsmStockItems { get; set; } = new List();
diff --git a/Models/Models/PhLsmProductSet.cs b/Models/Models/PhLsmProductSet.cs
new file mode 100644
index 0000000..7c2fd4a
--- /dev/null
+++ b/Models/Models/PhLsmProductSet.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+
+namespace Models.Models;
+
+public partial class PhLsmProductSet
+{
+ ///
+ /// Identificador único del set de productos
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Código del set (ej: CMF1.2, TRAUMA2.0)
+ ///
+ public string Code { get; set; } = null!;
+
+ ///
+ /// Nombre comercial o técnico del set
+ ///
+ public string Name { get; set; } = null!;
+
+ ///
+ /// Descripción extendida del set de productos
+ ///
+ public string? Descripcion { get; set; }
+
+ ///
+ /// Indica si el set requiere un proceso adicional (ej: esterilización)
+ ///
+ public bool PlusProcess { get; set; }
+
+ ///
+ /// Fecha de creación del registro
+ ///
+ public DateTime Createdat { get; set; }
+
+ ///
+ /// Fecha de última modificación del registro
+ ///
+ public DateTime? Modifiedat { get; set; }
+
+ public virtual ICollection PhLsmProductSetItems { get; set; } = new List();
+}
diff --git a/Models/Models/PhLsmProductSetItem.cs b/Models/Models/PhLsmProductSetItem.cs
new file mode 100644
index 0000000..5280703
--- /dev/null
+++ b/Models/Models/PhLsmProductSetItem.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+
+namespace Models.Models;
+
+public partial class PhLsmProductSetItem
+{
+ ///
+ /// Identificador único del ítem dentro del set
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// ID del set al que pertenece este ítem
+ ///
+ public int ProductsetId { get; set; }
+
+ ///
+ /// Producto incluido en el set
+ ///
+ public int ProductId { get; set; }
+
+ ///
+ /// Cantidad estándar del producto en el set
+ ///
+ public decimal DefaultQuantity { get; set; }
+
+ ///
+ /// Indica si este ítem es obligatorio en la composición del set
+ ///
+ public bool Mandatory { get; set; }
+
+ public virtual PhLsmProduct Product { get; set; } = null!;
+
+ public virtual PhLsmProductSet Productset { get; set; } = null!;
+}
diff --git a/Models/Models/PhLsmStockEntry.cs b/Models/Models/PhLsmStockEntry.cs
index e91719d..fa533ca 100644
--- a/Models/Models/PhLsmStockEntry.cs
+++ b/Models/Models/PhLsmStockEntry.cs
@@ -3,9 +3,6 @@ using System.Collections.Generic;
namespace Models.Models;
-///
-/// Registro individual de ingreso de stock con valor y trazabilidad
-///
public partial class PhLsmStockEntry
{
///
@@ -14,49 +11,69 @@ public partial class PhLsmStockEntry
public int Id { get; set; }
///
- /// Referencia al producto ingresado
+ /// Producto ingresado al stock
///
public int ProductId { get; set; }
///
- /// Cantidad ingresada en la unidad correspondiente del producto
+ /// Cantidad ingresada del producto
///
- public double Quantity { get; set; }
+ public decimal Quantity { get; set; }
///
- /// Precio unitario del producto en la moneda indicada
+ /// Precio unitario usado para valorizar el ingreso
///
- public double Unitprice { get; set; }
+ public decimal Unitprice { get; set; }
///
- /// Moneda del ingreso (ej: ars, usd, eur)
+ /// Moneda utilizada en la valorización (ARS, USD, EUR)
///
public string Currency { get; set; } = null!;
///
- /// Tipo de cambio aplicado respecto a ARS
+ /// Tasa de conversión de la moneda a ARS
///
- public double Exchangerate { get; set; }
+ public decimal Exchangerate { get; set; }
///
- /// Fecha y hora del ingreso físico al stock
+ /// Fecha del ingreso de stock
///
public DateTime Entrydate { get; set; }
///
- /// Referencia externa: número de remito, factura o documento de ingreso
+ /// Referencia visible del movimiento (ej: factura, orden de compra)
///
public string? Reference { get; set; }
///
- /// Tipo de origen del ingreso (ej: compra, devolución, ajuste)
+ /// Tipo de origen del ingreso (purchase, return, manual, etc.)
///
public string? Sourcetype { get; set; }
///
- /// Identificador interno del documento de origen (opcional)
+ /// ID de la entidad que generó el ingreso (ej: orden de compra)
///
public int? SourceId { get; set; }
+ ///
+ /// Ubicación física donde se depositó el producto
+ ///
+ public int LocationId { get; set; }
+
+ ///
+ /// Lote del producto ingresado (si aplica trazabilidad)
+ ///
+ public string? Batch { get; set; }
+
+ ///
+ /// Fecha de vencimiento del producto ingresado (si aplica)
+ ///
+ public DateOnly? Expiration { get; set; }
+
+ ///
+ /// Fecha de creación del registro
+ ///
+ public DateTime Createdat { get; set; }
+
public virtual PhLsmProduct Product { get; set; } = null!;
}
diff --git a/Models/Models/PhLsmStockItem.cs b/Models/Models/PhLsmStockItem.cs
index fd237c1..e7b044c 100644
--- a/Models/Models/PhLsmStockItem.cs
+++ b/Models/Models/PhLsmStockItem.cs
@@ -23,7 +23,12 @@ public partial class PhLsmStockItem
///
/// Cantidad actual disponible en esta unidad de stock
///
- public double Quantity { get; set; }
+ public decimal Quantity { get; set; }
+
+ ///
+ /// Cantidad comprometida o reservada para expediciones futuras
+ ///
+ public decimal ReservedQuantity { get; set; }
///
/// Código de lote (si aplica)
@@ -45,6 +50,16 @@ public partial class PhLsmStockItem
///
public string? Description { get; set; }
+ ///
+ /// Fecha de creación del registro
+ ///
+ public DateTime Createdat { get; set; }
+
+ ///
+ /// Fecha de última modificación del registro
+ ///
+ public DateTime? Modifiedat { get; set; }
+
public virtual PhLsmStockLocation Location { get; set; } = null!;
public virtual PhLsmProduct Product { get; set; } = null!;
diff --git a/Models/Models/PhLsmStockOut.cs b/Models/Models/PhLsmStockOut.cs
index b70b465..dbcf57a 100644
--- a/Models/Models/PhLsmStockOut.cs
+++ b/Models/Models/PhLsmStockOut.cs
@@ -18,22 +18,22 @@ public partial class PhLsmStockOut
///
/// Cantidad retirada del producto
///
- public double Quantity { get; set; }
+ public decimal Quantity { get; set; }
///
/// Precio unitario usado para valorizar el egreso
///
- public double Unitprice { get; set; }
+ public decimal Unitprice { get; set; }
///
- /// Moneda utilizada en la valorización (ars, usd, eur)
+ /// Moneda utilizada en la valorización (ARS, USD, EUR)
///
public string Currency { get; set; } = null!;
///
/// Tasa de conversión de la moneda a ARS
///
- public double Exchangerate { get; set; }
+ public decimal Exchangerate { get; set; }
///
/// Fecha del egreso de stock
@@ -55,5 +55,30 @@ public partial class PhLsmStockOut
///
public int? SourceId { get; set; }
+ ///
+ /// Identificador del caso quirúrgico asociado al egreso
+ ///
+ public Guid? TicketId { get; set; }
+
+ ///
+ /// Ubicación física desde donde se retiró el producto
+ ///
+ public int? LocationId { get; set; }
+
+ ///
+ /// Lote del producto egresado (si aplica trazabilidad)
+ ///
+ public string? Batch { get; set; }
+
+ ///
+ /// Fecha de vencimiento del producto egresado (si aplica)
+ ///
+ public DateOnly? Expiration { get; set; }
+
+ ///
+ /// Fecha de creación del registro
+ ///
+ public DateTime Createdat { get; set; }
+
public virtual PhLsmProduct Product { get; set; } = null!;
}
diff --git a/Models/Models/PhronCareOperationsHubContext.cs b/Models/Models/PhronCareOperationsHubContext.cs
index 73e7a7d..95d6ceb 100644
--- a/Models/Models/PhronCareOperationsHubContext.cs
+++ b/Models/Models/PhronCareOperationsHubContext.cs
@@ -15,10 +15,18 @@ public partial class PhronCareOperationsHubContext : DbContext
{
}
+ public virtual DbSet PhLsmExpeditionDetails { get; set; }
+
+ public virtual DbSet PhLsmExpeditionHeaders { get; set; }
+
public virtual DbSet PhLsmProducts { get; set; }
public virtual DbSet PhLsmProductDivisions { get; set; }
+ public virtual DbSet PhLsmProductSets { get; set; }
+
+ public virtual DbSet PhLsmProductSetItems { get; set; }
+
public virtual DbSet PhLsmStockEntries { get; set; }
public virtual DbSet PhLsmStockItems { get; set; }
@@ -88,20 +96,143 @@ public partial class PhronCareOperationsHubContext : DbContext
public virtual DbSet PhSQuoteTaxes { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- #region VERSION DOCKER
- {
- if (!optionsBuilder.IsConfigured)
- {
- // Dejarlo vacío para usar la configuración externa desde Program.cs o Startup.cs
- }
- }
- #endregion
- //=> optionsBuilder.UseSqlServer("data source=srv01.saludlab.com.ar,39458;initial catalog=phronCare_OperationsHub;User ID=sa;Password=HS|s[~xxQzTo/n>9jO;encrypt=False;trustServerCertificate=True;MultipleActiveResultSets=True");
+#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
+ => optionsBuilder.UseSqlServer("data source=srv01.saludlab.com.ar,39458;initial catalog=phronCare_OperationsHub;User ID=sa;Password=HS|s[~xxQzTo/n>9jO;encrypt=False;trustServerCertificate=True;MultipleActiveResultSets=True");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.UseCollation("Modern_Spanish_CI_AS");
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PK__PhLSM_Ex__3213E83F030D2D60");
+
+ entity.ToTable("PhLSM_ExpeditionDetails");
+
+ entity.Property(e => e.Id)
+ .HasComment("Identificador interno del ítem de expedición")
+ .HasColumnName("id");
+ entity.Property(e => e.Batch)
+ .HasMaxLength(50)
+ .HasComment("Número de lote (si aplica trazabilidad)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("batch");
+ entity.Property(e => e.Description)
+ .HasMaxLength(200)
+ .HasComment("Descripción libre del ítem (uso interno o impresión)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("description");
+ entity.Property(e => e.EstimatedCurrency)
+ .HasMaxLength(3)
+ .HasComment("Moneda del precio estimado (ej: ARS, USD)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("estimated_currency");
+ entity.Property(e => e.EstimatedExchangerate)
+ .HasComment("Tipo de cambio aplicado al precio estimado")
+ .HasColumnType("decimal(10, 4)")
+ .HasColumnName("estimated_exchangerate");
+ entity.Property(e => e.EstimatedUnitprice)
+ .HasComment("Precio estimado unitario del producto (sin efecto contable)")
+ .HasColumnType("decimal(18, 4)")
+ .HasColumnName("estimated_unitprice");
+ entity.Property(e => e.ExpeditionId)
+ .HasComment("Referencia a la cabecera de expedición (PhLSM_ExpeditionHeaders)")
+ .HasColumnName("expedition_id");
+ entity.Property(e => e.Expiration)
+ .HasComment("Fecha de vencimiento del producto (si aplica trazabilidad)")
+ .HasColumnName("expiration");
+ entity.Property(e => e.LocationId)
+ .HasComment("Ubicación específica desde donde se despacha este ítem")
+ .HasColumnName("location_id");
+ entity.Property(e => e.ProductId)
+ .HasComment("Producto médico a despachar")
+ .HasColumnName("product_id");
+ entity.Property(e => e.Quantity)
+ .HasComment("Cantidad solicitada del producto")
+ .HasColumnType("decimal(18, 4)")
+ .HasColumnName("quantity");
+
+ entity.HasOne(d => d.Expedition).WithMany(p => p.PhLsmExpeditionDetails)
+ .HasForeignKey(d => d.ExpeditionId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("FK_PhLSM_ExpeditionDetails_PhLSM_ExpeditionHeaders");
+
+ entity.HasOne(d => d.Product).WithMany(p => p.PhLsmExpeditionDetails)
+ .HasForeignKey(d => d.ProductId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("FK_PhLSM_ExpeditionDetails_PhLSM_Product");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PK__PhLSM_Ex__3213E83FBD69DF6E");
+
+ entity.ToTable("PhLSM_ExpeditionHeaders");
+
+ entity.Property(e => e.Id)
+ .HasComment("Identificador interno de la expedición")
+ .HasColumnName("id");
+ entity.Property(e => e.Createdat)
+ .HasDefaultValueSql("(getdate())")
+ .HasComment("Fecha de creación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("createdat");
+ entity.Property(e => e.Expeditionnumber)
+ .HasMaxLength(20)
+ .HasComment("Número de expedición (formato EX-00000001)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("expeditionnumber");
+ entity.Property(e => e.ExternalReference)
+ .HasMaxLength(100)
+ .HasComment("ID externo relacionado a otro módulo (ej: ticket, orden)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("external_reference");
+ entity.Property(e => e.ExtrainfoJson)
+ .HasComment("Información adicional en formato JSON (ej: paciente, médico, etc.)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("extrainfo_json");
+ entity.Property(e => e.Issuedate)
+ .HasDefaultValueSql("(getdate())")
+ .HasComment("Fecha de emisión de la expedición")
+ .HasColumnType("datetime")
+ .HasColumnName("issuedate");
+ entity.Property(e => e.LocationId)
+ .HasComment("Ubicación (depósito) desde donde se despacha")
+ .HasColumnName("location_id");
+ entity.Property(e => e.Modifiedat)
+ .HasComment("Fecha de última modificación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("modifiedat");
+ entity.Property(e => e.Observations)
+ .HasComment("Observaciones generales de la expedición")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("observations");
+ entity.Property(e => e.OriginType)
+ .HasMaxLength(20)
+ .HasComment("Tipo de origen externo (ej: surgery, demo, préstamo)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("origin_type");
+ entity.Property(e => e.Printcount)
+ .HasComment("Cantidad de veces que se imprimió la nota de expedición")
+ .HasColumnName("printcount");
+ entity.Property(e => e.RecipientName)
+ .HasMaxLength(100)
+ .HasComment("Nombre del destinatario visible en la impresión")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("recipient_name");
+ entity.Property(e => e.ReferenceNumber)
+ .HasMaxLength(50)
+ .HasComment("Número o referencia externa asociada")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("reference_number");
+ entity.Property(e => e.Status)
+ .HasComment("Estado de la expedición (1=Borrador, 2=Confirmada, etc.)")
+ .HasColumnName("status");
+ entity.Property(e => e.TicketId)
+ .HasComment("Referencia al ticket quirúrgico (si aplica)")
+ .HasColumnName("ticket_id");
+ });
+
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_Pr__3213E83F874510C5");
@@ -179,70 +310,174 @@ public partial class PhronCareOperationsHubContext : DbContext
.HasColumnName("name");
});
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PK__PhLSM_Pr__3213E83F047D4048");
+
+ entity.ToTable("PhLSM_ProductSet");
+
+ entity.Property(e => e.Id)
+ .HasComment("Identificador único del set de productos")
+ .HasColumnName("id");
+ entity.Property(e => e.Code)
+ .HasMaxLength(50)
+ .HasComment("Código del set (ej: CMF1.2, TRAUMA2.0)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("code");
+ entity.Property(e => e.Createdat)
+ .HasDefaultValueSql("(getdate())")
+ .HasComment("Fecha de creación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("createdat");
+ entity.Property(e => e.Descripcion)
+ .HasMaxLength(255)
+ .HasComment("Descripción extendida del set de productos")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("descripcion");
+ entity.Property(e => e.Modifiedat)
+ .HasComment("Fecha de última modificación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("modifiedat");
+ entity.Property(e => e.Name)
+ .HasMaxLength(100)
+ .HasComment("Nombre comercial o técnico del set")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("name");
+ entity.Property(e => e.PlusProcess)
+ .HasComment("Indica si el set requiere un proceso adicional (ej: esterilización)")
+ .HasColumnName("plus_process");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PK__PhLSM_Pr__3213E83F681F74CE");
+
+ entity.ToTable("PhLSM_ProductSetItem");
+
+ entity.Property(e => e.Id)
+ .HasComment("Identificador único del ítem dentro del set")
+ .HasColumnName("id");
+ entity.Property(e => e.DefaultQuantity)
+ .HasComment("Cantidad estándar del producto en el set")
+ .HasColumnType("decimal(18, 4)")
+ .HasColumnName("default_quantity");
+ entity.Property(e => e.Mandatory)
+ .HasDefaultValue(true)
+ .HasComment("Indica si este ítem es obligatorio en la composición del set")
+ .HasColumnName("mandatory");
+ entity.Property(e => e.ProductId)
+ .HasComment("Producto incluido en el set")
+ .HasColumnName("product_id");
+ entity.Property(e => e.ProductsetId)
+ .HasComment("ID del set al que pertenece este ítem")
+ .HasColumnName("productset_id");
+
+ entity.HasOne(d => d.Product).WithMany(p => p.PhLsmProductSetItems)
+ .HasForeignKey(d => d.ProductId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("FK_ProductSetItem_Product");
+
+ entity.HasOne(d => d.Productset).WithMany(p => p.PhLsmProductSetItems)
+ .HasForeignKey(d => d.ProductsetId)
+ .OnDelete(DeleteBehavior.ClientSetNull)
+ .HasConstraintName("FK_ProductSetItem_Set");
+ });
+
modelBuilder.Entity(entity =>
{
- entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83FCFAF3A63");
+ entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83F7F20E170");
- entity.ToTable("PhLSM_StockEntry", tb => tb.HasComment("Registro individual de ingreso de stock con valor y trazabilidad"));
+ entity.ToTable("PhLSM_StockEntry");
entity.Property(e => e.Id)
.HasComment("Identificador único del ingreso de stock")
.HasColumnName("id");
+ entity.Property(e => e.Batch)
+ .HasMaxLength(50)
+ .HasComment("Lote del producto ingresado (si aplica trazabilidad)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("batch");
+ entity.Property(e => e.Createdat)
+ .HasDefaultValueSql("(getdate())")
+ .HasComment("Fecha de creación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("createdat");
entity.Property(e => e.Currency)
.HasMaxLength(3)
- .HasComment("Moneda del ingreso (ej: ars, usd, eur)")
+ .HasComment("Moneda utilizada en la valorización (ARS, USD, EUR)")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("currency");
entity.Property(e => e.Entrydate)
- .HasComment("Fecha y hora del ingreso físico al stock")
+ .HasComment("Fecha del ingreso de stock")
.HasColumnType("datetime")
.HasColumnName("entrydate");
entity.Property(e => e.Exchangerate)
- .HasDefaultValue(1.0)
- .HasComment("Tipo de cambio aplicado respecto a ARS")
+ .HasDefaultValue(1m)
+ .HasComment("Tasa de conversión de la moneda a ARS")
+ .HasColumnType("decimal(10, 4)")
.HasColumnName("exchangerate");
+ entity.Property(e => e.Expiration)
+ .HasComment("Fecha de vencimiento del producto ingresado (si aplica)")
+ .HasColumnName("expiration");
+ entity.Property(e => e.LocationId)
+ .HasComment("Ubicación física donde se depositó el producto")
+ .HasColumnName("location_id");
entity.Property(e => e.ProductId)
- .HasComment("Referencia al producto ingresado")
+ .HasComment("Producto ingresado al stock")
.HasColumnName("product_id");
entity.Property(e => e.Quantity)
- .HasComment("Cantidad ingresada en la unidad correspondiente del producto")
+ .HasComment("Cantidad ingresada del producto")
+ .HasColumnType("decimal(18, 4)")
.HasColumnName("quantity");
entity.Property(e => e.Reference)
.HasMaxLength(100)
- .HasComment("Referencia externa: número de remito, factura o documento de ingreso")
+ .HasComment("Referencia visible del movimiento (ej: factura, orden de compra)")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("reference");
entity.Property(e => e.SourceId)
- .HasComment("Identificador interno del documento de origen (opcional)")
+ .HasComment("ID de la entidad que generó el ingreso (ej: orden de compra)")
.HasColumnName("source_id");
entity.Property(e => e.Sourcetype)
.HasMaxLength(50)
- .HasComment("Tipo de origen del ingreso (ej: compra, devolución, ajuste)")
+ .HasComment("Tipo de origen del ingreso (purchase, return, manual, etc.)")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("sourcetype");
entity.Property(e => e.Unitprice)
- .HasComment("Precio unitario del producto en la moneda indicada")
+ .HasComment("Precio unitario usado para valorizar el ingreso")
+ .HasColumnType("decimal(18, 4)")
.HasColumnName("unitprice");
entity.HasOne(d => d.Product).WithMany(p => p.PhLsmStockEntries)
.HasForeignKey(d => d.ProductId)
.OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("FK__PhLSM_Sto__produ__40257DE4");
+ .HasConstraintName("FK_PhLSM_StockEntry_PhLSM_Product");
});
modelBuilder.Entity(entity =>
{
- entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83F7C7F442D");
+ entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83FB413CCCD");
entity.ToTable("PhLSM_StockItem");
+ entity.HasIndex(e => new { e.ProductId, e.LocationId, e.Batch, e.Expiration }, "IX_PhLSM_StockItem_UniqueTraceability").IsUnique();
+
entity.Property(e => e.Id)
.HasComment("Identificador único del ítem de stock físico")
.HasColumnName("id");
entity.Property(e => e.Batch)
.HasMaxLength(100)
.HasComment("Código de lote (si aplica)")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("batch");
+ entity.Property(e => e.Createdat)
+ .HasDefaultValueSql("(getdate())")
+ .HasComment("Fecha de creación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("createdat");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasComment("Comentario libre u observación sobre este ítem de stock")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("description");
entity.Property(e => e.Expiration)
.HasComment("Fecha de vencimiento (si aplica)")
@@ -250,12 +485,21 @@ public partial class PhronCareOperationsHubContext : DbContext
entity.Property(e => e.LocationId)
.HasComment("Ubicación física del stock (depósito, valija, etc.)")
.HasColumnName("location_id");
+ entity.Property(e => e.Modifiedat)
+ .HasComment("Fecha de última modificación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("modifiedat");
entity.Property(e => e.ProductId)
.HasComment("Producto vinculado al ítem de stock")
.HasColumnName("product_id");
entity.Property(e => e.Quantity)
.HasComment("Cantidad actual disponible en esta unidad de stock")
+ .HasColumnType("decimal(18, 4)")
.HasColumnName("quantity");
+ entity.Property(e => e.ReservedQuantity)
+ .HasComment("Cantidad comprometida o reservada para expediciones futuras")
+ .HasColumnType("decimal(18, 4)")
+ .HasColumnName("reserved_quantity");
entity.Property(e => e.Status)
.HasComment("Estado del ítem (1=Disponible, 2=Reservado, 3=Vencido, etc.)")
.HasColumnName("status");
@@ -263,12 +507,12 @@ public partial class PhronCareOperationsHubContext : DbContext
entity.HasOne(d => d.Location).WithMany(p => p.PhLsmStockItems)
.HasForeignKey(d => d.LocationId)
.OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("FK__PhLSM_Sto__locat__3C54ED00");
+ .HasConstraintName("FK_PhLSM_StockItem_PhLSM_StockLocation");
entity.HasOne(d => d.Product).WithMany(p => p.PhLsmStockItems)
.HasForeignKey(d => d.ProductId)
.OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("FK__PhLSM_Sto__produ__3B60C8C7");
+ .HasConstraintName("FK_PhLSM_StockItem_PhLSM_Product");
});
modelBuilder.Entity(entity =>
@@ -292,21 +536,39 @@ public partial class PhronCareOperationsHubContext : DbContext
modelBuilder.Entity(entity =>
{
- entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83F96B2D858");
+ entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83F1399BE0F");
entity.ToTable("PhLSM_StockOut");
entity.Property(e => e.Id)
.HasComment("Identificador único del egreso de stock")
.HasColumnName("id");
+ entity.Property(e => e.Batch)
+ .HasMaxLength(50)
+ .HasComment("Lote del producto egresado (si aplica trazabilidad)")
+ .UseCollation("Latin1_General_CI_AS")
+ .HasColumnName("batch");
+ entity.Property(e => e.Createdat)
+ .HasDefaultValueSql("(getdate())")
+ .HasComment("Fecha de creación del registro")
+ .HasColumnType("datetime")
+ .HasColumnName("createdat");
entity.Property(e => e.Currency)
.HasMaxLength(3)
- .HasComment("Moneda utilizada en la valorización (ars, usd, eur)")
+ .HasComment("Moneda utilizada en la valorización (ARS, USD, EUR)")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("currency");
entity.Property(e => e.Exchangerate)
- .HasDefaultValue(1.0)
+ .HasDefaultValue(1m)
.HasComment("Tasa de conversión de la moneda a ARS")
+ .HasColumnType("decimal(10, 4)")
.HasColumnName("exchangerate");
+ entity.Property(e => e.Expiration)
+ .HasComment("Fecha de vencimiento del producto egresado (si aplica)")
+ .HasColumnName("expiration");
+ entity.Property(e => e.LocationId)
+ .HasComment("Ubicación física desde donde se retiró el producto")
+ .HasColumnName("location_id");
entity.Property(e => e.Outdate)
.HasComment("Fecha del egreso de stock")
.HasColumnType("datetime")
@@ -316,10 +578,12 @@ public partial class PhronCareOperationsHubContext : DbContext
.HasColumnName("product_id");
entity.Property(e => e.Quantity)
.HasComment("Cantidad retirada del producto")
+ .HasColumnType("decimal(18, 4)")
.HasColumnName("quantity");
entity.Property(e => e.Reference)
.HasMaxLength(100)
.HasComment("Referencia visible del movimiento (NE, devolución, cirugía)")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("reference");
entity.Property(e => e.SourceId)
.HasComment("ID de la entidad que generó el egreso (ej: nota de expedición)")
@@ -327,15 +591,20 @@ public partial class PhronCareOperationsHubContext : DbContext
entity.Property(e => e.Sourcetype)
.HasMaxLength(50)
.HasComment("Tipo de origen del egreso (surgery, expiration, manual, etc.)")
+ .UseCollation("Latin1_General_CI_AS")
.HasColumnName("sourcetype");
+ entity.Property(e => e.TicketId)
+ .HasComment("Identificador del caso quirúrgico asociado al egreso")
+ .HasColumnName("ticket_id");
entity.Property(e => e.Unitprice)
.HasComment("Precio unitario usado para valorizar el egreso")
+ .HasColumnType("decimal(18, 4)")
.HasColumnName("unitprice");
entity.HasOne(d => d.Product).WithMany(p => p.PhLsmStockOuts)
.HasForeignKey(d => d.ProductId)
.OnDelete(DeleteBehavior.ClientSetNull)
- .HasConstraintName("FK__PhLSM_Sto__produ__43F60EC8");
+ .HasConstraintName("FK_PhLSM_StockOut_PhLSM_Product");
});
modelBuilder.Entity(entity =>