import { prisma } from '../src/config/database.js'; /** * Activa manualmente una suscripción para un tenant por un período dado. * Uso: * pnpm tsx scripts/activate-subscription.ts * Ejemplo: * pnpm tsx scripts/activate-subscription.ts ROEM691011EZ4 580 2026-08-29 2026-09-29 */ async function main() { const [rfc, amountStr, periodStartStr, periodEndStr] = process.argv.slice(2); if (!rfc || !amountStr || !periodStartStr || !periodEndStr) { console.error('Uso: pnpm tsx scripts/activate-subscription.ts '); process.exit(1); } const amount = Number(amountStr); if (!Number.isFinite(amount) || amount <= 0) { console.error('Monto inválido'); process.exit(1); } const periodStart = new Date(periodStartStr); const periodEnd = new Date(periodEndStr); periodEnd.setHours(23, 59, 59, 999); const tenant = await prisma.tenant.findUnique({ where: { rfc } }); if (!tenant) { console.error(`Tenant ${rfc} no encontrado`); process.exit(1); } const subscription = await prisma.subscription.findFirst({ where: { tenantId: tenant.id }, orderBy: { createdAt: 'desc' }, }); if (!subscription) { console.error(`No hay suscripción para tenant ${rfc}`); process.exit(1); } await prisma.$transaction(async (tx) => { await tx.subscription.update({ where: { id: subscription.id }, data: { status: 'authorized', currentPeriodStart: periodStart, currentPeriodEnd: periodEnd, }, }); const payment = await tx.payment.create({ data: { tenantId: tenant.id, subscriptionId: subscription.id, mpPaymentId: `manual-${Date.now()}`, amount, status: 'approved', paymentMethod: 'bank_transfer', paidAt: new Date(), }, }); console.log(`[Activate Subscription] Tenant ${rfc} activado`); console.log(` Plan: ${subscription.plan}`); console.log(` Período: ${periodStart.toISOString()} → ${periodEnd.toISOString()}`); console.log(` Pago: ${amount} (ID: ${payment.id})`); }); } main().catch(err => { console.error(err); process.exit(1); });