Revert "feat(sat): reporte diario de errores SAT por proxy"

This reverts commit 099f34c903.
This commit is contained in:
Horux Dev
2026-08-03 14:27:53 +00:00
parent 099f34c903
commit b43c9f334a
57 changed files with 7 additions and 4554 deletions

View File

@@ -8,7 +8,6 @@ import {
verifySatRequest,
downloadSatPackage,
type FielData,
type ProxyInfo,
} from './sat-client.service.js';
import { processPackage, processMetadataPackage, extractXmlsFromZip, type CfdiParsed, type CfdiMetadata } from './sat-parser.service.js';
import { recomputarSaldoPendiente, uuidsAfectadosPorCfdi } from '../../utils/saldo.js';
@@ -92,7 +91,6 @@ function computeNextRetryAt(
interface SyncContext {
fielData: FielData;
service: Service;
proxyInfo: ProxyInfo | null;
rfc: string;
tenantId: string;
databaseName: string;
@@ -100,33 +98,6 @@ interface SyncContext {
getPool: () => Promise<Pool>;
}
/**
* Registra un error de bloqueo/devolución del SAT junto con el proxy usado.
* Permite reportes diarios de errores por IP.
*/
async function recordSatProxyError(
jobId: string,
ctx: SyncContext,
errorCode: string | null,
stage: string,
message: string,
): Promise<void> {
try {
const proxyUsed = ctx.proxyInfo ? `${ctx.proxyInfo.host}:${ctx.proxyInfo.port}` : null;
await prisma.satProxyError.create({
data: {
jobId,
proxyUsed,
errorCode,
stage,
message,
},
});
} catch (err: any) {
console.error('[SAT] Error guardando sat_proxy_error:', err.message);
}
}
/**
* Actualiza el progreso de un job
*/
@@ -146,7 +117,6 @@ async function updateJobProgress(
completedAt: Date;
retryCount: number;
nextRetryAt: Date;
proxyUsed: string | null;
}>
): Promise<void> {
await prisma.satSyncJob.update({
@@ -730,7 +700,6 @@ async function requestAndDownload(
return { packageContents: [], totalCfdis: 0 };
}
if (/error no controlado/i.test(queryResult.message || '')) {
await recordSatProxyError(jobId, ctx, queryResult.statusCode || '404', stageIdForTimeout(label), queryResult.message || 'Error no controlado');
if (isDaily) {
// En daily no detenemos el job por un 404 transitorio del SAT; se
// registra como no fatal para diagnóstico y se continúa.
@@ -740,7 +709,6 @@ async function requestAndDownload(
console.warn(`[SAT] Rechazo transitorio del SAT (${label}): ${queryResult.message} — se reintentará`);
throw new SatTransientError(stageIdForTimeout(label), queryResult.message);
}
await recordSatProxyError(jobId, ctx, queryResult.statusCode || null, stageIdForTimeout(label), queryResult.message || 'Error SAT');
throw new Error(`Error SAT (${label}): ${queryResult.message}`);
}
@@ -767,7 +735,6 @@ async function requestAndDownload(
console.log(`[SAT] Solicitudes agotadas de por vida (${label}); se cancela y se omite este rango.`);
return { packageContents: [], totalCfdis: 0 };
}
await recordSatProxyError(jobId, ctx, verifyResult.status, stageIdForTimeout(label), verifyResult.message || `Solicitud ${verifyResult.status}`);
throw new Error(`Solicitud fallida (${label}): ${verifyResult.message}`);
}
}
@@ -1556,7 +1523,7 @@ export async function startSync(
password: decryptedFiel.password,
};
const { service, proxyInfo } = createSatService(fielData);
const service = createSatService(fielData);
const tenant = await prisma.tenant.findUnique({
where: { id: tenantId },
@@ -1597,14 +1564,12 @@ export async function startSync(
dateTo: dateTo || now,
startedAt: now,
isCustomRange,
proxyUsed: proxyInfo ? `${proxyInfo.host}:${proxyInfo.port}` : null,
},
});
const ctx: SyncContext = {
fielData,
service,
proxyInfo,
rfc: decryptedFiel.rfc,
tenantId,
databaseName: tenant.databaseName,
@@ -1756,7 +1721,7 @@ export async function retryTimedOutJobs(): Promise<void> {
continue;
}
const { service, proxyInfo } = createSatService({
const service = createSatService({
cerContent: decryptedFiel.cerContent,
keyContent: decryptedFiel.keyContent,
password: decryptedFiel.password,
@@ -1769,7 +1734,6 @@ export async function retryTimedOutJobs(): Promise<void> {
password: decryptedFiel.password,
},
service,
proxyInfo,
rfc: decryptedFiel.rfc,
tenantId: job.tenantId,
databaseName: job.tenant.databaseName,
@@ -1780,7 +1744,7 @@ export async function retryTimedOutJobs(): Promise<void> {
// B: resetear startedAt al inicio de ESTE intento para que el watchdog
// mida el intento actual (y no mate un retry legítimo por el startedAt
// original del job). La política de retries se ancla a createdAt.
await updateJobProgress(job.id, { status: 'running', errorMessage: null as any, startedAt: new Date(), proxyUsed: proxyInfo ? `${proxyInfo.host}:${proxyInfo.port}` : null });
await updateJobProgress(job.id, { status: 'running', errorMessage: null as any, startedAt: new Date() });
// Para jobs daily, intentamos retomar desde la última etapa completada.
let resumeFromStage: string | undefined;
@@ -1926,7 +1890,7 @@ export async function continuePendingDailyRequests(): Promise<void> {
continue;
}
const { service, proxyInfo } = createSatService({
const service = createSatService({
cerContent: decryptedFiel.cerContent,
keyContent: decryptedFiel.keyContent,
password: decryptedFiel.password,
@@ -1939,7 +1903,6 @@ export async function continuePendingDailyRequests(): Promise<void> {
password: decryptedFiel.password,
},
service,
proxyInfo,
rfc: decryptedFiel.rfc,
tenantId: job.tenantId,
databaseName: job.tenant.databaseName,