{"schema_version":"0.1.0","description":"VAIR Canonical Garment Schema — the normalized representation of a fashion product","schema":{"$defs":{"CircularityProfile":{"description":"Deep circular economy data.\nRecyclers need this. Repair platforms need this.\nThe EU is moving toward mandatory recyclability disclosure.\nVAIR captures it now.","properties":{"mono_material":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True if garment is made of a single fiber type — easiest to recycle","title":"Mono Material"},"disassembly_time_minutes":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Estimated time to disassemble garment for recycling in minutes","title":"Disassembly Time Minutes"},"chemical_inventory_compliant":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"ZDHC MRSL and REACH compliance — no restricted substances","title":"Chemical Inventory Compliant"},"carbon_footprint_kgco2e":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Total carbon footprint in kg CO2 equivalent per garment","title":"Carbon Footprint Kgco2E"},"water_usage_liters":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Water usage in liters per garment during manufacturing","title":"Water Usage Liters"},"recyclability_certified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether recyclability has been formally certified","title":"Recyclability Certified"},"certification_body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who issued the recyclability certification e.g. Cradle to Cradle, OEKO-TEX","title":"Certification Body"}},"title":"CircularityProfile","type":"object"},"ConditionGrade":{"description":"Standardized condition grading for the secondhand market.\n\nMaps to the grading scales used by Vestiaire Collective, The RealReal,\nVinted, and Depop — enabling VAIR records to flow directly into resale\nplatform listings without manual re-grading.\n\nA garment with a documented condition grade sells faster and for more.\nThis is VAIR's contribution to making the secondhand market trustworthy.","enum":["new_with_tags","new_without_tags","excellent","very_good","good","fair","poor"],"title":"ConditionGrade","type":"string"},"ConstructionMethod":{"description":"How the garment was constructed.\nCritical for recycling (can it be disassembled?), repair (how is it sewn?),\nand digital twin accuracy (how does it move?).","enum":["cut_and_sew","fully_fashioned","seamless","knit_to_shape","bonded","embroidered","3d_printed"],"title":"ConstructionMethod","type":"string"},"DigitalTwin":{"description":"Digital fashion layer — the garment's existence before it's physical.\nCLO3D and Browzwear files are now standard in design studios.\nAI shopping agents and virtual try-on systems need this.","properties":{"asset_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL to the 3D asset file (CLO3D, FBX, GLTF etc.)","title":"Asset Url"},"format":{"anyOf":[{"$ref":"#/$defs/DigitalTwinFormat"},{"type":"null"}],"default":null,"description":"File format of the 3D asset"},"texture_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL to fabric texture map for rendering","title":"Texture Map Url"},"drape_validated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether digital drape has been validated against physical sample","title":"Drape Validated"},"virtual_tryon_ready":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether asset is optimised for virtual try-on platforms","title":"Virtual Tryon Ready"}},"title":"DigitalTwin","type":"object"},"DigitalTwinFormat":{"description":"3D file format for digital twin asset.","enum":["CLO3D","Browzwear","FBX","GLTF","OBJ","Optitex"],"title":"DigitalTwinFormat","type":"string"},"FieldConfidence":{"description":"Per-field confidence metadata. This is VAIR's audit trail for every normalization decision.","properties":{"confidence":{"description":"Confidence score 0.0-1.0","maximum":1.0,"minimum":0.0,"title":"Confidence","type":"number"},"method":{"$ref":"#/$defs/MappingMethod","description":"How this value was determined"},"source_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original column header from supplier file","title":"Source Column"},"source_value":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original raw value before normalization","title":"Source Value"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Human-readable explanation of the mapping decision","title":"Reason"}},"required":["confidence","method"],"title":"FieldConfidence","type":"object"},"FitType":{"description":"How the garment is intended to fit the body.","enum":["slim","regular","relaxed","oversized","tailored","cropped","boxy"],"title":"FitType","type":"string"},"GarmentCategory":{"description":"Top-level garment category — maps to standard fashion taxonomy.","enum":["tops","bottoms","dresses","outerwear","underwear","swimwear","accessories","footwear","activewear"],"title":"GarmentCategory","type":"string"},"GarmentLifecycle":{"description":"The lifecycle layer — what makes a garment immortal.\n\nEvery ownership transfer, repair, and condition change is recorded here.\nThis record outlives the physical object. When the garment is eventually\nrecycled, the fiber composition data in this record tells the recycler \nexactly what they have — no testing required.\n\nThis is VAIR's contribution to circular fashion: not a claim, not a \ncertification, but a permanent data record that makes circularity \ncommercially viable at scale.","properties":{"current_condition":{"anyOf":[{"$ref":"#/$defs/ConditionGrade"},{"type":"null"}],"default":null,"description":"Current condition grade — updated at each ownership transfer or repair"},"ownership_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of owners. 0 = brand new, never sold. Increments at each transfer.","title":"Ownership Count"},"last_verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When this record was last verified against the physical garment","title":"Last Verified At"},"repair_records":{"description":"Complete history of repairs performed on this garment","items":{"$ref":"#/$defs/RepairRecord"},"title":"Repair Records","type":"array"},"end_of_life_pathway":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Designated pathway: 'resale', 'rental', 'repair', 'recycling', 'upcycling', 'disposal'","title":"End Of Life Pathway"},"recyclability_certified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether recyclability has been formally certified by a third party","title":"Recyclability Certified"},"resale_value_estimate_eur":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Estimated current resale value in EUR — enables accurate secondhand pricing","title":"Resale Value Estimate Eur"},"original_retail_price_eur":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Original retail price in EUR — context for resale value calculation","title":"Original Retail Price Eur"}},"title":"GarmentLifecycle","type":"object"},"GarmentMeasurements":{"description":"Standardized body measurements for a garment, all in centimeters.\n\nFit prediction applications require consistent cm-based measurements.\nSuppliers send data in inches, mm, or cm — normalization converts to cm.\nNot all measurement types apply to all garment categories (e.g., inseam\nonly relevant for trousers).","properties":{"chest_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Chest/bust width in cm","title":"Chest Cm"},"waist_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Waist measurement in cm","title":"Waist Cm"},"hip_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Hip measurement in cm","title":"Hip Cm"},"length_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Garment length in cm","title":"Length Cm"},"sleeve_length_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Sleeve length in cm","title":"Sleeve Length Cm"},"inseam_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Inseam length in cm (trousers/shorts)","title":"Inseam Cm"},"shoulder_width_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Shoulder seam to seam width in cm","title":"Shoulder Width Cm"},"rise_cm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Rise measurement in cm (trousers)","title":"Rise Cm"}},"title":"GarmentMeasurements","type":"object"},"GenderTarget":{"description":"Target gender for the garment — required for EU DPP and product categorization.","enum":["womenswear","menswear","unisex","childrenswear"],"title":"GenderTarget","type":"string"},"IssueSeverity":{"description":"Severity level for validation issues.","enum":["error","warning","info"],"title":"IssueSeverity","type":"string"},"MappingMethod":{"description":"How a field value was determined.","enum":["exact_match","fuzzy_match","substring_match","inferred","fallback","raw_passthrough","not_found"],"title":"MappingMethod","type":"string"},"MaterialComposition":{"description":"Structured representation of a single fiber in a garment's material composition.\n\nEU Digital Product Passport requires fiber-level breakdown with percentages\nand certification status. Raw supplier data is preserved for audit trail.","properties":{"fiber_name":{"description":"Standardized fiber name, e.g., 'cotton', 'polyester'","title":"Fiber Name","type":"string"},"percentage":{"anyOf":[{"maximum":100.0,"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Percentage of this fiber in the composition","title":"Percentage"},"certified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether this fiber is certified (e.g., GOTS, BCI)","title":"Certified"},"certification_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Certification identifier, e.g., GOTS-12345","title":"Certification Id"}},"required":["fiber_name"],"title":"MaterialComposition","type":"object"},"PhysicalIdentifier":{"description":"The physical anchor that connects the digital VAIR record to the \nphysical garment.\n\nThis is what makes garment identity real — not just a database record,\nbut a scannable, verifiable link between the digital and physical object.\n\nWithout this field: VAIR is a database.\nWith this field: VAIR is infrastructure.\n\nWhen someone points their phone at a garment and VAIR appears —\nthis is the field that makes that possible.","properties":{"identifier_type":{"description":"Type: 'nfc', 'rfid', 'qr', 'barcode', 'digital_watermark'","title":"Identifier Type","type":"string"},"identifier_value":{"description":"The actual identifier — NFC chip ID, QR payload, barcode string","title":"Identifier Value","type":"string"},"embedded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where on the garment: 'care_label', 'inner_seam', 'hang_tag', 'woven_in'","title":"Embedded At"},"issued_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When this identifier was assigned to this garment","title":"Issued At"},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who produced the physical identifier, e.g., 'Avery Dennison', 'Impinj'","title":"Manufacturer"}},"required":["identifier_type","identifier_value"],"title":"PhysicalIdentifier","type":"object"},"RepairRecord":{"description":"A documented repair event in the garment's lifecycle.\n\nRepair history makes garments more valuable — a well-maintained garment \nwith documented professional repair is more trustworthy than one with no \nhistory. This is how VAIR contributes to circular fashion without \nmoralizing about it: repair data has commercial value.","properties":{"repair_date":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the repair was performed","title":"Repair Date"},"repair_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Type of repair: 'zip_replacement', 'seam_repair', 'patch', 'button', 'lining', 'reweave'","title":"Repair Type"},"repaired_by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who performed the repair: 'brand_service', 'certified_repairer', 'owner', or specific entity name","title":"Repaired By"},"condition_before":{"anyOf":[{"$ref":"#/$defs/ConditionGrade"},{"type":"null"}],"default":null,"description":"Condition grade before this repair"},"condition_after":{"anyOf":[{"$ref":"#/$defs/ConditionGrade"},{"type":"null"}],"default":null,"description":"Condition grade after this repair"},"cost_eur":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of repair in EUR — builds the economic case for repair vs replacement","title":"Cost Eur"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Additional repair notes or observations","title":"Notes"}},"title":"RepairRecord","type":"object"},"ResaleIntelligence":{"description":"Resale market intelligence — makes a VAIRified garment worth more\non Vestiaire, Vinted, Depop, The RealReal.\nAuto-populates listings. Removes authentication guesswork.","properties":{"limited_edition":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether this is a limited edition release","title":"Limited Edition"},"edition_number":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Edition or run number e.g. '42/500'","title":"Edition Number"},"authentication_markers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Brand-specific authenticity details e.g. ['hologram_label', 'serial_number_inside_pocket']","title":"Authentication Markers"},"resale_demand_index":{"anyOf":[{"maximum":10.0,"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Computed resale demand score 0-10 based on market signals","title":"Resale Demand Index"},"celebrity_association":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Public figures associated with this item — significant resale value driver","title":"Celebrity Association"}},"title":"ResaleIntelligence","type":"object"},"SizeSystem":{"description":"Size system used by the brand for this garment.\nCritical for fit prediction — the same label means different measurements\nin different systems (e.g., UK 10 ≠ US 10 ≠ EU 38 for women's).","enum":["EU","UK","US","IT","FR","JP","INTL","CN"],"title":"SizeSystem","type":"string"},"SupplyChainTier":{"description":"A single tier in the garment's supply chain.\n\nEU DPP is moving toward tier 2 and tier 3 disclosure requirements.\nVAIR captures this now — before it's mandated — because provenance \ndepth is what separates verified garment identity from marketing claims.\n\nTier 1 = factory        (who cut and sewed the garment)\nTier 2 = fabric mill    (who wove or knit the fabric)\nTier 3 = fiber source   (where the raw material originated)\nTier 4 = farm/mine      (for natural fibers: cotton farm, wool farm)","properties":{"tier_level":{"description":"1=factory, 2=mill, 3=fiber source, 4=farm/mine","maximum":5,"minimum":1,"title":"Tier Level","type":"integer"},"entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the supplier or manufacturer at this tier","title":"Entity Name"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ISO 3166-1 alpha-2 country code, e.g., 'PT', 'BD', 'IN'","title":"Country"},"facility_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Open Apparel Registry ID if available — global standard factory identifier","title":"Facility Id"},"verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether this tier's data has been third-party verified","title":"Verified"},"verification_body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who verified this tier, e.g., 'SGS', 'Bureau Veritas', 'Intertek'","title":"Verification Body"},"certification_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Any certifications held at this tier, e.g., ['GOTS-12345', 'SA8000-67890']","title":"Certification Ids"}},"required":["tier_level"],"title":"SupplyChainTier","type":"object"},"TrendCycle":{"description":"Where this garment sits in the fashion trend cycle.","enum":["core","classic","trending","declining","archive"],"title":"TrendCycle","type":"string"},"UFLPARiskLevel":{"description":"US Uyghur Forced Labor Prevention Act risk assessment.\nCotton or polysilicon originating from Xinjiang is presumed\nforced labor under US law unless proven otherwise.","enum":["low","medium","high","unknown"],"title":"UFLPARiskLevel","type":"string"},"ValidationIssue":{"description":"A structured validation finding with severity, field, and explanation.","properties":{"severity":{"$ref":"#/$defs/IssueSeverity"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Field"},"code":{"title":"Code","type":"string"},"message":{"title":"Message","type":"string"},"suggestion":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Suggestion"}},"required":["severity","code","message"],"title":"ValidationIssue","type":"object"},"WeaveStructure":{"description":"Fabric construction type.\nRecyclers need this to sort correctly. Digital twin systems need this\nto simulate drape and movement accurately. Fit engines need this to\npredict stretch and recovery behavior.","enum":["woven","knit","non_woven","lace","felt","leather","coated"],"title":"WeaveStructure","type":"string"}},"description":"VAIR Canonical Garment Record — the fully normalized representation of a fashion product.\n\nThis schema is the core of VAIR's value: raw, messy supplier data is ingested\nand mapped to this structure, enabling:\n1. EU Digital Product Passport (DPP) compliance exports\n2. Fit prediction via standardized measurements\n3. Product discovery via normalized colors, categories, and materials\n4. Supply chain analytics via structured supplier/country data\n\nAll raw supplier values are preserved alongside normalized values for audit\nand traceability — VAIR never discards original data.","properties":{"vair_id":{"description":"VAIR's unique identifier for this garment record (UUID)","title":"Vair Id","type":"string"},"brand_name":{"description":"Brand that owns this product","title":"Brand Name","type":"string"},"product_name":{"description":"Product display name","title":"Product Name","type":"string"},"sku":{"description":"Brand's internal SKU/article number","title":"Sku","type":"string"},"supplier_sku":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Supplier's own reference number for this product","title":"Supplier Sku"},"category":{"anyOf":[{"$ref":"#/$defs/GarmentCategory"},{"type":"null"}],"default":null,"description":"Top-level garment category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Specific product type, e.g., 't-shirt', 'chino', 'midi dress'","title":"Subcategory"},"gender_target":{"anyOf":[{"$ref":"#/$defs/GenderTarget"},{"type":"null"}],"default":null,"description":"Target gender market for this garment"},"season":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Fashion season code, e.g., 'SS26', 'AW26', 'Pre-Fall 26'","title":"Season"},"collection":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Named collection this product belongs to","title":"Collection"},"materials":{"description":"Structured fiber composition breakdown. EU DPP requires this at fiber level.","items":{"$ref":"#/$defs/MaterialComposition"},"title":"Materials","type":"array"},"primary_material":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dominant fiber by percentage — derived from materials list","title":"Primary Material"},"material_description_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original material string from supplier, preserved for audit. E.g., '95% Baumwolle 5% Elasthan'","title":"Material Description Raw"},"size_system":{"anyOf":[{"$ref":"#/$defs/SizeSystem"},{"type":"null"}],"default":null,"description":"Size system used for size_label"},"size_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Size as labeled by brand, e.g., 'M', '40', '8'","title":"Size Label"},"measurements":{"anyOf":[{"$ref":"#/$defs/GarmentMeasurements"},{"type":"null"}],"default":null,"description":"Standardized measurements in cm. All units converted from supplier's original."},"measurement_unit_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original measurement unit from supplier before conversion (cm/in/mm)","title":"Measurement Unit Raw"},"color_primary":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Standardized color name, mapped from brand color name","title":"Color Primary"},"color_secondary":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Secondary color if multi-color garment","title":"Color Secondary"},"color_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original color string from supplier, e.g., 'Midnight Navy' or 'col: 089'","title":"Color Raw"},"hex_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Hex color code if available or mappable","title":"Hex Code"},"fit_type":{"anyOf":[{"$ref":"#/$defs/FitType"},{"type":"null"}],"default":null,"description":"How the garment is intended to fit — slim, regular, oversized etc."},"stretch_percentage":{"anyOf":[{"maximum":100.0,"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Fabric stretch percentage. 0=woven no stretch, 100=full stretch. Critical for returns prevention — size alone doesn't predict fit.","title":"Stretch Percentage"},"size_run_complete":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether the full size range is available for this product","title":"Size Run Complete"},"vanity_sizing_offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"How many sizes this brand runs large (+) or small (-) vs true size. e.g., -1 means brand's M fits like a true S.","title":"Vanity Sizing Offset"},"care_instructions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Standardized care instructions list","title":"Care Instructions"},"care_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original care text from supplier before normalization","title":"Care Raw"},"country_of_manufacturing":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ISO 3166-1 alpha-2 country code for manufacturing location, e.g., 'CN', 'PT', 'BD'","title":"Country Of Manufacturing"},"country_of_origin_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original country text from supplier, e.g., 'Made in PRC', 'China', 'CHN'","title":"Country Of Origin Raw"},"dpp_missing_fields":{"description":"List of DPP-mandatory fields that are still absent in this record","items":{"type":"string"},"title":"Dpp Missing Fields","type":"array"},"durability_score":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Durability rating 1-10 if provided by supplier","title":"Durability Score"},"recyclability_info":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Recyclability information or instructions","title":"Recyclability Info"},"environmental_impact":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Environmental impact statement or certifications","title":"Environmental Impact"},"agec_environmental_cost_eur":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"French AGEC mandatory environmental cost disclosure in EUR. Live since October 2025. Required for all brands selling in France.","title":"Agec Environmental Cost Eur"},"agec_display_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether AGEC environmental cost display is required for this product based on fiber composition and French market exposure.","title":"Agec Display Required"},"reach_compliant":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"EU REACH regulation compliance — no restricted chemical substances","title":"Reach Compliant"},"california_prop65_compliant":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"California Proposition 65 compliance for US market","title":"California Prop65 Compliant"},"uflpa_risk_level":{"anyOf":[{"$ref":"#/$defs/UFLPARiskLevel"},{"type":"null"}],"default":null,"description":"US Uyghur Forced Labor Prevention Act risk assessment. High risk if cotton or polysilicon originates from Xinjiang."},"physical_identifier":{"anyOf":[{"$ref":"#/$defs/PhysicalIdentifier"},{"type":"null"}],"default":null,"description":"Physical anchor linking this digital record to the physical object (NFC, RFID, QR)"},"fabric_weight_gsm":{"anyOf":[{"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Fabric weight in grams per square meter. Recyclers need this to sort correctly.","title":"Fabric Weight Gsm"},"weave_structure":{"anyOf":[{"$ref":"#/$defs/WeaveStructure"},{"type":"null"}],"default":null,"description":"Fabric construction type — woven, knit, non-woven. Affects drape, stretch, care, recycling."},"construction_method":{"anyOf":[{"$ref":"#/$defs/ConstructionMethod"},{"type":"null"}],"default":null,"description":"How the garment was made. Cut-and-sew vs seamless vs fully fashioned changes repairability."},"finishing_treatments":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Surface treatments applied: e.g., ['stonewash', 'water_repellent', 'anti_pill']","title":"Finishing Treatments"},"num_fabric_components":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of distinct fabric components: shell + lining + interlining = 3. Affects recyclability.","title":"Num Fabric Components"},"hs_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Harmonized System code (6-digit minimum, 10-digit HTSUS/TARIC). 18% of supplier HS codes are incorrect — VAIR validates against known textile chapters.","title":"Hs Code"},"hs_code_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Original HS code from supplier before validation","title":"Hs Code Raw"},"hs_code_confidence":{"anyOf":[{"maximum":1.0,"minimum":0.0,"type":"number"},{"type":"null"}],"default":null,"description":"Confidence in HS code accuracy — low confidence triggers review flag","title":"Hs Code Confidence"},"supply_chain_tiers":{"description":"Structured supply chain data by tier. Tier 1=factory, 2=mill, 3=fiber source.","items":{"$ref":"#/$defs/SupplyChainTier"},"title":"Supply Chain Tiers","type":"array"},"trend_cycle":{"anyOf":[{"$ref":"#/$defs/TrendCycle"},{"type":"null"}],"default":null,"description":"Where this garment sits in the fashion trend cycle"},"aesthetic_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Cultural aesthetic descriptors e.g. ['quiet luxury', 'gorpcore', 'coastal grandmother']. Maps to how AI shopping agents categorize and surface products.","title":"Aesthetic Tags"},"color_trend_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Pantone season reference or WGSN trend code e.g. 'Pantone 17-1230 Peach Fuzz SS26'","title":"Color Trend Ref"},"digital_twin":{"anyOf":[{"$ref":"#/$defs/DigitalTwin"},{"type":"null"}],"default":null,"description":"3D digital twin asset — CLO3D, Browzwear, GLTF. Required for virtual try-on, AI styling, digital fashion."},"circularity":{"anyOf":[{"$ref":"#/$defs/CircularityProfile"},{"type":"null"}],"default":null,"description":"Deep circular economy data — recyclability, carbon, water, chemicals."},"resale_intelligence":{"anyOf":[{"$ref":"#/$defs/ResaleIntelligence"},{"type":"null"}],"default":null,"description":"Resale market data — auto-populates Vestiaire, Vinted, Depop listings."},"lifecycle":{"anyOf":[{"$ref":"#/$defs/GarmentLifecycle"},{"type":"null"}],"default":null,"description":"Complete lifecycle record — condition, ownership, repairs, end-of-life pathway."},"supplier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Internal ID of the supplier who provided this data","title":"Supplier Id"},"ingested_at":{"description":"UTC timestamp when this record was ingested","format":"date-time","title":"Ingested At","type":"string"},"source_filename":{"description":"Filename of the source file this record was extracted from","title":"Source Filename","type":"string"},"field_confidences":{"additionalProperties":{"$ref":"#/$defs/FieldConfidence"},"description":"Per-field confidence scores with mapping method and provenance. Keys are canonical field names.","title":"Field Confidences","type":"object"},"normalization_confidence":{"default":0.0,"description":"Confidence score 0.0–1.0 for the normalization quality. 1.0 = all fields mapped with certainty.","maximum":1.0,"minimum":0.0,"title":"Normalization Confidence","type":"number"},"normalization_warnings":{"description":"Issues flagged during normalization, e.g., 'Could not parse material string', 'Color code unmappable'","items":{"type":"string"},"title":"Normalization Warnings","type":"array"},"validation_issues":{"description":"Structured validation findings with severity levels","items":{"$ref":"#/$defs/ValidationIssue"},"title":"Validation Issues","type":"array"},"schema_version":{"default":"0.2.0","description":"VAIR schema version this record conforms to","title":"Schema Version","type":"string"}},"required":["vair_id","brand_name","product_name","sku","source_filename"],"title":"GarmentRecord","type":"object"}}