| from typing import Dict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| QS_FALLBACK_RULES: Dict[str, str] = {
|
|
|
|
|
|
|
| r"(?i)\bvideo\s*walls?\b|\bgiant\s*screens?\b": "AV Equipment",
|
| r"(?i)\bstartlight\s*system\b|\bpublic\s*address\b": "AV Equipment",
|
| r"(?i)\bdigital\s*light\s*flag\b|\bsmart\s*marshalling\b": "AV Equipment",
|
| r"(?i)\bpit\s*warning\s*system\b|\btime\s*keeping\b": "AV Equipment",
|
| r"(?i)\bmarshal\s*communication\b|\bbroadband\s*antenna\b": "AV Equipment",
|
| r"(?i)\bdmx(\s*control)?\s*system\b": "Lighting control panel",
|
| r"(?i)\btechnical\s*furniture'?s?\b": "Furniture and furnishings",
|
|
|
|
|
|
|
| r"(?i)\bfire\s*alarm\s*control\s*panel\b": "Fire alarm control panel",
|
| r"(?i)\bfire\s*alarm\s*system.*equipment\b": "Fire alarm control panel",
|
| r"(?i)\bfire\s*alarm\s*system\b": "Addressable fire alarm accessories",
|
| r"(?i)\baccess\s*control\s*system\b": "Access control panel",
|
| r"(?i)\bsecurity\s*system\b|\bfault\s*indication\s*system\b": "Alarm panel",
|
| r"(?i)\bpublic\s*cctv\b|\bvideo\s*surveillance\b": "CCTV Camera",
|
| r"(?i)\bbms\b|\bbuilding\s*management\s*system\b": "BMS",
|
|
|
|
|
|
|
| r"(?i)\bfia\s*concrete\s*block\s*wall\b": "Concrete - precast",
|
| r"(?i)\btecpro\s*barrier\b|\bsafer\s*barrier\b": "Hoarding and site fence",
|
| r"(?i)\bguardrails?\b|\bfia\s*fence\b|\bspectator\s*fence\b": "Hoarding and site fence",
|
| r"(?i)\btemporary\s*fence\b|\bheras\s*fence\b|\bgap\s*fence\b": "Hoarding and site fence",
|
| r"(?i)\bboundary\s*fence\b|\bpipwall\s*gate\b|\bfence\s*wall\s*gate\b": "Hoarding and site fence",
|
| r"(?i)\bdouble\s*swing\s*gate\b|\bwalls,\s*fences,\s*gates\b": "Hoarding and site fence",
|
| r"(?i)\bwindows\s*on\s*fences\b": "Hoarding and site fence",
|
|
|
|
|
|
|
| r"(?i)\bmedium\s*voltage\s*distribution\b": "Transformer",
|
| r"(?i)\buninterruptible\s*power\s*supply\b|\bups\b": "UPS",
|
| r"(?i)\bdiesel\s*generator\b|\bemergency\s*power\s*generators?\b": "Generator",
|
| r"(?i)\bactive\s*harmonic\s*filter\b": "Power factor correction equipment",
|
| r"(?i)\bmotor\s*control\s*centers?\b": "Motor control center",
|
| r"(?i)\bdistribution\s*boards?\b": "Distribution boards",
|
| r"(?i)\bswitchgears?\b|\bswitchboards?\b|\bpanelboards?\b": "Distribution boards",
|
| r"(?i)\bearthing\s*and\s*bonding\b|\bearthing\s*supply\b": "Earthing system",
|
| r"(?i)\bdata\s*network\b|\bnetwork\s*racks?\b": "Network cabling infrastructure",
|
|
|
|
|
|
|
| r"(?i)\bfp200\b|fire\s*rated\s*cables?": "Cabling - Copper Cable",
|
| r"(?i)\bgi\s*conduits?\b": "Cabling - Copper Conduit",
|
| r"(?i)\bmulticore.*cables?\b|\bcontrol\s*cables?\b": "Cabling - Copper Cable",
|
| r"(?i)\bcables?\s*from\s*.*to\b": "Cabling - Copper Cable",
|
| r"(?i)\bxlpe/pvc/cu\b|\bcu/xlpe/swa/pvc\b|\bcables?\b": "Cabling - Copper Cable",
|
| r"(?i)\bfiber\s*optic\b|\bfibre\s*backbone\b": "Cabling - Fibre Optic",
|
| r"(?i)upvc\s*pipes?": "Pipework - uPVC",
|
| r"(?i)pvc\s*pipes?": "Pipework - PVC",
|
| r"(?i)hdpe\s*pipes?": "Pipework - HDPE",
|
| r"(?i)pre-insulated\s*chilled\s*water\s*pipes?": "Pipework - Thermal",
|
| r"(?i)\bflexible\s*ducts?\b": "Duct - Flexible duct",
|
|
|
|
|
|
|
| r"(?i)\bsoil\s*clik\s*moisture\s*sensor\b": "Irrigation sundries",
|
| r"(?i)\birrigation\s*field\s*controller\b": "Irrigation system",
|
| r"(?i)\bpoly\s*subsurface\s*drip\s*line\b|\btree\s*irrigation\b": "Irrigation system",
|
| r"(?i)\bsecondary\s*irrigation.*valves\b|\bsecondary\s*irrigation.*others\b": "Irrigation sundries",
|
| r"(?i)\bsecondary\s*irrigation\b": "Irrigation system",
|
| r"(?i)\bsubbase\b|\bcrushed\s*aggregate\b": "Crushed aggregate , granular subbase",
|
| r"(?i)\bsubgrade\b": "Excavation",
|
| r"(?i)\bpvc\s*pondliner\b|\bpolyethylene\s*sheets?\b": "Waterproofing",
|
| r"(?i)\bgeotextile\b": "Geotextile",
|
| r"(?i)\bgravel\s*filter\b": "Gravel",
|
| r"(?i)\bplanting\s*soil\b|\bto\s*planting\s*areas\b": "Plant mix , sweet soil",
|
| r"(?i)\btrees\b": "Trees",
|
| r"(?i)\bshrubs\b|\bherbaceous\b|\bgroundcovers?\b": "Shrubs and ground covers",
|
| r"(?i)\bsite\s*furnishings?\b|\bseat\s*benches\b|\bplanter\s*benches\b": "Furniture and furnishings",
|
|
|
|
|
|
|
| r"(?i)\btrack\s*lighting\b|\blighting\s*poles?\b|\bfloodlight\b": "Light fixtures",
|
| r"(?i)\bmilos\s*m760\b|\btruss\s*structure\b": "Structural steel",
|
| r"(?i)column\s*foundations?|mass\s*concrete.*bases?": "Concrete - In situ",
|
| r"(?i)\bbase\s*plate.*holding\s*down\b": "Concrete - In situ",
|
| r"(?i)\bin-situ\s*concrete\s*paving\b|\bin-situ\s*concrete\b": "Concrete - In situ",
|
| r"(?i)\bconcrete\s*ancillaries.*formworks?\b": "Formwork",
|
| r"(?i)\bwire\s*mesh\b": "Reinforcement - mesh",
|
| r"(?i)\banti-carbonation\b|\bcladding\s*finishes\b|\btextured\s*paint\b": "Wall finishes",
|
| r"(?i)\bwhite\s*acrylic\s*paint\b": "Road marking",
|
| r"(?i)\bskirting\b": "Skirting",
|
| r"(?i)\bacoustic.*ceiling\b": "Acoustic ceiling tile",
|
| r"(?i)\binterior\s*concrete\s*ceilings\b": "Ceilings and bulkheads - paint finish only",
|
| r"(?i)\bsignage\b|\bwayfinding\b|\btraffic\s*sign\s*boards?\b|\bdistance\s*sign\s*board\b": "Signage and wayfinding",
|
|
|
|
|
|
|
| r"(?i)^\s*labour": "Dayworks - Labour",
|
| r"(?i)^\s*plant": "Dayworks - Plant & Equipment",
|
| r"(?i)^\s*materials?": "Dayworks - Material",
|
| r"(?i)\bsundry\s*items\b": "Dayworks",
|
| r"(?i)\bbuilder'?s\s*work\b": "Dayworks",
|
| r"(?i)\bsoft\s*landscaping.*\bmaintenance\b": "Dayworks",
|
| r"(?i)\bsubcontractor'?s\s*adjustments\b|\bvalue\s*adding\b|\badditional\s*items\b": "Dayworks",
|
| }
|
|
|