Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Internacion sala espera #1924

Merged
merged 22 commits into from
Oct 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
a791b0b
feat(sala-comun): alta y modificación de salas comunes
GaboCancellieri Aug 28, 2020
20c4c1d
feat(mapa-camas): adapta los filtros y el detalle para las salas
GaboCancellieri Sep 10, 2020
a6ad159
feat(mapa-camas): ingreso y egreso de pacientes en salas comunes
GaboCancellieri Sep 17, 2020
964f02f
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Sep 17, 2020
0a2253a
feat(mapa-camas): historial movientos global
liquid36 Sep 17, 2020
60b1625
feat(mapa-camas): agrega movimientos de pacientes entre salas y camas
GaboCancellieri Sep 18, 2020
c87e796
feat(mapa-camas): habilita salas ocupadas para movimientos
GaboCancellieri Sep 18, 2020
d1d3965
feat(mapa-camas): agrega boton para internar paciente
GaboCancellieri Sep 21, 2020
55c8908
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Sep 22, 2020
8146188
Merge branch 'master' of github.com:andes/app into internacion-sala-e…
liquid36 Sep 28, 2020
3aaa11b
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Sep 30, 2020
282d62d
fix(mapa-camas): detalles sala comun
liquid36 Sep 30, 2020
edf6063
feat(mapa-camas): distintivos sala comun
liquid36 Oct 1, 2020
7f814d1
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Oct 2, 2020
deeb524
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Oct 5, 2020
2af3817
fix(mapa-camas): seleccion de camas
liquid36 Oct 5, 2020
5a508cf
fix(mapa-camas): editar sala comun
liquid36 Oct 5, 2020
883c1b1
feat(mapa-camas): controles de permisos sobre sala
liquid36 Oct 5, 2020
470bc1e
feat(mapa-camas): filtros inactiva y salas
liquid36 Oct 7, 2020
bb27f8d
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Oct 7, 2020
fabe28a
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Oct 8, 2020
fbc7c7a
Merge remote-tracking branch 'origin/master' into internacion-sala-es…
liquid36 Oct 9, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/app/apps/rup/mapa-camas/interfaces/ISalaComun.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { ISnomedConcept } from '../../../../modules/rup/interfaces/snomed-concept.interface';
import { ISectores } from '../../../../interfaces/IOrganizacion';

export interface ISalaComun {
id: String;
nombre: string;
organizacion: {
id: String,
nombre: String
};
capacidad?: number;
ambito: string;
unidadOrganizativas: ISnomedConcept[];
sectores: ISectores[];
estado: string;
lastSync?: Date;
}
4 changes: 3 additions & 1 deletion src/app/apps/rup/mapa-camas/interfaces/ISnapshot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ export interface ISnapshot {
_id: String,
nombre: String
};
sala?: boolean;
extras: {
ingreso?: boolean,
egreso?: boolean,
idInternacion?: boolean
idInternacion?: String,
tipo_egreso?: String,
};
nota: String;
createdAt?: Date;
Expand Down
6 changes: 5 additions & 1 deletion src/app/apps/rup/mapa-camas/mapa-camas.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ import { RegistrosHudsDetalleComponent } from './sidebar/registros-huds-detalle/
import { ElementosRUPModule } from '../../../modules/rup/elementos-rup.module';
import { RegistroHUDSItemComponent } from './sidebar/registros-huds-detalle/registros-huds-item/registros-huds-item.component';
import { IngresoPacienteWorkflowComponent } from './sidebar/ingreso/ingreso-paciente-workflow/ingreso-paciente-workflow.component';
import { SalaComunComponent } from './views/sala-comun/sala-comun.component';
import { SalaComunService } from './views/sala-comun/sala-comun.service';
import { NgDragDropModule } from 'ng-drag-drop';
import { RUPLibModule } from '../../../modules/rup/rup-lib.module';

Expand Down Expand Up @@ -76,13 +78,15 @@ export const INTERNACION_COMPONENTS = [
NuevoRegistroSaludComponent,
RegistrosHudsDetalleComponent,
RegistroHUDSItemComponent,
IngresoPacienteWorkflowComponent
IngresoPacienteWorkflowComponent,
SalaComunComponent,
];

export const INTERNACION_PROVIDERS = [
MapaCamasService,
MaquinaEstadosHTTP,
ListadoInternacionService,
SalaComunService,
ScrollDispatcher,
];

Expand Down
5 changes: 5 additions & 0 deletions src/app/apps/rup/mapa-camas/mapa-camas.routing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { CensosDiariosComponent } from './views/censos/censo-diario/censo-diario
import { CensosMensualesComponent } from './views/censos/censo-mensual/censo-mensual.component';
import { InternacionListadoComponent } from './views/listado-internacion/listado-internacion.component';
import { InternacionListaEsperaComponent } from './views/lista-espera/lista-espera.component';
import { SalaComunComponent } from './views/sala-comun/sala-comun.component';

export const INTERNACION_ROUTES = [
{ path: 'mapa-camas', component: MapaCamasMainComponent },
Expand All @@ -25,6 +26,10 @@ export const INTERNACION_ROUTES = [

{ path: ':ambito/:capa/lista-espera', component: InternacionListaEsperaComponent },

{ path: 'sala-comun', component: SalaComunComponent },

{ path: 'sala-comun/:id', component: SalaComunComponent },

{ path: '', redirectTo: 'mapa-camas', pathMatch: 'full' }

];
Expand Down
11 changes: 10 additions & 1 deletion src/app/apps/rup/mapa-camas/services/mapa-camas.http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export type IFiltrosHistorial = any;

@Injectable({
providedIn: 'root',
})
})
export class MapaCamasHTTP {
private url = '/modules/rup/internacion';

Expand Down Expand Up @@ -40,6 +40,15 @@ export class MapaCamasHTTP {
return this.server.get(`${this.url}/camas/historial`, { params });
}

historialInternacion(ambito: string, capa: string, desde: Date, hasta: Date, idInternacion: string): Observable<ISnapshot[]> {
const params = {
ambito,
desde,
hasta
};
return this.server.get(`${this.url}/${capa}/${idInternacion}/historial`, { params });
}

get(ambito: string, capa: string, fecha: Date, idCama: string): Observable<ISnapshot> {
return this.server.get(`${this.url}/camas/${idCama}`, {
params: { ambito, capa, fecha },
Expand Down
32 changes: 21 additions & 11 deletions src/app/apps/rup/mapa-camas/services/mapa-camas.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { PrestacionesService } from '../../../../modules/rup/services/prestacion
import { MaquinaEstadosHTTP } from './maquina-estados.http';
import { PacienteService } from '../../../../core/mpi/services/paciente.service';
import { IPaciente } from '../../../../core/mpi/interfaces/IPaciente';
import { SalaComunService } from '../views/sala-comun/sala-comun.service';


@Injectable()
Expand Down Expand Up @@ -73,7 +74,8 @@ export class MapaCamasService {
private camasHTTP: MapaCamasHTTP,
private prestacionService: PrestacionesService,
private pacienteService: PacienteService,
private maquinaEstadosHTTP: MaquinaEstadosHTTP
private maquinaEstadosHTTP: MaquinaEstadosHTTP,
private salaComunService: SalaComunService,
) {
this.maquinaDeEstado$ = combineLatest(
this.ambito2,
Expand Down Expand Up @@ -235,10 +237,10 @@ export class MapaCamasService {
private getCamasDisponiblesCama(camas: ISnapshot[], cama: ISnapshot) {
let camasMismaUO = [];
let camasDistintaUO = [];
if (cama.idCama) {
if (cama.id) {
camas.map(c => {
if (c.estado === 'disponible') {
if (c.idCama !== cama.idCama) {
if (c.sala || c.estado === 'disponible') {
if (c.id !== cama.id) {
if (c.unidadOrganizativa.conceptId === cama.unidadOrganizativa.conceptId) {
camasMismaUO.push(c);
} else {
Expand Down Expand Up @@ -322,7 +324,7 @@ export class MapaCamasService {
}

if (tipoCama) {
camasFiltradas = camasFiltradas.filter((snap: ISnapshot) => snap.tipoCama.conceptId === tipoCama.conceptId);
camasFiltradas = camasFiltradas.filter((snap: ISnapshot) => (snap.tipoCama && snap.tipoCama.conceptId === tipoCama.conceptId));
}

if (estado) {
Expand Down Expand Up @@ -397,7 +399,7 @@ export class MapaCamasService {
return combineLatest(
this.ambito2,
this.capa2,
this.selectedCama.pipe(filter(snap => !!snap.idCama)),
this.selectedCama.pipe(filter(snap => !!snap.id)),
this.selectedPrestacion,
this.view
).pipe(
Expand All @@ -406,9 +408,9 @@ export class MapaCamasService {
return this.camasHTTP.historial(ambito, capa, desde, hasta, { idCama: selectedCama.idCama });
} else if (type === 'internacion') {
if (view === 'mapa-camas' && selectedCama.idInternacion) {
return this.camasHTTP.historial(ambito, capa, desde, hasta, { idInternacion: selectedCama.idInternacion, esMovimiento: true });
return this.camasHTTP.historialInternacion(ambito, capa, desde, hasta, selectedCama.idInternacion);
} else if (view === 'listado-internacion' && selectedPrestacion.id) {
return this.camasHTTP.historial(ambito, capa, desde, hasta, { idInternacion: selectedPrestacion.id, esMovimiento: true });
return this.camasHTTP.historialInternacion(ambito, capa, desde, hasta, selectedPrestacion.id);
}
return of([]);
}
Expand All @@ -421,9 +423,17 @@ export class MapaCamasService {
return this.camasHTTP.get(this.ambito, this.capa, fecha, idCama);
}

save(data, fecha, esMovimiento = true): Observable<ICama> {
data.esMovimiento = esMovimiento;
return this.camasHTTP.save(this.ambito, this.capa, fecha, data);
save(data, fecha, esMovimiento = true): Observable<any> {
if (!data.sala) {
data.esMovimiento = esMovimiento;
return this.camasHTTP.save(this.ambito, this.capa, fecha, data);
} else {
if (data.estado === 'ocupada') {
return this.salaComunService.ingresarPaciente(data, fecha);
} else {
return this.salaComunService.egresarPaciente(data, fecha);
}
}
}

changeTime(cama, fechaOriginal, nuevaFecha, idInternacion, ambito: string = null, capa: string = null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@
<plex-label titulo="Especialidades" subtitulo="{{ cama.especialidades | enumerar: ['term'] }}"
*ngIf="cama.especialidades">
</plex-label>
<plex-label titulo="Tipo de cama" subtitulo="{{ cama.tipoCama.term }}"></plex-label>
<plex-label *ngIf="cama.tipoCama" titulo="Tipo de cama" subtitulo="{{ cama.tipoCama.term }}">
</plex-label>
<plex-label titulo="Sector" subtitulo="{{ sector(cama) }}"></plex-label>
<plex-label titulo="Equipamiento" subtitulo="{{ cama.equipamiento | enumerar: ['term'] }}"
*ngIf="cama.equipamiento">
Expand Down Expand Up @@ -89,7 +90,7 @@
<app-internacion-detalle (accion)="onAccion($event)">
</app-internacion-detalle>
</plex-tab>
<plex-tab label="HISTORIAL">
<plex-tab label="HISTORIAL" *ngIf="!cama.sala">
<app-historial-detalle></app-historial-detalle>
</plex-tab>
</plex-tabs>
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<ng-container *ngIf="camasDisponibles$ | async as camasDisponibles">
<plex-select [required]="true" [(ngModel)]="nuevaCama" name="cama"
[data]="(cambiarUO) ? camasDisponibles.camasDistintaUO : camasDisponibles.camasMismaUO"
placeholder="Elija cama" label="Cama" idField="idCama"
placeholder="Elija cama" label="Cama" idField="id"
labelField="nombre + '(' + sectorName + ')'">
</plex-select>
</ng-container>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,26 +64,39 @@ export class CambiarCamaComponent implements OnInit, OnDestroy {
}

cambiarCama(camaActual, camaNueva, fecha) {
const camaDesocupada = {
_id: camaActual.idCama,
let camaDesocupada = {
_id: camaActual.id,
estado: 'disponible',
idInternacion: null,
paciente: null
paciente: null,
sala: camaActual.sala,
};
const camaOcupada = {
_id: camaNueva.idCama,

let camaOcupada = {
_id: camaNueva.id,
estado: camaActual.estado,
idInternacion: camaActual.idInternacion,
paciente: camaActual.paciente,
nota: camaActual.nota
nota: (!camaActual.sala) ? camaActual.nota : null,
sala: camaNueva.sala,
};

if (camaActual.sala) {
camaDesocupada = camaActual;
camaDesocupada.estado = 'disponible';
}

if (camaNueva.sala) {
camaOcupada = camaNueva;
camaOcupada.estado = 'ocupada';
camaOcupada.paciente = camaActual.paciente;
camaOcupada.idInternacion = camaActual.idInternacion;
}
if (this.cambiarUO) {
camaOcupada['extras'] = {
unidadOrganizativaOrigen: camaActual.unidadOrganizativa
};
}

return forkJoin(
this.mapaCamasService.save(camaOcupada, fecha),
this.mapaCamasService.save(camaDesocupada, fecha)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { IMaquinaEstados } from '../../interfaces/IMaquinaEstados';
import { IPrestacion } from '../../../../../modules/rup/interfaces/prestacion.interface';
import { combineLatest, Subscription, Observable } from 'rxjs';
import { ListadoInternacionService } from '../../views/listado-internacion/listado-internacion.service';
import { SalaComunService } from '../../views/sala-comun/sala-comun.service';

@Component({
selector: 'app-egresar-paciente',
Expand Down Expand Up @@ -166,7 +167,7 @@ export class EgresarPacienteComponent implements OnInit, OnDestroy {
});
}
}
if (cama.idCama) {
if (cama.id) {
this.cama = cama;
this.fechaMin = moment(this.cama.fecha).add(1, 'm').toDate();
this.fecha = fecha;
Expand Down Expand Up @@ -209,18 +210,29 @@ export class EgresarPacienteComponent implements OnInit, OnDestroy {

egresoSimplificado(estado) {
if ((this.prestacion && !this.prestacion.ejecucion.registros[1]) || !this.prestacion) {
const estadoPatch = {
_id: this.cama.idCama,
estado: estado,
idInternacion: null,
paciente: null,
extras: {
let estadoPatch = {};
if (!this.cama.sala) {
estadoPatch = {
_id: this.cama.id,
estado: estado,
idInternacion: null,
paciente: null,
nota: null,
extras: {
egreso: true,
idInternacion: this.cama.idInternacion,
tipo_egreso: this.registro.valor.InformeEgreso.tipoEgreso.id
}
};
} else {
this.cama.estado = estado;
this.cama.extras = {
egreso: true,
idInternacion: this.cama.idInternacion,
tipo_egreso: this.registro.valor.InformeEgreso.tipoEgreso.id
},
nota: null,
};
};
estadoPatch = this.cama;
}

this.mapaCamasService.save(estadoPatch, this.registro.valor.InformeEgreso.fechaEgreso).subscribe(camaActualizada => {
this.plex.toast('success', 'Prestacion guardada correctamente', 'Prestacion guardada', 100);
Expand All @@ -232,7 +244,7 @@ export class EgresarPacienteComponent implements OnInit, OnDestroy {
}
this.onSave.emit();
}, (err1) => {
this.plex.info('danger', err1, 'Error al intentar desocupar la cama');
this.plex.info('danger', err1, 'Error al egresar paciente!');
});
}
}
Expand Down Expand Up @@ -491,7 +503,7 @@ export class EgresarPacienteComponent implements OnInit, OnDestroy {
// La cama este disponible en la fecha que la quiero usar,

checkEstadoCama() {
this.mapaCamasService.get(this.fecha, this.cama.idCama).subscribe((cama) => {
this.mapaCamasService.get(this.fecha, this.cama.id).subscribe((cama) => {
if (cama && cama.estado !== 'disponible') {
if (!cama.idInternacion || (cama.idInternacion && cama.idInternacion !== this.prestacion.id)) {
this.registro.valor.InformeEgreso.fechaEgreso = this.fechaEgresoOriginal;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<plex-title justify titulo="ESTADO">
<plex-title justify titulo="ESTADO CAMAS">
<ng-container *ngIf="fechaActual$ | async as fechaActual">
<ng-container *ngIf="fecha$ | async as fecha">
<plex-badge type="info" size="sm">{{fecha | date: 'dd/MM/yyyy'}} | {{fecha | date: 'HH:mm'}}
Expand All @@ -16,12 +16,27 @@
</plex-title>
<ng-container>
<div class="container-resumen">
<app-icono-camita icono="adi adi-cama" class="subcontainer-resumen total" nombre="Totales" [cantidad]="total">
<app-icono-camita icono="adi adi-cama" class="subcontainer-resumen total" nombre="Camas Totales"
[cantidad]="total">
</app-icono-camita>
<ng-container *ngFor="let estado of mapaCamasService.estado$ | async">
<app-icono-camita [icono]="estado.icon" [nombre]="estado.label + 's'" [color]="estado.color"
<app-icono-camita *ngIf="estado.key !== 'inactiva'" [icono]="estado.icon"
[nombre]="'Camas ' + estado.label + 's'" [color]="estado.color"
[cantidad]="camasXEstado[estado.key] ? camasXEstado[estado.key].length : 0">
</app-icono-camita>
</ng-container>
</div>
</ng-container>
<ng-container *ngIf="salas$ | async as salas">
<plex-title justify titulo="ESTADO SALAS" *ngIf="salas.length > 0"></plex-title>
<ng-container *ngIf="salas.length > 0">
<div class="container-resumen">
<app-icono-camita icono="adi adi-cama" class="subcontainer-resumen total" nombre="Salas Totales"
[cantidad]="salas.length">
</app-icono-camita>
<app-icono-camita icono="adi adi-cama" class="subcontainer-resumen total" nombre="Pacientes Totales"
color="warning" [cantidad]="(salasPaciente$ | async).length">
</app-icono-camita>
</div>
</ng-container>
</ng-container>
Loading