[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
19Se agrega el motivo de traslado 19 en information.reasonForTransfer:
| Código | Descripción |
|---|---|
19 | Traslado 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
92debe enviarse como una entrada adicional e independiente dentro derelatedDocuments[]; no reemplaza al documento principal del traslado. relatedDocuments[].seriesdeja de ser obligatorio cuandodocumentTypees92.- Para los demás tipos de documento,
relatedDocuments[].seriesse mantiene obligatorio. relatedDocuments[].numberahora soporta formatos diferenciados segúndocumentType.- Se valida que la combinación
documentType + numberno se repita dentro del array. relatedDocuments[].rucdocumenta el caso del documento92, 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.goodsDeliveryDatees obligatorio cuandoinformation.transferMode = "01"(transporte público).transferDetails.goodsDeliveryDatedebe ser igual o posterior ainformation.issueDate.transferDetails.transferStartDatedebe ser igual o posterior atransferDetails.goodsDeliveryDatecuando esta última se informe.- La validación de
transferStartDatese 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.grossWeightsigue siendo obligatorio en todos los casos, excepto cuandoinformation.reasonForTransfer = "19"yrelatedDocuments[]contienedocumentType = "92"; en ese escenario no debe enviarse.transferDetails.numberOfPackagesdeja de ser obligatorio de forma general y pasa a depender del motivo de traslado y de los documentos relacionados.transferDetails.numberOfPackagesno puede coexistir contransferDetails.containers.transferDetails.numberOfPackagesno debe enviarse cuandoinformation.reasonForTransfer = "19"yrelatedDocuments[]contienedocumentType = "92".
Nuevos campos transferDetails.containers[]
transferDetails.containers[]Se agrega transferDetails.containers[] para informar contenedores y precintos usados en el traslado.
| Campo | Descripción |
|---|---|
transferDetails.containers[].containerNumber | Número de identificación del contenedor. Alfanumérico de hasta 17 caracteres. Permite letras mayúsculas, números, guion (-) y barra (/). |
transferDetails.containers[].sealNumber | Nú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.
containerNumberes obligatorio.- No se permiten
containerNumberduplicados. containersynumberOfPackagesson mutuamente excluyentes.containersno debe enviarse cuandoinformation.reasonForTransfer = "19"yrelatedDocuments[]contienedocumentType = "92".sealNumberes obligatorio en escenarios DAM/DS con indicador de traslado total, y también para motivo09sin ese indicador.
Mapeo XML:
| Campo | Nodo XML |
|---|---|
containerNumber | cac:TransportHandlingUnit/cac:Package/cbc:ID |
sealNumber | cac: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.vehiclePlateNumbercarrier.identificationTypecarrier.identificationNumbercarrier.nametransferDetails.transferStartDatedriverDetails.mainDrivercompleto
- Cuando es
true, el XML incluyecbc:SpecialInstructionscon el valorSUNAT_Envio_IndicadorVehiculoConductoresTransp.
Restricciones para TUCE
Se actualizan las descripciones y restricciones de:
carrier.singleCirculationCardNumbercarrier.secondaryVehicles[].singleCirculationCardNumber
Estos campos solo deben enviarse cuando:
information.transferMode = "01"(transporte público), ycarrier.registerVehiclesAndDrivers = true.
En cualquier otro caso no deben enviarse.
RUC en punto de partida y llegada
Se agregan los campos:
startingPoint.rucarrivalPoint.ruc
Reglas principales:
startingPoint.ruces obligatorio cuando se informastartingPoint.establishmentCode.arrivalPoint.ruces obligatorio cuando se informaarrivalPoint.establishmentCode.- Los campos
rucyestablishmentCodeson 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.rucdebe 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,09o19con documento relacionado50(DAM) o52(DS), debe ser un código del Catálogo 65. - Para motivo
19con documento relacionado91(Manifiesto de Carga), debe serU. - 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
itemDetails[] para DAM/DS y Manifiesto de CargaSe 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
| Campo | Descripción |
|---|---|
itemDetails[].normalizedItem | Indica si el bien está normalizado. Cuando es true, son obligatorios tariffCode y sunatProductCode. |
itemDetails[].tariffCode | Partida arancelaria del bien. Numérica, hasta 10 caracteres, no acepta solo ceros. |
itemDetails[].dam.number | Numeración de la DAM o DS con formato [aduana]-[año]-[régimen]-[correlativo]. |
itemDetails[].dam.seriesNumber | Nú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
| Campo | Descripción |
|---|---|
itemDetails[].cargoManifest.transportDocumentNumber | Número del documento de transporte del Manifiesto de Carga. |
itemDetails[].cargoManifest.transportDetailNumber | Número de detalle del documento de transporte. |
itemDetails[].cargoManifest.containerNumber | Número del contenedor del Manifiesto de Carga. |
itemDetails[].cargoManifest.sealNumber | Número de precinto del contenedor del Manifiesto de Carga. |
itemDetails[].cargoManifest.emptyContainer | Indica 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[] con motivo 19 y documento 92itemDetails[] deja de ser obligatorio para el escenario:
information.reasonForTransfer = "19"relatedDocuments[]contienedocumentType = "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, 95Se agregan los códigos:
| Código | Uso |
|---|---|
93 | Traslado desde ZOFRATACNA hacia Zona Comercial de Tacna. |
94 | Traslado desde el punto de ingreso al país hacia una ZED. |
95 | Traslado 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:
serieses obligatorio para documentos con estructura serie + número:01,03,04,09,12,31y48.seriesno debe enviarse para los demás tipos de documento.- En el XML, cuando aplica, se concatena con
numbercomo{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,68o69. - Se permiten más de 2 documentos cuando exista documento
09con serie electrónica.
Peso bruto
Se actualiza la descripción de transferDetails.grossWeight en GRE-transportista:
- Es obligatorio en todos los casos.
- Contiene
totalGrossWeightcomo valor numérico del peso. - Contiene
unitOfMeasure, que solo aceptaKGM(kilogramos) oTNE(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_IndicadorVehiculoConductoresTranspencbc:SpecialInstructionscuandocarrier.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
GrossWeightMeasurecuando aplica la excepción de motivo19con documento relacionado92. - Se omite
itemDetails[]en el escenario de motivo19con documento relacionado92. - 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,startingPointyarrivalPoint.
Impacto para integradores
Este cambio puede afectar integraciones que emiten GRE-remitente o GRE-transportista, especialmente si usan:
- Motivo de traslado
08,09,13o nuevo motivo19. - Documentos relacionados
50,52,91,92,93,94o95. - Campos
grossWeight,numberOfPackages,itemDetails[]orelatedDocuments[].seriescon 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:
- Generación de GRE-remitente con motivo
19. - Validar documentos relacionados
92,93,94y95según corresponda al tipo de guía. - Ajustar integraciones que envían siempre
grossWeight,numberOfPackages,itemDetails[]orelatedDocuments[].series. - Actualizar catálogos locales de unidades de medida para incluir el Catálogo 65.
- Validar XML generado para escenarios con contenedores, DAM/DS y Manifiesto de Carga.
