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