{
    "description": "Unified alias and pattern configuration with 4 sections: date, time, repeat, and full term aliases",
    "note": "All patterns are centralized here. Full term aliases use input/output matching with ? for missing segments.",
    "dateAliases": {
        "description": "Single-field date aliases - transform user input to normalized day values",
        "aliases": {
            "1st": "1",
            "2nd": "2",
            "3rd": "3",
            "4th": "4",
            "5th": "5",
            "6th": "6",
            "7th": "7",
            "8th": "8",
            "9th": "9",
            "10th": "10",
            "11th": "11",
            "12th": "12",
            "13th": "13",
            "14th": "14",
            "15th": "15",
            "16th": "16",
            "17th": "17",
            "18th": "18",
            "19th": "19",
            "20th": "20",
            "21st": "21",
            "22nd": "22",
            "23rd": "23",
            "24th": "24",
            "25th": "25",
            "26th": "26",
            "27th": "27",
            "28th": "28",
            "29th": "29",
            "30th": "30",
            "31st": "31",
            "tomorrow": "today+1d",
            "intwodays": "today+2d",
            "inthreedays": "today+3d",
            "inahour": "today+1h",
            "inaday": "today+1d",
            "inaweek": "week+1",
            "inaquarter": "quarter+1",
            "inayear": "year+1",
            "nextweek": "week+1",
            "intwoweeks": "week+2",
            "inthreeweeks": "week+3",
            "nextmonth": "month+1",
            "inamonth": "month+1",
            "intwomonths": "month+2",
            "insixmonths": "month+6",
            "nextquarter": "quarter+1",
            "intwoquarters": "quarter+2",
            "nextyear": "year+1",
            "intwoyears": "year+2",
            "weekday": "weekdays",
            "weekend": "weekends",
            "businessdays": "weekdays",
            "bizdays": "weekdays",
            "annually": "yearly",
            "semiannual": "yearly",
            "semiannually": "yearly",
            "sunday": "su",
            "monday": "mo",
            "tuesday": "tu",
            "wednesday": "we",
            "thursday": "th",
            "friday": "fr",
            "saturday": "sa"
        }
    },
    "timeAliases": {
        "description": "Single-field time aliases - transform user input to normalized time values",
        "aliases": {
            "midnight": "0:00",
            "early": "3:00",
            "dawn": "6:00",
            "breakfast": "6:00",
            "morning": "9:00",
            "midday": "12:00",
            "noon": "12:00",
            "lunch": "12:00",
            "afternoon": "15:00",
            "dusk": "18:00",
            "dinner": "18:00",
            "evening": "21:00",
            "late": "22:00",
            "night": "23:00"
        }
    },
    "repeatAliases": {
        "description": "Single-field recurrence aliases - transform user input to normalized recur values",
        "aliases": {
            "single": "once",
            "onetime": "once",
            "oneshot": "once",
            "every_other": "alternate",
            "other": "alternate",
            "every_second": "alternate",
            "every_two": "alternate",
            "bi": "alternate",
            "biweekly": "alternate",
            "twice": "double",
            "double_frequency": "double",
            "semi": "double",
            "semiweekly": "double",
            "continuous": "always",
            "neverending": "always",
            "forever": "always",
            "endless": "always",
            "periodic": "every"
        }
    },
    "fullTermAliases": {
        "description": "Multi-segment pattern aliases using input/output templates with ? for missing segments. Strict patterns take precedence over generic patterns.",
        "note": "Placeholders in output ('day', 'time', 'recur') are replaced with actual input values. ? represents missing segments.",
        "generic": {
            "description": "Generic rules that match any value in a segment",
            "@day@?@?": {
                "description": "Only day provided (generic - any day)",
                "output": "@day@*@*"
            },
            "@?@time@?": {
                "description": "Only time provided (generic - any time)",
                "output": "@*@time@*"
            },
            "@?@?@recur": {
                "description": "Only recurrence provided (generic - any recur)",
                "output": "@*@*@recur"
            },
            "@day@time@?": {
                "description": "Day and time provided, recur missing (generic)",
                "output": "@day@time@once"
            },
            "@day@?@recur": {
                "description": "Day and recur provided, time missing (generic)",
                "output": "@day@*@recur"
            },
            "@?@time@recur": {
                "description": "Time and recur provided, day missing (generic)",
                "output": "@*@time@recur"
            }
        },
        "specific": {
            "description": "Strict rules that match specific values - take precedence over generic rules",
            "@monday@?@?": {
                "description": "Mondays only: if just 'monday' provided, default to 3pm (15:00)",
                "output": "@monday@3:00pm@*"
            }
        }
    }
}
