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 { 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); }); } } } }