diff --git a/src/app/core/mpi/components/datos-basicos.component.ts b/src/app/core/mpi/components/datos-basicos.component.ts index e4f09021de..4f9d61be71 100644 --- a/src/app/core/mpi/components/datos-basicos.component.ts +++ b/src/app/core/mpi/components/datos-basicos.component.ts @@ -12,6 +12,14 @@ import { IPaciente } from '../interfaces/IPaciente'; import { PacienteService } from '../services/paciente.service'; import { ConstantesService } from 'src/app/services/constantes.service'; import { Auth } from 'projects/auth/src/lib/auth.service'; +import { OrganizacionService } from '../../../services/organizacion.service'; +import { PaisService } from '../../../services/pais.service'; +import { ProvinciaService } from '../../../services/provincia.service'; +import { LocalidadService } from '../../../services/localidad.service'; +import { IProvincia } from '../../../interfaces/IProvincia'; +import { ILocalidad } from '../../../interfaces/ILocalidad'; +import { IPais } from 'src/app/interfaces/IPais'; +import { cache } from '@andes/shared'; @Component({ selector: 'datos-basicos', templateUrl: 'datos-basicos.html', @@ -47,6 +55,15 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit, public patronCUIL = /^\d{11}$/; public reportarError = false; public hoy: Date = new Date(); + public paisesNacimiento$: Observable; + public provinciasNacimiento$: Observable; + public localidadesNacimiento$: Observable; + public paisActual: IPais[] = null; + public provinciaActual = null; + public localidadActual = null; + public nacioLocActual = false; + public nacioProvActual = false; + public nacioPaisActual = false; // para registro de bebes busquedaTutor: IPacienteMatch[] | IPaciente[] = []; @@ -87,6 +104,10 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit, private pacienteService: PacienteService, private parentescoService: ParentescoService, private constantesService: ConstantesService, + private organizacionService: OrganizacionService, + private paisService: PaisService, + private provinciaService: ProvinciaService, + private localidadService: LocalidadService, private auth: Auth ) { @@ -158,6 +179,8 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit, this.generos = this.constantesService.search({ source: 'mpi:genero' }).pipe( map(res => res.map(g => ({ id: g.key, nombre: g.nombre }))) ); + this.loadPaisesNacimiento(); + this.loadContextoLugarNacimiento(); this.estadosCiviles = enumerados.getObjEstadoCivil(); this.estados = enumerados.getEstados(); this.parentescoService.get().subscribe(resultado => { @@ -247,6 +270,138 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit, this.paciente.reportarError = true; this.changes.emit({ pacienteError: this.pacienteEditado }); } + + // -------------------- LUGAR NACIMIENTO ------------------- + + private loadContextoLugarNacimiento() { + this.organizacionService.getById(this.auth.organizacion.id).pipe( + cache() + ).subscribe(org => { + this.provinciaActual = org?.direccion?.ubicacion?.provincia; + this.localidadActual = org?.direccion?.ubicacion?.localidad; + this.updateLugarNacimientoActual(); + }); + + this.paisService.get({ nombre: 'Argentina' }).pipe( + cache() + ).subscribe(pais => { + this.paisActual = pais; + this.updateLugarNacimientoActual(); + }); + } + + private updateLugarNacimientoActual() { + const lugarNacimiento = this.paciente?.lugarNacimiento; + if (!lugarNacimiento || !this.paisActual?.[0] || !this.provinciaActual) { + return; + } + + this.nacioPaisActual = lugarNacimiento.pais?.id === this.paisActual[0].id; + this.nacioProvActual = lugarNacimiento.provincia?.id === this.provinciaActual.id; + this.nacioLocActual = lugarNacimiento.localidad?.id === this.localidadActual?.id; + + if (this.nacioPaisActual) { + this.loadProvinciaNacimiento(); + } + + if (this.nacioPaisActual && this.nacioProvActual && lugarNacimiento.provincia?.id) { + this.loadLocalidadesNacimiento(lugarNacimiento.provincia, false); + } + } + + loadPaisesNacimiento() { + this.paisesNacimiento$ = this.paisService.get({}).pipe( + cache() + ); + } + + loadProvinciaNacimiento() { + this.provinciasNacimiento$ = this.provinciaService.get({}).pipe( + cache() + ); + } + + loadLocalidadesNacimiento(provincia, resetLocalidad = true) { + if (resetLocalidad) { + this.paciente.lugarNacimiento.localidad = null; + } + + if (provincia && provincia.id) { + this.nacioProvActual = (provincia.id === this.provinciaActual?.id); + this.localidadesNacimiento$ = this.localidadService.getXProvincia(provincia.id).pipe( + cache() + ); + } else { + this.localidadesNacimiento$ = null; + this.nacioLocActual = false; + this.paciente.lugarNacimiento.provincia = null; + this.paciente.lugarNacimiento.localidad = null; + } + } + + updateNacioLocalidadActual() { + const localidad = this.paciente.lugarNacimiento.localidad; + this.paciente.lugarNacimiento.lugar = null; + if (localidad && localidad.id) { + this.nacioLocActual = (localidad.id === this.localidadActual?.id); + } + } + + loadPaisActualNacimiento() { + const pais = this.paciente.lugarNacimiento.pais; + if (pais && pais.id) { + this.nacioPaisActual = (pais.id === this.paisActual?.[0]?.id); + if (this.nacioPaisActual) { + this.loadProvinciaNacimiento(); + this.paciente.lugarNacimiento.lugar = null; + } + } + this.paciente.lugarNacimiento.provincia = null; + this.paciente.lugarNacimiento.localidad = null; + this.localidadesNacimiento$ = null; + this.nacioLocActual = false; + this.nacioProvActual = false; + } + + changePaisActualNacimiento() { + if (this.nacioPaisActual) { + this.loadProvinciaNacimiento(); + this.paciente.lugarNacimiento.pais = this.paisActual?.[0] || null; + this.paciente.lugarNacimiento.lugar = null; + } else { + this.paciente.lugarNacimiento.pais = null; + this.paciente.lugarNacimiento.provincia = null; + this.paciente.lugarNacimiento.localidad = null; + } + this.localidadesNacimiento$ = null; + this.nacioLocActual = false; + this.nacioProvActual = false; + } + + changeProvActualNacimiento() { + if (this.nacioProvActual) { + this.paciente.lugarNacimiento.provincia = this.provinciaActual; + this.loadLocalidadesNacimiento(this.provinciaActual); + } else { + this.loadProvinciaNacimiento(); + this.nacioLocActual = false; + this.localidadesNacimiento$ = null; + this.paciente.lugarNacimiento.provincia = null; + this.paciente.lugarNacimiento.localidad = null; + } + } + + changeLocalidadActualNacimiento() { + if (this.nacioLocActual) { + this.paciente.lugarNacimiento.localidad = this.localidadActual; + this.paciente.lugarNacimiento.lugar = null; + } else { + this.paciente.lugarNacimiento.localidad = null; + this.paciente.lugarNacimiento.lugar = null; + this.loadLocalidadesNacimiento(this.paciente.lugarNacimiento.provincia); + } + } + // -------------- PARA REGISTRO DE BEBES ----------------- onSearchStart() { diff --git a/src/app/core/mpi/components/datos-basicos.html b/src/app/core/mpi/components/datos-basicos.html index 2f1501879c..4dd93a223b 100644 --- a/src/app/core/mpi/components/datos-basicos.html +++ b/src/app/core/mpi/components/datos-basicos.html @@ -3,37 +3,36 @@
+ type="slide" (change)="registrarArgentino()" name="registroDNI" + [readonly]="disableRegistro || paciente.estado === 'validado'">
+ [disabled]="botonRegistroDNI" required="true" (change)="completaExtranjero()"> + [disabled]="botonRegistroDNI" required="true" (change)="completaExtranjero()"> + required="true" [disabled]="botonRegistroDNI" placeholder="Seleccione..." + (change)="completaExtranjero();mapeoGenero()"> + [(ngModel)]="pacienteExtranjero.fechaNacimiento" name="fechaNacimiento" required="true" grow="3" + [disabled]="botonRegistroDNI" (change)="completaExtranjero()"> + [data]="tipoIdentificacion" name="tipoIdentificacion" placeholder="Seleccione..." grow="3" + [disabled]="botonRegistroDNI" (change)="completaExtranjero()"> + name="numeroIdentificacion" grow="3" [disabled]="botonRegistroDNI" (change)="completaExtranjero()">
@@ -46,20 +45,20 @@ + grow="4"> + [required]="true" grow="4"> + [required]="true" placeholder="Seleccione..." grow="4" (change)="mapeoGenero()"> + [readonly]="paciente.estado === 'validado'" [(ngModel)]="paciente.fechaNacimiento" + name="fechaNacimientoBebe" [required]="true" grow="4"> @@ -74,11 +73,11 @@
+ (searchClear)="onSearchClear()"> + (selected)="onPacienteSelected($event)" [showRelaciones]="false">
No se encontró ningún paciente.. @@ -88,35 +87,34 @@ + name="documentoRelacion" [readonly]="true"> + [(ngModel)]="relacionBebe.numeroIdentificacion" name="numeroIdentificacionRelacion" + [readonly]="true"> + [readonly]="true"> + [readonly]="true"> + name="sexoRelacion" type="horizontal" [readonly]="true" grow="3"> + [(ngModel)]="relacionBebe.fechaNacimiento" name="fechaNacimientoRelacion" grow="3"> + [data]="parentescoModel" [required]="true" placeholder="Seleccione..." grow="3"> @@ -135,30 +133,30 @@ + [readonly]="validado || noPoseeDNI" [pattern]="patronDocumento" name="documento" + [required]="true" (change)="checkDisableValidar()" grow="3"> + required="true" placeholder="Seleccione..." [readonly]="validado" + (change)="mapeoGenero(); checkDisableValidar()" grow="3"> + [(ngModel)]="paciente.fechaNacimiento" name="fechaNacimiento" [required]="!noPoseeDNI" + grow="3"> + [readonly]="true"> + [readonly]="true"> + label="Seleccione estado Civil">
@@ -167,39 +165,38 @@
+ name="noPoseDNI" (change)="limpiarDocumento()"> + [readonly]=" validado || noPoseeDNI " [pattern]="patronDocumento" name="documento" + [required]="!noPoseeDNI" (change)="checkDisableValidar()" grow="4"> + required="true" placeholder="Seleccione..." [readonly]="validado" + (change)="mapeoGenero();checkDisableValidar()" grow="4"> + [pattern]="patronCUIL" grow="4" [required]="false"> + [(ngModel)]="paciente.fechaNacimiento" name="fechaNacimiento" [required]="!noPoseeDNI" grow="4"> + [readonly]="validado"> + [readonly]="validado"> + label="Seleccione estado Civil">
@@ -213,18 +210,57 @@ + [pattern]="nombrePattern" (change)="completaExtranjero()"> + [data]="generos|async" (change)="completaExtranjero()" name="genero" + [required]="requiereGenero"> + + + + + + + + + + + + + + + + + + + + + + + + + (change)="onFallecidoChange()">
@@ -232,14 +268,14 @@ + name="fechaFallecimientoTemporal" [required]="pacienteFallecido" [max]="hoy" + [min]="paciente?.fechaNacimiento" type="date"> + (click)="guardarFallecimiento()" + [disabled]="!fechaFallecimientoTemporal || fechaFallecimientoTemporal > hoy" tooltip="Guardar" + titlePosition="top">
@@ -249,18 +285,17 @@ + label="Los datos validados con RENAPER tienen un error y quiero reportarlo" (change)="registrarError()">
+ [required]="true" [debounce]="500" + (change)="verificarNombreApellido({apellido: pacienteEditado.apellido})"> + [required]="true" [debounce]="500" + (change)="verificarNombreApellido({nombre: pacienteEditado.nombre})">
- - - - - - - - - - - - - - - - - - - - - - - @@ -159,4 +117,4 @@
- \ No newline at end of file +