# Bridge Workflow Generation Guide

## Overview

This guide provides step-by-step instructions for AI agents to create new bridge workflow objects in OpenBrIM. Workflows provide structured, guided modeling processes for different bridge types, organizing components, loading, construction stages, and code checks into logical hierarchies.

**Purpose:**

* Generate new bridge workflow definitions for specific bridge types
* Adapt existing workflows to new configurations
* Maintain consistency with OpenBrIM workflow standards
* Properly organize WorkFlowItems with documentation links

**Key Concepts:**

* **Workflow Template**: Base Steel I Girder workflow used as starting point
* **Reusable Components**: Substructure, loading, and construction framework common across workflows
* **Bridge-Specific Items**: Superstructure components unique to each bridge type
* **Hierarchical Organization**: Logical grouping of components by category

## What's Common vs. What's Different

Understanding what sections to preserve versus customize is critical for efficient workflow generation.

### Sections That Are IDENTICAL Across All Bridge Types (Never Change)

These sections should be copied exactly from the Steel I Girder workflow:

1. **Bridge Geometry** - Complete section (Alignment, Support Lines, Insertion Point, Girder Layout)
2. **Properties** - Materials, Rebars, Strands, Sections, Bolt Property, Pushover (all common)
3. **Superstructure Attachments** - Barrier, Roadway, Rail (reusable for all bridge types)
4. **Substructure** - Complete section (Abutments, Bents, Pier, Foundation, Pile, Soil)
5. **Tendon** - Cap/Bent Tendon, Column Tendon (for PT substructure)
6. **Construction Framework** - Construction Stage object and all substructure construction/deconstruction
7. **Construction Changes** - Bearing Fixity Change, Pier Section Override, Material Change
8. **Loading** - Load Geometry Definitions, most load types, influence surfaces, combinations
9. **Combinations** - Result Extraction, Limit States, Load Combination Tables
10. **Substructure Code Check Templates** - All pier/foundation templates
11. **Substructure Code Checks** - All pier/foundation code checks (complete section)
12. **Reports (Most)** - Universal reports like Project Inputs, Seat/Slab Elevation Tables, Quantity Takeoff
13. **CADD (Most)** - Plan/Elevation, Cross Section, Substructure, Alignment Data, Framing Plan
14. **GIS** - Complete section (Map Tile, Digital Terrain Model)
15. **Organization** - Complete section (Object Group, Saved Reports, Cross-Project Data, Export)
16. **Standard Extensions** - GirderFEGroupAll, BackComp, IFC Schema

### Sections That Change Based on Bridge Type (Customize)

These sections require bridge-specific modifications:

1. **Superstructure** - Complete replacement:
   * **Bearings Group**: Same across types (reuse)
   * **Girders Group**: Steel vs Precast vs Box girder objects
   * **Stiffeners Group**: Steel only (remove for concrete)
   * **Splice Group**: Steel only (remove for precast)
   * **Connections Group**: Different connection types
   * **Cross-Frames/Bracing**: Different object types (use PIG suffix for precast)
   * **Diaphragm Group**: Precast only (add for concrete)
   * **Lateral Bracing**: Steel only (remove for precast)
   * **Deck Group**: Same structure, different deck object type
2. **Superstructure Construction** - Different construction objects:
   * Girder construction/erection objects
   * Cross-frame vs diaphragm construction
   * Temporary support (steel) vs railroad (precast)
3. **Superstructure Deconstruction** - Mirror of construction changes
4. **Loading - Element Loads** - Bridge-specific load objects:
   * Girder Load (different object types)
   * Other element loads remain the same
5. **Code Check Templates** - Superstructure only:
   * Steel: Steel Girder, Splice, Cross Frame, Shear Stud templates
   * Precast: Concrete Girder, Cross Frame templates
   * Substructure templates stay the same
6. **Superstructure Code Checks** - Complete replacement:
   * Steel: Steel Girder, Plate, Rolled Beam, Splice, Cross Frame code checks
   * Precast: Concrete Girder, Cross Frame code checks
7. **Load Rating** - Girder-specific:
   * Steel: Steel Girder Load Rating
   * Precast: Concrete Girder Load Rating
8. **Reports (Bridge-Specific)** - Some reports differ:
   * Steel: Steel Girder Analysis Summary Table
   * Precast: Girder Camber Diagram
   * Most reports stay the same
9. **Summary Report Objects** - Different summary report types and object collections

### Quick Reference: Preservation vs. Customization Ratio

* **\~80% of workflow is reusable** across all bridge types
* **\~20% requires customization** for specific bridge type
* Focus customization on: Superstructure, element loads, superstructure construction, superstructure code checks

## Workflow Object Structure

### Root Workflow Object

```xml
<O N="OBPWorkflow[BridgeType]" T="Project"
   Extends="Base_DesignSubUnits::v3"
   TransAlignRule="Right"
   Tags="@usastandard,workflow,release"
   Role="WorkFlow"
   ObjLabel="[Display Name]"
   Category="Project Templates:[Category]">

   <!-- Enumerations -->
   <O N="WFLoadTypeEnums" T="Group" Extends="OBPEnum_LoadType::v3"/>
   <O N="WFStateTypeEnums" T="Group" Extends="OBPEnum_States::v3"/>
   <O N="WFSoilMaterialEnums" T="Group" Extends="OBPEnum_SoilModels::v5"/>

   <!-- Workflow definition -->
   <O N="WF" T="WorkFlow" Label="[Workflow Label]">
      <!-- Hierarchical sections -->
   </O>
</O>
```

**Key Attributes:**

* `N`: Unique identifier (e.g., `OBPWorkflowGirderSteel`, `OBPWorkflowGirderPrecastI`)
* `ObjLabel`: User-friendly display name
* `Category`: Hierarchical path (e.g., `Project Templates:Steel Bridge Workflows`)
* `Tags`: Filterable metadata (`@usastandard,workflow,release`)
* `Role="WorkFlow"`: Marks as workflow object

## Step-by-Step Workflow Generation Process

### Step 1: Identify Bridge Type and Scope

**Determine:**

1. **Bridge Type**: Steel I-girder, Precast I-girder, Box girder, etc.
2. **Primary Differences**: What makes this workflow unique?
3. **Reusable Components**: What can be inherited from existing workflows?
4. **New Components**: What objects need to be created?

**Example:**

```
Bridge Type: Precast I Girder Bridge
Primary Differences:
  - Precast girders instead of steel
  - Different connections (no bolted splices)
  - Deck casting sequence differs
  - Prestressing tendons required
Reusable:
  - All substructure (piers, columns, foundations)
  - Most loading definitions
  - Construction stages framework
  - Code check templates structure
New:
  - Precast girder objects
  - Prestressing components
  - Concrete deck integration
```

### Step 2: Copy Base Workflow Template

Start with the Steel I Girder workflow as the foundation:

```xml
<O N="OBPWorkflowGirderSteel" T="Project"
   Extends="Base_DesignSubUnits::v3"
   TransAlignRule="Right"
   Tags="@usastandard,workflow,release"
   Role="WorkFlow"
   ObjLabel="Steel I Girder Bridge"
   Category="Project Templates:Steel Bridge Workflows">
```

**Modify:**

1. Change `N` attribute: `OBPWorkflow[NewBridgeType]`
2. Update `ObjLabel`: User-friendly name
3. Update `Category`: Appropriate bridge type category
4. Update `Tags`: Add bridge-type-specific tags

**Example:**

```xml
<O N="OBPWorkflowGirderPrecastI" T="Project"
   Extends="Base_DesignSubUnits::v3"
   TransAlignRule="Right"
   Tags="@usastandard,workflow,release,@precastIGirder"
   Role="WorkFlow"
   ObjLabel="Precast I Girder Bridge"
   Category="Project Templates:Concrete Bridge Workflows">
```

### Step 3: Preserve Standard Workflow Sections

**Always Keep (Reusable Across All Bridge Types):**

#### Bridge Geometry

```xml
<O T="Group" Label="Bridge Geometry">
  <O N="W1" T="WorkFlowItem" ObjectType="@Alignment" Label="Roadway Alignment"/>
  <O N="W2" T="WorkFlowItem" ObjectType="@OBPBridge" Label="Bridge Alignment" ObjectVersion="12"/>
  <O N="W3" T="WorkFlowItem" ObjectType="@OBPSupportLine" Label="Support Lines" ObjectVersion="9"/>
  <O N="W4" T="WorkFlowItem" ObjectType="@OBPInsertionPoint" Label="Insertion Point" ObjectVersion="10"/>
  <O N="W5" T="WorkFlowItem" ObjectType="@OBPGirderLayout" Label="Girder Layout" ObjectVersion="6"/>
</O>
```

**Rationale:** Bridge geometry is fundamental to all bridge types.

#### Properties (Partial)

```xml
<O T="Group" Label="Properties">
  <O N="W6" T="WorkFlowItem" ObjectType="@Material" Label="Materials"/>
  <O N="W7a" T="WorkFlowItem" ObjectType="@Rebar" Label="Rebars"/>
  <O N="W7" T="WorkFlowItem" ObjectType="@Section" Label="Sections"/>
  <!-- Bridge-type-specific properties added here -->
</O>
```

**Rationale:** All bridges need materials, rebars, and sections.

#### Substructure (Complete)

```xml
<O T="Group" Label="Substructure">
  <O N="Abutments" T="Group">
    <O T="WorkFlowItem" ObjectType="@OBPAbutmentCantileverL" Label="Cantilever L Abutment"/>
    <!-- All abutment types -->
  </O>
  <O T="WorkFlowItem" ObjectType="@OBPEndBent" Label="End/Interior Bent"/>
  <O T="Group" Label="Pier">
    <O T="WorkFlowItem" ObjectType="@OBPPierCap" Label="Pier Cap"/>
    <O T="WorkFlowItem" ObjectType="@OBPColumn" Label="Pier Column"/>
    <!-- All pier components -->
  </O>
  <O N="Foundation" T="Group">
    <O T="WorkFlowItem" ObjectType="@OBPFoundationRectangular" Label="Rectangular Footing"/>
    <O T="WorkFlowItem" ObjectType="@OBPFoundation" Label="Custom Footing"/>
  </O>
  <O N="Pile" T="Group">
    <O T="WorkFlowItem" ObjectType="@OBPPile" Label="Single Pile"/>
    <O T="WorkFlowItem" ObjectType="@OBPPileGroup" Label="Pile Layout"/>
  </O>
  <O N="Soil Structure Interaction" T="Group">
    <O T="WorkFlowItem" ObjectType="@OBP_SoilLayer" Label="Soil Layer"/>
    <O T="WorkFlowItem" ObjectType="@OBP_SoilSet" Label="Soil Set"/>
  </O>
</O>
```

**Rationale:** Substructure components are largely bridge-type-agnostic.

#### Loading (Most Items)

```xml
<O T="Group" Label="Loading">
  <O T="Group" Label="Load Geometry Definitions">
    <!-- Surface, Line, Point definitions - KEEP ALL -->
  </O>
  <O N="Loads" T="Group">
    <O T="Group" Label="Static Loads">
      <!-- Universal load types - KEEP ALL -->
    </O>
    <O T="Group" Label="Element Loads">
      <!-- Bridge-specific loads - MODIFY -->
      <O T="WorkFlowItem" ObjectType="@OBPDeckLoad" Label="Deck Load"/>
      <!-- Change girder load type based on bridge -->
      <O T="WorkFlowItem" ObjectType="@OBPBearingLoad" Label="Bearing Load"/>
      <!-- Keep remaining element loads -->
    </O>
    <O T="Group" Label="Inf. Surf Based LL/BR/CE">
      <!-- Live load analysis - KEEP ALL -->
    </O>
    <O T="Group" Label="Wind Load">
      <!-- Wind loads - KEEP ALL -->
    </O>
    <O T="Group" Label="Temperature Load">
      <!-- Temperature - KEEP ALL -->
    </O>
    <O T="Group" Label="Prestressing Load">
      <!-- Add/remove based on bridge type -->
    </O>
    <O T="Group" Label="Water Load">
      <!-- KEEP ALL -->
    </O>
    <O T="Group" Label="Construction Load">
      <!-- KEEP ALL -->
    </O>
    <O T="Group" Label="Dynamic Loads">
      <!-- KEEP ALL -->
    </O>
    <O T="Group" Label="Pushover Load">
      <!-- KEEP ALL -->
    </O>
  </O>
</O>
```

**Rationale:** Most loading types apply to all bridges; only element-specific loads change.

#### Combinations (Complete)

```xml
<O T="Group" Label="Combinations">
  <O T="WorkFlowItem" ObjectType="@OBPAnalysisCase" Label="Result Extraction (From Stages)"/>
  <O T="Group" Label="Design Load Combinations">
    <O T="WorkFlowItem" ObjectType="@OBPAASHTOLimitState" Label="Limit States"/>
    <O T="WorkFlowItem" ObjectType="@OBPAASHTOLimitStateTable" Label="Load Combination Table"/>
    <O T="WorkFlowItem" ObjectType="@OBPLoadRatingCombination" Label="Load Rating Combination Table"/>
  </O>
</O>
```

**Rationale:** Load combinations follow AASHTO standards across all bridge types.

#### Reports (Partial)

```xml
<O T="Group" Label="Reports">
  <!-- Keep universal reports -->
  <O T="WorkFlowItem" ObjectType="@OBP_BearingCalculation" Label="Elastomeric Bearing Stiffness"/>
  <O T="WorkFlowItem" ObjectType="@OBP_ProjectsInput" Label="Project Inputs"/>
  <O T="WorkFlowItem" ObjectType="@OBPQuantityReport" Label="Quantity Takeoff Report"/>
  <O T="WorkFlowItem" ObjectType="@OBP_SeatElevationTable" Label="Seat Elevation Table"/>
  <O T="WorkFlowItem" ObjectType="@OBP_SlabElevationTable" Label="Slab Elevation Table"/>

  <!-- Remove/replace bridge-specific reports -->
</O>
```

#### CADD (Partial)

```xml
<O T="Group" Label="CADD">
  <!-- Keep universal CADD -->
  <O T="WorkFlowItem" ObjectType="@OBPCADDPlanAndElevation" Label="Plan and Elevation CADD"/>
  <O T="WorkFlowItem" ObjectType="@OBPCADDBridgeCrossSection" Label="Bridge Cross Section CADD"/>
  <O T="WorkFlowItem" ObjectType="@OBPCADDSubStructure" Label="Substructure CADD"/>
  <O T="WorkFlowItem" ObjectType="@OBPCADDAlignmentData" Label="Alignment Data CADD"/>

  <!-- Remove/replace bridge-specific CADD -->
</O>
```

#### GIS (Complete)

```xml
<O T="Group" Label="GIS">
  <O T="WorkFlowItem" ObjectType="@MapTile" Label="2D Map"/>
  <O T="WorkFlowItem" ObjectType="@DigitalTerrainModel" Label="Digital Terrain Model"/>
</O>
```

#### Organization (Complete)

```xml
<O T="Group" Label="Organization">
  <O T="WorkFlowItem" ObjectType="@OBPBridgeUnit" Label="Object Group"/>
  <O T="WorkFlowItem" ObjectType="@File" Label="Saved Reports"/>
  <O T="Group" Label="Cross-Project Data">
    <O T="WorkFlowItem" ObjectType="@OBPTransferObject" Label="Shared Objects"/>
    <O T="WorkFlowItem" ObjectType="@OBPTransferObjectPushover" Label="Shared Substructure"/>
    <O T="Group" Label="Analysis Results">
      <O T="WorkFlowItem" ObjectType="@OBPResultExtractionBearing" Label="Bearing Forces"/>
      <O T="WorkFlowItem" ObjectType="@OBPResultExtractionColumn" Label="Bottom of Column Forces"/>
    </O>
  </O>
</O>
```

### Step 4: Modify Bridge-Specific Sections

**Sections to Customize:**

#### Superstructure

Replace the entire superstructure section with bridge-type-specific components.

**Steel I Girder Superstructure (from base template):**

```xml
<O T="Group" Label="Superstructure">
  <O T="Group" Label="Bearings">
    <O T="WorkFlowItem" ObjectType="@OBPBearingSeat" Label="Bearing Seat"/>
    <O T="WorkFlowItem" ObjectType="@OBPBearingFixity" Label="FEA Bearing"/>
    <O T="WorkFlowItem" ObjectType="@OBPSteelElastomericBearing" Label="Steel Reinf. Elastomeric Bearing"/>
    <O T="WorkFlowItem" ObjectType="@OBPPotBearing" Label="Pot Bearing"/>
    <O T="WorkFlowItem" ObjectType="@OBPSingleRollerBearing" Label="Single Roller Bearing"/>
    <O T="WorkFlowItem" ObjectType="@OBPSlidingPlateBearing" Label="Sliding Plate Bearing"/>
  </O>
  <O T="Group" Label="Steel Girders">
    <O T="WorkFlowItem" ObjectType="@OBPGirderSteelIPlate" Label="Plate Girder"/>
    <O T="WorkFlowItem" ObjectType="@OBPGirderSteelIRolled" Label="Rolled Beam Girder"/>
  </O>
  <O T="Group" Label="Stiffeners">
    <O T="WorkFlowItem" ObjectType="@OBPTransverseStiffenerGirderIPlate" Label="Transverse Stiffener"/>
    <O T="WorkFlowItem" ObjectType="@OBPLongitudinalStiffenerGirderIPlate" Label="Longitudinal Stiffener"/>
    <O T="WorkFlowItem" ObjectType="@OBPBearingStiffenerGirderIPlate" Label="Bearing Stiffener"/>
  </O>
  <O T="Group" Label="Splice">
    <O T="WorkFlowItem" ObjectType="@OBPBoltedFieldSplice" Label="Bolted Field Splice"/>
  </O>
  <O T="Group" Label="Connections">
    <O T="WorkFlowItem" ObjectType="@OBPShearStuds" Label="Shear Stud"/>
    <O T="WorkFlowItem" ObjectType="@OBPShearPlate" Label="Shear Plate"/>
    <O T="WorkFlowItem" ObjectType="@OBPGussetPlate" Label="Gusset Plate"/>
  </O>
  <O T="Group" Label="Cross Frames">
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeKBot" Label="Cross-frame K Bot"/>
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeKTop" Label="Cross-frame K Top"/>
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeX" Label="Cross-frame X"/>
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeZ" Label="Cross-frame Z"/>
    <!-- More steel cross-frame types -->
  </O>
  <O T="Group" Label="Lateral Bracing">
    <O T="WorkFlowItem" ObjectType="@OBPTopLateralBracing" Label="Top Lateral Bracing"/>
    <O T="WorkFlowItem" ObjectType="@OBPBottomLateralBracing" Label="Bottom Lateral Bracing"/>
  </O>
  <O T="Group" Label="Deck">
    <O T="WorkFlowItem" ObjectType="@OBPDeckCrossSection" Label="Cross-Section"/>
    <O T="WorkFlowItem" ObjectType="@OBPDeckConcrete" Label="Concrete Deck"/>
  </O>
</O>
```

**Precast I Girder Superstructure (actual from real workflow):**

```xml
<O T="Group" Label="Superstructure">
  <O T="Group" Label="Bearings">
    <!-- SAME bearing types as steel - bearings are material-independent -->
    <O T="WorkFlowItem" ObjectType="@OBPBearingSeat" Label="Bearing Seat" ObjectVersion="11"/>
    <O T="WorkFlowItem" ObjectType="@OBPBearingFixity" Label="FEA Bearing" ObjectVersion="9"/>
    <O T="WorkFlowItem" ObjectType="@OBPSteelElastomericBearing" Label="Steel Reinf. Elastomeric Bearing" ObjectVersion="17"/>
    <O T="WorkFlowItem" ObjectType="@OBPPotBearing" Label="Pot Bearing" ObjectVersion="12"/>
    <O T="WorkFlowItem" ObjectType="@OBPSingleRollerBearing" Label="Single Roller Bearing" ObjectVersion="11"/>
    <O T="WorkFlowItem" ObjectType="@OBPSlidingPlateBearing" Label="Sliding Plate Bearing" ObjectVersion="12"/>
  </O>
  <O T="Group" Label="Girders">
    <!-- SINGLE girder type - Precast I Girder -->
    <O T="WorkFlowItem" ObjectType="@OBPGirderPrecastI" Label="Precast I Girder" ObjectVersion="18"/>
  </O>
  <O T="Group" Label="Connections">
    <!-- NO bolted splices, NO shear plates for precast -->
    <O T="WorkFlowItem" ObjectType="@OBPGussetPlate" Label="Gusset Plate" ObjectVersion="6"/>
  </O>
  <O T="Group" Label="Diaphragm">
    <!-- Precast uses diaphragms instead of steel cross-frames -->
    <O T="WorkFlowItem" ObjectType="@OBPBracingCustom" Label="Custom Diaphragm" ObjectVersion="18"/>
    <O T="WorkFlowItem" ObjectType="@OBPConnectionDiaphragmPrecastI" Label="Continuity Diaphragm" ObjectVersion="7"/>
    <O T="WorkFlowItem" ObjectType="@OBPEndDiaphragmPrecastI" Label="End Diaphragm" ObjectVersion="6"/>
    <O T="WorkFlowItem" ObjectType="@OBPDiaphragmXType2SplicedI" Label="Diaphragm X (w/o Top Chord)" ObjectVersion="12"/>
  </O>
  <O T="Group" Label="Bracing">
    <!-- Precast cross-frames have PIG suffix -->
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeKBotPIG" Label="Cross-frame K Bot" ObjectVersion="8"/>
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeKTopPIG" Label="Cross-frame K Top" ObjectVersion="7"/>
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeXPIG" Label="Cross-frame X" ObjectVersion="7"/>
    <O T="WorkFlowItem" ObjectType="@OBPCrossframeKTopEndPIG" Label="End Cross-Frame" ObjectVersion="7"/>
  </O>
  <O T="Group" Label="Deck">
    <!-- SAME structure, DIFFERENT deck object type -->
    <O T="WorkFlowItem" ObjectType="@OBPDeckCrossSection" Label="Cross-Section" ObjectVersion="3"/>
    <O T="WorkFlowItem" ObjectType="@OBPDeckConcretePrecastIGirder" Label="Concrete Deck" ObjectVersion="20"/>
  </O>
</O>
```

**Critical Differences - Steel vs Precast:**

| Component           | Steel I Girder                           | Precast I Girder                      |
| ------------------- | ---------------------------------------- | ------------------------------------- |
| **Bearings**        | Same                                     | Same (reuse completely)               |
| **Girder Types**    | Multiple (Plate, Rolled)                 | Single (Precast I)                    |
| **Stiffeners**      | YES (Transverse, Longitudinal, Bearing)  | NO (not needed for concrete)          |
| **Splices**         | YES (Bolted Field Splice)                | NO (precast units are continuous)     |
| **Connections**     | Shear Studs, Shear Plates, Gusset Plates | Gusset Plates only                    |
| **Diaphragm Group** | NO separate group                        | YES (Custom, Continuity, End, X-Type) |
| **Cross-Frames**    | Steel-specific objects                   | PIG-suffixed objects                  |
| **Lateral Bracing** | YES (Top/Bottom)                         | NO (not typical for precast)          |
| **Deck Object**     | `@OBPDeckConcrete`                       | `@OBPDeckConcretePrecastIGirder`      |

#### Properties

The Properties section is ALMOST IDENTICAL between Steel and Precast workflows.

**Common Elements (Keep in all workflows):**

```xml
<O T="Group" Label="Properties">
  <O T="WorkFlowItem" ObjectType="@Material" Label="Materials"/>
  <O T="WorkFlowItem" ObjectType="@Rebar" Label="Rebars"/>
  <O T="WorkFlowItem" ObjectType="@Strand" Label="Strands"/>  <!-- For prestressing -->
  <O T="WorkFlowItem" ObjectType="@Section" Label="Sections"/>
  <O T="WorkFlowItem" ObjectType="@OBPBoltProp" Label="Bolt Property"/>  <!-- For bolted connections -->
  <O T="Group" Label="Pushover">
    <O T="WorkFlowItem" ObjectType="@OBPHingeProperty" Label="Hinge Property"/>
    <O T="WorkFlowItem" ObjectType="@OBPMomentCurvatureReport" Label="Moment-Curvature Report"/>
  </O>
</O>
```

**Note:** Both Steel and Precast workflows include Strands (for post-tensioning in steel or prestressing in precast) and Bolt Properties (for bolted connections in both types). The Properties section is largely reusable across bridge types.

#### Tendon Section

The Tendon section is COMMON to both Steel and Precast workflows (for substructure post-tensioning).

**Keep in All Workflows:**

```xml
<O T="Group" Label="Tendon">
  <O T="WorkFlowItem" ObjectType="@OBPTendonCap" Label="Cap/Bent Tendon" ObjectVersion="8"/>
  <O T="WorkFlowItem" ObjectType="@OBPTendonColumn" Label="Column Tendon" ObjectVersion="8"/>
</O>
```

**Note:** Even steel girder bridges may have post-tensioned concrete pier caps or columns, so this section is typically included in all bridge workflows. For prestressed girders, prestressing is handled through Strand properties, not the Tendon section.

#### Construction Sections

The Construction section structure is IDENTICAL between Steel and Precast. Only specific object types within construction change.

**Construction Framework (Same for All Bridge Types):**

```xml
<O N="Construction" T="Group">
  <O T="WorkFlowItem" ObjectType="@OBPConstructionStage" Label="Construction Stage"/>
  <O N="Superstructure Construction" T="Group">
    <!-- Bridge-specific construction items -->
  </O>
  <O N="Substructure Construction" T="Group">
    <!-- IDENTICAL across all bridge types - KEEP AS IS -->
    <O T="WorkFlowItem" ObjectType="@OBPConstructionPierCapComplete" Label="Pier Cap/Bent Construction (Complete)"/>
    <O T="WorkFlowItem" ObjectType="@OBPConstructionPierCapPartial" Label="Pier Cap/Bent Construction (Partial)"/>
    <O T="WorkFlowItem" ObjectType="@OBPConstructionPierColumn" Label="Pier Column Construction"/>
    <O T="WorkFlowItem" ObjectType="@OBPPylonBracingConstruction" Label="Pier Column Bracing Construction"/>
    <O T="WorkFlowItem" ObjectType="@OBPConstructionFoundationComplete" Label="Foundation Construction (Complete)"/>
    <O T="WorkFlowItem" ObjectType="@OBPConstructionFoundationPartial" Label="Foundation Construction (Partial)"/>
    <O T="WorkFlowItem" ObjectType="@OBPConstructionPile" Label="Pile Construction"/>
  </O>
  <O N="Superstructure Deconstruction" T="Group">
    <!-- Bridge-specific deconstruction items -->
  </O>
  <O N="Substructure Deconstruction" T="Group">
    <!-- IDENTICAL across all bridge types - KEEP AS IS -->
  </O>
  <O N="Changes" T="Group">
    <!-- IDENTICAL across all bridge types - KEEP AS IS -->
    <O T="WorkFlowItem" ObjectType="@OBPChangeSuperstructureConnection" Label="Bearing Fixity Change"/>
    <O T="WorkFlowItem" ObjectType="@OBPChangePierSection" Label="Pier Section Property Override"/>
    <O T="WorkFlowItem" ObjectType="@OBPChangeMaterial" Label="Material Change"/>
  </O>
</O>
```

**Superstructure Construction - Only These Items Change:**

**Steel I Girder:**

```xml
<O N="Superstructure Construction" T="Group">
  <O T="WorkFlowItem" ObjectType="@OBPConstructionSuperstructureConnection" Label="Bearing Construction"/>
  <O T="WorkFlowItem" ObjectType="@OBPGirderConstructionComplete" Label="Girder/Cross Frame Erection (Complete)"/>
  <O T="WorkFlowItem" ObjectType="@OBPGirderErection" Label="Girder Erection (Partial)"/>
  <O T="WorkFlowItem" ObjectType="@OBPDeckCasting" Label="Deck Construction"/>
  <O T="WorkFlowItem" ObjectType="@OBPSuperstructureAttachmentConstruction" Label="Superstructure Attachment Construction"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemporarySupportConstruction" Label="Temporary Support Construction"/>
</O>
```

**Precast I Girder:**

```xml
<O N="Superstructure Construction" T="Group">
  <O T="WorkFlowItem" ObjectType="@OBPConstructionSuperstructureConnection" Label="Bearing Construction" ObjectVersion="6"/>
  <O T="WorkFlowItem" ObjectType="@OBPConcreteGirderConstructionComplete" Label="Girder and Diaphragm Construction" ObjectVersion="6"/>
  <O T="WorkFlowItem" ObjectType="@OBPConstructionDiaphragmPartial" Label="Diaphragm Construction (Partial)" ObjectVersion="3"/>
  <O T="WorkFlowItem" ObjectType="@OBPDeckCasting" Label="Deck Construction" ObjectVersion="7"/>
  <O T="WorkFlowItem" ObjectType="@OBPSuperstructureAttachmentConstruction" Label="Superstructure Attachment Construction" ObjectVersion="5"/>
  <O T="WorkFlowItem" ObjectType="@OBPRailroadConstruction" Label="Rail Construction" ObjectVersion="5"/>
</O>
```

**Key Differences in Superstructure Construction:**

* Steel uses separate girder and cross-frame erection objects
* Precast combines girder and diaphragm construction
* Precast includes Railroad construction item
* Steel includes Temporary Support construction

**Important:** Substructure Construction, Substructure Deconstruction, and Changes sections are IDENTICAL across all bridge types - always keep them unchanged.

#### Code Check Templates and Code Checks

There are THREE separate sections for code checks: Templates, Superstructure Code Checks, and Substructure Code Checks.

**Templates for Code Check and Load Rating - Superstructure Changes Only:**

**Steel I Girder:**

```xml
<O T="Group" Label="Templates for Code Check and Load Rating">
  <!-- Superstructure Templates - Steel-specific -->
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_SteelIGirderCodeCheck" Label="Steel I Girder Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_SteelIGirderLoadRating" Label="Steel I Girder Load Rating"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_SpliceCodeCheck" Label="Field Splice Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_CrossFrameCodeCheck" Label="Cross Frame Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_ShearStudCodeCheck" Label="Shear Stud Code Check"/>

  <!-- Substructure Templates - IDENTICAL across all bridge types -->
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_ConcretePierCapCodeCheck" Label="Concrete Pier Cap Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_ConcretePierCodeCheck" Label="Concrete Pier Column Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_PileCapCodeCheck" Label="Pier Footing Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_PileCapacityCheck" Label="Pile Capacity Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_PileInteraction" Label="Pile Interaction"/>
</O>
```

**Precast I Girder:**

```xml
<O T="Group" Label="Templates for Code Check and Load Rating">
  <!-- Superstructure Templates - Concrete-specific -->
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_ConcreteGirderLoadRatingTemplate" Label="Concrete Girder Load Rating" ObjectVersion="6"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_PrestressedIGirderCodeCheck" Label="(*deprecated*) Prestressed I Girder Code Check" ObjectVersion="4" Deprecated="1"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_ConcreteGirderCodeCheck" Label="Concrete Girder Code Check" ObjectVersion="8"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_CrossFrameCodeCheck" Label="Cross Frame Code Check" ObjectVersion="7"/>
  <!-- NO field splice template for precast -->

  <!-- Substructure Templates - IDENTICAL across all bridge types -->
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_ConcretePierCapCodeCheck" Label="Concrete Pier Cap Code Check" ObjectVersion="5"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_ConcretePierCodeCheck" Label="Concrete Pier Column Code Check" ObjectVersion="4"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_PileCapCodeCheck" Label="Pier Footing Code Check" ObjectVersion="7"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_PileCapacityCheck" Label="Pile Capacity Check" ObjectVersion="4"/>
  <O T="WorkFlowItem" ObjectType="@OBPTemplate_PileInteraction" Label="Pile Interaction" ObjectVersion="2"/>
</O>
```

**Superstructure Code Checks - Change Based on Bridge Type:**

**Steel I Girder:**

```xml
<O T="Group" Label="Superstructure Code Checks">
  <O T="WorkFlowItem" ObjectType="@OBPDR_SteelIGirderCodeCheck" Label="Steel I Girder Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_PlateGirderCodeCheck" Label="Plate Girder Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_RolledBeamCodeCheck" Label="Rolled Beam Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_SpliceCodeCheck" Label="Field Splice Code Check"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_CrossFrameCodeCheck" Label="Cross Frame Code Check"/>
</O>
```

**Precast I Girder:**

```xml
<O T="Group" Label="Superstructure Code Checks">
  <O T="WorkFlowItem" ObjectType="@OBPDR_PrestressedIGirderCodeCheck" Label="(*deprecated*) Prestressed I Girder Code Check" ObjectVersion="7" Deprecated="1"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_ConcreteGirderCodeCheck" Label="Concrete Girder Code Check" ObjectVersion="19"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_CrossFrameCodeCheck" Label="Cross Frame Code Check (AASHTO)" ObjectVersion="16"/>
</O>
```

**Substructure Code Checks - IDENTICAL Across All Bridge Types:**

```xml
<O T="Group" Label="Substructure Code Checks">
  <!-- KEEP EXACTLY AS IS - Never change for different bridge types -->
  <O T="WorkFlowItem" ObjectType="@OBPDR_PierCapCodeCheck" Label="(*deprecated*) Pier Cap Code Check" ObjectVersion="6" Deprecated="1"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_ConcretePierCapCodeCheck" Label="Concrete Pier Cap Code Check" ObjectVersion="22"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_PierCodeCheck" Label="(*deprecated*) Pier Column Code Check" ObjectVersion="6" Deprecated="1"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_ConcretePierCodeCheck" Label="Concrete Pier Column Code Check" ObjectVersion="17"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_PileCapCodeCheck" Label="Pier Footing Code Check" ObjectVersion="17"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_PileCapacityCheck" Label="Pile Capacity Check" ObjectVersion="11"/>
  <O T="WorkFlowItem" ObjectType="@OBPDR_PileInteraction" Label="Pile Interaction" ObjectVersion="2"/>
</O>
```

**Load Rating - Change Based on Bridge Type:**

**Steel I Girder:**

```xml
<O T="Group" Label="Load Rating">
  <O T="WorkFlowItem" ObjectType="@OBPDR_SteelIGirderLoadRating" Label="Steel I Girder Load Rating"/>
</O>
```

**Precast I Girder:**

```xml
<O T="Group" Label="Load Rating">
  <O T="WorkFlowItem" ObjectType="@OBPDR_ConcreteGirderLoadRating" Label="Concrete Girder Load Rating" ObjectVersion="20"/>
</O>
```

**Important:** Always keep the Substructure Code Checks section identical - it's reusable across all bridge types since substructure is typically concrete regardless of superstructure type.

### Step 5: Add Documentation URLs

Every WorkFlowItem should have a `DocumentURL` attribute pointing to Confluence documentation.

**URL Pattern:**

```
https://docs.openbrim.org/templates/<bridge-workflow>/<group-path>/<page-slug>
```

The path mirrors the folder structure under `docs/documentation/templates/` in the repo (kebab-case, no `.md` extension).

**Bridge Type Abbreviations:**

* `SIG`: Steel I Girder
* `PIG`: Precast I Girder
* `SPIG`: Spliced I Girder
* `CBG`: Concrete Box Girder
* `TUBG`: Tub Girder

**Examples:**

```xml
<!-- Steel I Girder -->
<O T="WorkFlowItem"
   ObjectType="@OBPGirderSteelIPlate"
   Label="Plate Girder"
   ObjectVersion="15"
   DocumentURL="https://docs.openbrim.org/templates/steel-i-girder-bridge-workflow/superstructure-sig/steel-girders-sig/plate-girder-sig"/>

<!-- Precast I Girder -->
<O T="WorkFlowItem"
   ObjectType="@OBPGirderPrecastI"
   Label="Precast I Girder"
   ObjectVersion="18"
   DocumentURL="https://docs.openbrim.org/templates/precast-i-girder-bridge-workflow/superstructure-pig/girders-pig/precast-i-girder-pig"/>
```

**For New Objects Without Documentation:**

* Omit `DocumentURL` attribute initially
* Create placeholder documentation page
* Add URL once documentation is published

### Step 6: Update Object Versions

Include `ObjectVersion` attributes for all WorkFlowItems:

**Purpose:**

* Track compatibility between workflow and object definitions
* Indicate minimum required object version
* Help detect outdated references

**Example:**

```xml
<O T="WorkFlowItem"
   ObjectType="@OBPGirderPrecastI"
   Label="Precast I Girder"
   ObjectVersion="18"/>
```

**Versioning Guidelines:**

* Use current object version from library
* Update when object interface changes significantly
* Increment when breaking changes occur

### Step 7: Organize Workflow Hierarchy

**Standard Organization Pattern:**

```
Workflow Root
├── Bridge Geometry
├── Properties
├── Superstructure
│   ├── Bearings
│   ├── [Girder Type]
│   ├── [Connections/Stiffeners/etc.]
│   ├── [Cross Frames/Bracing/Diaphragm]
│   └── Deck
├── Superstructure Attachments
├── Substructure
│   ├── Abutments
│   ├── Bents
│   ├── Pier
│   ├── Foundation
│   ├── Pile
│   └── Soil Structure Interaction
├── Tendon (if applicable)
├── Construction
│   ├── Construction Stages
│   ├── Superstructure Construction
│   ├── Substructure Construction
│   ├── Superstructure Deconstruction
│   ├── Substructure Deconstruction
│   └── Changes
├── Loading
│   ├── Load Geometry Definitions
│   ├── Loads (Static, Element, Live Load, Wind, etc.)
├── Combinations
├── Templates for Code Check and Load Rating
├── [Superstructure] Code Checks
├── Substructure Code Checks
├── Load Rating
├── Reports
├── CADD
├── GIS
└── Organization
```

**Group Naming:**

* Use `T="Group"` with `Label` attribute
* Keep labels descriptive and consistent
* Match existing workflow conventions

### Step 8: Add Summary Report Objects

At the end of the workflow, add summary report configuration:

```xml
<P N="[BridgeType]GirderGroup" V="[Bridge Type] Girder Code Check" T="Group"/>
<P N="ConcreteLRGirderGroup" V="Concrete Girder Load Rating Objects" T="Group"/>
<P N="PierCapCodeCheckGroup" V="Pier Cap Code Check Objects" T="Group"/>
<!-- More grouping parameters -->

<O N="[Bridge Type] Workflow Summary Report Objects" T="Group">
  <O N="SR" T="OBP_SummaryReport[BridgeType]" Version="15">
    <P N="[BridgeType]CodeCheckObjs" V="objs('',[BridgeType]GirderGroup,'OBPDR_[Type]CodeCheck')"/>
    <P N="[BridgeType]LoadRatingObjs" V="objs('',ConcreteLRGirderGroup,'OBPDR_[Type]LoadRating')"/>
    <!-- More object collections -->
  </O>
</O>
```

**Example - Precast I Girder:**

```xml
<P N="PrestressedIGirderGroup" V="Prestressed I Girder Code Check" T="Group"/>
<P N="ConcreteGirderGroup" V="Concrete Girder Code Check" T="Group"/>
<P N="ConcreteLRGirderGroup" V="Concrete Girder Load Rating Objects" T="Group"/>

<O N="Precast I Girder Workflow Summary Report Objects" T="Group">
  <O N="SR" T="OBP_SummaryReportGirderPrecastI" Version="15">
    <P N="ConcreteGirderCodeCheckObjs" V="objs('',ConcreteGirderGroup,'OBPDR_ConcreteGirderCodeCheck')"/>
    <P N="ConcreteGirderLoadRatingCodeCheckObjs" V="objs('',ConcreteLRGirderGroup,'OBPDR_ConcreteGirderLoadRating')"/>
    <P N="CamberModelObjs" V="objs('',NULL,'OBPDR_PrecastIGirderCamber')"/>
    <!-- Substructure objects - same across all bridges -->
    <P N="PierCodeCheckObjs" V="objs('',PierCodeCheckGroup,'OBPDR_PierCodeCheck')"/>
    <P N="ConcretePierCodeCheckObjs" V="objs('',ConcretePierCodeCheckGroup,'OBPDR_ConcretePierCodeCheck')"/>
    <P N="PierCapCodeCheckObjs" V="objs('',PierCapCodeCheckGroup,'OBPDR_PierCapCodeCheck')"/>
    <!-- More collections -->
  </O>
</O>
```

### Step 9: Add Standard Extensions and Compatibility

At the end of the workflow, add standard compatibility objects:

```xml
<O N="GirderFEGroupAll" T="FEGroup"/>
<O N="BackComp" T="Group" Extends="OBPBaseBackwardsCompatibility::v8" Override="1" Scoped="1"/>
```

**Purpose:**

* `GirderFEGroupAll`: FE analysis group for all girders
* `BackComp`: Backwards compatibility layer

### Step 10: Validate and Test Workflow

**Validation Checklist:**

1. **Metadata Complete:**
   * [ ] Unique workflow name (`N` attribute)
   * [ ] User-friendly label (`ObjLabel`)
   * [ ] Correct category
   * [ ] Appropriate tags
2. **Enumerations Present:**
   * [ ] `WFLoadTypeEnums`
   * [ ] `WFStateTypeEnums`
   * [ ] `WFSoilMaterialEnums`
3. **Hierarchy Organized:**
   * [ ] Bridge Geometry section
   * [ ] Properties section
   * [ ] Superstructure section (customized)
   * [ ] Substructure section (complete)
   * [ ] Loading section
   * [ ] Construction section (customized)
   * [ ] Code checks section (customized)
   * [ ] Reports section
   * [ ] CADD/GIS sections
   * [ ] Organization section
4. **Documentation URLs:**
   * [ ] All WorkFlowItems have `DocumentURL` or are placeholders
   * [ ] URLs follow correct pattern
   * [ ] Bridge type suffix correct (SIG, PIG, etc.)
5. **Object Versions:**
   * [ ] All WorkFlowItems have `ObjectVersion`
   * [ ] Versions match library objects
6. **Bridge-Specific Changes:**
   * [ ] Superstructure girder types updated
   * [ ] Connections appropriate for bridge type
   * [ ] Bracing/diaphragm types correct
   * [ ] Deck object type correct
   * [ ] Element loads match bridge type
   * [ ] Construction sequence objects correct
   * [ ] Code check templates match bridge type
   * [ ] Code check objects match bridge type
   * [ ] Reports specific to bridge type updated
7. **Summary Report:**
   * [ ] Summary report object defined
   * [ ] Object collection parameters defined
   * [ ] `objs()` calls reference correct types
8. **Compatibility:**
   * [ ] `GirderFEGroupAll` defined
   * [ ] `BackComp` extends latest version

## Common Workflow Patterns

### Pattern 1: Superstructure Component Differences

| Component Category  | Steel I Girder                           | Precast I Girder                                   |
| ------------------- | ---------------------------------------- | -------------------------------------------------- |
| **Girder Objects**  | Plate Girder, Rolled Beam Girder         | Precast I Girder                                   |
| **Stiffeners**      | Transverse, Longitudinal, Bearing        | None (not applicable)                              |
| **Splices**         | Bolted Field Splice                      | None (continuous precast units)                    |
| **Connections**     | Shear Studs, Shear Plates, Gusset Plates | Gusset Plates only                                 |
| **Cross-Frames**    | Standard objects (K-Bot, K-Top, X, Z)    | PIG-suffixed objects (K-Bot-PIG, K-Top-PIG, X-PIG) |
| **Diaphragms**      | None (separate group)                    | Dedicated group (Custom, Continuity, End, X-Type)  |
| **Lateral Bracing** | Top and Bottom Lateral Bracing           | None (not typical for precast)                     |
| **Deck Type**       | `@OBPDeckConcrete`                       | `@OBPDeckConcretePrecastIGirder`                   |

### Pattern 2: Construction Object Differences

**Superstructure Construction Only (Substructure is identical):**

| Construction Item | Steel I Girder                       | Precast I Girder              |
| ----------------- | ------------------------------------ | ----------------------------- |
| **Bearing**       | Same                                 | Same                          |
| **Girder**        | Separate erection (Complete/Partial) | Combined girder & diaphragm   |
| **Diaphragm**     | Included with cross-frame            | Separate partial construction |
| **Deck**          | Same                                 | Same                          |
| **Attachments**   | Same                                 | Same                          |
| **Special**       | Temporary Support Construction       | Railroad Construction         |

### Pattern 3: Code Check Pattern (3-Tier System)

**Tier 1: Templates for Code Check and Load Rating**

* Superstructure templates: Change based on bridge type
* Substructure templates: IDENTICAL across all types

**Tier 2: Superstructure Code Checks**

* Steel: Steel Girder, Plate, Rolled Beam, Splice, Cross Frame
* Precast: Concrete Girder, Cross Frame
* Complete replacement between bridge types

**Tier 3: Substructure Code Checks**

* IDENTICAL across all bridge types (never change)
* Pier Cap, Pier Column, Footing, Pile Capacity, Pile Interaction

### Pattern 4: Loading Differences

**Element Loads - Only Girder Load Changes:**

```xml
<!-- Steel I Girder -->
<O T="WorkFlowItem" ObjectType="@OBPGirderLoadSteelI" Label="Girder Load" ObjectVersion="X"/>

<!-- Precast I Girder -->
<O T="WorkFlowItem" ObjectType="@OBPGirderLoadPrecastI" Label="Girder Load" ObjectVersion="6"/>

<!-- All other element loads stay the same -->
<O T="WorkFlowItem" ObjectType="@OBPDeckLoad" Label="Deck Load"/>
<O T="WorkFlowItem" ObjectType="@OBPBearingLoad" Label="Bearing Load"/>
<O T="WorkFlowItem" ObjectType="@OBPPierCapPointLoad" Label="Pier Cap Point Load"/>
<O T="WorkFlowItem" ObjectType="@OBPColumnLoad" Label="Column Load"/>
<O T="WorkFlowItem" ObjectType="@OBPFootingPointLoad" Label="Footing Point Load"/>
<O T="WorkFlowItem" ObjectType="@OBPPileLoad" Label="Pile Load"/>
```

**All Other Loading Sections Identical:**

* Load Geometry Definitions (Surface, Line, Point)
* Static Loads (Surface, Line, Point, Vehicle)
* Influence Surface Based Live Load
* Wind Load (on structure and live load)
* Temperature Load
* Prestressing Load (if applicable)
* Water Load
* Construction Load
* Dynamic Loads (Eigenvalue, Response Spectrum)
* Pushover Load

## Workflow Generation Checklist

When creating a new bridge workflow, use this checklist:

### Phase 1: Setup

* [ ] Copy Steel I Girder workflow as base
* [ ] Update root object name (`N` attribute)
* [ ] Update `ObjLabel` and `Category`
* [ ] Update `Tags` with bridge-type-specific tags
* [ ] Keep enumeration extends

### Phase 2: Preserve Standards

* [ ] Keep entire Bridge Geometry section
* [ ] Keep Materials, Rebars, Sections in Properties
* [ ] Keep entire Substructure section
* [ ] Keep Load Geometry Definitions
* [ ] Keep Static Loads (universal types)
* [ ] Keep Inf. Surf Based LL/BR/CE
* [ ] Keep Wind Load section
* [ ] Keep Temperature, Water, Construction loads
* [ ] Keep Dynamic and Pushover loads
* [ ] Keep entire Combinations section
* [ ] Keep GIS section
* [ ] Keep Organization section

### Phase 3: Customize Superstructure

* [ ] Update Girder section (object type)
* [ ] Add/remove Stiffeners section
* [ ] Update Connections section
* [ ] Update Cross-Frames/Bracing/Diaphragm section
* [ ] Update Deck section (if needed)
* [ ] Add Temporary Supports (if needed)

### Phase 4: Customize Properties

* [ ] Add/remove Strand property (for prestressing)
* [ ] Keep/remove Bolt Property
* [ ] Keep Pushover subsection

### Phase 5: Add/Remove Tendon

* [ ] Add Tendon section for prestressed bridges
* [ ] Remove for non-prestressed bridges

### Phase 6: Update Construction

* [ ] Update Superstructure Construction items
* [ ] Update Superstructure Deconstruction items
* [ ] Keep Substructure Construction/Deconstruction

### Phase 7: Update Loading

* [ ] Update Element Loads (girder load type)
* [ ] Add/remove Prestressing Load section
* [ ] Keep all other load types

### Phase 8: Update Code Checks

* [ ] Update Templates section (girder type)
* [ ] Update Superstructure Code Checks section
* [ ] Keep Substructure Code Checks section
* [ ] Update Load Rating section

### Phase 9: Update Reports

* [ ] Keep universal reports
* [ ] Update bridge-specific reports
* [ ] Update CADD items (if needed)

### Phase 10: Finalize

* [ ] Add Documentation URLs to all items
* [ ] Add Object Versions to all items
* [ ] Create Summary Report object
* [ ] Add object grouping parameters
* [ ] Add GirderFEGroupAll
* [ ] Add BackComp extension

### Phase 11: Validate

* [ ] Run validation checklist
* [ ] Test workflow in OpenBrIM
* [ ] Verify all object types exist
* [ ] Check documentation links
* [ ] Confirm hierarchy is logical

## Best Practices

### 1. Consistency

**Use Standard Names:**

```xml
<!-- Good -->
<O N="OBPWorkflowGirderPrecastI" ...>
<O N="OBPWorkflowGirderSplicedI" ...>

<!-- Avoid -->
<O N="PrecastWorkflow" ...>
<O N="Workflow_Precast_Girder" ...>
```

### 2. Documentation

**Always Include DocumentURL:**

```xml
<!-- Good -->
<O T="WorkFlowItem"
   ObjectType="@OBPGirderPrecastI"
   Label="Precast I Girder"
   ObjectVersion="18"
   DocumentURL="https://docs.openbrim.org/templates/precast-i-girder-bridge-workflow/superstructure-pig/girders-pig/precast-i-girder-pig"/>

<!-- Incomplete -->
<O T="WorkFlowItem"
   ObjectType="@OBPGirderPrecastI"
   Label="Precast I Girder"/>
```

### 3. Hierarchy

**Maintain Logical Organization:**

```xml
<!-- Good: Hierarchical -->
<O T="Group" Label="Superstructure">
  <O T="Group" Label="Girders">
    <O T="WorkFlowItem" .../>
  </O>
  <O T="Group" Label="Deck">
    <O T="WorkFlowItem" .../>
  </O>
</O>

<!-- Avoid: Flat -->
<O T="Group" Label="Superstructure">
  <O T="WorkFlowItem" Label="Girder" .../>
  <O T="WorkFlowItem" Label="Deck" .../>
  <O T="WorkFlowItem" Label="Bearing" .../>
</O>
```

### 4. Reusability

**Don't Duplicate Substructure:**

```xml
<!-- Good: Reuse entire substructure -->
<O T="Group" Label="Substructure">
  <!-- Complete section from base workflow -->
</O>

<!-- Avoid: Customizing substructure unnecessarily -->
<O T="Group" Label="Substructure">
  <O T="WorkFlowItem" ObjectType="@OBPPierCapPrecastI" .../>  <!-- Wrong! -->
</O>
```

### 5. Deprecation

**Mark Deprecated Items:**

```xml
<O T="WorkFlowItem"
   ObjectType="@OBPTemplate_PierCapCodeCheck"
   Label="(*deprecated*) Pier Cap Code Check"
   ObjectVersion="4"
   Deprecated="1"/>

<O T="WorkFlowItem"
   ObjectType="@OBPTemplate_ConcretePierCapCodeCheck"
   Label="Concrete Pier Cap Code Check"
   ObjectVersion="5"/>
```

### 6. Version Tracking

**Track Workflow Evolution:**

```xml
<!-- Workflow root -->
<O N="OBPWorkflowGirderPrecastI" T="Project"
   Extends="Base_DesignSubUnits::v3"  <!-- Track extends version -->
   ...>

   <!-- Enumeration versions -->
   <O N="WFLoadTypeEnums" T="Group" Extends="OBPEnum_LoadType::v3"/>
   <O N="BackComp" T="Group" Extends="OBPBaseBackwardsCompatibility::v8" .../>
```

## Summary

**Workflow Generation Steps:**

1. **Identify** bridge type and scope
2. **Copy** Steel I Girder workflow as template
3. **Preserve** standard sections (geometry, substructure, loading, combinations, organization)
4. **Modify** bridge-specific sections (superstructure, construction, code checks)
5. **Add/Remove** bridge-specific features (tendons, stiffeners, etc.)
6. **Update** documentation URLs and object versions
7. **Organize** hierarchy logically
8. **Create** summary report objects
9. **Add** compatibility extensions
10. **Validate** completeness and correctness

**Key Principles:**

* **Reuse** substructure, loading, combinations across all bridge types
* **Customize** superstructure for each bridge type
* **Maintain** consistent naming, organization, and documentation
* **Track** object versions and backwards compatibility
* **Document** every WorkFlowItem with Confluence links
* **Test** workflow in OpenBrIM before release

By following this guide, AI agents can systematically generate new bridge workflows that maintain OpenBrIM standards while adapting to specific bridge types and configurations.
