<?php

/*
 | VPandit Masters registry — ported verbatim from the PHP app master_registry()
 | (37 masters). Adding a master = one entry here; no controller/UI changes needed.
 |
 | Column def keys: name,label,type(text|textarea|number|decimal|email|tel|date|select|bool|html),
 |   req(bool), uniq(bool -> natural key), pii(bool -> AES-256-GCM at rest),
 |   options(assoc for select), list(bool -> show in list table, default true), help(str).
 */

return array (
  'vendors' => 
  array (
    'table' => 'vendors',
    'title' => 'Vendor / Supplier Master',
    'icon' => '🏪',
    'section' => 'Marketplace',
    'singular' => 'Vendor',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Vendor Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Business Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'contact_person',
        'label' => 'Contact Person',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'tel',
        'pii' => true,
      ),
      4 => 
      array (
        'name' => 'email',
        'label' => 'Email',
        'type' => 'email',
        'pii' => true,
      ),
      5 => 
      array (
        'name' => 'gstin',
        'label' => 'GSTIN',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'city',
        'label' => 'City',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'state',
        'label' => 'State',
        'type' => 'text',
      ),
      9 => 
      array (
        'name' => 'address',
        'label' => 'Address',
        'type' => 'textarea',
        'pii' => true,
        'list' => false,
      ),
      10 => 
      array (
        'name' => 'bank_account',
        'label' => 'Bank A/C',
        'type' => 'text',
        'pii' => true,
        'list' => false,
      ),
      11 => 
      array (
        'name' => 'ifsc',
        'label' => 'IFSC',
        'type' => 'text',
        'list' => false,
      ),
      12 => 
      array (
        'name' => 'upi_id',
        'label' => 'UPI ID',
        'type' => 'text',
        'pii' => true,
        'list' => false,
      ),
      13 => 
      array (
        'name' => 'kyc_status',
        'label' => 'KYC',
        'type' => 'select',
        'options' => 
        array (
          'pending' => 'Pending',
          'verified' => 'Verified',
          'rejected' => 'Rejected',
        ),
      ),
      14 => 
      array (
        'name' => 'rating',
        'label' => 'Rating',
        'type' => 'decimal',
        'list' => false,
      ),
      15 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
          'pending' => 'Pending',
        ),
      ),
      16 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
        'list' => false,
      ),
    ),
  ),
  'prod_categories' => 
  array (
    'table' => 'prod_categories',
    'title' => 'Product Categories',
    'icon' => '🗂',
    'section' => 'Marketplace',
    'singular' => 'Category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Category Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'parent',
        'label' => 'Parent Category',
        'type' => 'text',
      ),
      3 =>
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
        'list' => false,
      ),
      4 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      5 =>
      array (
        'name' => 'portal_pct',
        'label' => 'Portal Charge %',
        'type' => 'decimal',
        'help' => 'Commission % the portal deducts from the vendor on each sale in this category.',
      ),
      6 =>
      array (
        'name' => 'portal_fixed',
        'label' => 'Portal Fee / Unit (₹)',
        'type' => 'decimal',
        'help' => 'Flat per-unit fee the portal deducts from the vendor, on top of the %.',
      ),
      7 =>
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' =>
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'products' => 
  array (
    'table' => 'products',
    'title' => 'Product Master',
    'icon' => '📦',
    'section' => 'Marketplace',
    'singular' => 'Product',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'sku',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 =>
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'req' => true,
        'options_from' =>
        array (
          'table' => 'prod_categories',
          'value' => 'name',
          'label' => 'name',
          'order' => 'name',
          'seed_from' =>
          array (
            'table' => 'products',
            'column' => 'category',
          ),
        ),
      ),
      2 =>
      array (
        'name' => 'name',
        'label' => 'Product Name',
        'type' => 'text',
        'req' => true,
      ),
      3 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      4 =>
      array (
        'name' => 'hsn',
        'label' => 'HSN',
        'type' => 'text',
        'list' => false,
      ),
      5 =>
      array (
        'name' => 'gst_pct',
        'label' => 'GST %',
        'type' => 'decimal',
      ),
      6 =>
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' =>
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'vendor_prices' =>
  array (
    'table' => 'vendor_prices',
    'title' => 'Vendor Products (Stock & Price)',
    'icon' => '🏷',
    'section' => 'Marketplace',
    'singular' => 'Vendor Product',
    'unique' => 
    array (
      0 => 
      array (
        0 => 'vendor_code',
        1 => 'product_sku',
      ),
    ),
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'vendor_code',
        'label' => 'Vendor Code',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'product_sku',
        'label' => 'Product SKU',
        'type' => 'text',
        'req' => true,
      ),
      2 =>
      array (
        'name' => 'price',
        'label' => 'Sale Price',
        'type' => 'decimal',
        'req' => true,
      ),
      21 =>
      array (
        'name' => 'stock',
        'label' => 'Stock Qty',
        'type' => 'number',
        'help' => 'Units this vendor has in stock. Portal stock for the product = sum of all vendors\' stock.',
      ),
      3 =>
      array (
        'name' => 'moq',
        'label' => 'Min Order Qty',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'lead_days',
        'label' => 'Lead Days',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'eff_from',
        'label' => 'Effective From',
        'type' => 'date',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'eff_to',
        'label' => 'Effective To',
        'type' => 'date',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'disc_types' => 
  array (
    'table' => 'disc_types',
    'title' => 'Discount Types',
    'icon' => '🏷',
    'section' => 'Discounts & Offers',
    'singular' => 'Discount Type',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'disc_units' => 
  array (
    'table' => 'disc_units',
    'title' => 'Discount Units',
    'icon' => '📐',
    'section' => 'Discounts & Offers',
    'singular' => 'Discount Unit',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'symbol',
        'label' => 'Symbol',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'disc_criteria' => 
  array (
    'table' => 'disc_criteria',
    'title' => 'Discount Criteria',
    'icon' => '🎯',
    'section' => 'Discounts & Offers',
    'singular' => 'Criteria',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'disc_conditions' => 
  array (
    'table' => 'disc_conditions',
    'title' => 'Discount Conditions',
    'icon' => '⚖',
    'section' => 'Discounts & Offers',
    'singular' => 'Condition',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'discounts' => 
  array (
    'table' => 'discounts',
    'title' => 'Coupons / Discounts',
    'icon' => '🎟',
    'section' => 'Discounts & Offers',
    'singular' => 'Coupon',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Coupon Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'type',
        'label' => 'Type',
        'type' => 'select',
        'options' => 
        array (
          'percentage' => 'Percentage',
          'flat' => 'Flat',
          'tiered' => 'Tiered',
        ),
      ),
      3 => 
      array (
        'name' => 'value',
        'label' => 'Value',
        'type' => 'decimal',
        'req' => true,
      ),
      4 => 
      array (
        'name' => 'min_cart',
        'label' => 'Min Cart',
        'type' => 'decimal',
      ),
      5 => 
      array (
        'name' => 'max_discount',
        'label' => 'Max Discount',
        'type' => 'decimal',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'usage_limit',
        'label' => 'Usage Limit',
        'type' => 'number',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'per_user_limit',
        'label' => 'Per-User Limit',
        'type' => 'number',
        'list' => false,
      ),
      8 => 
      array (
        'name' => 'valid_from',
        'label' => 'Valid From',
        'type' => 'date',
      ),
      9 => 
      array (
        'name' => 'valid_to',
        'label' => 'Valid To',
        'type' => 'date',
      ),
      10 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'offers' => 
  array (
    'table' => 'offers',
    'title' => 'Offers / Promotions',
    'icon' => '📣',
    'section' => 'Discounts & Offers',
    'singular' => 'Offer',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'banner',
        'label' => 'Banner URL',
        'type' => 'text',
        'list' => false,
      ),
      2 => 
      array (
        'name' => 'target',
        'label' => 'Target (pooja/product ids)',
        'type' => 'text',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'discount_code',
        'label' => 'Discount Code',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'placement',
        'label' => 'Placement',
        'type' => 'select',
        'options' => 
        array (
          'home' => 'Home',
          'category' => 'Category',
          'checkout' => 'Checkout',
        ),
      ),
      5 => 
      array (
        'name' => 'start_date',
        'label' => 'Start',
        'type' => 'date',
      ),
      6 => 
      array (
        'name' => 'end_date',
        'label' => 'End',
        'type' => 'date',
      ),
      7 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'pay_gateways' => 
  array (
    'table' => 'pay_gateways',
    'title' => 'Payment Gateways',
    'icon' => '💳',
    'section' => 'System Config',
    'singular' => 'Gateway',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'label',
        'label' => 'Label',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'adapter',
        'label' => 'Adapter',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'upi' => 'Self-hosted UPI',
          'razorpay' => 'Razorpay (hosted)',
        ),
      ),
      2 => 
      array (
        'name' => 'mode',
        'label' => 'Mode',
        'type' => 'select',
        'options' => 
        array (
          'test' => 'Test',
          'live' => 'Live',
        ),
      ),
      3 => 
      array (
        'name' => 'key_id',
        'label' => 'Key ID',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'key_secret',
        'label' => 'Key Secret',
        'type' => 'text',
        'pii' => true,
        'list' => false,
        'help' => 'Encrypted at rest.',
      ),
      5 => 
      array (
        'name' => 'webhook_secret',
        'label' => 'Webhook Secret',
        'type' => 'text',
        'pii' => true,
        'list' => false,
        'help' => 'Encrypted at rest.',
      ),
      6 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'notif_templates' => 
  array (
    'table' => 'notif_templates',
    'title' => 'Notification Templates',
    'icon' => '✉',
    'section' => 'System Config',
    'singular' => 'Template',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Referenced in code, e.g. booking_confirmed',
      ),
      1 => 
      array (
        'name' => 'channel',
        'label' => 'Channel',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'whatsapp' => 'WhatsApp',
          'sms' => 'SMS',
          'email' => 'Email',
        ),
      ),
      2 => 
      array (
        'name' => 'subject',
        'label' => 'Subject',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'body',
        'label' => 'Body ({{vars}})',
        'type' => 'textarea',
        'req' => true,
        'list' => false,
        'help' => 'Use {{name}}, {{ref}}, {{amount}} etc.',
      ),
    ),
  ),
  'doc_types' => 
  array (
    'table' => 'doc_types',
    'title' => 'Document Types (KYC)',
    'icon' => '🪪',
    'section' => 'System Config',
    'singular' => 'Document Type',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'mandatory_for',
        'label' => 'Mandatory For (User Categories)',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'user_categories',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Categories that MUST upload this document when applying to upgrade.',
      ),
      3 => 
      array (
        'name' => 'optional_for',
        'label' => 'Optional For (User Categories)',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'user_categories',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Categories asked to upload this document, but not required.',
      ),
      4 => 
      array (
        'name' => 'file_types',
        'label' => 'Allowed File Types',
        'type' => 'text',
        'list' => false,
        'help' => 'e.g. pdf,jpg,png',
      ),
    ),
  ),
  'pv_categories' => 
  array (
    'table' => 'pv_categories',
    'title' => 'Pooja Vidhi — Categories',
    'icon' => '📖',
    'section' => 'Ritual Content',
    'singular' => 'Category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Devanagari)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
        'list' => false,
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'pv_subcategories' => 
  array (
    'table' => 'pv_subcategories',
    'title' => 'Pooja Vidhi — Sub-categories',
    'icon' => '📑',
    'section' => 'Ritual Content',
    'singular' => 'Sub-category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'category',
        'label' => 'Parent Category',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'pv_categories',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'The main Pooja Vidhi category this sub-category belongs under.',
      ),
      2 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Devanagari)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'pv_articles' => 
  array (
    'table' => 'pv_articles',
    'title' => 'Pooja Vidhi — Articles',
    'icon' => '📜',
    'section' => 'Ritual Content',
    'singular' => 'Article',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'slug',
        'label' => 'Slug',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      12 => 
      array (
        'name' => 'title_dev',
        'label' => 'Title (Dev)',
        'type' => 'text',
        'help' => 'Title in Devanagari (e.g. श्री पुरुष सूक्त).',
      ),
      11 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'pv_categories',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'Pooja Vidhi category (e.g. Sookt, Stuti, Aarti, Pooja Vidhi Anushthan…) — from the Pooja Vidhi Categories master.',
      ),
      2 => 
      array (
        'name' => 'subcategory',
        'label' => 'Sub-category',
        'type' => 'select',
        'depends_on' => 'category',
        'options_from' => 
        array (
          'table' => 'pv_subcategories',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
          'parent' => 'category',
        ),
        'help' => 'Filtered by the selected Category — from the Pooja Vidhi Sub-categories master.',
      ),
      3 => 
      array (
        'name' => 'deity',
        'label' => 'Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      4 => 
      array (
        'name' => 'summary',
        'label' => 'Description',
        'type' => 'html',
        'list' => false,
        'help' => 'Short intro / description of the pooja (long text, rich editor).',
      ),
      5 => 
      array (
        'name' => 'body',
        'label' => 'Body Text',
        'type' => 'html',
        'list' => false,
        'help' => 'Full ritual body / vidhi text (long text, rich editor).',
      ),
      6 => 
      array (
        'name' => 'video_url',
        'label' => 'Video URL',
        'type' => 'text',
        'list' => false,
      ),
      9 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
    ),
  ),
  'curriculum_sections' => 
  array (
    'table' => 'curriculum_sections',
    'title' => 'Curriculum Sections',
    'icon' => '🎓',
    'section' => 'Ritual Content',
    'singular' => 'Section',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'curriculum_lessons' => 
  array (
    'table' => 'curriculum_lessons',
    'title' => 'Curriculum Lessons',
    'icon' => '📗',
    'section' => 'Ritual Content',
    'singular' => 'Lesson',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'section',
        'label' => 'Section',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'body',
        'label' => 'Lesson Content',
        'type' => 'html',
        'list' => false,
      ),
      4 => 
      array (
        'name' => 'video_url',
        'label' => 'Video URL',
        'type' => 'text',
        'list' => false,
      ),
      5 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'pooja_material_map' => 
  array (
    'table' => 'pooja_material_map',
    'title' => 'Pooja Material Lists',
    'icon' => '🧾',
    'section' => 'Ritual Content',
    'singular' => 'Material Line',
    'unique' => 
    array (
      0 => 
      array (
        0 => 'pooja',
        1 => 'material',
      ),
    ),
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'pooja',
        'label' => 'Pooja',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'material',
        'label' => 'Material',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'qty',
        'label' => 'Qty',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'provided_by',
        'label' => 'Provided By',
        'type' => 'select',
        'options' => 
        array (
          'temple' => 'Temple',
          'devotee' => 'Devotee',
          'pandit' => 'Pandit',
        ),
      ),
      4 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'pooja_resources' => 
  array (
    'table' => 'pooja_resources',
    'title' => 'Pooja Resources',
    'icon' => '🎵',
    'section' => 'Ritual Content',
    'singular' => 'Resource',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'type',
        'label' => 'Type',
        'type' => 'select',
        'options' => 
        array (
          'doc' => 'Document',
          'audio' => 'Audio',
          'mantra' => 'Mantra PDF',
          'video' => 'Video',
        ),
      ),
      3 => 
      array (
        'name' => 'url',
        'label' => 'URL',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'pooja_gallery' => 
  array (
    'table' => 'pooja_gallery',
    'title' => 'Pooja Gallery',
    'icon' => '🖼',
    'section' => 'Ritual Content',
    'singular' => 'Image',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'pooja',
        'label' => 'Pooja',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'sankalp_templates' => 
  array (
    'table' => 'sankalp_templates',
    'title' => 'Sankalp Templates',
    'icon' => '📿',
    'section' => 'Ritual Content',
    'singular' => 'Sankalp',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'body',
        'label' => 'Sankalp Text',
        'type' => 'html',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'tirth_categories' => 
  array (
    'table' => 'tirth_categories',
    'title' => 'Tirthsthan — Categories',
    'icon' => '🛕',
    'section' => 'Pilgrimage',
    'singular' => 'Category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Devanagari)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
        'list' => false,
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'tirth_subcategories' => 
  array (
    'table' => 'tirth_subcategories',
    'title' => 'Tirthsthan — Sub-categories',
    'icon' => '🏔',
    'section' => 'Pilgrimage',
    'singular' => 'Sub-category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'category',
        'label' => 'Parent Category',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'tirth_details' => 
  array (
    'table' => 'tirth_details',
    'title' => 'Tirthsthan — Places',
    'icon' => '📍',
    'section' => 'Pilgrimage',
    'singular' => 'Place',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'slug',
        'label' => 'Slug',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'subcategory',
        'label' => 'Sub-category',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'location',
        'label' => 'Location',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'deity',
        'label' => 'Presiding Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      5 => 
      array (
        'name' => 'body',
        'label' => 'Description',
        'type' => 'html',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'how_to_reach',
        'label' => 'How to Reach',
        'type' => 'textarea',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
        'list' => false,
      ),
      8 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      9 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'festivals' =>
  array (
    'table' => 'festivals',
    'title' => 'Festivals',
    'icon' => '🎉',
    'section' => 'Core Masters',
    'menu_order' => 16,
    'singular' => 'Festival',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'match_type',
        'label' => 'Match Type — Hindu Date or English Date?',
        'type' => 'select',
        'req' => true,
        'options' =>
        array (
          'english' => 'English Date (fixed Gregorian date)',
          'hindu' => 'Hindu Date (Masa / Paksha / Tithi)',
        ),
        'help' => 'Decide how this festival is matched: a fixed English calendar date, or the Hindu Panchang (Masa / Paksha / Tithi) that repeats every year.',
      ),
      1 =>
      array (
        'name' => 'festival_date',
        'label' => 'English Date',
        'type' => 'date',
        'show_if' =>
        array (
          'match_type' =>
          array (
            0 => 'english',
          ),
        ),
        'req_if' =>
        array (
          'match_type' => 'english',
        ),
        'help' => 'The Gregorian date (day + month) the festival falls on; it recurs on this day every year.',
      ),
      2 =>
      array (
        'name' => 'masa',
        'label' => 'Masa (Hindu Month)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'ref_months',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'show_if' =>
        array (
          'match_type' =>
          array (
            0 => 'hindu',
          ),
        ),
        'req_if' =>
        array (
          'match_type' => 'hindu',
        ),
      ),
      3 =>
      array (
        'name' => 'paksha',
        'label' => 'Paksha',
        'type' => 'select',
        'options' =>
        array (
          'shukla' => 'Shukla (Waxing / शुक्ल)',
          'krishna' => 'Krishna (Waning / कृष्ण)',
        ),
        'show_if' =>
        array (
          'match_type' =>
          array (
            0 => 'hindu',
          ),
        ),
        'req_if' =>
        array (
          'match_type' => 'hindu',
        ),
      ),
      4 =>
      array (
        'name' => 'tithi',
        'label' => 'Tithi',
        'type' => 'select',
        'options' =>
        array (
          'Pratipada' => 'Pratipada (प्रतिपदा)',
          'Dvitiya' => 'Dvitiya (द्वितीया)',
          'Tritiya' => 'Tritiya (तृतीया)',
          'Chaturthi' => 'Chaturthi (चतुर्थी)',
          'Panchami' => 'Panchami (पंचमी)',
          'Shashthi' => 'Shashthi (षष्ठी)',
          'Saptami' => 'Saptami (सप्तमी)',
          'Ashtami' => 'Ashtami (अष्टमी)',
          'Navami' => 'Navami (नवमी)',
          'Dashami' => 'Dashami (दशमी)',
          'Ekadashi' => 'Ekadashi (एकादशी)',
          'Dwadashi' => 'Dwadashi (द्वादशी)',
          'Trayodashi' => 'Trayodashi (त्रयोदशी)',
          'Chaturdashi' => 'Chaturdashi (चतुर्दशी)',
          'Purnima' => 'Purnima (पूर्णिमा)',
          'Amavasya' => 'Amavasya (अमावस्या)',
        ),
        'show_if' =>
        array (
          'match_type' =>
          array (
            0 => 'hindu',
          ),
        ),
        'req_if' =>
        array (
          'match_type' => 'hindu',
        ),
      ),
      5 =>
      array (
        'name' => 'weekday',
        'label' => 'Weekday (optional)',
        'type' => 'select',
        'help' => 'Restrict the festival to a specific weekday. Leave blank to allow any day.',
        'options' =>
        array (
          0 => 'Sunday (रविवार)',
          1 => 'Monday (सोमवार)',
          2 => 'Tuesday (मंगलवार)',
          3 => 'Wednesday (बुधवार)',
          4 => 'Thursday (गुरुवार)',
          5 => 'Friday (शुक्रवार)',
          6 => 'Saturday (शनिवार)',
        ),
      ),
      6 =>
      array (
        'name' => 'name',
        'label' => 'Festival Name',
        'type' => 'text',
        'req' => true,
      ),
      7 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Devanagari / Gujarati)',
        'type' => 'text',
      ),
      8 =>
      array (
        'name' => 'deity',
        'label' => 'Deity (optional)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      9 =>
      array (
        'name' => 'significance',
        'label' => 'Significance',
        'type' => 'html',
        'list' => false,
      ),
      10 =>
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
        'list' => false,
      ),
    ),
  ),
  'horoscopes' => 
  array (
    'table' => 'horoscopes',
    'title' => 'Horoscopes',
    'icon' => '♈',
    'section' => 'Astro & Calendar',
    'singular' => 'Horoscope',
    'unique' => 
    array (
      0 => 
      array (
        0 => 'sign',
        1 => 'period',
        2 => 'predict_date',
      ),
    ),
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'sign',
        'label' => 'Sign',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'aries' => 'Aries',
          'taurus' => 'Taurus',
          'gemini' => 'Gemini',
          'cancer' => 'Cancer',
          'leo' => 'Leo',
          'virgo' => 'Virgo',
          'libra' => 'Libra',
          'scorpio' => 'Scorpio',
          'sagittarius' => 'Sagittarius',
          'capricorn' => 'Capricorn',
          'aquarius' => 'Aquarius',
          'pisces' => 'Pisces',
        ),
      ),
      1 => 
      array (
        'name' => 'period',
        'label' => 'Period',
        'type' => 'select',
        'options' => 
        array (
          'daily' => 'Daily',
          'weekly' => 'Weekly',
          'monthly' => 'Monthly',
        ),
      ),
      2 => 
      array (
        'name' => 'predict_date',
        'label' => 'Date',
        'type' => 'date',
      ),
      3 => 
      array (
        'name' => 'prediction',
        'label' => 'Prediction',
        'type' => 'html',
        'list' => false,
      ),
      4 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'packages' => 
  array (
    'table' => 'packages',
    'title' => 'Packages',
    'icon' => '🎁',
    'section' => 'Packages',
    'singular' => 'Package',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'for_category',
        'label' => 'Designed For (User Category)',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'user_categories',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Which user category this package is designed for.',
      ),
      4 =>
      array (
        'name' => 'price',
        'label' => 'Price — India (₹)',
        'type' => 'decimal',
      ),
      'price_usd' =>
      array (
        'name' => 'price_usd',
        'label' => 'Price — International ($)',
        'type' => 'decimal',
        'help' => 'International fee in USD (shown to non-India users). Leave blank to auto-convert the ₹ price at the current FX rate.',
      ),
      5 =>
      array (
        'name' => 'max_services',
        'label' => 'Max Services Mappable',
        'type' => 'number',
        'help' => 'Maximum number of catalogue services the user may map.',
      ),
      6 => 
      array (
        'name' => 'max_leads',
        'label' => 'Max Leads Passed',
        'type' => 'number',
        'help' => 'Maximum number of leads passed to the user under this plan.',
      ),
      7 => 
      array (
        'name' => 'comm_plan',
        'label' => 'Communication Plan',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'comm_plans',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Attached communication (SMS/WhatsApp/email) plan.',
      ),
      11 => 
      array (
        'name' => 'ai_hours',
        'label' => 'AI Pandit Hours',
        'type' => 'number',
        'help' => 'Total AI-pandit HOURS available under this package (used to run AI consultants).',
      ),
      13 => 
      array (
        'name' => 'platform_charge_pct',
        'label' => 'Platform Charge (%)',
        'type' => 'decimal',
        'help' => 'Percentage the platform deducts from all collections under this package.',
      ),
      9 => 
      array (
        'name' => 'period_value',
        'label' => 'Package Period',
        'type' => 'number',
        'help' => 'Duration number (used with the unit below to compute expiry).',
      ),
      10 => 
      array (
        'name' => 'period_unit',
        'label' => 'Period Unit',
        'type' => 'select',
        'options' => 
        array (
          'days' => 'Days',
          'months' => 'Months',
          'years' => 'Years',
        ),
      ),
    ),
  ),
  'package_modules' => 
  array (
    'table' => 'package_modules',
    'title' => 'Package–Module Links',
    'icon' => '🔗',
    'section' => 'Packages',
    'singular' => 'Link',
    'unique' => 
    array (
      0 => 
      array (
        0 => 'package_code',
        1 => 'module_code',
      ),
    ),
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'package_code',
        'label' => 'Package',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'module_code',
        'label' => 'Module',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'geo_locations' =>
  array (
    'table' => 'geo_locations',
    'title' => 'Franchise Territory',
    'icon' => '🗺️',
    'section' => 'Franchise Territory',
    'singular' => 'Location',
    'filters' =>
    array (
      0 => 'level',
      1 => 'parent_code',
    ),
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 =>
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 =>
      array (
        'name' => 'level',
        'label' => 'Level',
        'type' => 'select',
        'options' =>
        array (
          'country' => 'Country',
          'state' => 'State',
          'district' => 'District',
          'taluka' => 'Taluka / Block',
        ),
      ),
      3 =>
      array (
        'name' => 'parent_code',
        'label' => 'Parent',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'geo_locations',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'The parent location (e.g. a taluka\'s district, a district\'s state).',
      ),
    ),
  ),
  'pandit_categories' =>
  array (
    'table' => 'pandit_categories',
    'title' => 'Pandit Categories',
    'icon' => '👳',
    'section' => 'Pandit Config',
    'singular' => 'Category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'pandit_skills' => 
  array (
    'table' => 'pandit_skills',
    'title' => 'Pandit Skills',
    'icon' => '🕉',
    'section' => 'Pandit Config',
    'singular' => 'Skill',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'banners' => 
  array (
    'table' => 'banners',
    'title' => 'Banners',
    'icon' => '🏳',
    'section' => 'Website',
    'singular' => 'Banner',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'link_url',
        'label' => 'Link URL',
        'type' => 'text',
        'list' => false,
      ),
      3 => 
      array (
        'name' => 'placement',
        'label' => 'Placement',
        'type' => 'select',
        'options' => 
        array (
          'home' => 'Home',
          'top' => 'Top',
          'sidebar' => 'Sidebar',
        ),
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'start_date',
        'label' => 'Start',
        'type' => 'date',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'end_date',
        'label' => 'End',
        'type' => 'date',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'group_poojas' => 
  array (
    'table' => 'group_poojas',
    'title' => 'Group Poojas (Bhakti Setu)',
    'icon' => '🛕',
    'section' => 'Bhakti Setu',
    'singular' => 'Group Pooja',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'temple',
        'label' => 'Temple',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'deity',
        'label' => 'Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      4 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'html',
        'list' => false,
      ),
      5 => 
      array (
        'name' => 'pooja_date',
        'label' => 'Pooja Date',
        'type' => 'date',
      ),
      6 => 
      array (
        'name' => 'share_price',
        'label' => 'Share Price',
        'type' => 'decimal',
        'req' => true,
      ),
      7 => 
      array (
        'name' => 'max_participants',
        'label' => 'Max Participants',
        'type' => 'number',
      ),
      8 => 
      array (
        'name' => 'image',
        'label' => 'Image URL',
        'type' => 'text',
        'list' => false,
      ),
      9 => 
      array (
        'name' => 'video_url',
        'label' => 'Puja Video URL',
        'type' => 'text',
        'list' => false,
      ),
      10 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'completed' => 'Completed',
          'cancelled' => 'Cancelled',
        ),
      ),
    ),
  ),
  'inquiries' => 
  array (
    'table' => 'inquiries',
    'title' => 'Inquiries',
    'icon' => '📨',
    'section' => 'Support',
    'singular' => 'Inquiry',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'tel',
        'pii' => true,
      ),
      2 => 
      array (
        'name' => 'email',
        'label' => 'Email',
        'type' => 'email',
        'pii' => true,
      ),
      3 => 
      array (
        'name' => 'subject',
        'label' => 'Subject',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'message',
        'label' => 'Message',
        'type' => 'textarea',
        'list' => false,
      ),
      5 => 
      array (
        'name' => 'source',
        'label' => 'Source',
        'type' => 'text',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'assigned_to',
        'label' => 'Assigned To',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'new' => 'New',
          'contacted' => 'Contacted',
          'closed' => 'Closed',
        ),
      ),
    ),
  ),
  'temples' => 
  array (
    'table' => 'temples',
    'title' => 'Temples',
    'icon' => '🏛',
    'section' => 'Temple & Trust',
    'singular' => 'Temple',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      2 =>
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'html',
        'help' => 'About the temple — legend, significance, timings.',
      ),
      3 =>
      array (
        'name' => 'deities',
        'label' => 'Deity (multiple)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Select one or more presiding deities (from the Deities master).',
      ),
      4 =>
      array (
        'name' => 'trust_id',
        'label' => 'Trust (optional)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'trusts',
          'value' => 'id',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Optional — dropdown sourced live from the Trusts master.',
      ),
      5 =>
      array (
        'name' => 'address',
        'label' => 'Address',
        'type' => 'text',
      ),
      6 =>
      array (
        'name' => 'city',
        'label' => 'City',
        'type' => 'text',
      ),
      7 =>
      array (
        'name' => 'state',
        'label' => 'State',
        'type' => 'text',
      ),
      8 =>
      array (
        'name' => 'latitude',
        'label' => 'Latitude',
        'type' => 'text',
        'help' => 'Decimal degrees, e.g. 23.022505',
      ),
      9 =>
      array (
        'name' => 'longitude',
        'label' => 'Longitude',
        'type' => 'text',
        'help' => 'Decimal degrees, e.g. 72.571365',
      ),
      10 =>
      array (
        'name' => 'how_to_reach',
        'label' => 'How to Reach',
        'type' => 'textarea',
      ),
      11 =>
      array (
        'name' => 'image_url',
        'label' => 'Image (URL)',
        'type' => 'text',
        'help' => 'Paste an image URL (or a Media Library link).',
      ),
      12 =>
      array (
        'name' => 'phone',
        'label' => 'Phone',
        'type' => 'tel',
      ),
      13 =>
      array (
        'name' => 'email',
        'label' => 'Email',
        'type' => 'email',
      ),
    ),
  ),
  'donations' => 
  array (
    'table' => 'donations',
    'title' => 'Donations',
    'icon' => '💛',
    'section' => 'Temple & Trust',
    'singular' => 'Donation',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'donor_name',
        'label' => 'Donor Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'donor_phone',
        'label' => 'Donor Phone',
        'type' => 'tel',
      ),
      2 => 
      array (
        'name' => 'amount',
        'label' => 'Amount',
        'type' => 'decimal',
      ),
      3 => 
      array (
        'name' => 'purpose',
        'label' => 'Purpose',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'mode',
        'label' => 'Mode',
        'type' => 'text',
      ),
      'trust_id' =>
      array (
        'name' => 'trust_id',
        'label' => 'Trust',
        'type' => 'select',
        'req' => true,
        'options_from' =>
        array (
          'table' => 'trusts',
          'value' => 'id',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Trusts master.',
      ),
      5 =>
      array (
        'name' => 'temple_id',
        'label' => 'Temple (optional)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'temples',
          'value' => 'id',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Optional — dropdown sourced live from the Temples master.',
      ),
      6 =>
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'inventory' =>
  array (
    'table' => 'inventory',
    'title' => 'Inventory',
    'icon' => '📦',
    'section' => 'Temple & Trust',
    'singular' => 'Item',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'unit',
        'label' => 'Unit',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'stock',
        'label' => 'Stock',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'min_stock',
        'label' => 'Min Stock',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'cost',
        'label' => 'Cost',
        'type' => 'decimal',
      ),
      7 => 
      array (
        'name' => 'temple_id',
        'label' => 'Temple Id',
        'type' => 'number',
      ),
    ),
  ),
  'trusts' => 
  array (
    'table' => 'trusts',
    'title' => 'Trusts',
    'icon' => '🏦',
    'section' => 'Temple & Trust',
    'singular' => 'Trust',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'reg_no',
        'label' => 'Reg No',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'pan',
        'label' => 'Pan',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'city',
        'label' => 'City',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'state',
        'label' => 'State',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'phone',
        'label' => 'Phone',
        'type' => 'tel',
      ),
      6 => 
      array (
        'name' => 'email',
        'label' => 'Email',
        'type' => 'email',
      ),
      7 => 
      array (
        'name' => 'managed_by',
        'label' => 'Managed By',
        'type' => 'text',
      ),
    ),
  ),
  'services' => 
  array (
    'table' => 'services',
    'title' => 'Services Master',
    'icon' => '⚡',
    'section' => 'Services',
    'singular' => 'Service',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      19 => 
      array (
        'name' => 'slug',
        'label' => 'Slug',
        'type' => 'text',
        'help' => 'URL-friendly identifier. Leave blank to auto-generate from the name.',
      ),
      2 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'service_categories',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown from the Service Categories master.',
      ),
      3 => 
      array (
        'name' => 'pooja_id',
        'label' => 'Linked Main Service',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'booking_services',
          'value' => 'id',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Dropdown from the Main Services (Booking Catalogue).',
      ),
      6 => 
      array (
        'name' => 'duration_min',
        'label' => 'Duration Min',
        'type' => 'number',
      ),
      7 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'tag_line',
        'label' => 'Tag Line',
        'type' => 'text',
      ),
      9 => 
      array (
        'name' => 'highlights',
        'label' => 'Highlights',
        'type' => 'textarea',
      ),
      18 => 
      array (
        'name' => 'input_fields',
        'label' => 'Client Input Fields (JSON)',
        'type' => 'textarea',
        'help' => 'JSON array of the values this service asks the client for. Each value is also saved to the client\'s flexible profile. Example: [{"id":"mobile","label":"Mobile Number","type":"tel","multi":true,"profile_key":"mobile_numbers","required":true},{"id":"partner","label":"Partner","type":"group","multi":true,"profile_key":"partners","fields":[{"id":"name","label":"Partner Name","type":"text"},{"id":"dob","label":"Partner DOB","type":"date"}]}]  — types: text|tel|date|number|select|textarea|group; multi=true lets the client add several; profile_key = where it is stored in the profile.',
      ),
      10 => 
      array (
        'name' => 'badge',
        'label' => 'Badge',
        'type' => 'text',
      ),
      11 => 
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
      ),
      12 => 
      array (
        'name' => 'is_online',
        'label' => 'Is Online',
        'type' => 'bool',
      ),
      13 => 
      array (
        'name' => 'is_offline',
        'label' => 'Is Offline',
        'type' => 'bool',
      ),
      14 => 
      array (
        'name' => 'show_on_landing',
        'label' => 'Show On Landing',
        'type' => 'bool',
      ),
      15 => 
      array (
        'name' => 'landing_order',
        'label' => 'Landing Order',
        'type' => 'number',
      ),
      16 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'service_categories' => 
  array (
    'table' => 'service_categories',
    'title' => 'Service Categories',
    'icon' => '📂',
    'section' => 'Services',
    'singular' => 'Category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'slug',
        'label' => 'Slug',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'color',
        'label' => 'Color',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
      7 => 
      array (
        'name' => 'show_in_booking',
        'label' => 'Show In Booking',
        'type' => 'bool',
      ),
      8 => 
      array (
        'name' => 'service_source',
        'label' => 'Service Source',
        'type' => 'text',
      ),
    ),
  ),
  'day_specials' => 
  array (
    'table' => 'day_specials',
    'title' => 'Day Specials',
    'icon' => '🗓',
    'section' => 'Website',
    'singular' => 'Day Special',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'type',
        'label' => 'Type',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'match_type',
        'label' => 'Match Type',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'weekday',
        'label' => 'Weekday',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'tithi',
        'label' => 'Tithi',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_tithis',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'number',
        ),
      ),
      6 => 
      array (
        'name' => 'paksha',
        'label' => 'Paksha',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'masa',
        'label' => 'Masa',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'eng_day',
        'label' => 'Eng Day',
        'type' => 'text',
      ),
      9 => 
      array (
        'name' => 'eng_month',
        'label' => 'Eng Month',
        'type' => 'text',
      ),
      10 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
    ),
  ),
  'testimonials' => 
  array (
    'table' => 'testimonials',
    'title' => 'Testimonials',
    'icon' => '⭐',
    'section' => 'Website',
    'singular' => 'Testimonial',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'city',
        'label' => 'City',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'service',
        'label' => 'Service',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'rating',
        'label' => 'Rating',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'content',
        'label' => 'Content',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'is_featured',
        'label' => 'Is Featured',
        'type' => 'bool',
      ),
    ),
  ),
  'deities' =>
  array (
    'table' => 'deities',
    'title' => 'Deities (Deva)',
    'icon' => '🕉',
    'section' => 'Core Masters',
    'menu_order' => 4,
    'singular' => 'Deity',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      2 =>
      array (
        'name' => 'tradition',
        'label' => 'Tradition',
        'type' => 'text',
      ),
      'about' =>
      array (
        'name' => 'about',
        'label' => 'About Deity',
        'type' => 'textarea',
        'help' => 'Long description — form, origin, significance, iconography, legends.',
      ),
      3 =>
      array (
        'name' => 'shubhashubhatva',
        'label' => 'Shubhashubhatva (Nature)',
        'type' => 'select',
        'options' =>
        array (
          'Saumya' => 'Saumya (सौम्य) — benefic',
          'Krura' => 'Krura (क्रूर) — malefic',
          'Mishra' => 'Mishra (मिश्र) — mixed',
        ),
        'help' => 'Benefic (Saumya) / malefic (Krura) nature of the deity-graha.',
      ),
      4 =>
      array (
        'name' => 'bhog_kaal',
        'label' => 'Bhoga Kaal (Period)',
        'type' => 'text',
        'help' => 'Ruling / enjoyment period, e.g. "6 years".',
      ),
      5 =>
      array (
        'name' => 'bij_mantra',
        'label' => 'Beej Mantra',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      6 =>
      array (
        'name' => 'tantrik_mantra',
        'label' => 'Tantrik Mantra',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      7 =>
      array (
        'name' => 'vaidic_mantra',
        'label' => 'Vaidik Mantra',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      8 =>
      array (
        'name' => 'puranokt_mantra',
        'label' => 'Puranokta Mantra',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      9 =>
      array (
        'name' => 'adhidevta',
        'label' => 'Adhidevata Mantra',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      10 =>
      array (
        'name' => 'pratyadhidevta',
        'label' => 'Pratyadhidevata Mantra',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      11 =>
      array (
        'name' => 'surya_gayatri_mantra',
        'label' => 'Surya Gayatri Mantra',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      12 =>
      array (
        'name' => 'jap_sankhya',
        'label' => 'Japa Sankhya (Count)',
        'type' => 'text',
        'help' => 'Prescribed japa count, e.g. "7000".',
      ),
      13 =>
      array (
        'name' => 'jap_samay',
        'label' => 'Japa Samay (Time)',
        'type' => 'text',
        'help' => 'Best time for japa, e.g. "Sunrise".',
      ),
      14 =>
      array (
        'name' => 'havan_vastu',
        'label' => 'Havan Vastu (Materials)',
        'type' => 'textarea',
        'help' => 'Samidha / dravya offered in the homa, e.g. Arka samidha.',
      ),
      15 =>
      array (
        'name' => 'ratna',
        'label' => 'Ratna (Gemstone)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'ref_gemstones',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown sourced live from the Gemstone Master.',
      ),
      'yantra' =>
      array (
        'name' => 'yantra',
        'label' => 'Yantra (3×3 Matrix)',
        'type' => 'yantra',
        'help' => 'Fill the 3×3 grid with digits 1–9 (Sudoku / magic-square style). Stored as comma-separated values, row by row.',
      ),
      16 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'gotras' =>
  array (
    'table' => 'gotras',
    'title' => 'Gotras',
    'icon' => '🔱',
    'section' => 'Core Masters',
    'menu_order' => 5,
    'singular' => 'Gotra',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'pravaras',
        'label' => 'Pravaras',
        'type' => 'textarea',
      ),
    ),
  ),
  'comm_plans' => 
  array (
    'table' => 'comm_plans',
    'title' => 'Comm Plans',
    'icon' => '📶',
    'section' => 'Communication',
    'singular' => 'Plan',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      3 => 
      array (
        'name' => 'price_month',
        'label' => 'Price Month',
        'type' => 'decimal',
      ),
      7 => 
      array (
        'name' => 'free_chat_msgs',
        'label' => 'Free Chat Msgs',
        'type' => 'number',
        'help' => '0 = chat disabled; any value enables chat with this monthly message allowance.',
      ),
      8 => 
      array (
        'name' => 'free_voice_min',
        'label' => 'Free Voice Min',
        'type' => 'number',
        'help' => '0 = voice disabled; any value enables voice with this monthly minute allowance (counted on its own).',
      ),
      9 => 
      array (
        'name' => 'free_video_min',
        'label' => 'Free Video Min',
        'type' => 'number',
        'help' => '0 = video disabled; any value enables video with this monthly minute allowance (counted on its own).',
      ),
      13 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_planets' => 
  array (
    'table' => 'num_planets',
    'title' => 'Planets (Grah)',
    'icon' => '🪐',
    'section' => 'Core Masters',
    'menu_order' => 1,
    'singular' => 'Planet',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'planet',
        'label' => 'Planet',
        'type' => 'text',
      ),
      2 =>
      array (
        'name' => 'planet_dev',
        'label' => 'Planet (Dev)',
        'type' => 'text',
      ),
      'uchch_rashi' =>
      array (
        'name' => 'uchch_rashi',
        'label' => 'Uchch Rashi (Beneficial / Exaltation)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'ref_rashis',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'number',
        ),
        'help' => 'Exaltation sign — dropdown sourced live from the Zodiac (Rashi) master.',
      ),
      'uchch_degree' =>
      array (
        'name' => 'uchch_degree',
        'label' => 'Uchch Degree (deep exaltation °)',
        'type' => 'decimal',
        'help' => 'Exact degree within the Uchch Rashi at which the planet is deeply exalted (0–30°).',
      ),
      'nich_rashi' =>
      array (
        'name' => 'nich_rashi',
        'label' => 'Nich Rashi (Malefic / Debilitation)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'ref_rashis',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'number',
        ),
        'help' => 'Debilitation sign — dropdown sourced live from the Zodiac (Rashi) master.',
      ),
      'nich_degree' =>
      array (
        'name' => 'nich_degree',
        'label' => 'Nich Degree (deep debilitation °)',
        'type' => 'decimal',
        'help' => 'Exact degree within the Nich Rashi at which the planet is deeply debilitated (0–30°).',
      ),
      'asta_degree' =>
      array (
        'name' => 'asta_degree',
        'label' => 'Asta Degree (combustion / set °)',
        'type' => 'decimal',
        'help' => 'The planet is Asta (combust / set) when its longitude is within this many degrees of the Sun. E.g. Moon 12°, Mars 17°, Mercury 14°, Jupiter 11°, Venus 10°, Saturn 15°. Leave blank for Sun / Rahu / Ketu.',
      ),
      'aspects' =>
      array (
        'name' => 'aspects',
        'label' => 'Aspects (Drishti — houses)',
        'type' => 'text',
        'help' => 'Comma-separated houses this planet aspects from its own position. All planets aspect the 7th; e.g. Mars 4,7,8 · Jupiter 5,7,9 · Saturn 3,7,10. Leave blank for Rahu / Ketu (no counted aspect).',
      ),
      3 =>
      array (
        'name' => 'colors',
        'label' => 'Colour',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown sourced live from the Colour Master.',
      ),
      4 => 
      array (
        'name' => 'gemstones',
        'label' => 'Gemstone',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'ref_gemstones',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown sourced live from the Gemstone Master.',
      ),
      5 => 
      array (
        'name' => 'rudraksha',
        'label' => 'Rudraksha',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'ref_rudraksha',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown sourced live from the Rudraksha Master.',
      ),
      6 => 
      array (
        'name' => 'mantras',
        'label' => 'Mantras',
        'type' => 'textarea',
      ),
      15 => 
      array (
        'name' => 'mantra',
        'label' => 'Mantra / Chant',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      7 => 
      array (
        'name' => 'fasting_day',
        'label' => 'Fasting Day',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_days',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown sourced live from the Weekdays (Vaar) master.',
      ),
      8 => 
      array (
        'name' => 'lucky_direction',
        'label' => 'Lucky Direction',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_dishas',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown sourced live from the Directions & Corners (Disha / Kon) master.',
      ),
      9 => 
      array (
        'name' => 'positive_traits',
        'label' => 'Positive Traits',
        'type' => 'textarea',
      ),
      10 => 
      array (
        'name' => 'negative_traits',
        'label' => 'Negative Traits',
        'type' => 'textarea',
      ),
      11 => 
      array (
        'name' => 'career_impact',
        'label' => 'Career Impact',
        'type' => 'textarea',
      ),
      12 => 
      array (
        'name' => 'health_impact',
        'label' => 'Health Impact',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'wealth_impact',
        'label' => 'Wealth Impact',
        'type' => 'textarea',
      ),
      14 => 
      array (
        'name' => 'relationship_impact',
        'label' => 'Relationship Impact',
        'type' => 'textarea',
      ),
      16 => 
      array (
        'name' => 'symbol',
        'label' => 'Symbol',
        'type' => 'text',
      ),
      17 => 
      array (
        'name' => 'nature',
        'label' => 'Nature',
        'type' => 'select',
        'options' => 
        array (
          'BENEFIC' => 'Benefic',
          'MALEFIC' => 'Malefic',
          'NEUTRAL' => 'Neutral',
        ),
      ),
      18 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'select',
        'options' => 
        array (
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'AIR' => 'Air',
          'WATER' => 'Water',
          'ETHER' => 'Ether',
        ),
      ),
      19 => 
      array (
        'name' => 'own_signs',
        'label' => 'Own Signs',
        'type' => 'text',
      ),
      // Legacy free-text "Exalted In" / "Debilitated In" removed — superseded by the
      // Uchch Rashi / Nich Rashi dropdowns (+ degrees) defined above. The DB columns
      // stay (harmless) but no longer show in the form.
      22 =>
      array (
        'name' => 'metal',
        'label' => 'Metal',
        'type' => 'text',
      ),
      23 => 
      array (
        'name' => 'dasha_years',
        'label' => 'Vimshottari Dasha Years',
        'type' => 'number',
      ),
      24 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_common' => 
  array (
    'table' => 'num_common',
    'title' => 'Number Impacts & Remedies (Missing / Balance / Excess)',
    'icon' => '🔢',
    'section' => 'Numerology',
    'singular' => 'Number Impact',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number (1-9)',
        'type' => 'number',
        'req' => true,
        'help' => 'The digit 1-9 this reading applies to.',
      ),
      1 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'missing' => 'Missing (0×)',
          'low' => 'Low (1×)',
          'balanced' => 'Balanced (2×)',
          'excess' => 'Excess / Access (3+)',
          'power' => 'Power Number',
          'weak' => 'Weak Number',
        ),
        'help' => 'Which grid condition this reading is for. Missing = absent (0×), Low = appears once (1×), Balanced = appears twice (2×), Excess = 3+ times.',
      ),
      2 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'impact',
        'label' => 'Impact',
        'type' => 'textarea',
      ),
      4 => 
      array (
        'name' => 'remedy',
        'label' => 'Remedy',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'impact_hi',
        'label' => 'Impact (Hindi)',
        'type' => 'textarea',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'remedy_hi',
        'label' => 'Remedy (Hindi)',
        'type' => 'textarea',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'impact_gu',
        'label' => 'Impact (Gujarati)',
        'type' => 'textarea',
        'list' => false,
      ),
      8 => 
      array (
        'name' => 'remedy_gu',
        'label' => 'Remedy (Gujarati)',
        'type' => 'textarea',
        'list' => false,
      ),
    ),
  ),
  'num_health' => 
  array (
    'table' => 'num_health',
    'title' => 'Medical Numerology (Number → Health)',
    'icon' => '🩺',
    'section' => 'Numerology',
    'singular' => 'Health Reading',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number (1-9)',
        'type' => 'number',
        'req' => true,
        'help' => 'The digit 1-9 this reading applies to.',
      ),
      1 => 
      array (
        'name' => 'planet',
        'label' => 'Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      2 => 
      array (
        'name' => 'body_parts',
        'label' => 'Governed Body Parts',
        'type' => 'textarea',
      ),
      3 => 
      array (
        'name' => 'tendencies',
        'label' => 'Health Tendencies',
        'type' => 'textarea',
        'help' => 'Traditional numerology associations — indicative tendencies, not a medical diagnosis.',
      ),
      4 => 
      array (
        'name' => 'remedies',
        'label' => 'Lifestyle & Traditional Remedies',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'disclaimer',
        'label' => 'Disclaimer',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'tendencies_hi',
        'label' => 'Tendencies (Hindi)',
        'type' => 'textarea',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'remedies_hi',
        'label' => 'Remedies (Hindi)',
        'type' => 'textarea',
        'list' => false,
      ),
    ),
  ),
  'num_remedies' => 
  array (
    'table' => 'num_remedies',
    'title' => 'Remedies Library',
    'icon' => '💎',
    'section' => 'Core Masters',
    'singular' => 'Remedy',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'remedy_type',
        'label' => 'Remedy Type',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'purpose',
        'label' => 'Purpose',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'remedy',
        'label' => 'Remedy',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
    ),
  ),
  'num_dasha_master' => 
  array (
    'table' => 'num_dasha_master',
    'title' => 'Maha Dasha',
    'icon' => '🕐',
    'section' => 'Astrology',
    'singular' => 'Dasha',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'planet',
        'label' => 'Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      2 => 
      array (
        'name' => 'sequence',
        'label' => 'Sequence',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'years',
        'label' => 'Years',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'general_prediction',
        'label' => 'General Prediction',
        'type' => 'textarea',
        'help' => 'Overall summary for this number; used as fallback when a level-specific prediction is blank.',
      ),
      5 => 
      array (
        'name' => 'maha_prediction',
        'label' => 'MahaDasha Prediction',
        'type' => 'textarea',
        'help' => 'Reading when this number runs as the major (Maha) period.',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'antar_prediction',
        'label' => 'AntarDasha Prediction',
        'type' => 'textarea',
        'help' => 'Reading when this number runs as the sub (Antar) period.',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'pratyantar_prediction',
        'label' => 'Pratyantar Prediction',
        'type' => 'textarea',
        'help' => 'Reading when this number runs as the minor (Pratyantar) period.',
        'list' => false,
      ),
    ),
  ),
  'num_combo' => 
  array (
    'table' => 'num_combo',
    'title' => 'Number Combos (Dasha pairs)',
    'icon' => '🔗',
    'section' => 'Numerology',
    'singular' => 'Combo',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'yoga_type',
        'label' => 'Yoga Type',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'num_number_types',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'From the Number Type master.',
      ),
      1 => 
      array (
        'name' => 'n1',
        'label' => 'N1',
        'type' => 'number',
      ),
      2 => 
      array (
        'name' => 'n2',
        'label' => 'N2',
        'type' => 'number',
      ),
      'n3' => 
      array (
        'name' => 'n3',
        'label' => 'N3',
        'type' => 'number',
      ),
      'n4' => 
      array (
        'name' => 'n4',
        'label' => 'N4',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'plane_name',
        'label' => 'Plane Name',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'yoga_name',
        'label' => 'Yoga Name',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'yoga_name_dev',
        'label' => 'Yoga Name (Dev)',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'general_prediction',
        'label' => 'General Prediction',
        'type' => 'html',
      ),
      7 => 
      array (
        'name' => 'career_prediction',
        'label' => 'Career Prediction',
        'type' => 'html',
      ),
      8 => 
      array (
        'name' => 'finance_prediction',
        'label' => 'Finance Prediction',
        'type' => 'html',
      ),
      9 => 
      array (
        'name' => 'health_prediction',
        'label' => 'Health Prediction',
        'type' => 'html',
      ),
      10 => 
      array (
        'name' => 'relation_prediction',
        'label' => 'Relation Prediction',
        'type' => 'html',
      ),
      13 => 
      array (
        'name' => 'remedies',
        'label' => 'Remedies',
        'type' => 'html',
      ),
    ),
  ),
  'num_dropdown_options' => 
  array (
    'table' => 'num_dropdown_options',
    'title' => 'Dropdown Options',
    'icon' => '📋',
    'section' => 'System Config',
    'singular' => 'Option',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'group_key',
        'label' => 'Group Key',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'group_label',
        'label' => 'Group Label',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'value',
        'label' => 'Value',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'pooja_types' =>
  array (
    'table' => 'pooja_types',
    'title' => 'Pooja Types',
    'icon' => '🔖',
    'section' => 'Ritual Content',
    'singular' => 'Pooja Type',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
      ),
      1 =>
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
      4 =>
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' =>
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'chants' =>
  array (
    'table' => 'chants',
    'title' => 'Chants & Mantras',
    'icon' => 'ॐ',
    'section' => 'Devotion',
    'singular' => 'Chant',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      'category' =>
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' =>
        array (
          'ATOM' => 'Atom — single mantra/sloka/stotra',
          'MOLECULE' => 'Molecule — procedure/ritual module',
          'sankalpam' => 'Sankalpam',
          'aachamanam' => 'Aachamanam',
          'dhyanam' => 'Dhyanam',
          'nyasa' => 'Nyasa / Anganyasa',
          'viniyoga' => 'Viniyoga',
          'stotra' => 'Stotra',
          'japa' => 'Japa',
          'upachara' => 'Shodashopachara step',
          'aarti' => 'Aarti',
          'kshama' => 'Kshama Prarthana',
          'archana' => 'Archana',
        ),
        'help' => 'Atom = a single chant; Molecule = a reusable procedure module.',
      ),
      5 =>
      array (
        'name' => 'deity_id',
        'label' => 'Deity Id',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'id',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      6 => 
      array (
        'name' => 'purpose',
        'label' => 'Purpose',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'detail_html',
        'label' => 'Chant / Mantra Detail',
        'type' => 'html',
        'help' => 'Full chant/mantra text with rich formatting — verses, meaning, benefits, method. Supports Devanagari and multi-line rich text.',
      ),
      'sanskrit_text' => 
      array (
        'name' => 'sanskrit_text',
        'label' => 'Sanskrit (Devanagari)',
        'type' => 'html',
        'help' => 'Pure Devanagari verse text. Use placeholders like [__GOTRAM__] where personalised.',
      ),
      'audio_url' =>
      array (
        'name' => 'audio_url',
        'label' => 'Recording (audio URL)',
        'type' => 'text',
        'help' => 'URL of a real recitation (mp3/ogg/wav). When set, the player plays this instead of the synthesised svara.',
      ),
      'audio_marks' => 
      array (
        'name' => 'audio_marks',
        'label' => 'Recording Syllable Marks (sec)',
        'type' => 'textarea',
        'help' => 'Start time (seconds) of each syllable in the recording, in order — e.g. "0 0.42 0.85 1.30 …". One per akshara; lets the player highlight each syllable as the recording plays.',
      ),
      'meaning' =>
      array (
        'name' => 'meaning',
        'label' => 'Meaning / Translation',
        'type' => 'html',
      ),
      'source_books' =>
      array (
        'name' => 'source_books',
        'label' => 'Source Book(s)',
        'type' => 'text',
        'help' => 'Comma-separated Book codes (library_books.code) this chant is drawn from.',
      ),
      'book_code' => 
      array (
        'name' => 'book_code',
        'label' => 'Book',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'library_books',
          'value' => 'code',
          'label' => 'title',
          'order' => 'sort_order',
        ),
        'help' => 'The complete book this verse belongs to (Container).',
      ),
      'section_ref' => 
      array (
        'name' => 'section_ref',
        'label' => 'Section / Chapter',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'library_sections',
          'value' => 'code',
          'label' => 'title',
          'order' => 'seq_no',
        ),
        'help' => 'Which division (Mandala / Adhyaya / Sukta / Chapter) it sits in.',
      ),
      'reading_no' => 
      array (
        'name' => 'reading_no',
        'label' => 'Reading No. (canonical)',
        'type' => 'text',
        'help' => 'The traditional printed reference — numeric or alpha, e.g. 10.85.1, 2.47, I.2.3, अ.',
      ),
      'verse_no' => 
      array (
        'name' => 'verse_no',
        'label' => 'Verse No. (in section)',
        'type' => 'number',
      ),
      'seq_no' => 
      array (
        'name' => 'seq_no',
        'label' => 'Sequence No. (in book)',
        'type' => 'number',
        'help' => 'Global running order across the whole book — drives reliable ordering/pagination.',
      ),
      'has_placeholders' => 
      array (
        'name' => 'has_placeholders',
        'label' => 'Has Placeholders?',
        'type' => 'bool',
        'default' => 0,
      ),
      'placeholders_required' => 
      array (
        'name' => 'placeholders_required',
        'label' => 'Placeholders Required',
        'type' => 'textarea',
        'help' => 'Comma-separated, e.g. [__YAJAMANA_NAME__], [__GOTRAM__], [__TITHI_VARA__].',
      ),
      'recitation_style' => 
      array (
        'name' => 'recitation_style',
        'label' => 'Recitation Style',
        'type' => 'select',
        'options' => 
        array (
          'UCHCHA' => 'Uchcha (loud)',
          'UPANSHU' => 'Upanshu (whisper)',
          'MANASIKA' => 'Manasika (mental)',
        ),
      ),
      'tags' =>
      array (
        'name' => 'tags',
        'label' => 'Tags',
        'type' => 'text',
        'help' => 'Comma-separated, e.g. Ganesh, Sankalpam, Pratishtha.',
      ),
      8 => 
      array (
        'name' => 'difficulty',
        'label' => 'Difficulty',
        'type' => 'text',
      ),
      9 => 
      array (
        'name' => 'duration_sec',
        'label' => 'Duration Sec',
        'type' => 'number',
      ),
    ),
  ),
  'library_books' =>
  array (
    'table' => 'library_books',
    'title' => 'Library — Source Books',
    'icon' => '📖',
    'section' => 'Devotion',
    'singular' => 'Book',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Book Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. BOOK_01',
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'title_dev',
        'label' => 'Title (Devanagari)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'author',
        'label' => 'Author / Compiler',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'language',
        'label' => 'Language',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'tradition',
        'label' => 'Sampradaya / Tradition',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'publisher',
        'label' => 'Publisher',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'year',
        'label' => 'Year',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      9 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'library_sections' => 
  array (
    'table' => 'library_sections',
    'title' => 'Library — Book Sections',
    'icon' => '🔖',
    'section' => 'Devotion',
    'singular' => 'Section',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Section Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. RV-M10-S85',
      ),
      1 => 
      array (
        'name' => 'book_code',
        'label' => 'Book',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'library_books',
          'value' => 'code',
          'label' => 'title',
          'order' => 'sort_order',
        ),
      ),
      2 => 
      array (
        'name' => 'level',
        'label' => 'Level',
        'type' => 'select',
        'options' => 
        array (
          'KANDA' => 'Kanda',
          'MANDALA' => 'Mandala',
          'ANUVAKA' => 'Anuvaka',
          'ADHYAYA' => 'Adhyaya',
          'SUKTA' => 'Sukta',
          'CHAPTER' => 'Chapter',
          'SECTION' => 'Section',
          'CANTO' => 'Canto',
          'PADA' => 'Pada',
        ),
        'help' => 'Kind of division.',
      ),
      3 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'text',
        'help' => 'Division number — numeric or alpha (e.g. 10, 85, I).',
      ),
      4 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'title_dev',
        'label' => 'Title (Devanagari)',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'parent_ref',
        'label' => 'Parent Section',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'library_sections',
          'value' => 'code',
          'label' => 'title',
          'order' => 'seq_no',
        ),
        'help' => 'The enclosing division (e.g. a Sukta\'s parent Mandala). Blank = top level.',
      ),
      7 => 
      array (
        'name' => 'seq_no',
        'label' => 'Sequence No.',
        'type' => 'number',
        'help' => 'Running order of this section within the book.',
      ),
      8 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'library_svara_scale' => 
  array (
    'table' => 'library_svara_scale',
    'title' => 'Library — Svara Scale',
    'icon' => '🎵',
    'section' => 'Devotion',
    'singular' => 'Svara',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'scheme',
        'label' => 'Scheme',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'NUMERIC_123' => 'Numeric svara (1-2-3)',
          'VEDIC_MARKS' => 'Vedic accent marks',
          'SAMA_7' => 'Sama 7-swara',
        ),
      ),
      1 => 
      array (
        'name' => 'svara',
        'label' => 'Svara Value',
        'type' => 'text',
        'req' => true,
        'help' => 'The mark as written — e.g. 1, 2, 3, udatta, anudatta, svarita, Sa, Re…',
      ),
      2 => 
      array (
        'name' => 'accent_name',
        'label' => 'Accent / Note Name',
        'type' => 'text',
        'help' => 'e.g. Anudātta (grave), Udātta (acute), Svarita (circumflex), or Sa/Re/Ga.',
      ),
      3 => 
      array (
        'name' => 'pitch',
        'label' => 'Relative Pitch',
        'type' => 'select',
        'options' => 
        array (
          'LOW' => 'Low',
          'MID' => 'Middle',
          'HIGH' => 'High',
          'FALLING' => 'Falling',
        ),
      ),
      4 => 
      array (
        'name' => 'frequency_hz',
        'label' => 'Frequency (Hz)',
        'type' => 'decimal',
        'help' => 'Absolute pitch for audio synthesis (optional; relative to the reciter\'s Sa).',
      ),
      5 => 
      array (
        'name' => 'semitone',
        'label' => 'Semitone offset',
        'type' => 'number',
        'help' => 'Semitones from the base note (−, 0, +) — a pitch-independent alternative to Hz.',
      ),
      6 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'sankalp_variables' => 
  array (
    'table' => 'sankalp_variables',
    'title' => 'Library — Sankalp Variables',
    'icon' => '🔤',
    'section' => 'Devotion',
    'singular' => 'Variable',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Placeholder',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. [__YAJAMANA_NAME__]',
      ),
      1 => 
      array (
        'name' => 'label',
        'label' => 'Label',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description / What to ask',
        'type' => 'textarea',
      ),
      3 => 
      array (
        'name' => 'input_type',
        'label' => 'Input Type',
        'type' => 'select',
        'options' => 
        array (
          'text' => 'Text',
          'name' => 'Person Name',
          'gotra' => 'Gotra (from Gotras master)',
          'nakshatra' => 'Nakshatra',
          'rashi' => 'Rashi',
          'date' => 'Date',
          'panchang' => 'Auto (Panchang)',
          'location' => 'Location',
        ),
      ),
      4 => 
      array (
        'name' => 'source',
        'label' => 'Auto-fill Source',
        'type' => 'select',
        'options' => 
        array (
          'manual' => 'Ask the user',
          'profile' => 'From devotee profile',
          'panchang' => 'From day\'s Panchang',
          'geo' => 'From location',
        ),
        'help' => 'How the value is obtained at assembly time.',
      ),
      5 => 
      array (
        'name' => 'example',
        'label' => 'Example Value',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ai_agents' => 
  array (
    'table' => 'ai_agents',
    'title' => 'AI Pandit Agents',
    'icon' => '🤖',
    'section' => 'AI',
    'singular' => 'Agent',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'agent_key',
        'label' => 'Agent Key',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'tagline',
        'label' => 'Tagline',
        'type' => 'textarea',
      ),
      4 => 
      array (
        'name' => 'intro',
        'label' => 'Intro',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'system_prompt',
        'label' => 'System Prompt',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'disclaimer',
        'label' => 'Disclaimer',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'free_msgs',
        'label' => 'Free Msgs',
        'type' => 'number',
      ),
      8 => 
      array (
        'name' => 'consult_price',
        'label' => 'Consult Price',
        'type' => 'decimal',
      ),
      9 => 
      array (
        'name' => 'consult_msgs',
        'label' => 'Consult Msgs',
        'type' => 'number',
      ),
    ),
  ),
  'num_consultations' => 
  array (
    'table' => 'num_consultations',
    'title' => 'Numerology Consultations',
    'icon' => '🗓',
    'section' => 'Numerology',
    'singular' => 'Consultation',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'dob',
        'label' => 'Dob',
        'type' => 'date',
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'scheduled_at',
        'label' => 'Scheduled At',
        'type' => 'date',
      ),
      5 => 
      array (
        'name' => 'assigned_to',
        'label' => 'Assigned To',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'fee',
        'label' => 'Fee',
        'type' => 'decimal',
      ),
      7 => 
      array (
        'name' => 'pay_status',
        'label' => 'Pay Status',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'consultant_notes',
        'label' => 'Consultant Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_elements' => 
  array (
    'table' => 'vastu_elements',
    'title' => 'Vastu Elements',
    'icon' => '🧭',
    'section' => 'Vastu',
    'singular' => 'Vastu Element',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Unique slug, e.g. kitchen, toilet, boss_cabin',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
      ),
      4 =>
      array (
        'name' => 'property_type',
        'label' => 'Space / Property Type',
        'type' => 'select',
        'options' =>
        array (
          'home' => 'Home / Residential',
          'office' => 'Office / Commercial',
          'factory' => 'Factory / Industrial',
          'shop' => 'Shop / Retail',
          'warehouse' => 'Warehouse / Storage',
          'hospital' => 'Hospital / Healthcare',
          'school' => 'School / Educational',
          'farm' => 'Farm / Agricultural',
          'all' => 'All / Universal',
        ),
      ),
      5 =>
      array (
        'name' => 'element_type',
        'label' => 'Elemental Nature',
        'type' => 'select',
        'options' => 
        array (
          '' => '—',
          'WATER' => 'Water (Jal)',
          'FIRE' => 'Fire (Agni)',
          'EARTH' => 'Earth (Prithvi)',
          'AIR' => 'Air (Vayu)',
          'SPACE' => 'Space (Akash)',
        ),
        'help' => 'Panchabhuta of the element — used for elemental harmony vs zone',
      ),
      6 =>
      array (
        'name' => 'tier',
        'label' => 'Tier (Micro → Macro)',
        'type' => 'select',
        'options' =>
        array (
          'macro' => 'Macro (Structure / Plot / Hall)',
          'meso' => 'Meso (Room / Cabin / Functional Unit)',
          'micro' => 'Micro (Furniture / Item / Equipment)',
        ),
        'help' => 'Hierarchy level from the smallest object to the whole structure.',
      ),
      7 =>
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' =>
        array (
          'STRUCTURE' => 'Structure',
          'ROOM' => 'Room',
          'ENTRANCE' => 'Entrance',
          'UTILITY' => 'Utility',
          'FURNITURE' => 'Furniture',
          'FIXTURE' => 'Fixture',
          'EQUIPMENT' => 'Equipment',
          'STORAGE' => 'Storage',
          'VEHICLE' => 'Vehicle',
          'OBSTRUCTION' => 'Obstruction',
        ),
      ),
      8 =>
      array (
        'name' => 'ideal_zones',
        'label' => 'Suitable Zones (Shakti Chakra)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
        'help' => 'Pick the 16-zone directions where this element is well-placed. Drives the green band of the degree scale.',
      ),
      9 =>
      array (
        'name' => 'suitable_padas',
        'label' => 'Suitable Padas (Purusha Mandala)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_padas',
          'value' => 'pada_no',
          'label' => 'zone',
          'order' => 'pada_no',
        ),
        'help' => 'Optional finer placement: the padas (of 81) that suit this element.',
      ),
      10 =>
      array (
        'name' => 'avoid_zones',
        'label' => 'Unsuitable Zones (Shakti Chakra)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
        'help' => 'Zones where this element causes a dosha. Drives the red band and remedies.',
      ),
      11 =>
      array (
        'name' => 'unsuitable_padas',
        'label' => 'Unsuitable Padas (Purusha Mandala)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_padas',
          'value' => 'pada_no',
          'label' => 'zone',
          'order' => 'pada_no',
        ),
        'help' => 'Optional finer placement: the padas (of 81) to avoid for this element.',
      ),
      12 =>
      array (
        'name' => 'effect_positive',
        'label' => 'Positive Effect (well-placed)',
        'type' => 'textarea',
        'help' => 'What a correct placement brings (merged from Vastu Rules).',
      ),
      13 =>
      array (
        'name' => 'effect_negative',
        'label' => 'Negative Effect (dosha)',
        'type' => 'textarea',
        'help' => 'What a wrong placement causes (merged from Vastu Rules).',
      ),
      14 =>
      array (
        'name' => 'severity',
        'label' => 'Severity',
        'type' => 'select',
        'options' =>
        array (
          'low' => 'Low',
          'medium' => 'Medium',
          'high' => 'High',
          'critical' => 'Critical',
        ),
        'help' => 'How serious a wrong placement is (merged from Vastu Rules).',
      ),
      15 =>
      array (
        'name' => 'severity_weight',
        'label' => 'Severity Weight',
        'type' => 'number',
        'help' => 'Score impact weight; auto-set from Severity if left blank.',
      ),
      16 =>
      array (
        'name' => 'ideal_deg_min',
        'label' => 'Ideal Degree — Min (°)',
        'type' => 'number',
        'help' => 'Optional precise ideal arc start (0–360). Usually derived from the zones above.',
      ),
      17 =>
      array (
        'name' => 'ideal_deg_max',
        'label' => 'Ideal Degree — Max (°)',
        'type' => 'number',
        'help' => 'Optional precise ideal arc end (0–360).',
      ),
      18 =>
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      19 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_color_placement' =>
  array (
    'table' => 'vastu_color_placement',
    'title' => 'Colour Rules (Zones · Padas · Elements)',
    'icon' => '🎨',
    'section' => 'Vastu',
    'menu_order' => 8,
    'singular' => 'Colour Rule',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Unique slug, e.g. red, blue, tulsi, money_plant',
      ),
      1 =>
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 =>
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
      ),
      4 =>
      array (
        'name' => 'color_hex',
        'label' => 'Colour (Hex)',
        'type' => 'text',
        'help' => 'Hex code, e.g. #C0392B — the colour identity.',
      ),
      5 =>
      array (
        'name' => 'property_type',
        'label' => 'Space / Property Type',
        'type' => 'select',
        'options' =>
        array (
          'home' => 'Home / Residential',
          'office' => 'Office / Commercial',
          'factory' => 'Factory / Industrial',
          'shop' => 'Shop / Retail',
          'warehouse' => 'Warehouse / Storage',
          'hospital' => 'Hospital / Healthcare',
          'school' => 'School / Educational',
          'farm' => 'Farm / Agricultural',
          'all' => 'All / Universal',
        ),
      ),
      6 =>
      array (
        'name' => 'element_type',
        'label' => 'Elemental Nature',
        'type' => 'select',
        'options' =>
        array (
          '' => '—',
          'WATER' => 'Water (Jal)',
          'FIRE' => 'Fire (Agni)',
          'EARTH' => 'Earth (Prithvi)',
          'AIR' => 'Air (Vayu)',
          'SPACE' => 'Space (Akash)',
        ),
        'help' => 'Panchabhuta this colour/plant carries (e.g. red = Fire, green = Air/Wood).',
      ),
      7 =>
      array (
        'name' => 'tier',
        'label' => 'Tier (Micro → Macro)',
        'type' => 'select',
        'options' =>
        array (
          'macro' => 'Macro (Structure / Plot / Hall)',
          'meso' => 'Meso (Room / Cabin / Functional Unit)',
          'micro' => 'Micro (Furniture / Item / Equipment)',
        ),
      ),
      8 =>
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' =>
        array (
          'STRUCTURE' => 'Structure',
          'ROOM' => 'Room',
          'ENTRANCE' => 'Entrance',
          'UTILITY' => 'Utility',
          'FURNITURE' => 'Furniture',
          'FIXTURE' => 'Fixture',
          'EQUIPMENT' => 'Equipment',
          'STORAGE' => 'Storage',
          'VEHICLE' => 'Vehicle',
          'OBSTRUCTION' => 'Obstruction',
        ),
      ),
      9 =>
      array (
        'name' => 'ideal_zones',
        'label' => 'Suitable Zones (Shakti Chakra)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
        'help' => 'Zones where this is beneficial.',
      ),
      10 =>
      array (
        'name' => 'suitable_padas',
        'label' => 'Suitable Padas (Purusha Mandala)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_padas',
          'value' => 'pada_no',
          'label' => 'zone',
          'order' => 'pada_no',
        ),
        'help' => 'Optional finer placement — padas (of 81) that suit.',
      ),
      11 =>
      array (
        'name' => 'avoid_zones',
        'label' => 'Unsuitable Zones (Shakti Chakra)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
        'help' => 'Zones where this causes a dosha.',
      ),
      12 =>
      array (
        'name' => 'unsuitable_padas',
        'label' => 'Unsuitable Padas (Purusha Mandala)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_padas',
          'value' => 'pada_no',
          'label' => 'zone',
          'order' => 'pada_no',
        ),
        'help' => 'Optional finer placement — padas (of 81) to avoid.',
      ),
      13 =>
      array (
        'name' => 'suitable_elements',
        'label' => 'Suitable with Elements',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_elements',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Elements this colour/plant pairs well with (from the Elements master).',
      ),
      14 =>
      array (
        'name' => 'unsuitable_elements',
        'label' => 'Unsuitable with Elements',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_elements',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Elements this colour/plant should not be combined with.',
      ),
      15 =>
      array (
        'name' => 'effect_positive',
        'label' => 'Positive Effect (well-placed)',
        'type' => 'textarea',
      ),
      16 =>
      array (
        'name' => 'effect_negative',
        'label' => 'Negative Effect (dosha)',
        'type' => 'textarea',
      ),
      17 =>
      array (
        'name' => 'severity',
        'label' => 'Severity',
        'type' => 'select',
        'options' =>
        array (
          'low' => 'Low',
          'medium' => 'Medium',
          'high' => 'High',
          'critical' => 'Critical',
        ),
      ),
      18 =>
      array (
        'name' => 'severity_weight',
        'label' => 'Severity Weight',
        'type' => 'number',
        'help' => 'Score impact weight; auto-set from Severity if blank.',
      ),
      19 =>
      array (
        'name' => 'ideal_deg_min',
        'label' => 'Ideal Degree — Min (°)',
        'type' => 'number',
      ),
      20 =>
      array (
        'name' => 'ideal_deg_max',
        'label' => 'Ideal Degree — Max (°)',
        'type' => 'number',
      ),
      21 =>
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      22 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
      23 =>
      array (
        'name' => 'min_lightness',
        'label' => 'Min Lightness (0–1)',
        'type' => 'decimal',
        'help' => 'Merged from the old Colour Rules — minimum HSL lightness for this colour to work in a sensitive zone.',
      ),
      24 =>
      array (
        'name' => 'is_sensitive',
        'label' => 'Sensitive Placement?',
        'type' => 'select',
        'options' =>
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
        'help' => 'Merged from the old Colour Rules — flag colours/zones needing extra care.',
      ),
    ),
  ),
  'vastu_plant_placement' =>
  array (
    'table' => 'vastu_plant_placement',
    'title' => 'Plant Rules (Zones · Padas · Elements)',
    'icon' => '🪴',
    'section' => 'Vastu',
    'menu_order' => 9,
    'singular' => 'Plant Rule',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Unique slug, e.g. red, blue, tulsi, money_plant',
      ),
      1 =>
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 =>
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
      ),
      4 =>
      array (
        'name' => 'botanical_name',
        'label' => 'Botanical Name',
        'type' => 'text',
        'help' => 'Optional botanical name, e.g. Ocimum sanctum (Tulsi).',
      ),
      5 =>
      array (
        'name' => 'property_type',
        'label' => 'Space / Property Type',
        'type' => 'select',
        'options' =>
        array (
          'home' => 'Home / Residential',
          'office' => 'Office / Commercial',
          'factory' => 'Factory / Industrial',
          'shop' => 'Shop / Retail',
          'warehouse' => 'Warehouse / Storage',
          'hospital' => 'Hospital / Healthcare',
          'school' => 'School / Educational',
          'farm' => 'Farm / Agricultural',
          'all' => 'All / Universal',
        ),
      ),
      6 =>
      array (
        'name' => 'element_type',
        'label' => 'Elemental Nature',
        'type' => 'select',
        'options' =>
        array (
          '' => '—',
          'WATER' => 'Water (Jal)',
          'FIRE' => 'Fire (Agni)',
          'EARTH' => 'Earth (Prithvi)',
          'AIR' => 'Air (Vayu)',
          'SPACE' => 'Space (Akash)',
        ),
        'help' => 'Panchabhuta this colour/plant carries (e.g. red = Fire, green = Air/Wood).',
      ),
      7 =>
      array (
        'name' => 'tier',
        'label' => 'Tier (Micro → Macro)',
        'type' => 'select',
        'options' =>
        array (
          'macro' => 'Macro (Structure / Plot / Hall)',
          'meso' => 'Meso (Room / Cabin / Functional Unit)',
          'micro' => 'Micro (Furniture / Item / Equipment)',
        ),
      ),
      8 =>
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' =>
        array (
          'STRUCTURE' => 'Structure',
          'ROOM' => 'Room',
          'ENTRANCE' => 'Entrance',
          'UTILITY' => 'Utility',
          'FURNITURE' => 'Furniture',
          'FIXTURE' => 'Fixture',
          'EQUIPMENT' => 'Equipment',
          'STORAGE' => 'Storage',
          'VEHICLE' => 'Vehicle',
          'OBSTRUCTION' => 'Obstruction',
        ),
      ),
      9 =>
      array (
        'name' => 'ideal_zones',
        'label' => 'Suitable Zones (Shakti Chakra)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
        'help' => 'Zones where this is beneficial.',
      ),
      10 =>
      array (
        'name' => 'suitable_padas',
        'label' => 'Suitable Padas (Purusha Mandala)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_padas',
          'value' => 'pada_no',
          'label' => 'zone',
          'order' => 'pada_no',
        ),
        'help' => 'Optional finer placement — padas (of 81) that suit.',
      ),
      11 =>
      array (
        'name' => 'avoid_zones',
        'label' => 'Unsuitable Zones (Shakti Chakra)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
        'help' => 'Zones where this causes a dosha.',
      ),
      12 =>
      array (
        'name' => 'unsuitable_padas',
        'label' => 'Unsuitable Padas (Purusha Mandala)',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_padas',
          'value' => 'pada_no',
          'label' => 'zone',
          'order' => 'pada_no',
        ),
        'help' => 'Optional finer placement — padas (of 81) to avoid.',
      ),
      13 =>
      array (
        'name' => 'suitable_elements',
        'label' => 'Suitable with Elements',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_elements',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Elements this colour/plant pairs well with (from the Elements master).',
      ),
      14 =>
      array (
        'name' => 'unsuitable_elements',
        'label' => 'Unsuitable with Elements',
        'type' => 'multiselect',
        'options_from' =>
        array (
          'table' => 'vastu_elements',
          'value' => 'code',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Elements this colour/plant should not be combined with.',
      ),
      15 =>
      array (
        'name' => 'effect_positive',
        'label' => 'Positive Effect (well-placed)',
        'type' => 'textarea',
      ),
      16 =>
      array (
        'name' => 'effect_negative',
        'label' => 'Negative Effect (dosha)',
        'type' => 'textarea',
      ),
      17 =>
      array (
        'name' => 'severity',
        'label' => 'Severity',
        'type' => 'select',
        'options' =>
        array (
          'low' => 'Low',
          'medium' => 'Medium',
          'high' => 'High',
          'critical' => 'Critical',
        ),
      ),
      18 =>
      array (
        'name' => 'severity_weight',
        'label' => 'Severity Weight',
        'type' => 'number',
        'help' => 'Score impact weight; auto-set from Severity if blank.',
      ),
      19 =>
      array (
        'name' => 'ideal_deg_min',
        'label' => 'Ideal Degree — Min (°)',
        'type' => 'number',
      ),
      20 =>
      array (
        'name' => 'ideal_deg_max',
        'label' => 'Ideal Degree — Max (°)',
        'type' => 'number',
      ),
      21 =>
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      22 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
      23 =>
      array (
        'name' => 'growth_type',
        'label' => 'Growth Type',
        'type' => 'select',
        'options' =>
        array (
          'TREE' => 'Tree',
          'SHRUB' => 'Shrub',
          'CREEPER' => 'Creeper',
          'HERB' => 'Herb',
          'AQUATIC' => 'Aquatic',
        ),
        'help' => 'Merged from the Plants master.',
      ),
      24 =>
      array (
        'name' => 'weight_category',
        'label' => 'Weight Category',
        'type' => 'select',
        'options' =>
        array (
          'LIGHT' => 'Light',
          'MEDIUM' => 'Medium',
          'HEAVY' => 'Heavy',
        ),
      ),
      25 =>
      array (
        'name' => 'is_thorny',
        'label' => 'Thorny?',
        'type' => 'select',
        'options' =>
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
        'help' => 'Thorny plants are generally discouraged in living/sacred zones.',
      ),
      26 =>
      array (
        'name' => 'milky_sap',
        'label' => 'Milky Sap?',
        'type' => 'select',
        'options' =>
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
        'help' => 'Plants with milky sap are traditionally avoided indoors.',
      ),
      27 =>
      array (
        'name' => 'air_purifying',
        'label' => 'Air Purifying?',
        'type' => 'select',
        'options' =>
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
      ),
    ),
  ),
  'vastu_rules' =>
  array (
    'table' => 'vastu_rules',
    'title' => 'Vastu Rules',
    'icon' => '📐',
    'section' => 'Vastu',
    'singular' => 'Vastu Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'element_code',
        'label' => 'Element Code',
        'type' => 'text',
        'req' => true,
        'help' => 'Matches a Vastu Element code',
      ),
      1 => 
      array (
        'name' => 'property_type',
        'label' => 'Property Type',
        'type' => 'select',
        'options' => 
        array (
          'home' => 'Home',
          'office' => 'Office',
          'factory' => 'Factory',
          'all' => 'All',
        ),
      ),
      2 => 
      array (
        'name' => 'ideal_zones',
        'label' => 'Ideal Zones (CSV)',
        'type' => 'text',
        'req' => true,
        'help' => 'e.g. SE,NW (16-dir codes N,NNE,NE,ENE,E,ESE,SE,SSE,S,SSW,SW,WSW,W,WNW,NW,NNW)',
      ),
      3 => 
      array (
        'name' => 'ideal_deg_min',
        'label' => 'Ideal Degree Min',
        'type' => 'number',
        'help' => '0-360; optional finer range',
      ),
      4 => 
      array (
        'name' => 'ideal_deg_max',
        'label' => 'Ideal Degree Max',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'avoid_zones',
        'label' => 'Avoid Zones (CSV)',
        'type' => 'text',
        'help' => 'Zones where this element is inauspicious',
      ),
      6 => 
      array (
        'name' => 'effect_positive',
        'label' => 'Prosperous Effect',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'effect_negative',
        'label' => 'Adverse Effect',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'severity',
        'label' => 'Severity',
        'type' => 'select',
        'options' => 
        array (
          'high' => 'High',
          'medium' => 'Medium',
          'low' => 'Low',
        ),
      ),
      9 => 
      array (
        'name' => 'severity_weight',
        'label' => 'Severity Weight (1-10)',
        'type' => 'number',
        'help' => 'Weight used in the overall Vastu Score (1 minor … 10 critical). Defaults from Severity when blank.',
      ),
      10 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_remedies' => 
  array (
    'table' => 'vastu_remedies',
    'title' => 'Vastu Remedies',
    'icon' => '🪔',
    'section' => 'Vastu',
    'singular' => 'Vastu Remedy',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'element_code',
        'label' => 'Element Code',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'wrong_zone',
        'label' => 'Wrong Zone',
        'type' => 'text',
        'help' => 'Zone/condition this remedy applies to (or ANY)',
      ),
      2 => 
      array (
        'name' => 'remedy',
        'label' => 'Primary Remedy (non-demolition)',
        'type' => 'textarea',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'secondary_remedy',
        'label' => 'Secondary Remedy',
        'type' => 'textarea',
        'help' => 'Colour therapy / pyramid / yantra balancing',
      ),
      4 => 
      array (
        'name' => 'elemental_strip',
        'label' => 'Elemental Strip',
        'type' => 'select',
        'options' => 
        array (
          '' => '—',
          'COPPER' => 'Copper (Fire/Sun)',
          'BRASS' => 'Brass (authority)',
          'IRON' => 'Iron (Saturn/Mars)',
          'ALUMINIUM' => 'Aluminium (Rahu)',
          'SILVER' => 'Silver (Moon/Water)',
          'LEAD' => 'Lead (Saturn/heavy)',
        ),
        'help' => 'Metal strip used to balance the defective zone',
      ),
      5 => 
      array (
        'name' => 'positive_result',
        'label' => 'Positive Result',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'negative_result',
        'label' => 'Negative Result (if ignored)',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'preventive',
        'label' => 'Preventive Measures',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'remedy_color',
        'label' => 'Remedy Colour (hex)',
        'type' => 'select',
        'help' => 'Colour-therapy hex, e.g. #FFD700',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      9 => 
      array (
        'name' => 'material_sku',
        'label' => 'Remedial Material SKU',
        'type' => 'text',
        'help' => 'Product SKU sold in the store for this remedy',
      ),
      10 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_zones' => 
  array (
    'table' => 'vastu_zones',
    'title' => 'Vastu Zones (Shakti Chakra)',
    'icon' => '🎡',
    'section' => 'Vastu',
    'singular' => 'Vastu Zone',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Zone Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'One of N,NNE,NE,ENE,E,ESE,SE,SSE,S,SSW,SW,WSW,W,WNW,NW,NNW',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Zone Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'element_type',
        'label' => 'Element',
        'type' => 'select',
        'options' => 
        array (
          'WATER' => 'Water (Jal)',
          'FIRE' => 'Fire (Agni)',
          'EARTH' => 'Earth (Prithvi)',
          'AIR' => 'Air (Vayu)',
          'SPACE' => 'Space (Akash)',
        ),
      ),
      3 => 
      array (
        'name' => 'start_degree',
        'label' => 'Start°',
        'type' => 'number',
        'req' => true,
      ),
      4 => 
      array (
        'name' => 'end_degree',
        'label' => 'End°',
        'type' => 'number',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'center_degree',
        'label' => 'Center°',
        'type' => 'number',
        'req' => true,
      ),
      6 => 
      array (
        'name' => 'ruling_planet',
        'label' => 'Ruling Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      7 => 
      array (
        'name' => 'ruling_deity',
        'label' => 'Ruling Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      8 => 
      array (
        'name' => 'color_hex',
        'label' => 'Grid Colour (hex)',
        'type' => 'text',
        'req' => true,
      ),
      9 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
      10 =>
      array (
        'name' => 'nature',
        'label' => 'Vastu Nature',
        'type' => 'select',
        'options' =>
        array (
          'Highly Positive' => 'Highly Positive',
          'Positive' => 'Positive',
          'Neutral' => 'Neutral',
          'Mixed' => 'Mixed',
          'Negative' => 'Negative',
        ),
        'help' => 'Overall Vastu polarity of this 22.5° zone.',
      ),
      11 =>
      array (
        'name' => 'nature_note',
        'label' => 'Nature Note',
        'type' => 'text',
        'help' => 'Short descriptor, e.g. "wealth, career" or "fire zone — good for kitchen, bad for toilets".',
      ),
    ),
  ),
  'vastu_entrances' =>
  array (
    'table' => 'vastu_entrances',
    'title' => 'Vastu Entrances (32 Padas)',
    'icon' => '🚪',
    'section' => 'Vastu',
    'singular' => 'Vastu Entrance',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Entrance Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'E1..E8, S1..S8, W1..W8, N1..N8',
      ),
      1 => 
      array (
        'name' => 'side',
        'label' => 'Side',
        'type' => 'select',
        'options' => 
        array (
          'N' => 'North',
          'E' => 'East',
          'S' => 'South',
          'W' => 'West',
        ),
      ),
      2 => 
      array (
        'name' => 'pada',
        'label' => 'Pada #',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'deity_name',
        'label' => 'Deity (Devata)',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      4 => 
      array (
        'name' => 'start_degree',
        'label' => 'Start°',
        'type' => 'number',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'end_degree',
        'label' => 'End°',
        'type' => 'number',
        'req' => true,
      ),
      6 => 
      array (
        'name' => 'nature_type',
        'label' => 'Nature',
        'type' => 'select',
        'options' => 
        array (
          'AUSPICIOUS' => 'Auspicious',
          'NEUTRAL' => 'Neutral',
          'INAUSPICIOUS' => 'Inauspicious',
        ),
      ),
      7 => 
      array (
        'name' => 'effect',
        'label' => 'Effect',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'palm_lines' => 
  array (
    'table' => 'palm_lines',
    'title' => 'Palm Lines',
    'icon' => '🖐',
    'section' => 'Palmistry',
    'singular' => 'Palm Line',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'key_name',
        'label' => 'Key',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Unique slug, e.g. life_line, heart_line',
      ),
      1 => 
      array (
        'name' => 'display_name',
        'label' => 'Display Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      3 => 
      array (
        'name' => 'palm_side',
        'label' => 'Palm Side',
        'type' => 'select',
        'options' => 
        array (
          'BOTH' => 'Both',
          'LEFT' => 'Left',
          'RIGHT' => 'Right',
        ),
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'palm_line_characteristics' => 
  array (
    'table' => 'palm_line_characteristics',
    'title' => 'Line Characteristics (State Thresholds)',
    'icon' => '📊',
    'section' => 'Palmistry',
    'singular' => 'Line Characteristic',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'line_key',
        'label' => 'Line Key',
        'type' => 'text',
        'req' => true,
        'help' => 'Matches a Palm Line key',
      ),
      1 => 
      array (
        'name' => 'state_code',
        'label' => 'State Code',
        'type' => 'text',
        'req' => true,
        'help' => 'e.g. DEEP_UNBROKEN, LIGHT_FAINT, BROKEN, CHAINED, ABSENT',
      ),
      2 => 
      array (
        'name' => 'label',
        'label' => 'Label',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'min_presence_score',
        'label' => 'Min Presence (0-1)',
        'type' => 'decimal',
      ),
      4 => 
      array (
        'name' => 'min_depth_score',
        'label' => 'Min Depth (0-1)',
        'type' => 'decimal',
      ),
      5 => 
      array (
        'name' => 'min_continuity_score',
        'label' => 'Min Continuity (0-1)',
        'type' => 'decimal',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'palm_predictions' => 
  array (
    'table' => 'palm_predictions',
    'title' => 'Palm Predictions',
    'icon' => '🔮',
    'section' => 'Palmistry',
    'singular' => 'Palm Prediction',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'line_key',
        'label' => 'Line Key',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'hand_context',
        'label' => 'Hand Context',
        'type' => 'select',
        'options' => 
        array (
          'DOMINANT' => 'Dominant',
          'NON_DOMINANT' => 'Non-Dominant',
          'LEFT' => 'Left',
          'RIGHT' => 'Right',
        ),
      ),
      2 => 
      array (
        'name' => 'state_code',
        'label' => 'State Code',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'HEALTH' => 'Health',
          'CAREER' => 'Career',
          'RELATIONSHIPS' => 'Relationships',
          'FINANCE' => 'Finance',
          'GENERAL' => 'General',
        ),
      ),
      4 => 
      array (
        'name' => 'prediction_text',
        'label' => 'Prediction',
        'type' => 'textarea',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'severity_or_strength',
        'label' => 'Strength (1-5)',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'palm_mounts' => 
  array (
    'table' => 'palm_mounts',
    'title' => 'Palm Mounts',
    'icon' => '⛰',
    'section' => 'Palmistry',
    'singular' => 'Palm Mount',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'key_name',
        'label' => 'Key',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. JUPITER, SATURN, SUN_APOLLO, MERCURY, VENUS, MOON_LUNA, MARS_UPPER, MARS_LOWER, RAHU, KETU',
      ),
      1 => 
      array (
        'name' => 'display_name',
        'label' => 'Display Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'ruling_planet',
        'label' => 'Ruling Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      3 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'palm_special_features' => 
  array (
    'table' => 'palm_special_features',
    'title' => 'Special Signs & Markings',
    'icon' => '✨',
    'section' => 'Palmistry',
    'singular' => 'Special Sign',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'key_name',
        'label' => 'Key',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. STAR, CROSS, TRIANGLE, SQUARE, ISLAND, GRILLE, MOLE_SPOT, FISH, TRISHUL, CHAIN, BAR_INTERRUPTION',
      ),
      1 => 
      array (
        'name' => 'display_name',
        'label' => 'Display Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'glyph',
        'label' => 'Glyph',
        'type' => 'text',
        'help' => 'A character/emoji used as the on-image marker',
      ),
      3 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'SYMBOL' => 'Symbol',
          'SECONDARY_LINE' => 'Secondary Line',
          'MOUNT_MARKING' => 'Mount Marking',
        ),
      ),
      4 => 
      array (
        'name' => 'default_impact',
        'label' => 'Default Impact',
        'type' => 'select',
        'options' => 
        array (
          'POSITIVE' => 'Positive',
          'NEGATIVE' => 'Negative',
          'AMPLIFIER' => 'Amplifier',
          'MITIGATOR' => 'Mitigator',
        ),
      ),
      5 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'palm_special_predictions' => 
  array (
    'table' => 'palm_special_predictions',
    'title' => 'Special Sign Predictions',
    'icon' => '🌟',
    'section' => 'Palmistry',
    'singular' => 'Special Prediction',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'feature_key',
        'label' => 'Sign Key',
        'type' => 'text',
        'req' => true,
        'help' => 'Matches a Special Sign key',
      ),
      1 => 
      array (
        'name' => 'mount_key',
        'label' => 'Mount Key',
        'type' => 'text',
        'help' => 'Optional mount anchor (blank = any location)',
      ),
      2 => 
      array (
        'name' => 'line_key',
        'label' => 'Line Key',
        'type' => 'text',
        'help' => 'Optional line anchor (blank = any location)',
      ),
      3 => 
      array (
        'name' => 'hand_context',
        'label' => 'Hand Context',
        'type' => 'select',
        'options' => 
        array (
          'BOTH' => 'Both',
          'DOMINANT' => 'Dominant',
          'NON_DOMINANT' => 'Non-Dominant',
          'LEFT' => 'Left',
          'RIGHT' => 'Right',
        ),
      ),
      4 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'HEALTH' => 'Health',
          'CAREER' => 'Career',
          'RELATIONSHIPS' => 'Relationships',
          'FINANCE' => 'Finance',
          'SPIRITUALITY' => 'Spirituality',
          'GENERAL' => 'General',
        ),
      ),
      5 => 
      array (
        'name' => 'prediction_text',
        'label' => 'Prediction',
        'type' => 'textarea',
        'req' => true,
      ),
      6 => 
      array (
        'name' => 'impact_type',
        'label' => 'Impact',
        'type' => 'select',
        'options' => 
        array (
          'POSITIVE' => 'Positive',
          'NEGATIVE' => 'Negative',
          'AMPLIFIER' => 'Amplifier',
          'MITIGATOR' => 'Mitigator',
        ),
      ),
      7 => 
      array (
        'name' => 'severity_or_strength',
        'label' => 'Strength (1-5)',
        'type' => 'number',
      ),
      8 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'geographic_nodes' => 
  array (
    'table' => 'geographic_nodes',
    'title' => 'Geographic Hierarchy',
    'icon' => '🗺️',
    'section' => 'Franchise Network',
    'singular' => 'Geographic Node',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Node Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Unique code, e.g. GJ-AHM-01',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Devanagari)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'level',
        'label' => 'Level',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'COUNTRY' => 'Country',
          'STATE' => 'State',
          'DIVISION' => 'Division',
          'DISTRICT' => 'District',
          'CITY' => 'City',
          'ZONE' => 'Zone',
          'WARD' => 'Ward',
        ),
      ),
      4 => 
      array (
        'name' => 'parent_code',
        'label' => 'Parent Node Code',
        'type' => 'text',
        'help' => 'Code of the parent geographic node (blank for root)',
      ),
      5 => 
      array (
        'name' => 'gst_state_code',
        'label' => 'GST State Code',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'pincode',
        'label' => 'PIN Code',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'latitude',
        'label' => 'Latitude',
        'type' => 'decimal',
      ),
      8 => 
      array (
        'name' => 'longitude',
        'label' => 'Longitude',
        'type' => 'decimal',
      ),
      9 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'franchise_nodes' => 
  array (
    'table' => 'franchise_nodes',
    'title' => 'Franchise / Partner Network',
    'icon' => '🏢',
    'section' => 'Franchise Network',
    'singular' => 'Franchise',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Franchise Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Franchise Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'owner_name',
        'label' => 'Owner / Partner',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'tel',
        'pii' => true,
      ),
      4 => 
      array (
        'name' => 'email',
        'label' => 'Email',
        'type' => 'email',
        'pii' => true,
      ),
      5 => 
      array (
        'name' => 'geo_node_code',
        'label' => 'Geographic Node',
        'type' => 'text',
        'help' => 'geographic_nodes.code this franchise covers',
      ),
      6 => 
      array (
        'name' => 'tier',
        'label' => 'Tier',
        'type' => 'select',
        'options' => 
        array (
          'MASTER' => 'Master Franchise',
          'REGIONAL' => 'Regional',
          'CITY' => 'City',
          'ASSOCIATE' => 'Associate',
        ),
      ),
      7 => 
      array (
        'name' => 'commission_pct',
        'label' => 'Default Commission %',
        'type' => 'decimal',
      ),
      8 => 
      array (
        'name' => 'gstin',
        'label' => 'GSTIN',
        'type' => 'text',
      ),
      9 => 
      array (
        'name' => 'agreement_start',
        'label' => 'Agreement Start',
        'type' => 'date',
      ),
      10 => 
      array (
        'name' => 'agreement_end',
        'label' => 'Agreement End',
        'type' => 'date',
      ),
      11 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'ACTIVE' => 'Active',
          'TRIAL' => 'Trial',
          'SUSPENDED' => 'Suspended',
          'TERMINATED' => 'Terminated',
        ),
      ),
      12 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'astro_grahas' => 
  array (
    'table' => 'astro_grahas',
    'title' => 'Planetary / Graha Master',
    'icon' => '🪐',
    'section' => 'Astrology Engine',
    'singular' => 'Graha',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Graha Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. SU, MO, MA, ME, JU, VE, SA, RA, KE',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Devanagari)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'symbol',
        'label' => 'Symbol',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'nature',
        'label' => 'Nature',
        'type' => 'select',
        'options' => 
        array (
          'BENEFIC' => 'Benefic',
          'MALEFIC' => 'Malefic',
          'NEUTRAL' => 'Neutral',
        ),
      ),
      5 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'select',
        'options' => 
        array (
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'AIR' => 'Air',
          'WATER' => 'Water',
          'ETHER' => 'Ether',
        ),
      ),
      6 => 
      array (
        'name' => 'own_signs',
        'label' => 'Own Signs',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'exalted_sign',
        'label' => 'Exalted In',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'debilitated_sign',
        'label' => 'Debilitated In',
        'type' => 'text',
      ),
      9 => 
      array (
        'name' => 'gemstone',
        'label' => 'Gemstone',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_gemstones',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      10 => 
      array (
        'name' => 'metal',
        'label' => 'Metal',
        'type' => 'text',
      ),
      11 => 
      array (
        'name' => 'mantra',
        'label' => 'Beej Mantra',
        'type' => 'textarea',
      ),
      12 => 
      array (
        'name' => 'dasha_years',
        'label' => 'Vimshottari Dasha Years',
        'type' => 'number',
      ),
      13 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'matchmaking_kootas' => 
  array (
    'table' => 'matchmaking_kootas',
    'title' => 'Ashtakoot / Dashakoot Config',
    'icon' => '💞',
    'section' => 'Astrology Engine',
    'singular' => 'Koota',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'koota_name',
        'label' => 'Koota Name',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. Varna, Vashya, Tara, Yoni, Graha Maitri, Gana, Bhakoot, Nadi',
      ),
      1 => 
      array (
        'name' => 'system',
        'label' => 'System',
        'type' => 'select',
        'options' => 
        array (
          'ASHTAKOOT' => 'Ashtakoot (North)',
          'DASHAKOOT' => 'Dashakoot (South)',
        ),
      ),
      2 => 
      array (
        'name' => 'max_points',
        'label' => 'Max Points',
        'type' => 'decimal',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'purpose',
        'label' => 'Assesses',
        'type' => 'text',
        'help' => 'What the koota measures',
      ),
      4 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_number_master' => 
  array (
    'table' => 'num_number_master',
    'title' => 'Number Master (1-9)',
    'icon' => '🔟',
    'section' => 'Numerology',
    'singular' => 'Number',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'planet',
        'label' => 'Ruling Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
        'help' => 'Dropdown sourced live from the Planet Master.',
      ),
      2 => 
      array (
        'name' => 'name',
        'label' => 'Title',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'keyword',
        'label' => 'Keyword',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'positive_traits',
        'label' => 'Positive Traits',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'negative_traits',
        'label' => 'Negative Traits',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'strength',
        'label' => 'Strength (1-9)',
        'type' => 'number',
        'help' => 'Strength rating from 1 (weakest) to 9 (strongest).',
      ),
      7 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'select',
        'options' => 
        array (
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'AIR' => 'Air',
          'WATER' => 'Water',
          'ETHER' => 'Ether',
        ),
        'help' => 'Ruling element of this number.',
      ),
      8 => 
      array (
        'name' => 'friendly_numbers',
        'label' => 'Friendly Numbers',
        'type' => 'text',
        'help' => 'Number relations live here (friendly / neutral / enemy) — no separate Number Relations master.',
      ),
      9 => 
      array (
        'name' => 'neutral_numbers',
        'label' => 'Neutral Numbers',
        'type' => 'text',
      ),
      10 => 
      array (
        'name' => 'enemy_numbers',
        'label' => 'Enemy Numbers',
        'type' => 'text',
      ),
      11 => 
      array (
        'name' => 'lucky_color',
        'label' => 'Lucky Colour',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      12 => 
      array (
        'name' => 'lucky_days',
        'label' => 'Lucky Days',
        'type' => 'text',
        'help' => 'e.g. Sunday, Monday',
      ),
      13 => 
      array (
        'name' => 'gemstone',
        'label' => 'Gemstone',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_gemstones',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      14 => 
      array (
        'name' => 'direction',
        'label' => 'Favourable Direction',
        'type' => 'text',
        'help' => 'Best direction when Kua = this number (e.g. South-East).',
      ),
      15 => 
      array (
        'name' => 'year_theme',
        'label' => 'Personal Year Theme',
        'type' => 'textarea',
        'help' => 'Rich reading shown on My Page when the Personal Year is this number.',
      ),
      16 => 
      array (
        'name' => 'day_theme',
        'label' => 'Personal Day Theme',
        'type' => 'textarea',
        'help' => 'Rich reading shown on My Page when the Personal Day is this number.',
      ),
      17 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_number_type' => 
  array (
    'table' => 'num_number_types',
    'title' => 'Number Type Master',
    'icon' => '🏷️',
    'section' => 'Numerology',
    'singular' => 'Number Type',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Machine key, e.g. mulank, bhagyank, kua, karmik, name_number.',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'topic_no',
        'label' => 'Topic No',
        'type' => 'number',
        'help' => 'Prediction topic number (1 Mulank, 2 Bhagyank, 3 Kua/Lucky, 5 Karmik, 7 Personal Year…).',
      ),
      4 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_type_predictions' => 
  array (
    'table' => 'num_type_predictions',
    'title' => 'Number Predictions (by Type)',
    'icon' => '🔮',
    'section' => 'Numerology',
    'singular' => 'Number Prediction',
    'cols' => 
    array (
      0 =>
      array (
        'name' => 'number',
        'label' => 'Number (1-9)',
        'type' => 'select',
        'req' => false,
        'options_from' =>
        array (
          'table' => 'num_number_master',
          'value' => 'number',
          'label' => 'number',
          'order' => 'number',
        ),
        'help' => 'Single digit 1-9 (from Number Master). For any value 10+ (birth date, Master 11/22/33, Karmic 13/14/16/19) leave this blank and use the Birth Date field.',
      ),
      1 => 
      array (
        'name' => 'number_type',
        'label' => 'Number Type',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'num_number_types',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'Mulank / Bhagyank / Kua / Karmik…',
      ),
      2 =>
      array (
        'name' => 'birth_date',
        'label' => 'Birth Date / Value (10-33)',
        'type' => 'number',
        'min' => 10,
        'max' => 33,
        'help' => 'Any value 10+ : birth date 10-31 (mishrank), Master 11/22/33, or Karmic 13/14/16/19. For single digits 1-9 use the Number field instead.',
      ),
      3 =>
      array (
        'name' => 'lang',
        'label' => 'Language',
        'type' => 'select',
        'options' =>
        array (
          'gu' => 'ગુજરાતી',
          'hi' => 'हिन्दी',
          'en' => 'English',
        ),
      ),
      4 =>
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
      ),
      5 =>
      array (
        'name' => 'general',
        'label' => 'General',
        'type' => 'html',
      ),
      6 =>
      array (
        'name' => 'health',
        'label' => 'Health',
        'type' => 'html',
      ),
      7 =>
      array (
        'name' => 'career',
        'label' => 'Career',
        'type' => 'html',
      ),
      8 =>
      array (
        'name' => 'wealth',
        'label' => 'Wealth / Finance',
        'type' => 'html',
      ),
      9 =>
      array (
        'name' => 'relationship',
        'label' => 'Relationship',
        'type' => 'html',
      ),
      10 =>
      array (
        'name' => 'education',
        'label' => 'Education',
        'type' => 'html',
      ),
      11 =>
      array (
        'name' => 'remedy',
        'label' => 'Remedy',
        'type' => 'html',
      ),
      12 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_loshu_predictions' =>
  array (
    'table' => 'num_loshu_predictions',
    'title' => 'Lo Shu Grid Predictions',
    'icon' => '🔳',
    'section' => 'Numerology',
    'singular' => 'Lo Shu Prediction',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'topic_no',
        'label' => 'Topic',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'num_number_types',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'From the Number Type master — Lo Shu 201-218, Vedic 301-318.',
      ),
      1 => 
      array (
        'name' => 'digit',
        'label' => 'Digit (1-9)',
        'type' => 'number',
        'help' => 'Optional — the topic already encodes the number/plane.',
      ),
      2 => 
      array (
        'name' => 'counter',
        'label' => 'Repeat Count',
        'type' => 'number',
        'help' => 'How many times the digit appears in the grid (0 = missing).',
      ),
      3 => 
      array (
        'name' => 'status',
        'label' => 'Number Status',
        'type' => 'select',
        'options' => 
        array (
          'balanced' => 'Balanced',
          'missing' => 'Missing',
          'low' => 'Low',
          'exceed' => 'Exceed',
        ),
        'help' => 'State of the number in the grid: Missing (0 times), Low (below normal), Balanced (ideal count), Exceed (repeated more than normal).',
      ),
      4 => 
      array (
        'name' => 'lang',
        'label' => 'Language',
        'type' => 'select',
        'options' => 
        array (
          'gu' => 'ગુજરાતી',
          'hi' => 'हिन्दी',
          'en' => 'English',
        ),
      ),
      5 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'prediction',
        'label' => 'Prediction / Effect',
        'type' => 'html',
      ),
      7 => 
      array (
        'name' => 'remedy',
        'label' => 'Remedy',
        'type' => 'html',
      ),
      8 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'user_assets' => 
  array (
    'table' => 'user_assets',
    'title' => 'Numerology Asset Registry',
    'icon' => '📱',
    'section' => 'Numerology',
    'singular' => 'Asset',
    'hidden' => true,
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'customer_id',
        'label' => 'Customer ID',
        'type' => 'number',
        'list' => false,
        'help' => 'Links the asset to a numerology customer (set automatically from the Customer page).',
      ),
      1 => 
      array (
        'name' => 'asset_type',
        'label' => 'Asset Type',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'MOBILE' => 'Mobile Number',
          'HOUSE' => 'House / Flat No.',
          'VEHICLE' => 'Vehicle No.',
          'BANK_ACCOUNT' => 'Bank Account',
          'NAME' => 'Personal Name',
          'BUSINESS' => 'Business Name',
        ),
      ),
      2 => 
      array (
        'name' => 'asset_number',
        'label' => 'Asset Number',
        'type' => 'text',
        'req' => true,
        'help' => 'The number / name to analyse',
      ),
      3 => 
      array (
        'name' => 'owning_date',
        'label' => 'Owning Date',
        'type' => 'date',
        'help' => 'Optional — when this asset was acquired.',
      ),
    ),
  ),
  'scheduled_poojas' => 
  array (
    'table' => 'scheduled_poojas',
    'title' => 'Scheduled e-Pooja',
    'icon' => '🔥',
    'section' => 'e-Pooja & Sankalp',
    'singular' => 'Scheduled Pooja',
    'cols' => 
    array (
      1 =>
      array (
        'name' => 'pooja_name',
        'label' => 'Pooja (Main Service)',
        'type' => 'select',
        'req' => true,
        'options_from' =>
        array (
          'table' => 'booking_services',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Select the pooja from the Main Services (Booking Catalogue). The deity is already defined on the service, so no separate deity field is needed here.',
      ),
      3 =>
      array (
        'name' => 'temple',
        'label' => 'Temple / Venue',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'temples',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Select the temple / venue from the Temples master.',
      ),
      13 =>
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'html',
        'list' => false,
        'help' => 'Full description of the pooja (merged from Group Poojas).',
      ),
      4 =>
      array (
        'name' => 'scheduled_date',
        'label' => 'Scheduled Date',
        'type' => 'date',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'scheduled_time',
        'label' => 'Scheduled Time',
        'type' => 'text',
      ),
      10 =>
      array (
        'name' => 'livestream_url',
        'label' => 'Livestream URL',
        'type' => 'text',
      ),
      14 =>
      array (
        'name' => 'image',
        'label' => 'Image / Poster URL',
        'type' => 'text',
        'list' => false,
        'help' => 'Poster / thumbnail image for the pooja (merged from Group Poojas).',
      ),
      15 =>
      array (
        'name' => 'video_url',
        'label' => 'Puja Video URL',
        'type' => 'text',
        'list' => false,
        'help' => 'Recorded / promotional puja video (merged from Group Poojas).',
      ),
      11 =>
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'default' => 'SCHEDULED',
        'options' =>
        array (
          'SCHEDULED' => 'Scheduled',
          'OPEN' => 'Booking Open',
          'LIVE' => 'Live',
          'COMPLETED' => 'Completed',
          'CANCELLED' => 'Cancelled',
        ),
        'help' => 'New poojas start as Scheduled and turn to Booking Open automatically once a pandit and at least one package are assigned.',
      ),
      12 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'pooja_sankalp_bookings' =>
  array (
    'table' => 'pooja_sankalp_bookings',
    'title' => 'Sankalp Bookings',
    'icon' => '📿',
    'section' => 'e-Pooja & Sankalp',
    'singular' => 'Sankalp Booking',
    'filters' =>
    array (
      0 => 'booked_on',
      1 => 'scheduled_pooja_code',
      2 => 'yajman_name',
      3 => 'mobile',
      4 => 'payment_status',
    ),
    'cols' =>
    array (
      0 => 
      array (
        'name' => 'booking_ref',
        'label' => 'Booking Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'scheduled_pooja_code',
        'label' => 'Scheduled Pooja',
        'type' => 'text',
        'req' => true,
        'help' => 'scheduled_poojas.code',
      ),
      2 => 
      array (
        'name' => 'yajman_name',
        'label' => 'Yajman Name',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'gotra',
        'label' => 'Gotra',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'gotras',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
      ),
      4 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'tel',
        'pii' => true,
      ),
      5 => 
      array (
        'name' => 'email',
        'label' => 'Email',
        'type' => 'email',
        'pii' => true,
      ),
      6 =>
      array (
        'name' => 'sankalp_text',
        'label' => 'Sankalp Text',
        'type' => 'textarea',
      ),
      12 =>
      array (
        'name' => 'package_name',
        'label' => 'Package',
        'type' => 'text',
      ),
      13 =>
      array (
        'name' => 'persons',
        'label' => 'Persons',
        'type' => 'number',
      ),
      7 =>
      array (
        'name' => 'amount',
        'label' => 'Amount',
        'type' => 'decimal',
      ),
      8 => 
      array (
        'name' => 'payment_status',
        'label' => 'Payment Status',
        'type' => 'select',
        'options' => 
        array (
          'PENDING' => 'Pending',
          'PAID' => 'Paid',
          'REFUNDED' => 'Refunded',
        ),
      ),
      9 => 
      array (
        'name' => 'fulfillment_status',
        'label' => 'Fulfilment',
        'type' => 'select',
        'options' => 
        array (
          'BOOKED' => 'Booked',
          'PERFORMED' => 'Performed',
          'PRASAD_DISPATCHED' => 'Prasad Dispatched',
          'CLOSED' => 'Closed',
        ),
      ),
      10 => 
      array (
        'name' => 'prasad_tracking',
        'label' => 'Prasad Tracking No.',
        'type' => 'text',
      ),
      11 => 
      array (
        'name' => 'booked_on',
        'label' => 'Booked On',
        'type' => 'date',
      ),
    ),
  ),
  'scheduled_pooja_packages' =>
  array (
    'table' => 'scheduled_pooja_packages',
    'title' => 'Puja Packages',
    'icon' => '🎟️',
    'section' => 'e-Pooja & Sankalp',
    'singular' => 'Puja Package',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'scheduled_pooja_id',
        'label' => 'Scheduled e-Pooja',
        'type' => 'select',
        'req' => true,
        'options_from' =>
        array (
          'table' => 'scheduled_poojas',
          'value' => 'id',
          'label' => 'pooja_name',
          'order' => 'scheduled_date',
        ),
        'help' => 'The scheduled e-pooja this package belongs to.',
      ),
      1 =>
      array (
        'name' => 'name',
        'label' => 'Package Name',
        'type' => 'text',
        'req' => true,
        'help' => 'e.g. Individual Puja, Partner Puja, Family Puja.',
      ),
      2 =>
      array (
        'name' => 'persons',
        'label' => 'No. of Persons',
        'type' => 'number',
        'default' => 1,
      ),
      3 =>
      array (
        'name' => 'price',
        'label' => 'Sankalp Price (₹)',
        'type' => 'decimal',
        'req' => true,
      ),
      6 =>
      array (
        'name' => 'capacity',
        'label' => 'Sankalp Capacity',
        'type' => 'number',
        'help' => 'Max sankalps for this package. Leave blank / 0 for unlimited. When reached, this package shows Fully Booked.',
      ),
      7 =>
      array (
        'name' => 'mode',
        'label' => 'Mode',
        'type' => 'select',
        'options' =>
        array (
          'ONLINE' => 'Online (Livestream)',
          'OFFLINE' => 'Offline',
          'HYBRID' => 'Hybrid',
        ),
      ),
      4 =>
      array (
        'name' => 'tag',
        'label' => 'Tag / Badge',
        'type' => 'text',
        'help' => 'Optional badge shown on the package, e.g. "Best Value".',
      ),
      5 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'revenue_distribution_rules' =>
  array (
    'table' => 'revenue_distribution_rules',
    'title' => 'Revenue Split Rules',
    'icon' => '➗',
    'section' => 'Finance & Revenue',
    'singular' => 'Split Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Rule Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Rule Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'applies_to',
        'label' => 'Applies To',
        'type' => 'select',
        'options' => 
        array (
          'SERVICE' => 'Service',
          'POOJA' => 'Pooja / Sankalp',
          'PRODUCT' => 'Product',
          'CONSULTATION' => 'Consultation',
          'DONATION' => 'Donation',
          'ALL' => 'All',
        ),
      ),
      3 => 
      array (
        'name' => 'category_key',
        'label' => 'Category / Scope',
        'type' => 'text',
        'help' => 'Optional category or franchise code the rule is scoped to',
      ),
      4 => 
      array (
        'name' => 'platform_pct',
        'label' => 'Platform %',
        'type' => 'decimal',
      ),
      5 => 
      array (
        'name' => 'franchise_pct',
        'label' => 'Franchise %',
        'type' => 'decimal',
      ),
      6 => 
      array (
        'name' => 'pandit_pct',
        'label' => 'Pandit / Expert %',
        'type' => 'decimal',
      ),
      7 => 
      array (
        'name' => 'trust_pct',
        'label' => 'Trust / Temple %',
        'type' => 'decimal',
      ),
      8 => 
      array (
        'name' => 'tax_pct',
        'label' => 'Tax (GST) %',
        'type' => 'decimal',
      ),
      9 => 
      array (
        'name' => 'effective_from',
        'label' => 'Effective From',
        'type' => 'date',
      ),
      10 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'revenue_ledger' => 
  array (
    'table' => 'revenue_ledger',
    'title' => 'Revenue Ledger',
    'icon' => '📒',
    'section' => 'Finance & Revenue',
    'singular' => 'Ledger Entry',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'txn_ref',
        'label' => 'Transaction Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'txn_date',
        'label' => 'Transaction Date',
        'type' => 'date',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'source_type',
        'label' => 'Source Type',
        'type' => 'select',
        'options' => 
        array (
          'SERVICE' => 'Service',
          'POOJA' => 'Pooja / Sankalp',
          'PRODUCT' => 'Product',
          'CONSULTATION' => 'Consultation',
          'DONATION' => 'Donation',
        ),
      ),
      3 => 
      array (
        'name' => 'source_ref',
        'label' => 'Source Ref',
        'type' => 'text',
        'help' => 'Booking / order / sankalp reference',
      ),
      4 => 
      array (
        'name' => 'franchise_code',
        'label' => 'Franchise Code',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'gross_amount',
        'label' => 'Gross Amount',
        'type' => 'decimal',
        'req' => true,
      ),
      6 => 
      array (
        'name' => 'platform_share',
        'label' => 'Platform Share',
        'type' => 'decimal',
      ),
      7 => 
      array (
        'name' => 'franchise_share',
        'label' => 'Franchise Share',
        'type' => 'decimal',
      ),
      8 => 
      array (
        'name' => 'pandit_share',
        'label' => 'Pandit Share',
        'type' => 'decimal',
      ),
      9 => 
      array (
        'name' => 'trust_share',
        'label' => 'Trust Share',
        'type' => 'decimal',
      ),
      10 => 
      array (
        'name' => 'tax_amount',
        'label' => 'Tax Amount',
        'type' => 'decimal',
      ),
      11 => 
      array (
        'name' => 'payout_status',
        'label' => 'Payout Status',
        'type' => 'select',
        'options' => 
        array (
          'PENDING' => 'Pending',
          'PROCESSED' => 'Processed',
          'HELD' => 'Held',
          'REVERSED' => 'Reversed',
        ),
      ),
      12 => 
      array (
        'name' => 'remarks',
        'label' => 'Remarks',
        'type' => 'textarea',
      ),
    ),
  ),
  'pooja_steps' => 
  array (
    'table' => 'pooja_steps',
    'title' => 'Pooja Method & Sequence',
    'icon' => '📜',
    'section' => 'Knowledge Bank',
    'singular' => 'Pooja Step',
    'cols' => 
    array (
      0 =>
      array (
        'name' => 'pooja_code',
        'label' => 'Pooja / Main Service',
        'type' => 'select',
        'req' => true,
        'options_from' =>
        array (
          'table' => 'booking_services',
          'value' => 'slug',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'Select the pooja / main service (from the Booking Catalogue) these steps belong to — stores its slug/code.',
      ),
      1 => 
      array (
        'name' => 'step_no',
        'label' => 'Step No.',
        'type' => 'number',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'title',
        'label' => 'Step Title',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'title_dev',
        'label' => 'Title (Devanagari)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'phase',
        'label' => 'Phase',
        'type' => 'select',
        'options' => 
        array (
          'PURVANGA' => 'Purvanga (preparation)',
          'MUKHYA' => 'Mukhya (main)',
          'UTTARANGA' => 'Uttaranga (conclusion)',
        ),
      ),
      5 => 
      array (
        'name' => 'mantra_ref',
        'label' => 'Mantra / Chant',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'chants',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'name',
        ),
        'help' => 'Dropdown sourced live from the Chants & Mantras master.',
      ),
      6 =>
      array (
        'name' => 'materials',
        'label' => 'Materials (mapped to this pooja)',
        'type' => 'multiselect',
        'help' => 'Lists only the materials mapped to the selected pooja via Pooja Material Mapping.',
      ),
      7 => 
      array (
        'name' => 'instructions',
        'label' => 'Instructions',
        'type' => 'textarea',
        'req' => true,
      ),
      9 =>
      array (
        'name' => 'who_recites',
        'label' => 'Who Recites',
        'type' => 'select',
        'options' => 
        array (
          'PANDIT' => 'Pandit only',
          'YAJAMANA' => 'Yajamana only',
          'BOTH' => 'Both in unison',
          'PANDIT_LEADS' => 'Pandit leads, Yajamana repeats',
        ),
      ),
      10 => 
      array (
        'name' => 'recitation_style',
        'label' => 'Recitation Style',
        'type' => 'select',
        'options' => 
        array (
          'UCHCHA' => 'Uchcha (loud)',
          'UPANSHU' => 'Upanshu (whisper)',
          'MANASIKA' => 'Manasika (mental)',
        ),
      ),
      11 =>
      array (
        'name' => 'kriya_action',
        'label' => 'Kriya (Description)',
        'type' => 'textarea',
        'help' => 'Describe the ritual action / procedure performed at this step.',
      ),
      12 =>
      array (
        'name' => 'mudra_posture',
        'label' => 'Mudra (Image / Video URL)',
        'type' => 'text',
        'help' => 'Paste an image or video URL demonstrating the mudra / posture.',
      ),
      13 =>
      array (
        'name' => 'is_optional',
        'label' => 'Optional Step? (unchecked = Compulsory)',
        'type' => 'bool',
        'default' => 0,
      ),
      14 =>
      array (
        'name' => 'duration_min',
        'label' => 'Duration (min)',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_plants' =>
  array (
    'table' => 'vastu_plants',
    'title' => 'Vastu Plants Master',
    'icon' => '🪴',
    'section' => 'Vastu',
    'singular' => 'Plant',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Plant Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'common_name',
        'label' => 'Common Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'common_name_dev',
        'label' => 'Name (Devanagari)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'botanical_name',
        'label' => 'Botanical Name',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'growth_type',
        'label' => 'Growth Type',
        'type' => 'select',
        'options' => 
        array (
          'TREE' => 'Tree',
          'SHRUB' => 'Shrub',
          'CREEPER' => 'Creeper',
          'HERB' => 'Herb',
          'AQUATIC' => 'Aquatic',
        ),
      ),
      5 => 
      array (
        'name' => 'weight_category',
        'label' => 'Weight',
        'type' => 'select',
        'options' => 
        array (
          'LIGHT' => 'Light',
          'MEDIUM' => 'Medium',
          'HEAVY' => 'Heavy',
        ),
      ),
      6 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'select',
        'options' => 
        array (
          'WATER' => 'Water',
          'AIR' => 'Air',
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'SPACE' => 'Space',
          'WOOD' => 'Wood',
        ),
      ),
      7 => 
      array (
        'name' => 'is_thorny',
        'label' => 'Thorny?',
        'type' => 'select',
        'options' => 
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
      ),
      8 => 
      array (
        'name' => 'milky_sap',
        'label' => 'Milky Sap?',
        'type' => 'select',
        'options' => 
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
      ),
      9 => 
      array (
        'name' => 'air_purifying',
        'label' => 'Air-purifying?',
        'type' => 'select',
        'options' => 
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
      ),
      10 => 
      array (
        'name' => 'optimal_zones',
        'label' => 'Optimal Zones',
        'type' => 'text',
        'help' => 'CSV of zone codes, e.g. N,NE,E',
      ),
      11 => 
      array (
        'name' => 'prohibited_zones',
        'label' => 'Prohibited Zones',
        'type' => 'text',
        'help' => 'CSV of zone codes',
      ),
      12 => 
      array (
        'name' => 'benefits',
        'label' => 'Benefits / Notes',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_pot_materials' => 
  array (
    'table' => 'vastu_pot_materials',
    'title' => 'Vastu Pot / Planter Materials',
    'icon' => '🏺',
    'section' => 'Vastu',
    'singular' => 'Pot Material',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'CLAY · CERAMIC · PLASTIC · WATER_GLASS · METAL',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'select',
        'options' => 
        array (
          'WATER' => 'Water',
          'AIR' => 'Air',
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'SPACE' => 'Space',
          'METAL' => 'Metal',
        ),
      ),
      3 => 
      array (
        'name' => 'ideal_zones',
        'label' => 'Ideal Zones',
        'type' => 'text',
        'help' => 'CSV of zone codes',
      ),
      4 => 
      array (
        'name' => 'avoid_zones',
        'label' => 'Avoid Zones',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_color_rules' => 
  array (
    'table' => 'vastu_color_rules',
    'title' => 'Vastu Colour Rules (16 Zones)',
    'icon' => '🎨',
    'section' => 'Vastu',
    'singular' => 'Colour Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'zone_code',
        'label' => 'Zone',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW',
      ),
      1 => 
      array (
        'name' => 'zone_element',
        'label' => 'Zone Element',
        'type' => 'select',
        'options' => 
        array (
          'WATER' => 'Water',
          'AIR' => 'Air',
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'SPACE' => 'Space',
        ),
      ),
      2 => 
      array (
        'name' => 'recommended_colors',
        'label' => 'Recommended Colours',
        'type' => 'multiselect',
        'help' => 'Comma-separated names/hex',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      3 => 
      array (
        'name' => 'avoid_colors',
        'label' => 'Avoid Colours',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      4 => 
      array (
        'name' => 'min_lightness',
        'label' => 'Min Lightness (0-1)',
        'type' => 'decimal',
        'help' => 'Below this in sensitive zones triggers a dark penalty',
      ),
      5 => 
      array (
        'name' => 'is_sensitive',
        'label' => 'Sensitive Zone?',
        'type' => 'select',
        'options' => 
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
      ),
      6 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_element_matrix' => 
  array (
    'table' => 'vastu_element_matrix',
    'title' => 'Vastu Element Compatibility Matrix',
    'icon' => '🧮',
    'section' => 'Vastu',
    'singular' => 'Element Relation',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'from_element',
        'label' => 'From Element',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'WATER' => 'Water',
          'AIR' => 'Air',
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'SPACE' => 'Space',
          'WOOD' => 'Wood',
          'METAL' => 'Metal',
        ),
      ),
      1 => 
      array (
        'name' => 'to_element',
        'label' => 'To (Zone) Element',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'WATER' => 'Water',
          'AIR' => 'Air',
          'FIRE' => 'Fire',
          'EARTH' => 'Earth',
          'SPACE' => 'Space',
        ),
      ),
      2 => 
      array (
        'name' => 'relation',
        'label' => 'Relation',
        'type' => 'select',
        'options' => 
        array (
          'SAME' => 'Same',
          'GENERATING' => 'Generating / Supporting',
          'CONTROLLING' => 'Controlling / Neutral',
          'DESTRUCTIVE' => 'Destructive / Conflicting',
        ),
      ),
      3 => 
      array (
        'name' => 'coefficient',
        'label' => 'Coefficient (0-1)',
        'type' => 'decimal',
        'req' => true,
      ),
      4 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'text',
      ),
    ),
  ),
  'vastu_room_modifiers' => 
  array (
    'table' => 'vastu_room_modifiers',
    'title' => 'Vastu Room-Usage Modifiers',
    'icon' => '🚪',
    'section' => 'Vastu',
    'singular' => 'Room Modifier',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'room_type',
        'label' => 'Room / Usage',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'ideal_zones',
        'label' => 'Ideal Zones',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'avoid_zones',
        'label' => 'Avoid Zones',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'modifier',
        'label' => 'Modifier (0.80-1.00)',
        'type' => 'decimal',
      ),
      4 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_floor_plans' => 
  array (
    'table' => 'vastu_floor_plans',
    'title' => 'Vastu Floor Plans',
    'icon' => '🗺️',
    'section' => 'Vastu Consultations',
    'singular' => 'Floor Plan',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Plan Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'client_name',
        'label' => 'Client Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'tel',
        'pii' => true,
      ),
      3 => 
      array (
        'name' => 'property_type',
        'label' => 'Property Type',
        'type' => 'select',
        'options' => 
        array (
          'HOME' => 'Home',
          'OFFICE' => 'Office',
          'SHOP' => 'Shop',
          'PLOT' => 'Plot',
          'FACTORY' => 'Factory',
        ),
      ),
      4 => 
      array (
        'name' => 'total_area_sqft',
        'label' => 'Total Area (sq.ft)',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'true_north_degree',
        'label' => 'True North (°)',
        'type' => 'decimal',
      ),
      6 => 
      array (
        'name' => 'blueprint_url',
        'label' => 'Blueprint URL',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'overall_score',
        'label' => 'Overall Score',
        'type' => 'number',
      ),
      8 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'DRAFT' => 'Draft',
          'ANALYZED' => 'Analyzed',
          'DELIVERED' => 'Delivered',
        ),
      ),
      9 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_zone_plants' => 
  array (
    'table' => 'vastu_zone_plants',
    'title' => 'Vastu Zone-Plant Placements',
    'icon' => '🌿',
    'section' => 'Vastu Consultations',
    'singular' => 'Zone Plant',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'plan_ref',
        'label' => 'Plan Ref',
        'type' => 'text',
        'req' => true,
        'help' => 'vastu_floor_plans.ref',
      ),
      1 => 
      array (
        'name' => 'zone_code',
        'label' => 'Zone',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'plant_code',
        'label' => 'Plant',
        'type' => 'text',
        'req' => true,
        'help' => 'vastu_plants.code',
      ),
      3 => 
      array (
        'name' => 'pot_material',
        'label' => 'Pot Material',
        'type' => 'select',
        'options' => 
        array (
          'CLAY' => 'Clay / Terracotta',
          'CERAMIC' => 'Ceramic',
          'PLASTIC' => 'Plastic',
          'WATER_GLASS' => 'Water Glass',
          'METAL' => 'Metal',
        ),
      ),
      4 => 
      array (
        'name' => 'clinging_to_wall',
        'label' => 'Clinging to Wall?',
        'type' => 'select',
        'options' => 
        array (
          'N' => 'No',
          'Y' => 'Yes',
        ),
      ),
      5 => 
      array (
        'name' => 'score',
        'label' => 'Score (0-100)',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'verdict',
        'label' => 'Verdict',
        'type' => 'select',
        'options' => 
        array (
          'HARMONIOUS' => 'Harmonious',
          'MODERATE_IMBALANCE' => 'Moderate Imbalance',
          'CRITICAL_CONFLICT' => 'Critical Conflict',
        ),
      ),
      7 => 
      array (
        'name' => 'notes',
        'label' => 'Remedy / Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_applied_colors' => 
  array (
    'table' => 'vastu_applied_colors',
    'title' => 'Vastu Applied Colours',
    'icon' => '🖌️',
    'section' => 'Vastu Consultations',
    'singular' => 'Applied Colour',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'plan_ref',
        'label' => 'Plan Ref',
        'type' => 'text',
        'req' => true,
        'help' => 'vastu_floor_plans.ref',
      ),
      1 => 
      array (
        'name' => 'zone_code',
        'label' => 'Zone',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'color_hex',
        'label' => 'Colour (HEX)',
        'type' => 'text',
        'req' => true,
        'help' => 'e.g. #2563EB',
      ),
      3 => 
      array (
        'name' => 'lightness',
        'label' => 'Lightness (0-1)',
        'type' => 'decimal',
      ),
      4 => 
      array (
        'name' => 'score',
        'label' => 'Score (0-100)',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'severity',
        'label' => 'Severity',
        'type' => 'select',
        'options' => 
        array (
          'HARMONIOUS' => 'Harmonious',
          'MODERATE_IMBALANCE' => 'Moderate Imbalance',
          'CRITICAL_CONFLICT' => 'Critical Conflict',
        ),
      ),
      6 => 
      array (
        'name' => 'remedy',
        'label' => 'Remedy',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_properties' => 
  array (
    'table' => 'vastu_properties',
    'title' => 'Vastu Properties',
    'icon' => '🏢',
    'section' => 'Vastu Consultant',
    'singular' => 'Property',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Property Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Property Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'owner_user_id',
        'label' => 'Owner User ID',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'client_ref',
        'label' => 'Consultant Client Ref',
        'type' => 'text',
        'help' => 'vastu_consultant_clients.ref (consultant mode)',
      ),
      4 => 
      array (
        'name' => 'property_type',
        'label' => 'Property Type',
        'type' => 'select',
        'options' => 
        array (
          'HOME' => 'Home',
          'APARTMENT' => 'Apartment',
          'VILLA' => 'Villa',
          'BUNGALOW' => 'Bungalow',
          'OFFICE' => 'Office',
          'SHOP' => 'Shop',
          'COMMERCIAL' => 'Commercial Building',
          'FACTORY' => 'Factory',
          'WAREHOUSE' => 'Warehouse',
          'RESTAURANT' => 'Restaurant',
          'CLINIC' => 'Clinic',
          'SCHOOL' => 'School',
          'OTHER' => 'Other',
        ),
      ),
      5 => 
      array (
        'name' => 'address',
        'label' => 'Address',
        'type' => 'textarea',
        'pii' => true,
      ),
      6 => 
      array (
        'name' => 'latitude',
        'label' => 'Latitude',
        'type' => 'decimal',
        'pii' => true,
      ),
      7 => 
      array (
        'name' => 'longitude',
        'label' => 'Longitude',
        'type' => 'decimal',
        'pii' => true,
      ),
      8 => 
      array (
        'name' => 'gps_accuracy_m',
        'label' => 'GPS Accuracy (m)',
        'type' => 'decimal',
      ),
      9 => 
      array (
        'name' => 'main_entrance_dir',
        'label' => 'Main Entrance Direction',
        'type' => 'text',
        'help' => 'N, NE, E, SE, S, SW, W, NW',
      ),
      10 => 
      array (
        'name' => 'orientation_deg',
        'label' => 'Facing / Orientation (°)',
        'type' => 'decimal',
        'help' => 'True-north heading of the front / main door',
      ),
      11 => 
      array (
        'name' => 'floor',
        'label' => 'Floor',
        'type' => 'text',
      ),
      12 => 
      array (
        'name' => 'length_val',
        'label' => 'Length',
        'type' => 'decimal',
      ),
      13 => 
      array (
        'name' => 'width_val',
        'label' => 'Width',
        'type' => 'decimal',
      ),
      14 => 
      array (
        'name' => 'size_unit',
        'label' => 'Unit',
        'type' => 'select',
        'options' => 
        array (
          'FEET' => 'Feet',
          'METER' => 'Meter',
          'SQFT' => 'Sq. Feet',
          'SQM' => 'Sq. Meter',
        ),
      ),
      15 => 
      array (
        'name' => 'personalization',
        'label' => 'Analysis Mode',
        'type' => 'select',
        'options' => 
        array (
          'BASIC' => 'Basic (property only)',
          'PERSONALIZED' => 'Personalized (+astro/numero)',
        ),
      ),
      16 => 
      array (
        'name' => 'overall_score',
        'label' => 'Overall Score',
        'type' => 'number',
      ),
      17 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'DRAFT' => 'Draft',
          'CALIBRATED' => 'Calibrated',
          'PHOTOS_ADDED' => 'Photos Added',
          'ANALYZED' => 'Analyzed',
          'REPORTED' => 'Reported',
        ),
      ),
      18 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_rooms' => 
  array (
    'table' => 'vastu_rooms',
    'title' => 'Vastu Rooms',
    'icon' => '🚪',
    'section' => 'Vastu Consultant',
    'singular' => 'Room',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'property_ref',
        'label' => 'Property Ref',
        'type' => 'text',
        'req' => true,
        'help' => 'vastu_properties.ref',
      ),
      1 => 
      array (
        'name' => 'room_type',
        'label' => 'Room Type',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'ENTRANCE' => 'Main Entrance',
          'LIVING' => 'Living Room',
          'MASTER_BEDROOM' => 'Master Bedroom',
          'BEDROOM' => 'Bedroom',
          'CHILDREN_BEDROOM' => 'Children\'s Bedroom',
          'KITCHEN' => 'Kitchen',
          'BATHROOM' => 'Bathroom',
          'TOILET' => 'Toilet',
          'STUDY' => 'Study / Office',
          'PRAYER' => 'Prayer Room',
          'DINING' => 'Dining',
          'BALCONY' => 'Balcony',
          'GARDEN' => 'Garden',
          'STAIRCASE' => 'Staircase',
          'STORAGE' => 'Storage',
          'OTHER' => 'Other',
        ),
      ),
      2 => 
      array (
        'name' => 'label',
        'label' => 'Label',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'direction',
        'label' => 'Detected Direction',
        'type' => 'text',
        'help' => 'N, NE, E, SE, S, SW, W, NW, CENTER',
      ),
      4 => 
      array (
        'name' => 'direction_confidence',
        'label' => 'Direction Confidence (0-1)',
        'type' => 'decimal',
      ),
      5 => 
      array (
        'name' => 'score',
        'label' => 'Room Score',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_property_photos' => 
  array (
    'table' => 'vastu_property_photos',
    'title' => 'Vastu Property Photos',
    'icon' => '📷',
    'section' => 'Vastu Consultant',
    'singular' => 'Photo',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Photo Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'property_ref',
        'label' => 'Property Ref',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'room_ref',
        'label' => 'Room Ref',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'room_type',
        'label' => 'Room Type',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'camera_heading_deg',
        'label' => 'Camera Heading (°)',
        'type' => 'decimal',
      ),
      6 => 
      array (
        'name' => 'confirmed_direction',
        'label' => 'Confirmed Direction',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'latitude',
        'label' => 'Latitude',
        'type' => 'decimal',
        'pii' => true,
      ),
      8 => 
      array (
        'name' => 'longitude',
        'label' => 'Longitude',
        'type' => 'decimal',
        'pii' => true,
      ),
      9 => 
      array (
        'name' => 'gps_accuracy_m',
        'label' => 'GPS Accuracy (m)',
        'type' => 'decimal',
      ),
      10 => 
      array (
        'name' => 'exif_json',
        'label' => 'EXIF (JSON)',
        'type' => 'textarea',
      ),
      11 => 
      array (
        'name' => 'analysis_status',
        'label' => 'Analysis Status',
        'type' => 'select',
        'options' => 
        array (
          'PENDING' => 'Pending',
          'ANALYZED' => 'Analyzed',
          'LOW_CONFIDENCE' => 'Low Confidence',
          'FAILED' => 'Failed',
        ),
      ),
      12 => 
      array (
        'name' => 'detected_json',
        'label' => 'Detected Objects (JSON)',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'taken_at',
        'label' => 'Taken At',
        'type' => 'text',
      ),
    ),
  ),
  'vastu_findings' => 
  array (
    'table' => 'vastu_findings',
    'title' => 'Vastu Findings',
    'icon' => '🔎',
    'section' => 'Vastu Consultant',
    'singular' => 'Finding',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'property_ref',
        'label' => 'Property Ref',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'room_type',
        'label' => 'Room / Area',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'direction',
        'label' => 'Direction',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'issue',
        'label' => 'Issue',
        'type' => 'textarea',
        'req' => true,
      ),
      4 => 
      array (
        'name' => 'severity',
        'label' => 'Severity',
        'type' => 'select',
        'options' => 
        array (
          'HIGH' => 'High Priority',
          'MEDIUM' => 'Medium',
          'LOW' => 'Low',
          'POSITIVE' => 'Positive',
        ),
      ),
      5 => 
      array (
        'name' => 'why',
        'label' => 'Why Flagged',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'recommendation',
        'label' => 'Recommendation',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'alternative',
        'label' => 'Alternative Remedy',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'source',
        'label' => 'Source',
        'type' => 'select',
        'options' => 
        array (
          'VASTU' => 'Vastu',
          'AI_VISION' => 'AI Visual',
          'ASTROLOGY' => 'Astrology',
          'NUMEROLOGY' => 'Numerology',
          'CONSULTANT' => 'Consultant',
        ),
      ),
      9 => 
      array (
        'name' => 'confidence',
        'label' => 'Confidence (0-1)',
        'type' => 'decimal',
      ),
      10 => 
      array (
        'name' => 'detection_state',
        'label' => 'Detection',
        'type' => 'select',
        'options' => 
        array (
          'DETECTED' => 'Detected',
          'INFERRED' => 'Inferred',
          'UNKNOWN' => 'Unknown',
        ),
      ),
    ),
  ),
  'vastu_color_recommendations' => 
  array (
    'table' => 'vastu_color_recommendations',
    'title' => 'Vastu Colour Recommendations',
    'icon' => '🎨',
    'section' => 'Vastu Consultant',
    'singular' => 'Colour Recommendation',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'property_ref',
        'label' => 'Property Ref',
        'type' => 'text',
      ),
      1 => 
      array (
        'name' => 'room_type',
        'label' => 'Room',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'direction',
        'label' => 'Direction',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'primary_hex',
        'label' => 'Primary',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'secondary_hex',
        'label' => 'Secondary',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'accent_hex',
        'label' => 'Accent',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'avoid_colors',
        'label' => 'Avoid',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      7 => 
      array (
        'name' => 'reason',
        'label' => 'Vastu Reason',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_furniture_recommendations' => 
  array (
    'table' => 'vastu_furniture_recommendations',
    'title' => 'Vastu Furniture Recommendations',
    'icon' => '🛋️',
    'section' => 'Vastu Consultant',
    'singular' => 'Furniture Recommendation',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'property_ref',
        'label' => 'Property Ref',
        'type' => 'text',
      ),
      1 => 
      array (
        'name' => 'room_type',
        'label' => 'Room',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'item',
        'label' => 'Item',
        'type' => 'text',
        'req' => true,
        'help' => 'Bed, Sofa, Desk, Wardrobe, TV, Dining…',
      ),
      3 => 
      array (
        'name' => 'placement_zone',
        'label' => 'Placement Zone',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'facing',
        'label' => 'Facing / Orientation',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'GREEN' => 'Recommended',
          'YELLOW' => 'Acceptable',
          'RED' => 'Avoid',
        ),
      ),
      6 => 
      array (
        'name' => 'style',
        'label' => 'Style',
        'type' => 'select',
        'options' => 
        array (
          'MODERN' => 'Modern',
          'MINIMAL' => 'Minimal',
          'LUXURY' => 'Luxury',
          'TRADITIONAL' => 'Traditional Indian',
          'CONTEMPORARY' => 'Contemporary',
          'SCANDINAVIAN' => 'Scandinavian',
          'CLASSIC' => 'Classic',
          'OFFICE' => 'Office Professional',
        ),
      ),
      7 => 
      array (
        'name' => 'reason',
        'label' => 'Reason',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_reports' => 
  array (
    'table' => 'vastu_reports',
    'title' => 'Vastu Reports',
    'icon' => '📄',
    'section' => 'Vastu Consultant',
    'singular' => 'Report',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Report Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'property_ref',
        'label' => 'Property Ref',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'client_name',
        'label' => 'Client Name',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'overall_score',
        'label' => 'Overall Score',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'high_count',
        'label' => 'High Priority',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'medium_count',
        'label' => 'Medium',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'positive_count',
        'label' => 'Positive',
        'type' => 'number',
      ),
      7 => 
      array (
        'name' => 'pdf_url',
        'label' => 'PDF URL',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'DRAFT' => 'Draft',
          'GENERATED' => 'Generated',
          'SHARED' => 'Shared',
        ),
      ),
      9 => 
      array (
        'name' => 'generated_at',
        'label' => 'Generated At',
        'type' => 'text',
      ),
    ),
  ),
  'vastu_knowledge_base' => 
  array (
    'table' => 'vastu_knowledge_base',
    'title' => 'Vastu Knowledge Base (Rules)',
    'icon' => '📚',
    'section' => 'Vastu',
    'singular' => 'Vastu Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'rule_id',
        'label' => 'Rule ID',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'tradition',
        'label' => 'Tradition / System',
        'type' => 'text',
        'help' => 'e.g. Classical, MahaVastu',
      ),
      2 => 
      array (
        'name' => 'room',
        'label' => 'Room / Area',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'direction',
        'label' => 'Direction',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'condition',
        'label' => 'Condition',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'recommendation',
        'label' => 'Recommendation',
        'type' => 'textarea',
        'req' => true,
      ),
      6 => 
      array (
        'name' => 'severity',
        'label' => 'Severity',
        'type' => 'select',
        'options' => 
        array (
          'HIGH' => 'High',
          'MEDIUM' => 'Medium',
          'LOW' => 'Low',
          'POSITIVE' => 'Positive',
        ),
      ),
      7 => 
      array (
        'name' => 'remedy',
        'label' => 'Remedy',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'remedy_type',
        'label' => 'Remedy Type',
        'type' => 'select',
        'options' => 
        array (
          'NON_STRUCTURAL' => 'Non-structural',
          'STRUCTURAL' => 'Structural',
        ),
      ),
      9 => 
      array (
        'name' => 'source_ref',
        'label' => 'Source / Reference',
        'type' => 'text',
      ),
      10 => 
      array (
        'name' => 'confidence',
        'label' => 'Confidence (0-1)',
        'type' => 'decimal',
      ),
      11 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_consultant_clients' => 
  array (
    'table' => 'vastu_consultant_clients',
    'title' => 'Vastu Consultant Clients',
    'icon' => '🧑‍💼',
    'section' => 'Vastu Consultant',
    'singular' => 'Client',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Client Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'consultant_user_id',
        'label' => 'Consultant User ID',
        'type' => 'number',
      ),
      2 => 
      array (
        'name' => 'name',
        'label' => 'Client Name',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'tel',
        'pii' => true,
      ),
      4 => 
      array (
        'name' => 'email',
        'label' => 'Email',
        'type' => 'email',
        'pii' => true,
      ),
      5 => 
      array (
        'name' => 'city',
        'label' => 'City',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'ACTIVE' => 'Active',
          'ARCHIVED' => 'Archived',
        ),
      ),
    ),
  ),
  'booking_leads' => 
  array (
    'table' => 'booking_leads',
    'title' => 'Booking Leads (Marketplace)',
    'icon' => '🎯',
    'section' => 'Pandit & Leads',
    'singular' => 'Lead',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Lead Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'client_name',
        'label' => 'Client',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'mobile',
        'label' => 'Mobile',
        'type' => 'tel',
      ),
      3 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'service',
        'label' => 'Service',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'mode',
        'label' => 'Mode',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'preferred_date',
        'label' => 'Preferred Date',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'city',
        'label' => 'City',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'pandit_id',
        'label' => 'Assigned Pandit ID',
        'type' => 'number',
      ),
      9 => 
      array (
        'name' => 'awarded_pandit_id',
        'label' => 'Awarded Pandit ID',
        'type' => 'number',
      ),
      10 => 
      array (
        'name' => 'offers_count',
        'label' => 'Offers',
        'type' => 'number',
      ),
      11 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'OPEN' => 'Open (Marketplace)',
          'ASSIGNED' => 'Assigned',
          'AWARDED' => 'Awarded',
          'CLOSED' => 'Closed',
          'CANCELLED' => 'Cancelled',
        ),
      ),
      12 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'lead_offers' => 
  array (
    'table' => 'lead_offers',
    'title' => 'Lead Offers',
    'icon' => '💬',
    'section' => 'Pandit & Leads',
    'singular' => 'Offer',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'ref',
        'label' => 'Offer Ref',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'lead_ref',
        'label' => 'Lead Ref',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'pandit_id',
        'label' => 'Pandit ID',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'pandit_name',
        'label' => 'Pandit',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'price',
        'label' => 'Offer Price',
        'type' => 'decimal',
      ),
      5 => 
      array (
        'name' => 'message',
        'label' => 'Message',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'SENT' => 'Sent',
          'ACCEPTED' => 'Accepted',
          'DECLINED' => 'Declined',
          'WITHDRAWN' => 'Withdrawn',
        ),
      ),
    ),
  ),
  'client_profiles' => 
  array (
    'table' => 'client_profiles',
    'title' => 'Client Profiles (Flexible)',
    'icon' => '🧾',
    'section' => 'Clients',
    'singular' => 'Client Profile',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'user_id',
        'label' => 'Client (User ID)',
        'type' => 'number',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'data',
        'label' => 'Profile Data (JSON)',
        'type' => 'textarea',
        'help' => 'Schema-less JSON document. Example keys: mobile_numbers[], partners[{name,dob}], business_names[], house_numbers[], vehicle_numbers[]. Edited by the client from their profile or grown automatically as services are used.',
      ),
      2 => 
      array (
        'name' => 'updated_by',
        'label' => 'Updated By',
        'type' => 'text',
      ),
    ),
  ),
  'service_submissions' => 
  array (
    'table' => 'service_submissions',
    'title' => 'Service Submissions (Log)',
    'icon' => '📥',
    'section' => 'Clients',
    'singular' => 'Submission',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'user_id',
        'label' => 'Client (User ID)',
        'type' => 'number',
      ),
      1 => 
      array (
        'name' => 'service_slug',
        'label' => 'Service Slug',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'service_name',
        'label' => 'Service',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'inputs',
        'label' => 'Inputs (JSON)',
        'type' => 'textarea',
      ),
      4 => 
      array (
        'name' => 'computed',
        'label' => 'Computed (JSON)',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'amount',
        'label' => 'Amount',
        'type' => 'decimal',
      ),
      6 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'text',
      ),
    ),
  ),
  'ref_days' => 
  array (
    'table' => 'ref_days',
    'title' => 'Days (Vaar)',
    'icon' => '📆',
    'section' => 'Core Masters',
    'menu_order' => 8,
    'singular' => 'Weekday',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'planet',
        'label' => 'Ruling Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      4 => 
      array (
        'name' => 'planet_dev',
        'label' => 'Planet (Dev)',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'color',
        'label' => 'Auspicious Colour',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      6 => 
      array (
        'name' => 'deity',
        'label' => 'Presiding Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_months' => 
  array (
    'table' => 'ref_months',
    'title' => 'Months (Masa)',
    'icon' => '🗓️',
    'section' => 'Core Masters',
    'menu_order' => 6,
    'singular' => 'Month',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'gregorian',
        'label' => 'Gregorian (approx)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'ritu',
        'label' => 'Season (Ritu)',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'ritu_dev',
        'label' => 'Season (Dev)',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_tithis' => 
  array (
    'table' => 'ref_tithis',
    'title' => 'Dates (Tithis)',
    'icon' => '🌗',
    'section' => 'Core Masters',
    'menu_order' => 7,
    'singular' => 'Tithi',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'paksha',
        'label' => 'Paksha',
        'type' => 'select',
        'options' => 
        array (
          'Shukla' => 'Shukla (Waxing)',
          'Krishna' => 'Krishna (Waning)',
        ),
      ),
      4 => 
      array (
        'name' => 'number',
        'label' => 'Number (1-15)',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'nature',
        'label' => 'Nature',
        'type' => 'text',
        'help' => 'Nanda / Bhadra / Jaya / Rikta / Purna',
      ),
      6 => 
      array (
        'name' => 'deity',
        'label' => 'Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_nakshatras' => 
  array (
    'table' => 'ref_nakshatras',
    'title' => 'Nakshatras',
    'icon' => '⭐',
    'section' => 'Core Masters',
    'menu_order' => 9,
    'singular' => 'Nakshatra',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'lord',
        'label' => 'Ruling Planet (Lord)',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      4 => 
      array (
        'name' => 'deity',
        'label' => 'Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      5 => 
      array (
        'name' => 'symbol',
        'label' => 'Symbol',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'rashi',
        'label' => 'Rashi (approx)',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_rashis',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'number',
        ),
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_rashis' => 
  array (
    'table' => 'ref_rashis',
    'title' => 'Zodiac (Rashi)',
    'icon' => '♈',
    'section' => 'Core Masters',
    'menu_order' => 2,
    'singular' => 'Rashi',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'english',
        'label' => 'English',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'lord',
        'label' => 'Ruling Planet (Lord)',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      5 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'text',
      ),
      6 =>
      array (
        'name' => 'symbol',
        'label' => 'Symbol',
        'type' => 'text',
      ),
      17 =>
      array (
        'name' => 'direction',
        'label' => 'Direction (Disha)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'ref_dishas',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
        'help' => 'Dropdown sourced live from the Directions & Corners (Disha / Kon) master.',
      ),
      8 =>
      array (
        'name' => 'guna',
        'label' => 'Nature (Guna)',
        'type' => 'select',
        'options' => array ( 'Sattva' => 'Sattva', 'Rajas' => 'Rajas', 'Tamas' => 'Tamas' ),
      ),
      9 =>
      array (
        'name' => 'co_significator',
        'label' => 'Co-significator',
        'type' => 'text',
      ),
      10 =>
      array (
        'name' => 'natural_house',
        'label' => 'House Association',
        'type' => 'text',
      ),
      11 =>
      array (
        'name' => 'key_traits',
        'label' => 'Key Characteristics',
        'type' => 'textarea',
        'list' => false,
      ),
      12 =>
      array (
        'name' => 'ritual_notes',
        'label' => 'Ritual / Impact Notes',
        'type' => 'textarea',
        'list' => false,
      ),
      7 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_houses' =>
  array (
    'table' => 'ref_houses',
    'title' => 'Houses (Bhavas)',
    'icon' => '🏠',
    'section' => 'Core Masters',
    'menu_order' => 3,
    'singular' => 'House',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'number',
        'label' => 'House No.',
        'type' => 'number',
        'req' => true,
        'uniq' => true,
      ),
      1 =>
      array (
        'name' => 'name',
        'label' => 'House',
        'type' => 'text',
        'req' => true,
      ),
      2 =>
      array (
        'name' => 'sanskrit_name',
        'label' => 'Sanskrit Name (Bhava)',
        'type' => 'text',
      ),
      3 =>
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      4 =>
      array (
        'name' => 'natural_rashi',
        'label' => 'Natural Rashi',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'ref_rashis',
          'value' => 'english',
          'label' => 'english',
          'order' => 'number',
        ),
      ),
      5 =>
      array (
        'name' => 'natural_lord',
        'label' => 'Ruling Planet',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      6 =>
      array (
        'name' => 'domain',
        'label' => 'Domain',
        'type' => 'text',
      ),
      7 =>
      array (
        'name' => 'key_traits',
        'label' => 'Key Traits',
        'type' => 'text',
      ),
      8 =>
      array (
        'name' => 'planetary_influence',
        'label' => 'Planetary Influence',
        'type' => 'text',
      ),
      9 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_yogas' =>
  array (
    'table' => 'ref_yogas',
    'title' => 'Yogas',
    'icon' => '🧘',
    'section' => 'Core Masters',
    'menu_order' => 10,
    'singular' => 'Yoga',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'nature',
        'label' => 'Nature',
        'type' => 'select',
        'options' => 
        array (
          'Auspicious' => 'Auspicious',
          'Inauspicious' => 'Inauspicious',
        ),
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_karanas' => 
  array (
    'table' => 'ref_karanas',
    'title' => 'Karans',
    'icon' => '🌓',
    'section' => 'Core Masters',
    'menu_order' => 11,
    'singular' => 'Karana',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'type',
        'label' => 'Type',
        'type' => 'select',
        'options' => 
        array (
          'Movable' => 'Movable (Chara)',
          'Fixed' => 'Fixed (Sthira)',
        ),
      ),
      4 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_dishas' => 
  array (
    'table' => 'ref_dishas',
    'title' => 'Directions (Disha)',
    'icon' => '🧭',
    'section' => 'Core Masters',
    'menu_order' => 12,
    'singular' => 'Direction',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'kind',
        'label' => 'Kind',
        'type' => 'select',
        'options' => 
        array (
          'Disha' => 'Disha (Cardinal)',
          'Kon' => 'Kon (Corner)',
        ),
      ),
      4 => 
      array (
        'name' => 'angle_deg',
        'label' => 'Angle (°)',
        'type' => 'number',
        'help' => '0=North, clockwise',
      ),
      5 => 
      array (
        'name' => 'lord',
        'label' => 'Ruling Deity',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'pandit_types' => 
  array (
    'table' => 'pandit_types',
    'title' => 'Pandit Types (for Pooja)',
    'icon' => '🧑‍🦳',
    'section' => 'Pandit Config',
    'singular' => 'Pandit Type',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Dev)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'specialization',
        'label' => 'Specialization',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'quotes' => 
  array (
    'table' => 'quotes',
    'title' => 'Quotes (Today\'s Special)',
    'icon' => '❝',
    'section' => 'Website',
    'singular' => 'Quote',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'quote',
        'label' => 'Quote (English)',
        'type' => 'textarea',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'quote_dev',
        'label' => 'Quote (Sanskrit / Dev)',
        'type' => 'textarea',
      ),
      2 => 
      array (
        'name' => 'author',
        'label' => 'Author / Source',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'author_dev',
        'label' => 'Author (Dev)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'is_featured',
        'label' => 'Featured',
        'type' => 'bool',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_colors' => 
  array (
    'table' => 'ref_colors',
    'title' => 'Colours',
    'icon' => '🎨',
    'section' => 'Core Masters',
    'menu_order' => 13,
    'singular' => 'Colour',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Colour',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Colour (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'hex',
        'label' => 'Hex',
        'type' => 'text',
        'help' => 'e.g. #DC2626',
      ),
      3 => 
      array (
        'name' => 'planet',
        'label' => 'Associated Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      4 => 
      array (
        'name' => 'element',
        'label' => 'Element',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_gemstones' => 
  array (
    'table' => 'ref_gemstones',
    'title' => 'Gemstones',
    'icon' => '💎',
    'section' => 'Core Masters',
    'menu_order' => 14,
    'singular' => 'Gemstone',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Gemstone',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Gemstone (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'planet',
        'label' => 'Ruling Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      3 => 
      array (
        'name' => 'color',
        'label' => 'Colour',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      4 => 
      array (
        'name' => 'metal',
        'label' => 'Metal',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'finger',
        'label' => 'Wearing Finger',
        'type' => 'text',
      ),
      6 => 
      array (
        'name' => 'benefits',
        'label' => 'Benefits',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'ref_rudraksha' => 
  array (
    'table' => 'ref_rudraksha',
    'title' => 'Rudraksha',
    'icon' => '📿',
    'section' => 'Core Masters',
    'menu_order' => 15,
    'singular' => 'Rudraksha',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'name',
        'label' => 'Rudraksha',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name_dev',
        'label' => 'Rudraksha (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'mukhi',
        'label' => 'Mukhi (Faces)',
        'type' => 'number',
      ),
      3 => 
      array (
        'name' => 'planet',
        'label' => 'Ruling Planet',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_planets',
          'value' => 'planet',
          'label' => 'planet_dev',
          'order' => 'number',
        ),
      ),
      4 => 
      array (
        'name' => 'deity',
        'label' => 'Presiding Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      5 => 
      array (
        'name' => 'benefits',
        'label' => 'Benefits',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'pandit_services' => 
  array (
    'table' => 'pandit_services',
    'title' => 'Pandit Service Offerings',
    'icon' => '🧑‍🦳💰',
    'section' => 'Services',
    'singular' => 'Offering',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'pandit_id',
        'label' => 'Pandit',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'users',
          'value' => 'id',
          'label' => 'name',
          'order' => 'name',
          'where' => 
          array (
            'role' => 'pandit',
          ),
        ),
        'help' => 'The pandit (user) offering this service.',
      ),
      1 => 
      array (
        'name' => 'service_id',
        'label' => 'Service',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'services',
          'value' => 'id',
          'label' => 'name',
          'order' => 'name',
        ),
        'help' => 'From the Services master.',
      ),
      2 => 
      array (
        'name' => 'price',
        'label' => 'Price Quote',
        'type' => 'decimal',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'video_fee',
        'label' => 'Video Fee (to client)',
        'type' => 'decimal',
        'help' => 'Per-consult charge for a video consultation.',
      ),
      4 => 
      array (
        'name' => 'audio_fee',
        'label' => 'Audio Fee (to client)',
        'type' => 'decimal',
        'help' => 'Per-consult charge for an audio consultation.',
      ),
      5 => 
      array (
        'name' => 'chat_fee',
        'label' => 'Chat Fee (to client)',
        'type' => 'decimal',
        'help' => 'Per-consult charge for a chat consultation.',
      ),
      6 => 
      array (
        'name' => 'price_type',
        'label' => 'Price Type',
        'type' => 'select',
        'options' => 
        array (
          'fixed' => 'Fixed',
          'per_hour' => 'Per Hour',
          'per_session' => 'Per Session',
          'starting_from' => 'Starting From',
          'on_request' => 'On Request',
        ),
      ),
      7 => 
      array (
        'name' => 'currency',
        'label' => 'Currency',
        'type' => 'text',
        'help' => 'e.g. INR',
      ),
      8 => 
      array (
        'name' => 'duration_min',
        'label' => 'Duration (min)',
        'type' => 'number',
      ),
      9 => 
      array (
        'name' => 'mode',
        'label' => 'Mode',
        'type' => 'select',
        'options' => 
        array (
          'online' => 'Online',
          'offline' => 'In-Person',
          'both' => 'Both',
        ),
      ),
      10 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
      11 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_objects' => 
  array (
    'table' => 'vastu_objects',
    'title' => 'Vastu Objects',
    'icon' => '🛋️',
    'section' => 'Vastu',
    'singular' => 'Object',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. bed, stove, sink, mirror',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name (EN)',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_hi',
        'label' => 'Name (HI)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'name_gu',
        'label' => 'Name (GU)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'name_mr',
        'label' => 'Name (MR)',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'room_slug',
        'label' => 'Room',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'vastu_rooms',
          'value' => 'slug',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'Room this object belongs to (optional).',
      ),
      6 => 
      array (
        'name' => 'icon',
        'label' => 'Icon',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_conditions' => 
  array (
    'table' => 'vastu_conditions',
    'title' => 'Vastu Conditions',
    'icon' => '🔀',
    'section' => 'Vastu',
    'singular' => 'Condition',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. position, direction, adjacency, color',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name (EN)',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_hi',
        'label' => 'Name (HI)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'name_gu',
        'label' => 'Name (GU)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'name_mr',
        'label' => 'Name (MR)',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_object_rules' => 
  array (
    'table' => 'vastu_object_rules',
    'title' => 'Vastu Rules (Room · Object · Direction)',
    'icon' => '📐',
    'section' => 'Vastu',
    'singular' => 'Vastu Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'rule_code',
        'label' => 'Rule Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. BED-SE-001',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Rule Name',
        'type' => 'text',
        'help' => 'e.g. Bedroom Bed Placement — South-East',
      ),
      2 => 
      array (
        'name' => 'room_slug',
        'label' => 'Room',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'vastu_rooms',
          'value' => 'slug',
          'label' => 'name',
          'order' => 'sort_order',
        ),
      ),
      3 => 
      array (
        'name' => 'object_code',
        'label' => 'Object',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'vastu_objects',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
      ),
      4 => 
      array (
        'name' => 'direction_code',
        'label' => 'Direction',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
        'help' => 'From the Directions/Zones master.',
      ),
      5 => 
      array (
        'name' => 'condition_code',
        'label' => 'Condition',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'vastu_conditions',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
      ),
      6 => 
      array (
        'name' => 'match_logic',
        'label' => 'Match Logic',
        'type' => 'select',
        'options' => 
        array (
          'AND' => 'AND (all)',
          'OR' => 'OR (any)',
        ),
      ),
      7 => 
      array (
        'name' => 'rule_type',
        'label' => 'Rule Type',
        'type' => 'select',
        'options' => 
        array (
          'positive' => 'Positive',
          'negative' => 'Negative',
          'warning' => 'Warning',
          'recommendation' => 'Recommendation',
          'neutral' => 'Neutral',
        ),
      ),
      8 => 
      array (
        'name' => 'priority',
        'label' => 'Priority',
        'type' => 'select',
        'options' => 
        array (
          'critical' => 'Critical',
          'high' => 'High',
          'medium' => 'Medium',
          'low' => 'Low',
          'positive' => 'Positive',
        ),
      ),
      9 => 
      array (
        'name' => 'score_impact',
        'label' => 'Score Impact',
        'type' => 'number',
        'help' => 'e.g. -15 or +10',
      ),
      10 => 
      array (
        'name' => 'finding',
        'label' => 'Finding (EN)',
        'type' => 'textarea',
      ),
      11 => 
      array (
        'name' => 'finding_hi',
        'label' => 'Finding (HI)',
        'type' => 'textarea',
      ),
      12 => 
      array (
        'name' => 'finding_gu',
        'label' => 'Finding (GU)',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'finding_mr',
        'label' => 'Finding (MR)',
        'type' => 'textarea',
      ),
      14 => 
      array (
        'name' => 'explanation',
        'label' => 'Explanation (EN)',
        'type' => 'textarea',
      ),
      15 => 
      array (
        'name' => 'explanation_hi',
        'label' => 'Explanation (HI)',
        'type' => 'textarea',
      ),
      16 => 
      array (
        'name' => 'explanation_gu',
        'label' => 'Explanation (GU)',
        'type' => 'textarea',
      ),
      17 => 
      array (
        'name' => 'explanation_mr',
        'label' => 'Explanation (MR)',
        'type' => 'textarea',
      ),
      18 => 
      array (
        'name' => 'recommendation',
        'label' => 'Recommendation (EN)',
        'type' => 'textarea',
      ),
      19 => 
      array (
        'name' => 'recommendation_hi',
        'label' => 'Recommendation (HI)',
        'type' => 'textarea',
      ),
      20 => 
      array (
        'name' => 'recommendation_gu',
        'label' => 'Recommendation (GU)',
        'type' => 'textarea',
      ),
      21 => 
      array (
        'name' => 'recommendation_mr',
        'label' => 'Recommendation (MR)',
        'type' => 'textarea',
      ),
      22 => 
      array (
        'name' => 'alternative',
        'label' => 'Alternative (EN)',
        'type' => 'textarea',
      ),
      23 => 
      array (
        'name' => 'alternative_hi',
        'label' => 'Alternative (HI)',
        'type' => 'textarea',
      ),
      24 => 
      array (
        'name' => 'alternative_gu',
        'label' => 'Alternative (GU)',
        'type' => 'textarea',
      ),
      25 => 
      array (
        'name' => 'alternative_mr',
        'label' => 'Alternative (MR)',
        'type' => 'textarea',
      ),
      26 => 
      array (
        'name' => 'remedy',
        'label' => 'Remedy (EN)',
        'type' => 'textarea',
      ),
      27 => 
      array (
        'name' => 'remedy_hi',
        'label' => 'Remedy (HI)',
        'type' => 'textarea',
      ),
      28 => 
      array (
        'name' => 'remedy_gu',
        'label' => 'Remedy (GU)',
        'type' => 'textarea',
      ),
      29 => 
      array (
        'name' => 'remedy_mr',
        'label' => 'Remedy (MR)',
        'type' => 'textarea',
      ),
      30 => 
      array (
        'name' => 'color_note',
        'label' => 'Colour Recommendation',
        'type' => 'text',
      ),
      31 => 
      array (
        'name' => 'furniture_note',
        'label' => 'Furniture Recommendation',
        'type' => 'text',
      ),
      32 => 
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
      ),
      33 => 
      array (
        'name' => 'video_url',
        'label' => 'Video URL',
        'type' => 'text',
      ),
      34 => 
      array (
        'name' => 'version',
        'label' => 'Version',
        'type' => 'number',
        'help' => 'Rule version stamped onto reports.',
      ),
      35 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'DRAFT' => 'Draft',
          'ACTIVE' => 'Active',
          'INACTIVE' => 'Inactive',
          'ARCHIVED' => 'Archived',
        ),
        'help' => 'Only ACTIVE rules are used by the production engine.',
      ),
      36 =>
      array (
        'name' => 'property_type',
        'label' => 'Property Type',
        'type' => 'select',
        'options' =>
        array (
          'all' => 'All property types',
          'home' => 'Home / Residential',
          'office' => 'Office / Commercial',
          'factory' => 'Factory / Industrial',
        ),
        'help' => 'Which property type this rule applies to. Use "all" for shared rules (toilets, entrance, staircase).',
      ),
    ),
  ),
  'vastu_padas' =>
  array (
    'table' => 'vastu_padas',
    'title' => 'Vastu Purusha Mandala (81 Padas)',
    'icon' => '🕉️',
    'section' => 'Vastu',
    'menu_order' => 7,
    'singular' => 'Pada',
    'cols' =>
    array (
      0 =>
      array (
        'name' => 'pada_no',
        'label' => 'Pada No.',
        'type' => 'number',
        'req' => true,
        'uniq' => true,
        'help' => '1–81, top-left (NE) to bottom-right (SW).',
      ),
      1 =>
      array (
        'name' => 'grid_row',
        'label' => 'Grid Row',
        'type' => 'number',
        'req' => true,
        'help' => '1–9 (1 = North band).',
      ),
      2 =>
      array (
        'name' => 'grid_col',
        'label' => 'Grid Col',
        'type' => 'number',
        'req' => true,
        'help' => '1–9 (1 = East band).',
      ),
      3 =>
      array (
        'name' => 'zone',
        'label' => 'Zone',
        'type' => 'text',
        'help' => 'Fine 32-directional zone name, e.g. North-East, Brahmasthan-Center.',
      ),
      4 =>
      array (
        'name' => 'direction_code',
        'label' => 'Direction (Disha)',
        'type' => 'select',
        'options_from' =>
        array (
          'table' => 'ref_dishas',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'Nearest cardinal/corner from the Directions (Disha) master. C = Centre / Brahmasthan.',
      ),
      5 =>
      array (
        'name' => 'deity',
        'label' => 'Presiding Deity',
        'type' => 'text',
        'help' => 'e.g. Ishana, Agni, Brahma, Kubera, Yama.',
      ),
      6 =>
      array (
        'name' => 'energy',
        'label' => 'Energy / Governance',
        'type' => 'text',
        'help' => 'e.g. Spirituality, Wealth, Fire & transformation.',
      ),
      7 =>
      array (
        'name' => 'auspiciousness',
        'label' => 'Auspiciousness',
        'type' => 'text',
        'help' => 'Verbatim verdict, e.g. Highly auspicious, Auspicious for fire uses.',
      ),
      8 =>
      array (
        'name' => 'nature',
        'label' => 'Nature (normalized)',
        'type' => 'select',
        'options' =>
        array (
          'sacred' => 'Sacred (keep open)',
          'highly_positive' => 'Highly Positive',
          'positive' => 'Positive',
          'neutral' => 'Neutral',
          'mixed' => 'Mixed',
          'negative' => 'Negative',
        ),
        'help' => 'Machine-usable class the analysis engine scores on.',
      ),
      9 =>
      array (
        'name' => 'recommended_uses',
        'label' => 'Recommended Uses',
        'type' => 'textarea',
      ),
      10 =>
      array (
        'name' => 'avoidances',
        'label' => 'Avoidances',
        'type' => 'textarea',
      ),
      11 =>
      array (
        'name' => 'remedies',
        'label' => 'Remedies',
        'type' => 'textarea',
      ),
      12 =>
      array (
        'name' => 'is_brahmasthan',
        'label' => 'Brahmasthan?',
        'type' => 'select',
        'options' =>
        array (
          '0' => 'No',
          '1' => 'Yes (central 9 — keep open)',
        ),
        'help' => 'Padas 37–45 form the sacred central core.',
      ),
      13 =>
      array (
        'name' => 'severity',
        'label' => 'Violation Severity',
        'type' => 'select',
        'options' =>
        array (
          'none' => 'None',
          'low' => 'Low',
          'medium' => 'Medium',
          'high' => 'High',
          'critical' => 'Critical',
        ),
        'help' => 'How serious a wrong placement in this pada is (drives engine flags).',
      ),
      14 =>
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'vastu_suggestions' =>
  array (
    'table' => 'vastu_suggestions',
    'title' => 'Vastu Suggestions Library',
    'icon' => '💡',
    'section' => 'Vastu',
    'singular' => 'Suggestion',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title (EN)',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'title_hi',
        'label' => 'Title (HI)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'title_gu',
        'label' => 'Title (GU)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'title_mr',
        'label' => 'Title (MR)',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'short_desc',
        'label' => 'Short Description',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'detail',
        'label' => 'Detailed Description',
        'type' => 'html',
      ),
      7 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'furniture' => 'Furniture',
          'color' => 'Colour',
          'lighting' => 'Lighting',
          'plant' => 'Plant',
          'remedy' => 'Remedy',
          'space' => 'Space',
          'general' => 'General',
        ),
      ),
      8 => 
      array (
        'name' => 'priority',
        'label' => 'Priority',
        'type' => 'select',
        'options' => 
        array (
          'critical' => 'Critical',
          'high' => 'High',
          'medium' => 'Medium',
          'low' => 'Low',
          'positive' => 'Positive',
        ),
      ),
      9 => 
      array (
        'name' => 'room_slug',
        'label' => 'Room',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'vastu_rooms',
          'value' => 'slug',
          'label' => 'name',
          'order' => 'sort_order',
        ),
      ),
      10 => 
      array (
        'name' => 'direction_code',
        'label' => 'Direction',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'vastu_zones',
          'value' => 'code',
          'label' => 'label',
          'order' => 'sort_order',
        ),
      ),
      11 => 
      array (
        'name' => 'object_code',
        'label' => 'Object',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'vastu_objects',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
      ),
      12 => 
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
      ),
      13 => 
      array (
        'name' => 'video_url',
        'label' => 'Video URL',
        'type' => 'text',
      ),
    ),
  ),
  'vastu_score_rules' => 
  array (
    'table' => 'vastu_score_rules',
    'title' => 'Vastu Score Rules',
    'icon' => '💯',
    'section' => 'Vastu',
    'singular' => 'Score Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'overall' => 'Overall',
          'entrance' => 'Entrance',
          'direction' => 'Direction',
          'room' => 'Room Placement',
          'furniture' => 'Furniture',
          'colors' => 'Colours',
          'objects' => 'Objects',
          'lighting' => 'Lighting',
          'remedies' => 'Remedies',
        ),
      ),
      2 => 
      array (
        'name' => 'condition_key',
        'label' => 'Condition',
        'type' => 'text',
        'help' => 'e.g. bed_recommended_zone, bed_high_priority_zone',
      ),
      3 => 
      array (
        'name' => 'score_impact',
        'label' => 'Score Impact',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'max_score',
        'label' => 'Max Score',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'min_score',
        'label' => 'Min Score',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_report_templates' => 
  array (
    'table' => 'vastu_report_templates',
    'title' => 'Vastu Report Templates',
    'icon' => '📄',
    'section' => 'Vastu',
    'singular' => 'Report Template',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Template Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'service_slug',
        'label' => 'Service Slug',
        'type' => 'text',
        'help' => 'Maps this template to a Vastu service (Booking Catalogue slug). One per service. Leave blank + set Default for the fallback.',
      ),
      3 => 
      array (
        'name' => 'title',
        'label' => 'Report Title',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'body_html',
        'label' => 'Report Body (EN)',
        'type' => 'html',
        'help' => 'Placeholders: {{name}} {{property_type}} {{room}} {{score}} {{findings}} (findings table) {{summary}}; any input by id {{input.concern}}.',
      ),
      5 => 
      array (
        'name' => 'body_hi',
        'label' => 'Report Body (HI)',
        'type' => 'html',
      ),
      6 => 
      array (
        'name' => 'body_gu',
        'label' => 'Report Body (GU)',
        'type' => 'html',
      ),
      7 => 
      array (
        'name' => 'body_mr',
        'label' => 'Report Body (MR)',
        'type' => 'html',
      ),
      8 => 
      array (
        'name' => 'prediction_html',
        'label' => 'Prediction / Remedies (EN)',
        'type' => 'html',
      ),
      9 => 
      array (
        'name' => 'prediction_hi',
        'label' => 'Prediction (HI)',
        'type' => 'html',
      ),
      10 => 
      array (
        'name' => 'prediction_gu',
        'label' => 'Prediction (GU)',
        'type' => 'html',
      ),
      11 => 
      array (
        'name' => 'prediction_mr',
        'label' => 'Prediction (MR)',
        'type' => 'html',
      ),
      12 => 
      array (
        'name' => 'is_default',
        'label' => 'Default Template',
        'type' => 'bool',
      ),
      13 => 
      array (
        'name' => 'logo_url',
        'label' => 'Logo URL',
        'type' => 'text',
      ),
      14 => 
      array (
        'name' => 'header_html',
        'label' => 'Header',
        'type' => 'html',
      ),
      15 => 
      array (
        'name' => 'footer_html',
        'label' => 'Footer',
        'type' => 'html',
      ),
      16 => 
      array (
        'name' => 'disclaimer',
        'label' => 'Disclaimer',
        'type' => 'textarea',
      ),
      17 => 
      array (
        'name' => 'section_order',
        'label' => 'Section Order (CSV)',
        'type' => 'text',
        'help' => 'e.g. property,scan,photo,detection,direction,findings,suggestions,colors,furniture,remedies,score,summary',
      ),
      18 => 
      array (
        'name' => 'cover_image',
        'label' => 'Cover Image URL',
        'type' => 'text',
      ),
      19 => 
      array (
        'name' => 'company_info',
        'label' => 'Company Info',
        'type' => 'textarea',
      ),
    ),
  ),
  'vastu_ai_config' => 
  array (
    'table' => 'vastu_ai_config',
    'title' => 'Vastu AI Configuration',
    'icon' => '🤖',
    'section' => 'Vastu',
    'singular' => 'AI Config',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'config_key',
        'label' => 'Key',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. default',
      ),
      1 => 
      array (
        'name' => 'provider',
        'label' => 'Provider',
        'type' => 'select',
        'options' => 
        array (
          'stub' => 'Stub / Manual JSON',
          'openai' => 'OpenAI Vision',
          'google' => 'Google Vision',
          'azure' => 'Azure Vision',
        ),
        'help' => 'API keys stay in .env, never here.',
      ),
      2 => 
      array (
        'name' => 'model',
        'label' => 'Model',
        'type' => 'text',
        'help' => 'e.g. gpt-4o',
      ),
      3 => 
      array (
        'name' => 'api_endpoint',
        'label' => 'API Endpoint',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'confidence_threshold',
        'label' => 'Object Confidence Threshold',
        'type' => 'decimal',
        'help' => '0-1',
      ),
      5 => 
      array (
        'name' => 'direction_threshold',
        'label' => 'Direction Confidence Threshold',
        'type' => 'decimal',
        'help' => '0-1; below this, ask the user to confirm.',
      ),
      6 => 
      array (
        'name' => 'detection_prompt',
        'label' => 'Detection Prompt',
        'type' => 'textarea',
        'help' => 'System prompt guiding the vision model to return structured observations only.',
      ),
      7 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'num_combo2' => 
  array (
    'table' => 'num_combo2',
    'title' => '2-Number Yogas',
    'icon' => '🔺',
    'section' => 'Numerology',
    'singular' => '2-Number Yoga',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'yoga_name',
        'label' => 'Yoga Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'yoga_name_dev',
        'label' => 'Yoga Name (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'yoga_type',
        'label' => 'Yoga Type',
        'type' => 'select',
        'options' => 
        array (
          'benefic' => 'Benefic',
          'malefic' => 'Malefic',
          'neutral' => 'Neutral',
        ),
      ),
      3 => 
      array (
        'name' => 'n1',
        'label' => 'Number 1',
        'type' => 'number',
        'req' => true,
      ),
      4 => 
      array (
        'name' => 'n2',
        'label' => 'Number 2',
        'type' => 'number',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'general_prediction',
        'label' => 'General Prediction',
        'type' => 'textarea',
      ),
      6 => 
      array (
        'name' => 'career_prediction',
        'label' => 'Career Prediction',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'finance_prediction',
        'label' => 'Finance Prediction',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'health_prediction',
        'label' => 'Health Prediction',
        'type' => 'textarea',
      ),
      9 => 
      array (
        'name' => 'relation_prediction',
        'label' => 'Relation Prediction',
        'type' => 'textarea',
      ),
      10 => 
      array (
        'name' => 'lucky_colors',
        'label' => 'Lucky Colours',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      11 => 
      array (
        'name' => 'lucky_gemstone',
        'label' => 'Lucky Gemstone',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_gemstones',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      12 => 
      array (
        'name' => 'remedies',
        'label' => 'Remedies',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_combo3' => 
  array (
    'table' => 'num_combo3',
    'title' => '3-Number Planes / Yogas',
    'icon' => '🔺',
    'section' => 'Numerology',
    'singular' => '3-Number Yoga',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'yoga_name',
        'label' => 'Yoga / Plane Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'yoga_name_dev',
        'label' => 'Yoga Name (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'plane_name',
        'label' => 'Plane',
        'type' => 'text',
        'help' => 'e.g. Mental / Emotional / Practical plane',
      ),
      3 => 
      array (
        'name' => 'yoga_type',
        'label' => 'Yoga Type',
        'type' => 'select',
        'options' => 
        array (
          'benefic' => 'Benefic',
          'malefic' => 'Malefic',
          'neutral' => 'Neutral',
        ),
      ),
      4 => 
      array (
        'name' => 'n1',
        'label' => 'Number 1',
        'type' => 'number',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'n2',
        'label' => 'Number 2',
        'type' => 'number',
        'req' => true,
      ),
      6 => 
      array (
        'name' => 'n3',
        'label' => 'Number 3',
        'type' => 'number',
        'req' => true,
      ),
      7 => 
      array (
        'name' => 'general_prediction',
        'label' => 'General Prediction',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'career_prediction',
        'label' => 'Career Prediction',
        'type' => 'textarea',
      ),
      9 => 
      array (
        'name' => 'finance_prediction',
        'label' => 'Finance Prediction',
        'type' => 'textarea',
      ),
      10 => 
      array (
        'name' => 'health_prediction',
        'label' => 'Health Prediction',
        'type' => 'textarea',
      ),
      11 => 
      array (
        'name' => 'relation_prediction',
        'label' => 'Relation Prediction',
        'type' => 'textarea',
      ),
      12 => 
      array (
        'name' => 'lucky_colors',
        'label' => 'Lucky Colours',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      13 => 
      array (
        'name' => 'lucky_gemstone',
        'label' => 'Lucky Gemstone',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_gemstones',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      14 => 
      array (
        'name' => 'remedies',
        'label' => 'Remedies',
        'type' => 'textarea',
      ),
      15 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_combo4' => 
  array (
    'table' => 'num_combo4',
    'title' => '4-Number Grand Yogas',
    'icon' => '🌟',
    'section' => 'Numerology',
    'singular' => '4-Number Yoga',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'yoga_name',
        'label' => 'Grand Yoga Name',
        'type' => 'text',
        'req' => true,
      ),
      1 => 
      array (
        'name' => 'yoga_name_dev',
        'label' => 'Yoga Name (Dev)',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'yoga_type',
        'label' => 'Yoga Type',
        'type' => 'select',
        'options' => 
        array (
          'benefic' => 'Benefic',
          'malefic' => 'Malefic',
          'neutral' => 'Neutral',
        ),
      ),
      3 => 
      array (
        'name' => 'n1',
        'label' => 'Number 1',
        'type' => 'number',
        'req' => true,
      ),
      4 => 
      array (
        'name' => 'n2',
        'label' => 'Number 2',
        'type' => 'number',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'n3',
        'label' => 'Number 3',
        'type' => 'number',
        'req' => true,
      ),
      6 => 
      array (
        'name' => 'n4',
        'label' => 'Number 4',
        'type' => 'number',
        'req' => true,
      ),
      7 => 
      array (
        'name' => 'general_prediction',
        'label' => 'General Prediction',
        'type' => 'textarea',
      ),
      8 => 
      array (
        'name' => 'career_prediction',
        'label' => 'Career Prediction',
        'type' => 'textarea',
      ),
      9 => 
      array (
        'name' => 'finance_prediction',
        'label' => 'Finance Prediction',
        'type' => 'textarea',
      ),
      10 => 
      array (
        'name' => 'health_prediction',
        'label' => 'Health Prediction',
        'type' => 'textarea',
      ),
      11 => 
      array (
        'name' => 'relation_prediction',
        'label' => 'Relation Prediction',
        'type' => 'textarea',
      ),
      12 => 
      array (
        'name' => 'lucky_colors',
        'label' => 'Lucky Colours',
        'type' => 'multiselect',
        'options_from' => 
        array (
          'table' => 'ref_colors',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      13 => 
      array (
        'name' => 'lucky_gemstone',
        'label' => 'Lucky Gemstone',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'ref_gemstones',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      14 => 
      array (
        'name' => 'remedies',
        'label' => 'Remedies',
        'type' => 'textarea',
      ),
      15 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_calculations' => 
  array (
    'table' => 'num_calculations',
    'title' => 'Numerology Calculations',
    'icon' => '🧮',
    'section' => 'Numerology',
    'singular' => 'Calculation',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. mulank, bhagyank, name_number, personal_year',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name (EN)',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_hi',
        'label' => 'Name (HI)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'name_gu',
        'label' => 'Name (GU)',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'name_mr',
        'label' => 'Name (MR)',
        'type' => 'text',
      ),
      5 => 
      array (
        'name' => 'formula',
        'label' => 'Formula',
        'type' => 'text',
        'help' => 'Reference only — the engine computes this server-side.',
      ),
      6 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'num_rules' => 
  array (
    'table' => 'num_rules',
    'title' => 'Numerology Rules',
    'icon' => '📏',
    'section' => 'Numerology',
    'singular' => 'Numerology Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'rule_code',
        'label' => 'Rule Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. LP7-PY9-001',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Rule Name',
        'type' => 'text',
      ),
      2 => 
      array (
        'name' => 'calc_key',
        'label' => 'Calculation',
        'type' => 'select',
        'req' => true,
        'options_from' => 
        array (
          'table' => 'num_calculations',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
      ),
      3 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'number',
        'req' => true,
        'help' => 'The value of the calculation this rule matches (e.g. 7).',
      ),
      4 => 
      array (
        'name' => 'calc2_key',
        'label' => 'AND Calculation (optional)',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'num_calculations',
          'value' => 'code',
          'label' => 'name',
          'order' => 'sort_order',
        ),
        'help' => 'For compound rules, e.g. Life Path AND Personal Year.',
      ),
      5 => 
      array (
        'name' => 'number2',
        'label' => 'AND Number (optional)',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'match_logic',
        'label' => 'Match Logic',
        'type' => 'select',
        'options' => 
        array (
          'AND' => 'AND (both)',
          'OR' => 'OR (either)',
        ),
      ),
      7 => 
      array (
        'name' => 'rule_type',
        'label' => 'Rule Type',
        'type' => 'select',
        'options' => 
        array (
          'positive' => 'Positive',
          'negative' => 'Negative',
          'warning' => 'Warning',
          'neutral' => 'Neutral',
        ),
      ),
      8 => 
      array (
        'name' => 'priority',
        'label' => 'Priority',
        'type' => 'select',
        'options' => 
        array (
          'critical' => 'Critical',
          'high' => 'High',
          'medium' => 'Medium',
          'low' => 'Low',
          'positive' => 'Positive',
        ),
      ),
      9 => 
      array (
        'name' => 'score_impact',
        'label' => 'Score Impact',
        'type' => 'number',
      ),
      10 => 
      array (
        'name' => 'finding',
        'label' => 'Finding (EN)',
        'type' => 'textarea',
      ),
      11 => 
      array (
        'name' => 'finding_hi',
        'label' => 'Finding (HI)',
        'type' => 'textarea',
      ),
      12 => 
      array (
        'name' => 'finding_gu',
        'label' => 'Finding (GU)',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'finding_mr',
        'label' => 'Finding (MR)',
        'type' => 'textarea',
      ),
      14 => 
      array (
        'name' => 'explanation',
        'label' => 'Interpretation (EN)',
        'type' => 'textarea',
      ),
      15 => 
      array (
        'name' => 'explanation_hi',
        'label' => 'Interpretation (HI)',
        'type' => 'textarea',
      ),
      16 => 
      array (
        'name' => 'explanation_gu',
        'label' => 'Interpretation (GU)',
        'type' => 'textarea',
      ),
      17 => 
      array (
        'name' => 'explanation_mr',
        'label' => 'Interpretation (MR)',
        'type' => 'textarea',
      ),
      18 => 
      array (
        'name' => 'recommendation',
        'label' => 'Suggestion (EN)',
        'type' => 'textarea',
      ),
      19 => 
      array (
        'name' => 'recommendation_hi',
        'label' => 'Suggestion (HI)',
        'type' => 'textarea',
      ),
      20 => 
      array (
        'name' => 'recommendation_gu',
        'label' => 'Suggestion (GU)',
        'type' => 'textarea',
      ),
      21 => 
      array (
        'name' => 'recommendation_mr',
        'label' => 'Suggestion (MR)',
        'type' => 'textarea',
      ),
      22 => 
      array (
        'name' => 'alternative',
        'label' => 'Alternative (EN)',
        'type' => 'textarea',
      ),
      23 => 
      array (
        'name' => 'alternative_hi',
        'label' => 'Alternative (HI)',
        'type' => 'textarea',
      ),
      24 => 
      array (
        'name' => 'alternative_gu',
        'label' => 'Alternative (GU)',
        'type' => 'textarea',
      ),
      25 => 
      array (
        'name' => 'alternative_mr',
        'label' => 'Alternative (MR)',
        'type' => 'textarea',
      ),
      26 => 
      array (
        'name' => 'remedy',
        'label' => 'Remedy (EN)',
        'type' => 'textarea',
      ),
      27 => 
      array (
        'name' => 'remedy_hi',
        'label' => 'Remedy (HI)',
        'type' => 'textarea',
      ),
      28 => 
      array (
        'name' => 'remedy_gu',
        'label' => 'Remedy (GU)',
        'type' => 'textarea',
      ),
      29 => 
      array (
        'name' => 'remedy_mr',
        'label' => 'Remedy (MR)',
        'type' => 'textarea',
      ),
      30 => 
      array (
        'name' => 'color_note',
        'label' => 'Colour Recommendation',
        'type' => 'text',
      ),
      31 => 
      array (
        'name' => 'gemstone_note',
        'label' => 'Gemstone Recommendation',
        'type' => 'text',
      ),
      32 => 
      array (
        'name' => 'mantra_note',
        'label' => 'Mantra Recommendation',
        'type' => 'text',
      ),
      33 => 
      array (
        'name' => 'image_url',
        'label' => 'Image URL',
        'type' => 'text',
      ),
      34 => 
      array (
        'name' => 'video_url',
        'label' => 'Video URL',
        'type' => 'text',
      ),
      35 => 
      array (
        'name' => 'version',
        'label' => 'Version',
        'type' => 'number',
      ),
      36 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'DRAFT' => 'Draft',
          'ACTIVE' => 'Active',
          'INACTIVE' => 'Inactive',
          'ARCHIVED' => 'Archived',
        ),
        'help' => 'Only ACTIVE rules are used by the production engine.',
      ),
    ),
  ),
  'num_score_rules' => 
  array (
    'table' => 'num_score_rules',
    'title' => 'Numerology Score Rules',
    'icon' => '💯',
    'section' => 'Numerology',
    'singular' => 'Score Rule',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'overall' => 'Overall',
          'life_path' => 'Life Path',
          'name' => 'Name',
          'personal_year' => 'Personal Year',
          'compatibility' => 'Compatibility',
          'loshu' => 'Lo Shu',
        ),
      ),
      2 => 
      array (
        'name' => 'condition_key',
        'label' => 'Condition',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'score_impact',
        'label' => 'Score Impact',
        'type' => 'number',
      ),
      4 => 
      array (
        'name' => 'max_score',
        'label' => 'Max Score',
        'type' => 'number',
      ),
      5 => 
      array (
        'name' => 'min_score',
        'label' => 'Min Score',
        'type' => 'number',
      ),
      6 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
    ),
  ),
  'num_report_templates' => 
  array (
    'table' => 'num_report_templates',
    'title' => 'Numerology Report Templates',
    'icon' => '📄',
    'section' => 'Numerology',
    'singular' => 'Report Template',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Template Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'service_slug',
        'label' => 'Service Slug',
        'type' => 'text',
        'help' => 'Maps this template to a numerology service (Booking Catalogue slug). One template per service. Leave blank + set Default for the fallback template.',
      ),
      3 => 
      array (
        'name' => 'title',
        'label' => 'Report Title',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'body_html',
        'label' => 'Report Body (EN)',
        'type' => 'html',
        'help' => 'Placeholders: {{mulank}} {{bhagyank}} {{karmank}} {{kua}} {{name_number}} {{personal_year}} {{personal_month}} {{name}} {{dob}} {{present}} {{missing}} {{findings}} and any input by id e.g. {{input.mobile}}.',
      ),
      5 => 
      array (
        'name' => 'body_hi',
        'label' => 'Report Body (HI)',
        'type' => 'html',
      ),
      6 => 
      array (
        'name' => 'body_gu',
        'label' => 'Report Body (GU)',
        'type' => 'html',
      ),
      7 => 
      array (
        'name' => 'body_mr',
        'label' => 'Report Body (MR)',
        'type' => 'html',
      ),
      8 => 
      array (
        'name' => 'prediction_html',
        'label' => 'Prediction (EN)',
        'type' => 'html',
        'help' => 'Same placeholders as the body. Shown as the prediction block for this service.',
      ),
      9 => 
      array (
        'name' => 'prediction_hi',
        'label' => 'Prediction (HI)',
        'type' => 'html',
      ),
      10 => 
      array (
        'name' => 'prediction_gu',
        'label' => 'Prediction (GU)',
        'type' => 'html',
      ),
      11 => 
      array (
        'name' => 'prediction_mr',
        'label' => 'Prediction (MR)',
        'type' => 'html',
      ),
      12 => 
      array (
        'name' => 'logo_url',
        'label' => 'Logo URL',
        'type' => 'text',
      ),
      13 => 
      array (
        'name' => 'header_html',
        'label' => 'Header',
        'type' => 'html',
      ),
      14 => 
      array (
        'name' => 'footer_html',
        'label' => 'Footer',
        'type' => 'html',
      ),
      15 => 
      array (
        'name' => 'disclaimer',
        'label' => 'Disclaimer',
        'type' => 'textarea',
      ),
      16 => 
      array (
        'name' => 'section_order',
        'label' => 'Section Order (CSV)',
        'type' => 'text',
        'help' => 'e.g. user,calculations,findings,interpretations,remedies,score,summary',
      ),
      17 => 
      array (
        'name' => 'cover_image',
        'label' => 'Cover Image URL',
        'type' => 'text',
      ),
      18 => 
      array (
        'name' => 'company_info',
        'label' => 'Company Info',
        'type' => 'textarea',
      ),
      19 => 
      array (
        'name' => 'is_default',
        'label' => 'Default Template',
        'type' => 'bool',
      ),
    ),
  ),
  'astro_report_templates' => 
  array (
    'table' => 'astro_report_templates',
    'title' => 'Astrology Report Templates',
    'icon' => '📄',
    'section' => 'Astrology',
    'singular' => 'Report Template',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Template Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'service_slug',
        'label' => 'Service Slug',
        'type' => 'text',
        'help' => 'Maps this template to an astrology service (Booking Catalogue slug). One template per service. Leave blank + set Default for the fallback.',
      ),
      3 => 
      array (
        'name' => 'title',
        'label' => 'Report Title',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'body_html',
        'label' => 'Report Body (EN)',
        'type' => 'html',
        'help' => 'Placeholders: {{lagna}} {{rashi}} {{nakshatra}} {{pada}} {{ruling}} {{tithi}} {{paksha}} {{yoga}} {{karana}} {{vaar}} {{gana}} {{nadi}} {{yoni}} {{varna}} {{mangal}} {{name}} {{dob}} {{tob}}; a planet by name e.g. {{planet.Sun}} (→ "Pisces · house 7"); any input by id e.g. {{input.concern}}; {{positions}} = full planetary table.',
      ),
      5 => 
      array (
        'name' => 'body_hi',
        'label' => 'Report Body (HI)',
        'type' => 'html',
      ),
      6 => 
      array (
        'name' => 'body_gu',
        'label' => 'Report Body (GU)',
        'type' => 'html',
      ),
      7 => 
      array (
        'name' => 'body_mr',
        'label' => 'Report Body (MR)',
        'type' => 'html',
      ),
      8 => 
      array (
        'name' => 'prediction_html',
        'label' => 'Prediction (EN)',
        'type' => 'html',
        'help' => 'Same placeholders as the body. Shown as the prediction block for this service.',
      ),
      9 => 
      array (
        'name' => 'prediction_hi',
        'label' => 'Prediction (HI)',
        'type' => 'html',
      ),
      10 => 
      array (
        'name' => 'prediction_gu',
        'label' => 'Prediction (GU)',
        'type' => 'html',
      ),
      11 => 
      array (
        'name' => 'prediction_mr',
        'label' => 'Prediction (MR)',
        'type' => 'html',
      ),
      12 => 
      array (
        'name' => 'disclaimer',
        'label' => 'Disclaimer',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'is_default',
        'label' => 'Default Template',
        'type' => 'bool',
      ),
    ),
  ),
  'palm_report_templates' => 
  array (
    'table' => 'palm_report_templates',
    'title' => 'Palmistry Report Templates',
    'icon' => '📄',
    'section' => 'Palmistry',
    'singular' => 'Report Template',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Template Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'service_slug',
        'label' => 'Service Slug',
        'type' => 'text',
        'help' => 'Maps this template to a palmistry service (Booking Catalogue slug). One per service. Leave blank + set Default for the fallback.',
      ),
      3 => 
      array (
        'name' => 'title',
        'label' => 'Report Title',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'body_html',
        'label' => 'Report Body (EN)',
        'type' => 'html',
        'help' => 'Placeholders: {{name}} {{dominant_hand}} {{summary}} {{lines}} (full line-reading table) {{special}} (special signs); a line state by key e.g. {{line.heart}} (→ "Deep, long"); any input by id {{input.concern}}.',
      ),
      5 => 
      array (
        'name' => 'body_hi',
        'label' => 'Report Body (HI)',
        'type' => 'html',
      ),
      6 => 
      array (
        'name' => 'body_gu',
        'label' => 'Report Body (GU)',
        'type' => 'html',
      ),
      7 => 
      array (
        'name' => 'body_mr',
        'label' => 'Report Body (MR)',
        'type' => 'html',
      ),
      8 => 
      array (
        'name' => 'prediction_html',
        'label' => 'Prediction (EN)',
        'type' => 'html',
      ),
      9 => 
      array (
        'name' => 'prediction_hi',
        'label' => 'Prediction (HI)',
        'type' => 'html',
      ),
      10 => 
      array (
        'name' => 'prediction_gu',
        'label' => 'Prediction (GU)',
        'type' => 'html',
      ),
      11 => 
      array (
        'name' => 'prediction_mr',
        'label' => 'Prediction (MR)',
        'type' => 'html',
      ),
      12 => 
      array (
        'name' => 'disclaimer',
        'label' => 'Disclaimer',
        'type' => 'textarea',
      ),
      13 => 
      array (
        'name' => 'is_default',
        'label' => 'Default Template',
        'type' => 'bool',
      ),
    ),
  ),
  'num_ai_config' => 
  array (
    'table' => 'num_ai_config',
    'title' => 'Numerology AI Configuration',
    'icon' => '🤖',
    'section' => 'Numerology',
    'singular' => 'AI Config',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'config_key',
        'label' => 'Key',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'provider',
        'label' => 'NL Explanation Provider',
        'type' => 'select',
        'options' => 
        array (
          'none' => 'None (admin text only)',
          'openai' => 'OpenAI',
          'azure' => 'Azure OpenAI',
        ),
        'help' => 'Numerology numbers are computed deterministically; a provider is optional and only rephrases admin text. Keys stay in .env.',
      ),
      2 => 
      array (
        'name' => 'model',
        'label' => 'Model',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'api_endpoint',
        'label' => 'API Endpoint',
        'type' => 'text',
      ),
      4 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'commission_plans' => 
  array (
    'table' => 'commission_plans',
    'title' => 'Commission Plans',
    'icon' => '💼',
    'section' => 'Commission & Incentive',
    'singular' => 'Commission Plan',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Plan Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. PANDIT-STD, FRANCHISE-GOLD',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Plan Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'applies_role',
        'label' => 'Applies To Role',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'pandit' => 'Pandit',
          'franchise' => 'Franchise Owner',
          'trust_manager' => 'Trust Manager / Admin',
          'any' => 'Any Level',
        ),
        'help' => 'Default plan for this role when a user has no plan assigned.',
      ),
      3 => 
      array (
        'name' => 'base_type',
        'label' => 'Base Rate Type',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'percent' => 'Percentage of order',
          'fixed' => 'Fixed amount per report',
        ),
      ),
      4 => 
      array (
        'name' => 'base_rate',
        'label' => 'Base Rate (% or ₹)',
        'type' => 'decimal',
        'req' => true,
        'help' => 'Override on the order net. Percentage if type=percent, else flat ₹ per paid report.',
      ),
      5 => 
      array (
        'name' => 'min_amount',
        'label' => 'Min Commission (₹)',
        'type' => 'decimal',
        'help' => 'Optional floor per report (0 = none).',
      ),
      6 => 
      array (
        'name' => 'max_amount',
        'label' => 'Max Commission (₹)',
        'type' => 'decimal',
        'help' => 'Optional cap per report (0 = none).',
      ),
      7 => 
      array (
        'name' => 'hold_days',
        'label' => 'Hold Days',
        'type' => 'number',
        'help' => 'Days a commission stays "accrued" before becoming payable (refund protection).',
      ),
      8 => 
      array (
        'name' => 'effective_from',
        'label' => 'Effective From',
        'type' => 'date',
      ),
      9 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'commission_plan_rules' => 
  array (
    'table' => 'commission_plan_rules',
    'title' => 'Commission Rate Overrides',
    'icon' => '🎯',
    'section' => 'Commission & Incentive',
    'singular' => 'Rate Override',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'plan_code',
        'label' => 'Plan Code',
        'type' => 'text',
        'req' => true,
        'help' => 'Must match a Commission Plan code.',
      ),
      1 => 
      array (
        'name' => 'scope_type',
        'label' => 'Scope',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'service' => 'Specific Service (slug)',
          'category' => 'Service Category',
          'all' => 'All (plan-wide override)',
        ),
      ),
      2 => 
      array (
        'name' => 'scope_key',
        'label' => 'Scope Key',
        'type' => 'text',
        'help' => 'Service slug (e.g. lo-shu-deep-dive) or category (numerology/astrology/palmistry/vastu). Blank for scope=all.',
      ),
      3 => 
      array (
        'name' => 'rate_type',
        'label' => 'Rate Type',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'percent' => 'Percentage',
          'fixed' => 'Fixed ₹',
        ),
      ),
      4 => 
      array (
        'name' => 'rate_value',
        'label' => 'Rate (% or ₹)',
        'type' => 'decimal',
        'req' => true,
      ),
      5 => 
      array (
        'name' => 'min_amount',
        'label' => 'Min ₹',
        'type' => 'decimal',
      ),
      6 => 
      array (
        'name' => 'max_amount',
        'label' => 'Max ₹',
        'type' => 'decimal',
      ),
      7 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'incentive_slabs' => 
  array (
    'table' => 'incentive_slabs',
    'title' => 'Incentive Slabs (Targets)',
    'icon' => '🏆',
    'section' => 'Commission & Incentive',
    'singular' => 'Incentive Slab',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Slab Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Slab Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'applies_role',
        'label' => 'Applies To Role',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'pandit' => 'Pandit',
          'franchise' => 'Franchise Owner',
          'trust_manager' => 'Trust Manager / Admin',
          'any' => 'Any Level',
        ),
      ),
      3 => 
      array (
        'name' => 'period',
        'label' => 'Target Period',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'monthly' => 'Monthly',
          'quarterly' => 'Quarterly',
          'yearly' => 'Yearly',
          'any' => 'Any',
        ),
      ),
      4 => 
      array (
        'name' => 'metric',
        'label' => 'Measured On',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'revenue' => 'Revenue generated (₹)',
          'report_count' => 'Number of reports converted',
        ),
      ),
      5 => 
      array (
        'name' => 'threshold_from',
        'label' => 'Threshold From',
        'type' => 'decimal',
        'req' => true,
        'help' => 'Lower bound of the slab (₹ or count).',
      ),
      6 => 
      array (
        'name' => 'threshold_to',
        'label' => 'Threshold To',
        'type' => 'decimal',
        'help' => 'Upper bound (0 = open-ended / no ceiling).',
      ),
      7 => 
      array (
        'name' => 'reward_type',
        'label' => 'Reward Type',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'fixed' => 'Fixed ₹ payout',
          'percent' => '% of metric value',
        ),
      ),
      8 => 
      array (
        'name' => 'reward_value',
        'label' => 'Reward (₹ or %)',
        'type' => 'decimal',
        'req' => true,
      ),
      9 => 
      array (
        'name' => 'notes',
        'label' => 'Notes',
        'type' => 'textarea',
      ),
    ),
  ),
  'user_categories' => 
  array (
    'table' => 'user_categories',
    'title' => 'User Categories',
    'icon' => '🏷',
    'section' => 'Clients',
    'singular' => 'User Category',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'e.g. VIP, CORP, REG, STAFF',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'description',
        'label' => 'Description',
        'type' => 'textarea',
      ),
      3 => 
      array (
        'name' => 'applies_role',
        'label' => 'Applies To Role',
        'type' => 'select',
        'options' => 
        array (
          'any' => 'Any',
          'yajman' => 'Client',
          'pandit' => 'Pandit',
          'vendor' => 'Vendor',
          'partner' => 'Partner / Franchise',
          'staff' => 'Admin / Staff',
        ),
      ),
      4 => 
      array (
        'name' => 'color',
        'label' => 'Badge Colour',
        'type' => 'text',
        'help' => 'Hex, e.g. #7c3aed',
      ),
      5 => 
      array (
        'name' => 'is_default',
        'label' => 'Default on Registration',
        'type' => 'bool',
        'help' => 'Tick the ONE category new users are placed in at sign-up (e.g. User / Clients).',
      ),
      6 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
    ),
  ),
  'knowledge_bank' => 
  array (
    'table' => 'knowledge_bank',
    'title' => 'Knowledge Bank',
    'icon' => '📚',
    'section' => 'Knowledge Bank',
    'singular' => 'Knowledge Entry',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'astrology' => 'Astrology',
          'numerology' => 'Numerology',
          'vastu' => 'Vastu',
          'palmistry' => 'Palmistry',
          'pooja' => 'Pooja / Ritual',
          'general' => 'General',
        ),
      ),
      3 => 
      array (
        'name' => 'summary',
        'label' => 'Summary',
        'type' => 'textarea',
      ),
      4 => 
      array (
        'name' => 'content',
        'label' => 'Content',
        'type' => 'html',
      ),
      5 => 
      array (
        'name' => 'tags',
        'label' => 'Tags',
        'type' => 'text',
        'help' => 'Comma-separated',
      ),
      6 => 
      array (
        'name' => 'source',
        'label' => 'Source / Reference',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort Order',
        'type' => 'number',
      ),
      8 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'formula_definitions' => 
  array (
    'table' => 'formula_definitions',
    'title' => 'Formula Definitions',
    'icon' => '🧪',
    'section' => 'Formula Engine',
    'singular' => 'Formula',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'formula_key',
        'label' => 'Formula Key',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
        'help' => 'Stable id, e.g. num.lo_shu_missing or num.grid_rules',
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'category',
        'label' => 'Category',
        'type' => 'select',
        'options' => 
        array (
          'numerology' => 'Numerology',
          'astrology' => 'Astrology',
          'vastu' => 'Vastu',
          'palmistry' => 'Palmistry',
          'general' => 'General',
        ),
      ),
      3 => 
      array (
        'name' => 'type',
        'label' => 'Type',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'query' => 'Query (rule master)',
          'code' => 'Code (your handler)',
          'hybrid' => 'Hybrid (handler + query)',
        ),
      ),
      4 => 
      array (
        'name' => 'handler',
        'label' => 'Handler Class',
        'type' => 'text',
        'help' => 'For code/hybrid: FQCN implementing FormulaHandler, e.g. App\\Services\\Formula\\Handlers\\SampleLoShuMissingNumbers',
      ),
      5 => 
      array (
        'name' => 'source_master',
        'label' => 'Source Master',
        'type' => 'text',
        'help' => 'For query: rule-master slug, e.g. num_rules, vastu_object_rules, num_combo',
      ),
      6 => 
      array (
        'name' => 'match_config',
        'label' => 'Match Config (JSON)',
        'type' => 'textarea',
        'help' => 'WHERE builder: {"where":[{"col":"calc_key","op":"=","ctx":"calc_key"}],"active_col":"is_active"}',
      ),
      7 => 
      array (
        'name' => 'select_config',
        'label' => 'Select Config (JSON)',
        'type' => 'textarea',
        'help' => 'Order/limit/score/render: {"order":[{"col":"priority","dir":"desc"}],"limit":50,"score_col":"score_impact","lang_fields":["finding","explanation"],"row_template":"<p><b>{{finding}}</b> — {{explanation}}</p>"}',
      ),
      8 => 
      array (
        'name' => 'output_template',
        'label' => 'Output Wrapper (HTML)',
        'type' => 'textarea',
        'help' => 'Optional wrapper; {{rows}} = rendered rows, {{score}} = total. Blank = rows only.',
      ),
      9 => 
      array (
        'name' => 'params_schema',
        'label' => 'Params Schema (JSON)',
        'type' => 'textarea',
        'help' => 'Optional declared params + defaults',
      ),
      10 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'service_formula_bindings' => 
  array (
    'table' => 'service_formula_bindings',
    'title' => 'Service ↔ Formula Bindings',
    'icon' => '🔗',
    'section' => 'Formula Engine',
    'singular' => 'Binding',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'binding_code',
        'label' => 'Binding Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'svc_context',
        'label' => 'Service Context',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'catalogue' => 'Booking Catalogue (main / peripheral)',
          'report_service' => 'Report Service (paid tab)',
        ),
      ),
      2 => 
      array (
        'name' => 'service_slug',
        'label' => 'Service Slug',
        'type' => 'text',
        'req' => true,
        'help' => 'Main/peripheral service slug or report-service slug the formula engages with',
      ),
      3 => 
      array (
        'name' => 'formula_key',
        'label' => 'Formula Key',
        'type' => 'text',
        'req' => true,
        'help' => 'References a Formula Definition',
      ),
      4 => 
      array (
        'name' => 'sequence',
        'label' => 'Sequence',
        'type' => 'number',
        'help' => 'Run order (ascending)',
      ),
      5 => 
      array (
        'name' => 'params',
        'label' => 'Params (JSON)',
        'type' => 'textarea',
        'help' => 'Per-binding overrides passed to the formula',
      ),
      6 => 
      array (
        'name' => 'output_slot',
        'label' => 'Output Slot',
        'type' => 'text',
        'help' => 'Where the result lands in the report, e.g. predictions, remedies, consultation',
      ),
      7 => 
      array (
        'name' => 'mode',
        'label' => 'Merge Mode',
        'type' => 'select',
        'options' => 
        array (
          'append' => 'Append to slot',
          'replace' => 'Replace slot',
        ),
      ),
      8 => 
      array (
        'name' => 'condition',
        'label' => 'Condition',
        'type' => 'text',
        'help' => 'Optional: only run when context matches, e.g. gender=male',
      ),
      9 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'active' => 'Active',
          'inactive' => 'Inactive',
        ),
      ),
    ),
  ),
  'ref_yags' => 
  array (
    'table' => 'ref_yags',
    'title' => 'Yagna / Yag Master',
    'icon' => '🔥',
    'section' => 'Devotion',
    'singular' => 'Yagna',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'code',
        'label' => 'Code',
        'type' => 'text',
        'req' => true,
        'uniq' => true,
      ),
      1 => 
      array (
        'name' => 'name',
        'label' => 'Name',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'name_dev',
        'label' => 'Name (Devanagari)',
        'type' => 'text',
      ),
      3 => 
      array (
        'name' => 'deity',
        'label' => 'Primary Deity',
        'type' => 'select',
        'options_from' => 
        array (
          'table' => 'deities',
          'value' => 'name',
          'label' => 'name_dev',
          'order' => 'sort_order',
        ),
      ),
      4 => 
      array (
        'name' => 'purpose',
        'label' => 'Purpose / Phala',
        'type' => 'textarea',
        'list' => false,
      ),
      5 => 
      array (
        'name' => 'mantra',
        'label' => 'Main Mantra',
        'type' => 'textarea',
        'list' => false,
      ),
      6 => 
      array (
        'name' => 'ahuti_count',
        'label' => 'Aahuti Count',
        'type' => 'text',
      ),
      7 => 
      array (
        'name' => 'duration',
        'label' => 'Typical Duration',
        'type' => 'text',
      ),
      8 => 
      array (
        'name' => 'sort_order',
        'label' => 'Sort',
        'type' => 'number',
      ),
    ),
  ),
  'num_forecast_relation' => 
  array (
    'table' => 'num_forecast_relation',
    'title' => 'Forecast · Relation Matrix',
    'icon' => '🔗',
    'section' => 'Numerology · Forecast',
    'singular' => 'Relation',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'a',
        'label' => 'Number A',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          1 => '1',
          2 => '2',
          3 => '3',
          4 => '4',
          5 => '5',
          6 => '6',
          7 => '7',
          8 => '8',
          9 => '9',
        ),
      ),
      1 => 
      array (
        'name' => 'b',
        'label' => 'Number B',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          1 => '1',
          2 => '2',
          3 => '3',
          4 => '4',
          5 => '5',
          6 => '6',
          7 => '7',
          8 => '8',
          9 => '9',
        ),
      ),
      2 => 
      array (
        'name' => 'score',
        'label' => 'Relation Score',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          -2 => '-2 Enemy',
          0 => '0 Neutral',
          1 => '+1 Same',
          2 => '+2 Friend',
        ),
        'help' => 'Naisargika maitri: how numbers A and B relate. Symmetric in the engine.',
      ),
      3 => 
      array (
        'name' => 'note',
        'label' => 'Note',
        'type' => 'text',
        'list' => false,
      ),
    ),
  ),
  'num_forecast_affinity' => 
  array (
    'table' => 'num_forecast_affinity',
    'title' => 'Forecast · Area Affinity',
    'icon' => '🎯',
    'section' => 'Numerology · Forecast',
    'singular' => 'Affinity',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'number',
        'label' => 'Number',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          1 => '1',
          2 => '2',
          3 => '3',
          4 => '4',
          5 => '5',
          6 => '6',
          7 => '7',
          8 => '8',
          9 => '9',
        ),
      ),
      1 => 
      array (
        'name' => 'area_code',
        'label' => 'Life Area',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'Career' => 'Career',
          'Business' => 'Business',
          'Finance' => 'Finance',
          'Relationship' => 'Relationship',
          'Property' => 'Property',
          'Health_Wellness' => 'Health & Wellness',
          'Life_Transitions' => 'Life Transitions',
          'Personal_Branding' => 'Personal Branding',
        ),
      ),
      2 => 
      array (
        'name' => 'affinity',
        'label' => 'Affinity',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          -1 => '-1 Challenging',
          0 => '0 Neutral',
          1 => '+1 Supportive',
        ),
        'help' => 'How supportive this number is for this life area.',
      ),
    ),
  ),
  'num_forecast_weight' => 
  array (
    'table' => 'num_forecast_weight',
    'title' => 'Forecast · Layer Weights',
    'icon' => '⚖️',
    'section' => 'Numerology · Forecast',
    'singular' => 'Weight',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'layer_code',
        'label' => 'Layer',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'L1' => 'L1 · Mulank × Bhagyank',
          'L2' => 'L2 · Mulank × Kua',
          'L3' => 'L3 · Personal Yr × Maha',
          'L4' => 'L4 · Personal Mo × Antar',
          'L5' => 'L5 · Personal Day × Pratyantar',
        ),
      ),
      1 => 
      array (
        'name' => 'area_code',
        'label' => 'Life Area',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'Career' => 'Career',
          'Business' => 'Business',
          'Finance' => 'Finance',
          'Relationship' => 'Relationship',
          'Property' => 'Property',
          'Health_Wellness' => 'Health & Wellness',
          'Life_Transitions' => 'Life Transitions',
          'Personal_Branding' => 'Personal Branding',
        ),
      ),
      2 => 
      array (
        'name' => 'weight',
        'label' => 'Weight',
        'type' => 'decimal',
        'req' => true,
        'help' => 'Relative weight of this layer for this area (engine normalises).',
      ),
    ),
  ),
  'num_forecast_band' => 
  array (
    'table' => 'num_forecast_band',
    'title' => 'Forecast · Score Bands',
    'icon' => '🎚️',
    'section' => 'Numerology · Forecast',
    'singular' => 'Band',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'score',
        'label' => 'Score',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          -3 => '-3',
          -2 => '-2',
          -1 => '-1',
          0 => '0',
          1 => '+1',
          2 => '+2',
          3 => '+3',
        ),
        'help' => 'Rounded area score -3..+3.',
      ),
      1 => 
      array (
        'name' => 'band_code',
        'label' => 'Band Code',
        'type' => 'text',
        'req' => true,
      ),
      2 => 
      array (
        'name' => 'band_label',
        'label' => 'Band Label',
        'type' => 'text',
        'req' => true,
      ),
      3 => 
      array (
        'name' => 'colour',
        'label' => 'Colour',
        'type' => 'text',
        'list' => false,
      ),
      4 => 
      array (
        'name' => 'action',
        'label' => 'Recommended Action',
        'type' => 'textarea',
      ),
      5 => 
      array (
        'name' => 'lang',
        'label' => 'Language',
        'type' => 'select',
        'req' => true,
        'options' => 
        array (
          'en' => 'English',
          'gu' => 'ગુજરાતી',
          'hi' => 'हिन्दी',
        ),
      ),
    ),
  ),
  'seva_offers' => 
  array (
    'table' => 'seva_offers',
    'title' => 'Seva Offers (All)',
    'icon' => '📋',
    'section' => 'Services Marketplace',
    'singular' => 'Seva Offer',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'offer_code',
        'label' => 'Code',
        'type' => 'text',
        'list' => true,
      ),
      1 => 
      array (
        'name' => 'title',
        'label' => 'Title',
        'type' => 'text',
        'req' => true,
        'list' => true,
      ),
      2 => 
      array (
        'name' => 'posted_by_type',
        'label' => 'Posted By',
        'type' => 'select',
        'options' => 
        array (
          'yajman' => 'Seeker',
          'pandit' => 'Pandit',
        ),
        'list' => true,
      ),
      3 => 
      array (
        'name' => 'event_date',
        'label' => 'Event Date',
        'type' => 'date',
        'list' => true,
      ),
      4 => 
      array (
        'name' => 'event_time',
        'label' => 'Event Time',
        'type' => 'text',
        'list' => false,
      ),
      5 => 
      array (
        'name' => 'status',
        'label' => 'Status',
        'type' => 'select',
        'options' => 
        array (
          'open' => 'Open',
          'partially_filled' => 'Partially Filled',
          'filled' => 'Confirmed',
          'completed' => 'Completed',
          'cancelled' => 'Cancelled',
          'expired' => 'Expired',
        ),
        'list' => true,
      ),
      6 => 
      array (
        'name' => 'seats_required',
        'label' => 'Seats Req',
        'type' => 'number',
        'list' => false,
      ),
      7 => 
      array (
        'name' => 'seats_filled',
        'label' => 'Seats Filled',
        'type' => 'number',
        'list' => false,
      ),
      8 => 
      array (
        'name' => 'fee_type',
        'label' => 'Fee Type',
        'type' => 'select',
        'options' => 
        array (
          'fixed' => 'Fixed',
          'open' => 'Negotiable',
          'donation' => 'Donation',
          'no_fee' => 'No Fee',
        ),
        'list' => false,
      ),
      9 => 
      array (
        'name' => 'fee_amount',
        'label' => 'Fee',
        'type' => 'decimal',
        'list' => true,
      ),
      10 => 
      array (
        'name' => 'city',
        'label' => 'City',
        'type' => 'text',
        'list' => true,
      ),
      11 => 
      array (
        'name' => 'priority',
        'label' => 'Priority',
        'type' => 'select',
        'options' => 
        array (
          'normal' => 'Normal',
          'urgent' => 'Urgent',
        ),
        'list' => false,
      ),
    ),
  ),
  'seva_feedback' => 
  array (
    'table' => 'seva_feedback',
    'title' => 'Seva Feedback & Ratings',
    'icon' => '⭐',
    'section' => 'Services Marketplace',
    'singular' => 'Feedback',
    'cols' => 
    array (
      0 => 
      array (
        'name' => 'offer_id',
        'label' => 'Offer #',
        'type' => 'number',
        'list' => true,
      ),
      1 => 
      array (
        'name' => 'kind',
        'label' => 'Kind',
        'type' => 'select',
        'options' => 
        array (
          'provider' => 'Provider (→ pandit)',
          'customer' => 'Customer (→ seeker)',
          'platform' => 'Platform',
        ),
        'list' => true,
      ),
      2 => 
      array (
        'name' => 'rater_type',
        'label' => 'By',
        'type' => 'select',
        'options' => 
        array (
          'poster' => 'Seeker',
          'pandit' => 'Pandit',
        ),
        'list' => true,
      ),
      3 => 
      array (
        'name' => 'rating',
        'label' => 'Rating',
        'type' => 'number',
        'req' => true,
        'list' => true,
      ),
      4 => 
      array (
        'name' => 'ratee_pandit_id',
        'label' => 'Pandit #',
        'type' => 'number',
        'list' => false,
      ),
      5 => 
      array (
        'name' => 'comment',
        'label' => 'Comment',
        'type' => 'textarea',
        'list' => true,
      ),
    ),
  ),
  'astro_planet_positions' =>
  array (
    'table' => 'astro_planet_positions',
    'title' => 'Planet Positions',
    'icon' => '🛰️',
    'section' => 'Astrology Engine',
    'singular' => 'Planet Position',
    'cols' =>
    array (
      0 => array ( 'name' => 'label', 'label' => 'Chart / Sample Label', 'type' => 'text' ),
      1 => array ( 'name' => 'planet', 'label' => 'Planet', 'type' => 'select', 'req' => true,
        'options_from' => array ( 'table' => 'num_planets', 'value' => 'planet', 'label' => 'planet_dev', 'order' => 'number' ) ),
      2 => array ( 'name' => 'house', 'label' => 'House (Bhava)', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_houses', 'value' => 'name', 'label' => 'name', 'order' => 'sort_order' ) ),
      3 => array ( 'name' => 'rashi', 'label' => 'Rashi', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_rashis', 'value' => 'english', 'label' => 'english', 'order' => 'number' ) ),
      4 => array ( 'name' => 'nakshatra', 'label' => 'Nakshatra', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_nakshatras', 'value' => 'name', 'label' => 'name_dev', 'order' => 'number' ) ),
      5 => array ( 'name' => 'degree', 'label' => 'Degree', 'type' => 'decimal' ),
      6 => array ( 'name' => 'retrograde', 'label' => 'Motion', 'type' => 'select',
        'options' => array ( '0' => 'Direct', '1' => 'Retrograde (R)' ) ),
      7 => array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'astro_combinations' =>
  array (
    'table' => 'astro_combinations',
    'title' => 'Combinations (Yoga Rules)',
    'icon' => '🧩',
    'section' => 'Astrology Engine',
    'singular' => 'Combination',
    'cols' =>
    array (
      0 => array ( 'name' => 'name', 'label' => 'Combination Name', 'type' => 'text', 'req' => true ),
      1 => array ( 'name' => 'planet', 'label' => 'Planet', 'type' => 'select',
        'options_from' => array ( 'table' => 'num_planets', 'value' => 'planet', 'label' => 'planet_dev', 'order' => 'number' ) ),
      2 => array ( 'name' => 'house', 'label' => 'House (Bhava)', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_houses', 'value' => 'name', 'label' => 'name', 'order' => 'sort_order' ) ),
      3 => array ( 'name' => 'rashi', 'label' => 'Rashi', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_rashis', 'value' => 'english', 'label' => 'english', 'order' => 'number' ) ),
      4 => array ( 'name' => 'nakshatra', 'label' => 'Nakshatra', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_nakshatras', 'value' => 'name', 'label' => 'name_dev', 'order' => 'number' ) ),
      5 => array ( 'name' => 'yoga', 'label' => 'Yoga', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_yogas', 'value' => 'name', 'label' => 'name_dev', 'order' => 'number' ) ),
      6 => array ( 'name' => 'karan', 'label' => 'Karan', 'type' => 'select',
        'options_from' => array ( 'table' => 'ref_karanas', 'value' => 'name', 'label' => 'name_dev', 'order' => 'number' ) ),
      7 => array ( 'name' => 'rule_expression', 'label' => 'Rule Expression (JSON)', 'type' => 'textarea',
        'help' => 'Optional JSON logic, e.g. {"all":[{"planet":"Jupiter","house":"1st House"}]}' ),
      8 => array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'astro_predictions' =>
  array (
    'table' => 'astro_predictions',
    'title' => 'Predictions Library',
    'icon' => '🔮',
    'section' => 'Astrology Engine',
    'singular' => 'Prediction',
    'cols' =>
    array (
      0 => array ( 'name' => 'combination', 'label' => 'Combination', 'type' => 'select', 'req' => true,
        'options_from' => array ( 'table' => 'astro_combinations', 'value' => 'id', 'label' => 'name', 'order' => 'sort_order' ) ),
      1 => array ( 'name' => 'category', 'label' => 'Category', 'type' => 'select',
        'options' => array ( 'General' => 'General', 'Personality' => 'Personality', 'Self' => 'Self', 'Career' => 'Career', 'Work/Service' => 'Work/Service', 'Wealth' => 'Wealth', 'Gains' => 'Gains', 'Marriage' => 'Marriage', 'Relationships' => 'Relationships', 'Health' => 'Health', 'Mind/Emotions' => 'Mind/Emotions', 'Education' => 'Education', 'Courage' => 'Courage', 'Spirituality' => 'Spirituality', 'Spiritual' => 'Spiritual', 'Transformation' => 'Transformation', 'Family' => 'Family', 'Fortune' => 'Fortune' ) ),
      2 => array ( 'name' => 'result_text', 'label' => 'Prediction Text', 'type' => 'html', 'req' => true ),
      3 => array ( 'name' => 'strength', 'label' => 'Strength (1-10)', 'type' => 'number' ),
      4 => array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  // ── Astrology Combinations (clone of the numerology Number Combos + Number Type) ──
  'astro_combo_type' =>
  array (
    'table' => 'astro_combo_types',
    'title' => 'Combination Type',
    'icon' => '🏷️',
    'section' => 'Astrology Engine',
    'singular' => 'Combination Type',
    'cols' =>
    array (
      0 => array ( 'name' => 'code', 'label' => 'Code', 'type' => 'text', 'req' => true, 'uniq' => true,
        'help' => 'Machine key, e.g. graha_yuti, dosha, raj_yoga, dhan_yoga, nakshatra_yoga.' ),
      1 => array ( 'name' => 'name', 'label' => 'Name', 'type' => 'text', 'req' => true ),
      2 => array ( 'name' => 'name_dev', 'label' => 'Name (Dev)', 'type' => 'text' ),
      3 => array ( 'name' => 'topic_no', 'label' => 'Topic No', 'type' => 'number',
        'help' => 'Prediction topic number for grouping / ordering.' ),
      4 => array ( 'name' => 'description', 'label' => 'Description', 'type' => 'textarea' ),
      5 => array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'astro_combo' =>
  array (
    'table' => 'astro_combo',
    'title' => 'Astrology Combinations',
    'icon' => '⚡',
    'section' => 'Astrology Engine',
    'singular' => 'Combination',
    'cols' =>
    array (
      0 => array ( 'name' => 'yoga_type', 'label' => 'Combination Type', 'type' => 'select', 'req' => true,
        'options_from' => array ( 'table' => 'astro_combo_types', 'value' => 'code', 'label' => 'name', 'order' => 'sort_order' ),
        'help' => 'From the Combination Type master.' ),
      1 => array ( 'name' => 'n1', 'label' => 'N1', 'type' => 'number' ),
      2 => array ( 'name' => 'n2', 'label' => 'N2', 'type' => 'number' ),
      3 => array ( 'name' => 'n3', 'label' => 'N3', 'type' => 'number' ),
      4 => array ( 'name' => 'n4', 'label' => 'N4', 'type' => 'number' ),
      5 => array ( 'name' => 'plane_name', 'label' => 'Plane Name', 'type' => 'text' ),
      6 => array ( 'name' => 'yoga_name', 'label' => 'Combination Name', 'type' => 'text' ),
      7 => array ( 'name' => 'yoga_name_dev', 'label' => 'Combination Name (Dev)', 'type' => 'text' ),
      8 => array ( 'name' => 'general_prediction', 'label' => 'General Prediction', 'type' => 'html' ),
      9 => array ( 'name' => 'career_prediction', 'label' => 'Career Prediction', 'type' => 'html' ),
      10 => array ( 'name' => 'finance_prediction', 'label' => 'Finance Prediction', 'type' => 'html' ),
      11 => array ( 'name' => 'health_prediction', 'label' => 'Health Prediction', 'type' => 'html' ),
      12 => array ( 'name' => 'relation_prediction', 'label' => 'Relation Prediction', 'type' => 'html' ),
      13 => array ( 'name' => 'remedies', 'label' => 'Remedies', 'type' => 'html' ),
      14 => array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'voice_phoneme_master' =>
  array (
    'table' => 'voice_phoneme_master',
    'title' => 'Voice · Phonetic Master',
    'icon' => '🔤',
    'section' => 'Voice Astrology',
    'singular' => 'Phoneme',
    'cols' =>
    array (
      array ( 'name' => 'phoneme', 'label' => 'Phoneme', 'type' => 'text', 'help' => 'e.g. अ or leading roman syllable' ),
      array ( 'name' => 'roman', 'label' => 'Roman', 'type' => 'text' ),
      array ( 'name' => 'syllables', 'label' => 'Syllables (comma sep)', 'type' => 'text', 'help' => 'Naming syllables, e.g. chu,che,cho,la' ),
      array ( 'name' => 'nakshatra', 'label' => 'Nakshatra', 'type' => 'text' ),
      array ( 'name' => 'planet', 'label' => 'Planet', 'type' => 'text', 'help' => 'Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu' ),
      array ( 'name' => 'life_stage', 'label' => 'Life Stage', 'type' => 'select', 'options' => array ( 'Balya' => 'Balya', 'Yuva' => 'Yuva', 'Vruddha' => 'Vruddha' ) ),
      array ( 'name' => 'element', 'label' => 'Element', 'type' => 'select', 'options' => array ( 'Fire' => 'Fire', 'Earth' => 'Earth', 'Air' => 'Air', 'Water' => 'Water', 'Ether' => 'Ether' ) ),
      array ( 'name' => 'interpretation', 'label' => 'Interpretation', 'type' => 'textarea' ),
      array ( 'name' => 'is_vowel', 'label' => 'Is Vowel', 'type' => 'bool' ),
      array ( 'name' => 'is_active', 'label' => 'Active', 'type' => 'bool' ),
      array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'voice_tone_master' =>
  array (
    'table' => 'voice_tone_master',
    'title' => 'Voice · Tone Master',
    'icon' => '🎚',
    'section' => 'Voice Astrology',
    'singular' => 'Tone Band',
    'cols' =>
    array (
      array ( 'name' => 'band', 'label' => 'Band', 'type' => 'text', 'req' => true, 'help' => 'very_low, low, mid, high, very_high' ),
      array ( 'name' => 'freq_min', 'label' => 'Freq Min (Hz)', 'type' => 'number' ),
      array ( 'name' => 'freq_max', 'label' => 'Freq Max (Hz)', 'type' => 'number' ),
      array ( 'name' => 'zodiac_group', 'label' => 'Zodiac Group', 'type' => 'text' ),
      array ( 'name' => 'element', 'label' => 'Element', 'type' => 'select', 'options' => array ( 'Fire' => 'Fire', 'Earth' => 'Earth', 'Air' => 'Air', 'Water' => 'Water', 'Ether' => 'Ether' ) ),
      array ( 'name' => 'interpretation', 'label' => 'Interpretation', 'type' => 'textarea' ),
      array ( 'name' => 'is_active', 'label' => 'Active', 'type' => 'bool' ),
      array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'voice_breath_master' =>
  array (
    'table' => 'voice_breath_master',
    'title' => 'Voice · Breath Master',
    'icon' => '🌬',
    'section' => 'Voice Astrology',
    'singular' => 'Breath Band',
    'cols' =>
    array (
      array ( 'name' => 'band', 'label' => 'Band', 'type' => 'text', 'req' => true, 'help' => 'rapid, short, moderate, long' ),
      array ( 'name' => 'pause_min', 'label' => 'Pause Min (s)', 'type' => 'decimal' ),
      array ( 'name' => 'pause_max', 'label' => 'Pause Max (s)', 'type' => 'decimal' ),
      array ( 'name' => 'planet', 'label' => 'Planet', 'type' => 'text' ),
      array ( 'name' => 'interpretation', 'label' => 'Interpretation', 'type' => 'textarea' ),
      array ( 'name' => 'is_active', 'label' => 'Active', 'type' => 'bool' ),
      array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'voice_feature_rules' =>
  array (
    'table' => 'voice_feature_rules',
    'title' => 'Voice · Feature Rules',
    'icon' => '🧭',
    'section' => 'Voice Astrology',
    'singular' => 'Feature Rule',
    'cols' =>
    array (
      array ( 'name' => 'feature_type', 'label' => 'Feature Type', 'type' => 'select', 'req' => true, 'options' => array ( 'pitch' => 'pitch', 'stress' => 'stress', 'pause' => 'pause', 'rate' => 'rate', 'breath' => 'breath', 'centroid' => 'centroid (tone)', 'energy' => 'energy', 'activity' => 'activity', 'timbre' => 'timbre', 'voice_type' => 'voice_type (classification)' ) ),
      array ( 'name' => 'feature_value', 'label' => 'Feature Value / Band', 'type' => 'text', 'req' => true, 'help' => 'e.g. high, low, mid, strong, soft, long, short, fast, slow, steady, uneven' ),
      array ( 'name' => 'mapped_planet', 'label' => 'Mapped Planet', 'type' => 'text' ),
      array ( 'name' => 'mapped_trait', 'label' => 'Mapped Trait', 'type' => 'text' ),
      array ( 'name' => 'category', 'label' => 'Category', 'type' => 'select', 'options' => array ( 'GENERAL' => 'General', 'CAREER' => 'Career', 'RELATIONSHIPS' => 'Relationships', 'HEALTH' => 'Health', 'FINANCE' => 'Finance', 'SPIRITUALITY' => 'Spirituality' ) ),
      array ( 'name' => 'prediction_text', 'label' => 'Prediction Text', 'type' => 'textarea', 'req' => true ),
      array ( 'name' => 'is_active', 'label' => 'Active', 'type' => 'bool' ),
      array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'voice_prediction_templates' =>
  array (
    'table' => 'voice_prediction_templates',
    'title' => 'Voice · Prediction Templates',
    'icon' => '🧩',
    'section' => 'Voice Astrology',
    'singular' => 'Prediction Template',
    'cols' =>
    array (
      array ( 'name' => 'name', 'label' => 'Name', 'type' => 'text' ),
      array ( 'name' => 'condition_set', 'label' => 'Condition Set (JSON)', 'type' => 'textarea', 'help' => 'e.g. {"pitch":"high","pause":"short"} — keys: pitch,pause,rate,stress,tone' ),
      array ( 'name' => 'prediction_output', 'label' => 'Prediction Output', 'type' => 'textarea', 'req' => true ),
      array ( 'name' => 'category', 'label' => 'Category', 'type' => 'select', 'options' => array ( 'GENERAL' => 'General', 'CAREER' => 'Career', 'RELATIONSHIPS' => 'Relationships', 'HEALTH' => 'Health', 'FINANCE' => 'Finance', 'SPIRITUALITY' => 'Spirituality' ) ),
      array ( 'name' => 'is_active', 'label' => 'Active', 'type' => 'bool' ),
      array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
  'astrology_rules' =>
  array (
    'table' => 'astrology_rules',
    'title' => 'Face Reading · Astrological Rules',
    'icon' => '🧑‍🤝‍🧑',
    'section' => 'Face Reading',
    'singular' => 'Face Rule',
    'cols' =>
    array (
      array ( 'name' => 'facial_zone', 'label' => 'Facial Zone', 'type' => 'text', 'req' => true, 'uniq' => true ),
      array ( 'name' => 'planet', 'label' => 'Planetary Influence', 'type' => 'text', 'req' => true, 'help' => 'One planet, or two joined with "+" (e.g. "Venus + Jupiter"). Planets: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn.' ),
      array ( 'name' => 'prominence', 'label' => 'Prominence (%)', 'type' => 'number', 'help' => 'Canonical weight of this zone in the reading (anchors the Graha Strength Index).' ),
      array ( 'name' => 'interpretation_astrology', 'label' => 'Astrological Interpretation (Jyotish)', 'type' => 'textarea', 'req' => true ),
      array ( 'name' => 'interpretation_psychology', 'label' => 'Normal / Psychological Interpretation', 'type' => 'textarea', 'req' => true ),
      array ( 'name' => 'technique_notes', 'label' => 'Additional Technique', 'type' => 'textarea', 'help' => 'Advanced reading cue (e.g. "Jaw angle for dominance").' ),
      array ( 'name' => 'is_active', 'label' => 'Active', 'type' => 'bool' ),
      array ( 'name' => 'sort_order', 'label' => 'Sort Order', 'type' => 'number' ),
    ),
  ),
);
