feat: asignaciones obligaciones/tareas + fixes backend

- Migracion 046: tablas obligacion_asignaciones y tarea_asignaciones
- Servicio y controller de asignaciones (CRUD + listados)
- Fix: enviar correo welcome al invitar usuario nuevo
- Fix: quitar JOIN users de queries tenant (usar Prisma en BD central)
- Fix: req.params.obligacionId correcto en asignaciones controller
- Fix: orden rutas estaticas antes de dinamicas en cartera.routes
- Fix: owner/cfo ven todas las asignaciones en getAsignacionesPorSupervisor
- Fix: validar que entidad pertenezca a cartera padre en subcartera
- Nuevo endpoint GET /carteras/asignaciones/sin-asignar
- Nuevo endpoint GET /tareas/mis-tareas
This commit is contained in:
Horux Dev
2026-05-23 23:40:12 +00:00
parent 0c7580aa44
commit f43cb165c6
11 changed files with 596 additions and 14 deletions

View File

@@ -138,6 +138,8 @@ export interface ObligacionContribuyente {
completadaPor: string | null;
periodoCompletado: string | null;
createdAt?: string;
auxiliarAsignadoId?: string | null;
auxiliarAsignadoNombre?: string | null;
}
export function getCatalogo(): ObligacionFiscal[] {
@@ -146,15 +148,18 @@ export function getCatalogo(): ObligacionFiscal[] {
export async function getObligaciones(pool: Pool, contribuyenteId: string): Promise<ObligacionContribuyente[]> {
const { rows } = await pool.query(`
SELECT id, contribuyente_id AS "contribuyenteId", catalogo_id AS "catalogoId",
nombre, fundamento, frecuencia, fecha_limite AS "fechaLimite", categoria,
activa, es_recomendada AS "esRecomendada", es_custom AS "esCustom",
completada, completada_at AS "completadaAt", completada_por AS "completadaPor",
periodo_completado AS "periodoCompletado",
created_at AS "createdAt"
FROM obligaciones_contribuyente
WHERE contribuyente_id = $1
ORDER BY categoria, nombre
SELECT
oc.id, oc.contribuyente_id AS "contribuyenteId", oc.catalogo_id AS "catalogoId",
oc.nombre, oc.fundamento, oc.frecuencia, oc.fecha_limite AS "fechaLimite", oc.categoria,
oc.activa, oc.es_recomendada AS "esRecomendada", oc.es_custom AS "esCustom",
oc.completada, oc.completada_at AS "completadaAt", oc.completada_por AS "completadaPor",
oc.periodo_completado AS "periodoCompletado",
oc.created_at AS "createdAt",
oa.auxiliar_user_id AS "auxiliarAsignadoId"
FROM obligaciones_contribuyente oc
LEFT JOIN obligacion_asignaciones oa ON oa.obligacion_id = oc.id
WHERE oc.contribuyente_id = $1
ORDER BY oc.categoria, oc.nombre
`, [contribuyenteId]);
return rows;
}