From 319fd3dfb0fc8becb3795a29db132ccfd5b15f11 Mon Sep 17 00:00:00 2001 From: jrojas Date: Fri, 26 Jun 2026 09:52:35 +0200 Subject: [PATCH] Creado apartir del commit b888de6c92056de294456f581a56e25e734d4ab7 de develop --- .dockerignore | 25 + .gitignore | 381 ++ .teralevel-ci.yml | 70 + Dockerfile | 57 + ...-001_Plantilla_casos_de_prueba_VER_C10.docx | Bin 0 -> 108213 bytes .../ANX-AD-05-05_Plan_V&V_ADAS_C11.docx | Bin 0 -> 54719 bytes ..._Plantilla_evidencia_de_validacion_C11.docx | Bin 0 -> 61282 bytes ...01_Plantilla_Release_Audit_Package_C12.docx | Bin 0 -> 56709 bytes ...REL-002_Plantilla_Notas_de_Version_C12.docx | Bin 0 -> 52434 bytes ...la_Issues_Abiertos_y_Aceptabilidad_C12.docx | Bin 0 -> 50058 bytes ...tilla_Aprobacion_Formal_de_Release_C12.docx | Bin 0 -> 52726 bytes ...Registro de solicitud de cambio CR_C13.docx | Bin 0 -> 65081 bytes .../RMF-SW-ADAS_marco_gestion_riesgos_C14.docx | Bin 0 -> 98042 bytes ...EC-005-C15_hardening_con_evidencias_VF.docx | Bin 0 -> 2015075 bytes .../Capítulo 16/adas_core_pipeline_v2.yml | 343 ++ .../adas_core_pipeline_v2_C16.docx | Bin 0 -> 74575 bytes .../Capítulo 16/adas_front_pipeline_v2.yaml | 413 +++ .../adas_front_pipeline_v2_C16.docx | Bin 0 -> 66218 bytes ...-SW-001_Matriz_roles_y_asignaciones_C5.docx | Bin 0 -> 63193 bytes ...FT-SW-002_Perfil_de_rol_y_funciones_C5.docx | Bin 0 -> 70813 bytes ...SW-003_Plan_y_registro_de_formacion_C5.docx | Bin 0 -> 63892 bytes ...eedores_SOUP_y_software_de_terceros_C5.docx | Bin 0 -> 62864 bytes ..._Registro_revisiones_y_aprobaciones_C5.docx | Bin 0 -> 64477 bytes ...NV-001_Inventario_Herramientas_ADAS_C5.docx | Bin 0 -> 60881 bytes .../2025_Documento de Integración_C6.xlsx | Bin 0 -> 180361 bytes ...razabilidad_UR_SRS_RISK_VER_Release_C6.docx | Bin 0 -> 71894 bytes .../FT_SW_Especificacion_SRS_C6.docx | Bin 0 -> 149565 bytes ...ro_revision_y_decisiones_requisitos_C6.docx | Bin 0 -> 62946 bytes ..._Registro_requisitos_ciberseguridad_C6.docx | Bin 0 -> 67077 bytes ..._Registro_requisitos_no_funcionales_C6.docx | Bin 0 -> 61143 bytes .../Capítulo 6/FT_SW_UR_PRD_Registro_C6.docx | Bin 0 -> 125590 bytes Documentation/IEC 62304/SDP.docx | Bin 0 -> 358128 bytes ...62304_ES_cumplimentada_ADAS_claseA_V1.docx | Bin 0 -> 60322 bytes .../Tablas_IMQ/TablaMedical_62304_ES.docx | Bin 0 -> 115176 bytes ...ual-Usuario-ADAS-Display_ES_rev.200426.pdf | Bin 0 -> 2310840 bytes ...Técnico-Software_Epigram_ADAS_v.130226.pdf | Bin 0 -> 847342 bytes NuGet.Config | 7 + README.md | 1 + .../BD/CalculatedObservations.cs | 104 + .../CHUO/CalculatedObservations.cs | 80 + .../H12O/UCIN/CalculatedObservations.cs | 1547 ++++++++ .../HGM/CalculatedObservations.cs | 133 + .../HPAZ/CalculatedObservations.cs | 641 ++++ .../HRYC/CalculatedObservations.cs | 883 +++++ .../HUVH/UCIA/CalculatedObservations.cs | 695 ++++ .../HUVH/UCIN/CalculatedObservations.cs | 711 ++++ .../NursePlan/CalculatedObservations.cs | 71 + .../Exceptions/APIRequestException.cs | 3 + .../Exceptions/BadRequestException.cs | 14 + .../Exceptions/ConflictException.cs | 14 + .../Exceptions/CustomArgumentException.cs | 14 + .../Exceptions/ForbbidenException.cs | 14 + .../Exceptions/InvalidFormatException.cs | 14 + .../Exceptions/NotFoundException.cs | 18 + .../Exceptions/TokenException.cs | 3 + .../Exceptions/UnauthorizedException.cs | 14 + .../UnprocessableEntityException.cs | 14 + .../Providers/AdasProvider.cs | 150 + .../Providers/BaseProvider.cs | 16 + .../Interfaces/IAdmissionRepository.cs | 42 + .../Interfaces/IAlarmRepository.cs | 15 + .../IAppointmentArchiveRepository.cs | 10 + .../Interfaces/IAppointmentRepository.cs | 22 + .../IArchivePatientCarePlanRepository.cs | 17 + .../Interfaces/IAuthorityRepository.cs | 16 + .../Interfaces/ICameraRepository.cs | 17 + .../IConfigObservationRepository.cs | 30 + .../Interfaces/IConfigPumpsRepository.cs | 12 + .../Interfaces/IConfigUnitsRepository.cs | 8 + .../Interfaces/IDeviceRepository.cs | 14 + .../Interfaces/IDiagnosisArchiveRepository.cs | 10 + .../Interfaces/IDiagnosisRepository.cs | 17 + .../Interfaces/IDischargeRepository.cs | 44 + .../IDisplayCardConfigRepository.cs | 14 + .../IDisplayChartConfigRepository.cs | 14 + .../Interfaces/IDisplayConfigRepository.cs | 42 + .../IDisplayDetailConfigRepository.cs | 14 + .../Interfaces/IDisplayRepository.cs | 35 + .../IHistoricalConfigChangesRepository.cs | 25 + .../Interfaces/ILightBeaconRepository.cs | 16 + .../Interfaces/IMasterListRepository.cs | 34 + .../Interfaces/IMedicineRepository.cs | 22 + .../Interfaces/IMongoRepository.cs | 14 + .../Interfaces/INoticeRepository.cs | 15 + .../IObservationArchiveRepository.cs | 16 + .../Interfaces/IObservationRepository.cs | 74 + .../Interfaces/IPatientArchiveRepository.cs | 12 + .../Interfaces/IPatientCarePlanRepository.cs | 12 + .../Interfaces/IPatientRepository.cs | 45 + .../Interfaces/IPoCMappingRepository.cs | 9 + .../Interfaces/IPoCSettingsRepository.cs | 18 + .../Interfaces/IPointOfCareRepository.cs | 58 + .../Interfaces/IPumpAlarmEventRepository.cs | 22 + .../Interfaces/IPumpAlarmStateRepository.cs | 27 + .../Interfaces/IPumpArchiveRepository.cs | 30 + .../Interfaces/IPumpObservationRepository.cs | 28 + .../Interfaces/IPumpStateRepository.cs | 12 + .../IRecordingAlertArchiveRepository.cs | 10 + .../Interfaces/IRecordingAlertRepository.cs | 18 + .../Interfaces/IRelayRepository.cs | 18 + .../Interfaces/ISectionRepository.cs | 21 + .../Interfaces/IServiceConfigRepository.cs | 10 + .../Interfaces/ITreatmentArchiveRepository.cs | 13 + .../Interfaces/ITreatmentRepository.cs | 23 + .../Interfaces/IUnitRepository.cs | 28 + .../Interfaces/IUserRepository.cs | 18 + .../Services/AdminPanelService.cs | 372 ++ .../Services/AdmissionService.cs | 744 ++++ .../Services/AlarmService.cs | 969 +++++ .../Services/AlertValuesService.cs | 17 + .../Services/AppointmentService.cs | 362 ++ .../Services/ArchivePatientCarePlanService.cs | 62 + .../ArchivePatientObservationsService.cs | 15 + .../Services/ArchivedPatientService.cs | 13 + .../ArchivedPatientTreatmentService.cs | 15 + adas-core.Application/Services/AuthService.cs | 137 + .../Services/Caching/CacheDispatcher.cs | 111 + .../Services/Caching/CacheService.cs | 145 + .../Services/Caching/InMemoryLockProvider.cs | 62 + .../Services/Caching/LockManagerService.cs | 93 + .../Services/Caching/NoCacheService.cs | 97 + .../Services/Caching/RedisLockProvider.cs | 67 + .../Services/Caching/RedisService.cs | 275 ++ .../Services/CalculatedObservationsService.cs | 143 + .../Services/CameraService.cs | 99 + .../Services/ConfigObservationService.cs | 642 ++++ .../Services/ConfigPumpsService.cs | 163 + .../Services/ConfigUnitsService.cs | 119 + .../Services/DefaultCalculatedObservations.cs | 65 + .../Services/DeviceService.cs | 246 ++ .../Services/DiagnosisService.cs | 363 ++ .../Services/DischargeService.cs | 400 ++ .../Services/DisplayConfigService.cs | 608 ++++ .../Services/DisplayService.cs | 712 ++++ adas-core.Application/Services/FileService.cs | 113 + .../Services/GroupedObservationService.cs | 1262 +++++++ .../HistoricalConfigChangesService.cs | 116 + .../Services/Interfaces/IAPIRequestService.cs | 9 + .../Services/Interfaces/IAdminPanelService.cs | 46 + .../Services/Interfaces/IAdmissionService.cs | 34 + .../Services/Interfaces/IAlarmService.cs | 30 + .../Interfaces/IAlertValuesService.cs | 9 + .../Interfaces/IAppointmentService.cs | 20 + .../IArchivePatientCarePlanService.cs | 21 + .../IArchivedPatientObservationService.cs | 9 + .../Interfaces/IArchivedPatientService.cs | 8 + .../IArchivedPatientTreatmentService.cs | 9 + .../Services/Interfaces/IAuthService.cs | 15 + .../Services/Interfaces/ICacheService.cs | 39 + .../Interfaces/ICalculatedObservations.cs | 27 + .../ICalculatedObservationsService.cs | 20 + .../Services/Interfaces/ICameraService.cs | 17 + .../Interfaces/IClientMessageService.cs | 13 + .../Interfaces/IConfigObservationService.cs | 44 + .../Interfaces/IConfigPumpsService.cs | 18 + .../Interfaces/IConfigUnitsService.cs | 10 + .../Services/Interfaces/IDeviceService.cs | 13 + .../Services/Interfaces/IDiagnosisService.cs | 17 + .../Services/Interfaces/IDischargeService.cs | 27 + .../Interfaces/IDisplayConfigService.cs | 46 + .../Services/Interfaces/IDisplayService.cs | 63 + .../Services/Interfaces/IFileService.cs | 16 + .../Interfaces/IGroupedObservationService.cs | 26 + .../IHistoricalConfigChangesService.cs | 25 + .../Interfaces/ILightBeaconService.cs | 28 + .../Services/Interfaces/ILocalAuditService.cs | 9 + .../Services/Interfaces/ILockProvider.cs | 20 + .../Services/Interfaces/IMasterListService.cs | 46 + .../Interfaces/IMasterListServiceFactory.cs | 23 + .../Services/Interfaces/IMedicineService.cs | 25 + .../Services/Interfaces/INoticeService.cs | 19 + .../Interfaces/IObservationDemoService.cs | 12 + .../Interfaces/IObservationService.cs | 85 + .../Interfaces/IPatientCarePlanService.cs | 17 + .../Services/Interfaces/IPatientService.cs | 84 + .../Services/Interfaces/IPermissionService.cs | 22 + .../Services/Interfaces/IPoCMappingService.cs | 8 + .../Interfaces/IPointOfCareService.cs | 58 + .../Services/Interfaces/IPublisherService.cs | 9 + .../Services/Interfaces/IPumpService.cs | 40 + .../Interfaces/IRecordingAlertService.cs | 15 + .../Services/Interfaces/IRecordingService.cs | 23 + .../Services/Interfaces/IRelayService.cs | 24 + .../Services/Interfaces/ISendAlertService.cs | 10 + .../Interfaces/IServiceConfigService.cs | 8 + .../Interfaces/ISubscriberGroupedService.cs | 21 + .../Interfaces/ISubscribersService.cs | 13 + .../Services/Interfaces/ITreatmentService.cs | 26 + .../Services/Interfaces/IUnitService.cs | 44 + .../Services/LocalAuditService.cs | 56 + .../Services/MasterListService.cs | 825 +++++ .../Services/MasterListServiceFactory .cs | 299 ++ .../Services/MedicineService.cs | 273 ++ .../Services/NoticeService.cs | 198 + .../Services/ObservationDemoService.cs | 271 ++ .../Services/ObservationService.cs | 1568 ++++++++ .../Services/PatientCarePlanService.cs | 129 + .../Services/PatientService.cs | 3223 +++++++++++++++++ .../Services/PermissionService.cs | 264 ++ .../Services/PoCMappingService.cs | 60 + .../Services/PointOfCareService.cs | 398 ++ adas-core.Application/Services/PumpService.cs | 610 ++++ .../Services/RecordingAlertService.cs | 170 + .../Services/RecordingService.cs | 441 +++ .../Services/SchedulerService.cs | 1006 +++++ .../Services/ServiceConfigService.cs | 30 + .../Services/SubscribersService.cs | 52 + .../Services/TreatmentService.cs | 288 ++ adas-core.Application/Services/UnitService.cs | 434 +++ .../Subscriptions/SubscriberGroupedService.cs | 224 ++ .../Subscriptions/WsSubscriberGrouped.cs | 299 ++ .../Subscriptions/WsSuscriber.cs | 22 + .../adas-core.Application.csproj | 43 + .../Attributes/AuthorizeRolesAttribute.cs | 28 + .../Attributes/AuthorizeUserByService.cs | 29 + .../PermissionAuthorizeAttribute.cs | 98 + adas-core.Authentication/AuthorityService.cs | 108 + .../Interfaces/IAuthorityService.cs | 19 + .../Interfaces/ILoginService.cs | 21 + .../Interfaces/ITokenService.cs | 14 + .../Interfaces/IUserService.cs | 43 + adas-core.Authentication/Models/LoginInfo.cs | 7 + adas-core.Authentication/Models/Token.cs | 19 + .../Models/UciResponse.cs | 47 + .../AuthRegistration.cs | 14 + adas-core.Authentication/UserService.cs | 647 ++++ .../adas-core.Authentication.csproj | 25 + adas-core.Domain/Enums/ActionsEnum.cs | 26 + adas-core.Domain/Enums/AlarmEnum.cs | 165 + .../Enums/AuthorizeUserByServiceType.cs | 14 + adas-core.Domain/Enums/CacheEnum.cs | 28 + adas-core.Domain/Enums/ClickType.cs | 10 + adas-core.Domain/Enums/DeviceActionType.cs | 9 + adas-core.Domain/Enums/DeviceType.cs | 7 + adas-core.Domain/Enums/DisplayConfigEnums.cs | 301 ++ adas-core.Domain/Enums/FileEnum.cs | 19 + .../Enums/GroupedObservationEnum.cs | 56 + adas-core.Domain/Enums/HttpEnum.cs | 242 ++ adas-core.Domain/Enums/LightBeaconColor.cs | 13 + adas-core.Domain/Enums/MasterListType.cs | 27 + adas-core.Domain/Enums/MedicineEnum.cs | 30 + adas-core.Domain/Enums/ObservationEnum.cs | 51 + adas-core.Domain/Enums/OperationType.cs | 83 + adas-core.Domain/Enums/OrderControlType.cs | 56 + adas-core.Domain/Enums/PatientEnum.cs | 12 + adas-core.Domain/Enums/PermissionEnum.cs | 55 + adas-core.Domain/Enums/PumpEnum.cs | 169 + adas-core.Domain/Enums/RelayEnum.cs | 29 + adas-core.Domain/Enums/RespirationType.cs | 9 + adas-core.Domain/Enums/RetentionPolicy.cs | 9 + adas-core.Domain/Enums/StatusEnum.cs | 53 + adas-core.Domain/Enums/SubscriptionType.cs | 28 + adas-core.Domain/Enums/UserEnum.cs | 17 + adas-core.Domain/Enums/VirtualPointOfCare.cs | 13 + adas-core.Domain/Exceptions/AdasException.cs | 3 + .../Exceptions/BusinessException.cs | 14 + .../Exceptions/LoginServicesException.cs | 16 + .../LoginServicesNotFoundException.cs | 6 + .../Exceptions/UserNotFoundException.cs | 16 + adas-core.Domain/IDefaultRepository.cs | 33 + adas-core.Domain/Models/ADMPanelRequest.cs | 75 + adas-core.Domain/Models/APIRequest.cs | 118 + .../Models/AppSettings/ApiSettings.cs | 489 +++ .../Models/AppSettings/AuthSettings.cs | 50 + .../AppSettings/AutoRecordingSettings.cs | 29 + .../Models/AppSettings/CacheSettings.cs | 68 + .../Models/AppSettings/DatabaseSettings.cs | 12 + .../Models/AppSettings/ListSettings.cs | 141 + .../Models/AppSettings/PermissionSettings.cs | 339 ++ .../Models/AppSettings/RabbitMQSettings.cs | 15 + .../Models/AppSettings/RecordingSettings.cs | 11 + .../Models/AppSettings/RedisSettings.cs | 83 + .../Models/BasePatientObservation.cs | 119 + .../Models/BasePatientObservationValue.cs | 6 + .../BsonConverters/DictionaryBsonConverter.cs | 273 ++ .../BsonConverters/DictionaryConverter.cs | 61 + adas-core.Domain/Models/ChartValue.cs | 8 + adas-core.Domain/Models/ChatMessage.cs | 12 + adas-core.Domain/Models/Code.cs | 10 + adas-core.Domain/Models/CodeAction.cs | 38 + adas-core.Domain/Models/CodeStatus.cs | 12 + adas-core.Domain/Models/DTO/AppointmentDto.cs | 15 + adas-core.Domain/Models/DTO/AssetDto.cs | 8 + .../Models/DTO/ConfigObservationDto.cs | 7 + .../Models/DTO/CreateUserWithAuthDto.cs | 9 + adas-core.Domain/Models/DTO/DeviceDto.cs | 28 + adas-core.Domain/Models/DTO/DiagnosisDto.cs | 18 + .../Models/DTO/Display/ColorConfigDto.cs | 104 + .../DTO/Display/CreateDisplayConfigDto.cs | 23 + .../Models/DTO/Display/DisplayConfigDto.cs | 29 + .../DTO/Display/DisplayConfigLocationDto.cs | 7 + .../DTO/Display/DisplayConfigSummary.cs | 11 + .../Models/DTO/Display/DisplayMinimalDto.cs | 12 + .../Models/DTO/Display/DisplayNurseDto.cs | 10 + .../DTO/Display/DisplayWithPermissionsDto.cs | 9 + .../DTO/Display/MinimalDisplayListDto.cs | 9 + .../Models/DTO/Display/SmartDisplayDto.cs | 22 + .../DTO/Display/UpdateDisplayConfigNameDto.cs | 6 + adas-core.Domain/Models/DTO/MasterListDto.cs | 13 + .../DTO/MasterListWithPaginatedOptionsDto.cs | 21 + .../Models/DTO/ObservationAlarmDto.cs | 21 + adas-core.Domain/Models/DTO/ObservationDto.cs | 18 + .../Models/DTO/PaginationPairDto.cs | 9 + adas-core.Domain/Models/DTO/PatientDto.cs | 15 + adas-core.Domain/Models/DTO/PocAndUnitDto.cs | 16 + adas-core.Domain/Models/DTO/PointOfCareDto.cs | 45 + adas-core.Domain/Models/DTO/PumpDto.cs | 17 + .../Models/DTO/RecordingAlertDto.cs | 17 + adas-core.Domain/Models/DTO/TreatmentDto.cs | 16 + adas-core.Domain/Models/DTO/UnitInfoDto.cs | 31 + .../DTO/UpdateListNameAndDescriptionDto.cs | 7 + .../Models/DTO/UpdateMasterListDetailsDto.cs | 9 + .../Models/DTO/UpdateObservationDto.cs | 9 + .../Models/DTO/UpdateOptionMasterListDto.cs | 10 + .../Models/DTO/UpdatePasswordDto.cs | 7 + .../Models/DTO/UpdateUnitIdListDto.cs | 38 + .../Models/DTO/UpdateUserWithAuthDto.cs | 11 + adas-core.Domain/Models/Entity.cs | 12 + adas-core.Domain/Models/Field.cs | 18 + .../Models/Filter/FilterOptionListElement.cs | 19 + .../Models/Filter/FilteredRequest.cs | 91 + .../Models/Filter/PaginationFilter.cs | 41 + adas-core.Domain/Models/GroupedObservation.cs | 96 + .../Models/GroupedObservations/Field.cs | 36 + .../GroupedObservations/GroupedField.cs | 65 + .../Models/HistoricalLocations.cs | 31 + adas-core.Domain/Models/ManualRecording.cs | 19 + .../Models/Masters/AccessControlList.cs | 3 + .../Models/Masters/AllergyList.cs | 3 + .../Models/Masters/AltableOptionList.cs | 3 + .../Models/Masters/DestinationList.cs | 3 + .../Models/Masters/DiagnosisList.cs | 3 + .../Models/Masters/DischargeStatusList.cs | 3 + adas-core.Domain/Models/Masters/DoctorList.cs | 3 + .../Models/Masters/DoctorTypeList.cs | 3 + .../Models/Masters/GenericList.cs | 3 + .../Models/Masters/InsulationList.cs | 3 + .../Models/Masters/InternalDestinationList.cs | 3 + .../Models/Masters/LanguageBarrierList.cs | 3 + adas-core.Domain/Models/Masters/MasterList.cs | 102 + .../Models/Masters/MobilityOptionList.cs | 3 + adas-core.Domain/Models/Masters/OptionList.cs | 73 + adas-core.Domain/Models/Masters/OriginList.cs | 3 + .../Models/Masters/PassiveSittingList.cs | 3 + .../Models/Masters/PatientStatusList.cs | 3 + .../Models/Masters/ProcedureList.cs | 3 + .../Models/Masters/ServiceList.cs | 3 + adas-core.Domain/Models/Masters/TestList.cs | 3 + .../Models/Masters/TherapeuticCeilingList.cs | 3 + .../Models/Masters/TreatmentList.cs | 3 + .../Models/Masters/VisitOptionList.cs | 3 + adas-core.Domain/Models/Medicine.cs | 18 + .../Models/MongoModels/Admission.cs | 51 + .../Models/MongoModels/AlarmConfig.cs | 23 + .../Models/MongoModels/AlarmItem.cs | 39 + .../Models/MongoModels/Authorizations.cs | 25 + adas-core.Domain/Models/MongoModels/Box.cs | 33 + adas-core.Domain/Models/MongoModels/Camera.cs | 31 + .../Models/MongoModels/ConfigObservation.cs | 122 + .../Models/MongoModels/ConfigPumps.cs | 24 + .../Models/MongoModels/ConfigUnits.cs | 15 + adas-core.Domain/Models/MongoModels/Device.cs | 37 + .../Models/MongoModels/Discharge.cs | 28 + .../Models/MongoModels/Display.cs | 23 + .../Models/MongoModels/DisplayCardConfig.cs | 118 + .../MongoModels/DisplayCardDetailConfig.cs | 58 + .../Models/MongoModels/DisplayConfig.cs | 1084 ++++++ .../MongoModels/HistoricalConfigChanges.cs | 70 + .../Models/MongoModels/HistoricalIds.cs | 29 + .../Models/MongoModels/LightBeacon.cs | 23 + adas-core.Domain/Models/MongoModels/Notice.cs | 32 + .../Models/MongoModels/Patient.cs | 170 + .../Models/MongoModels/PatientCarePlan.cs | 18 + .../Models/MongoModels/PoCMapping.cs | 20 + .../Models/MongoModels/PoCSettings.cs | 24 + .../Models/MongoModels/PointOfCare.cs | 46 + .../Models/MongoModels/PumpElement.cs | 14 + adas-core.Domain/Models/MongoModels/Relay.cs | 55 + .../Models/MongoModels/Section.cs | 49 + .../Models/MongoModels/ServiceConfig.cs | 22 + .../MongoModels/ServiceConfigService.cs | 17 + .../Models/MongoModels/ServiceConfigTheme.cs | 24 + adas-core.Domain/Models/MongoModels/Step.cs | 62 + adas-core.Domain/Models/MongoModels/Unit.cs | 88 + adas-core.Domain/Models/MongoModels/User.cs | 24 + adas-core.Domain/Models/Note.cs | 22 + .../Models/ObservaitonRetentionResult.cs | 19 + adas-core.Domain/Models/ObservationData.cs | 14 + .../Models/Observations/BoolObservation.cs | 16 + .../Models/Observations/ChartObservation.cs | 17 + .../Models/Observations/DoubleObservation.cs | 24 + .../Models/Observations/FullObservation.cs | 35 + .../Models/Observations/Medication.cs | 131 + .../Models/Observations/Observation.cs | 5 + .../ObservationPaginatedResult.cs | 7 + .../Observations/ObservationsRequest.cs | 14 + .../PredictMedicationObservation.cs | 7 + .../Models/Observations/StringObservation.cs | 16 + .../Models/PatientAllergiesValue.cs | 16 + adas-core.Domain/Models/PatientAppointment.cs | 116 + adas-core.Domain/Models/PatientDiagnosis.cs | 68 + .../Models/PatientDrainagesValue.cs | 12 + adas-core.Domain/Models/PatientICCA.cs | 22 + .../Models/PatientIntravenousLinesValue.cs | 17 + adas-core.Domain/Models/PatientLocation.cs | 63 + .../Models/PatientLocationAction.cs | 42 + adas-core.Domain/Models/PatientObservation.cs | 90 + .../Models/PatientObservationAlarm.cs | 48 + .../Models/PatientRecordingAlert.cs | 17 + adas-core.Domain/Models/PatientTreatment.cs | 181 + adas-core.Domain/Models/Person.cs | 117 + adas-core.Domain/Models/PersonResource.cs | 21 + .../Models/PersonResourceAction.cs | 40 + .../Models/Providers/ProvidersSettings.cs | 8 + .../ResultModelPredictMedicationADAS.cs | 25 + .../Providers/ResultModelPredictOfStayADAS.cs | 17 + .../Models/Pumps/CommonPumpTypes.cs | 20 + .../Models/Pumps/PumpAlarmEvent.cs | 37 + .../Models/Pumps/PumpAlarmState.cs | 39 + .../Models/Pumps/PumpObservation.cs | 108 + adas-core.Domain/Models/Pumps/PumpState.cs | 82 + .../Models/Recording/AccessGrant.cs | 24 + adas-core.Domain/Models/Recording/Patient.cs | 12 + .../Models/Recording/RecordingData.cs | 37 + adas-core.Domain/Models/Recording/VideoDto.cs | 39 + .../Models/Responses/BeaconResponse.cs | 21 + .../Responses/BoxObservationsResponse.cs | 17 + .../Responses/DisplayConfigMinimalResponse.cs | 26 + .../Models/Responses/LoginResponse.cs | 19 + .../Models/Responses/PaginationResponse.cs | 22 + .../Models/Responses/PatientSearch.cs | 17 + adas-core.Domain/Models/Responses/Response.cs | 24 + adas-core.Domain/Models/SignalR/Message.cs | 38 + .../Models/SignalR/MessageData.cs | 70 + adas-core.Domain/Models/SignalR/Recording.cs | 31 + .../Models/SystemAlerts/ApiClients.cs | 8 + .../Models/SystemAlerts/Performance.cs | 13 + adas-core.Domain/Models/SystemAlerts/Queue.cs | 8 + adas-core.Domain/Models/Timing.cs | 9 + adas-core.Domain/Models/TreatmentRoute.cs | 16 + adas-core.Domain/Models/UiConfig.cs | 6 + adas-core.Domain/Models/ValueConfig.cs | 21 + .../Models/WebMessageNotification.cs | 18 + adas-core.Domain/Permissions.cs | 21 + adas-core.Domain/QueryCustomizer.cs | 78 + adas-core.Domain/Utils/AuthUtils.cs | 47 + adas-core.Domain/Utils/BsonUtils.cs | 26 + adas-core.Domain/Utils/CacheUtils.cs | 365 ++ .../Utils/CardConfigExtensions.cs | 40 + adas-core.Domain/Utils/CollectionsUtils.cs | 48 + .../Utils/ComparableDictionary.cs | 20 + .../Utils/ComplexObjectValueTypeSerializer.cs | 314 ++ adas-core.Domain/Utils/CryptoAdas.cs | 52 + .../Utils/DetailConfigExtension.cs | 53 + adas-core.Domain/Utils/DictionaryEx.cs | 24 + adas-core.Domain/Utils/EnumUtils.cs | 20 + adas-core.Domain/Utils/EquatableDictionary.cs | 43 + adas-core.Domain/Utils/GlobalData.cs | 15 + adas-core.Domain/Utils/Hl7Utils.cs | 61 + .../Utils/Interfaces/IMappingUtils.cs | 9 + adas-core.Domain/Utils/JsonExtensions.cs | 16 + adas-core.Domain/Utils/JwtHelper.cs | 70 + adas-core.Domain/Utils/Mapper.cs | 57 + adas-core.Domain/Utils/MappingUtils.cs | 185 + adas-core.Domain/Utils/MediaUtils.cs | 120 + adas-core.Domain/Utils/NumberUtils.cs | 24 + adas-core.Domain/Utils/ObjectIdConverter.cs | 41 + adas-core.Domain/Utils/ObjectUtils.cs | 25 + adas-core.Domain/Utils/RelayHelper.cs | 118 + adas-core.Domain/Utils/StringEx.cs | 34 + adas-core.Domain/adas-core.Domain.csproj | 27 + .../U_0_1_0_UpdateDataPatien.cs | 496 +++ .../U_0_1_1_UpdateDisplayConfigDriver.cs | 66 + .../U_0_1_2_UpdatePointOfCareConfig.cs | 59 + .../U_0_1_3_UpdateLanguageBarrier.cs | 50 + .../Repositories/AdmissionRepository.cs | 478 +++ .../Repositories/AlarmRepository.cs | 185 + .../AppointmentArchiveRepository.cs | 61 + .../Repositories/AppointmentRepository.cs | 144 + .../ArchivePatientCarePlanRepository.cs | 183 + .../Repositories/AuthorityRepository.cs | 132 + .../Repositories/CameraRepository.cs | 150 + .../ConfigObservationRepository.cs | 245 ++ .../Repositories/ConfigPumpsRepository.cs | 57 + .../Repositories/ConfigUnitsRepository.cs | 32 + .../Repositories/DeviceRepository.cs | 81 + .../DiagnosisArchiveRepository.cs | 58 + .../Repositories/DiagnosisRepository.cs | 92 + .../Repositories/DischargeRepository.cs | 333 ++ .../DisplayCardConfigRepository.cs | 97 + .../DisplayChartConfigRepository.cs | 96 + .../Repositories/DisplayConfigRepository.cs | 775 ++++ .../DisplayDetailConfigRepository.cs | 104 + .../Repositories/DisplayRepository.cs | 355 ++ .../HistoricalConfigChangesRepository.cs | 143 + .../Repositories/LightBeaconRepository.cs | 118 + .../Repositories/MasterListRepository.cs | 1395 +++++++ .../Repositories/MedicineRepository.cs | 142 + .../Repositories/MongoRepository.cs | 155 + .../Repositories/NoticeRepository.cs | 161 + .../ObservationArchiveRepository.cs | 160 + .../Repositories/ObservationRepository.cs | 1031 ++++++ .../Repositories/POCMappingRepository.cs | 34 + .../Repositories/PatientArchiveRepository.cs | 131 + .../Repositories/PatientCarePlanRepository.cs | 67 + .../Repositories/PatientRepository.cs | 973 +++++ .../Repositories/PoCSettingsRepository.cs | 132 + .../Repositories/PointOfCareRepository.cs | 614 ++++ .../Repositories/PumpAlarmEventRepository.cs | 104 + .../Repositories/PumpAlarmStateRepository.cs | 120 + .../Repositories/PumpArchiveRepository.cs | 98 + .../Repositories/PumpObservationRepository.cs | 297 ++ .../Repositories/PumpStateRepository.cs | 79 + .../RecordingAlertArchiveRepository.cs | 47 + .../Repositories/RecordingAlertRepository.cs | 211 ++ .../Repositories/RelayRepository.cs | 140 + .../Repositories/SectionRepository.cs | 107 + .../Repositories/ServiceConfigRepository.cs | 40 + .../TreatmentArchiveRepository.cs | 55 + .../Repositories/TreatmentRepository.cs | 246 ++ .../Repositories/UnitRepository.cs | 402 ++ .../Repositories/UserRepository.cs | 240 ++ .../Services/PublisherService.cs | 126 + .../Services/ReceiverService.cs | 239 ++ .../Services/RelayService.cs | 459 +++ .../Services/SendAlertService.cs | 282 ++ .../Utils/CacheHostBuilderExtension.cs | 50 + .../Utils/CustomPointOfCareConverter.cs | 43 + .../Utils/MongoDbHostBuilderExtension.cs | 104 + .../Utils/MongoMaps/AlarmMapContributor.cs | 133 + .../MongoMaps/AppointmentMapContributor.cs | 72 + .../Utils/MongoMaps/AuthMapContributor.cs | 37 + .../MongoMaps/BannerConfigMapContributor.cs | 62 + .../Utils/MongoMaps/BeaconMapContributor.cs | 42 + .../MongoMaps/BoxConfigMapContributor.cs | 48 + .../Utils/MongoMaps/CameraContributor.cs | 39 + .../Utils/MongoMaps/CardMapContributor.cs | 93 + .../Utils/MongoMaps/CellMapContributor.cs | 129 + .../MongoMaps/ColorConfigMapContributor.cs | 334 ++ .../ComunicationFlowMapContributor.cs | 40 + .../Utils/MongoMaps/DeviceMapContributor.cs | 81 + .../MongoMaps/DisplayHomeConfigContributor.cs | 46 + .../Utils/MongoMaps/DisplayMapContributor.cs | 134 + .../Utils/MongoMaps/FormMapContributor.cs | 49 + .../Utils/MongoMaps/GraphMapContributor.cs | 265 ++ .../Utils/MongoMaps/HeaderMapContributor.cs | 39 + .../Interfaz/IEntityMapContributor.cs | 9 + .../MongoMaps/MasterListMapContributor.cs | 158 + .../MongoMaps/NoticeControlMapContributor.cs | 28 + .../Utils/MongoMaps/ObsUnitMapContributor.cs | 27 + .../MongoMaps/ObservationMapContributor.cs | 289 ++ .../Utils/MongoMaps/PatientMapContributor.cs | 245 ++ .../Utils/MongoMaps/PoCMapContributor.cs | 96 + .../Utils/MongoMaps/PumpMapContributor.cs | 380 ++ .../Utils/MongoMaps/RelayContributor.cs | 48 + .../Utils/MongoMaps/RowMapContributor.cs | 91 + .../Utils/MongoMaps/SectionMapContributor.cs | 69 + .../MongoMaps/ServiceConfigMapContributor.cs | 60 + .../Utils/MongoMaps/StandardMapContributor.cs | 45 + .../MongoMaps/TreatmentMapContributor.cs | 116 + .../Utils/MongoMaps/UnitMapContributor.cs | 94 + adas-core.Infrastructure/Utils/MongoUtils.cs | 90 + .../Utils/PatientObservationAlarmConverter.cs | 100 + .../Utils/PatientObservationConverter.cs | 68 + .../Utils/PatientPumpObservationConverter.cs | 87 + .../Utils/PersonConverter.cs | 63 + .../Utils/RabbitConsumerErrorStrategy.cs | 145 + .../Utils/RabbitIErrorMessageSerializer.cs | 29 + adas-core.Infrastructure/Utils/TypesUtils.cs | 40 + .../adas-core.Infrastructure.csproj | 25 + .../Configuration/LDAPModule.cs | 15 + .../Configuration/LdapConfig.cs | 40 + .../Configuration/LdapConfigValidator.cs | 19 + adas-core.LdapLogin/IModule.cs | 11 + adas-core.LdapLogin/LdapLoginService.cs | 342 ++ .../RegistrationExtension/LdapRegistration.cs | 15 + .../adas-core.LdapLogin.csproj | 20 + adas-core.LocalLogin/ILocalLoginRepository.cs | 22 + adas-core.LocalLogin/LocalLoginRepository.cs | 115 + adas-core.LocalLogin/LocalLoginServiceImpl.cs | 75 + .../LocalLoginExtension.cs | 18 + .../adas-core.LocalLogin.csproj | 20 + .../H12O/UCIN/CalculatedObservationsTest.cs | 1935 ++++++++++ .../HPAZ/CalculatedObservationsTest.cs | 886 +++++ .../HRYC/CalculatedObservationsTest.cs | 1400 +++++++ .../HUVH/UCIA/CalculatedObservationsTest.cs | 744 ++++ .../HUVH/UCIN/CalculatedObservationsTest.cs | 2401 ++++++++++++ adas-core.Test/Models/FakeLogger.cs | 70 + .../Models/SignalR/SubscriberGroupedTest.cs | 238 ++ .../Repositories/AdmissionRepositoryTest.cs | 390 ++ .../Repositories/AlarmRepositoryTest.cs | 233 ++ .../AppointmentArchiveRepositoryTest.cs | 93 + .../Repositories/AppointmentRepositoryTest.cs | 148 + .../ConfigObservationRepositoryTest.cs | 190 + .../Repositories/ConfigPumpsRepositoryTest.cs | 88 + .../Repositories/ConfigUnitsRepositoryTest.cs | 60 + .../DiagnosisArchiveRepositoryTest.cs | 86 + .../Repositories/DiagnosisRepositoryTest.cs | 197 + .../Repositories/DischargeRepositoryTest.cs | 373 ++ .../Repositories/DisplayConfigTest.cs | 79 + .../Repositories/DisplayRepisitoryTest.cs | 18 + .../HistoricalConfigChangesRepositoryTest.cs | 212 ++ adas-core.Test/Repositories/IntegrationDb.cs | 64 + .../Repositories/MasterListRepositoryTest.cs | 374 ++ .../Repositories/MedicineRepositoryTest.cs | 132 + .../Repositories/MongodbMigrationTest.cs | 156 + .../ObservationArchiveRepositoryTest.cs | 82 + .../Repositories/ObservationRepositoryTest.cs | 1804 +++++++++ .../PatientArchiveRepositoryTest.cs | 106 + .../Repositories/PatientRepositoryTest.cs | 624 ++++ .../Repositories/PoCMappingRepositoryTest.cs | 78 + .../Repositories/PoCSettingsRepositoryTest.cs | 117 + .../PointOfCareRepositoryTests.cs | 181 + .../PumpAlarmEventRepositoryTest.cs | 395 ++ .../PumpAlarmStateRepositoryTest.cs | 323 ++ .../Repositories/PumpArchiveRepositoryTest.cs | 193 + .../PumpObservationRepositoryTest.cs | 416 +++ .../Repositories/PumpStateRepositoryTest.cs | 185 + .../RecordingAlertArchiveRepositoryTest.cs | 73 + .../RecordingAlertRepositoryTest.cs | 281 ++ .../Repositories/SectionRepositoryTest.cs | 261 ++ .../ServiceConfigRepositoryTest.cs | 63 + .../TreatmentArchiveRepositoryTest.cs | 95 + .../Repositories/TreatmentRepositoryTest.cs | 186 + .../Repositories/UnitRepositoryTest.cs | 377 ++ .../Repositories/UserRepositoryTest.cs | 67 + .../Services/AdmissionServiceTest.cs | 574 +++ adas-core.Test/Services/AlarmServiceTest.cs | 247 ++ .../Services/CacheDispatcherTest.cs | 256 ++ adas-core.Test/Services/CacheServiceTest.cs | 208 ++ adas-core.Test/Services/CameraServiceTest.cs | 59 + .../Services/ConfigObservationServiceTest.cs | 381 ++ .../Services/ConfigPumpsServiceTest.cs | 170 + .../Services/ConfigUnitsServiceTest.cs | 157 + .../Services/DiagnosisServiceTest.cs | 541 +++ .../Services/DischargeServiceTest.cs | 218 ++ adas-core.Test/Services/DisplayServiceTest.cs | 375 ++ .../Services/GroupedObservationServiceTest.cs | 487 +++ .../HistoricalConfigChangesServiceTest.cs | 136 + .../Services/InMemoryLockProviderTest.cs | 121 + .../Services/LightBeaconServiceTest.cs | 70 + .../Services/MasterListServiceTest.cs | 185 + .../Services/MedicineServiceTest.cs | 270 ++ adas-core.Test/Services/NoCacheServiceTest.cs | 141 + .../Services/ObservationServiceTest.cs | 927 +++++ adas-core.Test/Services/PatientServiceTest.cs | 2414 ++++++++++++ .../Services/PointOfCareServiceTest.cs | 291 ++ .../Services/PublisherServiceTest.cs | 62 + adas-core.Test/Services/PumpServiceTest.cs | 461 +++ .../Services/RecordingAlertServiceTest.cs | 173 + .../Services/RecordingServiceTest.cs | 187 + .../Services/RedisLockProviderTest.cs | 175 + adas-core.Test/Services/RedisServiceTest.cs | 251 ++ adas-core.Test/Services/RelayServiceTest.cs | 241 ++ .../Services/SchedulerServiceTest.cs | 590 +++ .../Services/SendAlertServiceTest.cs | 115 + .../Services/SeviceConfigServiceTest.cs | 63 + .../Services/TreatmentServiceTest.cs | 277 ++ adas-core.Test/Services/UnitServiceTest.cs | 317 ++ adas-core.Test/Usings.cs | 1 + .../Utilities/CacheKeyClassifierTest.cs | 634 ++++ adas-core.Test/Utilities/TestUtilities.cs | 263 ++ adas-core.Test/adas-core.Test.csproj | 51 + adas-core.Test/adas-core.Test.csproj.bak | 52 + .../Devices/LightBeacon.cs | 19 + .../Devices/LightBeaconAbstract.cs | 34 + .../Devices/Turktbens2LightBeacon.cs | 279 ++ .../Services/LightBeaconService.cs | 396 ++ .../adas-core.module.LightBeacons.csproj | 19 + .../Devices/HttpDevice.cs | 74 + .../Devices/IProxyDevice.cs | 8 + .../ProxyDeviceSettings.cs | 13 + .../Services/IProxyDeviceService.cs | 7 + .../Services/ProxyDeviceService.cs | 75 + .../adas-core.module.ProxyDevices.csproj | 26 + adas-core.module.Relays/Devices/FakeRelay.cs | 62 + .../Devices/KMTronicRelay.cs | 209 ++ .../Devices/KMTronicV2Relay.cs | 187 + .../Devices/RelayDevice.cs | 86 + .../Models/PowerOutletsConfig.cs | 24 + .../Models/RelaySettings.cs | 8 + adas-core.module.Relays/Utils/HttpUtils.cs | 15 + .../adas-core.module.Relays.csproj | 19 + adas-core.sln | 481 +++ adas-core/.config/dotnet-tools.json | 12 + adas-core/.gitignore | 198 + adas-core/Configurations/ServiceExtension.cs | 78 + adas-core/Controllers/AdmissionController.cs | 183 + adas-core/Controllers/AlarmController.cs | 51 + .../Controllers/ApplicationController.cs | 102 + adas-core/Controllers/AuditController.cs | 49 + adas-core/Controllers/BoxController.cs | 67 + adas-core/Controllers/CameraController.cs | 54 + .../Controllers/ConfigDisplayController.cs | 437 +++ .../ConfigObservationController.cs | 227 ++ adas-core/Controllers/DeviceController.cs | 57 + adas-core/Controllers/DiagnosisController.cs | 49 + adas-core/Controllers/DischargeController.cs | 102 + adas-core/Controllers/DisplayController.cs | 307 ++ .../GroupedObservationsController.cs | 36 + .../Controllers/LightBeaconController.cs | 118 + adas-core/Controllers/MasterListController.cs | 513 +++ adas-core/Controllers/MedicinesController.cs | 130 + adas-core/Controllers/NoticeController.cs | 88 + .../Controllers/ObservationsController.cs | 160 + .../PatientAppointmentController.cs | 43 + adas-core/Controllers/PatientController.cs | 438 +++ .../Controllers/PointOfCareController.cs | 153 + .../Controllers/ProxyDeviceController.cs | 75 + adas-core/Controllers/PumpsController.cs | 122 + adas-core/Controllers/QXController.cs | 64 + adas-core/Controllers/RabbitController.cs | 33 + .../Controllers/RecordingAlertController.cs | 49 + adas-core/Controllers/RecordingController.cs | 140 + adas-core/Controllers/RelayController.cs | 252 ++ adas-core/Controllers/SendAlertController.cs | 91 + adas-core/Controllers/SensorController.cs | 95 + .../Controllers/ServiceConfigController.cs | 29 + adas-core/Controllers/TreatmentsController.cs | 132 + adas-core/Controllers/UnitController.cs | 281 ++ adas-core/Controllers/UserController.cs | 301 ++ adas-core/Dockerfile | 23 + .../ErrorMiddleware/ErrorHandlerMiddleware.cs | 56 + adas-core/Logging/LogExecutionContext.cs | 45 + adas-core/Logging/LogProvider.cs | 39 + adas-core/Program.cs | 494 +++ adas-core/Properties/launchSettings.json | 148 + adas-core/WebSocket/Hubs/UciHub.cs | 149 + .../WebSocket/WebSocketMessageService.cs | 1126 ++++++ adas-core/adas-core.csproj | 99 + adas-core/appsettings.Auditoria.json | 1518 ++++++++ adas-core/appsettings.BombasBD.json | 283 ++ adas-core/appsettings.CENTRAL_PHILIPS.json | 273 ++ adas-core/appsettings.CHUO.json | 356 ++ adas-core/appsettings.Develop.json | 1674 +++++++++ adas-core/appsettings.H12O.json | 206 ++ adas-core/appsettings.HGMM.json | 273 ++ adas-core/appsettings.HPAZ.json | 327 ++ adas-core/appsettings.HPAZBastion.json | 147 + adas-core/appsettings.HRYCM.json | 226 ++ adas-core/appsettings.HUVH-UCIA.json | 1347 +++++++ adas-core/appsettings.HUVH-UCIN.json | 1621 +++++++++ adas-core/appsettings.Local.json | 297 ++ adas-core/appsettings.LocalTest.json | 312 ++ adas-core/appsettings.NursePlan.json | 355 ++ adas-core/appsettings.json | 281 ++ 746 files changed, 106610 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 .teralevel-ci.yml create mode 100644 Dockerfile create mode 100644 Documentation/IEC 62304/Capítulo 10/FT-SW-VER-001_Plantilla_casos_de_prueba_VER_C10.docx create mode 100644 Documentation/IEC 62304/Capítulo 11/ANX-AD-05-05_Plan_V&V_ADAS_C11.docx create mode 100644 Documentation/IEC 62304/Capítulo 11/FT-SW-VAL-001_Plantilla_evidencia_de_validacion_C11.docx create mode 100644 Documentation/IEC 62304/Capítulo 12/FT-SW-REL-001_Plantilla_Release_Audit_Package_C12.docx create mode 100644 Documentation/IEC 62304/Capítulo 12/FT-SW-REL-002_Plantilla_Notas_de_Version_C12.docx create mode 100644 Documentation/IEC 62304/Capítulo 12/FT-SW-REL-003_Plantilla_Issues_Abiertos_y_Aceptabilidad_C12.docx create mode 100644 Documentation/IEC 62304/Capítulo 12/FT-SW-REL-004_Plantilla_Aprobacion_Formal_de_Release_C12.docx create mode 100644 Documentation/IEC 62304/Capítulo 13/FT-SW-CR-001-C13 - Registro de solicitud de cambio CR_C13.docx create mode 100644 Documentation/IEC 62304/Capítulo 14/RMF-SW-ADAS_marco_gestion_riesgos_C14.docx create mode 100644 Documentation/IEC 62304/Capítulo 15/FT-SW-SEC-005-C15_hardening_con_evidencias_VF.docx create mode 100644 Documentation/IEC 62304/Capítulo 16/adas_core_pipeline_v2.yml create mode 100644 Documentation/IEC 62304/Capítulo 16/adas_core_pipeline_v2_C16.docx create mode 100644 Documentation/IEC 62304/Capítulo 16/adas_front_pipeline_v2.yaml create mode 100644 Documentation/IEC 62304/Capítulo 16/adas_front_pipeline_v2_C16.docx create mode 100644 Documentation/IEC 62304/Capítulo 5/FT-SW-001_Matriz_roles_y_asignaciones_C5.docx create mode 100644 Documentation/IEC 62304/Capítulo 5/FT-SW-002_Perfil_de_rol_y_funciones_C5.docx create mode 100644 Documentation/IEC 62304/Capítulo 5/FT-SW-003_Plan_y_registro_de_formacion_C5.docx create mode 100644 Documentation/IEC 62304/Capítulo 5/FT-SW-004_Matriz_proveedores_SOUP_y_software_de_terceros_C5.docx create mode 100644 Documentation/IEC 62304/Capítulo 5/FT-SW-005_Registro_revisiones_y_aprobaciones_C5.docx create mode 100644 Documentation/IEC 62304/Capítulo 5/HERR-INV-001_Inventario_Herramientas_ADAS_C5.docx create mode 100644 Documentation/IEC 62304/Capítulo 6/2025_Documento de Integración_C6.xlsx create mode 100644 Documentation/IEC 62304/Capítulo 6/Anexo_A_Matriz_trazabilidad_UR_SRS_RISK_VER_Release_C6.docx create mode 100644 Documentation/IEC 62304/Capítulo 6/FT_SW_Especificacion_SRS_C6.docx create mode 100644 Documentation/IEC 62304/Capítulo 6/FT_SW_RR_AD_Registro_revision_y_decisiones_requisitos_C6.docx create mode 100644 Documentation/IEC 62304/Capítulo 6/FT_SW_Registro_requisitos_ciberseguridad_C6.docx create mode 100644 Documentation/IEC 62304/Capítulo 6/FT_SW_Registro_requisitos_no_funcionales_C6.docx create mode 100644 Documentation/IEC 62304/Capítulo 6/FT_SW_UR_PRD_Registro_C6.docx create mode 100644 Documentation/IEC 62304/SDP.docx create mode 100644 Documentation/IEC 62304/Tablas_IMQ/TablaMedical_60601-1vs62304_ES_cumplimentada_ADAS_claseA_V1.docx create mode 100644 Documentation/IEC 62304/Tablas_IMQ/TablaMedical_62304_ES.docx create mode 100644 Documentation/Manuals/Manual-Usuario-ADAS-Display_ES_rev.200426.pdf create mode 100644 Documentation/Manuals/Manual_Técnico-Software_Epigram_ADAS_v.130226.pdf create mode 100644 NuGet.Config create mode 100644 README.md create mode 100644 adas-core.Application/Customizations/BD/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/CHUO/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/H12O/UCIN/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/HGM/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/HPAZ/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/HRYC/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/HUVH/UCIA/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/HUVH/UCIN/CalculatedObservations.cs create mode 100644 adas-core.Application/Customizations/NursePlan/CalculatedObservations.cs create mode 100644 adas-core.Application/Exceptions/APIRequestException.cs create mode 100644 adas-core.Application/Exceptions/BadRequestException.cs create mode 100644 adas-core.Application/Exceptions/ConflictException.cs create mode 100644 adas-core.Application/Exceptions/CustomArgumentException.cs create mode 100644 adas-core.Application/Exceptions/ForbbidenException.cs create mode 100644 adas-core.Application/Exceptions/InvalidFormatException.cs create mode 100644 adas-core.Application/Exceptions/NotFoundException.cs create mode 100644 adas-core.Application/Exceptions/TokenException.cs create mode 100644 adas-core.Application/Exceptions/UnauthorizedException.cs create mode 100644 adas-core.Application/Exceptions/UnprocessableEntityException.cs create mode 100644 adas-core.Application/Providers/AdasProvider.cs create mode 100644 adas-core.Application/Providers/BaseProvider.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IAdmissionRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IAlarmRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IAppointmentArchiveRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IAppointmentRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IArchivePatientCarePlanRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IAuthorityRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/ICameraRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IConfigObservationRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IConfigPumpsRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IConfigUnitsRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDeviceRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDiagnosisArchiveRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDiagnosisRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDischargeRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDisplayCardConfigRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDisplayChartConfigRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDisplayConfigRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDisplayDetailConfigRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IDisplayRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IHistoricalConfigChangesRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/ILightBeaconRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IMasterListRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IMedicineRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IMongoRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/INoticeRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IObservationArchiveRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IObservationRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPatientArchiveRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPatientCarePlanRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPatientRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPoCMappingRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPoCSettingsRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPointOfCareRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPumpAlarmEventRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPumpAlarmStateRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPumpArchiveRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPumpObservationRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IPumpStateRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IRecordingAlertArchiveRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IRecordingAlertRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IRelayRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/ISectionRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IServiceConfigRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/ITreatmentArchiveRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/ITreatmentRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IUnitRepository.cs create mode 100644 adas-core.Application/Repositories/Interfaces/IUserRepository.cs create mode 100644 adas-core.Application/Services/AdminPanelService.cs create mode 100644 adas-core.Application/Services/AdmissionService.cs create mode 100644 adas-core.Application/Services/AlarmService.cs create mode 100644 adas-core.Application/Services/AlertValuesService.cs create mode 100644 adas-core.Application/Services/AppointmentService.cs create mode 100644 adas-core.Application/Services/ArchivePatientCarePlanService.cs create mode 100644 adas-core.Application/Services/ArchivePatientObservationsService.cs create mode 100644 adas-core.Application/Services/ArchivedPatientService.cs create mode 100644 adas-core.Application/Services/ArchivedPatientTreatmentService.cs create mode 100644 adas-core.Application/Services/AuthService.cs create mode 100644 adas-core.Application/Services/Caching/CacheDispatcher.cs create mode 100644 adas-core.Application/Services/Caching/CacheService.cs create mode 100644 adas-core.Application/Services/Caching/InMemoryLockProvider.cs create mode 100644 adas-core.Application/Services/Caching/LockManagerService.cs create mode 100644 adas-core.Application/Services/Caching/NoCacheService.cs create mode 100644 adas-core.Application/Services/Caching/RedisLockProvider.cs create mode 100644 adas-core.Application/Services/Caching/RedisService.cs create mode 100644 adas-core.Application/Services/CalculatedObservationsService.cs create mode 100644 adas-core.Application/Services/CameraService.cs create mode 100644 adas-core.Application/Services/ConfigObservationService.cs create mode 100644 adas-core.Application/Services/ConfigPumpsService.cs create mode 100644 adas-core.Application/Services/ConfigUnitsService.cs create mode 100644 adas-core.Application/Services/DefaultCalculatedObservations.cs create mode 100644 adas-core.Application/Services/DeviceService.cs create mode 100644 adas-core.Application/Services/DiagnosisService.cs create mode 100644 adas-core.Application/Services/DischargeService.cs create mode 100644 adas-core.Application/Services/DisplayConfigService.cs create mode 100644 adas-core.Application/Services/DisplayService.cs create mode 100644 adas-core.Application/Services/FileService.cs create mode 100644 adas-core.Application/Services/GroupedObservationService.cs create mode 100644 adas-core.Application/Services/HistoricalConfigChangesService.cs create mode 100644 adas-core.Application/Services/Interfaces/IAPIRequestService.cs create mode 100644 adas-core.Application/Services/Interfaces/IAdminPanelService.cs create mode 100644 adas-core.Application/Services/Interfaces/IAdmissionService.cs create mode 100644 adas-core.Application/Services/Interfaces/IAlarmService.cs create mode 100644 adas-core.Application/Services/Interfaces/IAlertValuesService.cs create mode 100644 adas-core.Application/Services/Interfaces/IAppointmentService.cs create mode 100644 adas-core.Application/Services/Interfaces/IArchivePatientCarePlanService.cs create mode 100644 adas-core.Application/Services/Interfaces/IArchivedPatientObservationService.cs create mode 100644 adas-core.Application/Services/Interfaces/IArchivedPatientService.cs create mode 100644 adas-core.Application/Services/Interfaces/IArchivedPatientTreatmentService.cs create mode 100644 adas-core.Application/Services/Interfaces/IAuthService.cs create mode 100644 adas-core.Application/Services/Interfaces/ICacheService.cs create mode 100644 adas-core.Application/Services/Interfaces/ICalculatedObservations.cs create mode 100644 adas-core.Application/Services/Interfaces/ICalculatedObservationsService.cs create mode 100644 adas-core.Application/Services/Interfaces/ICameraService.cs create mode 100644 adas-core.Application/Services/Interfaces/IClientMessageService.cs create mode 100644 adas-core.Application/Services/Interfaces/IConfigObservationService.cs create mode 100644 adas-core.Application/Services/Interfaces/IConfigPumpsService.cs create mode 100644 adas-core.Application/Services/Interfaces/IConfigUnitsService.cs create mode 100644 adas-core.Application/Services/Interfaces/IDeviceService.cs create mode 100644 adas-core.Application/Services/Interfaces/IDiagnosisService.cs create mode 100644 adas-core.Application/Services/Interfaces/IDischargeService.cs create mode 100644 adas-core.Application/Services/Interfaces/IDisplayConfigService.cs create mode 100644 adas-core.Application/Services/Interfaces/IDisplayService.cs create mode 100644 adas-core.Application/Services/Interfaces/IFileService.cs create mode 100644 adas-core.Application/Services/Interfaces/IGroupedObservationService.cs create mode 100644 adas-core.Application/Services/Interfaces/IHistoricalConfigChangesService.cs create mode 100644 adas-core.Application/Services/Interfaces/ILightBeaconService.cs create mode 100644 adas-core.Application/Services/Interfaces/ILocalAuditService.cs create mode 100644 adas-core.Application/Services/Interfaces/ILockProvider.cs create mode 100644 adas-core.Application/Services/Interfaces/IMasterListService.cs create mode 100644 adas-core.Application/Services/Interfaces/IMasterListServiceFactory.cs create mode 100644 adas-core.Application/Services/Interfaces/IMedicineService.cs create mode 100644 adas-core.Application/Services/Interfaces/INoticeService.cs create mode 100644 adas-core.Application/Services/Interfaces/IObservationDemoService.cs create mode 100644 adas-core.Application/Services/Interfaces/IObservationService.cs create mode 100644 adas-core.Application/Services/Interfaces/IPatientCarePlanService.cs create mode 100644 adas-core.Application/Services/Interfaces/IPatientService.cs create mode 100644 adas-core.Application/Services/Interfaces/IPermissionService.cs create mode 100644 adas-core.Application/Services/Interfaces/IPoCMappingService.cs create mode 100644 adas-core.Application/Services/Interfaces/IPointOfCareService.cs create mode 100644 adas-core.Application/Services/Interfaces/IPublisherService.cs create mode 100644 adas-core.Application/Services/Interfaces/IPumpService.cs create mode 100644 adas-core.Application/Services/Interfaces/IRecordingAlertService.cs create mode 100644 adas-core.Application/Services/Interfaces/IRecordingService.cs create mode 100644 adas-core.Application/Services/Interfaces/IRelayService.cs create mode 100644 adas-core.Application/Services/Interfaces/ISendAlertService.cs create mode 100644 adas-core.Application/Services/Interfaces/IServiceConfigService.cs create mode 100644 adas-core.Application/Services/Interfaces/ISubscriberGroupedService.cs create mode 100644 adas-core.Application/Services/Interfaces/ISubscribersService.cs create mode 100644 adas-core.Application/Services/Interfaces/ITreatmentService.cs create mode 100644 adas-core.Application/Services/Interfaces/IUnitService.cs create mode 100644 adas-core.Application/Services/LocalAuditService.cs create mode 100644 adas-core.Application/Services/MasterListService.cs create mode 100644 adas-core.Application/Services/MasterListServiceFactory .cs create mode 100644 adas-core.Application/Services/MedicineService.cs create mode 100644 adas-core.Application/Services/NoticeService.cs create mode 100644 adas-core.Application/Services/ObservationDemoService.cs create mode 100644 adas-core.Application/Services/ObservationService.cs create mode 100644 adas-core.Application/Services/PatientCarePlanService.cs create mode 100644 adas-core.Application/Services/PatientService.cs create mode 100644 adas-core.Application/Services/PermissionService.cs create mode 100644 adas-core.Application/Services/PoCMappingService.cs create mode 100644 adas-core.Application/Services/PointOfCareService.cs create mode 100644 adas-core.Application/Services/PumpService.cs create mode 100644 adas-core.Application/Services/RecordingAlertService.cs create mode 100644 adas-core.Application/Services/RecordingService.cs create mode 100644 adas-core.Application/Services/SchedulerService.cs create mode 100644 adas-core.Application/Services/ServiceConfigService.cs create mode 100644 adas-core.Application/Services/SubscribersService.cs create mode 100644 adas-core.Application/Services/TreatmentService.cs create mode 100644 adas-core.Application/Services/UnitService.cs create mode 100644 adas-core.Application/Subscriptions/SubscriberGroupedService.cs create mode 100644 adas-core.Application/Subscriptions/WsSubscriberGrouped.cs create mode 100644 adas-core.Application/Subscriptions/WsSuscriber.cs create mode 100644 adas-core.Application/adas-core.Application.csproj create mode 100644 adas-core.Authentication/Attributes/AuthorizeRolesAttribute.cs create mode 100644 adas-core.Authentication/Attributes/AuthorizeUserByService.cs create mode 100644 adas-core.Authentication/Attributes/PermissionAuthorizeAttribute.cs create mode 100644 adas-core.Authentication/AuthorityService.cs create mode 100644 adas-core.Authentication/Interfaces/IAuthorityService.cs create mode 100644 adas-core.Authentication/Interfaces/ILoginService.cs create mode 100644 adas-core.Authentication/Interfaces/ITokenService.cs create mode 100644 adas-core.Authentication/Interfaces/IUserService.cs create mode 100644 adas-core.Authentication/Models/LoginInfo.cs create mode 100644 adas-core.Authentication/Models/Token.cs create mode 100644 adas-core.Authentication/Models/UciResponse.cs create mode 100644 adas-core.Authentication/RegistrationExtensions/AuthRegistration.cs create mode 100644 adas-core.Authentication/UserService.cs create mode 100644 adas-core.Authentication/adas-core.Authentication.csproj create mode 100644 adas-core.Domain/Enums/ActionsEnum.cs create mode 100644 adas-core.Domain/Enums/AlarmEnum.cs create mode 100644 adas-core.Domain/Enums/AuthorizeUserByServiceType.cs create mode 100644 adas-core.Domain/Enums/CacheEnum.cs create mode 100644 adas-core.Domain/Enums/ClickType.cs create mode 100644 adas-core.Domain/Enums/DeviceActionType.cs create mode 100644 adas-core.Domain/Enums/DeviceType.cs create mode 100644 adas-core.Domain/Enums/DisplayConfigEnums.cs create mode 100644 adas-core.Domain/Enums/FileEnum.cs create mode 100644 adas-core.Domain/Enums/GroupedObservationEnum.cs create mode 100644 adas-core.Domain/Enums/HttpEnum.cs create mode 100644 adas-core.Domain/Enums/LightBeaconColor.cs create mode 100644 adas-core.Domain/Enums/MasterListType.cs create mode 100644 adas-core.Domain/Enums/MedicineEnum.cs create mode 100644 adas-core.Domain/Enums/ObservationEnum.cs create mode 100644 adas-core.Domain/Enums/OperationType.cs create mode 100644 adas-core.Domain/Enums/OrderControlType.cs create mode 100644 adas-core.Domain/Enums/PatientEnum.cs create mode 100644 adas-core.Domain/Enums/PermissionEnum.cs create mode 100644 adas-core.Domain/Enums/PumpEnum.cs create mode 100644 adas-core.Domain/Enums/RelayEnum.cs create mode 100644 adas-core.Domain/Enums/RespirationType.cs create mode 100644 adas-core.Domain/Enums/RetentionPolicy.cs create mode 100644 adas-core.Domain/Enums/StatusEnum.cs create mode 100644 adas-core.Domain/Enums/SubscriptionType.cs create mode 100644 adas-core.Domain/Enums/UserEnum.cs create mode 100644 adas-core.Domain/Enums/VirtualPointOfCare.cs create mode 100644 adas-core.Domain/Exceptions/AdasException.cs create mode 100644 adas-core.Domain/Exceptions/BusinessException.cs create mode 100644 adas-core.Domain/Exceptions/LoginServicesException.cs create mode 100644 adas-core.Domain/Exceptions/LoginServicesNotFoundException.cs create mode 100644 adas-core.Domain/Exceptions/UserNotFoundException.cs create mode 100644 adas-core.Domain/IDefaultRepository.cs create mode 100644 adas-core.Domain/Models/ADMPanelRequest.cs create mode 100644 adas-core.Domain/Models/APIRequest.cs create mode 100644 adas-core.Domain/Models/AppSettings/ApiSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/AuthSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/AutoRecordingSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/CacheSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/DatabaseSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/ListSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/PermissionSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/RabbitMQSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/RecordingSettings.cs create mode 100644 adas-core.Domain/Models/AppSettings/RedisSettings.cs create mode 100644 adas-core.Domain/Models/BasePatientObservation.cs create mode 100644 adas-core.Domain/Models/BasePatientObservationValue.cs create mode 100644 adas-core.Domain/Models/BsonConverters/DictionaryBsonConverter.cs create mode 100644 adas-core.Domain/Models/BsonConverters/DictionaryConverter.cs create mode 100644 adas-core.Domain/Models/ChartValue.cs create mode 100644 adas-core.Domain/Models/ChatMessage.cs create mode 100644 adas-core.Domain/Models/Code.cs create mode 100644 adas-core.Domain/Models/CodeAction.cs create mode 100644 adas-core.Domain/Models/CodeStatus.cs create mode 100644 adas-core.Domain/Models/DTO/AppointmentDto.cs create mode 100644 adas-core.Domain/Models/DTO/AssetDto.cs create mode 100644 adas-core.Domain/Models/DTO/ConfigObservationDto.cs create mode 100644 adas-core.Domain/Models/DTO/CreateUserWithAuthDto.cs create mode 100644 adas-core.Domain/Models/DTO/DeviceDto.cs create mode 100644 adas-core.Domain/Models/DTO/DiagnosisDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/ColorConfigDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/CreateDisplayConfigDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/DisplayConfigDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/DisplayConfigLocationDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/DisplayConfigSummary.cs create mode 100644 adas-core.Domain/Models/DTO/Display/DisplayMinimalDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/DisplayNurseDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/DisplayWithPermissionsDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/MinimalDisplayListDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/SmartDisplayDto.cs create mode 100644 adas-core.Domain/Models/DTO/Display/UpdateDisplayConfigNameDto.cs create mode 100644 adas-core.Domain/Models/DTO/MasterListDto.cs create mode 100644 adas-core.Domain/Models/DTO/MasterListWithPaginatedOptionsDto.cs create mode 100644 adas-core.Domain/Models/DTO/ObservationAlarmDto.cs create mode 100644 adas-core.Domain/Models/DTO/ObservationDto.cs create mode 100644 adas-core.Domain/Models/DTO/PaginationPairDto.cs create mode 100644 adas-core.Domain/Models/DTO/PatientDto.cs create mode 100644 adas-core.Domain/Models/DTO/PocAndUnitDto.cs create mode 100644 adas-core.Domain/Models/DTO/PointOfCareDto.cs create mode 100644 adas-core.Domain/Models/DTO/PumpDto.cs create mode 100644 adas-core.Domain/Models/DTO/RecordingAlertDto.cs create mode 100644 adas-core.Domain/Models/DTO/TreatmentDto.cs create mode 100644 adas-core.Domain/Models/DTO/UnitInfoDto.cs create mode 100644 adas-core.Domain/Models/DTO/UpdateListNameAndDescriptionDto.cs create mode 100644 adas-core.Domain/Models/DTO/UpdateMasterListDetailsDto.cs create mode 100644 adas-core.Domain/Models/DTO/UpdateObservationDto.cs create mode 100644 adas-core.Domain/Models/DTO/UpdateOptionMasterListDto.cs create mode 100644 adas-core.Domain/Models/DTO/UpdatePasswordDto.cs create mode 100644 adas-core.Domain/Models/DTO/UpdateUnitIdListDto.cs create mode 100644 adas-core.Domain/Models/DTO/UpdateUserWithAuthDto.cs create mode 100644 adas-core.Domain/Models/Entity.cs create mode 100644 adas-core.Domain/Models/Field.cs create mode 100644 adas-core.Domain/Models/Filter/FilterOptionListElement.cs create mode 100644 adas-core.Domain/Models/Filter/FilteredRequest.cs create mode 100644 adas-core.Domain/Models/Filter/PaginationFilter.cs create mode 100644 adas-core.Domain/Models/GroupedObservation.cs create mode 100644 adas-core.Domain/Models/GroupedObservations/Field.cs create mode 100644 adas-core.Domain/Models/GroupedObservations/GroupedField.cs create mode 100644 adas-core.Domain/Models/HistoricalLocations.cs create mode 100644 adas-core.Domain/Models/ManualRecording.cs create mode 100644 adas-core.Domain/Models/Masters/AccessControlList.cs create mode 100644 adas-core.Domain/Models/Masters/AllergyList.cs create mode 100644 adas-core.Domain/Models/Masters/AltableOptionList.cs create mode 100644 adas-core.Domain/Models/Masters/DestinationList.cs create mode 100644 adas-core.Domain/Models/Masters/DiagnosisList.cs create mode 100644 adas-core.Domain/Models/Masters/DischargeStatusList.cs create mode 100644 adas-core.Domain/Models/Masters/DoctorList.cs create mode 100644 adas-core.Domain/Models/Masters/DoctorTypeList.cs create mode 100644 adas-core.Domain/Models/Masters/GenericList.cs create mode 100644 adas-core.Domain/Models/Masters/InsulationList.cs create mode 100644 adas-core.Domain/Models/Masters/InternalDestinationList.cs create mode 100644 adas-core.Domain/Models/Masters/LanguageBarrierList.cs create mode 100644 adas-core.Domain/Models/Masters/MasterList.cs create mode 100644 adas-core.Domain/Models/Masters/MobilityOptionList.cs create mode 100644 adas-core.Domain/Models/Masters/OptionList.cs create mode 100644 adas-core.Domain/Models/Masters/OriginList.cs create mode 100644 adas-core.Domain/Models/Masters/PassiveSittingList.cs create mode 100644 adas-core.Domain/Models/Masters/PatientStatusList.cs create mode 100644 adas-core.Domain/Models/Masters/ProcedureList.cs create mode 100644 adas-core.Domain/Models/Masters/ServiceList.cs create mode 100644 adas-core.Domain/Models/Masters/TestList.cs create mode 100644 adas-core.Domain/Models/Masters/TherapeuticCeilingList.cs create mode 100644 adas-core.Domain/Models/Masters/TreatmentList.cs create mode 100644 adas-core.Domain/Models/Masters/VisitOptionList.cs create mode 100644 adas-core.Domain/Models/Medicine.cs create mode 100644 adas-core.Domain/Models/MongoModels/Admission.cs create mode 100644 adas-core.Domain/Models/MongoModels/AlarmConfig.cs create mode 100644 adas-core.Domain/Models/MongoModels/AlarmItem.cs create mode 100644 adas-core.Domain/Models/MongoModels/Authorizations.cs create mode 100644 adas-core.Domain/Models/MongoModels/Box.cs create mode 100644 adas-core.Domain/Models/MongoModels/Camera.cs create mode 100644 adas-core.Domain/Models/MongoModels/ConfigObservation.cs create mode 100644 adas-core.Domain/Models/MongoModels/ConfigPumps.cs create mode 100644 adas-core.Domain/Models/MongoModels/ConfigUnits.cs create mode 100644 adas-core.Domain/Models/MongoModels/Device.cs create mode 100644 adas-core.Domain/Models/MongoModels/Discharge.cs create mode 100644 adas-core.Domain/Models/MongoModels/Display.cs create mode 100644 adas-core.Domain/Models/MongoModels/DisplayCardConfig.cs create mode 100644 adas-core.Domain/Models/MongoModels/DisplayCardDetailConfig.cs create mode 100644 adas-core.Domain/Models/MongoModels/DisplayConfig.cs create mode 100644 adas-core.Domain/Models/MongoModels/HistoricalConfigChanges.cs create mode 100644 adas-core.Domain/Models/MongoModels/HistoricalIds.cs create mode 100644 adas-core.Domain/Models/MongoModels/LightBeacon.cs create mode 100644 adas-core.Domain/Models/MongoModels/Notice.cs create mode 100644 adas-core.Domain/Models/MongoModels/Patient.cs create mode 100644 adas-core.Domain/Models/MongoModels/PatientCarePlan.cs create mode 100644 adas-core.Domain/Models/MongoModels/PoCMapping.cs create mode 100644 adas-core.Domain/Models/MongoModels/PoCSettings.cs create mode 100644 adas-core.Domain/Models/MongoModels/PointOfCare.cs create mode 100644 adas-core.Domain/Models/MongoModels/PumpElement.cs create mode 100644 adas-core.Domain/Models/MongoModels/Relay.cs create mode 100644 adas-core.Domain/Models/MongoModels/Section.cs create mode 100644 adas-core.Domain/Models/MongoModels/ServiceConfig.cs create mode 100644 adas-core.Domain/Models/MongoModels/ServiceConfigService.cs create mode 100644 adas-core.Domain/Models/MongoModels/ServiceConfigTheme.cs create mode 100644 adas-core.Domain/Models/MongoModels/Step.cs create mode 100644 adas-core.Domain/Models/MongoModels/Unit.cs create mode 100644 adas-core.Domain/Models/MongoModels/User.cs create mode 100644 adas-core.Domain/Models/Note.cs create mode 100644 adas-core.Domain/Models/ObservaitonRetentionResult.cs create mode 100644 adas-core.Domain/Models/ObservationData.cs create mode 100644 adas-core.Domain/Models/Observations/BoolObservation.cs create mode 100644 adas-core.Domain/Models/Observations/ChartObservation.cs create mode 100644 adas-core.Domain/Models/Observations/DoubleObservation.cs create mode 100644 adas-core.Domain/Models/Observations/FullObservation.cs create mode 100644 adas-core.Domain/Models/Observations/Medication.cs create mode 100644 adas-core.Domain/Models/Observations/Observation.cs create mode 100644 adas-core.Domain/Models/Observations/ObservationPaginatedResult.cs create mode 100644 adas-core.Domain/Models/Observations/ObservationsRequest.cs create mode 100644 adas-core.Domain/Models/Observations/PredictMedicationObservation.cs create mode 100644 adas-core.Domain/Models/Observations/StringObservation.cs create mode 100644 adas-core.Domain/Models/PatientAllergiesValue.cs create mode 100644 adas-core.Domain/Models/PatientAppointment.cs create mode 100644 adas-core.Domain/Models/PatientDiagnosis.cs create mode 100644 adas-core.Domain/Models/PatientDrainagesValue.cs create mode 100644 adas-core.Domain/Models/PatientICCA.cs create mode 100644 adas-core.Domain/Models/PatientIntravenousLinesValue.cs create mode 100644 adas-core.Domain/Models/PatientLocation.cs create mode 100644 adas-core.Domain/Models/PatientLocationAction.cs create mode 100644 adas-core.Domain/Models/PatientObservation.cs create mode 100644 adas-core.Domain/Models/PatientObservationAlarm.cs create mode 100644 adas-core.Domain/Models/PatientRecordingAlert.cs create mode 100644 adas-core.Domain/Models/PatientTreatment.cs create mode 100644 adas-core.Domain/Models/Person.cs create mode 100644 adas-core.Domain/Models/PersonResource.cs create mode 100644 adas-core.Domain/Models/PersonResourceAction.cs create mode 100644 adas-core.Domain/Models/Providers/ProvidersSettings.cs create mode 100644 adas-core.Domain/Models/Providers/ResultModelPredictMedicationADAS.cs create mode 100644 adas-core.Domain/Models/Providers/ResultModelPredictOfStayADAS.cs create mode 100644 adas-core.Domain/Models/Pumps/CommonPumpTypes.cs create mode 100644 adas-core.Domain/Models/Pumps/PumpAlarmEvent.cs create mode 100644 adas-core.Domain/Models/Pumps/PumpAlarmState.cs create mode 100644 adas-core.Domain/Models/Pumps/PumpObservation.cs create mode 100644 adas-core.Domain/Models/Pumps/PumpState.cs create mode 100644 adas-core.Domain/Models/Recording/AccessGrant.cs create mode 100644 adas-core.Domain/Models/Recording/Patient.cs create mode 100644 adas-core.Domain/Models/Recording/RecordingData.cs create mode 100644 adas-core.Domain/Models/Recording/VideoDto.cs create mode 100644 adas-core.Domain/Models/Responses/BeaconResponse.cs create mode 100644 adas-core.Domain/Models/Responses/BoxObservationsResponse.cs create mode 100644 adas-core.Domain/Models/Responses/DisplayConfigMinimalResponse.cs create mode 100644 adas-core.Domain/Models/Responses/LoginResponse.cs create mode 100644 adas-core.Domain/Models/Responses/PaginationResponse.cs create mode 100644 adas-core.Domain/Models/Responses/PatientSearch.cs create mode 100644 adas-core.Domain/Models/Responses/Response.cs create mode 100644 adas-core.Domain/Models/SignalR/Message.cs create mode 100644 adas-core.Domain/Models/SignalR/MessageData.cs create mode 100644 adas-core.Domain/Models/SignalR/Recording.cs create mode 100644 adas-core.Domain/Models/SystemAlerts/ApiClients.cs create mode 100644 adas-core.Domain/Models/SystemAlerts/Performance.cs create mode 100644 adas-core.Domain/Models/SystemAlerts/Queue.cs create mode 100644 adas-core.Domain/Models/Timing.cs create mode 100644 adas-core.Domain/Models/TreatmentRoute.cs create mode 100644 adas-core.Domain/Models/UiConfig.cs create mode 100644 adas-core.Domain/Models/ValueConfig.cs create mode 100644 adas-core.Domain/Models/WebMessageNotification.cs create mode 100644 adas-core.Domain/Permissions.cs create mode 100644 adas-core.Domain/QueryCustomizer.cs create mode 100644 adas-core.Domain/Utils/AuthUtils.cs create mode 100644 adas-core.Domain/Utils/BsonUtils.cs create mode 100644 adas-core.Domain/Utils/CacheUtils.cs create mode 100644 adas-core.Domain/Utils/CardConfigExtensions.cs create mode 100644 adas-core.Domain/Utils/CollectionsUtils.cs create mode 100644 adas-core.Domain/Utils/ComparableDictionary.cs create mode 100644 adas-core.Domain/Utils/ComplexObjectValueTypeSerializer.cs create mode 100644 adas-core.Domain/Utils/CryptoAdas.cs create mode 100644 adas-core.Domain/Utils/DetailConfigExtension.cs create mode 100644 adas-core.Domain/Utils/DictionaryEx.cs create mode 100644 adas-core.Domain/Utils/EnumUtils.cs create mode 100644 adas-core.Domain/Utils/EquatableDictionary.cs create mode 100644 adas-core.Domain/Utils/GlobalData.cs create mode 100644 adas-core.Domain/Utils/Hl7Utils.cs create mode 100644 adas-core.Domain/Utils/Interfaces/IMappingUtils.cs create mode 100644 adas-core.Domain/Utils/JsonExtensions.cs create mode 100644 adas-core.Domain/Utils/JwtHelper.cs create mode 100644 adas-core.Domain/Utils/Mapper.cs create mode 100644 adas-core.Domain/Utils/MappingUtils.cs create mode 100644 adas-core.Domain/Utils/MediaUtils.cs create mode 100644 adas-core.Domain/Utils/NumberUtils.cs create mode 100644 adas-core.Domain/Utils/ObjectIdConverter.cs create mode 100644 adas-core.Domain/Utils/ObjectUtils.cs create mode 100644 adas-core.Domain/Utils/RelayHelper.cs create mode 100644 adas-core.Domain/Utils/StringEx.cs create mode 100644 adas-core.Domain/adas-core.Domain.csproj create mode 100644 adas-core.Infrastructure/Migrations/MongoMigrations/U_0_1_0_UpdateDataPatien.cs create mode 100644 adas-core.Infrastructure/Migrations/MongoMigrations/U_0_1_1_UpdateDisplayConfigDriver.cs create mode 100644 adas-core.Infrastructure/Migrations/MongoMigrations/U_0_1_2_UpdatePointOfCareConfig.cs create mode 100644 adas-core.Infrastructure/Migrations/MongoMigrations/U_0_1_3_UpdateLanguageBarrier.cs create mode 100644 adas-core.Infrastructure/Repositories/AdmissionRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/AlarmRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/AppointmentArchiveRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/AppointmentRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/ArchivePatientCarePlanRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/AuthorityRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/CameraRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/ConfigObservationRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/ConfigPumpsRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/ConfigUnitsRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DeviceRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DiagnosisArchiveRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DiagnosisRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DischargeRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DisplayCardConfigRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DisplayChartConfigRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DisplayConfigRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DisplayDetailConfigRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/DisplayRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/HistoricalConfigChangesRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/LightBeaconRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/MasterListRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/MedicineRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/MongoRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/NoticeRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/ObservationArchiveRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/ObservationRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/POCMappingRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PatientArchiveRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PatientCarePlanRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PatientRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PoCSettingsRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PointOfCareRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PumpAlarmEventRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PumpAlarmStateRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PumpArchiveRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PumpObservationRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/PumpStateRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/RecordingAlertArchiveRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/RecordingAlertRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/RelayRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/SectionRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/ServiceConfigRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/TreatmentArchiveRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/TreatmentRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/UnitRepository.cs create mode 100644 adas-core.Infrastructure/Repositories/UserRepository.cs create mode 100644 adas-core.Infrastructure/Services/PublisherService.cs create mode 100644 adas-core.Infrastructure/Services/ReceiverService.cs create mode 100644 adas-core.Infrastructure/Services/RelayService.cs create mode 100644 adas-core.Infrastructure/Services/SendAlertService.cs create mode 100644 adas-core.Infrastructure/Utils/CacheHostBuilderExtension.cs create mode 100644 adas-core.Infrastructure/Utils/CustomPointOfCareConverter.cs create mode 100644 adas-core.Infrastructure/Utils/MongoDbHostBuilderExtension.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/AlarmMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/AppointmentMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/AuthMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/BannerConfigMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/BeaconMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/BoxConfigMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/CameraContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/CardMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/CellMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/ColorConfigMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/ComunicationFlowMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/DeviceMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/DisplayHomeConfigContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/DisplayMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/FormMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/GraphMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/HeaderMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/Interfaz/IEntityMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/MasterListMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/NoticeControlMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/ObsUnitMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/ObservationMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/PatientMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/PoCMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/PumpMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/RelayContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/RowMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/SectionMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/ServiceConfigMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/StandardMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/TreatmentMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoMaps/UnitMapContributor.cs create mode 100644 adas-core.Infrastructure/Utils/MongoUtils.cs create mode 100644 adas-core.Infrastructure/Utils/PatientObservationAlarmConverter.cs create mode 100644 adas-core.Infrastructure/Utils/PatientObservationConverter.cs create mode 100644 adas-core.Infrastructure/Utils/PatientPumpObservationConverter.cs create mode 100644 adas-core.Infrastructure/Utils/PersonConverter.cs create mode 100644 adas-core.Infrastructure/Utils/RabbitConsumerErrorStrategy.cs create mode 100644 adas-core.Infrastructure/Utils/RabbitIErrorMessageSerializer.cs create mode 100644 adas-core.Infrastructure/Utils/TypesUtils.cs create mode 100644 adas-core.Infrastructure/adas-core.Infrastructure.csproj create mode 100644 adas-core.LdapLogin/Configuration/LDAPModule.cs create mode 100644 adas-core.LdapLogin/Configuration/LdapConfig.cs create mode 100644 adas-core.LdapLogin/Configuration/LdapConfigValidator.cs create mode 100644 adas-core.LdapLogin/IModule.cs create mode 100644 adas-core.LdapLogin/LdapLoginService.cs create mode 100644 adas-core.LdapLogin/RegistrationExtension/LdapRegistration.cs create mode 100644 adas-core.LdapLogin/adas-core.LdapLogin.csproj create mode 100644 adas-core.LocalLogin/ILocalLoginRepository.cs create mode 100644 adas-core.LocalLogin/LocalLoginRepository.cs create mode 100644 adas-core.LocalLogin/LocalLoginServiceImpl.cs create mode 100644 adas-core.LocalLogin/RegistrationExtension/LocalLoginExtension.cs create mode 100644 adas-core.LocalLogin/adas-core.LocalLogin.csproj create mode 100644 adas-core.Test/Customizations/H12O/UCIN/CalculatedObservationsTest.cs create mode 100644 adas-core.Test/Customizations/HPAZ/CalculatedObservationsTest.cs create mode 100644 adas-core.Test/Customizations/HRYC/CalculatedObservationsTest.cs create mode 100644 adas-core.Test/Customizations/HUVH/UCIA/CalculatedObservationsTest.cs create mode 100644 adas-core.Test/Customizations/HUVH/UCIN/CalculatedObservationsTest.cs create mode 100644 adas-core.Test/Models/FakeLogger.cs create mode 100644 adas-core.Test/Models/SignalR/SubscriberGroupedTest.cs create mode 100644 adas-core.Test/Repositories/AdmissionRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/AlarmRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/AppointmentArchiveRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/AppointmentRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/ConfigObservationRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/ConfigPumpsRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/ConfigUnitsRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/DiagnosisArchiveRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/DiagnosisRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/DischargeRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/DisplayConfigTest.cs create mode 100644 adas-core.Test/Repositories/DisplayRepisitoryTest.cs create mode 100644 adas-core.Test/Repositories/HistoricalConfigChangesRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/IntegrationDb.cs create mode 100644 adas-core.Test/Repositories/MasterListRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/MedicineRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/MongodbMigrationTest.cs create mode 100644 adas-core.Test/Repositories/ObservationArchiveRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/ObservationRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PatientArchiveRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PatientRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PoCMappingRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PoCSettingsRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PointOfCareRepositoryTests.cs create mode 100644 adas-core.Test/Repositories/PumpAlarmEventRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PumpAlarmStateRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PumpArchiveRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PumpObservationRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/PumpStateRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/RecordingAlertArchiveRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/RecordingAlertRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/SectionRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/ServiceConfigRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/TreatmentArchiveRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/TreatmentRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/UnitRepositoryTest.cs create mode 100644 adas-core.Test/Repositories/UserRepositoryTest.cs create mode 100644 adas-core.Test/Services/AdmissionServiceTest.cs create mode 100644 adas-core.Test/Services/AlarmServiceTest.cs create mode 100644 adas-core.Test/Services/CacheDispatcherTest.cs create mode 100644 adas-core.Test/Services/CacheServiceTest.cs create mode 100644 adas-core.Test/Services/CameraServiceTest.cs create mode 100644 adas-core.Test/Services/ConfigObservationServiceTest.cs create mode 100644 adas-core.Test/Services/ConfigPumpsServiceTest.cs create mode 100644 adas-core.Test/Services/ConfigUnitsServiceTest.cs create mode 100644 adas-core.Test/Services/DiagnosisServiceTest.cs create mode 100644 adas-core.Test/Services/DischargeServiceTest.cs create mode 100644 adas-core.Test/Services/DisplayServiceTest.cs create mode 100644 adas-core.Test/Services/GroupedObservationServiceTest.cs create mode 100644 adas-core.Test/Services/HistoricalConfigChangesServiceTest.cs create mode 100644 adas-core.Test/Services/InMemoryLockProviderTest.cs create mode 100644 adas-core.Test/Services/LightBeaconServiceTest.cs create mode 100644 adas-core.Test/Services/MasterListServiceTest.cs create mode 100644 adas-core.Test/Services/MedicineServiceTest.cs create mode 100644 adas-core.Test/Services/NoCacheServiceTest.cs create mode 100644 adas-core.Test/Services/ObservationServiceTest.cs create mode 100644 adas-core.Test/Services/PatientServiceTest.cs create mode 100644 adas-core.Test/Services/PointOfCareServiceTest.cs create mode 100644 adas-core.Test/Services/PublisherServiceTest.cs create mode 100644 adas-core.Test/Services/PumpServiceTest.cs create mode 100644 adas-core.Test/Services/RecordingAlertServiceTest.cs create mode 100644 adas-core.Test/Services/RecordingServiceTest.cs create mode 100644 adas-core.Test/Services/RedisLockProviderTest.cs create mode 100644 adas-core.Test/Services/RedisServiceTest.cs create mode 100644 adas-core.Test/Services/RelayServiceTest.cs create mode 100644 adas-core.Test/Services/SchedulerServiceTest.cs create mode 100644 adas-core.Test/Services/SendAlertServiceTest.cs create mode 100644 adas-core.Test/Services/SeviceConfigServiceTest.cs create mode 100644 adas-core.Test/Services/TreatmentServiceTest.cs create mode 100644 adas-core.Test/Services/UnitServiceTest.cs create mode 100644 adas-core.Test/Usings.cs create mode 100644 adas-core.Test/Utilities/CacheKeyClassifierTest.cs create mode 100644 adas-core.Test/Utilities/TestUtilities.cs create mode 100644 adas-core.Test/adas-core.Test.csproj create mode 100644 adas-core.Test/adas-core.Test.csproj.bak create mode 100644 adas-core.module.LightBeacons/Devices/LightBeacon.cs create mode 100644 adas-core.module.LightBeacons/Devices/LightBeaconAbstract.cs create mode 100644 adas-core.module.LightBeacons/Devices/Turktbens2LightBeacon.cs create mode 100644 adas-core.module.LightBeacons/Services/LightBeaconService.cs create mode 100644 adas-core.module.LightBeacons/adas-core.module.LightBeacons.csproj create mode 100644 adas-core.module.ProxyDevices/Devices/HttpDevice.cs create mode 100644 adas-core.module.ProxyDevices/Devices/IProxyDevice.cs create mode 100644 adas-core.module.ProxyDevices/ProxyDeviceSettings.cs create mode 100644 adas-core.module.ProxyDevices/Services/IProxyDeviceService.cs create mode 100644 adas-core.module.ProxyDevices/Services/ProxyDeviceService.cs create mode 100644 adas-core.module.ProxyDevices/adas-core.module.ProxyDevices.csproj create mode 100644 adas-core.module.Relays/Devices/FakeRelay.cs create mode 100644 adas-core.module.Relays/Devices/KMTronicRelay.cs create mode 100644 adas-core.module.Relays/Devices/KMTronicV2Relay.cs create mode 100644 adas-core.module.Relays/Devices/RelayDevice.cs create mode 100644 adas-core.module.Relays/Models/PowerOutletsConfig.cs create mode 100644 adas-core.module.Relays/Models/RelaySettings.cs create mode 100644 adas-core.module.Relays/Utils/HttpUtils.cs create mode 100644 adas-core.module.Relays/adas-core.module.Relays.csproj create mode 100644 adas-core.sln create mode 100644 adas-core/.config/dotnet-tools.json create mode 100644 adas-core/.gitignore create mode 100644 adas-core/Configurations/ServiceExtension.cs create mode 100644 adas-core/Controllers/AdmissionController.cs create mode 100644 adas-core/Controllers/AlarmController.cs create mode 100644 adas-core/Controllers/ApplicationController.cs create mode 100644 adas-core/Controllers/AuditController.cs create mode 100644 adas-core/Controllers/BoxController.cs create mode 100644 adas-core/Controllers/CameraController.cs create mode 100644 adas-core/Controllers/ConfigDisplayController.cs create mode 100644 adas-core/Controllers/ConfigObservationController.cs create mode 100644 adas-core/Controllers/DeviceController.cs create mode 100644 adas-core/Controllers/DiagnosisController.cs create mode 100644 adas-core/Controllers/DischargeController.cs create mode 100644 adas-core/Controllers/DisplayController.cs create mode 100644 adas-core/Controllers/GroupedObservationsController.cs create mode 100644 adas-core/Controllers/LightBeaconController.cs create mode 100644 adas-core/Controllers/MasterListController.cs create mode 100644 adas-core/Controllers/MedicinesController.cs create mode 100644 adas-core/Controllers/NoticeController.cs create mode 100644 adas-core/Controllers/ObservationsController.cs create mode 100644 adas-core/Controllers/PatientAppointmentController.cs create mode 100644 adas-core/Controllers/PatientController.cs create mode 100644 adas-core/Controllers/PointOfCareController.cs create mode 100644 adas-core/Controllers/ProxyDeviceController.cs create mode 100644 adas-core/Controllers/PumpsController.cs create mode 100644 adas-core/Controllers/QXController.cs create mode 100644 adas-core/Controllers/RabbitController.cs create mode 100644 adas-core/Controllers/RecordingAlertController.cs create mode 100644 adas-core/Controllers/RecordingController.cs create mode 100644 adas-core/Controllers/RelayController.cs create mode 100644 adas-core/Controllers/SendAlertController.cs create mode 100644 adas-core/Controllers/SensorController.cs create mode 100644 adas-core/Controllers/ServiceConfigController.cs create mode 100644 adas-core/Controllers/TreatmentsController.cs create mode 100644 adas-core/Controllers/UnitController.cs create mode 100644 adas-core/Controllers/UserController.cs create mode 100644 adas-core/Dockerfile create mode 100644 adas-core/ErrorMiddleware/ErrorHandlerMiddleware.cs create mode 100644 adas-core/Logging/LogExecutionContext.cs create mode 100644 adas-core/Logging/LogProvider.cs create mode 100644 adas-core/Program.cs create mode 100644 adas-core/Properties/launchSettings.json create mode 100644 adas-core/WebSocket/Hubs/UciHub.cs create mode 100644 adas-core/WebSocket/WebSocketMessageService.cs create mode 100644 adas-core/adas-core.csproj create mode 100644 adas-core/appsettings.Auditoria.json create mode 100644 adas-core/appsettings.BombasBD.json create mode 100644 adas-core/appsettings.CENTRAL_PHILIPS.json create mode 100644 adas-core/appsettings.CHUO.json create mode 100644 adas-core/appsettings.Develop.json create mode 100644 adas-core/appsettings.H12O.json create mode 100644 adas-core/appsettings.HGMM.json create mode 100644 adas-core/appsettings.HPAZ.json create mode 100644 adas-core/appsettings.HPAZBastion.json create mode 100644 adas-core/appsettings.HRYCM.json create mode 100644 adas-core/appsettings.HUVH-UCIA.json create mode 100644 adas-core/appsettings.HUVH-UCIN.json create mode 100644 adas-core/appsettings.Local.json create mode 100644 adas-core/appsettings.LocalTest.json create mode 100644 adas-core/appsettings.NursePlan.json create mode 100644 adas-core/appsettings.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..3729ff0c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f0231b83 --- /dev/null +++ b/.gitignore @@ -0,0 +1,381 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +bin/ +obj/ +Debug/ +Release/ +*.tlog +packages +*.log +TestResult.xml +*.VisualState.xml +Version.cs +Version.h +Version.cpp +.vs +/adas-core/Logs + + + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd +.idea diff --git a/.teralevel-ci.yml b/.teralevel-ci.yml new file mode 100644 index 00000000..747d1d1f --- /dev/null +++ b/.teralevel-ci.yml @@ -0,0 +1,70 @@ +steps: + test: + image: mcr.microsoft.com/dotnet/sdk:8.0 + when: + event: + - push + - commit + commands: + - (dotnet nuget add source $${ADAS_NUGET_URL} -n "ADAS Nugget Server") | 2>/dev/null + - dotnet build --configuration Debug /p:Platform=x64 /nowarn:1701,1702,IL2121,CS1591,IL2121,1701,1702,CS1587,CA1416 + "adas-core/adas-core.csproj" + - dotnet test --configuration Debug /p:Platform=x64 /nowarn:1701,1702,IL2121,CS1591,IL2121,1701,1702,CS1587,CA1416 + "./adas-core.Test/adas-core.Test.csproj" + environment: + ADAS_NUGET_URL: + from_secret: ADAS_NUGET_URL + upload: + image: docker:dind + volumes: + - /var/run/docker.sock:/var/run/docker.sock + when: + event: + - push + - commit + branch: + - main + commands: + - docker login -u $${CI_REGISTRY_USER} -p $${CI_REGISTRY_PASSWORD} $${CI_REGISTRY} + - docker build -t $${CI_REGISTRY}/adas/adas-core/adas-core:latest . + - docker push $${CI_REGISTRY}/adas/adas-core/adas-core:latest + environment: + CI_REGISTRY_USER: + from_secret: CI_REGISTRY_USER + CI_REGISTRY_PASSWORD: + from_secret: CI_REGISTRY_PASSWORD + CI_REGISTRY: + from_secret: CI_REGISTRY + ADAS_HYDE_SSH_KEY: + from_secret: ADAS_HYDE_SSH_KEY + SSH_SERVER_HOSTKEYS: + from_secret: SSH_SERVER_HOSTKEYS + restart-docker-service: + image: alpine + when: + branch: + - main + commands: + - command -v ssh-agent >/dev/null || ( apk add --update openssh ) + - eval $(ssh-agent -s) + - echo "$${ADAS_HYDE_SSH_KEY}" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - echo "$${SSH_SERVER_HOSTKEYS}" >> ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts + - ssh -o "StrictHostKeyChecking no" gitlabci@10.0.20.67 -p 22 "cd /opt/smartuci;docker-compose + stop adas-core;docker-compose rm -f adas-core;docker-compose pull adas-core;docker-compose + up -d adas-core" || ssh -o "StrictHostKeyChecking no" gitlabci@red1.epigram.es + -p 1522 "cd /opt/adascore;docker-compose stop adas-core;docker-compose rm + -f adas-core;docker-compose pull adas-core;docker-compose up -d adas-core" + environment: + CI_REGISTRY_USER: + from_secret: CI_REGISTRY_USER + CI_REGISTRY_PASSWORD: + from_secret: CI_REGISTRY_PASSWORD + CI_REGISTRY: + from_secret: CI_REGISTRY + ADAS_HYDE_SSH_KEY: + from_secret: ADAS_HYDE_SSH_KEY + SSH_SERVER_HOSTKEYS: + from_secret: SSH_SERVER_HOSTKEYS diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..26556846 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +# -------------------------------------------------------------------------------------- +# 1. ETAPA DE CONSTRUCCIÓN (BUILD STAGE) +# Utiliza la imagen SDK para compilar la aplicación. +# -------------------------------------------------------------------------------------- +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +WORKDIR /src + +COPY NuGet.Config . +# Copia los archivos de proyecto (.csproj) de cada subdirectorio y restáuralos. +# Esto aprovecha el caché de Docker si solo cambian los paquetes, no el código. +COPY ["adas-core/adas-core.csproj", "adas-core/"] +COPY ["adas-core.Application/adas-core.Application.csproj", "adas-core.Application/"] +COPY ["adas-core.Authentication/adas-core.Authentication.csproj", "adas-core.Authentication/"] +COPY ["adas-core.Domain/adas-core.Domain.csproj", "adas-core.Domain/"] +COPY ["adas-core.Infrastructure/adas-core.Infrastructure.csproj", "adas-core.Infrastructure/"] +COPY ["adas-core.LdapLogin/adas-core.LdapLogin.csproj", "adas-core.LdapLogin/"] +COPY ["adas-core.LocalLogin/adas-core.LocalLogin.csproj", "adas-core.LocalLogin/"] +COPY ["adas-core.module.LightBeacons/adas-core.module.LightBeacons.csproj", "adas-core.module.LightBeacons/"] +COPY ["adas-core.module.ProxyDevices/adas-core.module.ProxyDevices.csproj", "adas-core.module.ProxyDevices/"] +COPY ["adas-core.module.Relays/adas-core.module.Relays.csproj", "adas-core.module.Relays/"] +COPY ["adas-core.Test/adas-core.Test.csproj", "adas-core.Test/"] +# ... (Añade COPY para el resto de proyectos .csproj: LdapLogin, LocalLogin, modules, Test si son dependencias) + +# Copia el archivo de solución (.sln) si existe, si no, usa el siguiente comando con los .csproj +# En este caso, asumiremos que se restaura y compila por proyecto principal. +# Si tienes un archivo de solución, es mejor copiarlo aquí. + +# Restaura las dependencias (NuGet) +RUN dotnet restore "adas-core/adas-core.csproj" + +# Copia el resto de los archivos fuente (todo el código) +COPY . . + +# Cambia al directorio del proyecto principal +WORKDIR /src/adas-core + +# Publica la aplicación final en modo Release +# El argumento -o /app/publish indica dónde se guardará el resultado de la publicación. +RUN dotnet publish "adas-core.csproj" -c Release -o /app/publish /p:UseAppHost=false + + +# -------------------------------------------------------------------------------------- +# 2. ETAPA FINAL (RUNTIME STAGE) +# Utiliza la imagen de ejecución, que es más pequeña y no contiene herramientas de compilación. +# -------------------------------------------------------------------------------------- +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final +WORKDIR /app + +# Copia los archivos publicados desde la etapa 'build' +COPY --from=build /app/publish . + +# Define el punto de entrada de la aplicación +# Este es el nombre del ensamblado DLL principal +ENTRYPOINT ["dotnet", "adas-core.dll"] +# El puerto de escucha por defecto de ASP.NET Core en Docker es el 8080 (o 80 en versiones anteriores) +ENV ASPNETCORE_URLS=http://+:80 +EXPOSE 80 \ No newline at end of file diff --git a/Documentation/IEC 62304/Capítulo 10/FT-SW-VER-001_Plantilla_casos_de_prueba_VER_C10.docx b/Documentation/IEC 62304/Capítulo 10/FT-SW-VER-001_Plantilla_casos_de_prueba_VER_C10.docx new file mode 100644 index 0000000000000000000000000000000000000000..3e7afb4612fffdf894b2ddd3f6e7274a452bb67b GIT binary patch literal 108213 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