#------------------------------------------------------------------------
# FFA/4
#------------------------------------------------------------------------

FFA4 =    
    StandardMessageIdentification
    ConsignmentDetail
    1*FlightDetails
    [SpecialServiceRequest]
    [OtherServiceInformation]
    BookingReference
    [ShipmentReferenceInformation];

# Standard Message Identification
# -------------------------------
StandardMessageIdentification =
    "FFA/4" 
    CRLF;

# Consignment Detail
# ------------------
ConsignmentDetail =    
    AWBIdentification 
    AWBOriginAndDestination
    (
        (
            QuantityDetail_Part
            TotalConsignmentPieces
        )
        /
        QuantityDetail_Total    
    )
    [NatureOfGoods]    
    [CRLF 1*9SpecialHandlingRequirements]
    CRLF;

AWBIdentification =    
    DE112_AirlinePrefix 
    Hyphen
    DE113_AWBSerialNumber;

AWBOriginAndDestination =
    2DE313_AirportCityCode;

QuantityDetail_Total =
    Slant
    DE703_ShipmentDescriptionCode_T 
    DE701_NumberOfPieces 
    DE601_WeightCode 
    DE600_Weight;

QuantityDetail_Part =
    Slant
    DE703_ShipmentDescriptionCode_P 
    DE701_NumberOfPieces 
    DE601_WeightCode 
    DE600_Weight;

TotalConsignmentPieces =
    DE703_ShipmentDescriptionCode_T
    DE701_NumberOfPieces;
    
NatureOfGoods =
    Slant
    DE708_ManifestDescriptionOfGoods;
    
SpecialHandlingRequirements = 
    Slant
    DE705_SpecialHandlingCode;
    
# Flight Details
# --------------
FlightDetails =
    FLT_FlightIdentification
    Slant
    FLT_AirportsOfDepartureAndArrival
    Slant
    DE409_SpaceAllocationCode
    CRLF;

FLT_FlightIdentification =
    DE312_CarrierCode
    DE800_FlightNumber
    Slant
    DE202_Day
    DE201_Month;
    
FLT_AirportsOfDepartureAndArrival =
    2DE313_AirportCode;

# SSR - Special Service Request
# -----------------------------
SpecialServiceRequest =
    DE103_LineIdentifier_SSR
    1*2
    (
        Slant 
        DE404_SpecialServiceRequest 
        CRLF
    );

# OSI - Other Service Information
# -------------------------------
OtherServiceInformation =
    DE103_LineIdentifier_OSI
    1*2
    (
        Slant 
        DE405_OtherServiceInformation 
        CRLF
    );

# REF - Booking Reference
# -----------------------
BookingReference =
    DE103_LineIdentifier_REF
    Slant
    (
        (REF_RequestingOfficeMessageAddress
         [slant 
          REF_RequestingOfficeFileReference])
        /
        (Slant
         [REF_RequestingOfficeFileReference]
         Slant
         REF_RequestingParticipantIdentification)
    )
    CRLF;
        
REF_RequestingOfficeMessageAddress =
    DE313_AirportCityCode
    DE107_OfficeFunctionDesignator
    DE308_CompanyDesignator;
    
REF_RequestingOfficeFileReference =
    DE117_BookingFileReference;
    
REF_RequestingParticipantIdentification =
    DE319_ParticipantIdentifier
    Slant
    DE320_ParticipantCode
    Slant
    DE313_AirportCityCode;

# SRI - Shipment Reference Information
# ------------------------------------
ShipmentReferenceInformation =
    DE103_LineIdentifier_SRI
    Slant
    (
        (DE132_ReferenceNumber
         Slant
         DE133_SupplementaryShipmentInformation
         Slant
         DE133_SupplementaryShipmentInformation)
        /
        (Slant
         DE133_SupplementaryShipmentInformation
         Slant
         DE133_SupplementaryShipmentInformation)
        /
        (DE132_ReferenceNumber
         Slant
         Slant
         DE133_SupplementaryShipmentInformation)
        /
        (DE132_ReferenceNumber
         Slant
         DE133_SupplementaryShipmentInformation)
        /
        (Slant
         Slant
         DE133_SupplementaryShipmentInformation)
        /
        (Slant
         DE133_SupplementaryShipmentInformation)
        /
        DE132_ReferenceNumber
    )    
    CRLF;    

# Data Elements
# -------------

DE101_StandardMessageIdentifier         = 3Alpha;
DE103_LineIdentifier_OSI                = "OSI";
DE103_LineIdentifier_REF                = "REF";
DE103_LineIdentifier_SRI                = "SRI";
DE103_LineIdentifier_SSR                = "SSR";
DE107_OfficeFunctionDesignator          = 2Mixed;
DE112_AirlinePrefix                     = 3Numeric;
DE113_AWBSerialNumber                   = 8Numeric;
DE117_BookingFileReference              = 1*15Text;
DE124_MessageTypeVersionNumber          = 1*3Numeric;
DE132_ReferenceNumber                   = 1*14Text;
DE133_SupplementaryShipmentInformation  = 1*12Text;
DE201_Month                             = 3Alpha;
DE202_Day                               = 2Numeric;
DE308_CompanyDesignator                 = 2Mixed;
DE312_CarrierCode                       = 2Mixed;
DE313_AirportCityCode                   = 3Alpha;
DE313_AirportCode                       = 3Alpha;
DE319_ParticipantIdentifier             = 1*3Mixed;
DE320_ParticipantCode                   = 1*17Mixed;
DE404_SpecialServiceRequest             = 1*65Text;
DE405_OtherServiceInformation           = 1*65Text;
DE409_SpaceAllocationCode               = 2Alpha;
DE600_Weight                            = 1*7Decimal;
DE601_WeightCode                        = Alpha;
DE701_NumberOfPieces                    = 1*4Numeric;
DE703_ShipmentDescriptionCode_T         = "T";
DE703_ShipmentDescriptionCode_P         = "P";
DE705_SpecialHandlingCode               = 3Alpha;
DE708_ManifestDescriptionOfGoods        = 1*15Text;
DE800_FlightNumber                      = 3*4Numeric [Alpha];

# Types
# -----
CRLF    = (CR LF) / LF; 
CR      = %x0D;
LF      = %x0A;
Slant   = "/";
Hyphen  = "-";
Alpha   = %x41-5A;
Numeric = %x30-39;
Decimal = %x30-39 / ".";
Mixed   = Alpha / Numeric;
Text    = %x41-5A / %x30-39 / "." / "-" / " ";

#------------------------------------------------------------------------
# eof
#------------------------------------------------------------------------