=== Summary: 675 files | 7 generated | 484 fresh | 4605 untracked | 4268 adopted | 355 marked | 466 validated-ok | 2+0 stale (sig+body) | 0 skipped | 0 failed | elapsed 11:08:11.442 (40091.44s) ===

This commit is contained in:
julian
2026-06-28 02:50:05 -07:00
parent a19fb90902
commit 586f02a2ca
654 changed files with 5260 additions and 0 deletions
@@ -17,6 +17,7 @@ namespace adas_core.Infrastructure.Repositories;
/// Repositorio para gestionar las operaciones de la entidad Admission en MongoDB. Proporciona métodos para insertar, actualizar, eliminar y buscar admisiones, así como para manejar opciones de listas maestras relacionadas con las admisiones.
/// Utiliza Serilog para el registro de errores y eventos importantes durante las operaciones de la base de datos.
/// </summary>
/// <!-- aidoc:v1 sig=661ecfc -->
public class AdmissionRepository : MongoRepository<Admission>, IAdmissionRepository
{
@@ -41,6 +42,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// Esto permite que el repositorio se conecte a la colección correcta para realizar las operaciones de base de datos relacionadas con las admisiones.
/// </summary>
/// <returns>El nombre de la colección de admisiones en MongoDB.</returns>
/// <!-- aidoc:v1 sig=94e22ff body=c763693 -->
public override string GetCollectionName()
{
return _apiSettings.Admissions;
@@ -51,6 +53,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="admission">La admisión a insertar en la base de datos.</param>
/// <returns>Una tarea que representa la operación asincrónica.</returns>
/// <!-- aidoc:v1 sig=2d2f0a6 body=e87ab8c -->
public override async Task InsertOneAsync(Admission admission)
{
try
@@ -70,6 +73,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="id">El identificador único (ObjectId) de la admisión a eliminar.</param>
/// <returns>Una tarea que representa la operación asincrónica.</returns>
/// <!-- aidoc:v1 sig=3de1ad6 body=27ebee4 -->
public async Task Delete(ObjectId id)
{
try
@@ -89,6 +93,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="admission">La admisión con los datos actualizados.</param>
/// <returns>Una tarea que representa la operación asincrónica.</returns>
/// <!-- aidoc:v1 sig=b1dc4bf body=31005c0 -->
public async Task Update(Admission admission)
{
try
@@ -109,6 +114,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// <param name="id">El identificador único (ObjectId) de la admisión a actualizar.</param>
/// <param name="newLocation">El nuevo identificador de la ubicación (PointOfCareId) de la admisión.</param>
/// <returns>Una tarea que representa la operación asincrónica.</returns>
/// <!-- aidoc:v1 sig=8e1f6ee body=e466f15 -->
public async Task UpdateLocation(ObjectId id, ObjectId newLocation)
{
var filterBuilder = Builders<Admission>.Filter;
@@ -126,6 +132,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// <param name="id">El identificador único (ObjectId) de la admisión a actualizar.</param>
/// <param name="patient">La instancia de Person con los nuevos datos personales.</param>
/// <returns>Una tarea que representa la operación asincrónica.</returns>
/// <!-- aidoc:v1 sig=424027b body=3e081ee -->
public async Task UpdatePatient(ObjectId id, Person patient)
{
var filterBuilder = Builders<Admission>.Filter;
@@ -142,6 +149,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// Si ocurre una excepción durante el proceso, se registra un error con Serilog y se devuelve una lista vacía.
/// </summary>
/// <returns>Una lista de todas las admisiones almacenadas en la base de datos.</returns>
/// <!-- aidoc:v1 sig=c8ce0f4 body=52c24c8 -->
public async Task<IEnumerable<Admission>> FindAll()
{
try
@@ -163,6 +171,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// <param name="patientNumber">El número de paciente (NHC) a buscar.</param>
/// <param name="unitId">El identificador de unidad (ObjectId) que debe ser distinto al de la admisión encontrada.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve la admisión encontrada o null si no se encuentra ninguna.</returns>
/// <!-- aidoc:v1 sig=19a02a2 body=32461f1 -->
public async Task<Admission?> SearchByPatientNumberAndDistinctUnit(string patientNumber, ObjectId unitId)
{
if (string.IsNullOrWhiteSpace(patientNumber)) return null;
@@ -182,6 +191,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="id">El identificador único (ObjectId) de la admisión a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve la admisión encontrada o null si no se encuentra ninguna.</returns>
/// <!-- aidoc:v1 sig=0698ddf body=138b21a -->
public async Task<Admission?> FindById(ObjectId id)
{
try
@@ -203,6 +213,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="nhc">El número de paciente (NHC) a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve la admisión encontrada o null si no se encuentra ninguna.</returns>
/// <!-- aidoc:v1 sig=cd32c8c body=a17d4c4 -->
public async Task<Admission?> FindByNhc(string nhc)
{
try
@@ -225,6 +236,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="location">La ubicación del paciente (PatientLocation) a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una lista de admisiones que coinciden con la ubicación especificada.</returns>
/// <!-- aidoc:v1 sig=326e4a1 body=c3de436 -->
public async Task<List<Admission>> FindByLocation(PatientLocation location)
{
try
@@ -249,6 +261,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="origin">El nombre del origen de la admisión a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una lista de admisiones que coinciden con el origen especificado.</returns>
/// <!-- aidoc:v1 sig=eded8f2 body=1837f4c -->
public async Task<IEnumerable<Admission>?> FindByOrigin(string origin)
{
try
@@ -273,6 +286,8 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="origin">La admisión a insertar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve la admisión insertada o null si ocurre un error.</returns>
/// <!-- aidoc-review:v1 severity=high kind=mentions_removed_behavior
/// "The summary states the method sets AdmissionDate to the current UTC date/time before insertion, but the code never assigns or modifies AdmissionDate." -->
public async Task<Admission?> InsertOneAsyncAndReturn(Admission origin)
{
try
@@ -293,6 +308,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="unitId">El identificador de la unidad a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una lista de admisiones que coinciden con los criterios especificados.</returns>
/// <!-- aidoc:v1 sig=a0f7f96 body=976a399 -->
public async Task<List<Admission>> GetAdmissionByUnitIdWithOutPoC(ObjectId unitId)
{
try
@@ -314,6 +330,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="unitId">El identificador de la unidad a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve el número de admisiones que coinciden con el unitId especificado.</returns>
/// <!-- aidoc:v1 sig=baa8175 body=0635d14 -->
public async Task<long> CountByUnitId(ObjectId unitId)
{
try
@@ -335,6 +352,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="pocId">El identificador del punto de atención a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una lista de admisiones que coinciden con el PointOfCareId especificado.</returns>
/// <!-- aidoc:v1 sig=ff96e2c body=6fe7177 -->
public async Task<List<Admission>> FindByPointOfCareId(ObjectId pocId)
{
try
@@ -356,6 +374,8 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="unitIds">La lista de identificadores de unidad a buscar.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una lista de admisiones que coinciden con los unitIds especificados.</returns>
/// <!-- aidoc-review:v1 severity=low kind=wrong_summary
/// "The summary states that the method 'utiliza el método FindAsync para obtenerlas', but the code actually uses Collection.Find(filterUnit).ToListAsync(), not FindAsync." -->
public async Task<List<Admission>> FindByUnitIds(List<ObjectId> unitIds)
{
var filterUnit = Builders<Admission>.Filter.In("unitId", unitIds);
@@ -369,6 +389,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// <param name="opt">La opción de actualización de la lista maestra.</param>
/// <param name="typeName">El nombre del tipo de lista maestra.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una lista de admisiones actualizadas.</returns>
/// <!-- aidoc:v1 sig=eb0fbec body=436eb94 -->
public async Task<IEnumerable<Admission>> UpdateMasterListOption(List<ObjectId> unitIds,
UpdateOptionMasterListDto opt, string typeName)
{
@@ -459,6 +480,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// <param name="opt">La opción de actualización de la lista maestra.</param>
/// <param name="typeName">El nombre del tipo de lista maestra.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una lista de admisiones actualizadas.</returns>
/// <!-- aidoc:v1 sig=b26eefb body=eea63d3 -->
public async Task<IEnumerable<Admission>> DeleteMasterListOption(List<ObjectId> unitIds, OptionList opt,
string typeName)
{
@@ -552,6 +574,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="unitId">El identificador de la unidad cuyas admisiones se eliminarán.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve un valor booleano que indica si la eliminación fue exitosa.</returns>
/// <!-- aidoc:v1 sig=9070532 body=ce4ae70 -->
public async Task<bool> DeleteAdmissionsByUnitId(ObjectId unitId)
{
try
@@ -571,6 +594,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// Crea índices en la colección de admisiones para mejorar el rendimiento de las consultas. En este caso, se crea un índice único en el campo "nhc" (número de paciente) que solo se aplica a los documentos que tienen un valor para "nhc".
/// </summary>
/// <returns>Una tarea que representa la operación asincrónica.</returns>
/// <!-- aidoc:v1 sig=4955da2 body=5d1f175 -->
public override async Task CreateIndexes()
{
var optionsUq = new CreateIndexOptions<Admission>
@@ -593,6 +617,7 @@ public class AdmissionRepository : MongoRepository<Admission>, IAdmissionReposit
/// </summary>
/// <param name="diagnosis">El nombre del diagnóstico que se utilizará para buscar admisiones.</param>
/// <returns>Una tarea que representa la operación asincrónica y devuelve una colección de admisiones que coinciden con el diagnóstico especificado.</returns>
/// <!-- aidoc:v1 sig=50438e0 body=f744392 -->
public async Task<IEnumerable<Admission>?> FindByDiagnosis(string diagnosis)
{
try