Control de versión para medicamentos
Necesito ayuda con un algoritmo.
Estoy rastreando los medicamentos tomados por un paciente. Terminaré con entradas como estas:
1/1/22 DrugA 5mg Empezó a tomar DrugA
1/1/22 DrugB 5mg Empezó a tomar DrugB
1/3/22 DrugA 10mg Aumentó la dosis de DrugA
1/5/22 DrugB 0mg Dejó de tomar DrugB
Y a partir de eso, necesito poder producir lo siguiente:
1/1/22 DrugA 5mg; DrugB 5mg
1/2/22 DrugA 5mg; DrugB 5mg
1/3/22 DrugA 10mg; DrugB 5mg
1/4/22 DrugA 10mg; DrugB 5mg
1/5/22 DrugA 10mg
1/6/22 DrugA 10mg
En otras palabras, a partir de las entradas que describen cambios en la dosis del medicamento, necesito poder mostrar exactamente qué medicamentos y dosis se tomaron en cualquier día dado.
Es un poco como el control de versiones en el que se rastrean los cambios pero se puede reproducir todo en cualquier momento.
Para ser claro, almacenaría esta información en una base de datos o algo así. Sería más simple almacenarlo en memoria.
¿Alguien puede sugerir un algoritmo que pueda manejar este caso? Necesitaría implementarlo en C#.
davy.ai
Un posible algoritmo para resolver este problema es el siguiente:
Ordenar los datos de medicación por fecha, de modo que las entradas estén en orden cronológico.
Crear un diccionario que almacenará los datos diarios de medicación. Las claves del diccionario serán las fechas y los valores serán otro diccionario que asigna nombres de medicamentos a sus dosis.
Recorrer los datos de medicación en orden cronológico y actualizar el diccionario diario de medicación en consecuencia. Para cada entrada de medicación:
En C#, puedes implementar este algoritmo utilizando clases para representar las entradas de medicación y los datos diarios de medicación, y utilizar LINQ para ordenar y recorrer los datos de medicación. Aquí tienes un código de muestra:
“`csharp
class MedicationEntry {
public DateTime Date { get; set; }
public string Name { get; set; }
public int Dosage { get; set; }
public string Action { get; set; }
}
class DailyMedication {
public DateTime Date { get; set; }
public Dictionary<string, int=””> Medications { get; set; }
}
// suponiendo que las entradas de medicación se almacenan en una lista List llamada entries
var sortedEntries = entries.OrderBy(e => e.Date).ToList();
var dailyMeds = new Dictionary<datetime,></datetime,><string, int=””>>();
foreach (var entry in sortedEntries) {
DateTime date = entry.Date.Date;
if (!dailyMeds.ContainsKey(date)) {
dailyMeds[date] = new Dictionary<string, int=””>();
}
if (entry.Action == “iniciado” || entry.Action == “incrementado”) {
dailyMeds[date][entry.Name] = entry.Dosage;
} else if (entry.Action == “detenido”) {
dailyMeds[date].Remove(entry.Name);
}
}
foreach (var dailyMed in dailyMeds.OrderBy(kv => kv.Key)) {
string output = $”{dailyMed.Key.ToShortDateString()} “;
foreach (var medication in dailyMed.Value.OrderBy(kv => kv.Key)) {
output += $”{medication.Key} {medication.Value}mg; “;
}
Console.WriteLine(output.TrimEnd(‘;’));
}
“`</string,></string,></string,>