skills/davidcastagnetoa/skills/saltra-integration

saltra-integration

SKILL.md

SALTRA Integration Skill

Integra nuevas operaciones con la API SALTRA v4 (Seguridad Social espanola).

When to Activate

  • Registrar alta de un trabajador en la Seguridad Social
  • Registrar baja de un trabajador
  • Consultar NSS (Numero de la Seguridad Social) por DNI
  • Subir certificado digital de empresa
  • Cualquier nueva operacion con SALTRA

Patron de Integracion

Token Caching (Reutilizar mientras sea valido)

import axios from "axios";
import config from "../config/config.js";
import logger from "../utils/logger.js";

let saltraToken = null;
let tokenExpiry = 0;

const getSaltraToken = async () => {
  if (saltraToken && Date.now() < tokenExpiry) return saltraToken;

  const response = await axios.post(`${config.SALTRA_API_URL}/auth/login`, {
    email: config.SALTRA_EMAIL,
    password: config.SALTRA_PASSWORD,
  });

  saltraToken = response.data.access_token;
  tokenExpiry = Date.now() + (response.data.expires_in - 300) * 1000; // 5min safety margin
  return saltraToken;
};

Operacion Generica

export const nuevaOperacionSaltra = async (datos, certSecret) => {
  const token = await getSaltraToken();

  const response = await axios.post(
    `${config.SALTRA_API_URL}/seg-social/operacion`,
    {
      ...datos,
      test: config.NODE_ENV !== "production" ? 1 : 0,
    },
    {
      headers: {
        Authorization: `Bearer ${token}`,
        "X-Cert-Secret": certSecret,
        "Content-Type": "application/json",
      },
    }
  );

  logger.debug({ request: datos, response: response.data }, "SALTRA operacion");
  return response.data;
};

Endpoints SALTRA v4

Metodo Ruta Descripcion Estado
POST /auth/login Obtener token de acceso Implementado
POST /seg-social/alta Registrar alta de trabajador Implementado
POST /seg-social/baja Registrar baja de trabajador Implementado
GET /seg-social/nss-by-ipf Consultar NSS por DNI + apellidos Implementado
POST /certificate Subir certificado digital p12/pfx Implementado

Datos Requeridos para Alta

{
  naf: "123456789012",           // NSS (12 digitos)
  ipf: "12345678A",             // DNI/NIE
  nombre: "Juan",
  apellido1: "Garcia",
  apellido2: "Lopez",
  fecha_nacimiento: "1990-01-15",
  sexo: "H",                    // H = Hombre, M = Mujer
  regimen: "0111",              // Regimen general
  ccc: "28123456789",           // CCC empresa (11 digitos)
  grupo_cotizacion: "07",
  fecha_alta: "2024-01-15",
  cno: "5120",                  // Codigo Nacional de Ocupacion
  tipo_contrato: "100",
  coeficiente_jornada: "1000",  // 1000 = jornada completa
  cert_secret: "xxx",           // Del certificado digital de la empresa
  test: 1                       // 1 = modo prueba, 0 = produccion
}

Datos Requeridos para Baja

{
  naf: "123456789012",           // NSS
  ipf: "12345678A",             // DNI/NIE
  fecha_baja: "2024-06-30",
  causa_baja: "51",             // Codigo causa (51 = baja voluntaria)
  ccc: "28123456789",
  cert_secret: "xxx",
  test: 1
}

Manejo de Errores SALTRA

try {
  const result = await darAlta(datos, certSecret);
  return result;
} catch (error) {
  if (error.response?.data?.message) {
    // Error legible de SALTRA
    logger.error({ saltraError: error.response.data }, "Error SALTRA");
    throw new Error(`Error SALTRA: ${error.response.data.message}`);
  }
  throw error;
}

Convenciones

Concepto Convencion
Token cache Siempre reutilizar con margen de 5 minutos antes de expiracion
Modo test Forzar test=1 en entornos que NO sean produccion
cert_secret Se obtiene de Company.saltra_cert_secret, se almacena al subir certificado
Errores Parsear response.data.message para errores legibles al usuario
Logging Loguear request y response completos en nivel debug
Config Variables en config.js: SALTRA_API_URL, SALTRA_EMAIL, SALTRA_PASSWORD

Checklist

  • Token cacheado y reutilizado
  • Modo test activo en no-produccion (test: 1)
  • cert_secret obtenido de la Company asociada
  • Errores parseados y logueados
  • Datos validados con Zod antes de enviar a SALTRA
  • Tramite creado/actualizado con el resultado
Weekly Installs
1
First Seen
6 days ago
Installed on
amp1
cline1
trae1
trae-cn1
opencode1
cursor1