{
        "title": "Quotations Management",
        "modulePath": "quotations",
        "header": [
            {
                "type": "button",
                "label": "New Quotation",
                "icon": "fa-plus",
                "class": "btn btn-primary",
                "action": {
                    "handler": "openQuotationForm"
                },
                "ariaLabel": "Create new quotation"
            },
            {
                "type": "filter-select",
                "options": {
                    "data_column": "status",
                    "label": "Status",
                    "options": [
                        {"label": "All", "value": ""},
                        {"label": "Draft", "value": "draft"},
                        {"label": "Sent", "value": "sent"},
                        {"label": "Accepted", "value": "accepted"},
                        {"label": "Rejected", "value": "rejected"},
                        {"label": "Expired", "value": "expired"},
                        {"label": "Converted", "value": "converted"}
                    ]
                }
            },
            {
                "type": "filter-date-range",
                "options": {
                    "data_column": "date",
                    "label": "Date Range"
                }
            },
            {
                "type": "button",
                "label": "Refresh",
                "icon": "fa-sync",
                "class": "btn btn-ghost",
                "action": "refresh",
                "ariaLabel": "Refresh quotations list"
            }
        ],
        "body": [
            {
                "type": "table",
                "id": "quotationsTable",
                "options": {
                    "tableName": "quotations",
                    "primaryKeyField": "quotation_id",
                    "showGlobalSearch": true,
                    "columnsToShow": [
                        "quotation_number",
                        "date",
                        "customer_id",
                        "total_amount",
                        "tax_amount",
                        "status",
                        "sent_at",
                        "expires_at"
                    ],
                    "columnLabels": {
                        "quotation_number": "Quote #",
                        "date": "Date",
                        "customer_id": "Customer",
                        "total_amount": "Amount",
                        "tax_amount": "Tax",
                        "status": "Status",
                        "sent_at": "Sent",
                        "expires_at": "Expires"
                    },
                    "rowClick": "selectRecord",
                    "rowActions": [
                        {
                            "label": "View",
                            "icon": "fa-eye",
                            "class": "btn btn-info btn-xs",
                            "action": "openSelectedDetail",
                            "ariaLabel": "View quotation details"
                        },
                        {
                            "label": "Send",
                            "icon": "fa-paper-plane",
                            "class": "btn btn-primary btn-xs",
                            "action": "quotations:send",
                            "condition": "status == \"draft\"",
                            "confirm": "Send this quotation to the customer?",
                            "ariaLabel": "Send quotation to customer"
                        },
                        {
                            "label": "Convert",
                            "icon": "fa-file-invoice",
                            "class": "btn btn-success btn-xs",
                            "action": "quotations:convert",
                            "condition": "status == \"sent\" || status == \"accepted\"",
                            "confirm": "Convert this quotation to an invoice?",
                            "ariaLabel": "Convert quotation to invoice"
                        },
                        {
                            "label": "Accept",
                            "icon": "fa-check",
                            "class": "btn btn-success btn-xs",
                            "action": "quotations:accept",
                            "condition": "status == \"sent\"",
                            "confirm": "Accept this quotation?",
                            "ariaLabel": "Accept quotation"
                        },
                        {
                            "label": "Reject",
                            "icon": "fa-times",
                            "class": "btn btn-error btn-xs",
                            "action": "quotations:reject",
                            "condition": "status == \"sent\"",
                            "confirm": "Reject this quotation?",
                            "ariaLabel": "Reject quotation"
                        },
                        {
                            "label": "Duplicate",
                            "icon": "fa-copy",
                            "class": "btn btn-ghost btn-xs",
                            "action": "quotations:duplicate",
                            "ariaLabel": "Duplicate quotation"
                        },
                        {
                            "label": "PDF",
                            "icon": "fa-file-pdf",
                            "class": "btn btn-secondary btn-xs",
                            "action": "quotations:pdf",
                            "ariaLabel": "Download quotation PDF"
                        },
                        {
                            "label": "Delete",
                            "icon": "fa-trash",
                            "class": "btn btn-error btn-xs btn-outline",
                            "action": "records:delete",
                            "condition": "status == \"draft\" || status == \"expired\"",
                            "confirm": "Are you sure you want to delete this quotation?",
                            "ariaLabel": "Delete quotation"
                        }
                    ]
                }
            }
        ],
        "footer": [
            {
                "type": "button",
                "label": "Close",
                "class": "btn btn-ghost",
                "action": "close",
                "ariaLabel": "Close quotations module"
            }
        ],
        "dataSources": {
            "quotations": {
                "table": "quotations",
                "syncPolicy": "default",
                "autoRefresh": true,
                "refreshInterval": 30000
            }
        }
    }