import { Router, type IRouter } from 'express'; import { authenticate, authorize } from '../middlewares/auth.middleware.js'; import { tenantMiddleware } from '../middlewares/tenant.middleware.js'; import * as ctrl from '../controllers/contribuyente.controller.js'; import * as configCtrl from '../controllers/contribuyente-config.controller.js'; import * as obligacionesCtrl from '../controllers/obligaciones.controller.js'; const router: IRouter = Router(); router.use(authenticate); router.use(tenantMiddleware); // === Static routes FIRST (before /:id to avoid route conflict) === router.get('/', ctrl.list); router.post('/', authorize('owner', 'cfo'), ctrl.create); router.post('/backfill', authorize('owner'), ctrl.backfill); router.get('/catalogo-obligaciones', obligacionesCtrl.getCatalogo); // === Dynamic routes with :id === router.get('/:id', ctrl.getById); router.put('/:id', authorize('owner', 'cfo'), ctrl.update); router.delete('/:id', authorize('owner'), ctrl.deactivate); router.post('/:id/cliente-acceso', authorize('owner', 'supervisor'), ctrl.addClienteAcceso); // FIEL per contribuyente router.post('/:id/fiel', authorize('owner', 'cfo'), configCtrl.uploadFiel); router.get('/:id/fiel/status', configCtrl.fielStatus); router.delete('/:id/fiel', authorize('owner', 'cfo'), configCtrl.deleteFiel); // Facturapi per contribuyente router.post('/:id/facturapi/org', authorize('owner', 'cfo'), configCtrl.createOrg); router.get('/:id/facturapi/status', configCtrl.orgStatus); router.post('/:id/facturapi/csd', authorize('owner', 'cfo'), configCtrl.uploadCsd); // Obligaciones fiscales per contribuyente router.get('/:id/obligaciones/periodo', obligacionesCtrl.getObligacionesPorPeriodo); router.get('/:id/obligaciones', obligacionesCtrl.getObligaciones); router.post('/:id/obligaciones/init', authorize('owner', 'cfo'), obligacionesCtrl.initRecomendaciones); router.post('/:id/obligaciones', authorize('owner', 'cfo'), obligacionesCtrl.addObligacion); router.delete('/:id/obligaciones/:obligacionId', authorize('owner', 'cfo'), obligacionesCtrl.removeObligacion); router.post('/:id/obligaciones/:obligacionId/restore', authorize('owner', 'cfo'), obligacionesCtrl.restoreObligacion); router.post('/:id/obligaciones/:obligacionId/complete', authorize('owner', 'cfo', 'contador', 'auxiliar'), obligacionesCtrl.completeObligacion); router.post('/:id/obligaciones/:obligacionId/uncomplete', authorize('owner', 'cfo', 'contador', 'auxiliar'), obligacionesCtrl.uncompleteObligacion); router.post('/:id/obligaciones/:obligacionId/complete-periodo', authorize('owner', 'cfo', 'contador', 'auxiliar'), obligacionesCtrl.completePeriodo); router.post('/:id/obligaciones/:obligacionId/uncomplete-periodo', authorize('owner', 'cfo', 'contador', 'auxiliar'), obligacionesCtrl.uncompletePeriodo); export default router;