AfipSDK / afip.js

Libreria para usar los Web Services de AFIP con Typescript y JavaScript
https://afipsdk.com/
MIT License
162 stars 85 forks source link

Error al facturar #68

Closed jlopezjuy closed 9 months ago

jlopezjuy commented 9 months ago

Hola buenas tardes, estamos teniendo problemas para facturar.

Captura desde 2024-01-17 16-27-47

Espero puedan ayudarnos tenemos la version "@afipsdk/afip.js": "^0.7.9",

jlopezjuy commented 9 months ago

Actualizamos a la version 1.0.1 y ahora tenemos este otro error:

Captura desde 2024-01-17 16-35-51

async getDatosFacturaB(venta: FacturaBDTO): Promise<any> { const factura: FacturaBDTO = venta; const afip = new Afip({ CUIT: 33222111, key: '../../../../../cetificados/key', cert: '../../../../../cetificados/cert', production: true, access_token: 'sssss'});

ivanalemunioz commented 9 months ago

A partir de la v1 la forma de setear el certificado es diferente: https://docs.afipsdk.com/paso-a-paso/instalacion

jlopezjuy commented 9 months ago

Aplique esa nueva forma, y sigo en el mismo error... 400

` const cert = fs.readFileSync('./cert', {encoding: 'utf8'}); // Key (Puede estar guardado en archivos, DB, etc) const key = fs.readFileSync('./key', {encoding: 'utf8'}); const factura: FacturaADto = venta; const afip = new Afip({ CUIT: 444, key: key, cert: cert, production: true, access_token: 'ssss' });

`

ivanalemunioz commented 9 months ago

Si haces un log de error o error.data no te sale nada mas?

jlopezjuy commented 9 months ago

lo unico que sale en cada prueba es lo siguiente: Captura desde 2024-01-18 08-50-24

jlopezjuy commented 9 months ago

Captura desde 2024-01-18 08-51-37

una mas nueva

AfipSDK commented 9 months ago

Estas haciendo el catch? Probaste hacer console log de error.data?

jlopezjuy commented 9 months ago
async getDatosFacturaA(venta: FacturaADto): Promise<any> {
    try {
      const cert = fs.readFileSync('./cert', {encoding: 'utf8'});
      // Key (Puede estar guardado en archivos, DB, etc)
      const key = fs.readFileSync('./key', {encoding: 'utf8'});
      const factura: FacturaADto = venta;
      const afip = new Afip({
        CUIT: 4444,
        key: key,
        cert: cert,
        production: true,
        access_token: '444455rfff'
      });

      if (factura.tipoDeFactura !== 1) {
        throw new HttpException('Servicio dedicado unicamente a tipo de Facturas B = 6', HttpStatus.FORBIDDEN);
      }

      /**
       * Número de la ultima Factura B
       **/
      const last_voucher = await afip.ElectronicBilling.getLastVoucher(factura.puntoVenta, factura.tipoDeFactura);

      /**
       * Numero de factura
       **/
      const numero_de_factura = last_voucher + 1;

      /**
       * Fecha de la factura en formato aaaa-mm-dd (hasta 10 dias antes y 10 dias despues)
       **/
      const fecha = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0];
      console.log('importe total 35: ' + factura.importeTotal);
      const importe_gravado: number = factura.importeTotal;

      /**
       * Importe exento al IVA
       **/
      const importe_exento_iva: number = 0;

      /**
       * Importe de IVA
       **/
      const importe_iva: number = +((factura.importeTotal * 21) / 100).toFixed(2);
      console.log('importe iva: ' + importe_iva);
      /**
       * Los siguientes campos solo son obligatorios para los conceptos 2 y 3
       **/

      let fecha_servicio_desde = null,
        fecha_servicio_hasta = null,
        fecha_vencimiento_pago = null;

      if (factura.concepto === 2 || factura.concepto === 3) {
        /**
         * Fecha de inicio de servicio en formato aaaammdd
         **/
        fecha_servicio_desde = 20191213;

        /**
         * Fecha de fin de servicio en formato aaaammdd
         **/
        fecha_servicio_hasta = 20191213;

        /**
         * Fecha de vencimiento del pago en formato aaaammdd
         **/
        fecha_vencimiento_pago = 20191213;
      }

      const data = {
        CantReg: 1, // Cantidad de facturas a registrar
        PtoVta: factura.puntoVenta,
        CbteTipo: factura.tipoDeFactura,
        Concepto: factura.concepto,
        DocTipo: factura.tipoDeDocumento,
        DocNro: factura.numeroDeDocumento,
        CbteDesde: numero_de_factura,
        CbteHasta: numero_de_factura,
        CbteFch: parseInt(fecha.replace(/-/g, '')),
        FchServDesde: fecha_servicio_desde,
        FchServHasta: fecha_servicio_hasta,
        FchVtoPago: fecha_vencimiento_pago,
        ImpTotal: (importe_gravado + importe_iva + importe_exento_iva).toFixed(2),
        ImpTotConc: 0, // Importe neto no gravado
        ImpNeto: factura.importeTotal,
        ImpOpEx: importe_exento_iva,
        ImpIVA: importe_iva,
        ImpTrib: 0, //Importe total de tributos
        MonId: 'PES', //Tipo de moneda usada en la factura (PES = pesos argentinos)
        MonCotiz: 1, // Cotización de la moneda usada (1 para pesos argentinos)
        Iva: [
          // Alícuotas asociadas a la factura
          {
            Id: 5, // Id del tipo de IVA (5 = 21%)
            BaseImp: factura.importeTotal,
            Importe: importe_iva,
          },
        ],
      };

      /**
       * Creamos la Factura
       **/
      try {
        console.log(data);
        const res = await afip.ElectronicBilling.createVoucher(data);
        return {
          cae: res.CAE,
          vencimiento: res.CAEFchVto,
          numFactura: numero_de_factura,
          importeTota: (importe_gravado + importe_iva + importe_exento_iva).toFixed(2),
        };
      } catch (e) {
        console.log('**************');
        console.log(e.toString());
        throw new HttpException(e.toString(), HttpStatus.FORBIDDEN);
      }
    }catch (e) {
      console.log('**************');
      console.log(e.toString());
      throw new HttpException(e.toString(), HttpStatus.FORBIDDEN);
    }
  }

Lo que se ve en el log: Captura desde 2024-01-18 09-41-05

ivanalemunioz commented 9 months ago

console.log(e); console.log(e.data);

jlopezjuy commented 9 months ago

Como necesitaba facturar si o si, por que llegaron muchos clientes, hice revert a la version 0.7.11, y me dejo facturar, el fin de semana que no se trabaja voy a hacer pruebas con el branch que tengo y paso los logs para que revisen. gracias.

ivanalemunioz commented 9 months ago

Por el primer error podia ser un tema del certificado, vienen generándose con algún error desde el lado de AFIP, suele evitarse cuando al generar la key en openssl se agrega el parámetro -traditional

openssl genrsa -traditional -out [nombre de archivo] 2048

https://docs.afipsdk.com/paso-a-paso/tutoriales-pagina-de-afip/obtener-certificado-de-produccion#paso-2-generar-la-clave-de-cifrado-key