Improved

[API FE PER] Actualización de Guías de Remisión Electrónica remitente y transportista

Descripción

Estos últimos cambios actualizan el soporte de Guías de Remisión Electrónica (GRE) para Perú, incorporando nuevos escenarios de traslado exigidos por SUNAT para GRE-remitente y GRE-transportista.

Los cambios incluyen nuevos motivos y documentos relacionados, nuevos campos para operaciones con DAM/DS y Manifiesto de Carga, soporte de contenedores y precintos, nuevas reglas condicionales de obligatoriedad, actualización de XML/PDF y actualización de los diccionarios de datos expuestos en la documentación.

Importante

Este cambio modifica reglas de validación y obligatoriedad de algunos campos de GRE. Se recomienda revisar las integraciones que generan GRE-remitente o GRE-transportista.


Cambios en GRE-remitente

Nuevo motivo de traslado 19

Se agrega el motivo de traslado 19 en information.reasonForTransfer:

CódigoDescripción
19Traslado de mercancía extranjera

Este nuevo motivo habilita reglas específicas para traslados asociados a documentos DAM/DS, Manifiesto de Carga y citas u órdenes de entrega del Terminal Portuario.


Documentos relacionados

Se actualizan las reglas de relatedDocuments[] para GRE-remitente:

  • Se agrega soporte para relatedDocuments[].documentType = "92" como Cita/Orden de Entrega del Terminal Portuario.
  • El documento 92 debe enviarse como una entrada adicional e independiente dentro de relatedDocuments[]; no reemplaza al documento principal del traslado.
  • relatedDocuments[].series deja de ser obligatorio cuando documentType es 92.
  • Para los demás tipos de documento, relatedDocuments[].series se mantiene obligatorio.
  • relatedDocuments[].number ahora soporta formatos diferenciados según documentType.
  • Se valida que la combinación documentType + number no se repita dentro del array.
  • relatedDocuments[].ruc documenta el caso del documento 92, donde el RUC debe corresponder a un administrador portuario registrado en SUNAT.

Ejemplo para documento relacionado 92:

{
  "relatedDocuments": [
    {
      "documentType": "92",
      "number": "CITA-12345"
    }
  ]
}

Validaciones de traslado

Se actualizan las reglas de transferDetails:

  • transferDetails.goodsDeliveryDate es obligatorio cuando information.transferMode = "01" (transporte público).
  • transferDetails.goodsDeliveryDate debe ser igual o posterior a information.issueDate.
  • transferDetails.transferStartDate debe ser igual o posterior a transferDetails.goodsDeliveryDate cuando esta última se informe.
  • La validación de transferStartDate se realiza contra la fecha de entrega de bienes al transportista y no contra la fecha de emisión.

Peso bruto y número de bultos

Se actualizan las reglas de transferDetails.grossWeight y transferDetails.numberOfPackages:

  • transferDetails.grossWeight sigue siendo obligatorio en todos los casos, excepto cuando information.reasonForTransfer = "19" y relatedDocuments[] contiene documentType = "92"; en ese escenario no debe enviarse.
  • transferDetails.numberOfPackages deja de ser obligatorio de forma general y pasa a depender del motivo de traslado y de los documentos relacionados.
  • transferDetails.numberOfPackages no puede coexistir con transferDetails.containers.
  • transferDetails.numberOfPackages no debe enviarse cuando information.reasonForTransfer = "19" y relatedDocuments[] contiene documentType = "92".

Nuevos campos transferDetails.containers[]

Se agrega transferDetails.containers[] para informar contenedores y precintos usados en el traslado.

CampoDescripción
transferDetails.containers[].containerNumberNúmero de identificación del contenedor. Alfanumérico de hasta 17 caracteres. Permite letras mayúsculas, números, guion (-) y barra (/).
transferDetails.containers[].sealNumberNúmero de precinto de seguridad. Alfanumérico de hasta 100 caracteres. Permite letras mayúsculas, números y coma como separador de múltiples precintos.

Reglas principales:

  • Se permite un máximo de 2 contenedores.
  • containerNumber es obligatorio.
  • No se permiten containerNumber duplicados.
  • containers y numberOfPackages son mutuamente excluyentes.
  • containers no debe enviarse cuando information.reasonForTransfer = "19" y relatedDocuments[] contiene documentType = "92".
  • sealNumber es obligatorio en escenarios DAM/DS con indicador de traslado total, y también para motivo 09 sin ese indicador.

Mapeo XML:

CampoNodo XML
containerNumbercac:TransportHandlingUnit/cac:Package/cbc:ID
sealNumbercac:TransportHandlingUnit/cac:Package/cbc:TraceID

Registro de vehículo y conductores del transportista

Se agrega carrier.registerVehiclesAndDrivers para indicar que el remitente registra los datos del vehículo y conductores del transportista en la GRE-remitente.

Reglas principales:

  • Solo aplica cuando information.transferMode = "01" (transporte público).
  • No puede enviarse junto con transferDetails.sunatShipmentIndicator = "06".
  • Cuando es true, son obligatorios:
    • carrier.vehiclePlateNumber
    • carrier.identificationType
    • carrier.identificationNumber
    • carrier.name
    • transferDetails.transferStartDate
    • driverDetails.mainDriver completo
  • Cuando es true, el XML incluye cbc:SpecialInstructions con el valor SUNAT_Envio_IndicadorVehiculoConductoresTransp.

Restricciones para TUCE

Se actualizan las descripciones y restricciones de:

  • carrier.singleCirculationCardNumber
  • carrier.secondaryVehicles[].singleCirculationCardNumber

Estos campos solo deben enviarse cuando:

  • information.transferMode = "01" (transporte público), y
  • carrier.registerVehiclesAndDrivers = true.

En cualquier otro caso no deben enviarse.


RUC en punto de partida y llegada

Se agregan los campos:

  • startingPoint.ruc
  • arrivalPoint.ruc

Reglas principales:

  • startingPoint.ruc es obligatorio cuando se informa startingPoint.establishmentCode.
  • arrivalPoint.ruc es obligatorio cuando se informa arrivalPoint.establishmentCode.
  • Los campos ruc y establishmentCode son dependientes entre sí.
  • El establecimiento debe pertenecer al RUC informado y su ubigeo debe coincidir con el ubigeo del punto correspondiente.
  • Para importación (reasonForTransfer = "08"), cuando el punto de partida no es puerto ni aeropuerto, startingPoint.ruc debe corresponder al depósito temporal declarado en la DAM o DS.

Catálogo 65 y reglas de unidad de medida

Se agrega el Catálogo 65: Código de unidades de medida para uso de GRE en DAM o DS.

Se actualiza itemDetails[].unitOfMeasure con reglas condicionales:

  • Para motivos 08, 09 o 19 con documento relacionado 50 (DAM) o 52 (DS), debe ser un código del Catálogo 65.
  • Para motivo 19 con documento relacionado 91 (Manifiesto de Carga), debe ser U.
  • Para motivo 13, puede ser un código del Catálogo 03 o del Catálogo 65.
  • Para el resto de motivos, debe ser un código del catálogo de unidades de medida existente.

También se actualiza la tabla pública de unidades de medida para exponer todos los códigos aceptados por la API.


Cambios en itemDetails[] para DAM/DS y Manifiesto de Carga

Se depreca itemDetails[].damCode y se agregan nuevos campos para representar la información de DAM/DS y Manifiesto de Carga de forma estructurada.

Campos para DAM/DS

CampoDescripción
itemDetails[].normalizedItemIndica si el bien está normalizado. Cuando es true, son obligatorios tariffCode y sunatProductCode.
itemDetails[].tariffCodePartida arancelaria del bien. Numérica, hasta 10 caracteres, no acepta solo ceros.
itemDetails[].dam.numberNumeración de la DAM o DS con formato [aduana]-[año]-[régimen]-[correlativo].
itemDetails[].dam.seriesNumberNúmero de serie de la DAM o DS. Numérico de hasta 4 caracteres.

itemDetails[].dam aplica cuando information.reasonForTransfer es 08, 09 o 19 con documento relacionado 50 o 52.

Campos para Manifiesto de Carga

CampoDescripción
itemDetails[].cargoManifest.transportDocumentNumberNúmero del documento de transporte del Manifiesto de Carga.
itemDetails[].cargoManifest.transportDetailNumberNúmero de detalle del documento de transporte.
itemDetails[].cargoManifest.containerNumberNúmero del contenedor del Manifiesto de Carga.
itemDetails[].cargoManifest.sealNumberNúmero de precinto del contenedor del Manifiesto de Carga.
itemDetails[].cargoManifest.emptyContainerIndica si el contenedor está vacío.

itemDetails[].cargoManifest aplica cuando information.reasonForTransfer = "19" y relatedDocuments[] contiene documentType = "91".


Excepción para itemDetails[] con motivo 19 y documento 92

itemDetails[] deja de ser obligatorio para el escenario:

  • information.reasonForTransfer = "19"
  • relatedDocuments[] contiene documentType = "92"

En este caso itemDetails[] no debe enviarse, ya que la API gestiona internamente la información requerida para la generación del XML.


Cambios en GRE-transportista

Documentos relacionados permitidos

Se actualiza relatedDocuments[].documentType para GRE-transportista.

La guía de remisión transportista acepta los siguientes tipos de documento relacionado:

01, 03, 04, 09, 12, 31, 48, 50, 52, 65, 66, 67, 68, 69, 80, 82, 93, 94, 95

Se agregan los códigos:

CódigoUso
93Traslado desde ZOFRATACNA hacia Zona Comercial de Tacna.
94Traslado desde el punto de ingreso al país hacia una ZED.
95Traslado desde el exterior hacia la ZOFRATACNA.

Los códigos 93, 94 y 95 aplican cuando no se emitió GRE-remitente en transporte público.


Serie de documentos relacionados

Se actualiza el comportamiento de relatedDocuments[].series en GRE-transportista:

  • series es obligatorio para documentos con estructura serie + número: 01, 03, 04, 09, 12, 31 y 48.
  • series no debe enviarse para los demás tipos de documento.
  • En el XML, cuando aplica, se concatena con number como {series}-{number}.

Cantidad de documentos relacionados

Se actualizan las reglas de cantidad para relatedDocuments[] en GRE-transportista:

  • Por defecto, solo se permite un documento relacionado.
  • Se permiten hasta 2 documentos cuando exista alguno de los códigos 31, 65, 66, 67, 68 o 69.
  • Se permiten más de 2 documentos cuando exista documento 09 con serie electrónica.

Peso bruto

Se actualiza la descripción de transferDetails.grossWeight en GRE-transportista:

  • Es obligatorio en todos los casos.
  • Contiene totalGrossWeight como valor numérico del peso.
  • Contiene unitOfMeasure, que solo acepta KGM (kilogramos) o TNE (toneladas).

Cambios en XML y PDF

Se actualiza la generación de XML y PDF para reflejar los nuevos campos y reglas:

  • Se agrega el indicador SUNAT_Envio_IndicadorVehiculoConductoresTransp en cbc:SpecialInstructions cuando carrier.registerVehiclesAndDrivers = true.
  • Se agregan contenedores y precintos en cac:TransportHandlingUnit/cac:Package.
  • Se agregan campos DAM/DS y Manifiesto de Carga como propiedades adicionales del ítem en el XML.
  • Se omite GrossWeightMeasure cuando aplica la excepción de motivo 19 con documento relacionado 92.
  • Se omite itemDetails[] en el escenario de motivo 19 con documento relacionado 92.
  • Se actualiza el PDF de GRE-remitente para reflejar los nuevos datos cuando correspondan.

Cambios en documentación y diccionarios

Se actualizan los recursos de documentación:

  • Se actualizan las descripciones de campos GRE en fields.yaml.
  • Se agrega el Catálogo 65 en diccionarios de datos.
  • Se actualiza la tabla pública de unidades de medida para incluir los códigos aceptados por la API.
  • Se actualizan las reglas documentadas de relatedDocuments[], transferDetails, itemDetails[], carrier, startingPoint y arrivalPoint.

Impacto para integradores

Este cambio puede afectar integraciones que emiten GRE-remitente o GRE-transportista, especialmente si usan:

  • Motivo de traslado 08, 09, 13 o nuevo motivo 19.
  • Documentos relacionados 50, 52, 91, 92, 93, 94 o 95.
  • Campos grossWeight, numberOfPackages, itemDetails[] o relatedDocuments[].series con obligatoriedad fija.
  • Traslados con contenedores o precintos.
  • Registros de vehículo y conductores del transportista desde la GRE-remitente.

Se recomienda revisar las validaciones de request, los catálogos usados para unidades de medida y la lógica de generación/lectura de XML.


Recomendaciones

Se recomienda revisar los siguientes escenarios:

  1. Generación de GRE-remitente con motivo 19.
  2. Validar documentos relacionados 92, 93, 94 y 95 según corresponda al tipo de guía.
  3. Ajustar integraciones que envían siempre grossWeight, numberOfPackages, itemDetails[] o relatedDocuments[].series.
  4. Actualizar catálogos locales de unidades de medida para incluir el Catálogo 65.
  5. Validar XML generado para escenarios con contenedores, DAM/DS y Manifiesto de Carga.