Documentos EDI En GM Integra
Tabla de Contenidos
- Resumen Ejecutivo
- Documento EDI 214
- Documento EDI 997
- Documento EDI 990
- Documento EDI 210
- Segmentos Comunes
- Matriz de Variaciones
- Apéndices
Resumen Ejecutivo
Documentos EDI Soportados
El sistema puede generar los siguientes documentos EDI según el estándar X12:
| Código | Nombre | Propósito | Método Generador |
|---|---|---|---|
| 214 | Transportation Carrier Shipment Status Message | Reportar el estado/avance de un viaje | ActualizarEstatus() |
| 997 | Functional Acknowledgment | Confirmar recepción de un mensaje EDI | generarISA997() |
| 990 | Response to a Load Tender | Responder a una oferta de carga (Aceptar/Rechazar) | generarISA990() |
| 210 | Motor Carrier Freight Details and Invoice | Detalles de flete y factura para carriers de transporte | GeneraISA210() (PAGE_ProcesosEDI) |
Carriers Soportados
| ID | Nombre | Código Constante |
|---|---|---|
| 1 | RYDER | Carrier.RYDER |
| 2 | TRANSPLACE | Carrier.TRANSPLACE |
| 3 | ALCLOGISTICS | Carrier.ALCLOGISTICS |
| 4 | JUSTRANSFORM | Carrier.JUSTRANSFORM |
| 5 | PENSKE | Carrier.PENSKE |
| 6 | XPOLOGISTICS | Carrier.XPOLOGISTICS |
| 7 | AUTOLIV | Carrier.AUTOLIV |
| 8 | OOCL | Carrier.OOCL |
| 9 | SAPLBN | Carrier.SAPLBN |
| 10 | ADIENT | Carrier.ADIENT |
| 11 | PROTRANS | Carrier.PROTRANS |
| 12 | UPS | Carrier.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()yGenerarISA214() - Enviado por: SOAP al método
ActualizarEstatus
Estructura General de Segmentos
Orden de segmentos base:
- ISA - Interchange Control Header
- GS - Functional Group Header
- ST - Transaction Set Header
- [Segmentos específicos del documento]
- SE - Transaction Set Trailer
- GE - Functional Group Trailer
- 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: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Longitud | Requerido | Variaciones por Carrier |
|---|---|---|---|---|---|---|
| ISA01 | Authorization Information Qualifier | fixed | ”00” | 2 | Sí | Ninguna - siempre “00” |
| ISA02 | Authorization Information | fixed | ” ” (10 espacios) | 10 | Sí | Ninguna - siempre 10 espacios |
| ISA03 | Security Information Qualifier | fixed | ”00” | 2 | Sí | Ninguna - siempre “00” |
| ISA04 | Security Information | fixed | ” ” (10 espacios) | 10 | Sí | Ninguna - siempre 10 espacios |
| ISA05 | Interchange ID Qualifier (Sender) | variable | dsEDIDetalle.InterchangeIDQualifier | 2 | Sí | VARÍA: “01” (default) o “02” según carrier |
| ISA06 | Interchange Sender ID | variable | dsEDIDetalle.SCAC | 15 | Sí | Completa con espacios a la derecha |
| ISA07 | Interchange ID Qualifier (Receiver) | variable | dsEDIDetalle.InterchangeIDQualifier | 2 | Sí | VARÍA: Igual a ISA05 según carrier |
| ISA08 | Interchange Receiver ID | variable | dsEDIDetalle.InterchangeReceiverID | 15 | Sí | Completa con espacios a la derecha |
| ISA09 | Interchange Date | system_date | DateSys() formato “YYMMDD” | 6 | Sí | Ninguna - siempre fecha actual |
| ISA10 | Interchange Time | system_time | TimeSys() formato “HHMM” | 4 | Sí | Ninguna - siempre hora actual |
| ISA11 | Standards Identifier | fixed | ”U” | 1 | Sí | Ninguna - siempre “U” |
| ISA12 | Version Number | fixed | ”00401” | 5 | Sí | Ninguna - siempre “00401” |
| ISA13 | Interchange Control Number | variable | m_nIdSolicitudEDI | 9 | Sí | Transformación: num_to_string formato “09d” |
| ISA14 | Acknowledgment Requested | fixed | ”0” | 1 | Sí | Ninguna - siempre “0” |
| ISA15 | Test Indicator | fixed | ”P” | 1 | Sí | Ninguna - siempre “P” |
| ISA16 | Component Element Separator | fixed | ”|“ | 1 | Sí | VARÍ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: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones por Carrier |
|---|---|---|---|---|---|
| GS01 | Functional Identifier Code | fixed | ”QM” (214) / “FA” (997) / “GF” (990) | Sí | Varía según tipo de documento |
| GS02 | Application Sender’s Code | variable | Varía según carrier | Sí | VARÍA: Ver tabla de variaciones |
| GS03 | Application Receiver’s Code | variable | Varía según carrier | Sí | VARÍA: Ver tabla de variaciones |
| GS04 | Date | system_date | DateSys() formato “YYYYMMDD” | Sí | Ninguna - siempre fecha actual |
| GS05 | Time | system_time | TimeSys() formato “HHMM” | Sí | Ninguna - siempre hora actual |
| GS06 | Group Control Number | variable | m_nIdSolicitudEDI | Sí | Ninguna - siempre ID de solicitud |
| GS07 | Responsible Agency Code | fixed | ”X” | Sí | Ninguna - siempre “X” |
| GS08 | Version/Release/Industry ID | fixed | ”004010” | Sí | Ninguna - siempre “004010” |
Variaciones de GS02/GS03 para EDI 214:
| Carrier | GS02 (Sender) | GS03 (Receiver) | Notas |
|---|---|---|---|
| PROTRANS | sGSSCAC | dsEDIDetalle.InterchangeReceiverID | sGSSCAC = dsEDIDetalle.SCAC |
| JUSTRANSFORM | dsEDIDetalle.InterchangeReceiverID | clCliente.m_sNombreCorto (si existe) o sGSSCAC | Usa nombre corto del cliente si está disponible |
| Todos los demás | sGSSCAC | dsEDIDetalle.InterchangeReceiverID | sGSSCAC 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: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| ST01 | Transaction Set Identifier Code | fixed | ”214” | Sí | Ninguna - siempre “214” |
| ST02 | Transaction Set Control Number | variable | dsEDIDetalle.Reference | Sí | Ninguna - 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: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| B1001 | Reference Identification | variable | m_sCarrierPro | Sí | Ninguna |
| B1002 | Shipment Identification Number | variable | m_sIdentSolicitud | Sí | Ninguna |
| B1003 | Standard Carrier Alpha Code | variable | m_sSCACAplicacion (PROTRANS) o sGSSCAC (otros) | Sí | VARÍA: Ver variaciones |
Variaciones B1003:
- PROTRANS:
m_sSCACAplicacion - Todos los demás:
sGSSCAC(que puede serdsEDIDetalle.SCACo"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:
| Elemento | Descripción | Tipo | Requerido |
|---|---|---|---|
| L1101 | Reference Identification | variable | Sí |
| L1102 | Reference Identification Qualifier | fixed/variable | Sí |
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:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.RunNumber | Debe existir |
| L1102 | ”RN” (fixed) | - |
L11-MA (Manifest Number)
Qualifier: “MA” Carriers: PENSKE
Condición: dsEDIDetalle.RunNumber == "" Y system_param.SegmentoL11Penske == false
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.ManifestNumber | - |
| L1102 | ”MA” (fixed) | - |
L11-TN (Tracking Number / Customer Order)
Qualifier: “TN” Carriers: PENSKE (cuando no hay RunNumber)
Condición: dsEDIDetalle.RunNumber == ""
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.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:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.RunNumber | - |
| L1102 | dsEDIDetalle.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:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | PROTRANS: dsEDIDetalle.BOLPENSKE: 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:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | PROTRANS: m_sIdentSolicitudXPOLOGISTICS: dsEDIDetalle.CarrierID | - |
| L1102 | ”SI” (fixed) | - |
L11-QN (Stop Sequence Number)
Qualifier: “QN” Carriers: Todos excepto XPOLOGISTICS (en ciertos casos)
Condición: dsEDIDetalle.StopNum != ""
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.StopNum | - |
| L1102 | ”QN” (fixed) | - |
L11-2I (Tracking Number)
Qualifier: “2I” Carriers: RYDER, PENSKE
Condición:
- RYDER: Si
dsEDIDetalle.TrackingNum != ""YclCatEstatusViajeDetalle.m_sAbreviacion <> "X6" - PENSKE: Si
dsEDIDetalle.TrackingNum != ""
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.TrackingNum | - |
| L1102 | ”2I” (fixed) | - |
L11-BN (Booking Number)
Qualifier: “BN” Carriers: XPOLOGISTICS
Condición: Solo para XPOLOGISTICS
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | m_sIdentSolicitud | - |
| L1102 | ”BN” (fixed) | - |
L11-IX (Equipment Description)
Qualifier: “IX” Carriers: XPOLOGISTICS
Condición: Solo para XPOLOGISTICS
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.LadingDecription | - |
| L1102 | ”IX” (fixed) | - |
L11-MB (Master Bill)
Qualifier: “MB” Carriers: XPOLOGISTICS
Condición: Solo para XPOLOGISTICS
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | m_sIdentSolicitud | - |
| L1102 | ”MB” (fixed) | - |
L11-PO (Purchase Order)
Qualifier: “PO” Carriers: XPOLOGISTICS
Condición: Solo para XPOLOGISTICS (puede repetirse múltiples veces)
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsSolicitudesEDIDetalleL11.PO | Obtenido de query GetListadoPOByIdSolicitudEDI (puede haber múltiples) |
| L1102 | ”PO” (fixed) | - |
L11-ST (Shipment Tracking)
Qualifier: “ST” Carriers: XPOLOGISTICS
Condición: Solo para XPOLOGISTICS
Elementos:
| Elemento | Valor/Source | Notas |
|---|---|---|
| L1101 | dsEDIDetalle.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
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| LX01 | Assigned Number | fixed/variable | Varía según carrier | Sí | VARÍA: Ver tabla |
Variaciones LX01:
| Carrier | Valor | Tipo | Notas |
|---|---|---|---|
| RYDER | ”1” | fixed | Siempre “1” |
| PENSKE | ”1” | fixed | Siempre “1” |
| JUSTRANSFORM | ”1” | fixed | Siempre “1” |
| XPOLOGISTICS | N/A | - | No se incluye este segmento |
| Todos los demás | dsEDIDetalle.StopNum | variable | Usa el número de parada |
Segmento AT7 - Shipment Status Details
Posición: Variable (después de LX o L11 según carrier) Requerido: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| AT701 | Shipment Status Code | variable | clCatEstatusViajeDetalle.m_sAbreviacion | Sí | Ninguna |
| AT702 | Shipment Status or Appointment Reason Code | variable | sMotivoRetraso (default: “NS”) | Sí | Ninguna |
| AT703 | Shipment Appointment Status Code | fixed | "" (vacío) | No | Ninguna |
| AT704 | Shipment Appointment Status Code | fixed | "" (vacío) | No | Ninguna |
| AT705 | Date | variable | dtFechaHoraEstatus..Date formato “YYYYMMDD” | Sí | Ninguna |
| AT706 | Time | variable | tHoraEstatus formato “HHMM” | Sí | Ninguna |
| AT707 | Time Code | fixed | ”LT”, “CT”, o “UT” | Sí | VARÍA: Ver tabla |
Fuentes de datos:
clCatEstatusViajeDetalle: ObjetoClsCatEstatusViaje(nIdEstatusViaje)obtenido declProViajesEstatus.m_nIdEstatuViajesMotivoRetraso:- Default: “NS”
- Si
clProViajesEstatus.m_sComentarioEstatus != "": usa ese valor
dtFechaHoraEstatus:clProViajesEstatus.m_dtFechaHora..DatetHoraEstatus:clProViajesEstatus.m_dtFechaHora..Time
Variaciones AT707 (Time Code):
| Carrier | Valor | Condició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:
- El carrier
- El estatus del viaje (si es “X6” usa GPS)
- El tipo de carga/descarga (nCargaDescargaTMP)
Estructura base:
| Elemento | Descripción | Tipo | Requerido |
|---|---|---|---|
| MS101 | City Name | variable | Condicional |
| MS102 | State or Province Code | variable | Condicional |
| MS103 | Country Code | variable | Condicional |
| MS104+ | GPS Coordinates (formato DMS) | calculated | Solo 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ón | MS101 (City) | MS102 (State) | MS103 (Country) |
|---|---|---|---|
| nCargaDescargaTMP == 1 (Carga) | dsEDIDetalle.ShipFromCity | dsEDIDetalle.ShipFromState | dsEDIDetalle.ShipFromCountry |
| nCargaDescargaTMP == 2 (Descarga) | dsEDIDetalle.ShipToCity | dsEDIDetalle.ShipToState | dsEDIDetalle.ShipToCountry |
| Otros casos | dsEDIDetalle.ShipFromCity | dsEDIDetalle.ShipFromState | dsEDIDetalle.ShipFromCountry |
| PROTRANS (alternativo) | dsEDIDetalle.ShipToCity (si ShipToCity <> "") o dsEDIDetalle.ShipFromCity | Correspondiente | Correspondiente |
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
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| MS201 | Standard Carrier Alpha Code | variable | dsEDIDetalle.IdentificadorSCAC | Sí | Ninguna |
| MS202 | Equipment Number | variable | sCodigoUnidadPintarMs2 | Sí | VARÍA: Ver obtención de código |
| MS203 | Equipment Description Code | fixed | ”TL” | Sí | Ninguna (excepto PROTRANS que usa variable) |
Variaciones MS202 (Código de Unidad):
| Carrier | Fuente | Método de Obtención |
|---|---|---|
| RYDER, JUSTRANSFORM, PENSKE | ClsCatUnidades::GetCodigoByIdUnidad(clViaje.m_nIdUnidadCarga1) | Función estática |
| AUTOLIV, PROTRANS | clCatRemplque.m_sCodigo | De objeto ClsCatUnidades(clViaje.m_nIdUnidadCarga1) |
| Todos los demás | ClsCatUnidades::GetCodigoByIdUnidad(clViaje.m_nIdUnidadCarga1) | Función estática |
Variaciones MS203 (Solo PROTRANS):
- PROTRANS:
sEquivalenciaEDIMS02obtenido declTipoUnidadRemolque.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”
| Segmento | Elemento | Descripción | Valor/Source |
|---|---|---|---|
| N1 | N101 | Entity Identifier Code | ”SF” (fixed) |
| N1 | N102 | Name | dsEDIDetalle.ShipFromName |
| N1 | N103 | Identification Code Qualifier | ”ZZ” (fixed) |
| N1 | N104 | Identification Code | dsEDIDetalle.LocationIdValue |
| N3 | N301 | Address Information | dsEDIDetalle.ShipFromAddress1 |
| N4 | N401 | City Name | dsEDIDetalle.ShipFromCity |
| N4 | N402 | State or Province Code | dsEDIDetalle.ShipFromState |
| N4 | N403 | Postal Code | dsEDIDetalle.ShipFromZip |
| N4 | N404 | Country Code | dsEDIDetalle.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
| Segmento | Elemento | Valor Hardcodeado |
|---|---|---|
| N1-SH | N101 | ”SH” |
| N1-SH | N102 | ”LEAR CORPORATION” |
| N3 | N301 | ”1110 WOODMERE AVE” |
| N4 | N401-N404 | Usa dsEDIDetalle.BillToCity/State/Zip/Country |
| N1-CN | N101 | ”CN” |
| N1-CN | N102 | ”MNW DEL RIO” |
| N3 | N301 | ”2200 CIENEGAS ROAD” |
| N4 | N401-N404 | Usa dsEDIDetalle.BillToCity/State/Zip/Country |
Segmento MS3 - Interline Service Provider
Carriers: PROTRANS Posición: Variable (solo PROTRANS) Requerido: Sí (solo PROTRANS)
| Elemento | Descripción | Valor/Source | Requerido |
|---|---|---|---|
| MS301 | Standard Carrier Alpha Code | sGSSCAC | Sí |
| MS302 | Service Code | ”O” (fixed) | Sí |
| MS303 | Service Code | "" (vacío) | No |
| MS304 | Service Code | ”M” (fixed) | Sí |
Segmento AT8 - Shipment Status or Appointment Time
Carriers: XPOLOGISTICS, PROTRANS Posición: Variable (solo estos carriers) Requerido: Sí (solo estos carriers)
Para PROTRANS:
| Elemento | Descripción | Tipo | Valor/Source | Requerido |
|---|---|---|---|---|
| AT801 | Weight Qualifier | fixed | ”G” | Sí |
| AT802 | Unit or Basis for Measurement Code | variable | dsEDIDetalle.WeightUOM | Sí |
| AT803 | Weight | variable | dsEDIDetalle.Weight | Sí |
| AT804 | Lading Quantity | variable | Val(dsEDIDetalle.Pieces) | Sí |
| AT805 | Volume | fixed | "" (vacío) | No |
| AT806 | Volume (numérico) | variable | Val(dsEDIDetalle.Volume) | Sí |
Para XPOLOGISTICS:
| Elemento | Descripción | Tipo | Valor/Source | Requerido |
|---|---|---|---|---|
| AT801 | Weight Qualifier | variable | dsEDIDetalle.WeightQualifier | Sí |
| AT802 | Unit or Basis for Measurement Code | variable | dsEDIDetalle.WeightUnitCode | Sí |
| AT803 | Weight | variable | dsEDIDetalle.Weight | Sí |
| AT804 | Lading Quantity | variable | dsEDIDetalle.LadingQuantity | Sí |
Segmento SE - Transaction Set Trailer
Posición: Último segmento antes de GE Requerido: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| SE01 | Number of Included Segments | calculated | Contador de segmentos + 1 | Sí | VARÍA: Ver tabla |
| SE02 | Transaction Set Control Number | variable | dsEDIDetalle.Reference | Sí | Ninguna |
Variaciones SE01:
| Carrier | Cálculo | Notas |
|---|---|---|
| TRANSPLACE (2), ALCLOGISTICS (3) | nRenglon - 1 | Usa variable nRenglon que se decrementa cuando segmentos opcionales no se incluyen |
| Todos los demás | nContadorST_SE + 1 | Usa 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: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| GE01 | Number of Transaction Sets Included | fixed | ”1” | Sí | Ninguna - siempre “1” |
| GE02 | Group Control Number | variable | m_nIdSolicitudEDI | Sí | Ninguna |
Segmento IEA - Interchange Control Trailer
Posición: Último segmento Requerido: Sí Repetible: No
| Elemento | Descripción | Tipo | Valor/Source | Requerido | Variaciones |
|---|---|---|---|---|---|
| IEA01 | Number of Included Functional Groups | fixed | ”1” | Sí | Ninguna - siempre “1” |
| IEA02 | Interchange Control Number | variable | m_nIdSolicitudEDI formato “09d” | Sí | Ninguna |
| (Terminador) | Segment Terminator | fixed | ”~” o “\n” o nada | - | VARÍA: Ver tabla |
Variaciones del terminador después de IEA:
| Carrier | Terminador | Condición |
|---|---|---|
| RYDER | \n + ~ | Siempre |
| PENSKE | \n + ~ | Si system_param.SegmentoL11Penske == false |
| PENSKE | Solo \n | Si system_param.SegmentoL11Penske == true |
| SAPLBN | Solo \n | Siempre |
| Todos los demás | Nada (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 EDInCargaDescarga(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
| Nombre | Clase | Parámetro | Propósito |
|---|---|---|---|
clProViajesEstatus | ClsProViajesEstatus | nIdProViajesEstatus | Información del estatus del viaje (fecha/hora, comentarios, motivo) |
clCatEstatusViajeDetalle | ClsCatEstatusViaje | clProViajesEstatus.m_nIdEstatuViaje | Detalles del estatus (abreviación, tipo carga/descarga) |
clViaje | ClsProViajes | nIdViaje | Información del viaje (cliente, unidades, remitente, destinatario) |
clCliente | ClsCatClientes | clViaje.m_nIdCliente | Información del cliente (nombre corto para JUSTRANSFORM) |
clRemitente | ClsCatRemitentesDestinatarios | clViaje.m_nIdRemitente | Datos del remitente |
clDestinatario | ClsCatRemitentesDestinatarios | clViaje.m_nIdDestinatario | Datos del destinatario |
clCatRemplque | ClsCatUnidades | clViaje.m_nIdUnidadCarga1 | Información de la unidad (solo AUTOLIV/PROTRANS) |
clTipoUnidadRemolque | ClsCatTiposUnidades | clCatRemplque.m_nIdTipoUnidad | Equivalencia EDI del tipo de unidad (solo PROTRANS) |
dsSolicitudesEDIDetalleL11 | Query GetListadoPOByIdSolicitudEDI | m_nIdSolicitudEDI | Lista de POs (solo XPOLOGISTICS) |
dsUnload | Query GetUnload | m_nIdSolicitudEDI | Datos de descarga (solo PROTRANS) |
Parámetros del Sistema
| Parámetro | Tipo | Default | Propósito |
|---|---|---|---|
SegmentoL11Penske | boolean | false | Si es true, L11 para PENSKE usa RunNumber como qualifier |
GenerarArchivoFormatoISA | boolean | false | Indica si se debe generar formato ISA (vs formato simple) |
URLServiciosWEBClienteEDI | string | - | URL del servicio SOAP para enviar el archivo |
Mapeo Completo de Elementos a Fuentes de Datos
Propiedades de la Clase ClsProSolicitudesEDI
| Propiedad | Tipo | Fuente | Uso |
|---|---|---|---|
m_nIdSolicitudEDI | int | Constructor o agregar() | ID de la solicitud EDI |
m_sIdentSolicitud | string | ProSolicitudesEDI.IdentSolicitud | Identificador de solicitud |
m_sCarrierPro | string | ProSolicitudesEDI.CarrierPro | Carrier Pro |
m_sSCACAplicacion | string | ProSolicitudesEDI.SCACAplicacion | SCAC de aplicación |
m_nCarrierAplicacion | int | ProSolicitudesEDI.CarrierAplicacion | ID del carrier |
m_sTipo | string | ProSolicitudesEDI.Tipo | Tipo (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,InterchangeIDQualifierBOL,RunNumber,ManifestNumber,CustomerOrder,StopNum,TrackingNum,CarrierIDShipFrom*,ShipTo*,BillTo*(direcciones)LocationIdValue,LadingDecriptionWeight,WeightUOM,WeightQualifier,WeightUnitCode,Volume,Pieces,LadingQuantity
Ejemplo de Estructura Completa EDI 214 (PENSKE)
Orden de segmentos para PENSKE:
- ISA
- GS
- ST
- B10
- L11 (RN, MA, o TN según condiciones)
- LX
- AT7
- MS1 (GPS si X6, o ubicación según carga/descarga)
- MS2
- L11-BM (si existe identificador)
- L11-QN (si StopNum existe)
- L11-2I (si TrackingNum existe)
- SE
- GE
- 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(conbAgregarViajes = false)
Estructura de Segmentos
Orden de segmentos:
- ISA - Interchange Control Header
- GS - Functional Group Header (GS01 = “FA”)
- ST - Transaction Set Header (ST01 = “997”)
- AK1 - Functional Group Response Header
- AK2 - Transaction Set Response Header (solo XPOLOGISTICS)
- AK5 - Transaction Set Response Trailer (solo XPOLOGISTICS)
- AK9 - Functional Group Response Trailer
- SE - Transaction Set Trailer
- GE - Functional Group Trailer
- 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)
| Elemento | Descripción | Valor/Source | Variaciones |
|---|---|---|---|
| GS01 | Functional Identifier Code | ”FA” (fixed) | Siempre “FA” para 997 |
| GS02 | Application Sender’s Code | dsEDIDetalle.InterchangeReceiverID | - |
| GS03 | Application Receiver’s Code | dsEDIDetalle.SCAC (o vacío) | - |
| GS04 | Date | DateSys() formato “YYYYMMDD” | - |
| GS05 | Time | TimeSys() formato “HHMM” | - |
| GS06 | Group Control Number | nIdSolicitudEDI | - |
| GS07 | Responsible Agency Code | ”X” (fixed) | - |
| GS08 | Version/Release/Industry ID | ”004010” (fixed) | - |
Segmento ST (EDI 997)
| Elemento | Descripción | Valor/Source |
|---|---|---|
| ST01 | Transaction Set Identifier Code | ”997” (fixed) |
| ST02 | Transaction Set Control Number | nIdSolicitudEDI + "001" |
Segmento AK1 - Functional Group Response Header
| Elemento | Descripción | Valor/Source | Variaciones |
|---|---|---|---|
| AK101 | Functional Identifier Code | ”SM” (fixed) | Siempre “SM” |
| AK102 | Group Control Number | sReferece (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
| Elemento | Descripción | Valor/Source |
|---|---|---|
| AK201 | Transaction Set Identifier Code | ”204” (fixed) |
| AK202 | Transaction Set Control Number | dsEDIDetalle.IdentSolicitud |
Segmento AK5 - Transaction Set Response Trailer
Carrier: XPOLOGISTICS Requerido: Solo para XPOLOGISTICS (aparece si hay AK2) Posición: Después de AK2
| Elemento | Descripción | Valor/Source |
|---|---|---|
| AK501 | Transaction Set Acknowledgment Code | ”A” (fixed) |
| AK502 | Transaction Set Syntax Error Code | ”5” (fixed) |
Segmento AK9 - Functional Group Response Trailer
| Elemento | Descripción | Valor/Source | Variaciones |
|---|---|---|---|
| AK901 | Functional Group Acknowledgment Code | sRespuesta | Valores posibles: “A” (Aceptado), “D” (Rechazado) |
| AK902 | Number of Transaction Sets Included | ”1” (fixed) | - |
| AK903 | Number of Received Transaction Sets | ”1” (fixed) | - |
| AK904 | Number of Accepted Transaction Sets | ”1” (fixed) | - |
Segmento SE (EDI 997)
| Elemento | Descripción | Valor/Source |
|---|---|---|
| SE01 | Number of Included Segments | ”4” (fixed) |
| SE02 | Transaction Set Control Number | nIdSolicitudEDI + "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)
| Elemento | Descripción | Valor/Source |
|---|---|---|
| GE01 | Number of Transaction Sets Included | ”1” (fixed) |
| GE02 | Group Control Number | nIdSolicitudEDI |
Segmento IEA (EDI 997)
| Elemento | Descripción | Valor/Source | Variaciones |
|---|---|---|---|
| IEA01 | Number of Included Functional Groups | ”1” (fixed) | - |
| IEA02 | Interchange Control Number | nIdSolicitudEDI formato “09d” | - |
| (Terminador) | - | - | VARÍA: Ver tabla |
Variaciones del terminador:
| Carrier | Terminador |
|---|---|
| RYDER, PENSKE | \n + ~ |
| Todos los demás | Nada (sin terminador adicional) |
Variaciones por Carrier - EDI 997
| Carrier | Variaciones Específicas |
|---|---|
| XPOLOGISTICS | Incluye segmentos AK2 y AK5 adicionales |
| RYDER, PENSKE | Agrega ~ después de IEA |
| Todos los demás | Sin variaciones especiales |
Fuentes de Datos para EDI 997
- Data Source:
dsSolicitudesEDIDetalle(deProSolicitudesEDIDetalles) - SCAC: Parámetro
sSCACodsEDIDetalle.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())
- Cuando se acepta una solicitud EDI (método
- Método generador:
ClsProSolicitudesEDI::generarISA990() - Enviado por: SOAP al método
AceptaroRechazar
Respuestas Posibles
| Código | Significado | Uso |
|---|---|---|
| A | Aceptado | Solicitud aceptada |
| D | Rechazado/Cancelado | Solicitud rechazada |
| R | Run | (Solo XPOLOGISTICS) |
| C | Reject | (Solo XPOLOGISTICS) |
Estructura de Segmentos
Orden de segmentos base:
- ISA - Interchange Control Header
- GS - Functional Group Header (GS01 = “GF”)
- ST - Transaction Set Header (ST01 = “990”)
- B1 - Beginning Segment for Booking or Pick-up/Delivery
- N9 - Reference Identification (condicional según carrier)
- G62 - Date/Time Reference (solo XPOLOGISTICS)
- V9 - Event Detail (solo XPOLOGISTICS)
- K1 - Remarks (solo PENSKE si rechazado)
- SE - Transaction Set Trailer
- GE - Functional Group Trailer
- IEA - Interchange Control Trailer
Variaciones Importantes
El EDI 990 tiene dos estructuras principales:
- Formato Especial: AUTOLIV, ADIENT, OOCL
- Formato Estándar: Todos los demás carriers
Segmentos Detallados - Formato Especial (AUTOLIV/ADIENT/OOCL)
Segmento ISA (Formato Especial)
| Elemento | Valor/Source | Variaciones |
|---|---|---|
| ISA05 | sISAIdent5 | ”02” (fixed para estos carriers) |
| ISA06 | AUTOLIV/ADIENT: dsEDIDetalle.InterchangeReceiverIDOOCL: m_sSCACAplicacion | Completa a 15 caracteres |
| ISA07 | ”ZZ” (fixed) | Siempre “ZZ” |
| ISA08 | AUTOLIV/ADIENT: dsEDIDetalle.SCACOOCL: sISAIdent8 (“OOCLIES”) | Completa a 15 caracteres |
| ISA15 | AUTOLIV/ADIENT: m_sTipoOOCL: “P” (fixed) | - |
| ISA16 | AUTOLIV/ADIENT: ”:“ OOCL: ”>“ | Separador específico |
| ISA17 | ”~” (fixed) | Terminador de línea adicional |
Segmento GS (Formato Especial)
| Elemento | Valor/Source | Variaciones |
|---|---|---|
| GS01 | ”GF” (fixed) | Siempre “GF” para 990 |
| GS02 | AUTOLIV/ADIENT: dsEDIDetalle.InterchangeReceiverIDOOCL: m_sSCACAplicacion | - |
| GS03 | AUTOLIV/ADIENT: dsEDIDetalle.SCACOOCL: sISAIdent8 (“OOCLIES”) | - |
| (Después de GS08) | ”~” + CR | Terminador 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)
| Elemento | Valor/Source | Variaciones |
|---|---|---|
| B101 | OOCL: m_sSCACAplicacionOtros: dsEDIDetalle.InterchangeReceiverID | - |
| B102 | dsEDIDetalle.CarrierPro | - |
| B103 | DateSys() formato “YYYYMMDD” | - |
| B104 | sRespuesta (“A” o “D”) | - |
| (Después de B104) | ”~” + CR | Terminador 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)
| Elemento | Valor/Source | Variaciones |
|---|---|---|
| GS01 | ”GF” (fixed) | Siempre “GF” para 990 |
| GS02 | dsEDIDetalle.InterchangeReceiverID | - |
| GS03 | JUSTRANSFORM: clCliente.m_sNombreCorto (si existe) o sGSSCACOtros: sGSSCAC | VARÍA: Ver tabla |
Variaciones GS03:
- JUSTRANSFORM: Usa
clCliente.m_sNombreCortosi está disponible, sinosGSSCAC - XPOLOGISTICS:
sGSSCAC = "AETMENLOPDX "(hardcodeado) - Otros:
sGSSCAC = dsEDIDetalle.SCAC
Segmento ST (Formato Estándar)
| Elemento | Valor/Source |
|---|---|
| ST01 | ”990” (fixed) |
| ST02 | clViaje.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)
| Elemento | Valor/Source | Variaciones |
|---|---|---|
| B101 | dsEDIDetalle.IdentificadorSCAC | - |
| B102 | PENSKE: dsEDIDetalle.CarrierProSAPLBN: m_sIdentSolicitudOtros: dsEDIDetalle.CarrierPro | VARÍA: Ver tabla |
| B103 | PENSKE: DateSys() formato “YYYYMMDD”Otros: "" (vacío) | VARÍA: Ver tabla |
| B104 | sRespuesta | - |
Variaciones B1:
| Carrier | B101 | B102 | B103 | B104 |
|---|---|---|---|---|
| PENSKE | IdentificadorSCAC | CarrierPro | Fecha actual | sRespuesta |
| SAPLBN | IdentificadorSCAC | m_sIdentSolicitud | "" (vacío) | sRespuesta |
| Otros | IdentificadorSCAC | CarrierPro | "" (vacío) | sRespuesta |
Segmento N9 - Reference Identification
Condición: Siempre presente excepto PENSKE en algunos casos
| Elemento | Valor/Source | Variaciones |
|---|---|---|
| N901 | Qualifier (varía) | VARÍA: Ver tabla |
| N902 | Valor (varía) | VARÍA: Ver tabla |
Variaciones N9:
| Carrier | Condición | N901 | N902 |
|---|---|---|---|
| JUSTRANSFORM, RYDER | Siempre | ”TN” | dsEDIDetalle.CustomerOrder |
| PENSKE | Nunca se incluye | - | - |
| SAPLBN | Siempre | ”06” | m_sCarrierPro |
| Otros | Siempre | ”CN” | m_sCarrierPro |
Segmento G62 - Date/Time Reference
Carrier: XPOLOGISTICS Requerido: Solo para XPOLOGISTICS
| Elemento | Valor/Source |
|---|---|
| G6201 | ”07” (fixed) |
| G6202 | DateSys() formato “YYYYMMDD” |
| G6203 | ”W” (fixed) |
| G6204 | TimeSys() formato “HHMM” |
| G6205 | ”ET” (fixed) |
Segmento V9 - Event Detail
Carrier: XPOLOGISTICS Requerido: Solo para XPOLOGISTICS Posición: Después de G62
| Elemento | Valor/Source | Variaciones |
|---|---|---|
| V901 | Event Code | VARÍA: Según sRespuesta |
Valores de V901 según respuesta:
| Respuesta | V901 |
|---|---|
| ”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_nViajeformato “08d”
GE:
- GE01: “1” (fixed)
- GE02:
nIdSolicitudEDI
IEA:
- IEA01: “1” (fixed)
- IEA02:
nIdSolicitudEDIformato “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"yReference[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(deProSolicitudesEDIDetalles) - Objeto Viaje:
clViaje = ClsProViajes(nNumeroViaje)- NOTA:nNumeroViajees 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)
| ID | Nombre | Procedimiento |
|---|---|---|
| 1 | Traxtech | ISA210Traxtech |
| 2 | Routegistics | ISA210Routegistics |
| 3 | Autoliv | ISA210Autoliv |
| 4 | OOCL | ISA210OOCL |
| 5 | Spectrum | ISA210Spectrum |
| 6 | Sumitomo | ISA210Sumitomo |
| 7 | Continental | ISA210Continental |
| 8 | Stellantis | ISA210Stellantis |
| 9 | CHRobinson | ISA210CHROBINSON |
Estructura General de Segmentos
Orden de segmentos base:
- ISA - Interchange Control Header
- GS - Functional Group Header (GS01 = “IM”)
- ST - Transaction Set Header (ST01 = “210”)
- B3 - Beginning Segment for Motor Freight Details and Invoice
- C2/C3 - Currency (condicional)
- N9 - Reference Identification (condicional, múltiples variantes)
- G62 - Date/Time Reference (condicional)
- H3 - Hazardous Classification (solo Autoliv)
- R3 - Route Information (condicional)
- N1, N3, N4 - Name/Address Information (BT, SH, CN)
- N7 - Equipment Details (condicional)
- [Loop LX] - LX, L5, L0, L1, L7 (conceptos de facturación)
- L3 - Total Weight and Charges
- SE - Transaction Set Trailer
- GE - Functional Group Trailer
- IEA - Interchange Control Trailer
Segmentos Específicos del EDI 210
Segmento ISA (EDI 210)
| Elemento | Valor/Source | Variaciones por Carrier |
|---|---|---|
| ISA05 | ”02” (fixed) | Siempre “02” en implementaciones actuales |
| ISA06 | sScacCliente o sSCACApp (OOCL) | Completa a 15 caracteres; OOCL usa SCAC de aplicación |
| ISA07 | ”ZZ” (fixed) | Mayoría de carriers |
| ISA08 | Variable por carrier | VARÍA: sHonaero (Traxtech), INSOURCEAUDIT (Routegistics/Sumitomo), FMXATLVT (Autoliv), OOCLIES (OOCL), sSpectrumID (Spectrum), CTSI0486 (Continental/CHRobinson), MS158145 (Stellantis), RBTW (CHRobinson) |
| ISA13 | gnIdFactura formato “09d” | - |
| ISA15 | ”P” o “T” | Autoliv usa “T” para test |
| ISA16 | ”:”, ”~”, ”>”, CR | VARÍA: : (Continental/CHRobinson), ~ (Spectrum/Stellantis), > (OOCL), ¦ (Autoliv) |
Segmento GS (EDI 210)
| Elemento | Descripción | Valor/Source | Variaciones |
|---|---|---|---|
| GS01 | Functional Identifier Code | ”IM” (fixed) | Siempre “IM” para Motor Carrier Freight |
| GS02 | Application Sender’s Code | sScacCliente | - |
| GS03 | Application Receiver’s Code | Variable por carrier | VARÍA: sHonaero, INSOURCEAUDIT, FMXATLVT, OOCLIES, sSpectrumID, CTSI0486, MS158145, RBTW |
| GS04 | Date | DateSys() YYYYMMDD | - |
| GS05 | Time | TimeSys() HHMM/HHMMSS | Continental/Stellantis/CHRobinson usan HHMMSS |
| GS06 | Group Control Number | gnIdFactura | - |
| GS07 | Responsible Agency Code | ”X” (fixed) | - |
| GS08 | Version/Release/Industry ID | ”004010” o “00400” | Spectrum usa “00400” |
Segmento ST (EDI 210)
| Elemento | Descripción | Valor/Source |
|---|---|---|
| ST01 | Transaction Set Identifier Code | ”210” (fixed) |
| ST02 | Transaction Set Control Number | gnIdFactura formato “04d” o “09d” |
Segmento B3 - Beginning Segment for Motor Freight Details and Invoice
| Elemento | Descripción | Tipo | Valor/Source | Variaciones |
|---|---|---|---|---|
| B301 | Transaction Set Purpose Code | variable | "" o “B” | Vacío (Traxtech/Spectrum), “B” (Autoliv/OOCL/Continental/Stellantis/CHRobinson) |
| B302 | Shipment Identification Number | variable | clFolio.m_nFolioInicial o clFolio.m_sSerie + clFolio.m_nFolioInicial | Formato 10 dígitos en Routegistics |
| B303 | Shipment Method of Payment | variable | sViaje | - |
| B304 | Weight Qualifier | variable | sMetodoPago (CC/PP) o “L” | Routegistics/Sumitomo/Continental/Stellantis usan “L” |
| B305 | Freight Rate Code | variable | "" o “K” | Spectrum usa “K” |
| B306 | Date | variable | clFactura.m_dtFechaHora..Date o dtFechaInicialViaje | Formato YYYYMMDD |
| B307 | Net Amount Due | variable | clFactura.m_cySubTotal o clFactura.m_cyTotal | Centavos (x100) en Traxtech; decimal en otros |
| B308 | Currency Code | variable | "" (vacío) | - |
| B309 | Date - Delivery | variable | sFechaentrega o dtFechaFinalViaje o vacío | - |
| B3010 | Standard Point Location Code | variable | ”035” (fixed) | - |
| B3011 | Standard Carrier Alpha Code | variable | sScacCliente | Completa a 4 caracteres en Continental/Stellantis |
| B3012 | Date - Shipment | variable | sFechaCarga o clViaje.m_dtFechaCarga | Opcional |
Variables auxiliares:
sMetodoPago: “CC” si condiciones pago=1, “PP” si condiciones pago=2sViaje: Primer viaje de la factura (GetListadoViajesByIdFactura)
Segmento C2 - Currency (Routegistics)
| Elemento | Descripción | Valor/Source |
|---|---|---|
| C201 | Transaction Type Code | ”R” (fixed) |
| C202 | Standard Point Location Code | ”ZZ” (fixed) |
| C203 | Reference Identification | gnIdFactura |
Segmento C3 - Currency
| Elemento | Descripción | Valor/Source |
|---|---|---|
| C301 | Currency Code | sAbreviacionMoneda (MXN/USD) |
sAbreviacionMoneda: “MXN” si moneda pesos, “USD” si dólares (clFactura.m_nIdMoneda)
Segmento N9 - Reference Identification
| Elemento | Descripción | Qualifiers | Valor/Source |
|---|---|---|---|
| N901 | Reference Identification Qualifier | PO, BM, OL, OW | Variable |
| N902 | Reference Identification | Variable | sNoViajeCliente, clFolio.m_nFolioInicial, clViaje.m_sNoViajeCliente |
Variaciones N9 por carrier:
| Carrier | N901 | N902 |
|---|---|---|
| Traxtech | - | No usa N9 en flujo estándar |
| Routegistics | PO | sNoViajeCliente |
| Routegistics | BM | clFolio.m_nFolioInicial |
| Autoliv | OL | sNoViajeCliente |
| OOCL | OW | sNoViajeCliente |
| Sumitomo | PO, BM | sNoViajeCliente, clFolio |
| Continental/Stellantis/CHRobinson | PO | clViaje.m_sNoViajeCliente |
Segmento G62 - Date/Time Reference
| Elemento | Descripción | Qualifiers | Valor/Source |
|---|---|---|---|
| G6201 | Date/Time Qualifier | 86 (carga), 35 (entrega), 11 | Variable |
| G6202 | Date | Formato YYYYMMDD | clViaje.m_dtFechaCarga, clFactura.m_dtFechaHora |
Segmento H3 - Hazardous Classification
Carrier: Solo Autoliv
| Elemento | Valor/Source |
|---|---|
| H301 | ”TLS” (fixed) |
Segmento R3 - Route Information
| Elemento | Descripción | Valor/Source |
|---|---|---|
| R301 | Standard Carrier Alpha Code | sScacCliente |
| R302 | Routing Sequence Code | ”1”, “O”, “B” |
| R303-R309 | Variables por carrier | Tipo 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)
| Segmento | Entity | Fuente |
|---|---|---|
| N1-BT | Bill To | clCliente (Traxtech/Spectrum) o clDestinatario (Routegistics) |
| N1-SH | Ship From | clRemitente |
| N1-SF | Ship From | clRemitente |
| N1-CN | Consignee | clDestinatario |
| N3 | Dirección | calle + número exterior |
| N4 | Ciudad, Estado, CP, País | Localidad, IdEstado, CodigoPostal; País “MX” o “US” según ClsCatPaisesEstadosCP |
Segmento N7 - Equipment Details
| Elemento | Descripción | Valor/Source |
|---|---|---|
| N701 | Equipment Initial | Vacío o sScacCliente |
| N702 | Equipment Number | clRemolque.m_sCodigo (de trayectos) |
| N703-N720 | Peso, dimensiones, etc. | clViaje.m_xPeso, nPesoTara, sCajaObservaciones |
Loop LX - Conceptos de Facturación
Repeat source: ProFacturasConceptosFacturacion + CatConceptosFacturacion (por IdFactura)
| Segmento | Descripción | Valor/Source |
|---|---|---|
| LX01 | Assigned Number | nRenglon (contador) |
| L501 | L501 = nRenglon | - |
| L502 | Description | ConceptoFacturacion + NoViajeCliente |
| L001-L011 | Peso, kilómetros, cantidad, unidad | dsSegmentoLX.Kilometros, Peso, Cantidad, Item, UnidadMedida |
| L101-L120 | Tarifa, importe, equivalencia EDI | PrecioUnitario, Importe, EquivalenciaEDI, Cantidad |
| L701-L707 | Tariff Reference | sScacCliente, códigos 70, 775, etc. |
| L301-L311 | Total Weight and Charges (final) | Peso total, importe subtotal |
Segmentos SE, GE, IEA (EDI 210)
| Segmento | Elemento | Valor/Source |
|---|---|---|
| SE | SE01 | nContadorST_SE + 1 (calculado) |
| SE | SE02 | gnIdFactura formato “04d” o “09d” |
| GE | GE01 | ”1” (fixed) |
| GE | GE02 | gnIdFactura |
| IEA | IEA01 | ”1” (fixed) |
| IEA | IEA02 | gnIdFactura 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
| Elemento | Valor | Descripción |
|---|---|---|
| ISA01 | ”00” | Authorization Information Qualifier |
| ISA02 | ” ” (10 espacios) | Authorization Information |
| ISA03 | ”00” | Security Information Qualifier |
| ISA04 | ” ” (10 espacios) | Security Information |
| ISA09 | Fecha actual formato “YYMMDD” | Interchange Date (siempre fecha del sistema) |
| ISA10 | Hora actual formato “HHMM” | Interchange Time (siempre hora del sistema) |
| ISA11 | ”U” | Standards Identifier |
| ISA12 | ”00401” | Version Number |
| ISA14 | ”0” | Acknowledgment Requested |
GS - Elementos Constantes
| Elemento | Valor | Descripción |
|---|---|---|
| GS04 | Fecha actual formato “YYYYMMDD” | Date (siempre fecha del sistema) |
| GS05 | Hora 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
| Elemento | Descripción | Variaciones |
|---|---|---|
| ST01 | Có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
| Elemento | Valor | Descripción |
|---|---|---|
| GE01 | ”1” | Number of Transaction Sets Included (siempre 1) |
IEA - Elementos Constantes
| Elemento | Valor | Descripció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
| Documento | GS01 | Propó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
| Segmento | RYDER | JUSTRANSFORM | PENSKE | TRANSPLACE | XPOLOGISTICS | PROTRANS | SAPLBN | AUTOLIV/ADIENT/OOCL |
|---|---|---|---|---|---|---|---|---|
| L11-RN | Sí* | Sí* | Sí** | - | - | - | - | - |
| L11-MA | - | - | Sí*** | - | - | - | - | - |
| L11-TN | - | - | Sí**** | - | - | - | - | - |
| L11-BM | - | - | Sí (cond) | - | - | Sí | - | - |
| L11-SI | - | - | - | - | Sí | Sí | - | - |
| L11-QN | - | - | Sí (cond) | - | - | Sí (cond) | - | - |
| L11-2I | Sí (cond) | - | Sí (cond) | - | - | - | - | - |
| L11-BN/IX/MB/PO/ST | - | - | - | - | Sí | - | - | - |
| LX | ”1" | "1" | "1” | StopNum | No | ”1” | StopNum | StopNum |
| MS1 | GPS/Ubic | GPS/Ubic | GPS/Ubic | Ubic | Ubic | Ubic | No | Ubic |
| MS2 | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí |
| N1/N3/N4 | - | - | - | - | Sí | Sí | - | - |
| MS3 | - | - | - | - | - | Sí | - | - |
| AT8 | - | - | - | - | Sí | Sí | - | - |
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
| Carrier | AT707 (Time Code) |
|---|---|
| TRANSPLACE | ”LT” |
| PENSKE | ”LT” |
| PROTRANS | ”UT” |
| Todos los demás | ”CT” |
Segmentos Específicos por Carrier - EDI 210
| Carrier | ISA08/GS03 | B301 | N9 | C2/C3 | H3 | R3 | Terminador |
|---|---|---|---|---|---|---|---|
| Traxtech | sHonaero | vacío | - | C3 | - | Sí | CR |
| Routegistics | INSOURCEAUDIT | vacío | PO, BM | C2 | - | - | ~ |
| Autoliv | FMXATLVT | B | OL | - | TLS | - | ~ |
| OOCL | OOCLIES | B | OW | C3 | - | Sí | ~ |
| Spectrum | sSpectrumID | vacío | PO | C3 | - | - | ~ |
| Sumitomo | INSOURCEAUDIT | vacío | PO, BM | - | - | - | CR |
| Continental | CTSI0486 | B | PO | C3 | - | Sí | : |
| Stellantis | MS158145 | B | - | C3 | - | Sí | ~ |
| CHRobinson | CTSI0486/RBTW | B | PO | C3 | - | - | : |
Variaciones IEA Terminador
| Carrier | EDI 214 | EDI 997 | EDI 990 | EDI 210 |
|---|---|---|---|---|
| RYDER | \n + ~* | \n + ~ | \n | - |
| PENSKE | \n + ~** | \n + ~ | \n | - |
| SAPLBN | Solo \n | Sin terminador | Sin terminador | - |
| EDI 210 carriers | - | - | - | CR, ~, : según carrier |
| Todos los demás | Sin terminador | Sin terminador | Sin 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ón | Función | Parámetros | Uso |
|---|---|---|---|
complete | Complete | (value, length, pad_char) | Rellena strings a longitud específica |
num_to_string | NumToString | (value, format) | Convierte número a string con formato |
date_to_string | DateToString | (date, format) | Formatea fecha |
time_to_string | TimeToString | (time, format) | Formatea hora |
gps_to_dms | ConvierteLatLon_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):
- ISA - Con ISA05/ISA07 = “02”
- GS - Con GS01 = “QM”, GS02 = sGSSCAC, GS03 = InterchangeReceiverID
- ST - ST01 = “214”, ST02 = Reference
- B10 - B1001 = CarrierPro, B1002 = IdentSolicitud, B1003 = SCACAplicacion
- L11 - L1101 = ManifestNumber, L1102 = “MA” (porque RunNumber existe pero SegmentoL11Penske = false)
- LX - LX01 = “1”
- AT7 - Con AT707 = “LT”
- MS1 - City/State/Country según nCargaDescargaTMP
- MS2 - Con código de unidad obtenido de ClsCatUnidades
- L11-BM - Si clViaje.m_sIdentificador existe
- L11-QN - Si StopNum existe
- L11-2I - Si TrackingNum existe
- SE - Con contador de segmentos
- GE - GE02 = IdSolicitudEDI
- 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 EDIPAGE_ProcesosEDI: Página que contieneGeneraISA210()para EDI 210ClsProFacturas: Información de facturas (EDI 210)ClsProViajes: Información de viajesClsProViajesEstatus: Estatus de viajesClsCatEstatusViaje: Catálogo de estatus de viajeClsCatUnidades: Catálogo de unidades de transporteClsCatTiposUnidades: Catálogo de tipos de unidadesClsCatClientes: Catálogo de clientesClsCatRemitentesDestinatarios: Catálogo de remitentes/destinatariosClsCatPaisesEstadosCP: Catálogo de países, estados y códigos postales
Métodos estáticos importantes:
GetListadoDetalleEdiByIdSolicitudEDI(): Obtiene detalles de solicitud EDIGetIdSolicitudEDIByIdViaje(): Obtiene ID de solicitud por viajeGetIdSolicitudEDIByIdIdentSolicitud(): Obtiene ID por identificadorGetStopEDI(): Calcula número de parada EDIGetListadoPOByIdSolicitudEDI(): Obtiene lista de POs (XPOLOGISTICS)GetUnload(): Obtiene datos de descarga (PROTRANS)ClsCatUnidades::GetCodigoByIdUnidad(): Obtiene código de unidadClsSisParametros::GetValorParametro(): Obtiene parámetros del sistemaClsSisParametros::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:
- Segmentos ISA, GS, ST, SE, GE, IEA (estructura base)
- Valores fijos constantes (ISA01-ISA04, ISA11-ISA12, GS07-GS08, etc.)
- Formato de fechas y horas estándar
- Transformaciones comunes (num_to_string, date_to_string, etc.)
Elementos que deben ser configurables por carrier:
- Valores de ISA05, ISA07, ISA16
- Valores de GS02, GS03
- Segmentos L11 y sus variantes
- Valores de LX01
- Valores de AT707
- Lógica condicional de MS1
- Código de unidad en MS2
- Segmentos adicionales (N1/N3/N4, MS3, AT8)
- Terminadores y formatos especiales
Lógica condicional que debe soportarse en templates:
- IF/ELSE: Condiciones simples (ej: si campo existe, si carrier es X)
- SWITCH: Selección múltiple (ej: StopReason, respuesta)
- LOOP: Repetición (ej: múltiples L11-PO para XPOLOGISTICS)
- Cálculos: Contadores, transformaciones, formateo
- Valores por defecto: Cuando un campo está vacío
Recomendaciones para implementación:
- Usar placeholders/variables para valores que varían por carrier
- Soportar condiciones anidadas
- Permitir expresiones para cálculos (ej:
nContadorST_SE + 1) - Validar que las fuentes de datos existan antes de generar
- 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