class CatalogItem(BaseModel):
# Required fields
id: str = Field(description="Unique item ID")
name: str = Field(description="Item name")
price: float = Field(description="Item price", gt=0)
orderable: bool = Field(OrderableStatus.YES, description="Whether item is orderable")
taxable: bool = Field(TaxableStatus.NO, description="Whether item is taxable")
table_id: str = Field(description="Table ID where item belongs")
# Optional pricing fields
sale_price: Optional[float] = Field(None, description="Sale price of the item")
ship_weight: Optional[float] = Field(None, description="Shipping weight of the item")
# Optional descriptive fields
headline: Optional[str] = Field(None, description="Item headline (used instead of name on item page)")
caption: Optional[str] = Field(None, description="Item description/caption")
abstract: Optional[str] = Field(None, description="Text used for description on other pages")
label: Optional[str] = Field(None, description="Text used when item appears as special on home page")
# Optional product information
manufacturer: Optional[str] = Field(None, description="Item manufacturer")
brand: Optional[str] = Field(None, description="Item brand")
gender: Optional[str] = Field(None, description="Gender (men/women/unisex) - for apparel")
color: Optional[str] = Field(None, description="Color of the item")
size: Optional[str] = Field(None, description="Size of the item")
# Optional product codes and identifiers
upc: Optional[str] = Field(None, description="Universal Product Code (12-digit)")
manufacturer_part_number: Optional[str] = Field(None, description="Manufacturer's part number")
model_number: Optional[str] = Field(None, description="Model number")
isbn: Optional[str] = Field(None, description="International Standard Book Number")
ean: Optional[str] = Field(None, description="European Article Number (13-digit)")
# Optional categorization
classification: Optional[str] = Field(None, description="Item classification",
pattern="^(new|overstock|damaged|returned|refurbished|open box|liquidation|used)$")
condition: Optional[str] = Field(None, description="Item condition",
pattern="^(New|Like new|Very good|Good|Acceptable|Refurbished|Used)$")
merchant_category: Optional[str] = Field(None, description="Merchant category for Yahoo Shopping")
# Optional availability and shipping
availability: Optional[str] = Field(None, description="Availability status",
pattern="^(SAME_DAY|NEXT_DAY|2_3_DAY|3_4_DAY|5_7_DAY|1_2_WEEKS|2_3_WEEKS|4_6_WEEKS|6_8_WEEKS|CONTACT_US|IN_STOCK|AVAILABLE|OUT_OF_STOCK|PRE_ORDER)$")
# Optional checkout requirements
need_bill: Optional[bool] = Field(None, description="Whether billing address is required")
need_payment: Optional[bool] = Field(None, description="Whether payment information is required")
need_pay_ship: Optional[bool] = Field(None, description="Whether shipping address is required")
# Optional pricing and promotions
personalization_charge: Optional[float] = Field(None, description="Charge for monogram/inscription")
msrp: Optional[str] = Field(None, description="Manufacturer's suggested retail price")
# Optional web and shopping integration
product_url: Optional[str] = Field(None, description="Product URL")
inyshopping: Optional[bool] = Field(None, description="Include in Yahoo Shopping")
yahoo_shopping_category: Optional[str] = Field(None, description="Yahoo Shopping category")
# Optional age and media information
age_group: Optional[str] = Field(None, description="Age group",
pattern="^(infant|toddler|child|pre-teen|teen|adult)$")
age_range: Optional[str] = Field(None, description="Age range (for toys)")
medium: Optional[str] = Field(None, description="Media type for music/video",
pattern="^(CD|Casette|MiniDisc|LPd|EP|45|VHS|Beta|8mm|Laser Disc|DVD|VCD)$")
# Optional style information
style_number: Optional[str] = Field(None, description="Style number (for apparel/home & garden)")
style: Optional[str] = Field(None, description="Style description (e.g., 'chino', 'denim')")
promo_text: Optional[str] = Field(None, description="Promotional text (up to 50 chars)", max_length=50)
# Optional flags
gift_cert: Optional[bool] = Field(None, description="Whether item is a gift certificate")
# Custom data and options
custom_data: List[CustomData] = Field(default=[], description="List of custom attributes")
options: List[ItemOption] = Field(default=[], description="List of item options (size, color, etc.)")