///|
pub struct MeasurementFamily {
  prefix : String
  title : String
  unit : String
  decimal_digits : Bool
} derive(Debug, Eq)

///|
fn measurement_families() -> Array[MeasurementFamily] {
  [
    {
      prefix: "310",
      title: "Net weight",
      unit: "kilograms",
      decimal_digits: true,
    },
    { prefix: "311", title: "Length", unit: "metres", decimal_digits: true },
    { prefix: "312", title: "Width", unit: "metres", decimal_digits: true },
    { prefix: "313", title: "Height", unit: "metres", decimal_digits: true },
    {
      prefix: "314",
      title: "Area",
      unit: "square metres",
      decimal_digits: true,
    },
    { prefix: "315", title: "Net volume", unit: "litres", decimal_digits: true },
    {
      prefix: "316",
      title: "Net volume",
      unit: "cubic metres",
      decimal_digits: true,
    },
    {
      prefix: "317",
      title: "Net volume",
      unit: "kilograms per square metre",
      decimal_digits: true,
    },
    {
      prefix: "318",
      title: "Net volume",
      unit: "litres per square metre",
      decimal_digits: true,
    },
    {
      prefix: "319",
      title: "Net weight",
      unit: "kilograms per square metre",
      decimal_digits: true,
    },
    { prefix: "320", title: "Net weight", unit: "pounds", decimal_digits: true },
    { prefix: "321", title: "Length", unit: "inches", decimal_digits: true },
    { prefix: "322", title: "Width", unit: "inches", decimal_digits: true },
    { prefix: "323", title: "Height", unit: "inches", decimal_digits: true },
    {
      prefix: "324",
      title: "Area",
      unit: "square inches",
      decimal_digits: true,
    },
    { prefix: "325", title: "Net volume", unit: "quarts", decimal_digits: true },
    {
      prefix: "326",
      title: "Net volume",
      unit: "gallons",
      decimal_digits: true,
    },
    {
      prefix: "327",
      title: "Net volume",
      unit: "cubic feet",
      decimal_digits: true,
    },
    {
      prefix: "328",
      title: "Net weight",
      unit: "troy ounces",
      decimal_digits: true,
    },
    {
      prefix: "329",
      title: "Net volume",
      unit: "cubic inches",
      decimal_digits: true,
    },
    {
      prefix: "330",
      title: "Logistic weight",
      unit: "kilograms",
      decimal_digits: true,
    },
    {
      prefix: "331",
      title: "Logistic length",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "332",
      title: "Logistic width",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "333",
      title: "Logistic height",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "334",
      title: "Logistic area",
      unit: "square metres",
      decimal_digits: true,
    },
    {
      prefix: "335",
      title: "Logistic volume",
      unit: "litres",
      decimal_digits: true,
    },
    {
      prefix: "336",
      title: "Logistic volume",
      unit: "cubic metres",
      decimal_digits: true,
    },
    {
      prefix: "337",
      title: "Logistic weight",
      unit: "pounds",
      decimal_digits: true,
    },
    {
      prefix: "338",
      title: "Logistic length",
      unit: "inches",
      decimal_digits: true,
    },
    {
      prefix: "339",
      title: "Logistic width",
      unit: "inches",
      decimal_digits: true,
    },
    {
      prefix: "340",
      title: "Logistic height",
      unit: "inches",
      decimal_digits: true,
    },
    {
      prefix: "341",
      title: "Logistic area",
      unit: "square inches",
      decimal_digits: true,
    },
    {
      prefix: "342",
      title: "Logistic volume",
      unit: "quarts",
      decimal_digits: true,
    },
    {
      prefix: "343",
      title: "Logistic volume",
      unit: "gallons",
      decimal_digits: true,
    },
    {
      prefix: "344",
      title: "Logistic volume",
      unit: "cubic feet",
      decimal_digits: true,
    },
    {
      prefix: "345",
      title: "Logistic weight",
      unit: "troy ounces",
      decimal_digits: true,
    },
    {
      prefix: "346",
      title: "Logistic volume",
      unit: "cubic inches",
      decimal_digits: true,
    },
    {
      prefix: "347",
      title: "Logistic area",
      unit: "square yards",
      decimal_digits: true,
    },
    {
      prefix: "348",
      title: "Logistic length",
      unit: "feet",
      decimal_digits: true,
    },
    {
      prefix: "349",
      title: "Logistic width",
      unit: "feet",
      decimal_digits: true,
    },
    {
      prefix: "350",
      title: "Container weight",
      unit: "kilograms",
      decimal_digits: true,
    },
    {
      prefix: "351",
      title: "Container length",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "352",
      title: "Container width",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "353",
      title: "Container height",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "354",
      title: "Container area",
      unit: "square metres",
      decimal_digits: true,
    },
    {
      prefix: "355",
      title: "Container volume",
      unit: "litres",
      decimal_digits: true,
    },
    {
      prefix: "356",
      title: "Container volume",
      unit: "cubic metres",
      decimal_digits: true,
    },
    {
      prefix: "357",
      title: "Container weight",
      unit: "pounds",
      decimal_digits: true,
    },
    {
      prefix: "358",
      title: "Container length",
      unit: "inches",
      decimal_digits: true,
    },
    {
      prefix: "359",
      title: "Container width",
      unit: "inches",
      decimal_digits: true,
    },
    {
      prefix: "360",
      title: "Trade item weight",
      unit: "kilograms",
      decimal_digits: true,
    },
    {
      prefix: "361",
      title: "Trade item length",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "362",
      title: "Trade item width",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "363",
      title: "Trade item height",
      unit: "metres",
      decimal_digits: true,
    },
    {
      prefix: "364",
      title: "Trade item area",
      unit: "square metres",
      decimal_digits: true,
    },
    {
      prefix: "365",
      title: "Trade item volume",
      unit: "litres",
      decimal_digits: true,
    },
    {
      prefix: "366",
      title: "Trade item volume",
      unit: "cubic metres",
      decimal_digits: true,
    },
    {
      prefix: "367",
      title: "Trade item weight",
      unit: "pounds",
      decimal_digits: true,
    },
    {
      prefix: "368",
      title: "Trade item length",
      unit: "inches",
      decimal_digits: true,
    },
    {
      prefix: "369",
      title: "Trade item width",
      unit: "inches",
      decimal_digits: true,
    },
  ]
}

///|
fn measurement_family(prefix : String) -> MeasurementFamily? {
  for family in measurement_families() {
    if family.prefix == prefix {
      return Some(family)
    }
  }
  None
}

///|
fn supplemental_measure_ais() -> Array[ApplicationIdentifier] {
  [
    ai("3107", "Net weight in kilograms, 7 decimal places", Some(6), 6, Fixed),
    ai("3108", "Net weight in kilograms, 8 decimal places", Some(6), 6, Fixed),
    ai("3109", "Net weight in kilograms, 9 decimal places", Some(6), 6, Fixed),
    ai("3110", "Length in metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3111", "Length in metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3112", "Length in metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3113", "Length in metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3114", "Length in metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3115", "Length in metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3116", "Length in metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3117", "Length in metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3118", "Length in metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3119", "Length in metres, 9 decimal places", Some(6), 6, Fixed),
    ai("3120", "Width in metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3121", "Width in metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3122", "Width in metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3123", "Width in metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3124", "Width in metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3125", "Width in metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3126", "Width in metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3127", "Width in metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3128", "Width in metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3129", "Width in metres, 9 decimal places", Some(6), 6, Fixed),
    ai("3130", "Height in metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3131", "Height in metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3132", "Height in metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3133", "Height in metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3134", "Height in metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3135", "Height in metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3136", "Height in metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3137", "Height in metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3138", "Height in metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3139", "Height in metres, 9 decimal places", Some(6), 6, Fixed),
    ai("3140", "Area in square metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3141", "Area in square metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3142", "Area in square metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3143", "Area in square metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3144", "Area in square metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3145", "Area in square metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3146", "Area in square metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3147", "Area in square metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3148", "Area in square metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3149", "Area in square metres, 9 decimal places", Some(6), 6, Fixed),
    ai("3150", "Net volume in litres, 0 decimal places", Some(6), 6, Fixed),
    ai("3151", "Net volume in litres, 1 decimal places", Some(6), 6, Fixed),
    ai("3152", "Net volume in litres, 2 decimal places", Some(6), 6, Fixed),
    ai("3153", "Net volume in litres, 3 decimal places", Some(6), 6, Fixed),
    ai("3154", "Net volume in litres, 4 decimal places", Some(6), 6, Fixed),
    ai("3155", "Net volume in litres, 5 decimal places", Some(6), 6, Fixed),
    ai("3156", "Net volume in litres, 6 decimal places", Some(6), 6, Fixed),
    ai("3157", "Net volume in litres, 7 decimal places", Some(6), 6, Fixed),
    ai("3158", "Net volume in litres, 8 decimal places", Some(6), 6, Fixed),
    ai("3159", "Net volume in litres, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3160",
      "Net volume in cubic metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3161",
      "Net volume in cubic metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3162",
      "Net volume in cubic metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3163",
      "Net volume in cubic metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3164",
      "Net volume in cubic metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3165",
      "Net volume in cubic metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3166",
      "Net volume in cubic metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3167",
      "Net volume in cubic metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3168",
      "Net volume in cubic metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3169",
      "Net volume in cubic metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3170",
      "Net volume in kilograms per square metre, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3171",
      "Net volume in kilograms per square metre, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3172",
      "Net volume in kilograms per square metre, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3173",
      "Net volume in kilograms per square metre, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3174",
      "Net volume in kilograms per square metre, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3175",
      "Net volume in kilograms per square metre, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3176",
      "Net volume in kilograms per square metre, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3177",
      "Net volume in kilograms per square metre, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3178",
      "Net volume in kilograms per square metre, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3179",
      "Net volume in kilograms per square metre, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3180",
      "Net volume in litres per square metre, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3181",
      "Net volume in litres per square metre, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3182",
      "Net volume in litres per square metre, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3183",
      "Net volume in litres per square metre, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3184",
      "Net volume in litres per square metre, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3185",
      "Net volume in litres per square metre, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3186",
      "Net volume in litres per square metre, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3187",
      "Net volume in litres per square metre, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3188",
      "Net volume in litres per square metre, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3189",
      "Net volume in litres per square metre, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3190",
      "Net weight in kilograms per square metre, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3191",
      "Net weight in kilograms per square metre, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3192",
      "Net weight in kilograms per square metre, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3193",
      "Net weight in kilograms per square metre, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3194",
      "Net weight in kilograms per square metre, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3195",
      "Net weight in kilograms per square metre, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3196",
      "Net weight in kilograms per square metre, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3197",
      "Net weight in kilograms per square metre, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3198",
      "Net weight in kilograms per square metre, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3199",
      "Net weight in kilograms per square metre, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3200", "Net weight in pounds, 0 decimal places", Some(6), 6, Fixed),
    ai("3201", "Net weight in pounds, 1 decimal places", Some(6), 6, Fixed),
    ai("3202", "Net weight in pounds, 2 decimal places", Some(6), 6, Fixed),
    ai("3203", "Net weight in pounds, 3 decimal places", Some(6), 6, Fixed),
    ai("3204", "Net weight in pounds, 4 decimal places", Some(6), 6, Fixed),
    ai("3205", "Net weight in pounds, 5 decimal places", Some(6), 6, Fixed),
    ai("3206", "Net weight in pounds, 6 decimal places", Some(6), 6, Fixed),
    ai("3207", "Net weight in pounds, 7 decimal places", Some(6), 6, Fixed),
    ai("3208", "Net weight in pounds, 8 decimal places", Some(6), 6, Fixed),
    ai("3209", "Net weight in pounds, 9 decimal places", Some(6), 6, Fixed),
    ai("3210", "Length in inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3211", "Length in inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3212", "Length in inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3213", "Length in inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3214", "Length in inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3215", "Length in inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3216", "Length in inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3217", "Length in inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3218", "Length in inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3219", "Length in inches, 9 decimal places", Some(6), 6, Fixed),
    ai("3220", "Width in inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3221", "Width in inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3222", "Width in inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3223", "Width in inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3224", "Width in inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3225", "Width in inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3226", "Width in inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3227", "Width in inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3228", "Width in inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3229", "Width in inches, 9 decimal places", Some(6), 6, Fixed),
    ai("3230", "Height in inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3231", "Height in inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3232", "Height in inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3233", "Height in inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3234", "Height in inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3235", "Height in inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3236", "Height in inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3237", "Height in inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3238", "Height in inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3239", "Height in inches, 9 decimal places", Some(6), 6, Fixed),
    ai("3240", "Area in square inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3241", "Area in square inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3242", "Area in square inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3243", "Area in square inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3244", "Area in square inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3245", "Area in square inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3246", "Area in square inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3247", "Area in square inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3248", "Area in square inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3249", "Area in square inches, 9 decimal places", Some(6), 6, Fixed),
    ai("3250", "Net volume in quarts, 0 decimal places", Some(6), 6, Fixed),
    ai("3251", "Net volume in quarts, 1 decimal places", Some(6), 6, Fixed),
    ai("3252", "Net volume in quarts, 2 decimal places", Some(6), 6, Fixed),
    ai("3253", "Net volume in quarts, 3 decimal places", Some(6), 6, Fixed),
    ai("3254", "Net volume in quarts, 4 decimal places", Some(6), 6, Fixed),
    ai("3255", "Net volume in quarts, 5 decimal places", Some(6), 6, Fixed),
    ai("3256", "Net volume in quarts, 6 decimal places", Some(6), 6, Fixed),
    ai("3257", "Net volume in quarts, 7 decimal places", Some(6), 6, Fixed),
    ai("3258", "Net volume in quarts, 8 decimal places", Some(6), 6, Fixed),
    ai("3259", "Net volume in quarts, 9 decimal places", Some(6), 6, Fixed),
    ai("3260", "Net volume in gallons, 0 decimal places", Some(6), 6, Fixed),
    ai("3261", "Net volume in gallons, 1 decimal places", Some(6), 6, Fixed),
    ai("3262", "Net volume in gallons, 2 decimal places", Some(6), 6, Fixed),
    ai("3263", "Net volume in gallons, 3 decimal places", Some(6), 6, Fixed),
    ai("3264", "Net volume in gallons, 4 decimal places", Some(6), 6, Fixed),
    ai("3265", "Net volume in gallons, 5 decimal places", Some(6), 6, Fixed),
    ai("3266", "Net volume in gallons, 6 decimal places", Some(6), 6, Fixed),
    ai("3267", "Net volume in gallons, 7 decimal places", Some(6), 6, Fixed),
    ai("3268", "Net volume in gallons, 8 decimal places", Some(6), 6, Fixed),
    ai("3269", "Net volume in gallons, 9 decimal places", Some(6), 6, Fixed),
    ai("3270", "Net volume in cubic feet, 0 decimal places", Some(6), 6, Fixed),
    ai("3271", "Net volume in cubic feet, 1 decimal places", Some(6), 6, Fixed),
    ai("3272", "Net volume in cubic feet, 2 decimal places", Some(6), 6, Fixed),
    ai("3273", "Net volume in cubic feet, 3 decimal places", Some(6), 6, Fixed),
    ai("3274", "Net volume in cubic feet, 4 decimal places", Some(6), 6, Fixed),
    ai("3275", "Net volume in cubic feet, 5 decimal places", Some(6), 6, Fixed),
    ai("3276", "Net volume in cubic feet, 6 decimal places", Some(6), 6, Fixed),
    ai("3277", "Net volume in cubic feet, 7 decimal places", Some(6), 6, Fixed),
    ai("3278", "Net volume in cubic feet, 8 decimal places", Some(6), 6, Fixed),
    ai("3279", "Net volume in cubic feet, 9 decimal places", Some(6), 6, Fixed),
    ai("3280", "Net weight in troy ounces, 0 decimal places", Some(6), 6, Fixed),
    ai("3281", "Net weight in troy ounces, 1 decimal places", Some(6), 6, Fixed),
    ai("3282", "Net weight in troy ounces, 2 decimal places", Some(6), 6, Fixed),
    ai("3283", "Net weight in troy ounces, 3 decimal places", Some(6), 6, Fixed),
    ai("3284", "Net weight in troy ounces, 4 decimal places", Some(6), 6, Fixed),
    ai("3285", "Net weight in troy ounces, 5 decimal places", Some(6), 6, Fixed),
    ai("3286", "Net weight in troy ounces, 6 decimal places", Some(6), 6, Fixed),
    ai("3287", "Net weight in troy ounces, 7 decimal places", Some(6), 6, Fixed),
    ai("3288", "Net weight in troy ounces, 8 decimal places", Some(6), 6, Fixed),
    ai("3289", "Net weight in troy ounces, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3290",
      "Net volume in cubic inches, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3291",
      "Net volume in cubic inches, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3292",
      "Net volume in cubic inches, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3293",
      "Net volume in cubic inches, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3294",
      "Net volume in cubic inches, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3295",
      "Net volume in cubic inches, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3296",
      "Net volume in cubic inches, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3297",
      "Net volume in cubic inches, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3298",
      "Net volume in cubic inches, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3299",
      "Net volume in cubic inches, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3300",
      "Logistic weight in kilograms, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3301",
      "Logistic weight in kilograms, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3302",
      "Logistic weight in kilograms, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3303",
      "Logistic weight in kilograms, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3304",
      "Logistic weight in kilograms, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3305",
      "Logistic weight in kilograms, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3306",
      "Logistic weight in kilograms, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3307",
      "Logistic weight in kilograms, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3308",
      "Logistic weight in kilograms, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3309",
      "Logistic weight in kilograms, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3310", "Logistic length in metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3311", "Logistic length in metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3312", "Logistic length in metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3313", "Logistic length in metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3314", "Logistic length in metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3315", "Logistic length in metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3316", "Logistic length in metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3317", "Logistic length in metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3318", "Logistic length in metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3319", "Logistic length in metres, 9 decimal places", Some(6), 6, Fixed),
    ai("3320", "Logistic width in metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3321", "Logistic width in metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3322", "Logistic width in metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3323", "Logistic width in metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3324", "Logistic width in metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3325", "Logistic width in metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3326", "Logistic width in metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3327", "Logistic width in metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3328", "Logistic width in metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3329", "Logistic width in metres, 9 decimal places", Some(6), 6, Fixed),
    ai("3330", "Logistic height in metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3331", "Logistic height in metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3332", "Logistic height in metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3333", "Logistic height in metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3334", "Logistic height in metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3335", "Logistic height in metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3336", "Logistic height in metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3337", "Logistic height in metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3338", "Logistic height in metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3339", "Logistic height in metres, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3340",
      "Logistic area in square metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3341",
      "Logistic area in square metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3342",
      "Logistic area in square metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3343",
      "Logistic area in square metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3344",
      "Logistic area in square metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3345",
      "Logistic area in square metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3346",
      "Logistic area in square metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3347",
      "Logistic area in square metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3348",
      "Logistic area in square metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3349",
      "Logistic area in square metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3350", "Logistic volume in litres, 0 decimal places", Some(6), 6, Fixed),
    ai("3351", "Logistic volume in litres, 1 decimal places", Some(6), 6, Fixed),
    ai("3352", "Logistic volume in litres, 2 decimal places", Some(6), 6, Fixed),
    ai("3353", "Logistic volume in litres, 3 decimal places", Some(6), 6, Fixed),
    ai("3354", "Logistic volume in litres, 4 decimal places", Some(6), 6, Fixed),
    ai("3355", "Logistic volume in litres, 5 decimal places", Some(6), 6, Fixed),
    ai("3356", "Logistic volume in litres, 6 decimal places", Some(6), 6, Fixed),
    ai("3357", "Logistic volume in litres, 7 decimal places", Some(6), 6, Fixed),
    ai("3358", "Logistic volume in litres, 8 decimal places", Some(6), 6, Fixed),
    ai("3359", "Logistic volume in litres, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3360",
      "Logistic volume in cubic metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3361",
      "Logistic volume in cubic metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3362",
      "Logistic volume in cubic metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3363",
      "Logistic volume in cubic metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3364",
      "Logistic volume in cubic metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3365",
      "Logistic volume in cubic metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3366",
      "Logistic volume in cubic metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3367",
      "Logistic volume in cubic metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3368",
      "Logistic volume in cubic metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3369",
      "Logistic volume in cubic metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3370", "Logistic weight in pounds, 0 decimal places", Some(6), 6, Fixed),
    ai("3371", "Logistic weight in pounds, 1 decimal places", Some(6), 6, Fixed),
    ai("3372", "Logistic weight in pounds, 2 decimal places", Some(6), 6, Fixed),
    ai("3373", "Logistic weight in pounds, 3 decimal places", Some(6), 6, Fixed),
    ai("3374", "Logistic weight in pounds, 4 decimal places", Some(6), 6, Fixed),
    ai("3375", "Logistic weight in pounds, 5 decimal places", Some(6), 6, Fixed),
    ai("3376", "Logistic weight in pounds, 6 decimal places", Some(6), 6, Fixed),
    ai("3377", "Logistic weight in pounds, 7 decimal places", Some(6), 6, Fixed),
    ai("3378", "Logistic weight in pounds, 8 decimal places", Some(6), 6, Fixed),
    ai("3379", "Logistic weight in pounds, 9 decimal places", Some(6), 6, Fixed),
    ai("3380", "Logistic length in inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3381", "Logistic length in inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3382", "Logistic length in inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3383", "Logistic length in inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3384", "Logistic length in inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3385", "Logistic length in inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3386", "Logistic length in inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3387", "Logistic length in inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3388", "Logistic length in inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3389", "Logistic length in inches, 9 decimal places", Some(6), 6, Fixed),
    ai("3390", "Logistic width in inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3391", "Logistic width in inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3392", "Logistic width in inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3393", "Logistic width in inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3394", "Logistic width in inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3395", "Logistic width in inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3396", "Logistic width in inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3397", "Logistic width in inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3398", "Logistic width in inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3399", "Logistic width in inches, 9 decimal places", Some(6), 6, Fixed),
    ai("3400", "Logistic height in inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3401", "Logistic height in inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3402", "Logistic height in inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3403", "Logistic height in inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3404", "Logistic height in inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3405", "Logistic height in inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3406", "Logistic height in inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3407", "Logistic height in inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3408", "Logistic height in inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3409", "Logistic height in inches, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3410",
      "Logistic area in square inches, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3411",
      "Logistic area in square inches, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3412",
      "Logistic area in square inches, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3413",
      "Logistic area in square inches, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3414",
      "Logistic area in square inches, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3415",
      "Logistic area in square inches, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3416",
      "Logistic area in square inches, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3417",
      "Logistic area in square inches, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3418",
      "Logistic area in square inches, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3419",
      "Logistic area in square inches, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3420", "Logistic volume in quarts, 0 decimal places", Some(6), 6, Fixed),
    ai("3421", "Logistic volume in quarts, 1 decimal places", Some(6), 6, Fixed),
    ai("3422", "Logistic volume in quarts, 2 decimal places", Some(6), 6, Fixed),
    ai("3423", "Logistic volume in quarts, 3 decimal places", Some(6), 6, Fixed),
    ai("3424", "Logistic volume in quarts, 4 decimal places", Some(6), 6, Fixed),
    ai("3425", "Logistic volume in quarts, 5 decimal places", Some(6), 6, Fixed),
    ai("3426", "Logistic volume in quarts, 6 decimal places", Some(6), 6, Fixed),
    ai("3427", "Logistic volume in quarts, 7 decimal places", Some(6), 6, Fixed),
    ai("3428", "Logistic volume in quarts, 8 decimal places", Some(6), 6, Fixed),
    ai("3429", "Logistic volume in quarts, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3430",
      "Logistic volume in gallons, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3431",
      "Logistic volume in gallons, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3432",
      "Logistic volume in gallons, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3433",
      "Logistic volume in gallons, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3434",
      "Logistic volume in gallons, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3435",
      "Logistic volume in gallons, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3436",
      "Logistic volume in gallons, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3437",
      "Logistic volume in gallons, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3438",
      "Logistic volume in gallons, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3439",
      "Logistic volume in gallons, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3440",
      "Logistic volume in cubic feet, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3441",
      "Logistic volume in cubic feet, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3442",
      "Logistic volume in cubic feet, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3443",
      "Logistic volume in cubic feet, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3444",
      "Logistic volume in cubic feet, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3445",
      "Logistic volume in cubic feet, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3446",
      "Logistic volume in cubic feet, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3447",
      "Logistic volume in cubic feet, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3448",
      "Logistic volume in cubic feet, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3449",
      "Logistic volume in cubic feet, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3450",
      "Logistic weight in troy ounces, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3451",
      "Logistic weight in troy ounces, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3452",
      "Logistic weight in troy ounces, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3453",
      "Logistic weight in troy ounces, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3454",
      "Logistic weight in troy ounces, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3455",
      "Logistic weight in troy ounces, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3456",
      "Logistic weight in troy ounces, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3457",
      "Logistic weight in troy ounces, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3458",
      "Logistic weight in troy ounces, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3459",
      "Logistic weight in troy ounces, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3460",
      "Logistic volume in cubic inches, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3461",
      "Logistic volume in cubic inches, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3462",
      "Logistic volume in cubic inches, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3463",
      "Logistic volume in cubic inches, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3464",
      "Logistic volume in cubic inches, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3465",
      "Logistic volume in cubic inches, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3466",
      "Logistic volume in cubic inches, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3467",
      "Logistic volume in cubic inches, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3468",
      "Logistic volume in cubic inches, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3469",
      "Logistic volume in cubic inches, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3470",
      "Logistic area in square yards, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3471",
      "Logistic area in square yards, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3472",
      "Logistic area in square yards, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3473",
      "Logistic area in square yards, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3474",
      "Logistic area in square yards, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3475",
      "Logistic area in square yards, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3476",
      "Logistic area in square yards, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3477",
      "Logistic area in square yards, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3478",
      "Logistic area in square yards, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3479",
      "Logistic area in square yards, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3480", "Logistic length in feet, 0 decimal places", Some(6), 6, Fixed),
    ai("3481", "Logistic length in feet, 1 decimal places", Some(6), 6, Fixed),
    ai("3482", "Logistic length in feet, 2 decimal places", Some(6), 6, Fixed),
    ai("3483", "Logistic length in feet, 3 decimal places", Some(6), 6, Fixed),
    ai("3484", "Logistic length in feet, 4 decimal places", Some(6), 6, Fixed),
    ai("3485", "Logistic length in feet, 5 decimal places", Some(6), 6, Fixed),
    ai("3486", "Logistic length in feet, 6 decimal places", Some(6), 6, Fixed),
    ai("3487", "Logistic length in feet, 7 decimal places", Some(6), 6, Fixed),
    ai("3488", "Logistic length in feet, 8 decimal places", Some(6), 6, Fixed),
    ai("3489", "Logistic length in feet, 9 decimal places", Some(6), 6, Fixed),
    ai("3490", "Logistic width in feet, 0 decimal places", Some(6), 6, Fixed),
    ai("3491", "Logistic width in feet, 1 decimal places", Some(6), 6, Fixed),
    ai("3492", "Logistic width in feet, 2 decimal places", Some(6), 6, Fixed),
    ai("3493", "Logistic width in feet, 3 decimal places", Some(6), 6, Fixed),
    ai("3494", "Logistic width in feet, 4 decimal places", Some(6), 6, Fixed),
    ai("3495", "Logistic width in feet, 5 decimal places", Some(6), 6, Fixed),
    ai("3496", "Logistic width in feet, 6 decimal places", Some(6), 6, Fixed),
    ai("3497", "Logistic width in feet, 7 decimal places", Some(6), 6, Fixed),
    ai("3498", "Logistic width in feet, 8 decimal places", Some(6), 6, Fixed),
    ai("3499", "Logistic width in feet, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3500",
      "Container weight in kilograms, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3501",
      "Container weight in kilograms, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3502",
      "Container weight in kilograms, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3503",
      "Container weight in kilograms, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3504",
      "Container weight in kilograms, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3505",
      "Container weight in kilograms, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3506",
      "Container weight in kilograms, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3507",
      "Container weight in kilograms, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3508",
      "Container weight in kilograms, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3509",
      "Container weight in kilograms, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3510",
      "Container length in metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3511",
      "Container length in metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3512",
      "Container length in metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3513",
      "Container length in metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3514",
      "Container length in metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3515",
      "Container length in metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3516",
      "Container length in metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3517",
      "Container length in metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3518",
      "Container length in metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3519",
      "Container length in metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3520", "Container width in metres, 0 decimal places", Some(6), 6, Fixed),
    ai("3521", "Container width in metres, 1 decimal places", Some(6), 6, Fixed),
    ai("3522", "Container width in metres, 2 decimal places", Some(6), 6, Fixed),
    ai("3523", "Container width in metres, 3 decimal places", Some(6), 6, Fixed),
    ai("3524", "Container width in metres, 4 decimal places", Some(6), 6, Fixed),
    ai("3525", "Container width in metres, 5 decimal places", Some(6), 6, Fixed),
    ai("3526", "Container width in metres, 6 decimal places", Some(6), 6, Fixed),
    ai("3527", "Container width in metres, 7 decimal places", Some(6), 6, Fixed),
    ai("3528", "Container width in metres, 8 decimal places", Some(6), 6, Fixed),
    ai("3529", "Container width in metres, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3530",
      "Container height in metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3531",
      "Container height in metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3532",
      "Container height in metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3533",
      "Container height in metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3534",
      "Container height in metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3535",
      "Container height in metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3536",
      "Container height in metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3537",
      "Container height in metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3538",
      "Container height in metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3539",
      "Container height in metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3540",
      "Container area in square metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3541",
      "Container area in square metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3542",
      "Container area in square metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3543",
      "Container area in square metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3544",
      "Container area in square metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3545",
      "Container area in square metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3546",
      "Container area in square metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3547",
      "Container area in square metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3548",
      "Container area in square metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3549",
      "Container area in square metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3550",
      "Container volume in litres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3551",
      "Container volume in litres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3552",
      "Container volume in litres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3553",
      "Container volume in litres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3554",
      "Container volume in litres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3555",
      "Container volume in litres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3556",
      "Container volume in litres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3557",
      "Container volume in litres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3558",
      "Container volume in litres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3559",
      "Container volume in litres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3560",
      "Container volume in cubic metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3561",
      "Container volume in cubic metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3562",
      "Container volume in cubic metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3563",
      "Container volume in cubic metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3564",
      "Container volume in cubic metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3565",
      "Container volume in cubic metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3566",
      "Container volume in cubic metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3567",
      "Container volume in cubic metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3568",
      "Container volume in cubic metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3569",
      "Container volume in cubic metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3570",
      "Container weight in pounds, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3571",
      "Container weight in pounds, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3572",
      "Container weight in pounds, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3573",
      "Container weight in pounds, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3574",
      "Container weight in pounds, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3575",
      "Container weight in pounds, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3576",
      "Container weight in pounds, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3577",
      "Container weight in pounds, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3578",
      "Container weight in pounds, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3579",
      "Container weight in pounds, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3580",
      "Container length in inches, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3581",
      "Container length in inches, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3582",
      "Container length in inches, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3583",
      "Container length in inches, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3584",
      "Container length in inches, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3585",
      "Container length in inches, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3586",
      "Container length in inches, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3587",
      "Container length in inches, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3588",
      "Container length in inches, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3589",
      "Container length in inches, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai("3590", "Container width in inches, 0 decimal places", Some(6), 6, Fixed),
    ai("3591", "Container width in inches, 1 decimal places", Some(6), 6, Fixed),
    ai("3592", "Container width in inches, 2 decimal places", Some(6), 6, Fixed),
    ai("3593", "Container width in inches, 3 decimal places", Some(6), 6, Fixed),
    ai("3594", "Container width in inches, 4 decimal places", Some(6), 6, Fixed),
    ai("3595", "Container width in inches, 5 decimal places", Some(6), 6, Fixed),
    ai("3596", "Container width in inches, 6 decimal places", Some(6), 6, Fixed),
    ai("3597", "Container width in inches, 7 decimal places", Some(6), 6, Fixed),
    ai("3598", "Container width in inches, 8 decimal places", Some(6), 6, Fixed),
    ai("3599", "Container width in inches, 9 decimal places", Some(6), 6, Fixed),
    ai(
      "3600",
      "Trade item weight in kilograms, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3601",
      "Trade item weight in kilograms, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3602",
      "Trade item weight in kilograms, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3603",
      "Trade item weight in kilograms, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3604",
      "Trade item weight in kilograms, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3605",
      "Trade item weight in kilograms, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3606",
      "Trade item weight in kilograms, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3607",
      "Trade item weight in kilograms, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3608",
      "Trade item weight in kilograms, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3609",
      "Trade item weight in kilograms, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3610",
      "Trade item length in metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3611",
      "Trade item length in metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3612",
      "Trade item length in metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3613",
      "Trade item length in metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3614",
      "Trade item length in metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3615",
      "Trade item length in metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3616",
      "Trade item length in metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3617",
      "Trade item length in metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3618",
      "Trade item length in metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3619",
      "Trade item length in metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3620",
      "Trade item width in metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3621",
      "Trade item width in metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3622",
      "Trade item width in metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3623",
      "Trade item width in metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3624",
      "Trade item width in metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3625",
      "Trade item width in metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3626",
      "Trade item width in metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3627",
      "Trade item width in metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3628",
      "Trade item width in metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3629",
      "Trade item width in metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3630",
      "Trade item height in metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3631",
      "Trade item height in metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3632",
      "Trade item height in metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3633",
      "Trade item height in metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3634",
      "Trade item height in metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3635",
      "Trade item height in metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3636",
      "Trade item height in metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3637",
      "Trade item height in metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3638",
      "Trade item height in metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3639",
      "Trade item height in metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3640",
      "Trade item area in square metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3641",
      "Trade item area in square metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3642",
      "Trade item area in square metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3643",
      "Trade item area in square metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3644",
      "Trade item area in square metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3645",
      "Trade item area in square metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3646",
      "Trade item area in square metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3647",
      "Trade item area in square metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3648",
      "Trade item area in square metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3649",
      "Trade item area in square metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3650",
      "Trade item volume in litres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3651",
      "Trade item volume in litres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3652",
      "Trade item volume in litres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3653",
      "Trade item volume in litres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3654",
      "Trade item volume in litres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3655",
      "Trade item volume in litres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3656",
      "Trade item volume in litres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3657",
      "Trade item volume in litres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3658",
      "Trade item volume in litres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3659",
      "Trade item volume in litres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3660",
      "Trade item volume in cubic metres, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3661",
      "Trade item volume in cubic metres, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3662",
      "Trade item volume in cubic metres, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3663",
      "Trade item volume in cubic metres, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3664",
      "Trade item volume in cubic metres, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3665",
      "Trade item volume in cubic metres, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3666",
      "Trade item volume in cubic metres, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3667",
      "Trade item volume in cubic metres, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3668",
      "Trade item volume in cubic metres, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3669",
      "Trade item volume in cubic metres, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3670",
      "Trade item weight in pounds, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3671",
      "Trade item weight in pounds, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3672",
      "Trade item weight in pounds, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3673",
      "Trade item weight in pounds, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3674",
      "Trade item weight in pounds, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3675",
      "Trade item weight in pounds, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3676",
      "Trade item weight in pounds, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3677",
      "Trade item weight in pounds, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3678",
      "Trade item weight in pounds, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3679",
      "Trade item weight in pounds, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3680",
      "Trade item length in inches, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3681",
      "Trade item length in inches, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3682",
      "Trade item length in inches, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3683",
      "Trade item length in inches, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3684",
      "Trade item length in inches, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3685",
      "Trade item length in inches, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3686",
      "Trade item length in inches, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3687",
      "Trade item length in inches, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3688",
      "Trade item length in inches, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3689",
      "Trade item length in inches, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3690",
      "Trade item width in inches, 0 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3691",
      "Trade item width in inches, 1 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3692",
      "Trade item width in inches, 2 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3693",
      "Trade item width in inches, 3 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3694",
      "Trade item width in inches, 4 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3695",
      "Trade item width in inches, 5 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3696",
      "Trade item width in inches, 6 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3697",
      "Trade item width in inches, 7 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3698",
      "Trade item width in inches, 8 decimal places",
      Some(6),
      6,
      Fixed,
    ),
    ai(
      "3699",
      "Trade item width in inches, 9 decimal places",
      Some(6),
      6,
      Fixed,
    ),
  ]
}

///|
pub fn measurement_code_prefix(code : String) -> String? {
  if code.length() < 4 {
    None
  } else {
    let prefix = code.unsafe_substring(start=0, end=3)
    if measurement_family(prefix) is Some(_) {
      Some(prefix)
    } else {
      None
    }
  }
}

///|
pub fn measurement_decimal_places(code : String) -> Int? {
  match measurement_code_prefix(code) {
    Some(_) =>
      if code.length() == 4 &&
        code.get_char(3) is Some(digit) &&
        digit.is_ascii_digit() {
        Some(digit.to_int() - ('0' : UInt16).to_int())
      } else {
        None
      }
    None => None
  }
}

///|
pub fn measurement_unit(code : String) -> String? {
  match measurement_code_prefix(code) {
    Some(prefix) => Some(measurement_family(prefix).unwrap().unit)
    None => None
  }
}

///|
pub fn measurement_title(code : String) -> String? {
  match measurement_code_prefix(code) {
    Some(prefix) => Some(measurement_family(prefix).unwrap().title)
    None => None
  }
}

///|
pub fn measurement_value(code : String, encoded : String) -> Int? {
  if !catalog_validate_length(code, encoded) || !is_all_digits(encoded) {
    None
  } else {
    Some(decimal_digits(encoded))
  }
}

///|
pub fn measurement_value_as_decimal(code : String, encoded : String) -> String? {
  match measurement_value(code, encoded) {
    Some(value) =>
      match measurement_decimal_places(code) {
        Some(places) => Some(decimal_format(value, places))
        None => None
      }
    None => None
  }
}

///|
fn decimal_format(value : Int, places : Int) -> String {
  let raw = "\{value}"
  if places == 0 {
    raw
  } else if raw.length() <= places {
    let padding = zero_string(places - raw.length())
    "0.\{padding}\{raw}"
  } else {
    let split = raw.length() - places
    "\{raw.unsafe_substring(start=0, end=split)}.\{raw.unsafe_substring(start=split, end=raw.length())}"
  }
}

///|
fn zero_string(count : Int) -> String {
  let mut value = ""
  for _ in 0.. Int {
  measurement_families().length()
}

///|
pub fn measurement_codes_for_prefix(prefix : String) -> Array[String] {
  if measurement_family(prefix) is None {
    []
  } else {
    [
      for digit in 0..<=9 => "\{prefix}\{digit}"
    ]
  }
}

///|
pub fn measurement_is_supported(code : String) -> Bool {
  measurement_code_prefix(code) is Some(_)
}

///|
pub fn measurement_description(code : String) -> String? {
  match measurement_title(code) {
    Some(title) =>
      match measurement_unit(code) {
        Some(unit) =>
          match measurement_decimal_places(code) {
            Some(places) => Some("\{title} (\{unit}, \{places} decimal places)")
            None => None
          }
        None => None
      }
    None => None
  }
}

///|
pub fn measurement_range_valid(code : String, encoded : String) -> Bool {
  measurement_value(code, encoded) is Some(_) &&
  measurement_decimal_places(code) is Some(_)
}

///|
pub fn measurement_compare(code : String, left : String, right : String) -> Int {
  match measurement_value(code, left) {
    Some(a) =>
      match measurement_value(code, right) {
        Some(b) => if a < b { -1 } else if a > b { 1 } else { 0 }
        None => 0
      }
    None => 0
  }
}

///|
pub fn measurement_is_zero(code : String, encoded : String) -> Bool {
  match measurement_value(code, encoded) {
    Some(value) => value == 0
    None => false
  }
}

///|
pub fn measurement_is_maximum(code : String, encoded : String) -> Bool {
  match measurement_value(code, encoded) {
    Some(value) => value == 999999
    None => false
  }
}

///|
pub fn measurement_scale_factor(code : String) -> Int {
  match measurement_decimal_places(code) {
    Some(places) => power_of_ten(places)
    None => 1
  }
}

///|
fn power_of_ten(exponent : Int) -> Int {
  let mut value = 1
  for _ in 0.. Int? {
  match measurement_value(code, encoded) {
    Some(value) => Some(value)
    None => None
  }
}

///|
pub fn measurement_from_scaled_integer(code : String, value : Int) -> String? {
  match lookup_ai(code) {
    Some(item) if item.fixed_length is Some(size) => {
      let raw = "\{value}"
      if value < 0 || raw.length() > size {
        None
      } else {
        Some(zero_pad_left(raw, size))
      }
    }
    _ => None
  }
}

///|
fn zero_pad_left(value : String, width : Int) -> String {
  let mut result = value
  while result.length() < width {
    result = "0" + result
  }
  result
}

///|
pub fn measurement_unit_symbol(code : String) -> String? {
  match measurement_unit(code) {
    Some(unit) if unit == "kilograms" => Some("kg")
    Some(unit) if unit == "metres" => Some("m")
    Some(unit) if unit == "inches" => Some("in")
    Some(unit) if unit == "litres" => Some("L")
    Some(unit) if unit == "cubic metres" => Some("m3")
    Some(unit) if unit == "pounds" => Some("lb")
    Some(unit) if unit == "gallons" => Some("gal")
    Some(unit) if unit == "quarts" => Some("qt")
    Some(unit) => Some(unit)
    None => None
  }
}

///|
pub fn measurement_report(code : String, encoded : String) -> String {
  match measurement_description(code) {
    Some(description) =>
      match measurement_value_as_decimal(code, encoded) {
        Some(value) => "\{description}: \{value}"
        None => "invalid measurement"
      }
    None => "invalid measurement"
  }
}

///|
pub fn measurement_percent(code : String, encoded : String) -> Int? {
  match measurement_value(code, encoded) {
    Some(value) =>
      match measurement_decimal_places(code) {
        Some(places) => Some(value / power_of_ten(places))
        None => None
      }
    None => None
  }
}

///|
pub fn measurement_normalize_encoded(
  code : String,
  encoded : String,
) -> String? {
  if measurement_range_valid(code, encoded) {
    Some(zero_pad_left(encoded, 6))
  } else {
    None
  }
}

///|
pub fn measurement_family_codes(prefix : String) -> Array[String] {
  measurement_codes_for_prefix(prefix)
}

///|
pub fn measurement_uses_implied_decimal(code : String) -> Bool {
  measurement_decimal_places(code) is Some(_)
}

///|
pub fn measurement_fixed_width(code : String) -> Bool {
  catalog_required_length(code) == Some(6)
}

///|
pub fn measurement_is_metric(code : String) -> Bool {
  match measurement_unit(code) {
    Some("kilograms" | "metres" | "litres" | "cubic metres" | "square metres") =>
      true
    _ => false
  }
}

///|
pub fn measurement_is_imperial(code : String) -> Bool {
  match measurement_unit(code) {
    Some(
      "pounds"
      | "inches"
      | "gallons"
      | "quarts"
      | "cubic feet"
      | "square inches"
    ) => true
    _ => false
  }
}

///|
pub fn measurement_family_title(prefix : String) -> String? {
  match measurement_family(prefix) {
    Some(family) => Some(family.title)
    None => None
  }
}

///|
pub fn measurement_family_unit(prefix : String) -> String? {
  match measurement_family(prefix) {
    Some(family) => Some(family.unit)
    None => None
  }
}

///|
pub fn measurement_family_has_decimal(prefix : String) -> Bool {
  match measurement_family(prefix) {
    Some(family) => family.decimal_digits
    None => false
  }
}

///|
pub fn measurement_family_exists(prefix : String) -> Bool {
  measurement_family(prefix) is Some(_)
}