phronCare/Models/Models/PhronCareOperationsHubContext.cs
leandro dc08291932
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (pull_request) Successful in 4m10s
feat(sales): scaffold EF para Delivery Notes
Closes #11
2026-03-16 19:42:56 -03:00

1872 lines
85 KiB
C#

using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace Models.Models;
public partial class PhronCareOperationsHubContext : DbContext
{
public PhronCareOperationsHubContext(DbContextOptions<PhronCareOperationsHubContext> options)
: base(options)
{
}
public virtual DbSet<PhLsmExpeditionDetail> PhLsmExpeditionDetails { get; set; }
public virtual DbSet<PhLsmExpeditionHeader> PhLsmExpeditionHeaders { get; set; }
public virtual DbSet<PhLsmProduct> PhLsmProducts { get; set; }
public virtual DbSet<PhLsmProductDivision> PhLsmProductDivisions { get; set; }
public virtual DbSet<PhLsmProductSet> PhLsmProductSets { get; set; }
public virtual DbSet<PhLsmProductSetItem> PhLsmProductSetItems { get; set; }
public virtual DbSet<PhLsmStockEntry> PhLsmStockEntries { get; set; }
public virtual DbSet<PhLsmStockItem> PhLsmStockItems { get; set; }
public virtual DbSet<PhLsmStockLocation> PhLsmStockLocations { get; set; }
public virtual DbSet<PhLsmStockOut> PhLsmStockOuts { get; set; }
public virtual DbSet<PhLsmStockReservation> PhLsmStockReservations { get; set; }
public virtual DbSet<PhLsmUnitOfMeasure> PhLsmUnitOfMeasures { get; set; }
public virtual DbSet<PhOhArcadocumentType> PhOhArcadocumentTypes { get; set; }
public virtual DbSet<PhOhArcataxType> PhOhArcataxTypes { get; set; }
public virtual DbSet<PhOhExchangeRateHistory> PhOhExchangeRateHistories { get; set; }
public virtual DbSet<PhOhTaxCondition> PhOhTaxConditions { get; set; }
public virtual DbSet<PhOhTicket> PhOhTickets { get; set; }
public virtual DbSet<PhSAccountType> PhSAccountTypes { get; set; }
public virtual DbSet<PhSAdjustmentReason> PhSAdjustmentReasons { get; set; }
public virtual DbSet<PhSBusinessUnit> PhSBusinessUnits { get; set; }
public virtual DbSet<PhSCustomer> PhSCustomers { get; set; }
public virtual DbSet<PhSCustomerAddress> PhSCustomerAddresses { get; set; }
public virtual DbSet<PhSCustomerDocument> PhSCustomerDocuments { get; set; }
public virtual DbSet<PhSDeliveryNote> PhSDeliveryNotes { get; set; }
public virtual DbSet<PhSDeliveryNoteDetail> PhSDeliveryNoteDetails { get; set; }
public virtual DbSet<PhSDocumentType> PhSDocumentTypes { get; set; }
public virtual DbSet<PhSFormSeries> PhSFormSeries { get; set; }
public virtual DbSet<PhSFormSeriesNextNumber> PhSFormSeriesNextNumbers { get; set; }
public virtual DbSet<PhSFormType> PhSFormTypes { get; set; }
public virtual DbSet<PhSInstitution> PhSInstitutions { get; set; }
public virtual DbSet<PhSPatient> PhSPatients { get; set; }
public virtual DbSet<PhSPaymentTerm> PhSPaymentTerms { get; set; }
public virtual DbSet<PhSPeopleGroup> PhSPeopleGroups { get; set; }
public virtual DbSet<PhSPerson> PhSPeople { get; set; }
public virtual DbSet<PhSProduct> PhSProducts { get; set; }
public virtual DbSet<PhSProductCategory> PhSProductCategories { get; set; }
public virtual DbSet<PhSProfessional> PhSProfessionals { get; set; }
public virtual DbSet<PhSProfessionalSpecialty> PhSProfessionalSpecialties { get; set; }
public virtual DbSet<PhSQuoteAdjustment> PhSQuoteAdjustments { get; set; }
public virtual DbSet<PhSQuoteDetail> PhSQuoteDetails { get; set; }
public virtual DbSet<PhSQuoteHeader> PhSQuoteHeaders { get; set; }
public virtual DbSet<PhSQuoteRole> PhSQuoteRoles { get; set; }
public virtual DbSet<PhSQuoteTaxis> PhSQuoteTaxes { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.UseCollation("Modern_Spanish_CI_AS");
modelBuilder.Entity<PhLsmExpeditionDetail>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_Ex__3213E83F030D2D60");
entity.ToTable("PhLSM_ExpeditionDetails");
entity.HasIndex(e => e.ExpeditionId, "IX_PhLSM_ExpeditionDetails_Expedition");
entity.HasIndex(e => new { e.ExpeditionId, e.StockitemId }, "IX_PhLSM_ExpeditionDetails_Expedition_StockItem");
entity.HasIndex(e => e.ProductId, "IX_PhLSM_ExpeditionDetails_Product");
entity.HasIndex(e => e.StockitemId, "IX_PhLSM_ExpeditionDetails_StockItem");
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.Property(e => e.Serial)
.HasMaxLength(100)
.HasComment("Número de serie de la unidad individual, según etiqueta de trazabilidad del fabricante.")
.HasColumnName("serial");
entity.Property(e => e.StockitemId)
.HasComment("Referencia a StockItem (PhLSM_StockItem)")
.HasColumnName("stockitem_id");
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");
entity.HasOne(d => d.Stockitem).WithMany(p => p.PhLsmExpeditionDetails)
.HasForeignKey(d => d.StockitemId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhLSM_ExpeditionDetails_PhLSM_StockItem");
});
modelBuilder.Entity<PhLsmExpeditionHeader>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_Ex__3213E83FBD69DF6E");
entity.ToTable("PhLSM_ExpeditionHeaders");
entity.HasIndex(e => e.Expeditionnumber, "UX_PhLSM_ExpeditionHeaders_Number").IsUnique();
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<PhLsmProduct>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_Pr__3213E83F874510C5");
entity.ToTable("PhLSM_Product");
entity.Property(e => e.Id)
.HasComment("Identificador único del producto médico o industrial")
.HasColumnName("id");
entity.Property(e => e.Descripcion)
.HasMaxLength(255)
.HasComment("Descripción comercial o práctica del producto (impresión logística, uso cotidiano)")
.HasColumnName("descripcion");
entity.Property(e => e.DivisionId)
.HasComment("División o familia técnica del producto (ej: columna, trauma, descartables, etc.)")
.HasColumnName("division_id");
entity.Property(e => e.ExternalCode)
.HasMaxLength(50)
.HasComment("Código externo estándar del producto (ej: GTIN, código de proveedor, catálogo EAN, etc.)")
.HasColumnName("external_code");
entity.Property(e => e.FactoryCode)
.HasMaxLength(50)
.HasComment("Código de producto definido por la fábrica o fabricante. Puede variar según proveedor, presentación o país de origen.")
.HasColumnName("factory_code");
entity.Property(e => e.Name)
.HasMaxLength(255)
.HasComment("Nombre técnico o estandarizado del producto (ej: ficha técnica, fabricante)")
.HasColumnName("name");
entity.Property(e => e.PlusProcess)
.HasComment("Indica si el producto requiere un proceso adicional previo a su uso (ej: esterilización, calibración, limpieza, inspección, etc.)")
.HasColumnName("plus_process");
entity.Property(e => e.ProductType)
.HasComment("Tipo de producto: 1=Implantable, 2=Instrumental, 3=Inyectable, etc.")
.HasColumnName("product_type");
entity.Property(e => e.RegulatoryCode)
.HasMaxLength(50)
.HasComment("Código regulatorio (PM) o registro sanitario oficial del producto. Registro otorgado por ANMAT u ente regulador.")
.HasColumnName("regulatory_code");
entity.Property(e => e.TraceabilityType)
.HasComment("Tipo de trazabilidad: 1=No aplica, 2=Por cantidad, 3=Por lote y vencimiento")
.HasColumnName("traceability_type");
entity.Property(e => e.UnitId)
.HasComment("Unidad de medida base del producto (ej: unidad, mililitro, metro)")
.HasColumnName("unit_id");
entity.HasOne(d => d.Division).WithMany(p => p.PhLsmProducts)
.HasForeignKey(d => d.DivisionId)
.HasConstraintName("FK__PhLSM_Pro__divis__2EFAF1E2");
entity.HasOne(d => d.Unit).WithMany(p => p.PhLsmProducts)
.HasForeignKey(d => d.UnitId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhLSM_Product_Unit");
});
modelBuilder.Entity<PhLsmProductDivision>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_Pr__3213E83F27FDF540");
entity.ToTable("PhLSM_ProductDivision");
entity.HasIndex(e => e.Code, "UQ_PhLSM_ProductDivision_code").IsUnique();
entity.Property(e => e.Id)
.HasComment("Identificador único de la división de productos")
.HasColumnName("id");
entity.Property(e => e.Code)
.HasMaxLength(50)
.HasDefaultValue("")
.HasComment("Código breve de la división, coincide con la línea original (ej: TCLO, CMF_J)")
.HasColumnName("code");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasComment("Descripción adicional de la división de productos (opcional)")
.HasColumnName("description");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasComment("Nombre de la división o familia técnica de productos (ej: columna, trauma, descartables, etc.)")
.HasColumnName("name");
});
modelBuilder.Entity<PhLsmProductSet>(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<PhLsmProductSetItem>(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<PhLsmStockEntry>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83F7F20E170");
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 utilizada en la valorización (ARS, USD, EUR)")
.UseCollation("Latin1_General_CI_AS")
.HasColumnName("currency");
entity.Property(e => e.Entrydate)
.HasComment("Fecha del ingreso de stock")
.HasColumnType("datetime")
.HasColumnName("entrydate");
entity.Property(e => e.Exchangerate)
.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("Producto ingresado al stock")
.HasColumnName("product_id");
entity.Property(e => e.Quantity)
.HasComment("Cantidad ingresada del producto")
.HasColumnType("decimal(18, 4)")
.HasColumnName("quantity");
entity.Property(e => e.Reference)
.HasMaxLength(100)
.HasComment("Referencia visible del movimiento (ej: factura, orden de compra)")
.UseCollation("Latin1_General_CI_AS")
.HasColumnName("reference");
entity.Property(e => e.SourceId)
.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 (purchase, return, manual, etc.)")
.UseCollation("Latin1_General_CI_AS")
.HasColumnName("sourcetype");
entity.Property(e => e.Unitprice)
.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_StockEntry_PhLSM_Product");
});
modelBuilder.Entity<PhLsmStockItem>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83FB413CCCD");
entity.ToTable("PhLSM_StockItem");
entity.HasIndex(e => new { e.ProductId, e.LocationId, e.Batch }, "UQ_PhLSM_StockItem_ProdLoc_BatchOnly")
.IsUnique()
.HasFilter("([serial] IS NULL AND [batch] IS NOT NULL AND [expiration] IS NULL)");
entity.HasIndex(e => new { e.ProductId, e.LocationId, e.Batch, e.Expiration }, "UQ_PhLSM_StockItem_ProdLoc_Batch_Exp")
.IsUnique()
.HasFilter("([serial] IS NULL AND [batch] IS NOT NULL AND [expiration] IS NOT NULL)");
entity.HasIndex(e => new { e.ProductId, e.LocationId }, "UQ_PhLSM_StockItem_ProdLoc_None")
.IsUnique()
.HasFilter("([serial] IS NULL AND [batch] IS NULL AND [expiration] IS NULL)");
entity.HasIndex(e => new { e.ProductId, e.Serial }, "UQ_PhLSM_StockItem_Product_Serial")
.IsUnique()
.HasFilter("([serial] IS NOT NULL)");
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)")
.HasColumnName("expiration");
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.Serial)
.HasMaxLength(100)
.IsUnicode(false)
.HasComment("Número de serie de la unidad individual, según etiqueta de trazabilidad del fabricante.")
.HasColumnName("serial");
entity.Property(e => e.Status)
.HasComment("Estado del ítem (1=Disponible, 2=Reservado, 3=Vencido, etc.)")
.HasColumnName("status");
entity.HasOne(d => d.Location).WithMany(p => p.PhLsmStockItems)
.HasForeignKey(d => d.LocationId)
.OnDelete(DeleteBehavior.ClientSetNull)
.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_StockItem_PhLSM_Product");
});
modelBuilder.Entity<PhLsmStockLocation>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_St__3213E83F68EA6A9A");
entity.ToTable("PhLSM_StockLocation");
entity.Property(e => e.Id)
.HasComment("Identificador único de la ubicación de stock")
.HasColumnName("id");
entity.Property(e => e.Descripcion)
.HasMaxLength(255)
.HasComment("Descripción o comentario adicional sobre la ubicación")
.HasColumnName("descripcion");
entity.Property(e => e.Nombre)
.HasMaxLength(100)
.HasComment("Nombre visible de la ubicación (ej: Depósito Central, Cuarentena, Caja A1)")
.HasColumnName("nombre");
});
modelBuilder.Entity<PhLsmStockOut>(entity =>
{
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)")
.UseCollation("Latin1_General_CI_AS")
.HasColumnName("currency");
entity.Property(e => e.Exchangerate)
.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")
.HasColumnName("outdate");
entity.Property(e => e.ProductId)
.HasComment("Producto retirado del stock")
.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)")
.HasColumnName("source_id");
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_StockOut_PhLSM_Product");
});
modelBuilder.Entity<PhLsmStockReservation>(entity =>
{
entity.ToTable("PhLSM_StockReservation", tb => tb.HasComment("Reservas de stock por origen genérico (source_type/source_id). Cada fila bloquea cantidad sobre un StockItem. No duplica lote/serie/vencimiento; se resuelve por JOIN a PhLSM_StockItem."));
entity.HasIndex(e => new { e.SourceType, e.SourceId, e.Status }, "IX_PhLSM_StockReservation_Source_Status");
entity.HasIndex(e => e.StockitemId, "IX_PhLSM_StockReservation_StockItem_Reserved").HasFilter("([status]=(1))");
entity.HasIndex(e => new { e.SourceType, e.SourceId, e.StockitemId }, "UX_PhLSM_StockReservation_Source_StockItem_Consumed")
.IsUnique()
.HasFilter("([status]=(3))");
entity.HasIndex(e => new { e.SourceType, e.SourceId, e.StockitemId }, "UX_PhLSM_StockReservation_Source_StockItem_Reserved")
.IsUnique()
.HasFilter("([status]=(1))");
entity.Property(e => e.Id)
.HasComment("Identificador autoincremental de la reserva.")
.HasColumnName("id");
entity.Property(e => e.Createdat)
.HasPrecision(0)
.HasDefaultValueSql("(sysutcdatetime())")
.HasComment("Fecha/hora de creación (UTC).")
.HasColumnName("createdat");
entity.Property(e => e.Modifiedat)
.HasPrecision(0)
.HasComment("Última modificación (UTC). Puede ser NULL si nunca se actualizó.")
.HasColumnName("modifiedat");
entity.Property(e => e.ReservedQuantity)
.HasComment("Cantidad reservada (bloqueada). No disponible mientras status=1 (Reserved).")
.HasColumnType("decimal(18, 2)")
.HasColumnName("reserved_quantity");
entity.Property(e => e.Rowversion)
.IsRowVersion()
.IsConcurrencyToken()
.HasComment("Token de concurrencia optimista (ROWVERSION) para actualizaciones seguras.")
.HasColumnName("rowversion");
entity.Property(e => e.SourceId)
.HasComment("Identificador del origen. Ej.: expedition_id cuando source_type=1.")
.HasColumnName("source_id");
entity.Property(e => e.SourceType)
.HasDefaultValue((byte)1)
.HasComment("Tipo de origen de la reserva. 1=Expedition (extensible a futuros orígenes).")
.HasColumnName("source_type");
entity.Property(e => e.Status)
.HasDefaultValue(1)
.HasComment("Estado de la reserva: 1=Reserved, 2=Released, 3=Consumed.")
.HasColumnName("status");
entity.Property(e => e.StockitemId)
.HasComment("Referencia al StockItem exacto bloqueado (FK a PhLSM_StockItem). Define producto/ubicación/trazabilidad por JOIN.")
.HasColumnName("stockitem_id");
entity.HasOne(d => d.Stockitem).WithMany(p => p.PhLsmStockReservations)
.HasForeignKey(d => d.StockitemId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhLSM_StockReservation_StockItem");
});
modelBuilder.Entity<PhLsmUnitOfMeasure>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhLSM_Un__3213E83FD70349B6");
entity.ToTable("PhLSM_UnitOfMeasure");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Code)
.HasMaxLength(10)
.HasComment("Código abreviado de unidad de medida (ej: UN, ML, MT)")
.HasColumnName("code");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasComment("Descripción extendida o notas adicionales sobre la unidad")
.HasColumnName("description");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasComment("Nombre descriptivo de la unidad de medida")
.HasColumnName("name");
});
modelBuilder.Entity<PhOhArcadocumentType>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhOH_ARC__3213E83FF8940395");
entity.ToTable("PhOH_ARCADocumentTypes", tb => tb.HasComment("Catálogo oficial de tipos de comprobantes AFIP."));
entity.Property(e => e.Id)
.ValueGeneratedNever()
.HasColumnName("id");
entity.Property(e => e.Code)
.HasMaxLength(3)
.IsUnicode(false)
.IsFixedLength()
.HasColumnName("code");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasColumnName("description");
entity.Property(e => e.Isactive)
.HasDefaultValue(true)
.HasColumnName("isactive");
entity.Property(e => e.Letter)
.HasMaxLength(1)
.IsUnicode(false)
.IsFixedLength()
.HasColumnName("letter");
});
modelBuilder.Entity<PhOhArcataxType>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhOH_ARC__3213E83F4205B7E5");
entity.ToTable("PhOH_ARCATaxTypes", tb => tb.HasComment("Tabla de referencia de tipos de impuestos según AFIP para operaciones de venta."));
entity.Property(e => e.Id)
.HasComment("Identificador único del impuesto.")
.HasColumnName("id");
entity.Property(e => e.CreatedAt)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación del registro.")
.HasColumnType("datetime")
.HasColumnName("created_at");
entity.Property(e => e.Description)
.HasMaxLength(100)
.IsUnicode(false)
.HasComment("Descripción del impuesto.")
.HasColumnName("description");
entity.Property(e => e.IsActive)
.HasDefaultValue(true)
.HasComment("Indica si el impuesto está activo (1) o inactivo (0).")
.HasColumnName("is_active");
entity.Property(e => e.ModifiedAt)
.HasComment("Fecha de última modificación del registro.")
.HasColumnType("datetime")
.HasColumnName("modified_at");
entity.Property(e => e.TaxCode)
.HasComment("Código oficial del impuesto según AFIP.")
.HasColumnName("tax_code");
entity.Property(e => e.Taxrate)
.HasComment("Porcentaje de la alícuota aplicable al impuesto, expresado como un valor decimal. Una alícuota del 21%, se debe almacenar el valor 21.00")
.HasColumnType("decimal(18, 0)")
.HasColumnName("taxrate");
});
modelBuilder.Entity<PhOhExchangeRateHistory>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhOH_Exc__3213E83F4D9813B8");
entity.ToTable("PhOH_ExchangeRateHistory", tb => tb.HasComment("Histórico de cotizaciones diarias del dólar oficial del BCRA"));
entity.HasIndex(e => e.Ratedate, "UQ__PhOH_Exc__81B17E87D8FDABB7").IsUnique();
entity.Property(e => e.Id)
.HasComment("Clave primaria autonumérica")
.HasColumnName("id");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(sysutcdatetime())")
.HasComment("Fecha y hora en que se guardó el registro")
.HasColumnName("createdat");
entity.Property(e => e.Purchaserate)
.HasComment("Tasa de compra del dólar oficial")
.HasColumnType("decimal(18, 6)")
.HasColumnName("purchaserate");
entity.Property(e => e.Ratedate)
.HasComment("Fecha de la cotización (por ejemplo, 2025-05-06)")
.HasColumnName("ratedate");
entity.Property(e => e.Salerate)
.HasComment("Tasa de venta del dólar oficial")
.HasColumnType("decimal(18, 6)")
.HasColumnName("salerate");
entity.Property(e => e.Source)
.HasMaxLength(100)
.IsUnicode(false)
.HasDefaultValue("BCRA")
.HasComment("Origen del dato (por ejemplo, BCRA, Blue, MEP, etc.)")
.HasColumnName("source");
});
modelBuilder.Entity<PhOhTaxCondition>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhOH_Tax__3213E83F26F7EAEF");
entity.ToTable("PhOH_Tax_Conditions");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.CmpClase)
.HasMaxLength(10)
.HasColumnName("cmp_clase");
entity.Property(e => e.Description)
.HasMaxLength(100)
.HasColumnName("description");
});
modelBuilder.Entity<PhOhTicket>(entity =>
{
entity.HasKey(e => e.TicketId).HasName("PK__PhOH_Tic__712CC607E630F981");
entity.ToTable("PhOH_Tickets");
entity.Property(e => e.TicketId).HasDefaultValueSql("(newid())");
entity.Property(e => e.AsignadoAusuarioId)
.HasMaxLength(128)
.HasColumnName("AsignadoAUsuarioId");
entity.Property(e => e.Categoria).HasMaxLength(50);
entity.Property(e => e.CreadorUsuarioId).HasMaxLength(128);
entity.Property(e => e.Departamento).HasMaxLength(50);
entity.Property(e => e.Estado).HasMaxLength(50);
entity.Property(e => e.FechaCreacion).HasColumnType("datetime");
entity.Property(e => e.FechaEjecucion).HasColumnType("datetime");
entity.Property(e => e.Impacto).HasMaxLength(50);
entity.Property(e => e.Prioridad).HasMaxLength(50);
entity.Property(e => e.Urgencia).HasMaxLength(50);
});
modelBuilder.Entity<PhSAccountType>(entity =>
{
entity.ToTable("PhS_AccountTypes");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.CreationDate)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("creation_date");
entity.Property(e => e.CreditLimit)
.HasColumnType("decimal(18, 2)")
.HasColumnName("credit_limit");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasColumnName("description");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("name");
});
modelBuilder.Entity<PhSAdjustmentReason>(entity =>
{
entity.HasKey(e => e.Code).HasName("PK__PhS_Adju__357D4CF809676D8C");
entity.ToTable("PhS_AdjustmentReasons");
entity.Property(e => e.Code)
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnName("code");
entity.Property(e => e.Active)
.HasDefaultValue(true)
.HasColumnName("active");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.Description)
.HasMaxLength(100)
.HasColumnName("description");
});
modelBuilder.Entity<PhSBusinessUnit>(entity =>
{
entity.ToTable("PhS_BusinessUnits");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Code)
.HasMaxLength(10)
.HasColumnName("code");
entity.Property(e => e.Description)
.HasMaxLength(100)
.HasColumnName("description");
entity.Property(e => e.Manager)
.HasMaxLength(50)
.HasColumnName("manager");
});
modelBuilder.Entity<PhSCustomer>(entity =>
{
entity.ToTable("PhS_Customers");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.AccounttypesId).HasColumnName("accounttypes_id");
entity.Property(e => e.Active).HasColumnName("active");
entity.Property(e => e.BusinessName)
.HasMaxLength(100)
.HasColumnName("business_name");
entity.Property(e => e.CreditLimit)
.HasColumnType("decimal(18, 2)")
.HasColumnName("credit_limit");
entity.Property(e => e.ExternalCode)
.HasMaxLength(10)
.IsFixedLength()
.HasColumnName("external_code");
entity.Property(e => e.HasCreditAccount).HasColumnName("has_credit_account");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasColumnName("name");
entity.Property(e => e.TaxConditionId).HasColumnName("tax_condition_id");
entity.HasOne(d => d.Accounttypes).WithMany(p => p.PhSCustomers)
.HasForeignKey(d => d.AccounttypesId)
.HasConstraintName("FK_PhS_Customers_PhS_AccountTypes");
entity.HasOne(d => d.TaxCondition).WithMany(p => p.PhSCustomers)
.HasForeignKey(d => d.TaxConditionId)
.HasConstraintName("FK_PhS_Customers_PhOH_Tax_Conditions");
});
modelBuilder.Entity<PhSCustomerAddress>(entity =>
{
entity.ToTable("PhS_CustomerAddress");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.BusinessName)
.HasMaxLength(100)
.IsUnicode(false)
.HasColumnName("business_name");
entity.Property(e => e.City)
.HasMaxLength(100)
.IsUnicode(false)
.HasColumnName("city");
entity.Property(e => e.Country)
.HasMaxLength(100)
.IsUnicode(false)
.HasColumnName("country");
entity.Property(e => e.CustomersId).HasColumnName("customers_id");
entity.Property(e => e.Email)
.HasMaxLength(100)
.IsUnicode(false)
.HasColumnName("email");
entity.Property(e => e.Latitude)
.HasColumnType("decimal(9, 6)")
.HasColumnName("latitude");
entity.Property(e => e.Longitude)
.HasColumnType("decimal(9, 6)")
.HasColumnName("longitude");
entity.Property(e => e.Notes)
.HasMaxLength(255)
.IsUnicode(false)
.HasColumnName("notes");
entity.Property(e => e.Phonenumber)
.HasMaxLength(25)
.IsUnicode(false)
.HasColumnName("phonenumber");
entity.Property(e => e.Postalcode)
.HasMaxLength(20)
.IsUnicode(false)
.HasColumnName("postalcode");
entity.Property(e => e.Stateprovince)
.HasMaxLength(100)
.IsUnicode(false)
.HasColumnName("stateprovince");
entity.Property(e => e.Streetaddress1)
.HasMaxLength(255)
.IsUnicode(false)
.HasColumnName("streetaddress1");
entity.Property(e => e.Streetaddress2)
.HasMaxLength(255)
.IsUnicode(false)
.HasColumnName("streetaddress2");
entity.HasOne(d => d.Customers).WithMany(p => p.PhSCustomerAddresses)
.HasForeignKey(d => d.CustomersId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhS_CustomerAddress_PhS_Customers");
});
modelBuilder.Entity<PhSCustomerDocument>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Cust__3213E83F32E80850");
entity.ToTable("PhS_CustomerDocuments");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.CustomersId).HasColumnName("customers_id");
entity.Property(e => e.DocumentNumber)
.HasMaxLength(50)
.HasColumnName("document_number");
entity.Property(e => e.DocumenttypesId).HasColumnName("documenttypes_id");
entity.Property(e => e.ExpiryDate).HasColumnName("expiry_date");
entity.Property(e => e.IssueDate).HasColumnName("issue_date");
entity.HasOne(d => d.Customers).WithMany(p => p.PhSCustomerDocuments)
.HasForeignKey(d => d.CustomersId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK__PhS_Custo__custo__6754599E");
entity.HasOne(d => d.Documenttypes).WithMany(p => p.PhSCustomerDocuments)
.HasForeignKey(d => d.DocumenttypesId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhS_CustomerDocuments_PhS_DocumentTypes");
});
modelBuilder.Entity<PhSDeliveryNote>(entity =>
{
entity.ToTable("PhS_DeliveryNotes");
entity.HasIndex(e => e.CustomerId, "IX_PhS_DeliveryNotes_customer_id");
entity.HasIndex(e => e.Issuedate, "IX_PhS_DeliveryNotes_issuedate");
entity.HasIndex(e => e.QuoteId, "IX_PhS_DeliveryNotes_quote_id");
entity.HasIndex(e => e.Status, "IX_PhS_DeliveryNotes_status");
entity.HasIndex(e => e.Deliverynotenumber, "UQ_PhS_DeliveryNotes_deliverynotenumber").IsUnique();
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.CustomerId).HasColumnName("customer_id");
entity.Property(e => e.Deliverynotenumber)
.HasMaxLength(20)
.IsUnicode(false)
.HasColumnName("deliverynotenumber");
entity.Property(e => e.ExtrainfoJson).HasColumnName("extrainfo_json");
entity.Property(e => e.Issuedate)
.HasColumnType("datetime")
.HasColumnName("issuedate");
entity.Property(e => e.Modifiedat)
.HasColumnType("datetime")
.HasColumnName("modifiedat");
entity.Property(e => e.Observations)
.HasMaxLength(1000)
.HasColumnName("observations");
entity.Property(e => e.Printcount).HasColumnName("printcount");
entity.Property(e => e.QuoteId).HasColumnName("quote_id");
entity.Property(e => e.SalesinvoiceId).HasColumnName("salesinvoice_id");
entity.Property(e => e.Status)
.HasMaxLength(20)
.IsUnicode(false)
.HasColumnName("status");
entity.HasOne(d => d.Customer).WithMany(p => p.PhSDeliveryNotes)
.HasForeignKey(d => d.CustomerId)
.OnDelete(DeleteBehavior.ClientSetNull);
entity.HasOne(d => d.Quote).WithMany(p => p.PhSDeliveryNotes).HasForeignKey(d => d.QuoteId);
});
modelBuilder.Entity<PhSDeliveryNoteDetail>(entity =>
{
entity.ToTable("PhS_DeliveryNoteDetails");
entity.HasIndex(e => e.DeliverynoteId, "IX_PhS_DeliveryNoteDetails_deliverynote_id");
entity.HasIndex(e => new { e.DeliverynoteId, e.LineNumber }, "IX_PhS_DeliveryNoteDetails_deliverynote_id_line_number");
entity.HasIndex(e => new { e.OriginType, e.OriginId }, "IX_PhS_DeliveryNoteDetails_origin_type_origin_id");
entity.HasIndex(e => e.QuoteDetailId, "IX_PhS_DeliveryNoteDetails_quote_detail_id");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.DeliverynoteId).HasColumnName("deliverynote_id");
entity.Property(e => e.Description)
.HasMaxLength(500)
.HasColumnName("description");
entity.Property(e => e.LineNumber).HasColumnName("line_number");
entity.Property(e => e.Modifiedat)
.HasColumnType("datetime")
.HasColumnName("modifiedat");
entity.Property(e => e.Notes)
.HasMaxLength(1000)
.HasDefaultValue("")
.HasColumnName("notes");
entity.Property(e => e.OriginId).HasColumnName("origin_id");
entity.Property(e => e.OriginType).HasColumnName("origin_type");
entity.Property(e => e.Quantity)
.HasColumnType("decimal(18, 2)")
.HasColumnName("quantity");
entity.Property(e => e.QuoteDetailId).HasColumnName("quote_detail_id");
entity.HasOne(d => d.Deliverynote).WithMany(p => p.PhSDeliveryNoteDetails)
.HasForeignKey(d => d.DeliverynoteId)
.OnDelete(DeleteBehavior.ClientSetNull);
entity.HasOne(d => d.QuoteDetail).WithMany(p => p.PhSDeliveryNoteDetails).HasForeignKey(d => d.QuoteDetailId);
});
modelBuilder.Entity<PhSDocumentType>(entity =>
{
entity.ToTable("PhS_DocumentTypes");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Code)
.HasMaxLength(4)
.HasColumnName("code");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasColumnName("description");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasColumnName("name");
});
modelBuilder.Entity<PhSFormSeries>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Form__3213E83F7D86A419");
entity.ToTable("PhS_FormSeries", tb => tb.HasComment("FormSeries: talonarios/series por tipo de formulario, letra y punto de venta."));
entity.HasIndex(e => e.FormtypeId, "IX_PhS_FormSeries_FormType");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.FormtypeId)
.HasComment("FK a tipo de formulario (PhS_FormTypes).")
.HasColumnName("formtype_id");
entity.Property(e => e.Isactive)
.HasDefaultValue(true)
.HasComment("Indica si está habilitada.")
.HasColumnName("isactive");
entity.Property(e => e.Isdefault)
.HasComment("Marca esta serie como predeterminada.")
.HasColumnName("isdefault");
entity.Property(e => e.Letter)
.HasMaxLength(1)
.IsUnicode(false)
.IsFixedLength()
.HasComment("Letra de serie (A,B,C...).")
.HasColumnName("letter");
entity.Property(e => e.Modifiedat)
.HasColumnType("datetime")
.HasColumnName("modifiedat");
entity.Property(e => e.NumberingSource)
.HasMaxLength(20)
.IsUnicode(false)
.HasDefaultValue("INTERNAL")
.HasColumnName("numbering_source");
entity.Property(e => e.Pointofsale)
.HasComment("Punto de venta asignado.")
.HasColumnName("pointofsale");
entity.HasOne(d => d.Formtype).WithMany(p => p.PhSFormSeries)
.HasForeignKey(d => d.FormtypeId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhS_FormSeries_FormTypes");
});
modelBuilder.Entity<PhSFormSeriesNextNumber>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Form__3213E83F60B7AAE4");
entity.ToTable("PhS_FormSeriesNextNumber", tb => tb.HasComment("Mantiene el siguiente número correlativo para cada FormSeries."));
entity.HasIndex(e => e.FormseriesId, "IX_PhS_NextNumber_FormSeriesId").IsUnique();
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.FormseriesId)
.HasComment("FK a PhS_FormSeries.")
.HasColumnName("formseries_id");
entity.Property(e => e.Nextnumber)
.HasComment("Próximo número correlativo.")
.HasColumnName("nextnumber");
entity.HasOne(d => d.Formseries).WithOne(p => p.PhSFormSeriesNextNumber)
.HasForeignKey<PhSFormSeriesNextNumber>(d => d.FormseriesId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhS_NextNumber_FormSeries");
});
modelBuilder.Entity<PhSFormType>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Form__3213E83FF7278F22");
entity.ToTable("PhS_FormTypes", tb => tb.HasComment("Tipos genéricos de formularios del sistema (presupuesto, factura, recibo, etc.)"));
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Code)
.HasMaxLength(20)
.IsUnicode(false)
.HasColumnName("code");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasColumnName("name");
});
modelBuilder.Entity<PhSInstitution>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Inst__3213E83F7645655B");
entity.ToTable("PhS_Institutions");
entity.HasIndex(e => e.Name, "IDX_PhS_Institutions_Name");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.City)
.HasMaxLength(100)
.HasColumnName("city");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.Email)
.HasMaxLength(150)
.HasColumnName("email");
entity.Property(e => e.Isactive)
.HasDefaultValue(true)
.HasColumnName("isactive");
entity.Property(e => e.Name)
.HasMaxLength(200)
.HasColumnName("name");
entity.Property(e => e.Operatingroominfo)
.HasMaxLength(200)
.HasColumnName("operatingroominfo");
entity.Property(e => e.Phone)
.HasMaxLength(50)
.HasColumnName("phone");
entity.Property(e => e.Province)
.HasMaxLength(100)
.HasColumnName("province");
entity.Property(e => e.Streetaddress)
.HasMaxLength(250)
.HasColumnName("streetaddress");
entity.Property(e => e.Type)
.HasMaxLength(15)
.HasColumnName("type");
});
modelBuilder.Entity<PhSPatient>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Pati__3213E83F93A6EB7E");
entity.ToTable("PhS_Patients");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Address)
.HasMaxLength(250)
.HasColumnName("address");
entity.Property(e => e.AffiliateNumber)
.HasMaxLength(100)
.HasColumnName("affiliate_number");
entity.Property(e => e.Birthdate).HasColumnName("birthdate");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.CustomerId).HasColumnName("customer_id");
entity.Property(e => e.DocumentNumber)
.HasMaxLength(50)
.HasColumnName("document_number");
entity.Property(e => e.DocumenttypesId).HasColumnName("documenttypes_id");
entity.Property(e => e.Email)
.HasMaxLength(150)
.HasColumnName("email");
entity.Property(e => e.Firstname)
.HasMaxLength(100)
.HasColumnName("firstname");
entity.Property(e => e.Gender)
.HasMaxLength(10)
.HasColumnName("gender");
entity.Property(e => e.Lastname)
.HasMaxLength(100)
.HasColumnName("lastname");
entity.Property(e => e.Modifiedat)
.HasColumnType("datetime")
.HasColumnName("modifiedat");
entity.Property(e => e.Notes).HasColumnName("notes");
entity.Property(e => e.Phone)
.HasMaxLength(50)
.HasColumnName("phone");
entity.HasOne(d => d.Customer).WithMany(p => p.PhSPatients)
.HasForeignKey(d => d.CustomerId)
.HasConstraintName("FK_Patients_Customers");
entity.HasOne(d => d.Documenttypes).WithMany(p => p.PhSPatients)
.HasForeignKey(d => d.DocumenttypesId)
.HasConstraintName("FK_Patients_DocumentTypes");
});
modelBuilder.Entity<PhSPaymentTerm>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Paym__3213E83F53A19842");
entity.ToTable("PhS_PaymentTerms", tb => tb.HasComment("Tabla de condiciones o términos de pago aplicables a los presupuestos."));
entity.Property(e => e.Id)
.HasComment("Identificador único de la condición de pago.")
.HasColumnName("id");
entity.Property(e => e.Days)
.HasComment("Cantidad de días establecidos para el pago. Contado = 0, 30 días = 30, etc.")
.HasColumnName("days");
entity.Property(e => e.Description)
.HasMaxLength(100)
.HasComment("Descripción de la condición de pago (ej: Contado, 30 días, etc.).")
.HasColumnName("description");
entity.Property(e => e.Isactive)
.HasDefaultValue(true)
.HasComment("Indica si el término de pago está activo (1) o no (0).")
.HasColumnName("isactive");
});
modelBuilder.Entity<PhSPeopleGroup>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Peop__3213E83F8005BEA1");
entity.ToTable("PhS_PeopleGroups");
entity.Property(e => e.Id)
.HasComment("Identificador único del grupo de personas")
.HasColumnName("id");
entity.Property(e => e.Active)
.HasDefaultValue(true)
.HasComment("Estado activo o inactivo del grupo")
.HasColumnName("active");
entity.Property(e => e.BusinessunitsId)
.HasComment("Unidad de negocio relacionada (opcional)")
.HasColumnName("businessunits_id");
entity.Property(e => e.CreatedAt)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación del grupo")
.HasColumnType("datetime")
.HasColumnName("created_at");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasComment("Descripción adicional del grupo")
.HasColumnName("description");
entity.Property(e => e.ModifiedAt)
.HasComment("Fecha de última modificación")
.HasColumnType("datetime")
.HasColumnName("modified_at");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasComment("Nombre del grupo de vendedores")
.HasColumnName("name");
});
modelBuilder.Entity<PhSPerson>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Peop__3213E83F52F7C072");
entity.ToTable("PhS_People");
entity.Property(e => e.Id)
.HasComment("Identificador único de la persona (vendedor/agente)")
.HasColumnName("id");
entity.Property(e => e.Active)
.HasDefaultValue(true)
.HasComment("Activo/Inactivo")
.HasColumnName("active");
entity.Property(e => e.BusinessunitsId)
.HasComment("Unidad de negocio asignada")
.HasColumnName("businessunits_id");
entity.Property(e => e.CreatedAt)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación")
.HasColumnType("datetime")
.HasColumnName("created_at");
entity.Property(e => e.DefaultCommissionPercent)
.HasComment("Porcentaje de comisión por defecto")
.HasColumnType("decimal(5, 2)")
.HasColumnName("default_commission_percent");
entity.Property(e => e.Email)
.HasMaxLength(100)
.HasComment("Correo electrónico de la persona")
.HasColumnName("email");
entity.Property(e => e.ModifiedAt)
.HasComment("Fecha de última modificación")
.HasColumnType("datetime")
.HasColumnName("modified_at");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasComment("Nombre de la persona")
.HasColumnName("name");
entity.Property(e => e.PeoplegroupsId)
.HasComment("Grupo comercial opcional")
.HasColumnName("peoplegroups_id");
entity.Property(e => e.Phone)
.HasMaxLength(50)
.HasComment("Teléfono de contacto de la persona")
.HasColumnName("phone");
entity.HasOne(d => d.Businessunits).WithMany(p => p.PhSPeople)
.HasForeignKey(d => d.BusinessunitsId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_people_businessunits");
entity.HasOne(d => d.Peoplegroups).WithMany(p => p.PhSPeople)
.HasForeignKey(d => d.PeoplegroupsId)
.HasConstraintName("FK_people_peoplegroups");
});
modelBuilder.Entity<PhSProduct>(entity =>
{
entity.ToTable("PhS_Products");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Baseprice)
.HasColumnType("decimal(18, 2)")
.HasColumnName("baseprice");
entity.Property(e => e.BusinessunitsId).HasColumnName("businessunits_id");
entity.Property(e => e.Categoryid).HasColumnName("categoryid");
entity.Property(e => e.Currency)
.HasMaxLength(3)
.IsUnicode(false)
.HasDefaultValue("ARS")
.HasColumnName("currency");
entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.Isactive)
.HasDefaultValue(true)
.HasColumnName("isactive");
entity.Property(e => e.Name)
.HasMaxLength(100)
.IsFixedLength()
.HasColumnName("name");
entity.Property(e => e.Origin)
.HasMaxLength(12)
.IsUnicode(false)
.HasColumnName("origin");
entity.HasOne(d => d.Businessunits).WithMany(p => p.PhSProducts)
.HasForeignKey(d => d.BusinessunitsId)
.HasConstraintName("FK_PhS_Products_PhS_BusinessUnits");
entity.HasOne(d => d.Category).WithMany(p => p.PhSProducts)
.HasForeignKey(d => d.Categoryid)
.HasConstraintName("FK_PhS_Products_Categories");
});
modelBuilder.Entity<PhSProductCategory>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Prod__3214EC070BF59892");
entity.ToTable("PhS_ProductCategories");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Description)
.HasMaxLength(250)
.HasColumnName("description");
entity.Property(e => e.Isactive)
.HasDefaultValue(true)
.HasColumnName("isactive");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasColumnName("name");
});
modelBuilder.Entity<PhSProfessional>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Prof__3213E83F86B052AD");
entity.ToTable("PhS_Professionals");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Active)
.HasDefaultValue(true)
.HasColumnName("active");
entity.Property(e => e.Address)
.HasMaxLength(250)
.HasColumnName("address");
entity.Property(e => e.City)
.HasMaxLength(100)
.HasColumnName("city");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.DocumentNumber)
.HasMaxLength(50)
.HasColumnName("document_number");
entity.Property(e => e.DocumenttypeName)
.HasMaxLength(100)
.HasColumnName("documenttype_name");
entity.Property(e => e.Email)
.HasMaxLength(150)
.HasColumnName("email");
entity.Property(e => e.Fullname)
.HasMaxLength(200)
.HasColumnName("fullname");
entity.Property(e => e.License)
.HasMaxLength(50)
.HasColumnName("license");
entity.Property(e => e.Phone1)
.HasMaxLength(50)
.HasColumnName("phone1");
entity.Property(e => e.Phone2)
.HasMaxLength(50)
.HasColumnName("phone2");
entity.Property(e => e.Postalcode)
.HasMaxLength(20)
.HasColumnName("postalcode");
entity.Property(e => e.Province)
.HasMaxLength(100)
.HasColumnName("province");
entity.Property(e => e.SpecialtyId).HasColumnName("specialty_id");
entity.Property(e => e.Type)
.HasMaxLength(25)
.HasColumnName("type");
entity.HasOne(d => d.Specialty).WithMany(p => p.PhSProfessionals)
.HasForeignKey(d => d.SpecialtyId)
.HasConstraintName("FK_Professionals_Specialty");
});
modelBuilder.Entity<PhSProfessionalSpecialty>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Prof__3213E83F14C8B007");
entity.ToTable("PhS_ProfessionalSpecialties");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Active)
.HasDefaultValue(true)
.HasColumnName("active");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasColumnName("name");
});
modelBuilder.Entity<PhSQuoteAdjustment>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83FFBF7D244");
entity.ToTable("PhS_QuoteAdjustments", tb => tb.HasComment("Tabla de ajustes aplicados a presupuestos comerciales"));
entity.Property(e => e.Id)
.HasComment("ID interno del ajuste aplicado al presupuesto")
.HasColumnName("id");
entity.Property(e => e.Amount)
.HasComment("Importe del ajuste realizado (positivo o nulo)")
.HasColumnType("decimal(18, 2)")
.HasColumnName("amount");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de registro del ajuste")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.Description)
.HasMaxLength(255)
.HasComment("Descripción adicional del ajuste")
.HasColumnName("description");
entity.Property(e => e.QuoteheaderId)
.HasComment("FK al presupuesto (PhS_QuoteHeaders)")
.HasColumnName("quoteheader_id");
entity.Property(e => e.ReasonCode)
.HasMaxLength(50)
.IsUnicode(false)
.HasComment("Código del motivo de ajuste (FK a PhS_AdjustmentReasons)")
.HasColumnName("reason_code");
entity.HasOne(d => d.Quoteheader).WithMany(p => p.PhSQuoteAdjustments)
.HasForeignKey(d => d.QuoteheaderId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_QuoteAdjustments_Header");
entity.HasOne(d => d.ReasonCodeNavigation).WithMany(p => p.PhSQuoteAdjustments)
.HasForeignKey(d => d.ReasonCode)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_QuoteAdjustments_Reason");
});
modelBuilder.Entity<PhSQuoteDetail>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83F94207114");
entity.ToTable("PhS_QuoteDetails", tb => tb.HasComment("Tabla de detalles de presupuestos"));
entity.Property(e => e.Id)
.HasComment("ID interno")
.HasColumnName("id");
entity.Property(e => e.Approved)
.HasComment("¿Aprobado? (0=No, 1=Si)")
.HasColumnName("approved");
entity.Property(e => e.Approvedamount)
.HasComment("Importe aprobado final")
.HasColumnType("decimal(18, 2)")
.HasColumnName("approvedamount");
entity.Property(e => e.Approvedquantity)
.HasComment("Cantidad aprobada para este ítem del presupuesto.")
.HasColumnName("approvedquantity");
entity.Property(e => e.Approvedunitprice)
.HasComment("Precio unitario aprobado (puede diferir del original).")
.HasColumnType("decimal(18, 2)")
.HasColumnName("approvedunitprice");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación del registro")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.Modifiedat)
.HasComment("Fecha de última modificación")
.HasColumnType("datetime")
.HasColumnName("modifiedat");
entity.Property(e => e.ProductDescription)
.HasComment("Descripción modificable del producto (puede diferir del original)")
.HasColumnName("product_description");
entity.Property(e => e.ProductId)
.HasComment("ID del producto original")
.HasColumnName("product_id");
entity.Property(e => e.Quantity)
.HasDefaultValue(1)
.HasComment("Cantidad")
.HasColumnName("quantity");
entity.Property(e => e.QuoteheaderId)
.HasComment("FK a encabezado de presupuesto")
.HasColumnName("quoteheader_id");
entity.Property(e => e.Unitprice)
.HasComment("Precio unitario original")
.HasColumnType("decimal(18, 2)")
.HasColumnName("unitprice");
entity.HasOne(d => d.Product).WithMany(p => p.PhSQuoteDetails)
.HasForeignKey(d => d.ProductId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhS_QuoteDetails_PhS_Products");
entity.HasOne(d => d.Quoteheader).WithMany(p => p.PhSQuoteDetails)
.HasForeignKey(d => d.QuoteheaderId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_QuoteDetails_Header");
});
modelBuilder.Entity<PhSQuoteHeader>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83FA0B43134");
entity.ToTable("PhS_QuoteHeaders", tb => tb.HasComment("Tabla de cabeceras de presupuestos"));
entity.HasIndex(e => e.PaymenttermId, "ix_quoteheaders_paymenttermid");
entity.Property(e => e.Id)
.HasComment("ID interno")
.HasColumnName("id");
entity.Property(e => e.Approvaldate)
.HasComment("Fecha de aprobación")
.HasColumnType("datetime")
.HasColumnName("approvaldate");
entity.Property(e => e.Approvedamount)
.HasComment("Importe aprobado")
.HasColumnType("decimal(18, 2)")
.HasColumnName("approvedamount");
entity.Property(e => e.BusinessunitId)
.HasComment("Unidad de negocio")
.HasColumnName("businessunit_id");
entity.Property(e => e.Createdat)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación")
.HasColumnType("datetime")
.HasColumnName("createdat");
entity.Property(e => e.Currency)
.HasMaxLength(3)
.IsUnicode(false)
.HasDefaultValue("ARS")
.HasComment("Código de moneda pactada (ISO 4217). Ej: ARS, USD")
.HasColumnName("currency");
entity.Property(e => e.CustomerId)
.HasComment("Cliente asociado")
.HasColumnName("customer_id");
entity.Property(e => e.DispatchInstruction)
.HasMaxLength(255)
.HasComment("Instrucción dirigida al área de logística para detallar qué debe prepararse o despacharse (ej: “CMF 1.5 + INSTRUMENTAL”)")
.HasColumnName("dispatch_instruction");
entity.Property(e => e.Estimateddate)
.HasComment("Fecha tentativa (de cirugía por ej.)")
.HasColumnType("datetime")
.HasColumnName("estimateddate");
entity.Property(e => e.Exchangerate)
.HasComment("Tipo de cambio pactado para conversión a pesos argentinos")
.HasColumnType("decimal(18, 6)")
.HasColumnName("exchangerate");
entity.Property(e => e.Issuedate)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de emisión")
.HasColumnType("datetime")
.HasColumnName("issuedate");
entity.Property(e => e.Modifiedat)
.HasComment("Fecha de modificación")
.HasColumnType("datetime")
.HasColumnName("modifiedat");
entity.Property(e => e.Netamount)
.HasComment("Importe neto antes de aplicar impuestos, expresado en la moneda pactada del presupuesto")
.HasColumnType("decimal(18, 2)")
.HasColumnName("netamount");
entity.Property(e => e.Observations)
.HasComment("Observaciones internas")
.HasColumnName("observations");
entity.Property(e => e.Offervaliditydays)
.HasComment("Días de validez de la oferta. Indica cuántos días estará vigente el presupuesto desde su fecha de emisión.")
.HasColumnName("offervaliditydays");
entity.Property(e => e.OutOfTown)
.HasComment("Indica si la cirugía se realizará fuera de la ciudad/localidad habitual (“out of town”)")
.HasColumnName("out_of_town");
entity.Property(e => e.PaymenttermId)
.HasComment("Condición de pago seleccionada para el presupuesto.")
.HasColumnName("paymentterm_id");
entity.Property(e => e.PeopleId)
.HasDefaultValue(1)
.HasComment("Identificador único del vendedor")
.HasColumnName("people_id");
entity.Property(e => e.Printcount)
.HasComment("Cantidad de impresiones")
.HasColumnName("printcount");
entity.Property(e => e.Quotenumber)
.HasMaxLength(20)
.IsUnicode(false)
.HasComment("Número visible del presupuesto")
.HasColumnName("quotenumber");
entity.Property(e => e.Status)
.HasMaxLength(15)
.IsUnicode(false)
.HasDefaultValue("Emitido")
.HasComment("Estado: E (Emitido), A (Aprobado), AC (Aprobado para cirugia), etc.")
.HasColumnName("status");
entity.Property(e => e.TicketId)
.HasComment("Relación con Tickets")
.HasColumnName("ticket_id");
entity.Property(e => e.Total)
.HasComment("Importe total del presupuesto en moneda local, calculado incluyendo impuestos y convertido según tipo de cambio pactado")
.HasColumnType("decimal(18, 2)")
.HasColumnName("total");
entity.Property(e => e.TotalForeign)
.HasComment("Importe total del presupuesto expresado en la moneda pactada (extranjera), incluyendo impuestos y ajustes comerciales")
.HasColumnType("decimal(18, 2)")
.HasColumnName("total_foreign");
entity.HasOne(d => d.Paymentterm).WithMany(p => p.PhSQuoteHeaders)
.HasForeignKey(d => d.PaymenttermId)
.OnDelete(DeleteBehavior.SetNull)
.HasConstraintName("fk_quoteheaders_paymenttermid");
});
modelBuilder.Entity<PhSQuoteRole>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83F7BBCA6FF");
entity.ToTable("PhS_QuoteRoles", tb => tb.HasComment("Tabla de roles asociados a presupuestos"));
entity.HasIndex(e => new { e.Entitytype, e.EntityId }, "IX_QuoteRoles_Entity");
entity.HasIndex(e => e.QuoteheaderId, "IX_QuoteRoles_HeaderId");
entity.HasIndex(e => e.Role, "IX_QuoteRoles_Role");
entity.Property(e => e.Id)
.HasComment("ID interno")
.HasColumnName("id");
entity.Property(e => e.EntityId)
.HasComment("ID de la entidad asociada")
.HasColumnName("entity_id");
entity.Property(e => e.Entitytype)
.HasMaxLength(50)
.IsUnicode(false)
.HasComment("Tipo de entidad asociada (Ej: PhS_Professionals, PhS_Institutions, PhS_Patients)")
.HasColumnName("entitytype");
entity.Property(e => e.QuoteheaderId)
.HasComment("FK a encabezado de presupuesto (PhS_QuoteHeaders)")
.HasColumnName("quoteheader_id");
entity.Property(e => e.Role)
.HasMaxLength(50)
.IsUnicode(false)
.HasComment("Rol que cumple la entidad en el presupuesto (Ej: Medico, Hospital, Paciente)")
.HasColumnName("role");
entity.HasOne(d => d.Quoteheader).WithMany(p => p.PhSQuoteRoles)
.HasForeignKey(d => d.QuoteheaderId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_QuoteRoles_Header");
});
modelBuilder.Entity<PhSQuoteTaxis>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__PhS_Quot__3213E83F06626551");
entity.ToTable("PhS_QuoteTaxes");
entity.Property(e => e.Id)
.HasComment("Clave primaria autoincremental")
.HasColumnName("id");
entity.Property(e => e.CreatedAt)
.HasDefaultValueSql("(getdate())")
.HasComment("Fecha de creación del registro")
.HasColumnType("datetime")
.HasColumnName("created_at");
entity.Property(e => e.IsIncludedInPrice)
.HasComment("Indica si el impuesto está incluido en el precio final (1 = sí)")
.HasColumnName("is_included_in_price");
entity.Property(e => e.ModifiedAt)
.HasComment("Fecha de modificación del registro")
.HasColumnType("datetime")
.HasColumnName("modified_at");
entity.Property(e => e.QuoteheaderId)
.HasComment("Referencia al presupuesto (PhS_QuoteHeaders)")
.HasColumnName("quoteheader_id");
entity.Property(e => e.TaxableAmount)
.HasComment("Base imponible del impuesto (importe gravado)")
.HasColumnType("decimal(18, 2)")
.HasColumnName("taxable_amount");
entity.Property(e => e.Taxamount)
.HasComment("Importe final del impuesto calculado")
.HasColumnType("decimal(18, 2)")
.HasColumnName("taxamount");
entity.Property(e => e.Taxcode)
.HasMaxLength(50)
.HasComment("Código o identificador oficial del impuesto (ej. AFIP)")
.HasColumnName("taxcode");
entity.Property(e => e.Taxname)
.HasMaxLength(100)
.HasComment("Nombre descriptivo del impuesto")
.HasColumnName("taxname");
entity.Property(e => e.Taxrate)
.HasComment("Alícuota aplicada (porcentaje)")
.HasColumnType("decimal(5, 2)")
.HasColumnName("taxrate");
entity.HasOne(d => d.Quoteheader).WithMany(p => p.PhSQuoteTaxes)
.HasForeignKey(d => d.QuoteheaderId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PhS_QuoteTaxes_QuoteHeaders");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}