Descripción
Las Guías de Remisión de Transportista (GRE tipo 31) son emitidas por empresas de transporte cuando prestan servicios de traslado de mercadería de terceros. Se diferencian de las guías de remitente (tipo 09) en que:- El emisor (empresa de transporte) NO es dueño de la mercadería
- Se debe identificar al remitente (quien envía) y destinatario (quien recibe)
- El transportista siempre usa transporte privado (modalidad 02)
- Conductor y vehículo son siempre obligatorios
Flujo de Trabajo (Asíncrono GRE API)
- Crear guía:
POST /api/guias-remision-transportista- Genera el registro y XML firmado - Enviar a SUNAT GRE:
POST /api/guias-remision-transportista/{id}/enviar- Envío asíncrono, devuelve ticket - Consultar ticket:
POST /api/guias-remision-transportista/{id}/ticket- Verifica estado y descarga CDR - Obtener CDR:
GET /api/guias-remision-transportista/{id}/cdr- Descarga la constancia
Diferencias con Guía de Remitente
| Aspecto | Remitente (tipo 09) | Transportista (tipo 31) |
|---|---|---|
| Serie | T001 | V001 |
| Tipo documento | 09 | 31 |
| Emisor | Dueño de mercadería | Empresa de transporte |
| Remitente | (es el emisor) | Tercero (campo requerido) |
| Modalidad transporte | 01 o 02 | Siempre 02 (privado) |
| Conductor | Opcional si M1/L | Siempre requerido |
| Vehículo | Opcional si M1/L | Siempre requerido |
POST /api/guias-remision-transportista
Crea una nueva guía de remisión de transportista.Request Body
Remitente (quien envía la mercadería)
Tipo de documento del remitente:
1 (DNI), 6 (RUC)Número de documento del remitente (máx 15 caracteres)
Razón social o nombre completo del remitente (máx 255 caracteres)
Dirección del remitente (máx 500 caracteres)
Código ubigeo INEI del remitente (6 dígitos)
Destinatario (quien recibe la mercadería)
Tipo de documento del destinatario:
1 (DNI), 4 (Carnet Extranjería), 6 (RUC)Número de documento del destinatario (máx 15 caracteres)
Razón social o nombre completo del destinatario (máx 255 caracteres)
Traslado
Código de motivo de traslado (2 dígitos). Ver tabla en página de Guía Remitente
Descripción adicional del motivo (máx 255 caracteres)
Fecha en que se realizará el traslado (formato: YYYY-MM-DD)
Peso total de la mercadería (mínimo 0.001)
Unidad de medida del peso:
KGM (kilogramos), TNE (toneladas)Ubigeo del punto de partida (usa dirección de empresa transportista si se omite)
Dirección de partida (máx 500 caracteres)
Ubigeo del punto de llegada
Dirección de llegada (máx 500 caracteres)
Conductor (siempre requerido)
Tipo de documento del conductor:
1 (DNI), 4 (Carnet Extranjería)Número de documento del conductor (máx 15 caracteres)
Nombres del conductor (máx 255 caracteres)
Apellidos del conductor (máx 255 caracteres)
Número de licencia de conducir (máx 20 caracteres)
Vehículo (siempre requerido)
Placa del vehículo principal (máx 10 caracteres)
Placa del vehículo secundario/remolque (máx 20 caracteres)
Mercadería
Lista de ítems a trasladar (mínimo 1)
Descripción del ítem
Cantidad del ítem (mínimo 0.001)
Unidad de medida:
NIU (unidades), KGM (kilogramos), etc.Código del producto (máx 30 caracteres)
Otros
Observaciones adicionales
Lógica del Servidor
- Valida que todos los campos de remitente, conductor y vehículo estén presentes (son obligatorios)
- Asigna serie fija V001 y genera número correlativo
- Sincroniza con
documentos_empresaspara numeración base - Fija
mod_transporte = '02'(transporte privado, no puede ser público) - Fija
vehiculo_m1l = false(no aplica para guías de transportista) - Usa ubigeo de empresa como fallback para partida
- Crea registros en
guia_remisionyguia_remision_detalle - Genera XML UBL 2.1 versión 2022 con tipo documento 31
- En el XML, el remitente se mapea al campo
<cac:Tercero>(tercero involucrado) - Firma digitalmente el XML con certificado PEM
- Calcula hash CPE
- Almacena XML en
storage/app/sunat/xml/{ruc}/
SunatService::generarGuiaRemisionTransportistaXml() (línea 668).
Response
Indica si la operación fue exitosa
Objeto de la guía de transportista creada
Información sobre el XML generado
Ejemplo de Request
Ejemplo de Response (201 Created)
POST /api/guias-remision-transportista//enviar
Envía la guía de transportista a SUNAT GRE. Devuelve un ticket para consulta posterior.Path Parameters
ID de la guía de transportista a enviar
Flujo
Idéntico al de guías de remitente (ver página de Guía Remitente). Usa los mismos endpoints GRE y el mismo flujo OAuth.Response (Éxito)
POST /api/guias-remision-transportista//ticket
Consulta el estado de procesamiento en SUNAT usando el ticket.Path Parameters
ID de la guía de transportista
Flujo
Idéntico al de guías de remitente. Usa el mismo endpoint de consulta de GRE.Respuestas Posibles
- Código “0”: Aceptado (descarga CDR automáticamente)
- Código “98”: En proceso (seguir consultando)
- Otro código: Rechazado
Ejemplo de Response (En Proceso)
Ejemplo de Response (Aceptado)
GET /api/guias-remision-transportista
Obtiene lista paginada de guías de transportista (solo serie V001).Query Parameters
Número de página
Response
Objeto de paginación Laravel con 15 items por página.GET /api/guias-remision-transportista/
Obtiene detalle completo de una guía de transportista específica.GET /api/guias-remision-transportista//cdr
Descarga el archivo CDR (Constancia de Recepción) en formato ZIP.GET /api/guias-remision-transportista/xml/
Descarga el archivo XML de la guía.GET /api/guias-remision-transportista/proximo-numero
Obtiene el próximo número correlativo para serie V001.Response
GET /api/guias-remision-transportista/motivos
Obtiene la lista de motivos de traslado disponibles (misma lista que guías de remitente).Notas Técnicas
Mapeo UBL del Remitente
En el XML UBL 2.1, el remitente se mapea al campo<cac:Tercero> (tercero involucrado en la operación):
SunatService.
Modelo de Datos
Ambas guías (remitente y transportista) usan la misma tablaguia_remision. Se distinguen por:
- Serie: T001 (remitente) vs V001 (transportista)
- Campos: Las guías transportista tienen
remitente_*poblados, las de remitente no
Restricciones
- El campo
mod_transportese fuerza a'02'(transporte privado) en línea 127 - El campo
vehiculo_m1lse fuerza afalseen línea 144 - Conductor y vehículo son siempre obligatorios, no hay excepciones
Placa Secundaria
Para vehículos con remolque/carreta, usarvehiculo_placa_secundaria. SUNAT lo registra pero no es obligatorio.
Mismo Flujo GRE
Las guías de transportista usan exactamente los mismos endpoints GRE que las guías de remitente:- Mismo OAuth
- Mismo endpoint de envío
- Mismo endpoint de consulta de ticket
- Misma estructura de CDR
Validación del Remitente
SUNAT valida que:- El RUC/DNI del remitente exista y esté activo
- El RUC del destinatario exista y esté activo
- El RUC del emisor (empresa de transporte) esté habilitado para GRE
Errores Comunes
| Código | Descripción | Solución |
|---|---|---|
| 2800 | RUC emisor no autorizado para GRE | Activar GRE en SUNAT |
| 2810 | RUC remitente inválido | Verificar que el RUC del remitente sea correcto |
| 2324 | Datos de conductor incompletos | Todos los campos del conductor son obligatorios |
| 2325 | Placa de vehículo inválida | Verificar formato de placa |
| 422 | Campos requeridos faltantes | Remitente, conductor y vehículo son obligatorios |