| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import { NextRequest, NextResponse } from 'next/server'
- import { longPollDoc } from '@/lib/sri-utils'
- export async function POST(request: NextRequest) {
- try {
- const body = await request.json()
- const { accessKey, ambiente } = body
- if (!accessKey) {
- return NextResponse.json(
- { error: 'Clave de acceso es requerida' },
- { status: 400 }
- )
- }
- // Validar ambiente
- const ambienteValido = ambiente === 'produccion' ? 'produccion' : 'pruebas'
- // Verificar el estado del documento en el SRI
- // longPollDoc hace polling hasta que el documento sea procesado
- const result = await longPollDoc({
- accessKey,
- ambiente: ambienteValido
- })
- // Obtener la autorización del resultado
- const autorizacion = result.RespuestaAutorizacionComprobante.autorizaciones?.autorizacion?.[0]
- // Determinar el estado basado en la respuesta
- let estado: string = 'verificando'
- if (autorizacion) {
- if (autorizacion.estado === 'AUTORIZADO') {
- estado = 'autorizado'
- } else if (autorizacion.estado === 'DEVUELTA') {
- estado = 'devuelto'
- } else if (autorizacion.estado === 'NO AUTORIZADO') {
- estado = 'no_autorizado'
- }
- }
- // Formatear mensajes
- const mensajes = autorizacion?.mensajes?.mensaje?.map(m => ({
- identificador: m.identificador,
- mensaje: m.mensaje,
- tipo: m.tipo as "INFORMATIVO" | "ADVERTENCIA" | "ERROR",
- informacionAdicional: m.informacionAdicional
- })) || []
- return NextResponse.json({
- success: true,
- estado,
- numeroAutorizacion: autorizacion?.numeroAutorizacion,
- fechaAutorizacion: autorizacion?.fechaAutorizacion,
- ambiente: autorizacion?.ambiente,
- comprobante: autorizacion?.comprobante,
- mensajes
- })
- } catch (error) {
- console.error('Error verificando estado en el SRI:', error)
- return NextResponse.json(
- {
- error: 'Error al verificar el estado en el SRI',
- details: error instanceof Error ? error.message : 'Error desconocido'
- },
- { status: 500 }
- )
- }
- }
|