Skip to content

Documentos EDI En GM Integra

Tabla de Contenidos

  1. Resumen Ejecutivo
  2. Documento EDI 214
  3. Documento EDI 997
  4. Documento EDI 990
  5. Documento EDI 210
  6. Segmentos Comunes
  7. Matriz de Variaciones
  8. Apéndices

Resumen Ejecutivo

Documentos EDI Soportados

El sistema puede generar los siguientes documentos EDI según el estándar X12:

CódigoNombrePropósitoMétodo Generador
214Transportation Carrier Shipment Status MessageReportar el estado/avance de un viajeActualizarEstatus()
997Functional AcknowledgmentConfirmar recepción de un mensaje EDIgenerarISA997()
990Response to a Load TenderResponder a una oferta de carga (Aceptar/Rechazar)generarISA990()
210Motor Carrier Freight Details and InvoiceDetalles de flete y factura para carriers de transporteGeneraISA210() (PAGE_ProcesosEDI)

Carriers Soportados

IDNombreCódigo Constante
1RYDERCarrier.RYDER
2TRANSPLACECarrier.TRANSPLACE
3ALCLOGISTICSCarrier.ALCLOGISTICS
4JUSTRANSFORMCarrier.JUSTRANSFORM
5PENSKECarrier.PENSKE
6XPOLOGISTICSCarrier.XPOLOGISTICS
7AUTOLIVCarrier.AUTOLIV
8OOCLCarrier.OOCL
9SAPLBNCarrier.SAPLBN
10ADIENTCarrier.ADIENT
11PROTRANSCarrier.PROTRANS
12UPSCarrier.UPS

Propósito General

El sistema genera documentos EDI para comunicarse con sistemas externos de carriers de transporte. Cada carrier puede tener variaciones específicas en la estructura de los documentos EDI, lo cual requiere lógica condicional compleja que actualmente está hardcodeada en el código del sistema externo.

Objetivo de esta documentación: Servir como base para crear un editor de templates EDI que permita configurar estas variaciones de forma externa mediante archivos JSON, eliminando la necesidad de modificar el código fuente para cada cambio.


Documento EDI 214

Información General

  • Código: 214
  • Nombre: Transportation Carrier Shipment Status Message
  • Propósito: Reportar el estado/avance de un viaje al carrier
  • Cuándo se genera: Cuando se actualiza el estatus de un viaje (método ActualizarEstatus)
  • Método generador: ClsProSolicitudesEDI::ActualizarEstatus() y GenerarISA214()
  • Enviado por: SOAP al método ActualizarEstatus

Estructura General de Segmentos

Orden de segmentos base:

  1. ISA - Interchange Control Header
  2. GS - Functional Group Header
  3. ST - Transaction Set Header
  4. [Segmentos específicos del documento]
  5. SE - Transaction Set Trailer
  6. GE - Functional Group Trailer
  7. IEA - Interchange Control Trailer

Segmentos Específicos del EDI 214

Los segmentos específicos del EDI 214 (entre ST y SE) varían según el carrier y las condiciones:

  • B10 - Beginning Segment for Transportation Carrier Shipment Status (siempre presente)
  • L11 - Business Instructions and Reference Number (múltiples variantes, según carrier)
  • LX - Assigned Number
  • AT7 - Shipment Status Details
  • MS1 - Equipment, Shipment, or Real Property Location (condicional)
  • MS2 - Equipment or Container Owner and Type
  • N1, N3, N4 - Name/Address Information (solo PROTRANS y XPOLOGISTICS)
  • MS3 - Interline Service Provider (solo PROTRANS)
  • AT8 - Shipment Status or Appointment Time (solo XPOLOGISTICS)

Segmentos Base (Comunes a Todos los Documentos EDI)

Segmento ISA - Interchange Control Header

Posición: 1 (siempre) Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceLongitudRequeridoVariaciones por Carrier
ISA01Authorization Information Qualifierfixed”00”2Ninguna - siempre “00”
ISA02Authorization Informationfixed” ” (10 espacios)10Ninguna - siempre 10 espacios
ISA03Security Information Qualifierfixed”00”2Ninguna - siempre “00”
ISA04Security Informationfixed” ” (10 espacios)10Ninguna - siempre 10 espacios
ISA05Interchange ID Qualifier (Sender)variabledsEDIDetalle.InterchangeIDQualifier2VARÍA: “01” (default) o “02” según carrier
ISA06Interchange Sender IDvariabledsEDIDetalle.SCAC15Completa con espacios a la derecha
ISA07Interchange ID Qualifier (Receiver)variabledsEDIDetalle.InterchangeIDQualifier2VARÍA: Igual a ISA05 según carrier
ISA08Interchange Receiver IDvariabledsEDIDetalle.InterchangeReceiverID15Completa con espacios a la derecha
ISA09Interchange Datesystem_dateDateSys() formato “YYMMDD”6Ninguna - siempre fecha actual
ISA10Interchange Timesystem_timeTimeSys() formato “HHMM”4Ninguna - siempre hora actual
ISA11Standards Identifierfixed”U”1Ninguna - siempre “U”
ISA12Version Numberfixed”00401”5Ninguna - siempre “00401”
ISA13Interchange Control Numbervariablem_nIdSolicitudEDI9Transformación: num_to_string formato “09d”
ISA14Acknowledgment Requestedfixed”0”1Ninguna - siempre “0”
ISA15Test Indicatorfixed”P”1Ninguna - siempre “P”
ISA16Component Element Separatorfixed”|“1VARÍA: ”|”, ”:”, ”>” según carrier

Variaciones de ISA por Carrier:

  • ISA05/ISA07 = “02”: SAPLBN, PENSKE, XPOLOGISTICS, AUTOLIV, ADIENT, OOCL, PROTRANS (para PROTRANS siempre “02”)
  • ISA05/ISA07 = “01”: Todos los demás carriers
  • ISA16 = ”|”: Todos excepto AUTOLIV/ADIENT/OOCL
  • ISA16 = ”:”: AUTOLIV, ADIENT
  • ISA16 = ”>”: OOCL, PROTRANS (en PROTRANS se usa ”>” después de ISA)

Segmento GS - Functional Group Header

Posición: 2 (siempre) Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones por Carrier
GS01Functional Identifier Codefixed”QM” (214) / “FA” (997) / “GF” (990)Varía según tipo de documento
GS02Application Sender’s CodevariableVaría según carrierVARÍA: Ver tabla de variaciones
GS03Application Receiver’s CodevariableVaría según carrierVARÍA: Ver tabla de variaciones
GS04Datesystem_dateDateSys() formato “YYYYMMDD”Ninguna - siempre fecha actual
GS05Timesystem_timeTimeSys() formato “HHMM”Ninguna - siempre hora actual
GS06Group Control Numbervariablem_nIdSolicitudEDINinguna - siempre ID de solicitud
GS07Responsible Agency Codefixed”X”Ninguna - siempre “X”
GS08Version/Release/Industry IDfixed”004010”Ninguna - siempre “004010”

Variaciones de GS02/GS03 para EDI 214:

CarrierGS02 (Sender)GS03 (Receiver)Notas
PROTRANSsGSSCACdsEDIDetalle.InterchangeReceiverIDsGSSCAC = dsEDIDetalle.SCAC
JUSTRANSFORMdsEDIDetalle.InterchangeReceiverIDclCliente.m_sNombreCorto (si existe) o sGSSCACUsa nombre corto del cliente si está disponible
Todos los demássGSSCACdsEDIDetalle.InterchangeReceiverIDsGSSCAC puede variar (ver variaciones)

Variaciones de sGSSCAC:

  • XPOLOGISTICS: Siempre "AETMENLOPDX " (hardcodeado)
  • Todos los demás: dsEDIDetalle.SCAC

Segmento ST - Transaction Set Header

Posición: 3 (siempre) Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
ST01Transaction Set Identifier Codefixed”214”Ninguna - siempre “214”
ST02Transaction Set Control NumbervariabledsEDIDetalle.ReferenceNinguna - siempre Reference del detalle

Segmentos Específicos del EDI 214 - Detalle Completo

Segmento B10 - Beginning Segment for Transportation Carrier Shipment Status

Posición: 4 (siempre presente en EDI 214) Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
B1001Reference Identificationvariablem_sCarrierProNinguna
B1002Shipment Identification Numbervariablem_sIdentSolicitudNinguna
B1003Standard Carrier Alpha Codevariablem_sSCACAplicacion (PROTRANS) o sGSSCAC (otros)VARÍA: Ver variaciones

Variaciones B1003:

  • PROTRANS: m_sSCACAplicacion
  • Todos los demás: sGSSCAC (que puede ser dsEDIDetalle.SCAC o "AETMENLOPDX " para XPOLOGISTICS)

Segmento L11 - Business Instructions and Reference Number

Posición: Variable (múltiples instancias posibles) Requerido: Condicional Repetible: Sí (puede aparecer múltiples veces con diferentes qualifiers)

Este segmento tiene la mayor cantidad de variaciones condicionales en el EDI 214. El qualifier (L1102) determina el propósito del segmento.

Estructura base:

ElementoDescripciónTipoRequerido
L1101Reference Identificationvariable
L1102Reference Identification Qualifierfixed/variable

Variantes de L11 identificadas:

L11-RN (Run Number)

Qualifier: “RN” Carriers: RYDER, JUSTRANSFORM, PENSKE

Condición: Solo para RYDER cuando clCatEstatusViajeDetalle.m_sAbreviacion <> "X6"

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.RunNumberDebe existir
L1102”RN” (fixed)-
L11-MA (Manifest Number)

Qualifier: “MA” Carriers: PENSKE

Condición: dsEDIDetalle.RunNumber == "" Y system_param.SegmentoL11Penske == false

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.ManifestNumber-
L1102”MA” (fixed)-
L11-TN (Tracking Number / Customer Order)

Qualifier: “TN” Carriers: PENSKE (cuando no hay RunNumber)

Condición: dsEDIDetalle.RunNumber == ""

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.CustomerOrder-
L1102”TN” (fixed)-
L11-RN (Penske con RunNumber como qualifier)

Qualifier: Variable (el mismo RunNumber) Carriers: PENSKE

Condición: dsEDIDetalle.RunNumber != "" Y system_param.SegmentoL11Penske == true

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.RunNumber-
L1102dsEDIDetalle.RunNumber (el mismo valor)Código especial de PENSKE
L11-BM (Bill of Lading)

Qualifier: “BM” Carriers: PENSKE, PROTRANS

Condición:

  • PROTRANS: Siempre presente (después de B10)
  • PENSKE: Si clViaje.m_sIdentificador != ""

Elementos:

ElementoValor/SourceNotas
L1101PROTRANS: dsEDIDetalle.BOL
PENSKE: clViaje.m_sIdentificador
-
L1102”BM” (fixed)-
L11-SI (Shipment Identification)

Qualifier: “SI” Carriers: PROTRANS, XPOLOGISTICS

Condición:

  • PROTRANS: Siempre presente después de L11-BM
  • XPOLOGISTICS: Siempre presente

Elementos:

ElementoValor/SourceNotas
L1101PROTRANS: m_sIdentSolicitud
XPOLOGISTICS: dsEDIDetalle.CarrierID
-
L1102”SI” (fixed)-
L11-QN (Stop Sequence Number)

Qualifier: “QN” Carriers: Todos excepto XPOLOGISTICS (en ciertos casos)

Condición: dsEDIDetalle.StopNum != ""

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.StopNum-
L1102”QN” (fixed)-
L11-2I (Tracking Number)

Qualifier: “2I” Carriers: RYDER, PENSKE

Condición:

  • RYDER: Si dsEDIDetalle.TrackingNum != "" Y clCatEstatusViajeDetalle.m_sAbreviacion <> "X6"
  • PENSKE: Si dsEDIDetalle.TrackingNum != ""

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.TrackingNum-
L1102”2I” (fixed)-
L11-BN (Booking Number)

Qualifier: “BN” Carriers: XPOLOGISTICS

Condición: Solo para XPOLOGISTICS

Elementos:

ElementoValor/SourceNotas
L1101m_sIdentSolicitud-
L1102”BN” (fixed)-
L11-IX (Equipment Description)

Qualifier: “IX” Carriers: XPOLOGISTICS

Condición: Solo para XPOLOGISTICS

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.LadingDecription-
L1102”IX” (fixed)-
L11-MB (Master Bill)

Qualifier: “MB” Carriers: XPOLOGISTICS

Condición: Solo para XPOLOGISTICS

Elementos:

ElementoValor/SourceNotas
L1101m_sIdentSolicitud-
L1102”MB” (fixed)-
L11-PO (Purchase Order)

Qualifier: “PO” Carriers: XPOLOGISTICS

Condición: Solo para XPOLOGISTICS (puede repetirse múltiples veces)

Elementos:

ElementoValor/SourceNotas
L1101dsSolicitudesEDIDetalleL11.POObtenido de query GetListadoPOByIdSolicitudEDI (puede haber múltiples)
L1102”PO” (fixed)-
L11-ST (Shipment Tracking)

Qualifier: “ST” Carriers: XPOLOGISTICS

Condición: Solo para XPOLOGISTICS

Elementos:

ElementoValor/SourceNotas
L1101dsEDIDetalle.Reference-
L1102”ST” (fixed)-

Resumen de L11 por Carrier:

RYDER: L11-RN (si estatus <> "X6")
L11-2I (si TrackingNum <> "" y estatus <> "X6")
PENSKE: L11-RN o L11-MA o L11-TN (primer L11, según condiciones)
L11-BM (si clViaje.m_sIdentificador <> "")
L11-QN (si StopNum <> "")
L11-2I (si TrackingNum <> "")
JUSTRANSFORM: L11-RN (si estatus <> "X6")
PROTRANS: L11-BM (siempre)
L11-SI (siempre)
XPOLOGISTICS: L11-BN (siempre)
L11-IX (siempre)
L11-MB (siempre)
L11-PO (múltiples, uno por cada PO)
L11-SI (siempre)
L11-ST (siempre)
Otros: L11-QN (si StopNum <> "")

Segmento LX - Assigned Number

Posición: Variable (después de L11 iniciales) Requerido: Sí (excepto XPOLOGISTICS que no lo usa) Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
LX01Assigned Numberfixed/variableVaría según carrierVARÍA: Ver tabla

Variaciones LX01:

CarrierValorTipoNotas
RYDER”1”fixedSiempre “1”
PENSKE”1”fixedSiempre “1”
JUSTRANSFORM”1”fixedSiempre “1”
XPOLOGISTICSN/A-No se incluye este segmento
Todos los demásdsEDIDetalle.StopNumvariableUsa el número de parada

Segmento AT7 - Shipment Status Details

Posición: Variable (después de LX o L11 según carrier) Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
AT701Shipment Status CodevariableclCatEstatusViajeDetalle.m_sAbreviacionNinguna
AT702Shipment Status or Appointment Reason CodevariablesMotivoRetraso (default: “NS”)Ninguna
AT703Shipment Appointment Status Codefixed"" (vacío)NoNinguna
AT704Shipment Appointment Status Codefixed"" (vacío)NoNinguna
AT705DatevariabledtFechaHoraEstatus..Date formato “YYYYMMDD”Ninguna
AT706TimevariabletHoraEstatus formato “HHMM”Ninguna
AT707Time Codefixed”LT”, “CT”, o “UT”VARÍA: Ver tabla

Fuentes de datos:

  • clCatEstatusViajeDetalle: Objeto ClsCatEstatusViaje(nIdEstatusViaje) obtenido de clProViajesEstatus.m_nIdEstatuViaje
  • sMotivoRetraso:
    • Default: “NS”
    • Si clProViajesEstatus.m_sComentarioEstatus != "": usa ese valor
  • dtFechaHoraEstatus: clProViajesEstatus.m_dtFechaHora..Date
  • tHoraEstatus: clProViajesEstatus.m_dtFechaHora..Time

Variaciones AT707 (Time Code):

CarrierValorCondición
TRANSPLACE”LT”Local Time
PENSKE”LT”Local Time
PROTRANS”UT”UTC Time (usa dtUTC y formatea con Middle(dtUTC, 9, 4))
Todos los demás”CT”Central Time

Nota para PROTRANS: AT706 usa Middle(dtUTC, 9, 4) en lugar de TimeToString(), lo que sugiere un formato específico.


Segmento MS1 - Equipment, Shipment, or Real Property Location

Posición: Variable (después de AT7, excepto para SAPLBN que no lo incluye) Requerido: Condicional Repetible: No

Este segmento tiene lógica condicional compleja que varía según:

  1. El carrier
  2. El estatus del viaje (si es “X6” usa GPS)
  3. El tipo de carga/descarga (nCargaDescargaTMP)

Estructura base:

ElementoDescripciónTipoRequerido
MS101City NamevariableCondicional
MS102State or Province CodevariableCondicional
MS103Country CodevariableCondicional
MS104+GPS Coordinates (formato DMS)calculatedSolo si estatus = “X6”

Variaciones de MS1:

MS1 con GPS (Estatus X6)

Carriers: RYDER, PENSKE Condición: clCatEstatusViajeDetalle.m_sAbreviacion == "X6"

Formato: MS1****0*0*W*N (formato especial GPS en Grados-Minutos-Segundos)

Fuente: sUltimaUbicacion (hardcodeado como "MS1****0*0*W*N"+CR)

Nota: Si sUltimaUbicacion == "", el segmento no se incluye y se ajusta el contador SE.

MS1 con Ubicación (City/State/Country)

Condición: clCatEstatusViajeDetalle.m_sAbreviacion <> "X6" o carrier no soporta GPS

Lógica condicional:

flowchart TD
    A[Inicio MS1] --> B{Carrier == PENSKE?}
    B -->|Sí| C{Estatus == X6?}
    C -->|Sí| D[MS1 GPS]
    C -->|No| E{nCargaDescargaTMP == 1?}
    E -->|Sí| F[ShipFromCity/State/Country]
    E -->|No| G{nCargaDescargaTMP == 2?}
    G -->|Sí| H[ShipToCity/State/Country]
    G -->|No| I[ShipFromCity/State/Country]

    B -->|No| J{Carrier == XPOLOGISTICS?}
    J -->|Sí| K{clCatEstatusViaje.nCargaDescarga == 1?}
    K -->|Sí| F
    K -->|No| L{clCatEstatusViaje.nCargaDescarga == 2?}
    L -->|Sí| H

    J -->|No| M{Carrier == RYDER?}
    M -->|Sí| N{Estatus == X6?}
    N -->|Sí| D
    N -->|No| E

    M -->|No| O{Carrier == SAPLBN?}
    O -->|Sí| P[No incluir MS1]
    O -->|No| E

Elementos según condición:

CondiciónMS101 (City)MS102 (State)MS103 (Country)
nCargaDescargaTMP == 1 (Carga)dsEDIDetalle.ShipFromCitydsEDIDetalle.ShipFromStatedsEDIDetalle.ShipFromCountry
nCargaDescargaTMP == 2 (Descarga)dsEDIDetalle.ShipToCitydsEDIDetalle.ShipToStatedsEDIDetalle.ShipToCountry
Otros casosdsEDIDetalle.ShipFromCitydsEDIDetalle.ShipFromStatedsEDIDetalle.ShipFromCountry
PROTRANS (alternativo)dsEDIDetalle.ShipToCity (si ShipToCity <> "") o dsEDIDetalle.ShipFromCityCorrespondienteCorrespondiente

Carriers que NO incluyen MS1:

  • SAPLBN: Nunca incluye MS1

Segmento MS2 - Equipment or Container Owner and Type

Posición: Variable (después de MS1, o después de AT7 si no hay MS1) Requerido: Sí (excepto para SAPLBN que no lo incluye) Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
MS201Standard Carrier Alpha CodevariabledsEDIDetalle.IdentificadorSCACNinguna
MS202Equipment NumbervariablesCodigoUnidadPintarMs2VARÍA: Ver obtención de código
MS203Equipment Description Codefixed”TL”Ninguna (excepto PROTRANS que usa variable)

Variaciones MS202 (Código de Unidad):

CarrierFuenteMétodo de Obtención
RYDER, JUSTRANSFORM, PENSKEClsCatUnidades::GetCodigoByIdUnidad(clViaje.m_nIdUnidadCarga1)Función estática
AUTOLIV, PROTRANSclCatRemplque.m_sCodigoDe objeto ClsCatUnidades(clViaje.m_nIdUnidadCarga1)
Todos los demásClsCatUnidades::GetCodigoByIdUnidad(clViaje.m_nIdUnidadCarga1)Función estática

Variaciones MS203 (Solo PROTRANS):

  • PROTRANS: sEquivalenciaEDIMS02 obtenido de clTipoUnidadRemolque.m_sEquivalenciaEDI
  • Todos los demás: “TL” (fixed)

Nota: SAPLBN no incluye este segmento.


Segmento N1/N3/N4 - Name and Address Information

Carriers: PROTRANS, XPOLOGISTICS Posición: Variable (solo para estos carriers) Requerido: Sí (solo para estos carriers)

Estos segmentos aparecen en dos grupos:

N1/N3/N4 - SF (Ship From)

Condición: dsEDIDetalle.StopReason contiene “Load”, “Complete”, o “Part Load”

SegmentoElementoDescripciónValor/Source
N1N101Entity Identifier Code”SF” (fixed)
N1N102NamedsEDIDetalle.ShipFromName
N1N103Identification Code Qualifier”ZZ” (fixed)
N1N104Identification CodedsEDIDetalle.LocationIdValue
N3N301Address InformationdsEDIDetalle.ShipFromAddress1
N4N401City NamedsEDIDetalle.ShipFromCity
N4N402State or Province CodedsEDIDetalle.ShipFromState
N4N403Postal CodedsEDIDetalle.ShipFromZip
N4N404Country CodedsEDIDetalle.ShipFromCountry
N1/N3/N4 - CN (Contact Name)

Condición: Misma lógica que SF (usa mismo StopReason)

Estructura igual a SF pero usando campos ShipTo o ShipFrom según StopReason.

N1/N3/N4 - XPOLOGISTICS (Hardcoded)

Carrier: XPOLOGISTICS Nota: Estos valores están hardcodeados en el código

SegmentoElementoValor Hardcodeado
N1-SHN101”SH”
N1-SHN102”LEAR CORPORATION”
N3N301”1110 WOODMERE AVE”
N4N401-N404Usa dsEDIDetalle.BillToCity/State/Zip/Country
N1-CNN101”CN”
N1-CNN102”MNW DEL RIO”
N3N301”2200 CIENEGAS ROAD”
N4N401-N404Usa dsEDIDetalle.BillToCity/State/Zip/Country

Segmento MS3 - Interline Service Provider

Carriers: PROTRANS Posición: Variable (solo PROTRANS) Requerido: Sí (solo PROTRANS)

ElementoDescripciónValor/SourceRequerido
MS301Standard Carrier Alpha CodesGSSCAC
MS302Service Code”O” (fixed)
MS303Service Code"" (vacío)No
MS304Service Code”M” (fixed)

Segmento AT8 - Shipment Status or Appointment Time

Carriers: XPOLOGISTICS, PROTRANS Posición: Variable (solo estos carriers) Requerido: Sí (solo estos carriers)

Para PROTRANS:

ElementoDescripciónTipoValor/SourceRequerido
AT801Weight Qualifierfixed”G”
AT802Unit or Basis for Measurement CodevariabledsEDIDetalle.WeightUOM
AT803WeightvariabledsEDIDetalle.Weight
AT804Lading QuantityvariableVal(dsEDIDetalle.Pieces)
AT805Volumefixed"" (vacío)No
AT806Volume (numérico)variableVal(dsEDIDetalle.Volume)

Para XPOLOGISTICS:

ElementoDescripciónTipoValor/SourceRequerido
AT801Weight QualifiervariabledsEDIDetalle.WeightQualifier
AT802Unit or Basis for Measurement CodevariabledsEDIDetalle.WeightUnitCode
AT803WeightvariabledsEDIDetalle.Weight
AT804Lading QuantityvariabledsEDIDetalle.LadingQuantity

Segmento SE - Transaction Set Trailer

Posición: Último segmento antes de GE Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
SE01Number of Included SegmentscalculatedContador de segmentos + 1VARÍA: Ver tabla
SE02Transaction Set Control NumbervariabledsEDIDetalle.ReferenceNinguna

Variaciones SE01:

CarrierCálculoNotas
TRANSPLACE (2), ALCLOGISTICS (3)nRenglon - 1Usa variable nRenglon que se decrementa cuando segmentos opcionales no se incluyen
Todos los demásnContadorST_SE + 1Usa contador que se incrementa por cada segmento incluido

Nota: nRenglon se inicializa en 9 y se decrementa cuando segmentos opcionales (L11, MS1) no se incluyen porque sus valores están vacíos.


Segmento GE - Functional Group Trailer

Posición: Después de SE Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
GE01Number of Transaction Sets Includedfixed”1”Ninguna - siempre “1”
GE02Group Control Numbervariablem_nIdSolicitudEDINinguna

Segmento IEA - Interchange Control Trailer

Posición: Último segmento Requerido:Repetible: No

ElementoDescripciónTipoValor/SourceRequeridoVariaciones
IEA01Number of Included Functional Groupsfixed”1”Ninguna - siempre “1”
IEA02Interchange Control Numbervariablem_nIdSolicitudEDI formato “09d”Ninguna
(Terminador)Segment Terminatorfixed”~” o “\n” o nada-VARÍA: Ver tabla

Variaciones del terminador después de IEA:

CarrierTerminadorCondición
RYDER\n + ~Siempre
PENSKE\n + ~Si system_param.SegmentoL11Penske == false
PENSKESolo \nSi system_param.SegmentoL11Penske == true
SAPLBNSolo \nSiempre
Todos los demásNada (sin terminador adicional)-

Flujo de Generación EDI 214 por Carrier

flowchart TD
    A[Inicio ActualizarEstatus] --> B{Carrier == UPS?}
    B -->|Sí| C[getEDIUPS - método especial]
    B -->|No| D{Carrier == PROTRANS?}
    D -->|Sí| E[Formato PROTRANS con N1/N3/N4/MS3]
    D -->|No| F{Carrier == AUTOLIV/ADIENT/OOCL/SAPLBN?}
    F -->|Sí| G[Formato especial con separadores : o >]
    F -->|No| H[Formato estándar]

    E --> I[Generar ISA con >]
    I --> J[Generar GS]
    J --> K[Generar ST*214]
    K --> L[Generar B10]
    L --> M[Generar L11-BM]
    M --> N[Generar L11-SI]
    N --> O[Generar N1/N3/N4-SF según StopReason]
    O --> P[Generar N1/N3/N4-CN según StopReason]
    P --> Q[Generar MS3]
    Q --> R[Generar LX*1]
    R --> S[Generar AT7 con UT]
    S --> T{Generar MS1 según condición}
    T --> U[Generar MS2]
    U --> V[Generar L11-QN]
    V --> W[Generar AT8]
    W --> X[Generar SE/GE/IEA]

    H --> Y[Generar ISA estándar]
    Y --> Z[Generar GS]
    Z --> AA{Carrier == JUSTRANSFORM?}
    AA -->|Sí| AB{clCliente.m_sNombreCorto existe?}
    AB -->|Sí| AC[GS03 = NombreCorto]
    AB -->|No| AD[GS03 = sGSSCAC]
    AA -->|No| AD
    AC --> AE[Generar ST*214]
    AD --> AE
    AE --> AF[Generar B10]
    AF --> AG{Carrier == RYDER/JUSTRANSFORM/PENSKE?}
    AG -->|Sí| AH[Generar L11 según lógica PENSKE]
    AG -->|No| AI{Carrier == XPOLOGISTICS?}
    AI -->|Sí| AJ[Generar múltiples L11: BN, IX, MB, PO, SI, ST]
    AI -->|No| AK[Generar L11-QN si StopNum existe]
    AH --> AL{Carrier == RYDER/PENSKE?}
    AL -->|Sí| AM[LX*1]
    AL -->|No| AN{Carrier == XPOLOGISTICS?}
    AN -->|Sí| AO[No LX, generar N1/N3/N4 hardcodeados]
    AN -->|No| AP[LX*StopNum]
    AJ --> AO
    AO --> AQ[Generar MS3 y LX*1]
    AM --> AR[Generar AT7]
    AP --> AR
    AQ --> AR
    AR --> AS{Carrier == TRANSPLACE/PENSKE?}
    AS -->|Sí| AT[AT707 = LT]
    AS -->|No| AU[AT707 = CT]
    AT --> AV{Carrier == SAPLBN?}
    AU --> AV
    AV -->|Sí| AW[No MS1]
    AV -->|No| AX[Generar MS1 según condiciones]
    AW --> AY[No MS2]
    AX --> AZ[Generar MS2]
    AZ --> BA{Carrier == RYDER/PENSKE?}
    BA -->|Sí| BB[Generar L11-BM, L11-QN, L11-2I según condiciones]
    BA -->|No| BC{Carrier == XPOLOGISTICS?}
    BC -->|Sí| BD[Generar AT8]
    BC -->|No| BE[Generar L11-QN si StopNum existe]
    BB --> BF[Generar SE/GE/IEA]
    BD --> BF
    BE --> BF
    AY --> BF
    BF --> BG{Carrier == RYDER/PENSKE/SAPLBN?}
    BG -->|Sí| BH{Carrier == PENSKE?}
    BH -->|Sí| BI{SegmentoL11Penske == false?}
    BI -->|Sí| BJ[IEA + ~]
    BI -->|No| BK[IEA sin ~]
    BH -->|No| BJ
    BG -->|No| BK

Fuentes de Datos para EDI 214

Query Principal

Nombre: GetListadoDetalleEdiByIdSolicitudEDI Clase: ClsProSolicitudesEDI (método estático) Parámetros:

  • nIdSolicitudEDI (int): ID de la solicitud EDI
  • nCargaDescarga (int): Tipo de carga/descarga (0=ambos, 1=carga, 2=descarga)
  • nStopNumEDI (int): Número de parada EDI (0=primera)

Retorna: Data Source dsEDIDetalle con campos de ProSolicitudesEDIDetalles

Queries/Objetos Adicionales

NombreClaseParámetroPropósito
clProViajesEstatusClsProViajesEstatusnIdProViajesEstatusInformación del estatus del viaje (fecha/hora, comentarios, motivo)
clCatEstatusViajeDetalleClsCatEstatusViajeclProViajesEstatus.m_nIdEstatuViajeDetalles del estatus (abreviación, tipo carga/descarga)
clViajeClsProViajesnIdViajeInformación del viaje (cliente, unidades, remitente, destinatario)
clClienteClsCatClientesclViaje.m_nIdClienteInformación del cliente (nombre corto para JUSTRANSFORM)
clRemitenteClsCatRemitentesDestinatariosclViaje.m_nIdRemitenteDatos del remitente
clDestinatarioClsCatRemitentesDestinatariosclViaje.m_nIdDestinatarioDatos del destinatario
clCatRemplqueClsCatUnidadesclViaje.m_nIdUnidadCarga1Información de la unidad (solo AUTOLIV/PROTRANS)
clTipoUnidadRemolqueClsCatTiposUnidadesclCatRemplque.m_nIdTipoUnidadEquivalencia EDI del tipo de unidad (solo PROTRANS)
dsSolicitudesEDIDetalleL11Query GetListadoPOByIdSolicitudEDIm_nIdSolicitudEDILista de POs (solo XPOLOGISTICS)
dsUnloadQuery GetUnloadm_nIdSolicitudEDIDatos de descarga (solo PROTRANS)

Parámetros del Sistema

ParámetroTipoDefaultPropósito
SegmentoL11PenskebooleanfalseSi es true, L11 para PENSKE usa RunNumber como qualifier
GenerarArchivoFormatoISAbooleanfalseIndica si se debe generar formato ISA (vs formato simple)
URLServiciosWEBClienteEDIstring-URL del servicio SOAP para enviar el archivo

Mapeo Completo de Elementos a Fuentes de Datos

Propiedades de la Clase ClsProSolicitudesEDI

PropiedadTipoFuenteUso
m_nIdSolicitudEDIintConstructor o agregar()ID de la solicitud EDI
m_sIdentSolicitudstringProSolicitudesEDI.IdentSolicitudIdentificador de solicitud
m_sCarrierProstringProSolicitudesEDI.CarrierProCarrier Pro
m_sSCACAplicacionstringProSolicitudesEDI.SCACAplicacionSCAC de aplicación
m_nCarrierAplicacionintProSolicitudesEDI.CarrierAplicacionID del carrier
m_sTipostringProSolicitudesEDI.TipoTipo (usado en AUTOLIV/ADIENT para ISA15)

Campos del Data Source dsEDIDetalle

Todos los campos provienen de ProSolicitudesEDIDetalles obtenido mediante GetListadoDetalleEdiByIdSolicitudEDI.

Campos principales utilizados:

  • Reference, SCAC, IdentificadorSCAC, InterchangeReceiverID, InterchangeIDQualifier
  • BOL, RunNumber, ManifestNumber, CustomerOrder, StopNum, TrackingNum, CarrierID
  • ShipFrom*, ShipTo*, BillTo* (direcciones)
  • LocationIdValue, LadingDecription
  • Weight, WeightUOM, WeightQualifier, WeightUnitCode, Volume, Pieces, LadingQuantity

Ejemplo de Estructura Completa EDI 214 (PENSKE)

Orden de segmentos para PENSKE:

  1. ISA
  2. GS
  3. ST
  4. B10
  5. L11 (RN, MA, o TN según condiciones)
  6. LX
  7. AT7
  8. MS1 (GPS si X6, o ubicación según carga/descarga)
  9. MS2
  10. L11-BM (si existe identificador)
  11. L11-QN (si StopNum existe)
  12. L11-2I (si TrackingNum existe)
  13. SE
  14. GE
  15. IEA (con/sin ~ según parámetro)

Documento EDI 997

Información General

  • Código: 997
  • Nombre: Functional Acknowledgment
  • Propósito: Confirmar la recepción de un mensaje EDI
  • Cuándo se genera: Automáticamente cuando se agrega una nueva solicitud EDI (método agregar())
  • Método generador: ClsProSolicitudesEDI::generarISA997()
  • Enviado por: SOAP al método Aceptar (con bAgregarViajes = false)

Estructura de Segmentos

Orden de segmentos:

  1. ISA - Interchange Control Header
  2. GS - Functional Group Header (GS01 = “FA”)
  3. ST - Transaction Set Header (ST01 = “997”)
  4. AK1 - Functional Group Response Header
  5. AK2 - Transaction Set Response Header (solo XPOLOGISTICS)
  6. AK5 - Transaction Set Response Trailer (solo XPOLOGISTICS)
  7. AK9 - Functional Group Response Trailer
  8. SE - Transaction Set Trailer
  9. GE - Functional Group Trailer
  10. IEA - Interchange Control Trailer

Segmentos Específicos del EDI 997

Segmento ISA (EDI 997)

Similar al EDI 214, pero con algunas diferencias:

| Elemento | Valor/Source | Variaciones | | -------- | ------------------------------------- | ---------------------------------------------- | --------- | --- | | ISA05 | “01” | Siempre “01” (no varía) | | ISA06 | dsEDIDetalle.InterchangeReceiverID | Completa a 15 caracteres | | ISA07 | dsEDIDetalle.InterchangeIDQualifier | - | | ISA08 | dsEDIDetalle.SCAC | Completa a 15 caracteres, o vacío si no existe | | ISA13 | nIdSolicitudEDI formato “09d” | - | | ISA16 | ” | ” | Siempre ” | ” |

Segmento GS (EDI 997)

ElementoDescripciónValor/SourceVariaciones
GS01Functional Identifier Code”FA” (fixed)Siempre “FA” para 997
GS02Application Sender’s CodedsEDIDetalle.InterchangeReceiverID-
GS03Application Receiver’s CodedsEDIDetalle.SCAC (o vacío)-
GS04DateDateSys() formato “YYYYMMDD”-
GS05TimeTimeSys() formato “HHMM”-
GS06Group Control NumbernIdSolicitudEDI-
GS07Responsible Agency Code”X” (fixed)-
GS08Version/Release/Industry ID”004010” (fixed)-

Segmento ST (EDI 997)

ElementoDescripciónValor/Source
ST01Transaction Set Identifier Code”997” (fixed)
ST02Transaction Set Control NumbernIdSolicitudEDI + "001"

Segmento AK1 - Functional Group Response Header

ElementoDescripciónValor/SourceVariaciones
AK101Functional Identifier Code”SM” (fixed)Siempre “SM”
AK102Group Control NumbersReferece (Reference sin ceros iniciales)Se limpian ceros iniciales

Transformación de Reference:

  • Se eliminan ceros iniciales del campo dsEDIDetalle.Reference
  • Si Reference está vacío, se usa cadena vacía

Segmento AK2 - Transaction Set Response Header

Carrier: XPOLOGISTICS Requerido: Solo para XPOLOGISTICS Posición: Después de AK1

ElementoDescripciónValor/Source
AK201Transaction Set Identifier Code”204” (fixed)
AK202Transaction Set Control NumberdsEDIDetalle.IdentSolicitud

Segmento AK5 - Transaction Set Response Trailer

Carrier: XPOLOGISTICS Requerido: Solo para XPOLOGISTICS (aparece si hay AK2) Posición: Después de AK2

ElementoDescripciónValor/Source
AK501Transaction Set Acknowledgment Code”A” (fixed)
AK502Transaction Set Syntax Error Code”5” (fixed)

Segmento AK9 - Functional Group Response Trailer

ElementoDescripciónValor/SourceVariaciones
AK901Functional Group Acknowledgment CodesRespuestaValores posibles: “A” (Aceptado), “D” (Rechazado)
AK902Number of Transaction Sets Included”1” (fixed)-
AK903Number of Received Transaction Sets”1” (fixed)-
AK904Number of Accepted Transaction Sets”1” (fixed)-

Segmento SE (EDI 997)

ElementoDescripciónValor/Source
SE01Number of Included Segments”4” (fixed)
SE02Transaction Set Control NumbernIdSolicitudEDI + "001"

Nota: El número de segmentos es fijo en 4 (ST, AK1, AK9, SE) o 6 si es XPOLOGISTICS (ST, AK1, AK2, AK5, AK9, SE).

Segmento GE (EDI 997)

ElementoDescripciónValor/Source
GE01Number of Transaction Sets Included”1” (fixed)
GE02Group Control NumbernIdSolicitudEDI

Segmento IEA (EDI 997)

ElementoDescripciónValor/SourceVariaciones
IEA01Number of Included Functional Groups”1” (fixed)-
IEA02Interchange Control NumbernIdSolicitudEDI formato “09d”-
(Terminador)--VARÍA: Ver tabla

Variaciones del terminador:

CarrierTerminador
RYDER, PENSKE\n + ~
Todos los demásNada (sin terminador adicional)

Variaciones por Carrier - EDI 997

CarrierVariaciones Específicas
XPOLOGISTICSIncluye segmentos AK2 y AK5 adicionales
RYDER, PENSKEAgrega ~ después de IEA
Todos los demásSin variaciones especiales

Fuentes de Datos para EDI 997

  • Data Source: dsSolicitudesEDIDetalle (de ProSolicitudesEDIDetalles)
  • SCAC: Parámetro sSCAC o dsEDIDetalle.SCAC
  • Reference: dsEDIDetalle.Reference (se limpian ceros iniciales)
  • ID Solicitud: nIdSolicitudEDI (parámetro del método)
  • Respuesta: sRespuesta (parámetro: “A” o “D”)

Documento EDI 990

Información General

  • Código: 990
  • Nombre: Response to a Load Tender
  • Propósito: Responder a una oferta de carga (aceptar o rechazar)
  • Cuándo se genera:
    • Cuando se acepta una solicitud EDI (método aceptar())
    • Cuando se rechaza una solicitud EDI (método rechazar())
  • Método generador: ClsProSolicitudesEDI::generarISA990()
  • Enviado por: SOAP al método Aceptar o Rechazar

Respuestas Posibles

CódigoSignificadoUso
AAceptadoSolicitud aceptada
DRechazado/CanceladoSolicitud rechazada
RRun(Solo XPOLOGISTICS)
CReject(Solo XPOLOGISTICS)

Estructura de Segmentos

Orden de segmentos base:

  1. ISA - Interchange Control Header
  2. GS - Functional Group Header (GS01 = “GF”)
  3. ST - Transaction Set Header (ST01 = “990”)
  4. B1 - Beginning Segment for Booking or Pick-up/Delivery
  5. N9 - Reference Identification (condicional según carrier)
  6. G62 - Date/Time Reference (solo XPOLOGISTICS)
  7. V9 - Event Detail (solo XPOLOGISTICS)
  8. K1 - Remarks (solo PENSKE si rechazado)
  9. SE - Transaction Set Trailer
  10. GE - Functional Group Trailer
  11. IEA - Interchange Control Trailer

Variaciones Importantes

El EDI 990 tiene dos estructuras principales:

  1. Formato Especial: AUTOLIV, ADIENT, OOCL
  2. Formato Estándar: Todos los demás carriers

Segmentos Detallados - Formato Especial (AUTOLIV/ADIENT/OOCL)

Segmento ISA (Formato Especial)

ElementoValor/SourceVariaciones
ISA05sISAIdent5”02” (fixed para estos carriers)
ISA06AUTOLIV/ADIENT: dsEDIDetalle.InterchangeReceiverID
OOCL: m_sSCACAplicacion
Completa a 15 caracteres
ISA07”ZZ” (fixed)Siempre “ZZ”
ISA08AUTOLIV/ADIENT: dsEDIDetalle.SCAC
OOCL: sISAIdent8 (“OOCLIES”)
Completa a 15 caracteres
ISA15AUTOLIV/ADIENT: m_sTipo
OOCL: “P” (fixed)
-
ISA16AUTOLIV/ADIENT: ”:“
OOCL: ”>“
Separador específico
ISA17”~” (fixed)Terminador de línea adicional

Segmento GS (Formato Especial)

ElementoValor/SourceVariaciones
GS01”GF” (fixed)Siempre “GF” para 990
GS02AUTOLIV/ADIENT: dsEDIDetalle.InterchangeReceiverID
OOCL: m_sSCACAplicacion
-
GS03AUTOLIV/ADIENT: dsEDIDetalle.SCAC
OOCL: sISAIdent8 (“OOCLIES”)
-
(Después de GS08)”~” + CRTerminador adicional

Segmento ST (Formato Especial)

| Elemento | Valor/Source | | ----------------- | ------------------------------- | -------------------- | | ST01 | “990” (fixed) | | ST02 | nIdSolicitudEDI formato “09d” | | (Después de ST02) | ”~” + CR | Terminador adicional |

Segmento B1 (Formato Especial)

ElementoValor/SourceVariaciones
B101OOCL: m_sSCACAplicacion
Otros: dsEDIDetalle.InterchangeReceiverID
-
B102dsEDIDetalle.CarrierPro-
B103DateSys() formato “YYYYMMDD”-
B104sRespuesta (“A” o “D”)-
(Después de B104)”~” + CRTerminador adicional

Segmento N9 (Formato Especial)

Condición: Solo si sRespuesta == "A" y carrier es AUTOLIV o ADIENT

| Elemento | Valor/Source | | ----------------- | ------------------------- | -------------------- | | N901 | “CN” (fixed) | | N902 | dsEDIDetalle.CarrierPro | | (Después de N902) | ”~” + CR | Terminador adicional |

Segmento SE/GE/IEA (Formato Especial)

Todos incluyen ”~” después de cada segmento y CR adicional.


Segmentos Detallados - Formato Estándar

Segmento ISA (Formato Estándar)

| Elemento | Valor/Source | Variaciones | | -------- | ------------------------------------- | ----------------------------------- | --------- | --- | | ISA05 | sISAIdent5 | “01” (default) o “02” según carrier | | ISA06 | dsEDIDetalle.InterchangeReceiverID | Completa a 15 caracteres | | ISA07 | dsEDIDetalle.InterchangeIDQualifier | - | | ISA08 | dsEDIDetalle.SCAC | Completa a 15 caracteres | | ISA16 | ” | ” (fixed) | Siempre ” | ” |

Variaciones ISA05:

  • “02”: SAPLBN, PENSKE, XPOLOGISTICS, AUTOLIV, ADIENT, OOCL
  • “01”: Todos los demás

Segmento GS (Formato Estándar)

ElementoValor/SourceVariaciones
GS01”GF” (fixed)Siempre “GF” para 990
GS02dsEDIDetalle.InterchangeReceiverID-
GS03JUSTRANSFORM: clCliente.m_sNombreCorto (si existe) o sGSSCAC
Otros: sGSSCAC
VARÍA: Ver tabla

Variaciones GS03:

  • JUSTRANSFORM: Usa clCliente.m_sNombreCorto si está disponible, sino sGSSCAC
  • XPOLOGISTICS: sGSSCAC = "AETMENLOPDX " (hardcodeado)
  • Otros: sGSSCAC = dsEDIDetalle.SCAC

Segmento ST (Formato Estándar)

ElementoValor/Source
ST01”990” (fixed)
ST02clViaje.m_nViaje formato “08d”

Nota: nNumeroViaje es en realidad el ID del viaje, se crea objeto ClsProViajes para obtener m_nViaje.

Segmento B1 (Formato Estándar)

ElementoValor/SourceVariaciones
B101dsEDIDetalle.IdentificadorSCAC-
B102PENSKE: dsEDIDetalle.CarrierPro
SAPLBN: m_sIdentSolicitud
Otros: dsEDIDetalle.CarrierPro
VARÍA: Ver tabla
B103PENSKE: DateSys() formato “YYYYMMDD”
Otros: "" (vacío)
VARÍA: Ver tabla
B104sRespuesta-

Variaciones B1:

CarrierB101B102B103B104
PENSKEIdentificadorSCACCarrierProFecha actualsRespuesta
SAPLBNIdentificadorSCACm_sIdentSolicitud"" (vacío)sRespuesta
OtrosIdentificadorSCACCarrierPro"" (vacío)sRespuesta

Segmento N9 - Reference Identification

Condición: Siempre presente excepto PENSKE en algunos casos

ElementoValor/SourceVariaciones
N901Qualifier (varía)VARÍA: Ver tabla
N902Valor (varía)VARÍA: Ver tabla

Variaciones N9:

CarrierCondiciónN901N902
JUSTRANSFORM, RYDERSiempre”TN”dsEDIDetalle.CustomerOrder
PENSKENunca se incluye--
SAPLBNSiempre”06”m_sCarrierPro
OtrosSiempre”CN”m_sCarrierPro

Segmento G62 - Date/Time Reference

Carrier: XPOLOGISTICS Requerido: Solo para XPOLOGISTICS

ElementoValor/Source
G6201”07” (fixed)
G6202DateSys() formato “YYYYMMDD”
G6203”W” (fixed)
G6204TimeSys() formato “HHMM”
G6205”ET” (fixed)

Segmento V9 - Event Detail

Carrier: XPOLOGISTICS Requerido: Solo para XPOLOGISTICS Posición: Después de G62

ElementoValor/SourceVariaciones
V901Event CodeVARÍA: Según sRespuesta

Valores de V901 según respuesta:

RespuestaV901
”A” (Aceptado)“ACC"
"R” (Run)“RUN"
"C” (Reject)“REJ”

Segmento K1 - Remarks

Carrier: PENSKE Condición: Solo si sRespuesta == "D" (rechazado)

| Elemento | Valor/Source | | -------- | ------------------------- | ------------------------------- | | K101 | “REJECT” (fixed) | | K102 | sClaveMotivoCancelacion | Clave del motivo de cancelación |

Segmento SE/GE/IEA (Formato Estándar)

SE:

  • SE01: nContadorST_SE + 1 (calculado)
  • SE02: clViaje.m_nViaje formato “08d”

GE:

  • GE01: “1” (fixed)
  • GE02: nIdSolicitudEDI

IEA:

  • IEA01: “1” (fixed)
  • IEA02: nIdSolicitudEDI formato “09d”
  • Terminador: RYDER y PENSKE agregan \n, otros no agregan terminador

Transformación de Reference en EDI 990

Se limpian ceros iniciales del Reference:

  • Si Reference[0] == "0" y Reference[1] == "0": se eliminan los primeros 2 caracteres
  • Si solo Reference[0] == "0": se elimina el primer carácter

Fuentes de Datos para EDI 990

  • Data Source: dsSolicitudesEDIDetalle (de ProSolicitudesEDIDetalles)
  • Objeto Viaje: clViaje = ClsProViajes(nNumeroViaje) - NOTA: nNumeroViaje es realmente el ID del viaje
  • Objeto Cliente: clCliente = ClsCatClientes(clViaje.m_nIdCliente) - Solo para JUSTRANSFORM
  • Respuesta: sRespuesta (“A”, “D”, “R”, “C”)
  • Clave Motivo: sClaveMotivoCancelacion - Solo para PENSKE si rechazado

Documento EDI 210

Información General

  • Código: 210
  • Nombre: Motor Carrier Freight Details and Invoice
  • Propósito: Enviar detalles de flete y factura a carriers de transporte para facturación electrónica
  • Cuándo se genera: Cuando el proceso “FacturacionEDI” recibe una factura (parámetros RFCEmpresa, Factura, IdFactura)
  • Método generador: PAGE_ProcesosEDI::GeneraISA210()
  • Salida: Archivo guardado en gsPathWEBAC+gsEmpresa+\EDI210\ y envío por FTP según configuración en CatClientesFacturacionEDI

Carriers Soportados (EDI 210)

IDNombreProcedimiento
1TraxtechISA210Traxtech
2RoutegisticsISA210Routegistics
3AutolivISA210Autoliv
4OOCLISA210OOCL
5SpectrumISA210Spectrum
6SumitomoISA210Sumitomo
7ContinentalISA210Continental
8StellantisISA210Stellantis
9CHRobinsonISA210CHROBINSON

Estructura General de Segmentos

Orden de segmentos base:

  1. ISA - Interchange Control Header
  2. GS - Functional Group Header (GS01 = “IM”)
  3. ST - Transaction Set Header (ST01 = “210”)
  4. B3 - Beginning Segment for Motor Freight Details and Invoice
  5. C2/C3 - Currency (condicional)
  6. N9 - Reference Identification (condicional, múltiples variantes)
  7. G62 - Date/Time Reference (condicional)
  8. H3 - Hazardous Classification (solo Autoliv)
  9. R3 - Route Information (condicional)
  10. N1, N3, N4 - Name/Address Information (BT, SH, CN)
  11. N7 - Equipment Details (condicional)
  12. [Loop LX] - LX, L5, L0, L1, L7 (conceptos de facturación)
  13. L3 - Total Weight and Charges
  14. SE - Transaction Set Trailer
  15. GE - Functional Group Trailer
  16. IEA - Interchange Control Trailer

Segmentos Específicos del EDI 210

Segmento ISA (EDI 210)

ElementoValor/SourceVariaciones por Carrier
ISA05”02” (fixed)Siempre “02” en implementaciones actuales
ISA06sScacCliente o sSCACApp (OOCL)Completa a 15 caracteres; OOCL usa SCAC de aplicación
ISA07”ZZ” (fixed)Mayoría de carriers
ISA08Variable por carrierVARÍA: sHonaero (Traxtech), INSOURCEAUDIT (Routegistics/Sumitomo), FMXATLVT (Autoliv), OOCLIES (OOCL), sSpectrumID (Spectrum), CTSI0486 (Continental/CHRobinson), MS158145 (Stellantis), RBTW (CHRobinson)
ISA13gnIdFactura formato “09d”-
ISA15”P” o “T”Autoliv usa “T” para test
ISA16”:”, ”~”, ”>”, CRVARÍA: : (Continental/CHRobinson), ~ (Spectrum/Stellantis), > (OOCL), ¦ (Autoliv)

Segmento GS (EDI 210)

ElementoDescripciónValor/SourceVariaciones
GS01Functional Identifier Code”IM” (fixed)Siempre “IM” para Motor Carrier Freight
GS02Application Sender’s CodesScacCliente-
GS03Application Receiver’s CodeVariable por carrierVARÍA: sHonaero, INSOURCEAUDIT, FMXATLVT, OOCLIES, sSpectrumID, CTSI0486, MS158145, RBTW
GS04DateDateSys() YYYYMMDD-
GS05TimeTimeSys() HHMM/HHMMSSContinental/Stellantis/CHRobinson usan HHMMSS
GS06Group Control NumbergnIdFactura-
GS07Responsible Agency Code”X” (fixed)-
GS08Version/Release/Industry ID”004010” o “00400”Spectrum usa “00400”

Segmento ST (EDI 210)

ElementoDescripciónValor/Source
ST01Transaction Set Identifier Code”210” (fixed)
ST02Transaction Set Control NumbergnIdFactura formato “04d” o “09d”

Segmento B3 - Beginning Segment for Motor Freight Details and Invoice

ElementoDescripciónTipoValor/SourceVariaciones
B301Transaction Set Purpose Codevariable"" o “B”Vacío (Traxtech/Spectrum), “B” (Autoliv/OOCL/Continental/Stellantis/CHRobinson)
B302Shipment Identification NumbervariableclFolio.m_nFolioInicial o clFolio.m_sSerie + clFolio.m_nFolioInicialFormato 10 dígitos en Routegistics
B303Shipment Method of PaymentvariablesViaje-
B304Weight QualifiervariablesMetodoPago (CC/PP) o “L”Routegistics/Sumitomo/Continental/Stellantis usan “L”
B305Freight Rate Codevariable"" o “K”Spectrum usa “K”
B306DatevariableclFactura.m_dtFechaHora..Date o dtFechaInicialViajeFormato YYYYMMDD
B307Net Amount DuevariableclFactura.m_cySubTotal o clFactura.m_cyTotalCentavos (x100) en Traxtech; decimal en otros
B308Currency Codevariable"" (vacío)-
B309Date - DeliveryvariablesFechaentrega o dtFechaFinalViaje o vacío-
B3010Standard Point Location Codevariable”035” (fixed)-
B3011Standard Carrier Alpha CodevariablesScacClienteCompleta a 4 caracteres en Continental/Stellantis
B3012Date - ShipmentvariablesFechaCarga o clViaje.m_dtFechaCargaOpcional

Variables auxiliares:

  • sMetodoPago: “CC” si condiciones pago=1, “PP” si condiciones pago=2
  • sViaje: Primer viaje de la factura (GetListadoViajesByIdFactura)

Segmento C2 - Currency (Routegistics)

ElementoDescripciónValor/Source
C201Transaction Type Code”R” (fixed)
C202Standard Point Location Code”ZZ” (fixed)
C203Reference IdentificationgnIdFactura

Segmento C3 - Currency

ElementoDescripciónValor/Source
C301Currency CodesAbreviacionMoneda (MXN/USD)

sAbreviacionMoneda: “MXN” si moneda pesos, “USD” si dólares (clFactura.m_nIdMoneda)

Segmento N9 - Reference Identification

ElementoDescripciónQualifiersValor/Source
N901Reference Identification QualifierPO, BM, OL, OWVariable
N902Reference IdentificationVariablesNoViajeCliente, clFolio.m_nFolioInicial, clViaje.m_sNoViajeCliente

Variaciones N9 por carrier:

CarrierN901N902
Traxtech-No usa N9 en flujo estándar
RoutegisticsPOsNoViajeCliente
RoutegisticsBMclFolio.m_nFolioInicial
AutolivOLsNoViajeCliente
OOCLOWsNoViajeCliente
SumitomoPO, BMsNoViajeCliente, clFolio
Continental/Stellantis/CHRobinsonPOclViaje.m_sNoViajeCliente

Segmento G62 - Date/Time Reference

ElementoDescripciónQualifiersValor/Source
G6201Date/Time Qualifier86 (carga), 35 (entrega), 11Variable
G6202DateFormato YYYYMMDDclViaje.m_dtFechaCarga, clFactura.m_dtFechaHora

Segmento H3 - Hazardous Classification

Carrier: Solo Autoliv

ElementoValor/Source
H301”TLS” (fixed)

Segmento R3 - Route Information

ElementoDescripciónValor/Source
R301Standard Carrier Alpha CodesScacCliente
R302Routing Sequence Code”1”, “O”, “B”
R303-R309Variables por carrierTipo transmisión, estado, viaje, fecha, importe

Segmento N1/N3/N4 - Name and Address

Códigos de entidad: BT (Bill To), SH (Ship From/Ship To), SF (Ship From), CN (Consignee)

SegmentoEntityFuente
N1-BTBill ToclCliente (Traxtech/Spectrum) o clDestinatario (Routegistics)
N1-SHShip FromclRemitente
N1-SFShip FromclRemitente
N1-CNConsigneeclDestinatario
N3Direccióncalle + número exterior
N4Ciudad, Estado, CP, PaísLocalidad, IdEstado, CodigoPostal; País “MX” o “US” según ClsCatPaisesEstadosCP

Segmento N7 - Equipment Details

ElementoDescripciónValor/Source
N701Equipment InitialVacío o sScacCliente
N702Equipment NumberclRemolque.m_sCodigo (de trayectos)
N703-N720Peso, dimensiones, etc.clViaje.m_xPeso, nPesoTara, sCajaObservaciones

Loop LX - Conceptos de Facturación

Repeat source: ProFacturasConceptosFacturacion + CatConceptosFacturacion (por IdFactura)

SegmentoDescripciónValor/Source
LX01Assigned NumbernRenglon (contador)
L501L501 = nRenglon-
L502DescriptionConceptoFacturacion + NoViajeCliente
L001-L011Peso, kilómetros, cantidad, unidaddsSegmentoLX.Kilometros, Peso, Cantidad, Item, UnidadMedida
L101-L120Tarifa, importe, equivalencia EDIPrecioUnitario, Importe, EquivalenciaEDI, Cantidad
L701-L707Tariff ReferencesScacCliente, códigos 70, 775, etc.
L301-L311Total Weight and Charges (final)Peso total, importe subtotal

Segmentos SE, GE, IEA (EDI 210)

SegmentoElementoValor/Source
SESE01nContadorST_SE + 1 (calculado)
SESE02gnIdFactura formato “04d” o “09d”
GEGE01”1” (fixed)
GEGE02gnIdFactura
IEAIEA01”1” (fixed)
IEAIEA02gnIdFactura formato “09d”

Fuentes de Datos para EDI 210

  • Parámetros globales: gnIdFactura, gsEmpresa, gnIdCarrier
  • CatClientesFacturacionEDI: sScacCliente, CarrierIdentificador (GetListadoClientesFacturacionEDI)
  • clFactura: ClsProFacturas(gnIdFactura) - m_nIdCliente, m_nIdFolio, m_nCondicionesPago, m_nIdMoneda, m_dtFechaHora, m_cySubTotal, m_cyTotal
  • clFolio: ClsCatFolios(clFactura.m_nIdFolio) - m_nFolioInicial, m_sSerie
  • clCliente: ClsCatClientes(clFactura.m_nIdCliente) - m_sNombreFiscal, m_sCalle, m_sNoExterior, m_sLocalidad, m_sIdEstado, m_sCodigoPostal
  • clViaje: ClsProViajes(nIdViaje) - obtenido de GetListadoViajesByIdFactura; m_nIdRemitente, m_nIdDestinatario, m_dtFechaCarga, m_dtFechaEntrega, m_xPeso, m_nIdUnidadPeso, m_sNoViajeCliente
  • clRemitente, clDestinatario: ClsCatRemitentesDestinatarios
  • clRemolque: ClsCatUnidades (de GetListadoTrayectos) - m_sCodigo, m_sTipoTransmision, m_xPesoTara, m_sObservaciones
  • Conceptos: Query ProFacturasConceptosFacturacion + CatConceptosFacturacion para IdFactura

Flujo de Generación EDI 210 por Carrier

flowchart TD
    A[Proceso FacturacionEDI] --> B[GeneraISA210]
    B --> C{Carrier del Cliente}
    C -->|Traxtech| D[ISA210Traxtech]
    C -->|Routegistics| E[ISA210Routegistics]
    C -->|Autoliv| F[ISA210Autoliv]
    C -->|OOCL| G[ISA210OOCL]
    C -->|Spectrum| H[ISA210Spectrum]
    C -->|Sumitomo| I[ISA210Sumitomo]
    C -->|Continental| J[ISA210Continental]
    C -->|Stellantis| K[ISA210Stellantis]
    C -->|CHRobinson| L[ISA210CHROBINSON]
    D --> M[GuardarArchivo210Temporal]
    E --> M
    F --> M
    G --> M
    H --> M
    I --> M
    J --> M
    K --> M
    L --> M
    M --> N[EnviarArchivoFTP]

Segmentos Comunes

Los siguientes segmentos son comunes a todos los documentos EDI y tienen una estructura base que no cambia significativamente entre documentos o carriers, excepto por variaciones específicas documentadas arriba.

Elementos que NO Cambian

ISA - Elementos Constantes

ElementoValorDescripción
ISA01”00”Authorization Information Qualifier
ISA02” ” (10 espacios)Authorization Information
ISA03”00”Security Information Qualifier
ISA04” ” (10 espacios)Security Information
ISA09Fecha actual formato “YYMMDD”Interchange Date (siempre fecha del sistema)
ISA10Hora actual formato “HHMM”Interchange Time (siempre hora del sistema)
ISA11”U”Standards Identifier
ISA12”00401”Version Number
ISA14”0”Acknowledgment Requested

GS - Elementos Constantes

ElementoValorDescripción
GS04Fecha actual formato “YYYYMMDD”Date (siempre fecha del sistema)
GS05Hora actual formato “HHMM”Time (siempre hora del sistema)
GS07”X”Responsible Agency Code
GS08”004010”Version/Release/Industry ID

Nota: GS01 varía según documento (“QM” para 214, “FA” para 997, “GF” para 990, “IM” para 210).

ST - Elementos Constantes

ElementoDescripciónVariaciones
ST01Código del documento”214”, “997”, “990”, o “210” según documento

SE - Elementos Constantes

Ninguno - todos varían según el documento y carrier.

GE - Elementos Constantes

ElementoValorDescripción
GE01”1”Number of Transaction Sets Included (siempre 1)

IEA - Elementos Constantes

ElementoValorDescripción
IEA01”1”Number of Included Functional Groups (siempre 1)

Matriz de Variaciones

Variaciones ISA por Carrier y Documento

| Carrier | ISA05 | ISA07 | ISA16 | Documentos | | ------------ | ----- | ----- | ----- | ---------------------- | ----- | | RYDER | “01” | “01” | ” | ” | Todos | | TRANSPLACE | “01” | “01” | ” | ” | Todos | | ALCLOGISTICS | “01” | “01” | ” | ” | Todos | | JUSTRANSFORM | “01” | “01” | ” | ” | Todos | | PENSKE | “02” | “02” | ” | ” | Todos | | XPOLOGISTICS | “02” | “02” | ” | ” | Todos | | AUTOLIV | “02” | “02” | ”:” | 990 (formato especial) | | ADIENT | “02” | “02” | ”:” | 990 (formato especial) | | OOCL | “02” | “02” | ”>” | 990 (formato especial) | | SAPLBN | “02” | “02” | ” | ” | Todos | | PROTRANS | “02” | “02” | ”>” | 214 (formato especial) |

Variaciones GS por Documento

DocumentoGS01Propósito
214”QM”Query/Miscellaneous
997”FA”Functional Acknowledgment
990”GF”Freight Details
210”IM”Motor Carrier Freight Details and Invoice

Segmentos Específicos por Carrier - EDI 214

SegmentoRYDERJUSTRANSFORMPENSKETRANSPLACEXPOLOGISTICSPROTRANSSAPLBNAUTOLIV/ADIENT/OOCL
L11-RNSí*Sí*Sí**-----
L11-MA--Sí***-----
L11-TN--Sí****-----
L11-BM--Sí (cond)----
L11-SI------
L11-QN--Sí (cond)--Sí (cond)--
L11-2ISí (cond)-Sí (cond)-----
L11-BN/IX/MB/PO/ST-------
LX”1""1""1”StopNumNo”1”StopNumStopNum
MS1GPS/UbicGPS/UbicGPS/UbicUbicUbicUbicNoUbic
MS2No
N1/N3/N4------
MS3-------
AT8------

Leyenda:

  • *: Solo si estatus <> “X6”
  • **: Con lógica especial según parámetro SegmentoL11Penske
  • ***: Si no hay RunNumber y SegmentoL11Penske == false
  • ****: Si no hay RunNumber
  • (cond): Solo si el campo requerido tiene valor

Variaciones AT7 Time Code por Carrier

CarrierAT707 (Time Code)
TRANSPLACE”LT”
PENSKE”LT”
PROTRANS”UT”
Todos los demás”CT”

Segmentos Específicos por Carrier - EDI 210

CarrierISA08/GS03B301N9C2/C3H3R3Terminador
TraxtechsHonaerovacío-C3-CR
RoutegisticsINSOURCEAUDITvacíoPO, BMC2--~
AutolivFMXATLVTBOL-TLS-~
OOCLOOCLIESBOWC3-~
SpectrumsSpectrumIDvacíoPOC3--~
SumitomoINSOURCEAUDITvacíoPO, BM---CR
ContinentalCTSI0486BPOC3-:
StellantisMS158145B-C3-~
CHRobinsonCTSI0486/RBTWBPOC3--:

Variaciones IEA Terminador

CarrierEDI 214EDI 997EDI 990EDI 210
RYDER\n + ~*\n + ~\n-
PENSKE\n + ~**\n + ~\n-
SAPLBNSolo \nSin terminadorSin terminador-
EDI 210 carriers---CR, ~, : según carrier
Todos los demásSin terminadorSin terminadorSin terminador-

Leyenda:

  • *: Siempre
  • **: Solo si SegmentoL11Penske == false

Apéndices

A. Códigos de Estatus Comunes

Códigos de estatus del viaje (clCatEstatusViajeDetalle.m_sAbreviacion):

  • X6: Estatus final/delivery - activa lógica GPS para MS1

B. Tipos de Carga/Descarga

Valores de nCargaDescargaTMP (clCatEstatusViaje.m_nCargaDescarga):

  • 1: Carga (Load)
  • 2: Descarga (Unload)
  • Otros: Ni carga ni descarga

C. Valores de StopReason

Valores posibles en dsEDIDetalle.StopReason:

  • “Load”, “Complete”, “Part Load” → Usa campos ShipFrom
  • “Unload”, “Complete Unload”, “Part Unload” → Usa campos ShipTo

D. Transformaciones Aplicadas

TransformaciónFunciónParámetrosUso
completeComplete(value, length, pad_char)Rellena strings a longitud específica
num_to_stringNumToString(value, format)Convierte número a string con formato
date_to_stringDateToString(date, format)Formatea fecha
time_to_stringTimeToString(time, format)Formatea hora
gps_to_dmsConvierteLatLon_GradosMinSeg(latitude)Convierte GPS a Grados-Minutos-Segundos

E. Configuración SOAP

Todos los documentos EDI se envían por SOAP con:

  • Namespace: urn:SolicitudesEDI
  • Método: Varía según documento (ActualizarEstatus, Aceptar, Rechazar)
  • Parámetros: Incluyen el archivo EDI generado (UTF-8), número de solicitud, y carrier ID

F. Ejemplo Completo de Flujo - EDI 214 PENSKE

Escenario: Actualizar estatus de viaje con RunNumber disponible y parámetro SegmentoL11Penske = false

Segmentos generados (en orden):

  1. ISA - Con ISA05/ISA07 = “02”
  2. GS - Con GS01 = “QM”, GS02 = sGSSCAC, GS03 = InterchangeReceiverID
  3. ST - ST01 = “214”, ST02 = Reference
  4. B10 - B1001 = CarrierPro, B1002 = IdentSolicitud, B1003 = SCACAplicacion
  5. L11 - L1101 = ManifestNumber, L1102 = “MA” (porque RunNumber existe pero SegmentoL11Penske = false)
  6. LX - LX01 = “1”
  7. AT7 - Con AT707 = “LT”
  8. MS1 - City/State/Country según nCargaDescargaTMP
  9. MS2 - Con código de unidad obtenido de ClsCatUnidades
  10. L11-BM - Si clViaje.m_sIdentificador existe
  11. L11-QN - Si StopNum existe
  12. L11-2I - Si TrackingNum existe
  13. SE - Con contador de segmentos
  14. GE - GE02 = IdSolicitudEDI
  15. IEA - Con terminador ”~” porque SegmentoL11Penske = false

G. Referencias a Clases y Métodos del Sistema Externo

Clases principales:

  • ClsProSolicitudesEDI: Clase principal para gestión de solicitudes EDI
  • PAGE_ProcesosEDI: Página que contiene GeneraISA210() para EDI 210
  • ClsProFacturas: Información de facturas (EDI 210)
  • ClsProViajes: Información de viajes
  • ClsProViajesEstatus: Estatus de viajes
  • ClsCatEstatusViaje: Catálogo de estatus de viaje
  • ClsCatUnidades: Catálogo de unidades de transporte
  • ClsCatTiposUnidades: Catálogo de tipos de unidades
  • ClsCatClientes: Catálogo de clientes
  • ClsCatRemitentesDestinatarios: Catálogo de remitentes/destinatarios
  • ClsCatPaisesEstadosCP: Catálogo de países, estados y códigos postales

Métodos estáticos importantes:

  • GetListadoDetalleEdiByIdSolicitudEDI(): Obtiene detalles de solicitud EDI
  • GetIdSolicitudEDIByIdViaje(): Obtiene ID de solicitud por viaje
  • GetIdSolicitudEDIByIdIdentSolicitud(): Obtiene ID por identificador
  • GetStopEDI(): Calcula número de parada EDI
  • GetListadoPOByIdSolicitudEDI(): Obtiene lista de POs (XPOLOGISTICS)
  • GetUnload(): Obtiene datos de descarga (PROTRANS)
  • ClsCatUnidades::GetCodigoByIdUnidad(): Obtiene código de unidad
  • ClsSisParametros::GetValorParametro(): Obtiene parámetros del sistema
  • ClsSisParametros::GetListadoClientesFacturacionEDI(): Obtiene clientes con facturación EDI (para EDI 210)
  • ClsProFacturas::GetListadoViajesByIdFactura(): Obtiene viajes de una factura (EDI 210)

H. Notas Importantes para el Editor de Templates

Elementos que siempre deben estar en templates base:

  1. Segmentos ISA, GS, ST, SE, GE, IEA (estructura base)
  2. Valores fijos constantes (ISA01-ISA04, ISA11-ISA12, GS07-GS08, etc.)
  3. Formato de fechas y horas estándar
  4. Transformaciones comunes (num_to_string, date_to_string, etc.)

Elementos que deben ser configurables por carrier:

  1. Valores de ISA05, ISA07, ISA16
  2. Valores de GS02, GS03
  3. Segmentos L11 y sus variantes
  4. Valores de LX01
  5. Valores de AT707
  6. Lógica condicional de MS1
  7. Código de unidad en MS2
  8. Segmentos adicionales (N1/N3/N4, MS3, AT8)
  9. Terminadores y formatos especiales

Lógica condicional que debe soportarse en templates:

  1. IF/ELSE: Condiciones simples (ej: si campo existe, si carrier es X)
  2. SWITCH: Selección múltiple (ej: StopReason, respuesta)
  3. LOOP: Repetición (ej: múltiples L11-PO para XPOLOGISTICS)
  4. Cálculos: Contadores, transformaciones, formateo
  5. Valores por defecto: Cuando un campo está vacío

Recomendaciones para implementación:

  1. Usar placeholders/variables para valores que varían por carrier
  2. Soportar condiciones anidadas
  3. Permitir expresiones para cálculos (ej: nContadorST_SE + 1)
  4. Validar que las fuentes de datos existan antes de generar
  5. Manejar valores vacíos de forma elegante (omitir segmento o usar default)

Documentación generada: 2025-01-XX Versión: 1.0 Basado en: Código WebDev ClsProSolicitudesEDI del sistema externo Archivo fuente: /home/julio/Descargas/ClsProSolicitudesEDI 2.pdf