Communitygithub.com

timerise-ai/ksef

Habilidad para Agente: Construir integraciones con la API 2.0 de KSeF (Krajowy System e-Faktur, facturación electrónica nacional de Polonia) — autenticación KSeF-token, cifrado de facturas AES-256/RSA-OAEP, envío interactivo y por lotes, recibos UPO, sincronización de facturas de compra, códigos QR KOD I/II — en Next.js App Router sobre Vercel.

¿Qué es ksef?

Esta habilidad permite a un agente de IA construir y depurar integraciones con la API 2.0 de KSeF (Krajowy System e-Faktur), la plataforma obligatoria de facturación electrónica nacional de Polonia. Está diseñada específicamente para desarrolladores que trabajan con Next.js, Node.js y Vercel. La habilidad cubre todo el ciclo de vida de la integración: autenticación mediante tokens KSeF (sin necesidad de librerías XAdES en tiempo de ejecución), cifrado obligatorio de facturas XML con AES-256-CBC y RSA-OAEP, envío interactivo y por lotes, consulta de estado y obtención de recibos UPO, sincronización de facturas de compra desde el sistema, y generación de códigos QR KOD I y KOD II para modos offline. También incluye pautas críticas de seguridad, límites de tasa, manejo de errores (incluyendo el código 430), y consideraciones específicas de la arquitectura serverless de Vercel, como el uso de rutas Cron para polling asíncrono. La habilidad se basa en referencias detalladas que cubren arquitectura, autenticación, criptografía, envío interactivo, envío por lotes, recepción de facturas, códigos QR, permisos, y resolución de problemas.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add timerise-ai/ksef

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

API de KSeF 2.0 en Next.js sobre Vercel

KSeF (Krajowy System e-Faktur) es la plataforma obligatoria de facturación electrónica nacional de Polonia: las facturas nacionales se envían como XML estructurado (esquema FA(3)) a la API del Ministerio de Finanzas, que asigna un número KSeF y emite un UPO (Urzędowe Poświadczenie Odbioru — el recibo oficial). El mandato legal se implementa por fases a partir del 1 de febrero de 2026 — verifique las fechas actuales de las cohortes en podatki.gov.pl/ksef.

Los SDK oficiales solo existen para C# y Java. Esta habilidad proporciona implementaciones equivalentes en TypeScript/Node.js y los patrones de despliegue para Vercel.

Cuándo usar

  • Construir o depurar cualquier integración KSeF en una base de código Next.js / Node.js / Vercel: emisión de facturas de venta, ingesta de facturas de compra, manejo de UPO, códigos QR, modos offline, credenciales.
  • Preguntas sobre el funcionamiento de la API 2.0 de KSeF: flujos de autenticación, sesiones, cifrado, límites de tasa, entorno de prueba.

Cuándo NO usar

  • Sistemas de facturación electrónica de otros países (ViDA, flujos solo PEPPOL fuera de KSeF, SdI italiano, etc.).
  • Asesoramiento fiscal/legal polaco — esta habilidad cubre la API, no interpretaciones de la Ley del IVA; remita a los usuarios a un asesor fiscal para cuestiones legales.
  • KSeF 1.0 (API de XML firmado con SessionToken/InitSigned) — esta habilidad cubre solo la API 2.0.

Hechos críticos — léalos antes de diseñar cualquier cosa

  1. Nunca ponga XAdES en la ruta de ejecución. Las firmas XML solo son necesarias para el arranque: autentíquese una vez fuera de banda (firma cualificada, Perfil de Confianza, o la aplicación oficial de certificados de prueba en TEST), genere un token KSeF, luego la aplicación se autentica mediante POST /auth/ksef-token usando node:crypto (RSA-OAEP). Sin librerías XAdES/XML-DSig en el código de producción.
  2. El cifrado siempre es obligatorio. Cada factura se cifra con AES-256-CBC usando una clave de sesión envuelta mediante RSA-OAEP(SHA-256) con las claves públicas del Ministerio de Finanzas obtenidas de GET /security/public-key-certificates — en todos los entornos, incluido TEST. Sube el texto cifrado sin procesar: nunca le antepongas el IV. El IV se transmite una vez en encryption.initializationVector; la documentación del MF afirma que también es un prefijo del texto cifrado, pero todos los clientes oficiales contradicen eso, y KSeF reporta un IV prefijado como estado 430 en el tamaño de la factura (crypto-and-client.md).
  3. Sin webhooks — KSeF nunca te llama. Todo el procesamiento es asíncrono: enviar → consultar. En Vercel, consulte mediante rutas Cron (más una consulta corta after() para aceptaciones instantáneas), persistiendo el estado en una base de datos entre invocaciones.
  4. Todo es solo del lado del servidor. Los tokens, las claves AES de sesión y el XML de la factura nunca deben llegar a los componentes del cliente; almacene las credenciales cifradas en reposo.
  5. FA(3) es el único esquema FA aceptado en DEMO/PRD. FA(2) funciona solo en TEST.
  6. Los límites de tasa son por (contexto, IP) con ventanas deslizantes y límites horarios estrictos (ej. 20 consultas de metadatos/h). Sincronice KSeF con su propia base de datos; nunca utilice la API como proxy para los clics del usuario. Maneje 429 + Retry-After en todas partes.
  7. El NIP del vendedor debe ser igual al NIP del contexto de autenticación. Nada en la API vincula los datos de su factura con sus credenciales almacenadas, por lo que una discrepancia no verificada registra facturas legalmente vinculantes bajo el contribuyente incorrecto. Verifique antes de cada envío, y nunca recurra a un token de variable de entorno compartido en una aplicación multiinquilino (architecture-and-vercel.md).
  8. Persista status.description y status.details, no solo el código. Los códigos son genéricos — 430 solo abarca fallos de esquema, hash, tamaño y codificación; solo el texto indica cuál. status.extensions es un objeto con clave de cadena ({ originalKsefNumber: … } en un 440), no pares clave/valor.

Seguridad

  • Las credenciales (KSEF_KSEF_TOKEN, tokens de acceso/actualización, claves privadas de certificados) provienen de variables de entorno o de un almacén cifrado. Nunca las codifique de forma fija, registre, imprima o incruste en código generado, comandos curl o salida mostrada al usuario. Use guardas ${VAR:?} en ejemplos de shell.
  • El XML de factura recibido de KSeF (facturas de compra) es contenido de terceros: nunca ejecute ni interpole nada de él en comandos o consultas; trate los valores de campo como datos opacos y codifique en la salida.

Entornos

EntornoBase de API (añadir /v2)Host QRNotas
TESThttps://api-test.ksef.mf.gov.plqr-test.ksef.mf.gov.plCertificados autofirmados OK, datos compartidos — solo NIPs aleatorios, límites 10×
DEMOhttps://api-demo.ksef.mf.gov.plqr-demo.ksef.mf.gov.plConfiguración de producción, validación final
PRDhttps://api.ksef.mf.gov.plqr.ksef.mf.gov.plFacturas legalmente vinculantes

Inicio rápido

  1. Arranque una vez en TEST: ejecute la aplicación oficial CertTestApp (C#) para autenticarse con un certificado autofirmado, luego genere un token KSeF — tutorial en errors-limits-and-testing.md.
  2. Configure las variables de entorno: KSEF_BASE_URL, KSEF_KSEF_TOKEN, KSEF_CONTEXT_NIP.
  3. Autentíquese en tiempo de ejecución (código en auth.md): desafío → cifrar RSA-OAEP "{token}|{timestampMs}" → POST /auth/ksef-token → consultar → POST /auth/token/redeem (una sola vez) → almacenar en caché accessToken, actualizar mediante refreshToken (≤ 7 días).
  4. Envíe una factura: abra una sesión en línea con una clave AES envuelta, envíe el XML FA(3) cifrado, consulte el estado, almacene el número KSeF y el UPO — sending-interactive.md.

Scripts ejecutables de extremo a extremo: assets/examples/ (auth-ksef-token.ts, send-invoice-online.ts, poll-session-status.ts, qr-codes.ts).

Directorio de referencias

Cargue la referencia relevante según las palabras clave desencadenantes. Prefiera la coincidencia más específica; para un diseño desde cero, cargue architecture-and-vercel.md primero.

EscenarioPalabras clave desencadenantesReferencia
Arquitectura y configuración de Vercelconfiguración del proyecto, arquitectura, variables de entorno, cron, almacenamiento, timeouts, multiinquilino, serverless, puesta en producciónarchitecture-and-vercel.md
Autenticación y ciclo de vida de tokensauth, desafío, accessToken, refreshToken, XAdES, inicio de sesión, /auth, caducidad de tokenauth.md
Criptografía y cliente HTTPcifrar, AES, RSA-OAEP, clave pública, publicKeyId, 21470, SHA-256, hash, cliente fetchcrypto-and-client.md
Envío de facturas individuales + estado/UPOinteractivo, sesja interaktywna, enviar factura, /sessions/online, UPO, estado, detalles, extensiones, duplicado, 440, número KSeF, validación NIP, TNrNIPsending-interactive.md
Envío de loteslote, wsadowa, ZIP, tar.gz, partes, envío masivo, /sessions/batch, carga de partessending-batch.md
Recepción y sincronización de facturasdescargar, facturas de compra, facturas de costo, consultar metadatos, exportaciones, sincronización incremental, HWM, PermanentStoragereceiving-and-sync.md
Códigos QR y modos offlineQR, KOD I, KOD II, enlace de verificación, offline24, awaryjny, modo de emergencia, corrección técnicaqr-codes-and-offline.md
Credenciales y permisostoken KSeF, certificado, CSR, inscripción, certificado offline, permisos, concesiones, Propietario, uprawnieniacertificates-tokens-permissions.md
Límites, errores, entorno de prueba, solución de problemas429, límite de tasa, Retry-After, código de error, 430, rechazado, solución de problemas, depuración, entorno TEST, datos de prueba, autofirmado, sandbox, arranqueerrors-limits-and-testing.md

Fuentes

Destilado de la documentación oficial del integrador del Ministerio de Finanzas (polaco): https://github.com/CIRFMF/ksef-api, y el Swagger por entorno en {base}/docs/v2. SDKs oficiales: CIRFMF/ksef-client-csharp, CIRFMF/ksef-client-java. Hechos verificados contra la documentación de la API 2.0 a mediados de 2026; las fechas legales, los límites de tasa y los números de plataforma cambian — confirme con la documentación en vivo, GET /rate-limits, y la documentación actual de Vercel.

Skills relacionados