Este es un web service que permite validar una factura y obtener cuales son los posibles riesgos fiscales en los que se incurre. Este web service no forma parte del modulo de riesgo fiscal, es un servicio extra que puede ser contratado de manera adicional.

Configuración de riesgos para la empresa

La pantalla para configurar los riesgos fiscales por empresa se encuentra en el siguiente menú:


En la vista estarán listados los riesgos ya configurados, para configurar uno nuevo se tiene que dar click en agregar un nuevo registro.


Dentro se deberá crear el registro para configurar el riesgo.



Campos:

  • Nombre Corto: Se seleccionará el nombre corto de la empresa a la que se le quiera configurar el riesgo.
  • RFC, Empresa y Grupo: Campos que se llenarán automáticamente al seleccionar el nombre corto.
  • Factor de Riesgo: Se seleccionará el riesgo a configurar.
  • Bóveda: Campo que se llenará automáticamente al seleccionar el factor de riesgo.
  • Nivel de impacto:
    • Alto impacto: Hará que el CFDI sea inválido.
    • Advertencia: Mostrará el mensaje del riesgo pero el CFDI seguirá siendo válido.
  • Mensaje de Riesgo: Se podrá configurar un mensaje para el riesgo y eso será lo que aparecerá en la respuesta del WebService (Si no tiene ningún mensaje configurado seguirá apareciendo el nombre del factor de riesgo).
  • Activo: Se podrá activar o desactivar el riesgo según se requiera.


Ejemplo de riesgos configurados como advertencia, que no invalidan un CFDI



Nota: Los riesgos que no estén configurados en la forma de Catálogo Riesgos por Empresa igualmente se calcularán y aparecerán como “Informativo”.

Archivo para la petición de validar el CFDI.

Se tiene un ejemplo de un código en PHP que hace la petición a bFiskurApp para mandar a validar un CFDI y que nos regrese en formato JSON si el archivo mandado es válido, en el caso que no sea válido el porqué, y si aplican riesgos fiscales en éste. Dentro de este archivo, que estaría del lado del servidor del cliente, se hace la petición al link que procesa el CFDI, la petición con curl debe ser con método “POST”, en los parámetros del POST solamente se deberá incluír el CFDI codificado en base64, con nombre de “cfdi”.

La petición se hace al siguiente link:


https://bfiskurapp.bitam.com/wsbFiskur/validacfdiws/validarcfdi.php


Es importante que se haga por cURL, ya que el navegador no soporta el parámetro codificado en base64.


<?php
$fields = array('cfdi' => '{Aquí va el texto codificado en base64}');
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://bfiskurapp.bitam.com/wsbFiskur/validacfdiws/validarcfdi.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string );
curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36');
@curl_setopt($ch, CURLOPT_TIMEOUT, 600);
$data = curl_exec($ch);
curl_close($ch);
unset($ch);

echo $data;
?>

Ejemplo PHP. Este código se puede modificar para ser usado por el cliente.


Ejemplo de la petición con Postman


Respuesta del webservice.

La respuesta del webservice será un JSON con los datos de si el CFDI enviado a validar es válido, si no es válido se muestra el error, y la lista de los riesgos fiscales que aplican si es que es el caso.


En este caso (corriendo el código mostrado anteriormente), el CFDI a validar no aplica en ningún riesgo, por lo que sí es válido.


Campos de respuesta:

  • “válido”: Dependiendo si marcó error o el CFDI cuenta con riesgos de alto impacto se marcará como “Si” o “No” dependiendo el caso.
  • “información”: Este campo aparecerá en caso de que se detecten riesgos fiscales con la leyenda de “Se detectaron riesgos fiscales.”.
  • “riesgos”: En caso de que SI se hayan detectado riesgos, tendrá un arreglo con los riesgos que se detectaron, el arreglo contiene 2 campos por riesgo:
    • “Riesgo”: Será el mensaje que se configuró en la ventana de Configuración de riesgos por empresa, o, en caso de no haber configurado el riesgo, mostrará el nombre de este. 
    • “Nivel de impacto”: Será el nivel de impacto que se configuró en la ventana de Configuración de riesgos por empresa, o, en caso de no haber configurado el riesgo, mostrará “Informativo”. 
  • “error”: Este campo solo aparecerá en caso de que haya un error en el proceso, dentro vendrá información del error, y marca el campo de “válido” como “No”