{
  "anchors": [],
  "capability": "robotics.trade",
  "codebooks": {
    "commodity": {
      "codes": {
        "8428700000": {
          "label": "Industrial robots for lifting, handling, loading or unloading; from 2022-01 only (HS 2022)"
        },
        "8479500000": {
          "label": "Industrial robots, NESOI (multipurpose \u2014 welding/assembly arms, AMRs); continuous history"
        }
      },
      "coverage": "the nomenclature's two robot-specific codes, at HS-10 (where Census publishes quantity)",
      "note": "The two codes are DISJOINT \u2014 adding them does not double-count \u2014 but 8428700000 was created by HS 2022 (carved from ex-8428.90) and has NO data before 2022-01, so a combined time series changes composition at that boundary (a commodity_scope note flags it). No maker, model, or humanoid breakdown exists at any HS level; AMRs classify under 8479500000 (CBP ruling N335129).",
      "semantics": "hs_commodity_code",
      "source": "U.S. Census Bureau Harmonized System (HS) 10-digit statistical codes, verbatim."
    },
    "country_level": {
      "codes": {
        "country": {
          "label": "An individual country of origin"
        },
        "grouping": {
          "label": "A Census country grouping / continent (overlaps \u2014 never summed)"
        },
        "total": {
          "label": "All countries (the published U.S. total)"
        }
      },
      "coverage": "every served row is exactly one level",
      "note": "total = the all-countries TOTAL (CTY_CODE '-'); grouping = a Census bloc/continent (ASIA, APEC, EU, OECD, ASEAN, the '<n>XXX' continents) that OVERLAPS other rows; country = an individual country of origin. The groupings overlap each other and the countries \u2014 never sum across rows; the served TOTAL is the only national figure.",
      "semantics": "census_intltrade_country_level",
      "source": "Derived from the Census CTY_CODE structure."
    }
  },
  "data_point": {
    "does_not_answer": [
      "the installed base or operational stock of robots in US factories \u2014 this is the monthly import FLOW (the stock series is IFR World Robotics, proprietary; the official adoption series is the Census Industrial Robotic Equipment experimental product \u2014 the vertical's named block 2)",
      "robots by maker, model, or type beyond the two-code split \u2014 no vendor series, no humanoid breakout (customs-classified \u2014 AMRs fall under 8479.50 per CBP N335129; a humanoid DEMONSTRATION unit can classify under 9023 per CBP H050116, outside these codes)",
      "domestic robot production \u2014 imports only; there is no robotics NAICS industry (robot manufacturing hides inside NAICS 333998, a grab-bag we refuse to mislabel)",
      "summing across country rows \u2014 Census's groupings (ASIA, APEC, EU, OECD, ASEAN, the continents) OVERLAP each other and the individual countries; the served \"TOTAL FOR ALL COUNTRIES\" (country_level=total) is the only valid total, never a sum the agent computes",
      "a pre-2022 reading of 8428700000 \u2014 the code was created by HS 2022; earlier lifting/handling robots sat inside ex-8428.90 (not served here); a cross-code time series changes composition at 2022-01",
      "landed / CIF / duty-paid cost \u2014 general imports value is customs value; CIF, charges, and calculated duty are separate Census fields not served here",
      "which U.S. factory, state, county, or operator receives the robots \u2014 country is the country of ORIGIN (Census attribution), not a U.S. destination; this series carries no U.S. geographic anchor",
      "exports (this block serves IMPORTS only) or trade in non-robot goods",
      "finality (recent months are preliminary and revised in later Census releases)"
    ],
    "grain": "commodity_country_monthly",
    "id": "robotics.trade",
    "note": "This is the monthly customs value (USD) AND unit count (number of robots) of U.S. imports of industrial robots \u2014 the nomenclature's two robot-specific HS-10 codes, served as the `commodity` dimension: 8479500000 (multipurpose industrial robots; AMRs classify here) and 8428700000 (lifting/handling industrial robots; created by HS 2022 \u2014 no data before 2022-01, a structural absence, never zero) \u2014 by country of origin. NEVER SUM across country rows: Census's groupings (ASIA, APEC, EU, OECD, ASEAN, the continents) overlap each other and the individual countries, and the all-countries TOTAL contains everything. Filter country_level=total for the U.S. national figure. This is the import FLOW, not the installed base of robots in U.S. factories.",
    "product_spec": "blocks/robotics_trade/card.md",
    "represented_fact": "Census International Trade reports the monthly customs value (USD) AND unit count (number of robots) of U.S. IMPORTS of industrial robots under the nomenclature's only two robot-specific codes \u2014 HS-10 8479500000 \"INDUSTRIAL ROBOTS, NESOI\" (multipurpose: welding/assembly arms, AMRs) and 8428700000 \"INDUSTRIAL ROBOTS FOR LIFTING, HANDLING, LOADING OR UNLOADING, NESOI\" (created by HS 2022, carved from ex-8428.90; NO data exists under it before 2022-01 \u2014 a structural absence, never a zero) \u2014 by country of origin and as Census's own published country GROUPINGS and TOTAL. Served as four series exactly as Census publishes: general imports and imports-for-consumption, each in value and units. Each row is served verbatim + cited; the country groupings overlap and are never summed; the two commodity codes are disjoint but a cross-code series changes composition at 2022-01.",
    "source_basis": [
      "trade.census.intltrade_robotics_hs"
    ],
    "source_decisions": [
      "docs/sources/trade/census_intltrade_hs_robotics/build-plan.md"
    ]
  },
  "input": {
    "controls": [
      "include_records",
      "include_evidence",
      "limit",
      "order_by",
      "top_n",
      "order",
      "rollup_other"
    ],
    "date_range_params": [
      "data_month_from",
      "data_month_to"
    ],
    "date_ranges": [
      "data_month"
    ],
    "field_metadata": {
      "quantity_unit": {
        "answer_label": "quantity unit of measure",
        "counting_definition": "A unit label, not a number \u2014 it qualifies general_quantity_units / consumption_quantity_units; never aggregated.",
        "definition": "Census's own UNIT_QY1 code on the cited row \u2014 pinned to 'NO' (number of units) by the gate's SA-UNIT check, so the quantity series always means a count of robots. Served on DETAIL records.",
        "semantics": "census_intltrade_unit_qy1",
        "source_field": "quantity_unit"
      }
    },
    "filters": [
      "as_of",
      "commodity",
      "country",
      "cty_code",
      "country_level",
      "data_month",
      "data_month_from",
      "data_month_to",
      "year"
    ],
    "group_by": [
      "commodity",
      "country",
      "cty_code",
      "country_level",
      "data_month",
      "year"
    ],
    "ranking": {
      "no_ranking": "Omit order_by and top_n to return all groups in group-key order.",
      "order": {
        "default": "desc",
        "valid_values": [
          "desc",
          "asc"
        ]
      },
      "order_by": {
        "accepts": "one of output.metrics",
        "note": "Ranks the groups by a metric (a measure). Not a group_by dimension \u2014 rows already come back grouped by each group_by field.",
        "requires": [
          "group_by"
        ],
        "valid_values": [
          "general_value_usd",
          "consumption_value_usd",
          "general_quantity_units",
          "consumption_quantity_units",
          "source_record_count"
        ]
      },
      "top_n": {
        "note": "Keeps the top N groups by order_by; the rest fold into one (other) remainder (additive metrics sum into it, non-additive ones are nulled) so the result still reconciles to summary.totals.",
        "requires": [
          "group_by",
          "order_by"
        ],
        "type": "positive integer"
      }
    }
  },
  "output": {
    "aggregate_citation_fields": [
      "source_id",
      "publisher",
      "source_url",
      "source_file",
      "raw_file_sha256",
      "as_of",
      "source_rows_count",
      "source_rows_sample",
      "verify",
      "lineage_filter"
    ],
    "citation_fields": [
      "source_id",
      "source_url",
      "source_file",
      "sheet",
      "source_row",
      "raw_file_sha256",
      "as_of"
    ],
    "detail_fields": [
      "source_id",
      "sheet_name",
      "source_record_key",
      "report_period",
      "commodity",
      "commodity_desc",
      "cty_code",
      "country",
      "country_level",
      "data_month",
      "year",
      "general_value_usd",
      "consumption_value_usd",
      "general_quantity_units",
      "consumption_quantity_units",
      "quantity_unit",
      "source_row_number",
      "as_of",
      "raw_file_sha256",
      "citation"
    ],
    "metric_groups": {
      "consumption_quantity_units": [
        "consumption_quantity_units"
      ],
      "consumption_value_usd": [
        "consumption_value_usd"
      ],
      "general_quantity_units": [
        "general_quantity_units"
      ],
      "general_value_usd": [
        "general_value_usd"
      ],
      "records": [
        "source_record_count"
      ]
    },
    "metric_metadata": {
      "consumption_quantity_units": {
        "additive_across_groups": false,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.consumption_quantity_units",
        "category": "consumption_quantity_units",
        "definition": "The number of industrial robots in imports FOR CONSUMPTION for the country row in scope, exactly as Census publishes it (CON_QY1_MO; unit of measure 'NO' = number of units).",
        "description": "NONADDITIVE across country rows: the groupings (ASIA, APEC, EU, OECD, ASEAN, the continents) overlap each other and the individual countries, and the all-countries TOTAL contains everything \u2014 a cross-row sum double-counts. A result spanning more than one country row without grouping by country carries a country_aggregation scope note and ranking remainders omit the metric \u2014 filter country_level=total for the national figure, country_level=country for individual countries, or group_by country for the per-country series. The two commodity codes, by contrast, are DISJOINT (adding them does not double-count), but 8428700000 has no data before 2022-01 \u2014 a combined time series changes composition at that boundary (a commodity_scope note flags it).",
        "display_name": "Imports-for-consumption quantity (number of robots)",
        "display_precision": "Unit counts as published by Census (integers in the source), rounded to 6 decimal places in JSON.",
        "grain": "commodity country month",
        "null_handling": "A (commodity, country, month) cell Census did not publish is absent (a country with no robot shipments that month is simply not a row), never zero; 8428700000 before 2022-01 is structurally absent (the code was created by HS 2022); an empty-query summary returns zero.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.consumption_quantity_units",
        "source_fields": [
          "consumption_quantity_units"
        ],
        "unit": "count"
      },
      "consumption_value_usd": {
        "additive_across_groups": false,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.consumption_value_usd",
        "category": "consumption_value_usd",
        "definition": "The total customs value (USD) of imports FOR CONSUMPTION of industrial robots for the country row in scope, exactly as Census publishes it (CON_VAL_MO).",
        "description": "NONADDITIVE across country rows: the groupings (ASIA, APEC, EU, OECD, ASEAN, the continents) overlap each other and the individual countries, and the all-countries TOTAL contains everything \u2014 a cross-row sum double-counts. A result spanning more than one country row without grouping by country carries a country_aggregation scope note and ranking remainders omit the metric \u2014 filter country_level=total for the national figure, country_level=country for individual countries, or group_by country for the per-country series. The two commodity codes, by contrast, are DISJOINT (adding them does not double-count), but 8428700000 has no data before 2022-01 \u2014 a combined time series changes composition at that boundary (a commodity_scope note flags it).",
        "display_name": "Imports-for-consumption value",
        "display_precision": "Values are in USD, rounded to 6 decimal places in JSON to remove binary floating-point noise.",
        "grain": "commodity country month",
        "null_handling": "A (commodity, country, month) cell Census did not publish is absent (a country with no robot shipments that month is simply not a row), never zero; 8428700000 before 2022-01 is structurally absent (the code was created by HS 2022); an empty-query summary returns zero.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.consumption_value_usd",
        "source_fields": [
          "consumption_value_usd"
        ],
        "unit": "USD"
      },
      "general_quantity_units": {
        "additive_across_groups": false,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.general_quantity_units",
        "category": "general_quantity_units",
        "definition": "The number of industrial robots in GENERAL imports for the country row in scope, exactly as Census publishes it (GEN_QY1_MO; unit of measure 'NO' = number of units).",
        "description": "NONADDITIVE across country rows: the groupings (ASIA, APEC, EU, OECD, ASEAN, the continents) overlap each other and the individual countries, and the all-countries TOTAL contains everything \u2014 a cross-row sum double-counts. A result spanning more than one country row without grouping by country carries a country_aggregation scope note and ranking remainders omit the metric \u2014 filter country_level=total for the national figure, country_level=country for individual countries, or group_by country for the per-country series. The two commodity codes, by contrast, are DISJOINT (adding them does not double-count), but 8428700000 has no data before 2022-01 \u2014 a combined time series changes composition at that boundary (a commodity_scope note flags it).",
        "display_name": "General imports quantity (number of robots)",
        "display_precision": "Unit counts as published by Census (integers in the source), rounded to 6 decimal places in JSON.",
        "grain": "commodity country month",
        "null_handling": "A (commodity, country, month) cell Census did not publish is absent (a country with no robot shipments that month is simply not a row), never zero; 8428700000 before 2022-01 is structurally absent (the code was created by HS 2022); an empty-query summary returns zero.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.general_quantity_units",
        "source_fields": [
          "general_quantity_units"
        ],
        "unit": "count"
      },
      "general_value_usd": {
        "additive_across_groups": false,
        "aggregation": "sum",
        "authoritative_total_path": "summary.totals.general_value_usd",
        "category": "general_value_usd",
        "definition": "The total customs value (USD) of GENERAL imports of industrial robots (HS-10 8479500000 + 8428700000) for the country row in scope, exactly as the U.S. Census Bureau publishes it (GEN_VAL_MO).",
        "description": "NONADDITIVE across country rows: the groupings (ASIA, APEC, EU, OECD, ASEAN, the continents) overlap each other and the individual countries, and the all-countries TOTAL contains everything \u2014 a cross-row sum double-counts. A result spanning more than one country row without grouping by country carries a country_aggregation scope note and ranking remainders omit the metric \u2014 filter country_level=total for the national figure, country_level=country for individual countries, or group_by country for the per-country series. The two commodity codes, by contrast, are DISJOINT (adding them does not double-count), but 8428700000 has no data before 2022-01 \u2014 a combined time series changes composition at that boundary (a commodity_scope note flags it).",
        "display_name": "General imports value",
        "display_precision": "Values are in USD, rounded to 6 decimal places in JSON to remove binary floating-point noise.",
        "grain": "commodity country month",
        "null_handling": "A (commodity, country, month) cell Census did not publish is absent (a country with no robot shipments that month is simply not a row), never zero; 8428700000 before 2022-01 is structurally absent (the code was created by HS 2022); an empty-query summary returns zero.",
        "rollup_behavior": "non_additive_measure",
        "row_metric_path": "rows[].metrics.general_value_usd",
        "source_fields": [
          "general_value_usd"
        ],
        "unit": "USD"
      },
      "source_record_count": {
        "additive_across_groups": true,
        "aggregation": "count source records",
        "authoritative_total_path": "summary.totals.source_record_count",
        "category": "records",
        "definition": "Count of normalized source records (commodity \u00d7 country \u00d7 month rows) contributing to the current result scope.",
        "description": "Number of normalized Census import rows (commodity \u00d7 country \u00d7 month) contributing to the value.",
        "display_name": "Source record count",
        "display_precision": "Integer.",
        "grain": "source row",
        "null_handling": "Always an integer count.",
        "rollup_behavior": "additive_partition_metric",
        "row_metric_path": "rows[].metrics.source_record_count",
        "source_fields": [
          "source_record_key"
        ],
        "unit": "count"
      }
    },
    "metrics": [
      "general_value_usd",
      "consumption_value_usd",
      "general_quantity_units",
      "consumption_quantity_units",
      "source_record_count"
    ],
    "summary_fields": [
      "group_count",
      "totals"
    ]
  },
  "primitive": "query_robotics_trade_v1",
  "status": "available"
}
