using adas_core.Domain.Enums; using adas_core.Domain.Models.MongoModels; using adas_core.Domain.Models.Pumps; using adas_core.Infrastructure.Utils.MongoMaps.Interfaz; using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; namespace adas_core.Infrastructure.Utils.MongoMaps { /// /// Represents a contributor that provides mapping logic for pump-related entities within an entity mapping context. /// /// public class PumpMapContributor : IEntityMapContributor { /// /// Registers BSON class maps for the pump-related domain models (, , , , , , , and ) used by the MongoDB driver. Each map is registered only when no prior registration exists for the type, optional members are configured to be ignored when null, enum properties are serialized as strings, and the Id member is mapped to the _id element where applicable. /// /// public void RegisterMaps() { // ============================================================ // CommonPumpTypes: PumpValue // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(CommonPumpTypes.PumpValue))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapMember(c => c.Value).SetIgnoreIfNull(true); cm.MapMember(c => c.Units).SetIgnoreIfNull(true); }); } // ============================================================ // CommonPumpTypes: SyringeDetails // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(CommonPumpTypes.SyringeDetails))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapMember(c => c.Type).SetIgnoreIfNull(true); cm.MapMember(c => c.Manufacturer).SetIgnoreIfNull(true); cm.MapMember(c => c.Volume).SetIgnoreIfNull(true); }); } // ============================================================ // PatientPumpObservation (nuevo modelo simplificado) // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(PumpObservation))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapIdMember(c => c.Id).SetElementName("_id"); // Identificadores cm.MapMember(c => c.DeviceId).SetIgnoreIfNull(true); cm.MapMember(c => c.RackId).SetIgnoreIfNull(true); cm.MapMember(c => c.DeviceTypeMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.InfusionId).SetIgnoreIfNull(true); cm.MapMember(c => c.PatientId).SetIgnoreIfNull(true).SetElementName("patientid"); //campos para Alaris cm.MapMember(c => c.Pressure).SetIgnoreIfNull(true); cm.MapMember(c => c.DiluentVolume).SetIgnoreIfNull(true); cm.MapMember(c => c.PatientHeight).SetIgnoreIfNull(true); cm.MapMember(c => c.BasalRate).SetIgnoreIfNull(true); cm.MapMember(c => c.TotalAux).SetIgnoreIfNull(true); cm.MapMember(c => c.GatewayNumber).SetIgnoreIfNull(true); cm.MapMember(c => c.Number).SetIgnoreIfNull(true); cm.MapMember(c => c.Total).SetIgnoreIfNull(true); cm.MapMember(c => c.IsAux).SetIgnoreIfNull(true); cm.MapMember(c => c.Code).SetIgnoreIfNull(true); cm.MapMember(c => c.Name).SetIgnoreIfNull(true); cm.UnmapMember(c => c.UiConfiguration); cm.MapMember(c => c.AlarmMode) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); // Tiempo cm.MapMember(c => c.Time).SetIgnoreIfNull(true); cm.MapMember(c => c.MessageType) .SetIgnoreIfNull(true) .SetSerializer(new EnumSerializer(BsonType.String)); // Estado de infusión cm.MapMember(c => c.IsInfusing).SetIgnoreIfNull(true); cm.MapMember(c => c.InfusingStatus) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.Status) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.PumpMode) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.ActiveSourceInfo).SetIgnoreIfNull(true); cm.MapMember(c => c.InfusionModeDetail).SetIgnoreIfNull(true); cm.MapMember(c => c.NotDeliveringReason).SetIgnoreIfNull(true); cm.MapMember(c => c.Source).SetIgnoreIfNull(true); // Métricas cm.MapMember(c => c.FlowFluid).SetIgnoreIfNull(true); cm.MapMember(c => c.Rate).SetIgnoreIfNull(true); cm.MapMember(c => c.VolumeInfused).SetIgnoreIfNull(true); cm.MapMember(c => c.FluidDelivTotal).SetIgnoreIfNull(true); cm.MapMember(c => c.FluidDelivTotalSet).SetIgnoreIfNull(true); cm.MapMember(c => c.VolumeRemaining).SetIgnoreIfNull(true); cm.MapMember(c => c.Vtbi).SetIgnoreIfNull(true); cm.MapMember(c => c.TimeRemaining).SetIgnoreIfNull(true); cm.MapMember(c => c.TimeProgrammed).SetIgnoreIfNull(true); // Medicación cm.MapMember(c => c.DrugName).SetIgnoreIfNull(true); cm.MapMember(c => c.DrugId).SetIgnoreIfNull(true); cm.MapMember(c => c.Concentration).SetIgnoreIfNull(true); cm.MapMember(c => c.DoseRate).SetIgnoreIfNull(true); cm.MapMember(c => c.DrugAmount).SetIgnoreIfNull(true); cm.MapMember(c => c.DrugDoseDelivered).SetIgnoreIfNull(true); // Paciente cm.MapMember(c => c.PatientWeight).SetIgnoreIfNull(true); cm.MapMember(c => c.Syringe).SetIgnoreIfNull(true); // Ubicación cm.MapMember(c => c.DeviceIp).SetIgnoreIfNull(true); cm.MapMember(c => c.PillarAssembly).SetIgnoreIfNull(true); cm.MapMember(c => c.PillarRackSlot).SetIgnoreIfNull(true); // ALARMAS cm.MapMember(c => c.AlarmType) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.AlarmDescription).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmState).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmInactivationState).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmPriority).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmTypeMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.EventPhase) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.AlertSourceMdc).SetIgnoreIfNull(true); // EVENTOS (PCD-10) cm.MapMember(c => c.Event) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); }); } // ============================================================ // PumpState // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(PumpState))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapIdMember(c => c.Id).SetElementName("_id"); cm.MapMember(c => c.DeviceId).SetIgnoreIfNull(true); cm.MapMember(c => c.RackId).SetIgnoreIfNull(true); cm.MapMember(c => c.DeviceTypeMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.DeviceIp).SetIgnoreIfNull(true); cm.MapMember(c => c.PillarAssembly).SetIgnoreIfNull(true); cm.MapMember(c => c.PillarRackSlot).SetIgnoreIfNull(true); cm.MapMember(c => c.InfusionId).SetIgnoreIfNull(true); cm.MapMember(c => c.PatientId).SetIgnoreIfNull(true); cm.MapMember(c => c.LastUpdated).SetIgnoreIfNull(true); // Estado cm.MapMember(c => c.IsInfusing).SetIgnoreIfNull(true); cm.MapMember(c => c.InfusingStatus) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.Status) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.PumpMode) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.InfusionModeDetail).SetIgnoreIfNull(true); cm.MapMember(c => c.ActiveSourceInfo).SetIgnoreIfNull(true); cm.MapMember(c => c.NotDeliveringReason).SetIgnoreIfNull(true); cm.MapMember(c => c.Source).SetIgnoreIfNull(true); // Métricas cm.MapMember(c => c.FlowFluid).SetIgnoreIfNull(true); cm.MapMember(c => c.Rate).SetIgnoreIfNull(true); cm.MapMember(c => c.VolumeInfused).SetIgnoreIfNull(true); cm.MapMember(c => c.FluidDelivTotal).SetIgnoreIfNull(true); cm.MapMember(c => c.FluidDelivTotalSet).SetIgnoreIfNull(true); cm.MapMember(c => c.VolumeRemaining).SetIgnoreIfNull(true); cm.MapMember(c => c.Vtbi).SetIgnoreIfNull(true); cm.MapMember(c => c.TimeRemaining).SetIgnoreIfNull(true); cm.MapMember(c => c.TimeProgrammed).SetIgnoreIfNull(true); // Medicación cm.MapMember(c => c.DrugName).SetIgnoreIfNull(true); cm.MapMember(c => c.DrugId).SetIgnoreIfNull(true); cm.MapMember(c => c.Concentration).SetIgnoreIfNull(true); cm.MapMember(c => c.DoseRate).SetIgnoreIfNull(true); cm.MapMember(c => c.DrugAmount).SetIgnoreIfNull(true); cm.MapMember(c => c.DrugDoseDelivered).SetIgnoreIfNull(true); cm.MapMember(c => c.PatientWeight).SetIgnoreIfNull(true); cm.MapMember(c => c.Syringe).SetIgnoreIfNull(true); // Última alarma resumen cm.MapMember(c => c.AlarmType) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.AlarmDescription).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmState).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmInactivationState).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmPriority).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmCodeMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.Event) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.EventPhase) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); // Relay / Comm cm.MapMember(c => c.CommStatus).SetIgnoreIfNull(true); cm.MapMember(c => c.RelayState).SetIgnoreIfNull(true); cm.MapMember(c => c.RelayGuid).SetIgnoreIfNull(true); }); } // ============================================================ // PumpAlarmEvent // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(PumpAlarmEvent))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapIdMember(c => c.Id).SetElementName("_id"); cm.MapMember(c => c.DeviceId).SetIgnoreIfNull(true); cm.MapMember(c => c.RackId).SetIgnoreIfNull(true); cm.MapMember(c => c.DeviceTypeMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.InfusionId).SetIgnoreIfNull(true); cm.MapMember(c => c.PatientId).SetIgnoreIfNull(true); cm.MapMember(c => c.Time).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmType) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.AlarmDescription).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmState).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmInactivationState).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmPriority).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmTypeMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.EventPhase) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.AlertSourceMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.DeviceIp).SetIgnoreIfNull(true); cm.MapMember(c => c.PillarAssembly).SetIgnoreIfNull(true); cm.MapMember(c => c.PillarRackSlot).SetIgnoreIfNull(true); }); } // ============================================================ // PumpAlarmState // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(PumpAlarmState))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapIdMember(c => c.Id).SetElementName("_id"); cm.MapMember(c => c.DeviceId).SetIgnoreIfNull(true); cm.MapMember(c => c.PatientId).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmType) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.AlarmCodeMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmDescription).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmPriority).SetIgnoreIfNull(true); cm.MapMember(c => c.AlarmState).SetIgnoreIfNull(true); cm.MapMember(c => c.LastPhase) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.FirstSeen).SetIgnoreIfNull(true); cm.MapMember(c => c.LastUpdated).SetIgnoreIfNull(true); cm.MapMember(c => c.AlertSourceMdc).SetIgnoreIfNull(true); cm.MapMember(c => c.InfusionId).SetIgnoreIfNull(true); }); } // ============================================================ // ConfigPumps // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(ConfigPumps))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapIdMember(c => c.Id).SetElementName("_id"); cm.MapMember(c => c.Items).SetIgnoreIfNull(true); }); } // ============================================================ // ConfigPumpItem // ============================================================ if (!BsonClassMap.IsClassMapRegistered(typeof(ConfigPumpItem))) { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapMember(c => c.AlarmType) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.UiConfiguration).SetIgnoreIfNull(true); cm.MapMember(c => c.Type) .SetIgnoreIfNull(true) .SetSerializer(new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.RetentionPolicy).SetIgnoreIfNull(true); cm.MapMember(c => c.RetentionPolicyValue).SetIgnoreIfNull(true); }); } } } }