Registro de horas: estado de pago por partida (por pagar / pagada)
Permite separar las horas ya cobradas de las pendientes para que los totales no se
acumulen y poder emitir la nota por pagar al cliente y conservar el recibo de lo pagado.
- Modelo: RegistroHoras.estadoPago ("por_pagar" default | "pagada") + fechaPago
(se sella al marcar pagada, se limpia al revertir). Migración idempotente.
- API: PATCH /api/cotizaciones/[id]/horas/[registroId] para marcar por pagar/pagada.
- calculators: ESTADOS_PAGO_HORAS + resumenPagoHoras() que suma por separado
pendiente vs pagado.
- Panel: resumen "Por pagar" vs "Pagado" siempre visible (con IVA si aplica),
badge/toggle de estado por fila, filtro de estado (Por pagar/Pagadas/Todas) que
además define el documento: "Nota de horas por pagar", "Recibo de horas pagadas"
o "Estado de cuenta de horas".
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
8b1e420d4a
commit
d83a80c85a
@@ -0,0 +1,10 @@
|
||||
-- Estado de cobro por partida de horas: separa lo pendiente ("por_pagar") de lo ya
|
||||
-- cobrado ("pagada") para poder emitir notas por pagar y conservar recibos pagados sin
|
||||
-- que los totales se mezclen. Idempotente (IF NOT EXISTS).
|
||||
|
||||
-- AlterTable: RegistroHoras.estadoPago / fechaPago
|
||||
ALTER TABLE "RegistroHoras" ADD COLUMN IF NOT EXISTS "estadoPago" TEXT NOT NULL DEFAULT 'por_pagar';
|
||||
ALTER TABLE "RegistroHoras" ADD COLUMN IF NOT EXISTS "fechaPago" TIMESTAMP(3);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX IF NOT EXISTS "RegistroHoras_estadoPago_idx" ON "RegistroHoras"("estadoPago");
|
||||
@@ -199,6 +199,11 @@ model RegistroHoras {
|
||||
horas Float
|
||||
tarifaHora Float @default(0)
|
||||
descripcion String
|
||||
// Estado de cobro de la partida de horas: "por_pagar" (default) o "pagada".
|
||||
// Permite separar lo pendiente (nota por pagar al cliente) de lo ya cobrado
|
||||
// (recibo/historial) sin que los totales se mezclen. fechaPago = cuando se marco pagada.
|
||||
estadoPago String @default("por_pagar")
|
||||
fechaPago DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@ -206,6 +211,7 @@ model RegistroHoras {
|
||||
|
||||
@@index([cotizacionId])
|
||||
@@index([fecha])
|
||||
@@index([estadoPago])
|
||||
}
|
||||
|
||||
model Configuracion {
|
||||
|
||||
Reference in New Issue
Block a user