Pacientes: estado de cuenta imprimible

- Botón en la ficha del paciente con vista de impresión: resumen
  (gastado, saldo pendiente marcado, monedero), detalle de ventas
  con pendientes resaltados, movimientos de monedero y cronología
This commit is contained in:
2026-08-14 06:53:12 +00:00
parent 953cdf1108
commit c16017e3cf
2 changed files with 302 additions and 4 deletions

View File

@@ -7,6 +7,7 @@ import {
} from 'lucide-react';
import Layout from '../components/Layout';
import PatientAdjuntos from '../components/PatientAdjuntos';
import EstadoCuentaPrint from '../components/EstadoCuentaPrint';
import {
Card,
Button,
@@ -124,6 +125,7 @@ const Pacientes: FC = () => {
const [total, setTotal] = useState(0);
const [totalPages, setTotalPages] = useState(0);
const [selected, setSelected] = useState<Patient | null>(null);
const [estadoCuentaOpen, setEstadoCuentaOpen] = useState(false);
const [history, setHistory] = useState<{ appointments: Appointment[]; sales: Sale[]; visitas: Visita[]; estado_cuenta?: EstadoCuenta } | null>(null);
const [historyLoading, setHistoryLoading] = useState(false);
const [tab, setTab] = useState<'info' | 'clinical' | 'timeline' | 'docs'>('info');
@@ -764,10 +766,16 @@ const Pacientes: FC = () => {
title={selected?.name || 'Detalle del paciente'}
maxWidth="2xl"
footer={
<Button variant="outline" onClick={() => selected && openEdit(selected)}>
<Edit2 size={16} className="mr-2" />
Editar paciente
</Button>
<div className="flex items-center gap-2">
<Button variant="outline" onClick={() => setEstadoCuentaOpen(true)}>
<FileText size={16} className="mr-2" />
Estado de cuenta
</Button>
<Button variant="outline" onClick={() => selected && openEdit(selected)}>
<Edit2 size={16} className="mr-2" />
Editar paciente
</Button>
</div>
}
>
<div className="space-y-4">
@@ -1177,6 +1185,13 @@ const Pacientes: FC = () => {
</div>
)}
</Modal>
{/* Vista de impresión del estado de cuenta */}
<EstadoCuentaPrint
isOpen={estadoCuentaOpen}
onClose={() => setEstadoCuentaOpen(false)}
paciente={selected}
/>
</Layout>
);
};