@@ -6865,6 +6872,7 @@ const labDomicilio = (() => {
let _newOrderFile = null; // nuevo archivo de orden cargado desde el modal
let _convId = null;
let _pacienteId = null;
+ let _isNewPaciente = false; // true = paciente nuevo (no existe en BD aún)
let _pacNombre = '';
let _histDirs = []; // direcciones únicas previas del paciente
let _bsModal = null;
@@ -6992,6 +7000,8 @@ const labDomicilio = (() => {
if ($('labdom-pac-nombre')) $('labdom-pac-nombre').value = '';
if ($('labdom-pac-cedula')) $('labdom-pac-cedula').value = '';
if ($('labdom-pac-tipodoc')) $('labdom-pac-tipodoc').value = 'CC';
+ _isNewPaciente = false;
+ if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.add('d-none');
// Resetear tipo cliente a "particular" por defecto
const tc = document.getElementById('tc-particular');
if (tc) tc.checked = true;
@@ -7213,8 +7223,9 @@ const labDomicilio = (() => {
},
limpiarPaciente() {
- _pacienteId = null;
- _pacNombre = '';
+ _pacienteId = null;
+ _isNewPaciente = false;
+ _pacNombre = '';
$('labdom-pac-buscar').classList.remove('d-none');
$('labdom-pac-card').classList.add('d-none');
$('labdom-btn-cambiar-pac').classList.add('d-none');
@@ -7222,6 +7233,7 @@ const labDomicilio = (() => {
$('labdom-pac-contacto').classList.add('d-none');
$('labdom-hist-cont').classList.add('d-none');
$('labdom-header-pac').textContent = '';
+ if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.add('d-none');
if ($('labdom-pac-fnac')) $('labdom-pac-fnac').value = '';
if ($('labdom-pac-correo')) $('labdom-pac-correo').value = '';
if ($('labdom-pac-nombre')) $('labdom-pac-nombre').value = '';
@@ -7230,6 +7242,30 @@ const labDomicilio = (() => {
// Mantener dirección/notas para no perder lo escrito
},
+ /* Modo nuevo paciente: oculta el buscador y muestra la tarjeta vacía para registrar */
+ crearNuevo() {
+ _pacienteId = null;
+ _isNewPaciente = true;
+ _pacNombre = '';
+ _histDirs = [];
+
+ $('labdom-pac-buscar').classList.add('d-none');
+ $('labdom-pac-card').classList.remove('d-none');
+ $('labdom-btn-cambiar-pac').classList.remove('d-none');
+ $('labdom-pac-contacto').classList.add('d-none');
+ $('labdom-hist-cont').classList.add('d-none');
+ $('labdom-pac-eps-row') && ($('labdom-pac-eps-row').style.display = 'none');
+ if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.remove('d-none');
+
+ // Limpiar campos del paciente
+ if ($('labdom-pac-nombre')) { $('labdom-pac-nombre').value = ''; $('labdom-pac-nombre').focus(); }
+ if ($('labdom-pac-cedula')) $('labdom-pac-cedula').value = '';
+ if ($('labdom-pac-tipodoc')) $('labdom-pac-tipodoc').value = 'CC';
+ if ($('labdom-pac-fnac')) $('labdom-pac-fnac').value = '';
+ if ($('labdom-pac-correo')) $('labdom-pac-correo').value = '';
+ $('labdom-header-pac').textContent = 'Nuevo paciente';
+ },
+
/* Aplica una dirección histórica al formulario */
usarDireccion(idx) {
const dir = _histDirs[idx];
@@ -7291,18 +7327,70 @@ const labDomicilio = (() => {
/* ── Guardar domicilio ── */
async guardar() {
- if (!_pacienteId) {
- $('labdom-pac-busq').focus();
- $('labdom-pac-busq').classList.add('is-invalid');
- setTimeout(() => $('labdom-pac-busq').classList.remove('is-invalid'), 2000);
+ // Validar paciente
+ if (!_pacienteId && !_isNewPaciente) {
+ $('labdom-pac-busq')?.focus();
+ $('labdom-pac-busq')?.classList.add('is-invalid');
+ setTimeout(() => $('labdom-pac-busq')?.classList.remove('is-invalid'), 2000);
return;
}
+ if (_isNewPaciente) {
+ const nom = fv('labdom-pac-nombre');
+ if (!nom) {
+ $('labdom-pac-nombre').classList.add('is-invalid');
+ $('labdom-pac-nombre').focus();
+ setTimeout(() => $('labdom-pac-nombre').classList.remove('is-invalid'), 2200);
+ return;
+ }
+ }
if (!validar()) return;
const btn = $('labdom-btn-guardar');
btn.disabled = true;
btn.innerHTML = 'Guardando…';
+ // ── Crear paciente nuevo si aplica ────────────────────────────
+ if (_isNewPaciente) {
+ try {
+ const tipodoc = $('labdom-pac-tipodoc')?.value || 'CC';
+ const cedula = fv('labdom-pac-cedula');
+ const fnac = fv('labdom-pac-fnac');
+ const correo = fv('labdom-pac-correo');
+ const payload = {
+ nombre_completo: fv('labdom-pac-nombre'),
+ tipo_documento: tipodoc,
+ };
+ if (cedula) payload.numero_documento = cedula;
+ if (fnac) payload.fecha_nacimiento = fnac;
+ if (correo) payload.email = correo;
+
+ const r = await fetch('api/lab/save_paciente.php', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(payload),
+ });
+ const d = await r.json();
+ if (d.success && d.id) {
+ _pacienteId = d.id;
+ _isNewPaciente = false;
+ if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.add('d-none');
+ } else {
+ const errDiv = document.createElement('div');
+ errDiv.className = 'alert alert-danger alert-dismissible mt-2 py-2';
+ errDiv.innerHTML = `${escLab(d.error||'No se pudo registrar el paciente')}
+ `;
+ $('labdom-form-panel').prepend(errDiv);
+ btn.disabled = false;
+ btn.innerHTML = ' Agendar Domicilio';
+ return;
+ }
+ } catch (err) {
+ btn.disabled = false;
+ btn.innerHTML = ' Agendar Domicilio';
+ return;
+ }
+ }
+
const datos = {
paciente_id: _pacienteId,
fecha_programada: fv('labdom-fecha'),