route.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { NextRequest, NextResponse } from 'next/server'
  2. import { longPollDoc } from '@/lib/sri-utils'
  3. export async function POST(request: NextRequest) {
  4. try {
  5. const body = await request.json()
  6. const { accessKey, ambiente } = body
  7. if (!accessKey) {
  8. return NextResponse.json(
  9. { error: 'Clave de acceso es requerida' },
  10. { status: 400 }
  11. )
  12. }
  13. // Validar ambiente
  14. const ambienteValido = ambiente === 'produccion' ? 'produccion' : 'pruebas'
  15. // Verificar el estado del documento en el SRI
  16. // longPollDoc hace polling hasta que el documento sea procesado
  17. const result = await longPollDoc({
  18. accessKey,
  19. ambiente: ambienteValido
  20. })
  21. // Obtener la autorización del resultado
  22. const autorizacion = result.RespuestaAutorizacionComprobante.autorizaciones?.autorizacion?.[0]
  23. // Determinar el estado basado en la respuesta
  24. let estado: string = 'verificando'
  25. if (autorizacion) {
  26. if (autorizacion.estado === 'AUTORIZADO') {
  27. estado = 'autorizado'
  28. } else if (autorizacion.estado === 'DEVUELTA') {
  29. estado = 'devuelto'
  30. } else if (autorizacion.estado === 'NO AUTORIZADO') {
  31. estado = 'no_autorizado'
  32. }
  33. }
  34. // Formatear mensajes
  35. const mensajes = autorizacion?.mensajes?.mensaje?.map(m => ({
  36. identificador: m.identificador,
  37. mensaje: m.mensaje,
  38. tipo: m.tipo as "INFORMATIVO" | "ADVERTENCIA" | "ERROR",
  39. informacionAdicional: m.informacionAdicional
  40. })) || []
  41. return NextResponse.json({
  42. success: true,
  43. estado,
  44. numeroAutorizacion: autorizacion?.numeroAutorizacion,
  45. fechaAutorizacion: autorizacion?.fechaAutorizacion,
  46. ambiente: autorizacion?.ambiente,
  47. comprobante: autorizacion?.comprobante,
  48. mensajes
  49. })
  50. } catch (error) {
  51. console.error('Error verificando estado en el SRI:', error)
  52. return NextResponse.json(
  53. {
  54. error: 'Error al verificar el estado en el SRI',
  55. details: error instanceof Error ? error.message : 'Error desconocido'
  56. },
  57. { status: 500 }
  58. )
  59. }
  60. }