[TS-FIX] fix: Fix TS7030 errors in finance controllers

- Add Promise<void> return type to async handlers with conditional returns
- Change 'return res.status()' to 'res.status(); return;' pattern
- Fixed controllers: ap, ar, bank-reconciliation, cash-flow, reports, accounting

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Adrian Flores Cortes 2026-01-25 14:21:33 -06:00
parent 5775585a98
commit 369f461695
3 changed files with 45 additions and 30 deletions

View File

@ -319,7 +319,7 @@ export function createBankReconciliationController(dataSource: DataSource): Rout
* GET /reconciliations/:id
* Obtiene una conciliación por ID
*/
router.get('/reconciliations/:id', async (req: Request, res: Response) => {
router.get('/reconciliations/:id', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -328,7 +328,8 @@ export function createBankReconciliationController(dataSource: DataSource): Rout
const reconciliation = await service.findReconciliationById(ctx, req.params.id);
if (!reconciliation) {
return res.status(404).json({ error: 'Conciliación no encontrada' });
res.status(404).json({ error: 'Conciliación no encontrada' });
return;
}
res.json(reconciliation);
@ -377,7 +378,7 @@ export function createBankReconciliationController(dataSource: DataSource): Rout
* POST /reconciliations/:id/reconcile-movement
* Concilia un movimiento
*/
router.post('/reconciliations/:id/reconcile-movement', async (req: Request, res: Response) => {
router.post('/reconciliations/:id/reconcile-movement', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -386,7 +387,8 @@ export function createBankReconciliationController(dataSource: DataSource): Rout
const { movementId } = req.body;
if (!movementId) {
return res.status(400).json({ error: 'Se requiere ID del movimiento' });
res.status(400).json({ error: 'Se requiere ID del movimiento' });
return;
}
const reconciliation = await service.reconcileMovement(ctx, req.params.id, movementId);

View File

@ -67,7 +67,7 @@ export function createCashFlowController(dataSource: DataSource): Router {
* GET /summary
* Obtiene resumen de flujo de efectivo
*/
router.get('/summary', async (req: Request, res: Response) => {
router.get('/summary', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -78,7 +78,8 @@ export function createCashFlowController(dataSource: DataSource): Router {
const endDate = new Date(req.query.endDate as string);
if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const options = {
@ -121,7 +122,7 @@ export function createCashFlowController(dataSource: DataSource): Router {
* GET /:id
* Obtiene una proyección por ID
*/
router.get('/:id', async (req: Request, res: Response) => {
router.get('/:id', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -130,7 +131,8 @@ export function createCashFlowController(dataSource: DataSource): Router {
const projection = await service.findById(ctx, req.params.id);
if (!projection) {
return res.status(404).json({ error: 'Proyección no encontrada' });
res.status(404).json({ error: 'Proyección no encontrada' });
return;
}
res.json(projection);
@ -217,7 +219,7 @@ export function createCashFlowController(dataSource: DataSource): Router {
* POST /generate
* Genera proyección automática para un periodo
*/
router.post('/generate', async (req: Request, res: Response) => {
router.post('/generate', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -227,7 +229,8 @@ export function createCashFlowController(dataSource: DataSource): Router {
const { periodStart, periodEnd, periodType, projectId, projectCode } = req.body;
if (!periodStart || !periodEnd) {
return res.status(400).json({ error: 'Se requieren fechas de inicio y fin' });
res.status(400).json({ error: 'Se requieren fechas de inicio y fin' });
return;
}
const projection = await service.generateProjection(
@ -247,7 +250,7 @@ export function createCashFlowController(dataSource: DataSource): Router {
* POST /generate-multiple
* Genera múltiples proyecciones (ej: 4 semanas)
*/
router.post('/generate-multiple', async (req: Request, res: Response) => {
router.post('/generate-multiple', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -257,7 +260,8 @@ export function createCashFlowController(dataSource: DataSource): Router {
const { startDate, weeks, projectId, projectCode } = req.body;
if (!startDate || !weeks) {
return res.status(400).json({ error: 'Se requiere fecha de inicio y número de semanas' });
res.status(400).json({ error: 'Se requiere fecha de inicio y número de semanas' });
return;
}
const projections = await service.generateMultiplePeriods(

View File

@ -47,7 +47,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /income-statement
* Genera estado de resultados
*/
router.get('/income-statement', async (req: Request, res: Response) => {
router.get('/income-statement', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -58,7 +58,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const options = {
@ -81,7 +82,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /cash-flow-statement
* Genera estado de flujo de efectivo
*/
router.get('/cash-flow-statement', async (req: Request, res: Response) => {
router.get('/cash-flow-statement', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -92,7 +93,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const options = {
@ -115,7 +117,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /trial-balance
* Genera balanza de comprobación
*/
router.get('/trial-balance', async (req: Request, res: Response) => {
router.get('/trial-balance', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -126,7 +128,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const options = {
@ -150,7 +153,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /account-statement/:accountId
* Genera estado de cuenta
*/
router.get('/account-statement/:accountId', async (req: Request, res: Response) => {
router.get('/account-statement/:accountId', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -161,7 +164,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const report = await reportsService.generateAccountStatement(
@ -200,7 +204,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /export/sap
* Exporta pólizas para SAP
*/
router.get('/export/sap', async (req: Request, res: Response) => {
router.get('/export/sap', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -211,7 +215,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const options = {
@ -236,7 +241,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /export/contpaqi
* Exporta pólizas para CONTPAQi
*/
router.get('/export/contpaqi', async (req: Request, res: Response) => {
router.get('/export/contpaqi', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -247,7 +252,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const options = {
@ -276,7 +282,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /export/cfdi-polizas
* Exporta pólizas en formato CFDI
*/
router.get('/export/cfdi-polizas', async (req: Request, res: Response) => {
router.get('/export/cfdi-polizas', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -287,7 +293,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const options = {
@ -344,7 +351,7 @@ export function createReportsController(dataSource: DataSource): Router {
* GET /export/trial-balance
* Exporta balanza de comprobación
*/
router.get('/export/trial-balance', async (req: Request, res: Response) => {
router.get('/export/trial-balance', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -355,7 +362,8 @@ export function createReportsController(dataSource: DataSource): Router {
const periodEnd = new Date(req.query.periodEnd as string);
if (isNaN(periodStart.getTime()) || isNaN(periodEnd.getTime())) {
return res.status(400).json({ error: 'Fechas inválidas' });
res.status(400).json({ error: 'Fechas inválidas' });
return;
}
const format = (req.query.format as 'csv' | 'xml' | 'json') || 'csv';
@ -387,7 +395,7 @@ export function createReportsController(dataSource: DataSource): Router {
* POST /import/chart-of-accounts
* Importa catálogo de cuentas
*/
router.post('/import/chart-of-accounts', async (req: Request, res: Response) => {
router.post('/import/chart-of-accounts', async (req: Request, res: Response): Promise<void> => {
try {
const ctx = {
tenantId: req.headers['x-tenant-id'] as string,
@ -396,7 +404,8 @@ export function createReportsController(dataSource: DataSource): Router {
const { data, format } = req.body;
if (!data || !format) {
return res.status(400).json({ error: 'Se requieren datos y formato' });
res.status(400).json({ error: 'Se requieren datos y formato' });
return;
}
const result = await integrationService.importChartOfAccounts(ctx, data, format);