Files

61 lines
3.2 KiB
C#

using adas_core.Domain.Models.MongoModels;
using Microsoft.Extensions.Logging;
namespace adas_core.Domain.Utils;
public static class Hl7Utils
{
/// <summary>
/// Evalúa si se debe permitir el auto ADT basándose en la configuración de la unidad actual y la antigua.
/// </summary>
/// <param name="unitConfig">Configuración de la unidad (Location)</param>
/// <param name="oldUnitConfig">Configuración de la antigua unidad (OldLocation)</param>
/// <param name="logger">Logger para registrar advertencias</param>
/// <param name="type">Tipo de mensaje HL7 que se va a procesar su entrada</param>
/// <returns>true si se permite; false en caso contrario.</returns>
public static bool ManageAutoAdt(Unit? unitConfig, Unit? oldUnitConfig, ILogger logger, string type)
{
// Variables de estado:
var locationKnown = unitConfig != null;
var oldLocationKnown = oldUnitConfig != null;
var locationAutoAdt = unitConfig?.Configuration.AutoAdt ?? false;
var oldLocationAutoAdt = oldUnitConfig?.Configuration.AutoAdt ?? false;
// Creamos una clave que combine ambas informaciones:
// Formato: "LK-LA:OLK-OLA" donde LK = locationKnown (1=si, 0=no) y LA = locationAutoAdt (1=si, 0=no)
var key = $"{(locationKnown ? "1" : "0")}-" +
$"{(locationAutoAdt ? "1" : "0")}/" +
$"{(oldLocationKnown ? "1" : "0")}-" +
$"{(oldLocationAutoAdt ? "1" : "0")}";
// Evaluamos la clave según los escenarios:
// Caso 1: "1-1/1-1" → Ambas conocidas y AutoAdt true → Permitido.
// Caso 2: "1-0/1-1" → Ambas conocidas, pero location.AutoAdt false → No permitido.
// Caso 3: "0-0/1-1" → Location desconocida, oldLocation conocida con AutoAdt true → Permitido.
// Caso 4: "1-1/0-0" → Location conocida con AutoAdt true, oldLocation desconocida → Permitido.
// Caso 5: "1-1/1-0" → Ambas conocidas, pero oldLocation.AutoAdt false → No permitido.
// Caso 6: "1-0/1-0" → Ambas conocidas, ambas con AutoAdt false → No permitido.
// Caso 7: "0-0/1-0" → Location desconocida, pero oldLocation.AutoAdt false → No permitido.
// Caso 8: "1-0/0-0" → Location conocida con AutoAdt false, y oldLocation desconocida → No permitido.
// Caso 9: "0-0/0-0" → Ambas desconocidas → No permitido.
switch (key)
{
case "1-1/1-1": // Caso 1
case "0-0/1-1": // Caso 3
case "1-1/0-0": // Caso 4
return true;
case "1-0/1-1": // Caso 2
case "1-1/1-0": // Caso 5
case "1-0/1-0": // Caso 6
case "0-0/1-0": // Caso 7
case "1-0/0-0": // Caso 8
logger.LogWarning(
"Deny permission for auto {HL7} on Location: {Location}, OldLocation: {OldLocation} check: {Key}",
type, unitConfig?.Name, oldUnitConfig?.Name, key);
return false;
default: // Caso 9 u otro escenario no contemplado
logger.LogWarning("Both units are unknown on Auto {HL7} check: {Key}", type, key);
return false;
}
}
}