feat: SAT sync improvements and documentation
- Add custom date range support for SAT synchronization - Fix UUID cast in SQL queries for sat_sync_job_id - Fix processInitialSync to respect custom dateFrom/dateTo parameters - Add date picker UI for custom period sync - Add comprehensive documentation for SAT sync implementation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -96,7 +96,7 @@ async function saveCfdis(
|
||||
estado = $22,
|
||||
xml_original = $23,
|
||||
last_sat_sync = NOW(),
|
||||
sat_sync_job_id = $24,
|
||||
sat_sync_job_id = $24::uuid,
|
||||
updated_at = NOW()
|
||||
WHERE uuid_fiscal = $1`,
|
||||
cfdi.uuidFiscal,
|
||||
@@ -137,7 +137,7 @@ async function saveCfdis(
|
||||
) VALUES (
|
||||
gen_random_uuid(), $1, $2, $3, $4, $5, $6, $7, $8, $9, $10,
|
||||
$11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22,
|
||||
$23, 'sat', $24, NOW(), NOW()
|
||||
$23, 'sat', $24::uuid, NOW(), NOW()
|
||||
)`,
|
||||
cfdi.uuidFiscal,
|
||||
cfdi.tipo,
|
||||
@@ -278,11 +278,18 @@ async function processDateRange(
|
||||
}
|
||||
|
||||
/**
|
||||
* Ejecuta sincronización inicial (últimos 10 años)
|
||||
* Ejecuta sincronización inicial o por rango personalizado
|
||||
*/
|
||||
async function processInitialSync(ctx: SyncContext, jobId: string): Promise<void> {
|
||||
async function processInitialSync(
|
||||
ctx: SyncContext,
|
||||
jobId: string,
|
||||
customDateFrom?: Date,
|
||||
customDateTo?: Date
|
||||
): Promise<void> {
|
||||
const ahora = new Date();
|
||||
const inicioHistorico = new Date(ahora.getFullYear() - YEARS_TO_SYNC, ahora.getMonth(), 1);
|
||||
// Usar fechas personalizadas si se proporcionan, sino calcular desde YEARS_TO_SYNC
|
||||
const inicioHistorico = customDateFrom || new Date(ahora.getFullYear() - YEARS_TO_SYNC, ahora.getMonth(), 1);
|
||||
const fechaFin = customDateTo || ahora;
|
||||
|
||||
let totalFound = 0;
|
||||
let totalDownloaded = 0;
|
||||
@@ -292,9 +299,9 @@ async function processInitialSync(ctx: SyncContext, jobId: string): Promise<void
|
||||
// Procesar por meses para evitar límites del SAT
|
||||
let currentDate = new Date(inicioHistorico);
|
||||
|
||||
while (currentDate < ahora) {
|
||||
while (currentDate < fechaFin) {
|
||||
const monthEnd = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0, 23, 59, 59);
|
||||
const rangeEnd = monthEnd > ahora ? ahora : monthEnd;
|
||||
const rangeEnd = monthEnd > fechaFin ? fechaFin : monthEnd;
|
||||
|
||||
// Procesar emitidos
|
||||
try {
|
||||
@@ -446,7 +453,7 @@ export async function startSync(
|
||||
(async () => {
|
||||
try {
|
||||
if (type === 'initial') {
|
||||
await processInitialSync(ctx, job.id);
|
||||
await processInitialSync(ctx, job.id, dateFrom, dateTo);
|
||||
} else {
|
||||
await processDailySync(ctx, job.id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user