diff --git a/src/app/components/turnos/dar-turnos/dar-turnos.component.ts b/src/app/components/turnos/dar-turnos/dar-turnos.component.ts index 505e2e2352..eb77829723 100644 --- a/src/app/components/turnos/dar-turnos/dar-turnos.component.ts +++ b/src/app/components/turnos/dar-turnos/dar-turnos.component.ts @@ -41,6 +41,7 @@ export class DarTurnosComponent implements OnInit { nroCarpetaOriginal: string; public lenNota = 140; public nota = ''; + public videoConferencia = false; public link: String = ''; public changeCarpeta = false; public financiador; @@ -581,7 +582,6 @@ export class DarTurnosComponent implements OnInit { this.plex.info('warning', 'Esta agenda ya no está disponible.'); return false; } else { - this.alternativas = []; // Se filtran los bloques segun el filtro tipoPrestacion @@ -767,8 +767,10 @@ export class DarTurnosComponent implements OnInit { this.turno.tipoPrestacion = this.opciones.tipoPrestacion; this.turnoTipoPrestacion = this.opciones.tipoPrestacion; } + this.habilitarTurnoDoble(); this.nota = this.turno.nota; + this.videoConferencia = this.turno.videoConferencia; this.buscarTurnosFuturos(); } else { this.plex.info('warning', 'Debe seleccionar un paciente'); @@ -1083,6 +1085,7 @@ export class DarTurnosComponent implements OnInit { idAgenda: this.agenda.id, estadoFacturacion: this.estadoFacturacion, emitidoPor: (this.turnoTelefonico) ? 'turno telefonico' : null, + videoConferencia: this.videoConferencia, link: this.link }; this.serviceTurno.saveDinamica(datosTurno).subscribe({ @@ -1123,6 +1126,7 @@ export class DarTurnosComponent implements OnInit { motivoConsulta: this.motivoConsulta, estadoFacturacion: this.estadoFacturacion, emitidoPor: (this.turnoTelefonico) ? 'turno telefonico' : null, + videoConferencia: this.videoConferencia, link: this.link }; diff --git a/src/app/components/turnos/dar-turnos/dar-turnos.html b/src/app/components/turnos/dar-turnos/dar-turnos.html index 6b1413cc85..3a8e3efc3c 100644 --- a/src/app/components/turnos/dar-turnos/dar-turnos.html +++ b/src/app/components/turnos/dar-turnos/dar-turnos.html @@ -8,7 +8,7 @@ @@ -16,42 +16,41 @@ + [(ngModel)]="opciones.tipoPrestacion" (getData)="loadTipoPrestaciones($event)" + label="Tipos de Prestación" (change)="filtrar()" name="tipoPrestacion"> + [(ngModel)]="_solicitudPrestacion.solicitud.tipoPrestacion" + (getData)="loadTipoPrestaciones($event)" label="Tipos de Prestación" (change)="filtrar()" + name="tipoPrestacion" [readonly]="true"> + [data]="tipoPrestacionesPermitidas" label="Tipos de Prestación" (change)="filtrar()" + name="tipoPrestacion"> + (getData)="loadProfesionales($event)" label="Equipo de Salud" + labelField="apellido + ' ' + nombre" (change)="filtrar()" name="profesional"> + [(ngModel)]="_solicitudPrestacion.solicitud.profesional" (getData)="loadProfesionales($event)" + labelField="apellido + ' ' + nombre" (change)="filtrar()" name="profesional"> + [(ngModel)]="opciones.profesional" (getData)="loadProfesionales($event)" + labelField="apellido + ' ' + nombre" (change)="filtrar()" name="profesional">
+ label="Agendas sin turnos" + title="{{mostrarNoDisponibles ? 'Ocultar agendas sin turnos' : 'Mostrar agendas sin turnos'}}" + (change)="actualizar()"> + label="Sábados y domingos" + title="{{mostrarFinesDeSemana ? 'Mostrar sábados y domingos' : 'Ocultar sábados y domingos'}}" + (change)="actualizar()">
@@ -61,10 +60,10 @@ + [estado]="estadoT" [opcionesCalendario]="!mostrarFinesDeSemana" + [mostrarNoDisponibles]="mostrarNoDisponibles" [_solicitudPrestacion]="_solicitudPrestacion" + [filtroPrestacion]="opciones.tipoPrestacion" [tipoTurno]="tipoTurno" + (agendaChanged)="seleccionarAgenda($event)"> @@ -81,8 +80,8 @@
+ titulo="{{ turno.horaInicio | date:'dd/MM/yyyy HH:mm' }}" + subtitulo="{{ turno.tipoPrestacion?.term }}">
@@ -94,21 +93,21 @@
+ subtitulo="Profesional no asignado">
+ subtitulo="{{ turno.espacioFisico?.nombre || turno.otroEspacioFisico?.nombre || 'No asignado' }}"> + subtitulo="{{ turno.organizacion?.nombre }}">
+ subtitulo="{{ turno.paciente.obraSocial.nombre }}">
@@ -117,11 +116,11 @@
+ titulo="No existen turnos futuros para este paciente">
+ titulo="Búsquedas recientes" size="sm"> @@ -134,8 +133,7 @@
+ type="primary" (click)="verAgenda('izq')" [disabled]="agendasDelDia && !agendasDelDia[indice-1]">
@@ -151,63 +149,63 @@ + size="sm" icon="account-plus" (click)="agregarSobreturno()" tooltipPosition="top" + tooltip="Agregar Sobreturno"> + subtitulo="{{agenda.tipoPrestaciones | enumerar:['term']}}"> + subtitulo="{{agenda.profesionales | enumerar:['apellido','nombre']}}"> + subtitulo="Equipo de Salud no asignado"> + subtitulo="{{agenda | espacioFisico}}"> + subtitulo="Espacio físico no asignado"> + titulo="{{ agenda.horaInicio | date: 'EEEE d/M/yyyy' }}" + subtitulo="{{agenda.horaInicio | date: 'HH:mm'}} - {{agenda.horaFin | date: 'HH:mm'}}hs"> + justify="center"> + subtitulo="{{agenda.tipoPrestaciones | enumerar:['nombre']}}"> + justify="center"> + subtitulo="{{agenda.profesionales | enumerar:['apellido','nombre']}}"> + titulo="Equipo de Salud" subtitulo="Equipo de Salud no asignado"> + justify="center"> + subtitulo="{{opciones.profesional.apellido}}, {{opciones.profesional.nombre}}">
+ class="btn-next" size="sm" type="primary" (click)="verAgenda('der')" + [disabled]="agendasDelDia && !agendasDelDia[indice+1]">
@@ -224,31 +222,32 @@ + *ngFor="let bloque of bloques"> + subtitulo="{{countBloques[findIndex(bloque)]?.delDia}}"> + subtitulo="{{countBloques[findIndex(bloque)]?.programado}}"> + subtitulo="{{countBloques[findIndex(bloque)]?.gestion}}"> + subtitulo="{{countBloques[findIndex(bloque)]?.profesional}}"> - + + [(ngModel)]='turnoDoble' name="turnoDoble"> + name="turnoTelefonico"> @@ -261,35 +260,39 @@ + class="turnos_disponibles border border-white" responsive type="full" cols="4"> + subtitulo="{{countBloques[findIndex(bloque)]?.delDia}}"> + subtitulo="{{countBloques[findIndex(bloque)]?.programado}}"> + subtitulo="{{countBloques[findIndex(bloque)]?.gestion}}"> + subtitulo="{{countBloques[findIndex(bloque)]?.profesional}}"> + *ngFor="let turno of bloque.turnos; let i=index" selectable="true" + [selected]="isActive(turno)" (click)="seleccionarTurno(bloque,i)" + [ngClass]="{'disabled' : turno.estado !== 'disponible'}"> + titulo="{{turno.horaInicio | date: 'HH:mm'}}hs"> + titulo="{{turno.horaInicio | date: 'HH:mm'}}hs" aria-label="turno no disponible">
+
+ +
@@ -301,18 +304,17 @@
No hay turnos en es + (click)="seleccionarAlternativa(i)"> + subtitulo="{{alternativa.tipoPrestaciones | enumerar:['nombre']}}" size="md"> + subtitulo="{{alternativa.profesionales | enumerar:['apellido','nombre']}}" size="md"> + subtitulo="Equipo de Salud no asignado" size="md"> @@ -321,7 +323,7 @@
No hay turnos en es + [disabled]="isButtonDisabled" size="sm"> {{agenda.cupo}} cupos disponibles @@ -332,7 +334,7 @@
No hay turnos en es
+ titulo="Solo se puede dar turno el {{ agenda.horaInicio | date: 'EEEE d/M/yyyy' }}">
@@ -344,7 +346,7 @@
No hay turnos en es + (setFinanciador)="setFinanciador($event)"> @@ -356,33 +358,33 @@
No hay turnos en es + name="obraSocialPaciente" (getData)="loadObrasSociales($event)" labelField="financiador"> + name="obraSocialPaciente.numeroAfiliado" [(ngModel)]="obraSocialPaciente.numeroAfiliado"> + [(ngModel)]="motivoConsulta"> + name="telefono"> + name="nroCarpeta" [(ngModel)]="carpetaEfector.nroCarpeta"> + + [(ngModel)]="turnoTipoPrestacion" [data]="bloque.tipoPrestaciones" + name="turnoTipoPrestacion"> + + type="success" (click)="verTurnosFuturos()" [disabled]="!bloque"> diff --git a/src/app/components/turnos/gestor-agendas/operaciones-agenda/planificar-agenda.component.ts b/src/app/components/turnos/gestor-agendas/operaciones-agenda/planificar-agenda.component.ts index ad53312b44..e68dccc63c 100644 --- a/src/app/components/turnos/gestor-agendas/operaciones-agenda/planificar-agenda.component.ts +++ b/src/app/components/turnos/gestor-agendas/operaciones-agenda/planificar-agenda.component.ts @@ -874,7 +874,8 @@ export class PlanificarAgendaComponent implements OnInit { estado: 'disponible', horaInicio: this.combinarFechas(this.fecha, new Date(bloque.horaInicio.getTime() + i * bloque.duracionTurno * 60000)), tipoTurno: undefined, - auditable: !bloque.tipoPrestaciones.some(p => !p.auditable) + auditable: !bloque.tipoPrestaciones.some(p => !p.auditable), + videoConferencia: bloque.tipoPrestaciones.some(p => p.videoConferencia === true) }; if (bloque.pacienteSimultaneos) { for (let j = 0; j < bloque.cantidadSimultaneos; j++) { @@ -955,7 +956,8 @@ export class PlanificarAgendaComponent implements OnInit { estado: 'disponible', horaInicio: b.horaInicio, tipoPrestacion: b.tipoPrestaciones[0], - tipoTurno: undefined + tipoTurno: undefined, + videoConferencia: b.tipoPrestaciones.some((p: any) => p.videoConferencia === true) }]; }); } diff --git a/src/app/interfaces/ITipoPrestacion.ts b/src/app/interfaces/ITipoPrestacion.ts index 877b2e8f6b..9a5cb13477 100644 --- a/src/app/interfaces/ITipoPrestacion.ts +++ b/src/app/interfaces/ITipoPrestacion.ts @@ -10,4 +10,5 @@ export interface ITipoPrestacion { ambito?: Array; queries?: String[]; auditable?: Boolean; + videoConferencia?: boolean; } diff --git a/src/app/interfaces/turnos/ITurno.ts b/src/app/interfaces/turnos/ITurno.ts index 180f06498f..043e815410 100644 --- a/src/app/interfaces/turnos/ITurno.ts +++ b/src/app/interfaces/turnos/ITurno.ts @@ -56,4 +56,9 @@ export interface ITurno { enum: ['pendiente', 'no enviado', 'enviado', 'fallido']; }; notificar: boolean; + videoConferencia?: boolean; + webexLinks?: { + patientLink: string; + professionalLink: string; + }; } diff --git a/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts b/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts index a9380d96ef..2efb3c6300 100644 --- a/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts +++ b/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts @@ -22,6 +22,8 @@ import { ConceptObserverService } from './../../services/conceptObserver.service import { ElementosRUPService } from './../../services/elementosRUP.service'; import { PrestacionesService } from './../../services/prestaciones.service'; import { RecetaService } from 'src/app/services/receta.service'; +import { TurnoService } from '../../../../services/turnos/turno.service'; +import { ITurno } from '../../../../interfaces/turnos/ITurno'; @Component({ selector: 'rup-prestacionEjecucion', @@ -38,6 +40,7 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy { // prestacion actual en ejecucion public prestacion: IPrestacion; + public turno: ITurno; public paciente: IPaciente; public elementoRUP: IElementoRUP; public prestacionesValidadas = []; @@ -119,7 +122,8 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy { public ps: PlantillasService, public ejecucionService: RupEjecucionService, public constantesService: ConstantesService, - public recetaService: RecetaService + public recetaService: RecetaService, + private turnoService: TurnoService, ) { } /** @@ -250,6 +254,12 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy { } } + if (this.prestacion.solicitud.turno) { + this.turnoService.get({ id: this.prestacion.solicitud.turno }).subscribe(turnos => { + this.turno = turnos?.[0]?.bloques?.[0]?.turnos?.[0]; + }); + } + this.ejecucionService.actualizar('inicializar'); }, (err) => { if (err) { @@ -274,6 +284,37 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy { }); } + onVideoConferencia() { + if (this.turno?.webexLinks?.professionalLink) { + const identificador = this.meetingId; + const link = this.turno.webexLinks.professionalLink; + const message = ` +
+ Datos de la videollamada:
+ Enlace: ${link}
+ Identificador: ${identificador} +
+
+ ¿Desea iniciar la videollamada ahora? + `; + + this.plex.confirm(message, 'Acceso a Teleconsulta').then((resultado) => { + if (resultado) { + window.open(link, '_blank'); + } + }); + } + } + + get meetingId() { + const link = this.turno?.webexLinks?.professionalLink; + if (link) { + const parts = link.split('/'); + return parts[parts.length - 1]; + } + return null; + } + cargarPrestacionAsociada() { this.servicioPrestacion.getByPaciente(this.paciente.id, false).subscribe(prestaciones => { const validadas = prestaciones.filter(p => p.estados[p.estados.length - 1].tipo === 'validada'); diff --git a/src/app/modules/rup/components/ejecucion/prestacionEjecucion.html b/src/app/modules/rup/components/ejecucion/prestacionEjecucion.html index 109d07ae73..2745772071 100644 --- a/src/app/modules/rup/components/ejecucion/prestacionEjecucion.html +++ b/src/app/modules/rup/components/ejecucion/prestacionEjecucion.html @@ -19,6 +19,12 @@ + + + + @@ -141,7 +147,8 @@ + (click)="confirmarEliminarRegistro(registro, 'card')" + [disabled]="!puedeEliminar(registro)"> @@ -308,9 +315,9 @@ - - + label="Informe de Laboratorio"> + +