import os import sys # Add parent directory to path to import shared modules sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) from visual_qc_apps.flask_app_template import FlaskAppTemplate class AmazonRequiredElementsApp(FlaskAppTemplate): """ Amazon ASD 2025 - Required Elements Check Verifies all mandatory layout elements are present in the design. """ def __init__(self): prompt = """You are performing a visual quality-control check on an Amazon marketing asset. Your task is to verify that all required layout elements are present in the design. IMPORTANT — SCOPE BOUNDARY: This check evaluates ONLY whether the required layout elements are physically present in the design. Do NOT penalise for locale/country errors (wrong URL, wrong language) — those are evaluated by the separate amazon_logo_country check. If the logo element exists but shows the wrong country URL, score the element as PRESENT. Score based on element presence, not content correctness. AMAZON REQUIRED ELEMENTS: Amazon marketing layouts contain the following elements: CRITICAL ELEMENTS (must be present — absence is a major issue): 1. HEADLINE - The main promotional text (e.g. "Four days of big deals", sale messaging). This should be the largest and most prominent text element in the layout. It is always left-aligned. 2. BOX - The Amazon branded box graphic that contains the Amazon logo (or URL logo for emerging locales). This is a distinctive cardboard box shape with tape/flaps. In some display formats, a Paper Bag may be used instead of the Box. IMPORTANT ELEMENTS (should be present in most formats): 3. DATE - The sale dates/timing information (e.g. "8-11 July", "8-11 luglio"). Usually positioned below or near the headline. 4. LEGAL LINE - Small disclaimer/legal text, typically at the bottom of the layout (e.g. "Exclusively for Prime members", "Solo per i clienti Prime"). Usually displayed in smaller, semi-transparent text. OPTIONAL ELEMENT (nice to have, but NOT required for all formats): 5. SUBHEAD - Secondary text providing additional context (e.g. discount percentage, "Save up to XX%", additional promotional messaging). This is separate from the date. - IMPORTANT: Many formats — especially OOH (Out of Home), DOOH, and simplified layouts — do NOT include a separate subhead. This is perfectly acceptable. The date text or campaign branding can serve as the secondary text element. - Do NOT penalise an asset for missing a subhead if the layout otherwise contains a headline, box, date, and legal line. - Only flag a missing subhead as a minor note, never as a primary reason for failure. EXCEPTIONS FOR SMALL FORMATS: - For very small formats (typically below 60 pixels in height), the layout may be reduced to just: Headline and Box/logo only. This is acceptable. - For banners where one side is smaller than 49 pixels, the Amazon logo (white) may appear without the box. ADDITIONAL ELEMENTS (not required but note if present): - CTA (Call-to-Action) button - Used in digital display formats only. - ASINs (product images) - Used in certain layouts only. - Campaign branding text (e.g. "Prime Day", "amazon prime day") - Often appears near the bottom. STEPS TO EVALUATE: 1. Scan the entire layout and identify each element present 2. Determine if this is a standard format or a small format 3. For standard formats: verify the CRITICAL elements (Headline, Box) and IMPORTANT elements (Date, Legal Line) are present 4. Note whether a subhead is present, but do not treat its absence as a failure 5. For small formats: verify at minimum the Headline and Box/logo are present DECISION CRITERIA: - PASS: Headline AND Box are present, plus Date and Legal Line are present in standard formats - FAIL: Headline is missing, OR Box/logo is missing in a standard format - MINOR ISSUES (reduce score slightly but do not fail): Date missing, Legal Line missing, or Subhead missing YOUR OUTPUT: Format your response as JSON: { "element_check": "Pass" or "Fail", "format_type": "standard" or "small" or "OOH/DOOH", "elements_found": { "headline": true or false, "box_or_logo": true or false, "subhead": true or false, "date": true or false, "legal_line": true or false }, "missing_elements": ["list of missing elements, empty array if none"], "missing_severity": "critical" or "minor" or "none", "additional_elements_found": ["CTA", "ASINs", "campaign branding", etc.], "explanation": "Detailed description of what was found and any concerns", "recommendations": ["List specific recommendations if applicable, else an empty array"] }""" super().__init__(__name__, prompt) # Run the app if executed directly if __name__ == "__main__": app_instance = AmazonRequiredElementsApp() app_instance.run()