Cross-discipline design-contradiction checker for construction drawing sets. Standalone tool broken out from Iron_Bid; a pipeline stage may later fold back into Iron_Bid. Pipeline: PDF->images -> per-sheet assertion extraction -> deterministic clustering by location -> per-cluster reasoning -> report. Includes CLI (cli/run_check.py) and web UI (backend/main.py). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 line
18 KiB
JSON
1 line
18 KiB
JSON
{"normalized_assertions": [{"assertion_id": "A51.01#16", "original_value": "33\"-36\"", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Range in inches, no clear conversion to other units.", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "A51.01#17", "original_value": "17\"-19\"", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Range in inches, no clear conversion to other units.", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "A51.01#18", "original_value": "7\"-9\"", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Range in inches, no clear conversion to other units.", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "A51.01#19", "original_value": "3'-6\" MIN.", "normalized_value": "3'-6\"", "normalized_unit": "feet and inches", "normalized_attribute": "length", "normalization_notes": "Removed 'MIN.' qualifier, preserved unit as feet and inches.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "A51.01#20", "original_value": "3'-4\"", "normalized_value": "3'-4\"", "normalized_unit": "feet and inches", "normalized_attribute": "length", "normalization_notes": "Preserved unit as feet and inches.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#0", "original_value": "ROOFTOP A/C UNIT", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#1", "original_value": "CARRIER", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#2", "original_value": "50FE-M07", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#3", "original_value": "711", "normalized_value": "711", "normalized_unit": "pounds (lbs)", "normalized_attribute": "weight", "normalization_notes": "Assumed unit based on context (weight).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#4", "original_value": "2100", "normalized_value": "2100", "normalized_unit": "cubic feet per minute (CFM)", "normalized_attribute": "supply_airflow", "normalization_notes": "Assumed unit based on context (airflow).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#5", "original_value": "3.0", "normalized_value": "3.0", "normalized_unit": "horsepower (hp)", "normalized_attribute": "fan_horsepower", "normalization_notes": "Assumed unit based on context (horsepower).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#6", "original_value": "6.0", "normalized_value": "6.0", "normalized_unit": "tons", "normalized_attribute": "cooling_capacity_nominal", "normalization_notes": "Assumed unit based on context (cooling capacity).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#7", "original_value": "10.6", "normalized_value": "10.6", "normalized_unit": "kilowatts (kW)", "normalized_attribute": "heating_capacity", "normalization_notes": "Assumed unit based on context (heating capacity).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#8", "original_value": "460", "normalized_value": "460", "normalized_unit": "volts (V)", "normalized_attribute": "voltage", "normalization_notes": "Assumed unit based on context (voltage).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#9", "original_value": "3", "normalized_value": "3", "normalized_unit": "phase", "normalized_attribute": "phase", "normalization_notes": "Assumed unit based on context (electrical phase).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#10", "original_value": "24", "normalized_value": "24", "normalized_unit": "amps (A)", "normalized_attribute": "mca", "normalization_notes": "Assumed unit based on context (minimum circuit ampere).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#11", "original_value": "25", "normalized_value": "25", "normalized_unit": "amps (A)", "normalized_attribute": "mocp", "normalization_notes": "Assumed unit based on context (maximum overcurrent protection).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#12", "original_value": "11.2 EER - 15.5 IEER", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No numerical value to normalize; units are specific to efficiency ratings.", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#13", "original_value": "8 MERV", "normalized_value": "8", "normalized_unit": "MERV rating", "normalized_attribute": "filter_rating", "normalization_notes": "Extracted numerical value with unit (MERV rating).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#14", "original_value": "R-454B", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#15", "original_value": "14", "normalized_value": "14", "normalized_unit": "inches (in)", "normalized_attribute": "roof_curb_height", "normalization_notes": "Assumed unit based on context (height).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#16", "original_value": "115V single phase powered convenience power outlet", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#17", "original_value": "Low leak enthalpy economizer", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#0", "original_value": "1/4\" = 1'-0\"", "normalized_value": "1/4\" = 1'-0\"", "normalized_unit": "scale", "normalized_attribute": "scale", "normalization_notes": "Preserved scale notation.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#1", "original_value": "8\"RD", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No clear unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M02.02#2", "original_value": "10\"RD", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No clear unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M02.02#3", "original_value": "Terminate exhaust duct to manufacturer provided vent cap.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#4", "original_value": "Supply / return duct to transition in vertical to RTU curb opening.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#5", "original_value": "Limit of 10' radius from any outdoor air intake.", "normalized_value": "10'", "normalized_unit": "feet", "normalized_attribute": "clearance_requirement", "normalization_notes": "Extracted numerical value with unit (feet).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M02.02#6", "original_value": "Economizer Hood", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#0", "original_value": "6'-0\"", "normalized_value": "6'-0\"", "normalized_unit": "feet and inches", "normalized_attribute": "max_length", "normalization_notes": "Preserved unit as feet and inches.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#1", "original_value": "Same as scheduled neck connection of diffuser", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#2", "original_value": "The flanged bellmouth fitting must be provided, where height of duct shown on plans can accommodate the fitting. Only where the duct height does not allow the installation of bellmouth fitting, provide straight fitting.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#3", "original_value": "1/8\" per foot", "normalized_value": "1/8\" per foot", "normalized_unit": "slope", "normalized_attribute": "slope", "normalization_notes": "Preserved slope notation.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#4", "original_value": "Not less than one pipe size large than the drain pan connection size", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#5", "original_value": "Top of vent nipple above top of AHU drain pan", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalized.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#6", "original_value": "Sanitary sewer", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#7", "original_value": "3/4\"", "normalized_value": "3/4\"", "normalized_unit": "inches", "normalized_attribute": "pipe_size", "normalization_notes": "Preserved unit as inches.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#8", "original_value": "1/8\" per foot", "normalized_value": "1/8\" per foot", "normalized_unit": "slope", "normalized_attribute": "slope", "normalization_notes": "Preserved slope notation.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#9", "original_value": "Gasketed and insulated roof curb supplied with unit", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#10", "original_value": "Angle iron frame all around roof opening", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#11", "original_value": "Ionization-type smoke detector as required", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#12", "original_value": "Cover opening with 1/2\" galvanized steel mesh screen", "normalized_value": "1/2\"", "normalized_unit": "inches", "normalized_attribute": "opening_protection", "normalization_notes": "Extracted numerical value with unit (inches).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M03.01#13", "original_value": "Spring isolations bolt to unit & plate", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#14", "original_value": "E.P.D.M. Membrane", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M03.01#15", "original_value": "12\" O.C.", "normalized_value": "12\"", "normalized_unit": "inches", "normalized_attribute": "fastener_spacing", "normalization_notes": "Extracted numerical value with unit (inches).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M03.01#16", "original_value": "12\"", "normalized_value": "12\"", "normalized_unit": "inches", "normalized_attribute": "vertical_clearance", "normalization_notes": "Preserved unit as inches.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.01#0", "original_value": "2023 NEC, 2021 IBC, 2021 IECC, NFPA, ETC.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.01#1", "original_value": "25/50 Flame and Smoke hazard ratings per ASTM E-84, NFPA 255 and UL 723", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.01#2", "original_value": "Penetrations between non-conditioned and conditioned spaces shall be sealed", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.01#3", "original_value": "Min 4\" high pad that extends a min of 4\" around the equipment", "normalized_value": "4\"", "normalized_unit": "inches", "normalized_attribute": "housekeeping_pad_dimensions", "normalization_notes": "Extracted numerical value with unit (inches).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "E01.02#0", "original_value": "480", "normalized_value": "480", "normalized_unit": "volts (V)", "normalized_attribute": "Base Voltage", "normalization_notes": "Assumed unit based on context (voltage).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "E01.02#1", "original_value": "3", "normalized_value": "3", "normalized_unit": "phase", "normalized_attribute": "Phases", "normalization_notes": "Assumed unit based on context (electrical phase).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "E01.02#2", "original_value": "35400", "normalized_value": "35400", "normalized_unit": "amps (A)", "normalized_attribute": "Utility Fault", "normalization_notes": "Assumed unit based on context (current).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "E01.02#3", "original_value": "500", "normalized_value": "500", "normalized_unit": "kVA", "normalized_attribute": "Base Total Power", "normalization_notes": "Assumed unit based on context (power).", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "E01.02#4", "original_value": "Provide low-voltage dry-type transformers that meet the minimum efficiency requirements of 2021 IECC table C405.8.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": "true", "normalization_confidence": "high"}, {"assertion_id": "E01.02#5", "original_value": "Provide as-built drawings for electrical power systems to the building owner.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#6", "original_value": "Type L-4 is a 2'x2' recessed indirect light fixture.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#7", "original_value": "Type L-4E is same as L-4 and includes an emergency battery backup.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "No unit or numerical value to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#8", "original_value": "5'-5\" AFF", "normalized_value": "5'-5\"", "normalized_unit": "feet and inches", "normalized_attribute": "mounting_height_AFF", "normalization_notes": "Preserved unit as feet and inches.", "source_text_preserved": true, "normalization_confidence": "high"}]} |