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
22 KiB
JSON
1 line
22 KiB
JSON
[{"assertion_id": "E02.01#5", "original_value": "1-1/4\"C with pullstring for data to ceiling space above rack system in inventory room.", "normalized_value": "1.25", "normalized_unit": "inches", "normalized_attribute": "conduit_size", "normalization_notes": "Normalized 1-1/4\" conduit size. 'C' denotes conduit.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.01#6", "original_value": "Provide power for building sign. Coordinate final location and mounting height prior to rough-in.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.01#7", "original_value": "Furnish and install #10 Cu ground with ground lug for connection to network racks.", "normalized_value": "10", "normalized_unit": "AWG", "normalized_attribute": "wire_gauge", "normalization_notes": "Normalized #10 to 10 AWG (American Wire Gauge). 'Cu' indicates Copper material.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.01#8", "original_value": "(3) 3\" conduit sleeves from 6\" below dropped ceiling to 6\" above dropped ceiling.", "normalized_value": "3", "normalized_unit": "inches", "normalized_attribute": "conduit_size", "normalization_notes": "Normalized the 3\" sleeve diameter. The assertion also specifies a quantity of 3 and placement 6\" below and 6\" above the dropped ceiling.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.01#9", "original_value": "Transformer to be suspended from structure at high level above accessible ceiling.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.02#0", "original_value": "1/4\" = 1'-0\"", "normalized_value": "1:48", "normalized_unit": null, "normalized_attribute": "scale_ratio", "normalization_notes": "Converted architectural scale to a dimensionless ratio (1'-0\" = 12 inches; 12 / 0.25 = 48).", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E03.01#0", "original_value": "Coordinate all light switch locations with architect/owner prior to rough-in.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E03.01#1", "original_value": "Connect all type 'X' emergency fixtures to nearest lighting circuit via non-switched hot leg. Provide fixtures with nickel cadmium battery.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E03.01#2", "original_value": "All lighting systems shall be tested to ensure proper calibration, adjustment, programming, and operation in accordance with IECC 2021 Section C408.3.", "normalized_value": "{\"code\": \"IECC\", \"year\": \"2021\", \"section\": \"C408.3\"}", "normalized_unit": null, "normalized_attribute": "code_reference", "normalization_notes": "Structured the code reference into components.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E03.01#3", "original_value": "Provide dimmer switch for control of sales area lighting. Coordinate final location with owner prior to rough-in.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#0", "original_value": "INVENTORY", "normalized_value": "INVENTORY", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value is already in a standard format.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#1", "original_value": "LOUNGE", "normalized_value": "LOUNGE", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value is already in a standard format.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#2", "original_value": "MEN'S RESTROOM", "normalized_value": "MEN'S RESTROOM", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value is already in a standard format.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#3", "original_value": "WOMEN'S RESTROOM", "normalized_value": "WOMEN'S RESTROOM", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value is already in a standard format.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#4", "original_value": "MANAGER'S OFFICE", "normalized_value": "MANAGER'S OFFICE", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value is already in a standard format.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#5", "original_value": "CLEANING SUPPLIES/STORAGE", "normalized_value": "CLEANING SUPPLIES/STORAGE", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value is already in a standard format.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#6", "original_value": "SALES AREA", "normalized_value": "SALES AREA", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value is already in a standard format.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#7", "original_value": "2 CAT.6 cables at 18 inches AFF", "normalized_value": "18", "normalized_unit": "inches", "normalized_attribute": "mounting_height", "normalization_notes": "Height is specified as Above Finished Floor (AFF). Quantity is 2.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#8", "original_value": "2 CAT.6 cables at 18 inches AFF", "normalized_value": "18", "normalized_unit": "inches", "normalized_attribute": "mounting_height", "normalization_notes": "Height is specified as Above Finished Floor (AFF). Quantity is 2.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#9", "original_value": "2 CAT.6 cables at 18 inches AFF", "normalized_value": "18", "normalized_unit": "inches", "normalized_attribute": "mounting_height", "normalization_notes": "Height is specified as Above Finished Floor (AFF). Quantity is 2.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#10", "original_value": "2 CAT.6 cables at 18 inches AFF", "normalized_value": "18", "normalized_unit": "inches", "normalized_attribute": "mounting_height", "normalization_notes": "Height is specified as Above Finished Floor (AFF). Quantity is 2.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#11", "original_value": "2 CAT.6 cables at 18 inches AFF", "normalized_value": "18", "normalized_unit": "inches", "normalized_attribute": "mounting_height", "normalization_notes": "Height is specified as Above Finished Floor (AFF). Quantity is 2.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#12", "original_value": "2 CAT.6 cables at 55 inches AFF", "normalized_value": "55", "normalized_unit": "inches", "normalized_attribute": "mounting_height", "normalization_notes": "Height is specified as Above Finished Floor (AFF). Quantity is 2. The '/H' from the source text may denote a specific type of outlet or orientation.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E04.01#13", "original_value": "2 CAT.6 cables at 38.5 inches AFF", "normalized_value": "38.5", "normalized_unit": "inches", "normalized_attribute": "mounting_height", "normalization_notes": "Height is specified as Above Finished Floor (AFF). Quantity is 2. The '/H' from the source text may denote a specific type of outlet or orientation.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#0", "original_value": "For an I.G. device, the conduit shall be suitable for a ground path or an additional ground shall be pulled to ground the box", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text describing grounding requirements for an Isolated Ground (I.G.) device.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#1", "original_value": "Isolated ground bar shall be insulated from enclosure or installed if not existing, when indicated", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#2", "original_value": "Tie wire", "normalized_value": "Tie wire", "normalized_unit": null, "normalized_attribute": "prohibited_material", "normalization_notes": "Value is a specific material name.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#3", "original_value": "25", "normalized_value": "0.25", "normalized_unit": null, "normalized_attribute": "future_capacity_ratio", "normalization_notes": "Converted percentage (25%) to a decimal ratio.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#4", "original_value": "3/4\" TO 1\"", "normalized_value": "0.75-1", "normalized_unit": "inches", "normalized_attribute": "size_range", "normalization_notes": "Normalized fractional inch range to decimal.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#5", "original_value": "1 1/4\" TO 6\"", "normalized_value": "1.25-6", "normalized_unit": "inches", "normalized_attribute": "size_range", "normalization_notes": "Normalized fractional inch range to decimal.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#6", "original_value": "3 Hour", "normalized_value": "3", "normalized_unit": "hours", "normalized_attribute": "fire_rating_duration", "normalization_notes": "Normalized fire rating duration value.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#7", "original_value": "SCHEDULE 40 BLACK STEEL PIPE SLEEVE", "normalized_value": "Sch 40", "normalized_unit": null, "normalized_attribute": "pipe_schedule", "normalization_notes": "Normalized 'SCHEDULE 40' to 'Sch 40'. The full value also specifies material (black steel pipe).", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#8", "original_value": "1", "normalized_value": "1", "normalized_unit": "inches", "normalized_attribute": "depth_min", "normalization_notes": "Unit 'inches' and attribute 'minimum depth' inferred from source text 'MINIMUM (1\") DEEP'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#9", "original_value": "6", "normalized_value": "6", "normalized_unit": "inches", "normalized_attribute": "extension_length", "normalization_notes": "Unit 'inches' inferred from source text 'EXTEND CONDUIT (6\") BEYOND WALL'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#10", "original_value": "4-11/16\" square, 2-5/8\" deep", "normalized_value": "{\"width\": 4.6875, \"height\": 4.6875, \"depth\": 2.625}", "normalized_unit": "inches", "normalized_attribute": "dimensions", "normalization_notes": "Normalized fractional dimensions to decimal and structured as a JSON object. 4-11/16 = 4.6875, 2-5/8 = 2.625.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#11", "original_value": "1", "normalized_value": "1", "normalized_unit": "inches", "normalized_attribute": "conduit_size_min", "normalization_notes": "Unit 'inches' and attribute 'minimum size' inferred from source text '1\" CONDUIT MINIMUM'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#12", "original_value": "6", "normalized_value": "6", "normalized_unit": "inches", "normalized_attribute": "stub_up_height", "normalization_notes": "Unit 'inches' inferred from source text 'STUB CONDUIT 6\" INTO CEILING SPACE'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#13", "original_value": "4'-0\"", "normalized_value": "48", "normalized_unit": "inches", "normalized_attribute": "spacing", "normalization_notes": "Converted feet and inches to inches (4' = 48\").", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#14", "original_value": "12", "normalized_value": "12", "normalized_unit": "inches", "normalized_attribute": "service_loop_min", "normalization_notes": "Unit 'inches' and attribute 'minimum' inferred from source text '...COIL A MINIMUM 12\" IN THE BACK BOX'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#15", "original_value": "Must be supported by wire hanger at each corner, independent of ceiling support system", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.01#16", "original_value": "24", "normalized_value": "24", "normalized_unit": "inches", "normalized_attribute": "separation_distance_min", "normalization_notes": "Unit 'inches' and attribute 'minimum' inferred from source text '...MUST BE SEPARATED BY A MIN. OF 24\" HORIZONTAL DISTANCE.'", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#0", "original_value": "Circuiting to all non dedicated electrical receptacles and switches are required to utilize parallel circuiting by the use of 'pig tails' to each device so that if an outlet is removed or fails electrical continuity the circuit will not be compromised.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#1", "original_value": "All electrical wiring must be properly spliced by twisting the wires together and use of approved and listed compression wire nuts for any wiring.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#2", "original_value": "Confirm switching requirement with the owner.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#3", "original_value": "Emergency lights on this circuit will receive a hot leg which is not routed via the lighting controller so that the emergency ballast has a constant hot to detect power loss.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#4", "original_value": "Grounding electrode conductor to ground to 3/4\" x 10' Cu rod or building steel.", "normalized_value": "{\"diameter\": 0.75, \"length\": 120}", "normalized_unit": "inches", "normalized_attribute": "dimensions", "normalization_notes": "Normalized ground rod dimensions to inches (3/4\" = 0.75\", 10' = 120\"). Material is Copper (Cu). Assumed 3/4\" diameter and 10' length, a standard size.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#5", "original_value": "6", "normalized_value": "6", "normalized_unit": "inches", "normalized_attribute": "pad_thickness", "normalization_notes": "Unit 'inches' inferred from source text '...ON 6\" HOUSEKEEPING PAD'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#6", "original_value": "3\" larger than the transformer (6\" at the rear)", "normalized_value": "{\"default\": 3, \"rear\": 6}", "normalized_unit": "inches", "normalized_attribute": "clearance", "normalization_notes": "Structured clearance values. Default clearance is 3 inches, rear clearance is 6 inches.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#7", "original_value": "Neoprene vibration isolation pad", "normalized_value": "Neoprene vibration isolation pad", "normalized_unit": null, "normalized_attribute": "vibration_isolation_material", "normalization_notes": "Value is a specific material/component name.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#8", "original_value": "Provide NEC working clearance in front of transformers.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Refers to a standard (National Electrical Code) without specifying a value.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#9", "original_value": "Min 1/4", "normalized_value": "0.25", "normalized_unit": "inches", "normalized_attribute": "fastener_size_min", "normalization_notes": "Normalized 1/4\" to 0.25 inches. Unit inferred from source text 'MIN 1/4\"'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#10", "original_value": "4", "normalized_value": "4", "normalized_unit": null, "normalized_attribute": "fastener_quantity", "normalization_notes": "Value is a quantity. Context from source text: '(4 REQUIRED)'.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#11", "original_value": "Secure to bottom cord of structure. Provide (2) 1-1/2\" x 1-1/2\" x 3/16\" angled cord to top cord within 6\" of point load. (Typ. for 4).", "normalized_value": "{\"width\": 1.5, \"height\": 1.5, \"thickness\": 0.1875}", "normalized_unit": "inches", "normalized_attribute": "angle_dimensions", "normalization_notes": "Normalized angle dimensions to decimal (1-1/2\"=1.5, 3/16\"=0.1875). Note indicates quantity of 2, placement within 6\" of load, and is typical for 4 locations.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#12", "original_value": "4 spring vibration isolators sized for weight of transformer.", "normalized_value": "4", "normalized_unit": null, "normalized_attribute": "quantity", "normalization_notes": "Value is a quantity.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#13", "original_value": "Anvil trapeze assembly model #45/#46", "normalized_value": "Anvil 45, Anvil 46", "normalized_unit": null, "normalized_attribute": "equipment_model_number", "normalization_notes": "Normalized model numbers into a comma-separated list.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E05.02#14", "original_value": "Verify support sizing and designed with project structural engineer prior to assembly.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "P01.01#0", "original_value": "Seal all penetrations through rated walls, floors and ceilings with a UL listed assembly to provide a rating equal to or greater than the rating of the wall, floor or ceiling.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "P01.01#1", "original_value": "Insulate all exposed drain piping and water supply piping beneath A.D.A. compliant lavatories & sinks with fully molded closed cell vinyl insulation kit as manufactured by Truebro, Brocar or McGuire.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text referencing ADA standards and specific manufacturers, but no quantifiable values.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "P01.01#2", "original_value": "Provide UL fire rated assemblies where pipes penetrate above grade floors. Provide UL fire rated assemblies were pipes penetrate fire rated walls.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Instructional text with no quantifiable values to normalize. 'UL fire rated' is qualitative.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "P01.01#3", "original_value": "Sanitary Waste and Vent (Below Slab Only): Schedule 40 PVC", "normalized_value": "Sch 40", "normalized_unit": null, "normalized_attribute": "pipe_schedule", "normalization_notes": "Normalized 'Schedule 40' to 'Sch 40'. Material is PVC for below-slab sanitary waste and vent.", "source_text_preserved": true, "normalization_confidence": "high"}] |