¿Cómo puedo dar respuesta automática a los intercambios de DTE recibidos?

¿Cómo puedo dar respuesta automática a los intercambios de DTE recibidos?


Debe crear un servicio web que reciba por POST el XML codificado en base64 del EnvioDTE.

Este servicio se consultará para saber si se debe procesar de manera automática un intercambio recibido indicando si se recibe o reclama el contenido. Un ejemplo del recurso es:

La solicitud que realiza LibreDTE a su servicio web contendrá, en el cuerpo, el archivo XML de intercambio codificado en base64. Por ejemplo:

{
  "xml":"aWRfcGFnbwo="
}

Respuesta esperada

El servicio puede entregar múltiples tipos de respuestas, las cuales harán diferentes cosas. A continuación se detallan todas las posibilidades. Están en PHP, pero la respuesta es en JSON en estricto rigor.

  • Recibir todo el intercambio (estado ERM):
true
  • Reclamar todo el intercambio (estado RCD):
false
  • No procesar el intercambio (se deberá procesar manualmente):
'null'
  • Si el intercambio tiene más de un DTE se puede indicar qué documentos se deben recibir o reclamar:
[
    'recibir' => [
        [
            'TipoDTE' => 33,
            'Folio' => 1
        ]
    ],
    'reclamar' => [
        [
            'TipoDTE' => 33,
            'Folio' => 2
        ]
    ]
]

Los índices recibir y reclamar son arreglos de arreglos (objetos) que pueden tener los siguientes índices:

// esto no es una respuesta válida, es sólo un ejemplo de como asignar datos de un DTE
[
    'TipoDTE' => 31,
    'Folio' => 1,
    'FchEmis' => '2018-05-21',
    'RUTEmisor' => '76192083-9',
    'RUTRecep' => '88777666-5',
    'MntTotal' => 1000,
    'EstadoRecepDTE' => 'ERM', // código SII
    'RecepDTEGlosa' => 'Otorga recibo de mercaderías o servicios',
]

Si bien sólo los índices TipoDTE y Folio son obligatorios, si el intercambio incluye más de un DTE se recomienda incluir el RUTEmisor. Además los índices EstadoRecepDTE y RecepDTEGlosa permiten definir los estados que se asignarán (por defecto es ERM para recibidos y RCD para reclamados).

También es posible pasar un sólo arreglo con todos los documentos, independiente el estado, en este caso es obligatorio que se indique EstadoRecepDTE y RecepDTEGlosa:

[
    [
        'TipoDTE' => 31,
        'Folio' => 1,
        'EstadoRecepDTE' => 'ERM',
        'RecepDTEGlosa' => 'Otorga recibo de mercaderías o servicios',
    ],
    [
        'TipoDTE' => 31,
        'Folio' => 2,
        'EstadoRecepDTE' => 'RCD',
        'RecepDTEGlosa' => 'Reclamo al contenido del documento',
    ],
]

Si se quieren especificar campos generales para todos los documentos como sucursal que recibe el DTE o el período donde se debe asignar se deberá hacer de la siguiente forma:

[
    // =true o cualquier respuesta de las antes vistas
    'accion' => true,
    'config' => [
        // nombre de contacto por dudas
        'NmbContacto' => 'Esteban',
        // correo de contacto por dudas
        'MailContacto' => '[email protected]',
        // =0 para casa matriz o código de sucursal del SII
        'sucursal' => 0,
        'Recinto' => 'Casa matriz',
        // correo del proveedor (se recomienda no asignar)
        'responder_a' => '[email protected]',
        // debería ser siempre el actual
        'periodo' => date('Ym'),
    ],
]

En el índice config, todos los campos son opcionales, si no se indica alguno será determinado automáticamente por el sistema.