<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1074964965522467583</atom:id><lastBuildDate>Tue, 28 Jul 2026 17:50:43 +0000</lastBuildDate><category>Trending</category><category>PWD Working</category><category>Roads</category><category>Software</category><category>Bridge</category><category>Building</category><category>Design calculations</category><category>Construction Procedure</category><category>Drawings</category><category>Estimate Preparation</category><category>Earth retaining structures</category><category>Programming</category><category>Tender</category><category>Survey</category><category>Formulas</category><category>Guidelines Books Type plan GR&#39;s Circulars</category><category>Structural Analysis</category><category>RTI</category><category>SSR</category><title>Useful for Civil Engineers of P.W.D. , Yogendra Borse</title><description>Day to Day working Calculations and Procedures and Methods in Public Works Department, Problems and Their solutions via Discussions or from Theory books.</description><link>https://www.yogipwd.com/</link><managingEditor>noreply@blogger.com (Yogendra)</managingEditor><generator>Blogger</generator><openSearch:totalResults>384</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-520234497050707233</guid><pubDate>Tue, 28 Jul 2026 04:43:32 +0000</pubDate><atom:updated>2026-07-28T23:20:43.842+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Bridge</category><category domain="http://www.blogger.com/atom/ns#">Design calculations</category><title>Bridge Hydraulics (Mannings) Calculator tool</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Bridge Hydraulic Contraction &amp; Soffit Decision Calculator&lt;/title&gt;
    &lt;!-- PDF Generation Libraries --&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.8.2/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;!-- ISOLATED APP CONTAINER (Prevents CSS leakage to blog template) --&gt;
&lt;div id=&quot;hydraulic-calculator-app&quot;&gt;
    &lt;style&gt;
        /* Scoped App Base Styles */
        #hydraulic-calculator-app {
            --primary-color: #1a365d;
            --secondary-color: #2b6cb0;
            --accent-color: #c53030;
            --success-color: #276749;
            --bg-color: #f7fafc;
            --card-bg: #ffffff;
            --border-color: #e2e8f0;
            --text-color: #2d3748;

            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif;
            background-color: var(--bg-color);
            color: var(--text-color);
            padding: 15px;
            line-height: 1.5;
            max-width: 1800px;
            margin: 0 auto;
            box-sizing: border-box;
        }

        #hydraulic-calculator-app * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        #hydraulic-calculator-app header.app-header {
            margin-bottom: 20px;
            border-bottom: 2px solid var(--border-color);
            padding-bottom: 12px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        #hydraulic-calculator-app h1 {
            color: var(--primary-color);
            font-size: 1.6rem;
            margin-bottom: 4px;
        }

        #hydraulic-calculator-app .subtitle {
            color: #718096;
            font-size: 0.88rem;
        }

        #hydraulic-calculator-app .grid {
            display: grid;
            grid-template-columns: 460px 1fr;
            gap: 20px;
        }

        @media (max-width: 1300px) {
            #hydraulic-calculator-app .grid {
                grid-template-columns: 1fr;
            }
        }

        #hydraulic-calculator-app .card {
            background: var(--card-bg);
            border-radius: 8px;
            padding: 14px;
            border: 1px solid var(--border-color);
            box-shadow: 0 1px 3px rgba(0,0,0,0.05);
            margin-bottom: 18px;
        }

        #hydraulic-calculator-app .card-title {
            font-size: 1.02rem;
            font-weight: 600;
            color: var(--primary-color);
            margin-bottom: 12px;
            border-bottom: 1px solid var(--border-color);
            padding-bottom: 6px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        #hydraulic-calculator-app .form-row {
            display: flex;
            gap: 10px;
            margin-bottom: 10px;
        }

        #hydraulic-calculator-app .form-row .form-group {
            flex: 1;
        }

        #hydraulic-calculator-app label {
            display: block;
            font-size: 0.78rem;
            font-weight: 600;
            margin-bottom: 3px;
            color: #4a5568;
        }

        #hydraulic-calculator-app input {
            width: 100%;
            padding: 5px 8px;
            border: 1px solid var(--border-color);
            border-radius: 4px;
            font-size: 0.85rem;
            transition: border-color 0.2s;
        }

        #hydraulic-calculator-app input:focus {
            outline: none;
            border-color: var(--secondary-color);
        }

        #hydraulic-calculator-app .profile-table {
            width: 100%;
            border-collapse: collapse;
            margin-bottom: 10px;
            font-size: 0.8rem;
        }

        #hydraulic-calculator-app .profile-table th, 
        #hydraulic-calculator-app .profile-table td {
            border: 1px solid var(--border-color);
            padding: 4px 6px;
            text-align: center;
        }

        #hydraulic-calculator-app .profile-table th {
            background-color: #edf2f7;
            font-weight: 600;
        }

        #hydraulic-calculator-app .profile-table input {
            padding: 3px 4px;
            font-size: 0.8rem;
            text-align: center;
        }

        #hydraulic-calculator-app .action-btn-group {
            display: flex;
            gap: 2px;
            justify-content: center;
        }

        #hydraulic-calculator-app .btn {
            background-color: var(--secondary-color);
            color: white;
            border: none;
            padding: 6px 12px;
            border-radius: 4px;
            cursor: pointer;
            font-size: 0.85rem;
            font-weight: 600;
            display: inline-flex;
            align-items: center;
            gap: 6px;
        }

        #hydraulic-calculator-app .btn:hover { background-color: var(--primary-color); }
        #hydraulic-calculator-app .btn-print { background-color: #276749; }
        #hydraulic-calculator-app .btn-print:hover { background-color: #1c4530; }
        
        #hydraulic-calculator-app .btn-action {
            background-color: #edf2f7;
            color: #2d3748;
            border: 1px solid #cbd5e0;
            padding: 2px 5px;
            font-size: 0.72rem;
            border-radius: 3px;
            cursor: pointer;
            font-weight: 500;
        }
        #hydraulic-calculator-app .btn-action:hover { background-color: #e2e8f0; }

        #hydraulic-calculator-app .btn-danger { background-color: #e53e3e; color: white; border: none; padding: 2px 6px; }
        #hydraulic-calculator-app .btn-danger:hover { background-color: #c53030; }

        #hydraulic-calculator-app .metrics-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
            gap: 12px;
            margin-bottom: 18px;
        }

        #hydraulic-calculator-app .metric-card {
            background: #f8fafc;
            border: 1px solid var(--border-color);
            border-left: 4px solid var(--secondary-color);
            padding: 10px;
            border-radius: 4px;
        }

        #hydraulic-calculator-app .metric-card.alert {
            border-left-color: var(--accent-color);
            background: #fff5f5;
        }

        #hydraulic-calculator-app .metric-card.success {
            border-left-color: var(--success-color);
            background: #f0fff4;
        }

        #hydraulic-calculator-app .metric-label {
            font-size: 0.7rem;
            text-transform: uppercase;
            letter-spacing: 0.04em;
            color: #718096;
            font-weight: 600;
        }

        #hydraulic-calculator-app .metric-value {
            font-size: 1.25rem;
            font-weight: 700;
            color: var(--primary-color);
            margin-top: 3px;
        }

        #hydraulic-calculator-app .metric-unit { font-size: 0.75rem; font-weight: normal; color: #718096; }

        #hydraulic-calculator-app .canvas-container {
            width: 100%;
            height: 380px;
            background: #ffffff;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            overflow: hidden;
            position: relative;
        }

        #hydraulic-calculator-app canvas { width: 100%; height: 100%; display: block; }

        #hydraulic-calculator-app .data-table {
            width: 100%;
            border-collapse: collapse;
            font-size: 0.82rem;
            margin-top: 8px;
        }

        #hydraulic-calculator-app .data-table th, 
        #hydraulic-calculator-app .data-table td {
            border: 1px solid var(--border-color);
            padding: 6px 8px;
            text-align: right;
        }

        #hydraulic-calculator-app .data-table th {
            background-color: #edf2f7;
            text-align: center;
            font-weight: 600;
        }

        #hydraulic-calculator-app .data-table tr:nth-child(even) { background-color: #f8fafc; }

        #hydraulic-calculator-app .breakdown-list { list-style: none; font-size: 0.82rem; }
        #hydraulic-calculator-app .breakdown-list li {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 6px 0;
            border-bottom: 1px dashed var(--border-color);
        }
        #hydraulic-calculator-app .breakdown-list li:last-child { border-bottom: none; }

        #hydraulic-calculator-app .val-badge {
            display: inline-block;
            background: #edf2f7;
            padding: 3px 6px;
            border-radius: 4px;
            font-size: 0.78rem;
            color: var(--primary-color);
        }
        #hydraulic-calculator-app .val-badge strong { color: var(--accent-color); }

        #hydraulic-calculator-app .decision-box {
            padding: 10px 12px;
            border-radius: 6px;
            font-size: 0.88rem;
            line-height: 1.4;
            margin-top: 10px;
            border: 1px solid transparent;
        }
        #hydraulic-calculator-app .decision-box.safe { background: #f0fff4; border-color: #c6f6d5; color: #22543d; }
        #hydraulic-calculator-app .decision-box.unsafe { background: #fff5f5; border-color: #fed7d7; color: #742a2a; }

        #hydraulic-calculator-app #print-summary { display: none; }

        /* STRICTLY SCOPED PRINT STYLES */
        @media print {
            body * { visibility: hidden !important; }
            #hydraulic-calculator-app, #hydraulic-calculator-app * { visibility: visible !important; }
            #hydraulic-calculator-app {
                position: absolute !important;
                left: 0 !important; top: 0 !important;
                width: 100% !important; margin: 0 !important; padding: 0 !important;
                background: white !important; color: black !important;
            }
            #hydraulic-calculator-app .btn { display: none !important; }
            #hydraulic-calculator-app .grid { display: block !important; }
            #hydraulic-calculator-app #print-summary { display: block !important; margin-bottom: 15px !important; }
            #hydraulic-calculator-app .print-grid {
                display: grid !important; grid-template-columns: repeat(3, 1fr) !important;
                gap: 8px !important; border: 1px solid #ccc !important;
                padding: 6px !important; font-size: 8pt !important;
            }
            #hydraulic-calculator-app .card {
                border: 1px solid #aaa !important; box-shadow: none !important;
                padding: 6px !important; margin-bottom: 12px !important; page-break-inside: avoid;
            }
            #hydraulic-calculator-app .metrics-grid {
                grid-template-columns: repeat(4, 1fr) !important; gap: 8px !important;
            }
        }
    &lt;/style&gt;

    &lt;header class=&quot;app-header&quot;&gt;
        &lt;div&gt;
            &lt;h1&gt;Bridge Hydraulic Contraction &amp; Soffit Decision Calculator&lt;/h1&gt;
            &lt;div class=&quot;subtitle&quot;&gt;Component-Wise Flow Obstruction (% Q_Manning) &amp; Empirical Discharge Verification&lt;/div&gt;
        &lt;/div&gt;
        &lt;button id=&quot;exportPdfBtn&quot; class=&quot;btn btn-print&quot; onclick=&quot;exportToPDF()&quot;&gt;🖨️ Save as PDF Report&lt;/button&gt;
    &lt;/header&gt;

    &lt;!-- Hidden Input Parameter Printable Summary --&gt;
    &lt;div id=&quot;print-summary&quot;&gt;
        &lt;h3 style=&quot;font-size:0.9rem; margin-bottom:4px;&quot;&gt;Design Input Parameters Summary:&lt;/h3&gt;
        &lt;div class=&quot;print-grid&quot; id=&quot;printInputsContent&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid&quot;&gt;
        &lt;!-- Input Sidebar --&gt;
        &lt;div class=&quot;sidebar&quot;&gt;
            &lt;div class=&quot;card&quot;&gt;
                &lt;div class=&quot;card-title&quot;&gt;1. Catchment Parameters (Empirical)&lt;/div&gt;
                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;catchArea&quot;&gt;Catchment Area A (km²)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;catchArea&quot; value=&quot;567.672&quot; step=&quot;1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;rainIntensity&quot;&gt;Rainfall Intensity I (mm/hr)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;rainIntensity&quot; value=&quot;35&quot; step=&quot;1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;cDickens&quot;&gt;Dickens Coeff (C_d)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;cDickens&quot; value=&quot;14.0&quot; step=&quot;0.5&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;cRyves&quot;&gt;Ryves Coeff (C_r)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;cRyves&quot; value=&quot;8.5&quot; step=&quot;0.5&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;cRational&quot;&gt;Rational Coeff (C)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;cRational&quot; value=&quot;0.55&quot; step=&quot;0.05&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;div class=&quot;card-title&quot;&gt;2. River &amp; Bridge Hydraulic Setup&lt;/div&gt;
                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;hfl&quot;&gt;HFL Level (m)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;hfl&quot; value=&quot;579.4&quot; step=&quot;0.1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;slope&quot;&gt;Bed Slope (1 in X)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;slope&quot; value=&quot;150&quot; step=&quot;10&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;soffit&quot;&gt;Deck Soffit RL (m)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;soffit&quot; value=&quot;581.145&quot; step=&quot;0.1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;deckDepth&quot;&gt;Deck Depth (m)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;deckDepth&quot; value=&quot;0.7&quot; step=&quot;0.1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;startChainage&quot;&gt;Bridge Start Ch. (m)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;startChainage&quot; value=&quot;105.0&quot; step=&quot;1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;numSpans&quot;&gt;No. of Spans&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;numSpans&quot; value=&quot;12&quot; min=&quot;1&quot; step=&quot;1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;spanLength&quot;&gt;Span Length (m)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;spanLength&quot; value=&quot;10.0&quot; step=&quot;0.5&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;pierWidth&quot;&gt;Pier Width (m)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;pierWidth&quot; value=&quot;0.9&quot; step=&quot;0.1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;form-row&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;abutWidth&quot;&gt;Abutment Top (m)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;abutWidth&quot; value=&quot;0.9&quot; step=&quot;0.1&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;abutBatter&quot;&gt;Abutment Batter (H:1V)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;abutBatter&quot; value=&quot;0.2&quot; step=&quot;0.05&quot; onchange=&quot;calculateAndRender()&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;div class=&quot;card-title&quot;&gt;
                    &lt;span&gt;3. Ground Station Profile&lt;/span&gt;
                    &lt;span style=&quot;font-size:0.7rem; font-weight:normal; color:#718096;&quot;&gt;Cross-section Manning &#39;n&#39;&lt;/span&gt;
                &lt;/div&gt;
                &lt;div style=&quot;max-height: 380px; overflow-y: auto;&quot;&gt;
                    &lt;table class=&quot;profile-table&quot; id=&quot;profileTable&quot;&gt;
                        &lt;thead&gt;
                            &lt;tr&gt;
                                &lt;th&gt;Ch. (m)&lt;/th&gt;
                                &lt;th&gt;Bed RL (m)&lt;/th&gt;
                                &lt;th&gt;Rugosity (n)&lt;/th&gt;
                                &lt;th style=&quot;width:110px;&quot;&gt;Actions&lt;/th&gt;
                            &lt;/tr&gt;
                        &lt;/thead&gt;
                        &lt;tbody&gt;&lt;/tbody&gt;
                    &lt;/table&gt;
                &lt;/div&gt;
                &lt;button class=&quot;btn&quot; style=&quot;width: 100%; margin-top: 8px; justify-content: center;&quot; onclick=&quot;insertPointAtIndex(profileData.length)&quot;&gt;+ Append End Station Point&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Main Display Output --&gt;
        &lt;div class=&quot;main-content&quot;&gt;
            &lt;div class=&quot;metrics-grid&quot;&gt;
                &lt;div class=&quot;metric-card&quot;&gt;
                    &lt;div class=&quot;metric-label&quot;&gt;Manning Discharge (Q_M)&lt;/div&gt;
                    &lt;div class=&quot;metric-value&quot; id=&quot;resManningQ&quot;&gt;0.00 &lt;span class=&quot;metric-unit&quot;&gt;m³/s&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;metric-card&quot;&gt;
                    &lt;div class=&quot;metric-label&quot;&gt;Total Obstructed Flow&lt;/div&gt;
                    &lt;div class=&quot;metric-value&quot; id=&quot;resTotalObsQ&quot;&gt;0.00 &lt;span class=&quot;metric-unit&quot;&gt;m³/s&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;metric-card alert&quot;&gt;
                    &lt;div class=&quot;metric-label&quot;&gt;Total Flow Obstruction (%)&lt;/div&gt;
                    &lt;div class=&quot;metric-value&quot; id=&quot;resTotalObsPct&quot;&gt;0.00 &lt;span class=&quot;metric-unit&quot;&gt;%&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;metric-card success&quot;&gt;
                    &lt;div class=&quot;metric-label&quot;&gt;Net Unobstructed Flow&lt;/div&gt;
                    &lt;div class=&quot;metric-value&quot; id=&quot;resNetQ&quot;&gt;0.00 &lt;span class=&quot;metric-unit&quot;&gt;m³/s&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;div class=&quot;card-title&quot;&gt;Cross-Section &amp; Deck Soffit Level Visualizer&lt;/div&gt;
                &lt;div class=&quot;canvas-container&quot;&gt;
                    &lt;canvas id=&quot;sectionCanvas&quot;&gt;&lt;/canvas&gt;
                &lt;/div&gt;
                &lt;div id=&quot;soffitDecisionBox&quot; class=&quot;decision-box safe&quot;&gt;
                    &lt;!-- Dynamic Recommendation --&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;div class=&quot;card-title&quot;&gt;Component-Wise Obstructed Flow &amp; % Obstruction Breakdown&lt;/div&gt;
                &lt;ul class=&quot;breakdown-list&quot; id=&quot;componentBreakdownList&quot;&gt;&lt;/ul&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;div class=&quot;card-title&quot;&gt;Discharge Formula Comparison &amp; Freeboard Guidelines&lt;/div&gt;
                &lt;div style=&quot;overflow-x: auto;&quot;&gt;
                    &lt;table class=&quot;data-table&quot; id=&quot;formulaComparisonTable&quot;&gt;
                        &lt;thead&gt;
                            &lt;tr&gt;
                                &lt;th&gt;Formula Method&lt;/th&gt;
                                &lt;th&gt;Formulation / Governing Equation&lt;/th&gt;
                                &lt;th&gt;Calculated Q (m³/s)&lt;/th&gt;
                                &lt;th&gt;Diff vs Manning (%)&lt;/th&gt;
                                &lt;th&gt;Status / Guidance&lt;/th&gt;
                            &lt;/tr&gt;
                        &lt;/thead&gt;
                        &lt;tbody&gt;&lt;/tbody&gt;
                    &lt;/table&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    let profileData = [
        { ch: 0, rl: 585.326, n: 0.035 },
        { ch: 12, rl: 583.716, n: 0.035 },
        { ch: 34, rl: 582.936, n: 0.035 },
        { ch: 43, rl: 583.913, n: 0.035 },
        { ch: 51, rl: 582.912, n: 0.035 },
        { ch: 55, rl: 582.144, n: 0.035 },
        { ch: 61, rl: 580.705, n: 0.035 },
        { ch: 93, rl: 580.434, n: 0.035 },
        { ch: 105.0, rl: 578.912, n: 0.035 },
        { ch: 105.1, rl: 580.24, n: 0.035 },
        { ch: 105.4, rl: 579.94, n: 0.035 },
        { ch: 105.8, rl: 579.64, n: 0.035 },
        { ch: 106.2, rl: 579.34, n: 0.035 },
        { ch: 116.59, rl: 579.34, n: 0.035 },
        { ch: 116.99, rl: 579.04, n: 0.035 },
        { ch: 117.39, rl: 578.74, n: 0.035 },
        { ch: 117.79, rl: 578.44, n: 0.035 },
        { ch: 118.19, rl: 578.14, n: 0.035 },
        { ch: 118.59, rl: 577.84, n: 0.035 },        
        { ch: 122, rl: 577.701, n: 0.035 },
        { ch: 152, rl: 577.339, n: 0.035 },
        { ch: 166, rl: 575.936, n: 0.035 },
        { ch: 180, rl: 575.249, n: 0.035 },
        { ch: 193, rl: 575.403, n: 0.035 },
        { ch: 203, rl: 575.912, n: 0.035 },
        { ch: 206, rl: 577.026, n: 0.035 },
        { ch: 212, rl: 577.575, n: 0.035 },
        { ch: 215, rl: 578.936, n: 0.035 },
        { ch: 220, rl: 580.292, n: 0.035 },
        { ch: 225, rl: 580.552, n: 0.035 },
        { ch: 230, rl: 580.657, n: 0.035 },
        { ch: 240, rl: 580.963, n: 0.035 },
        { ch: 250, rl: 581.252, n: 0.035 },
        { ch: 261, rl: 581.645, n: 0.035 },
        { ch: 270, rl: 581.834, n: 0.035 },
        { ch: 280, rl: 582.210, n: 0.035 },
        { ch: 290, rl: 582.636, n: 0.035 },
        { ch: 300, rl: 583.099, n: 0.035 },
        { ch: 309, rl: 583.497, n: 0.035 },
        { ch: 310, rl: 583.752, n: 0.035 },
        { ch: 320, rl: 583.711, n: 0.035 },
        { ch: 330, rl: 583.745, n: 0.035 },
        { ch: 340, rl: 583.757, n: 0.035 },
        { ch: 350, rl: 583.845, n: 0.035 }
    ];

    const canvas = document.getElementById(&#39;sectionCanvas&#39;);
    const ctx = canvas.getContext(&#39;2d&#39;);

    // Render Table &amp; Attach Correct Events
    function initTable() {
        const tableBody = document.querySelector(&#39;#hydraulic-calculator-app #profileTable tbody&#39;);
        tableBody.innerHTML = &#39;&#39;;
        
        // Ensure strictly sorted order
        profileData.sort((a, b) =&gt; a.ch - b.ch);

        profileData.forEach((pt, idx) =&gt; {
            const tr = document.createElement(&#39;tr&#39;);
            tr.innerHTML = `
                &lt;td&gt;&lt;input type=&quot;number&quot; value=&quot;${pt.ch}&quot; step=&quot;0.1&quot; onchange=&quot;updatePt(${idx}, &#39;ch&#39;, this.value)&quot;&gt;&lt;/td&gt;
                &lt;td&gt;&lt;input type=&quot;number&quot; value=&quot;${pt.rl}&quot; step=&quot;0.001&quot; onchange=&quot;updatePt(${idx}, &#39;rl&#39;, this.value)&quot;&gt;&lt;/td&gt;
                &lt;td&gt;&lt;input type=&quot;number&quot; value=&quot;${pt.n}&quot; step=&quot;0.001&quot; onchange=&quot;updatePt(${idx}, &#39;n&#39;, this.value)&quot;&gt;&lt;/td&gt;
                &lt;td&gt;
                    &lt;div class=&quot;action-btn-group&quot;&gt;
                        &lt;button type=&quot;button&quot; class=&quot;btn-action&quot; onclick=&quot;insertPointAtIndex(${idx})&quot; title=&quot;Insert row above&quot;&gt;+ Above&lt;/button&gt;
                        &lt;button type=&quot;button&quot; class=&quot;btn-action&quot; onclick=&quot;insertPointAtIndex(${idx + 1})&quot; title=&quot;Insert row below&quot;&gt;+ Below&lt;/button&gt;
                        &lt;button type=&quot;button&quot; class=&quot;btn-action btn-danger&quot; onclick=&quot;removePt(${idx})&quot; title=&quot;Delete station&quot;&gt;×&lt;/button&gt;
                    &lt;/div&gt;
                &lt;/td&gt;
            `;
            tableBody.appendChild(tr);
        });
    }

    // Dynamic Insertion logic (Interpolates chainage &amp; RL for seamless geometry)
    function insertPointAtIndex(targetIndex) {
        let newCh = 0;
        let newRl = 580.0;
        let newN = 0.035;

        if (profileData.length === 0) {
            newCh = 0; newRl = 580.0;
        } else if (targetIndex &lt;= 0) {
            newCh = Math.max(0, profileData[0].ch - 5);
            newRl = profileData[0].rl;
            newN = profileData[0].n;
        } else if (targetIndex &gt;= profileData.length) {
            const last = profileData[profileData.length - 1];
            newCh = parseFloat((last.ch + 10).toFixed(2));
            newRl = last.rl;
            newN = last.n;
        } else {
            const prev = profileData[targetIndex - 1];
            const next = profileData[targetIndex];
            newCh = parseFloat(((prev.ch + next.ch) / 2).toFixed(2));
            newRl = parseFloat(((prev.rl + next.rl) / 2).toFixed(3));
            newN = prev.n;
        }

        profileData.splice(targetIndex, 0, { ch: newCh, rl: newRl, n: newN });
        initTable();
        calculateAndRender();
    }

    // Update point parameters
    function updatePt(idx, field, val) {
        profileData[idx][field] = parseFloat(val) || 0;
        if (field === &#39;ch&#39;) {
            profileData.sort((a, b) =&gt; a.ch - b.ch);
            initTable();
        }
        calculateAndRender();
    }

    // Delete single point
    function removePt(idx) {
        if (profileData.length &lt;= 2) {
            alert(&#39;Minimum 2 ground profile points required for hydraulic calculations.&#39;);
            return;
        }
        profileData.splice(idx, 1);
        initTable();
        calculateAndRender();
    }

    function getGroundRLAt(ch) {
        if (ch &lt;= profileData[0].ch) return profileData[0].rl;
        if (ch &gt;= profileData[profileData.length - 1].ch) return profileData[profileData.length - 1].rl;

        for (let i = 0; i &lt; profileData.length - 1; i++) {
            if (ch &gt;= profileData[i].ch &amp;&amp; ch &lt;= profileData[i+1].ch) {
                const ratio = (ch - profileData[i].ch) / (profileData[i+1].ch - profileData[i].ch);
                return profileData[i].rl + ratio * (profileData[i+1].rl - profileData[i].rl);
            }
        }
        return profileData[0].rl;
    }

    function getVelocityAtChainage(ch, compartments) {
        for (let c of compartments) {
            if (ch &gt;= c.ch1 &amp;&amp; ch &lt;= c.ch2) return c.vel;
        }
        return compartments.length &gt; 0 ? compartments[0].vel : 0;
    }

    function generatePrintSummary() {
        const summary = document.getElementById(&#39;printInputsContent&#39;);
        if (!summary) return;
        summary.innerHTML = `
            &lt;div&gt;&lt;strong&gt;Area:&lt;/strong&gt; ${document.getElementById(&#39;catchArea&#39;).value} km²&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Rainfall:&lt;/strong&gt; ${document.getElementById(&#39;rainIntensity&#39;).value} mm/hr&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Dickens Cd:&lt;/strong&gt; ${document.getElementById(&#39;cDickens&#39;).value}&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Ryves Cr:&lt;/strong&gt; ${document.getElementById(&#39;cRyves&#39;).value}&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Rational C:&lt;/strong&gt; ${document.getElementById(&#39;cRational&#39;).value}&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;HFL Level:&lt;/strong&gt; ${document.getElementById(&#39;hfl&#39;).value} m&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Bed Slope:&lt;/strong&gt; 1 in ${document.getElementById(&#39;slope&#39;).value}&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Soffit RL:&lt;/strong&gt; ${document.getElementById(&#39;soffit&#39;).value} m&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Deck Depth:&lt;/strong&gt; ${document.getElementById(&#39;deckDepth&#39;).value} m&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Bridge Start:&lt;/strong&gt; ${document.getElementById(&#39;startChainage&#39;).value} m&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Spans:&lt;/strong&gt; ${document.getElementById(&#39;numSpans&#39;).value} x ${document.getElementById(&#39;spanLength&#39;).value} m&lt;/div&gt;
            &lt;div&gt;&lt;strong&gt;Pier Width:&lt;/strong&gt; ${document.getElementById(&#39;pierWidth&#39;).value} m&lt;/div&gt;
        `;
    }

    function calculateAndRender() {
        const HFL = parseFloat(document.getElementById(&#39;hfl&#39;).value) || 0;
        const slopeX = parseFloat(document.getElementById(&#39;slope&#39;).value) || 1000;
        const S = 1.0 / slopeX;

        const soffitRL = parseFloat(document.getElementById(&#39;soffit&#39;).value) || 0;
        const deckDepth = parseFloat(document.getElementById(&#39;deckDepth&#39;).value) || 0;
        const bridgeStartCh = parseFloat(document.getElementById(&#39;startChainage&#39;).value) || 0;
        const numSpans = parseInt(document.getElementById(&#39;numSpans&#39;).value) || 1;
        const spanLength = parseFloat(document.getElementById(&#39;spanLength&#39;).value) || 0;
        const pierWidth = parseFloat(document.getElementById(&#39;pierWidth&#39;).value) || 0;
        const abutWidth = parseFloat(document.getElementById(&#39;abutWidth&#39;).value) || 0;
        const abutBatter = parseFloat(document.getElementById(&#39;abutBatter&#39;).value) || 0;

        const areaA = parseFloat(document.getElementById(&#39;catchArea&#39;).value) || 0;
        const Cd = parseFloat(document.getElementById(&#39;cDickens&#39;).value) || 0;
        const Cr = parseFloat(document.getElementById(&#39;cRyves&#39;).value) || 0;
        const I_rain = parseFloat(document.getElementById(&#39;rainIntensity&#39;).value) || 0;
        const C_rat = parseFloat(document.getElementById(&#39;cRational&#39;).value) || 0;

        const numPiers = Math.max(0, numSpans - 1);
        const bridgeLength = numSpans * spanLength;
        const bridgeEndCh = bridgeStartCh + bridgeLength;

        const qDickens = Cd * Math.pow(areaA, 0.75);
        const qRyves = Cr * Math.pow(areaA, 2.0 / 3.0);
        const qInglis = (124 * areaA) / Math.sqrt(areaA + 10.4);
        const qRational = 0.278 * C_rat * I_rain * areaA;

        let leftHflCh = null, rightHflCh = null;
        for (let i = 0; i &lt; profileData.length - 1; i++) {
            const p1 = profileData[i], p2 = profileData[i+1];
            if (leftHflCh === null &amp;&amp; ((p1.rl &gt;= HFL &amp;&amp; p2.rl &lt;= HFL) || (p1.rl &lt;= HFL &amp;&amp; p2.rl &gt;= HFL))) {
                leftHflCh = p1.rl === p2.rl ? p1.ch : p1.ch + ((HFL - p1.rl) / (p2.rl - p1.rl)) * (p2.ch - p1.ch);
            } else if (leftHflCh !== null &amp;&amp; ((p1.rl &lt;= HFL &amp;&amp; p2.rl &gt;= HFL) || (p1.rl &gt;= HFL &amp;&amp; p2.rl &lt;= HFL))) {
                rightHflCh = p1.rl === p2.rl ? p2.ch : p1.ch + ((HFL - p1.rl) / (p2.rl - p1.rl)) * (p2.ch - p1.ch);
            }
        }
        if (leftHflCh === null) leftHflCh = profileData[0].ch;
        if (rightHflCh === null) rightHflCh = profileData[profileData.length - 1].ch;

        const keyChs = [leftHflCh];
        profileData.forEach(p =&gt; { if (p.ch &gt; leftHflCh &amp;&amp; p.ch &lt; rightHflCh) keyChs.push(p.ch); });
        keyChs.push(rightHflCh);
        keyChs.sort((a, b) =&gt; a - b);

        const compartments = [];
        let totalManningQ = 0;

        for (let i = 0; i &lt; keyChs.length - 1; i++) {
            const ch1 = keyChs[i], ch2 = keyChs[i+1], dx = ch2 - ch1;
            if (dx &lt;= 0) continue;

            const d1 = Math.max(0, HFL - getGroundRLAt(ch1));
            const d2 = Math.max(0, HFL - getGroundRLAt(ch2));
            const area = ((d1 + d2) / 2) * dx;
            if (area &lt;= 0) continue;

            const dy = Math.abs(d2 - d1);
            const wettedP = Math.sqrt(dx * dx + dy * dy);
            const R = area / wettedP;

            let nVal = 0.035;
            for (let j = 0; j &lt; profileData.length - 1; j++) {
                if (ch1 &gt;= profileData[j].ch &amp;&amp; ch2 &lt;= profileData[j+1].ch) {
                    nVal = profileData[j].n;
                    break;
                }
            }

            const vel = (1.0 / nVal) * Math.pow(R, 2.0 / 3.0) * Math.sqrt(S);
            const Q_comp = area * vel;
            totalManningQ += Q_comp;

            compartments.push({ idx: compartments.length + 1, ch1, ch2, dx, area, nVal, vel, Q_comp });
        }

        let compBreakdown = {
            leftFill: { name: &quot;Left Bank Approach Fill Encroachment&quot;, area: 0, q: 0, pct: 0 },
            rightFill: { name: &quot;Right Bank Approach Fill Encroachment&quot;, area: 0, q: 0, pct: 0 },
            abutments: { name: `Submerged Abutments Obstruction (2 Nos)`, area: 0, q: 0, pct: 0 },
            piers: { name: `Submerged Intermediate Piers (${numPiers} Nos)`, area: 0, q: 0, pct: 0 },
            deck: { name: &quot;Superstructure Deck Submergence&quot;, area: 0, q: 0, pct: 0 }
        };

        const pierChs = [];
        for (let k = 1; k &lt;= numPiers; k++) pierChs.push(bridgeStartCh + k * spanLength);

        if (bridgeStartCh &gt; leftHflCh) {
            compartments.forEach(c =&gt; {
                if (c.ch1 &lt; bridgeStartCh) {
                    const subX1 = c.ch1, subX2 = Math.min(c.ch2, bridgeStartCh);
                    if (subX2 &gt; subX1) {
                        const a = ((Math.max(0, HFL - getGroundRLAt(subX1)) + Math.max(0, HFL - getGroundRLAt(subX2))) / 2) * (subX2 - subX1);
                        compBreakdown.leftFill.area += a;
                        compBreakdown.leftFill.q += a * c.vel;
                    }
                }
            });
        }

        if (bridgeEndCh &lt; rightHflCh) {
            compartments.forEach(c =&gt; {
                if (c.ch2 &gt; bridgeEndCh) {
                    const subX1 = Math.max(c.ch1, bridgeEndCh), subX2 = c.ch2;
                    if (subX2 &gt; subX1) {
                        const a = ((Math.max(0, HFL - getGroundRLAt(subX1)) + Math.max(0, HFL - getGroundRLAt(subX2))) / 2) * (subX2 - subX1);
                        compBreakdown.rightFill.area += a;
                        compBreakdown.rightFill.q += a * c.vel;
                    }
                }
            });
        }

        pierChs.forEach(pCh =&gt; {
            const pDepth = Math.max(0, HFL - getGroundRLAt(pCh));
            const a = pierWidth * pDepth;
            compBreakdown.piers.area += a;
            compBreakdown.piers.q += a * getVelocityAtChainage(pCh, compartments);
        });

        const laDepth = Math.max(0, HFL - getGroundRLAt(bridgeStartCh));
        const laArea = (abutWidth + (laDepth * abutBatter / 2)) * laDepth;
        const raDepth = Math.max(0, HFL - getGroundRLAt(bridgeEndCh));
        const raArea = (abutWidth + (raDepth * abutBatter / 2)) * raDepth;
        compBreakdown.abutments.area = laArea + raArea;
        compBreakdown.abutments.q = (laArea * getVelocityAtChainage(bridgeStartCh, compartments)) + (raArea * getVelocityAtChainage(bridgeEndCh, compartments));

        if (HFL &gt; soffitRL) {
            compartments.forEach(c =&gt; {
                if (c.ch1 &lt; bridgeEndCh &amp;&amp; c.ch2 &gt; bridgeStartCh) {
                    const subX1 = Math.max(c.ch1, bridgeStartCh), subX2 = Math.min(c.ch2, bridgeEndCh);
                    if (subX2 &gt; subX1) {
                        const a = (subX2 - subX1) * Math.min(HFL - soffitRL, deckDepth);
                        compBreakdown.deck.area += a;
                        compBreakdown.deck.q += a * c.vel;
                    }
                }
            });
        }

        let totalObsQ = 0;
        Object.keys(compBreakdown).forEach(k =&gt; {
            const q_obs = compBreakdown[k].q;
            totalObsQ += q_obs;
            compBreakdown[k].pct = totalManningQ &gt; 0 ? (q_obs / totalManningQ) * 100 : 0;
        });

        const totalObsPct = totalManningQ &gt; 0 ? (totalObsQ / totalManningQ) * 100 : 0;
        const netQ = Math.max(0, totalManningQ - totalObsQ);

        const maxQ = Math.max(totalManningQ, qInglis, qDickens, qRyves, qRational);
        let reqFreeboard = 0.6;
        if (maxQ &gt; 3000) reqFreeboard = 1.5;
        else if (maxQ &gt; 1000) reqFreeboard = 1.2;
        else if (maxQ &gt; 300) reqFreeboard = 0.9;

        const reqSoffitRL = HFL + reqFreeboard;
        const providedFreeboard = soffitRL - HFL;
        const isSoffitSafe = soffitRL &gt;= reqSoffitRL;

        document.getElementById(&#39;resManningQ&#39;).innerHTML = `${totalManningQ.toFixed(1)} &lt;span class=&quot;metric-unit&quot;&gt;m³/s&lt;/span&gt;`;
        document.getElementById(&#39;resTotalObsQ&#39;).innerHTML = `${totalObsQ.toFixed(1)} &lt;span class=&quot;metric-unit&quot;&gt;m³/s&lt;/span&gt;`;
        document.getElementById(&#39;resTotalObsPct&#39;).innerHTML = `${totalObsPct.toFixed(2)} &lt;span class=&quot;metric-unit&quot;&gt;%&lt;/span&gt;`;
        document.getElementById(&#39;resNetQ&#39;).innerHTML = `${netQ.toFixed(1)} &lt;span class=&quot;metric-unit&quot;&gt;m³/s&lt;/span&gt;`;

        const decisionBox = document.getElementById(&#39;soffitDecisionBox&#39;);
        if (isSoffitSafe) {
            decisionBox.className = &quot;decision-box safe&quot;;
            decisionBox.innerHTML = `
                &lt;strong&gt;✓ SOFFIT LEVEL ADEQUATE:&lt;/strong&gt; Provided Soffit RL = &lt;strong&gt;${soffitRL.toFixed(2)} m&lt;/strong&gt;.
                Freeboard available = &lt;strong&gt;${providedFreeboard.toFixed(2)} m&lt;/strong&gt; (IRC min required = &lt;strong&gt;${reqFreeboard.toFixed(2)} m&lt;/strong&gt; based on max discharge ${maxQ.toFixed(0)} m³/s). Deck is clear of HFL.
            `;
        } else {
            decisionBox.className = &quot;decision-box unsafe&quot;;
            decisionBox.innerHTML = `
                &lt;strong&gt;⚠️ SOFFIT LEVEL DEFICIENT:&lt;/strong&gt; Provided Soffit RL = &lt;strong&gt;${soffitRL.toFixed(2)} m&lt;/strong&gt; offers 
                ${providedFreeboard &lt; 0 ? &#39;&lt;strong style=&quot;color:#c53030;&quot;&gt;DECK SUBMERGENCE OF &#39; + Math.abs(providedFreeboard).toFixed(2) + &#39; m&lt;/strong&gt;&#39; : &#39;insufficient freeboard (&#39; + providedFreeboard.toFixed(2) + &#39; m)&#39;}.&lt;br&gt;
                👉 &lt;strong&gt;Recommended Minimum Soffit RL = ${reqSoffitRL.toFixed(2)} m&lt;/strong&gt; (HFL ${HFL.toFixed(2)} m + ${reqFreeboard.toFixed(2)} m freeboard as per IRC:5 norms).
            `;
        }

        const compList = document.getElementById(&#39;componentBreakdownList&#39;);
        compList.innerHTML = &#39;&#39;;
        Object.keys(compBreakdown).forEach(k =&gt; {
            const item = compBreakdown[k];
            const li = document.createElement(&#39;li&#39;);
            li.innerHTML = `
                &lt;span&gt;${item.name}:&lt;/span&gt;
                &lt;span class=&quot;val-badge&quot;&gt;Area: ${item.area.toFixed(2)} m² | Q_obs: ${item.q.toFixed(2)} m³/s | % Obstruction: &lt;strong&gt;${item.pct.toFixed(2)}%&lt;/strong&gt;&lt;/span&gt;
            `;
            compList.appendChild(li);
        });

        const totalLi = document.createElement(&#39;li&#39;);
        totalLi.style.fontWeight = &quot;bold&quot;;
        totalLi.style.background = &quot;#edf2f7&quot;;
        totalLi.style.padding = &quot;8px 10px&quot;;
        totalLi.style.borderRadius = &quot;4px&quot;;
        totalLi.style.marginTop = &quot;6px&quot;;
        totalLi.innerHTML = `
            &lt;span&gt;TOTAL CUMULATIVE OBSTRUCTION:&lt;/span&gt;
            &lt;span class=&quot;val-badge&quot; style=&quot;background:#fff;&quot;&gt;Total Q_obs: &lt;strong style=&quot;color:#c53030;&quot;&gt;${totalObsQ.toFixed(2)} m³/s&lt;/strong&gt; | Total % Obstruction: &lt;strong style=&quot;color:#c53030;&quot;&gt;${totalObsPct.toFixed(2)}%&lt;/strong&gt;&lt;/span&gt;
        `;
        compList.appendChild(totalLi);

        const formulaBody = document.querySelector(&#39;#hydraulic-calculator-app #formulaComparisonTable tbody&#39;);
        formulaBody.innerHTML = &#39;&#39;;
        const formulaList = [
            { name: &#39;Manning Multi-Compartment&#39;, eq: &#39;Q = ∑ (1/n · Aᵢ · Rᵢ²ᐟ³ · S¹ᐟ²)&#39;, val: totalManningQ, note: &#39;Hydraulic Cross-Section Baseline&#39; },
            { name: &#39;Inglis Formula&#39;, eq: &#39;Q = 124·A / √(A + 10.4)&#39;, val: qInglis, note: &#39;Western Ghats / Maharashtra Rivers&#39; },
            { name: &#39;Dickens Formula&#39;, eq: &#39;Q = C_d · A^0.75&#39;, val: qDickens, note: &#39;North/Central Indian Catchments&#39; },
            { name: &#39;Ryves Formula&#39;, eq: &#39;Q = C_r · A^0.67&#39;, val: qRyves, note: &#39;South Indian Peninsular Basins&#39; },
            { name: &#39;Rational Method&#39;, eq: &#39;Q = 0.278 · C · I · A&#39;, val: qRational, note: &#39;Urban/Small Catchments (&lt; 50 km²)&#39; }
        ];

        formulaList.forEach(f =&gt; {
            const diffPct = totalManningQ &gt; 0 ? ((f.val - totalManningQ) / totalManningQ) * 100 : 0;
            const diffStr = diffPct &gt; 0 ? `+${diffPct.toFixed(1)}%` : `${diffPct.toFixed(1)}%`;
            const tr = document.createElement(&#39;tr&#39;);
            tr.innerHTML = `
                &lt;td style=&quot;text-align:left;&quot;&gt;&lt;strong&gt;${f.name}&lt;/strong&gt;&lt;/td&gt;
                &lt;td style=&quot;text-align:center;&quot;&gt;&lt;code style=&quot;font-size:0.75rem;&quot;&gt;${f.eq}&lt;/code&gt;&lt;/td&gt;
                &lt;td&gt;&lt;strong&gt;${f.val.toFixed(2)}&lt;/strong&gt;&lt;/td&gt;
                &lt;td style=&quot;color:${diffPct &gt; 20 ? &#39;#c53030&#39; : &#39;#2b6cb0&#39;}; font-weight:600;&quot;&gt;${diffStr}&lt;/td&gt;
                &lt;td style=&quot;text-align:left; font-size:0.78rem;&quot;&gt;${f.note}&lt;/td&gt;
            `;
            formulaBody.appendChild(tr);
        });

        drawCanvas({
            HFL, soffitRL, deckDepth, bridgeStartCh, bridgeEndCh,
            numPiers, pierWidth, pierChs, compartments, reqSoffitRL
        });

        generatePrintSummary();
    }

    function drawCanvas(params) {
        const dpr = window.devicePixelRatio || 1;
        canvas.width = canvas.offsetWidth * dpr;
        canvas.height = canvas.offsetHeight * dpr;
        ctx.scale(dpr, dpr);

        const w = canvas.offsetWidth, h = canvas.offsetHeight;
        ctx.clearRect(0, 0, w, h);

        const allCh = profileData.map(p =&gt; p.ch);
        const allRl = profileData.map(p =&gt; p.rl);
        allRl.push(params.HFL, params.soffitRL + params.deckDepth, params.reqSoffitRL);

        const minCh = Math.min(...allCh), maxCh = Math.max(...allCh);
        const minRl = Math.min(...allRl) - 1.5, maxRl = Math.max(...allRl) + 2.0;

        const padding = 35;
        const plotW = w - padding * 2, plotH = h - padding * 2;

        function getX(ch) { return padding + ((ch - minCh) / (maxCh - minCh)) * plotW; }
        function getY(rl) { return h - padding - ((rl - minRl) / (maxRl - minRl)) * plotH; }

        params.compartments.forEach(c =&gt; {
            ctx.fillStyle = `rgba(59, 130, 246, ${Math.min(0.5, 0.15 + c.vel * 0.15)})`;
            ctx.beginPath();
            ctx.moveTo(getX(c.ch1), getY(params.HFL));
            ctx.lineTo(getX(c.ch1), getY(getGroundRLAt(c.ch1)));
            ctx.lineTo(getX(c.ch2), getY(getGroundRLAt(c.ch2)));
            ctx.lineTo(getX(c.ch2), getY(params.HFL));
            ctx.closePath();
            ctx.fill();
        });

        ctx.beginPath();
        ctx.strokeStyle = &#39;#2d3748&#39;; ctx.lineWidth = 2.5;
        profileData.forEach((p, idx) =&gt; {
            const x = getX(p.ch), y = getY(p.rl);
            if (idx === 0) ctx.moveTo(x, y); else ctx.lineTo(x, y);
        });
        ctx.stroke();

        const hflY = getY(params.HFL);
        ctx.beginPath(); ctx.strokeStyle = &#39;#2563eb&#39;; ctx.lineWidth = 1.8; ctx.setLineDash([6, 4]);
        ctx.moveTo(getX(minCh), hflY); ctx.lineTo(getX(maxCh), hflY); ctx.stroke();
        ctx.setLineDash([]);
        ctx.fillStyle = &#39;#2563eb&#39;; ctx.font = &#39;11px sans-serif&#39;;
        ctx.fillText(`HFL: ${params.HFL.toFixed(2)} m`, getX(minCh) + 5, hflY - 5);

        const reqSoffitY = getY(params.reqSoffitRL);
        ctx.beginPath(); ctx.strokeStyle = &#39;#c53030&#39;; ctx.lineWidth = 1.5; ctx.setLineDash([4, 4]);
        ctx.moveTo(getX(minCh), reqSoffitY); ctx.lineTo(getX(maxCh), reqSoffitY); ctx.stroke();
        ctx.setLineDash([]);
        ctx.fillStyle = &#39;#c53030&#39;; ctx.font = &#39;10px sans-serif&#39;;
        ctx.fillText(`Req Min Soffit RL: ${params.reqSoffitRL.toFixed(2)} m`, getX(maxCh) - 150, reqSoffitY - 4);

        ctx.fillStyle = &#39;#4a5568&#39;;
        params.pierChs.forEach(pCh =&gt; {
            const px = getX(pCh), pw = (params.pierWidth / (maxCh - minCh)) * plotW;
            const pyTop = getY(Math.max(params.HFL, params.soffitRL));
            const pyBot = getY(getGroundRLAt(pCh));
            ctx.fillRect(px - pw / 2, pyTop, pw, pyBot - pyTop);
        });

        const deckYTop = getY(params.soffitRL + params.deckDepth);
        const deckYBot = getY(params.soffitRL);
        const bX1 = getX(params.bridgeStartCh), bX2 = getX(params.bridgeEndCh);

        ctx.fillStyle = params.HFL &gt; params.soffitRL ? &#39;rgba(220, 38, 38, 0.85)&#39; : &#39;#16a34a&#39;;
        ctx.fillRect(bX1, deckYTop, bX2 - bX1, deckYBot - deckYTop);

        ctx.fillStyle = &#39;#ffffff&#39;; ctx.textAlign = &#39;center&#39;; ctx.font = &#39;10px sans-serif&#39;;
        ctx.fillText(&#39;DECK SOFFIT&#39;, (bX1 + bX2) / 2, (deckYTop + deckYBot) / 2 + 3);
    }

    async function exportToPDF() {
        const exportBtn = document.getElementById(&quot;exportPdfBtn&quot;);
        if (exportBtn) {
            exportBtn.disabled = true;
            exportBtn.innerText = &quot;Generating PDF...&quot;;
        }

        try {
            calculateAndRender();
            generatePrintSummary();

            const { jsPDF } = window.jspdf;
            const pdf = new jsPDF({ orientation: &quot;portrait&quot;, unit: &quot;mm&quot;, format: &quot;a4&quot;, compress: true });

            const pageWidth = pdf.internal.pageSize.getWidth();
            const pageHeight = pdf.internal.pageSize.getHeight();
            const margin = 10;
            const contentWidth = pageWidth - (margin * 2);

            pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
            pdf.setFontSize(18);
            pdf.setTextColor(30, 41, 59);
            pdf.text(&quot;Bridge Hydraulic Report&quot;, pageWidth / 2, 18, { align: &quot;center&quot; });

            pdf.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
            pdf.setFontSize(9);
            pdf.setTextColor(100, 116, 139);
            pdf.text(&quot;Bridge Hydraulic Contraction &amp; Soffit Decision Calculator&quot;, pageWidth / 2, 24, { align: &quot;center&quot; });
            pdf.text(&quot;Generated: &quot; + new Date().toLocaleString(), pageWidth / 2, 29, { align: &quot;center&quot; });

            pdf.setDrawColor(203, 213, 225);
            pdf.line(margin, 33, pageWidth - margin, 33);

            let currentY = 38;

            pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
            pdf.setFontSize(11);
            pdf.setTextColor(15, 23, 42);
            pdf.text(&quot;1. Input Parameters Summary&quot;, margin, currentY);

            const inputs = [];
            document.querySelectorAll(&quot;#hydraulic-calculator-app .form-group&quot;).forEach(div =&gt; {
                const label = div.querySelector(&quot;label&quot;);
                const input = div.querySelector(&quot;input&quot;);
                if (label &amp;&amp; input) {
                    inputs.push([label.innerText.trim(), input.value]);
                }
            });

            pdf.autoTable({
                head: [[&quot;Parameter&quot;, &quot;Value&quot;]],
                body: inputs,
                startY: currentY + 3,
                margin: { left: margin, right: margin },
                theme: &#39;striped&#39;,
                headStyles: { fillColor: [30, 58, 138] },
                styles: { fontSize: 8, cellPadding: 2 }
            });

            currentY = pdf.previousAutoTable.finalY + 8;

            if (currentY &gt; pageHeight - 60) { pdf.addPage(); currentY = 15; }

            pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
            pdf.setFontSize(11);
            pdf.text(&quot;2. Hydraulic Summary Metrics&quot;, margin, currentY);

            const metricRows = [];
            document.querySelectorAll(&quot;#hydraulic-calculator-app .metric-card&quot;).forEach(card =&gt; {
                const lbl = card.querySelector(&quot;.metric-label&quot;)?.innerText || &quot;&quot;;
                const val = card.querySelector(&quot;.metric-value&quot;)?.innerText || &quot;&quot;;
                if (lbl) metricRows.push([lbl.trim(), val.trim()]);
            });

            pdf.autoTable({
                head: [[&quot;Metric&quot;, &quot;Calculated Value&quot;]],
                body: metricRows,
                startY: currentY + 3,
                margin: { left: margin, right: margin },
                theme: &#39;grid&#39;,
                headStyles: { fillColor: [15, 118, 110] },
                styles: { fontSize: 8, cellPadding: 2 }
            });

            currentY = pdf.previousAutoTable.finalY + 8;

            if (currentY + 85 &gt; pageHeight - 15) { pdf.addPage(); currentY = 15; }

            pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
            pdf.setFontSize(11);
            pdf.text(&quot;3. Cross Section Profile Visualizer&quot;, margin, currentY);

            if (canvas) {
                const imgData = canvas.toDataURL(&quot;image/png&quot;, 1.0);
                const canvasAspect = canvas.height / canvas.width;
                const imgHeight = contentWidth * canvasAspect;

                pdf.addImage(imgData, &quot;PNG&quot;, margin, currentY + 3, contentWidth, Math.min(imgHeight, 85));
                currentY += Math.min(imgHeight, 85) + 8;
            }

            if (currentY &gt; pageHeight - 40) { pdf.addPage(); currentY = 15; }

            pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
            pdf.setFontSize(11);
            pdf.text(&quot;4. Ground Profile Data&quot;, margin, currentY);

            const profileRows = profileData.map(p =&gt; [p.ch, p.rl, p.n]);

            pdf.autoTable({
                head: [[&quot;Chainage (m)&quot;, &quot;Reduced Level (m)&quot;, &quot;Manning&#39;s n&quot;]],
                body: profileRows,
                startY: currentY + 3,
                margin: { left: margin, right: margin },
                theme: &#39;striped&#39;,
                headStyles: { fillColor: [51, 65, 85] },
                styles: { fontSize: 7.5, cellPadding: 1.5 }
            });

            currentY = pdf.previousAutoTable.finalY + 8;

            if (currentY &gt; pageHeight - 40) { pdf.addPage(); currentY = 15; }

            pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
            pdf.setFontSize(11);
            pdf.text(&quot;5. Formula Comparison&quot;, margin, currentY);

            const formulaRows = [];
            document.querySelectorAll(&quot;#formulaComparisonTable tbody tr&quot;).forEach(tr =&gt; {
                const row = Array.from(tr.querySelectorAll(&quot;td&quot;)).map(td =&gt; td.innerText.trim());
                if (row.length &gt; 0) formulaRows.push(row);
            });

            pdf.autoTable({
                head: [[&quot;Method&quot;, &quot;Equation&quot;, &quot;Discharge Q (m³/s)&quot;, &quot;Diff (%)&quot;, &quot;Remark&quot;]],
                body: formulaRows,
                startY: currentY + 3,
                margin: { left: margin, right: margin },
                theme: &#39;grid&#39;,
                headStyles: { fillColor: [30, 58, 138] },
                styles: { fontSize: 7.5, cellPadding: 2 }
            });

            currentY = pdf.previousAutoTable.finalY + 8;

            const listItems = document.querySelectorAll(&quot;#componentBreakdownList li&quot;);
            if (listItems.length &gt; 0) {
                if (currentY &gt; pageHeight - 35) { pdf.addPage(); currentY = 15; }

                pdf.setFont(&quot;helvetica&quot;, &quot;bold&quot;);
                pdf.setFontSize(11);
                pdf.text(&quot;6. Component Obstruction Breakdown&quot;, margin, currentY);
                currentY += 5;

                pdf.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
                pdf.setFontSize(8);

                listItems.forEach(li =&gt; {
                    const text = &quot;• &quot; + li.innerText.trim();
                    const splitLines = pdf.splitTextToSize(text, contentWidth - 5);
                    if (currentY + (splitLines.length * 3.5) &gt; pageHeight - 12) {
                        pdf.addPage(); currentY = 15;
                    }
                    pdf.text(splitLines, margin + 2, currentY);
                    currentY += (splitLines.length * 3.5) + 1;
                });
            }

            const totalPages = pdf.internal.getNumberOfPages();
            for (let i = 1; i &lt;= totalPages; i++) {
                pdf.setPage(i);
                if (i &gt; 1) {
                    pdf.setFont(&quot;helvetica&quot;, &quot;italic&quot;);
                    pdf.setFontSize(8);
                    pdf.setTextColor(150);
                    pdf.text(&quot;Bridge Hydraulic Contraction &amp; Soffit Report&quot;, margin, 9);
                    pdf.setDrawColor(226, 232, 240);
                    pdf.line(margin, 11, pageWidth - margin, 11);
                }
                pdf.setFont(&quot;helvetica&quot;, &quot;normal&quot;);
                pdf.setFontSize(8);
                pdf.setTextColor(100);
                pdf.setDrawColor(226, 232, 240);
                pdf.line(margin, pageHeight - 10, pageWidth - margin, pageHeight - 10);
                pdf.text(&quot;Public Works Department — Hydraulic Calculation Report&quot;, margin, pageHeight - 5);
                pdf.text(`Page ${i} of ${totalPages}`, pageWidth - margin, pageHeight - 5, { align: &quot;right&quot; });
            }

            pdf.save(&quot;Bridge_Hydraulic_Report.pdf&quot;);

        } catch (err) {
            console.error(&quot;PDF Export Error:&quot;, err);
            alert(&quot;An error occurred while generating the PDF. Check browser console.&quot;);
        } finally {
            if (exportBtn) {
                exportBtn.disabled = false;
                exportBtn.innerText = &quot;🖨️ Save as PDF Report&quot;;
            }
        }
    }

    window.onload = () =&gt; { initTable(); calculateAndRender(); };
    window.onresize = () =&gt; calculateAndRender();
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/bridge-hydraulics-calculator-tool.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-1937736382152648966</guid><pubDate>Wed, 22 Jul 2026 18:06:52 +0000</pubDate><atom:updated>2026-07-22T23:36:52.163+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement for Formwork and Shuttering Works</title><description>&lt;div class=&quot;formwork-ms-container&quot; style=&quot;font-family: Arial, sans-serif; line-height: 1.6; color: #2d3748; max-width: 100%; margin: 0 auto;&quot;&gt;

  &lt;style&gt;
    .formwork-ms-container h1 {
      color: #1a365d;
      text-align: center;
      font-size: 24px;
      margin-bottom: 20px;
      font-weight: bold;
    }
    .formwork-ms-container h2 {
      color: #1a365d;
      border-bottom: 2px solid #2b6cb0;
      padding-bottom: 5px;
      margin-top: 25px;
      font-size: 18px;
      font-weight: bold;
    }
    .formwork-ms-container h3 {
      color: #2b6cb0;
      margin-top: 18px;
      font-size: 16px;
      font-weight: bold;
    }
    .formwork-ms-container table {
      width: 100%;
      border-collapse: collapse;
      margin: 15px 0;
      display: table;
    }
    .formwork-ms-container th, .formwork-ms-container td {
      border: 1px solid #cbd5e0;
      padding: 8px 12px;
      text-align: left;
      font-size: 13px;
    }
    .formwork-ms-container th {
      background-color: #f7fafc;
      color: #2d3748;
      font-weight: bold;
    }
    .formwork-ms-container ul {
      padding-left: 20px;
      margin-bottom: 12px;
    }
    .formwork-ms-container ul ul {
      margin-top: 4px;
      margin-bottom: 4px;
    }
    .formwork-ms-container li {
      margin-bottom: 6px;
      font-size: 14px;
    }
    .formwork-ms-container p {
      margin-bottom: 10px;
      font-size: 14px;
    }
    .formwork-ms-container .def-table td:first-child {
      font-weight: bold;
      width: 15%;
      white-space: nowrap;
    }
    .formwork-ms-container .grid-tools {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
      gap: 10px;
      margin: 15px 0;
    }
    .formwork-ms-container .grid-item {
      background: #f7fafc;
      border: 1px solid #e2e8f0;
      padding: 10px 14px;
      border-radius: 4px;
      font-size: 14px;
    }
    .formwork-ms-container .term-card {
      background-color: #f8fafc;
      border-left: 4px solid #2b6cb0;
      padding: 10px 15px;
      margin-bottom: 8px;
      border-radius: 2px;
    }
    .formwork-ms-container .term-card strong {
      color: #1a365d;
    }
  &lt;/style&gt;

  &lt;!-- Title Header --&gt;
  &lt;h1&gt;Method Statement for Formwork &amp;amp; Shuttering Works&lt;/h1&gt;

  &lt;!-- 1.0 Revision Status --&gt;
  &lt;h2&gt;1.0 Revision Status&lt;/h2&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Revision Number&lt;/th&gt;
        &lt;th&gt;Date&lt;/th&gt;
        &lt;th&gt;Originator&lt;/th&gt;
        &lt;th&gt;Reviewed&lt;/th&gt;
        &lt;th&gt;Approved&lt;/th&gt;
        &lt;th&gt;Description of Re-submittal&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

  &lt;!-- 2.0 Scope &amp; Objectives --&gt;
  &lt;h2&gt;2.0 Scope &amp;amp; Objectives&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;This Method Statement details the procedure for Formwork/Shuttering required to contain fresh/plastic concrete and mold it into the specified shapes, levels, and desired surface finishes[cite: 1].&lt;/li&gt;
    &lt;li&gt;The contractor shall design and prepare structural formwork drawings supported by calculations, taking into account all static, dynamic, and hydrostatic construction loads[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 3.0 Reference Standards --&gt;
  &lt;h2&gt;3.0 Reference Standards&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Project Technical Specifications[cite: 1]&lt;/li&gt;
    &lt;li&gt;Approved Civil &amp;amp; Structural Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 6461 (Part 5): 1972&lt;/strong&gt; – Glossary of terms relating to cement concrete: Part 5 Formwork for concrete[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 303: 1989&lt;/strong&gt; – Plywood for General Purposes – Specification[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 4014 (Part 1): 1967&lt;/strong&gt; – Code of Practice for Steel Tubular Scaffolding[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 8989: 1978&lt;/strong&gt; – Safety Code for Erection of Concrete Framed Structures[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 4.0 Definitions --&gt;
  &lt;h2&gt;4.0 Definitions &amp;amp; Abbreviations&lt;/h2&gt;
  &lt;table class=&quot;def-table&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;MS&lt;/td&gt;
      &lt;td&gt;Method Statement[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;QCP&lt;/td&gt;
      &lt;td&gt;Quality Control Procedure[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ITP&lt;/td&gt;
      &lt;td&gt;Inspection &amp;amp; Test Plan[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

  &lt;!-- 5.0 Health &amp; Safety Hazards &amp; Terminology --&gt;
  &lt;h2&gt;5.0 Health &amp;amp; Safety Hazards&lt;/h2&gt;
  &lt;p&gt;Specific safety measures must be followed strictly as applicable during field execution[cite: 1]. All overarching safety protocols are covered separately in the Project HSE Plan[cite: 1].&lt;/p&gt;

  &lt;h3&gt;5.1 Formwork and Falsework (F&amp;amp;F) Terminology&lt;/h3&gt;
  
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Formwork (Shuttering):&lt;/strong&gt; Mold used to contain wet concrete until it reaches the desired shape and self-supporting strength[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Falsework (Staging / Centering):&lt;/strong&gt; Temporary structure supporting permanent structural elements during erection until self-supporting status is achieved[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Scaffolding (Paranja):&lt;/strong&gt; Light structural framework erected to provide safe access for site personnel[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Striking (Stripping):&lt;/strong&gt; Planned, controlled dismantling and removal of formwork components[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Sheeting (Sheathing):&lt;/strong&gt; Supporting surface skin in direct contact with wet concrete[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Joist (Batten):&lt;/strong&gt; Primary horizontal framing member directly supporting sheeting (slabs and beams)[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Bearer (Runner):&lt;/strong&gt; Secondary horizontal load-transfer member supporting joists[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Prop Cap:&lt;/strong&gt; Head unit seating top bearer loads axially into vertical props[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Prop:&lt;/strong&gt; Vertical load-bearing support member transferring vertical loads downward[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Prop Base:&lt;/strong&gt; Baseplate unit designed to distribute concentrated axial prop forces against punching shear[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Prop Footing (Spreader):&lt;/strong&gt; Load distribution member designed to transfer concentrated vertical loads to stable, unyielding foundation strata[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Wedge:&lt;/strong&gt; Tapered packing block used to fine-tune levels, plumb adjustments, and facilitate easy striking[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Wailing / Waling:&lt;/strong&gt; Horizontal structural member designed to resist outward hydrostatic pressures on vertical shuttering panels[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Stud:&lt;/strong&gt; Vertical reinforcement member resisting lateral liquid concrete pressure against sheeting panels[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Soldier:&lt;/strong&gt; Heavy vertical structural member cantilevered upward from previously poured concrete elements[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Yoke:&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;Columns:&lt;/em&gt; External horizontal framing collar encircling column forms against bulging[cite: 1].&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;Slipform:&lt;/em&gt; Structural frame straddling inner and outer formwork faces[cite: 1].&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Stop-end (Bulkhead):&lt;/strong&gt; Vertical shutter plate inserted to terminate concrete pours and establish controlled construction joints[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Back Form:&lt;/strong&gt; Top-face formwork unit applied over inclined or sloping slab pours[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Bracings:&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;Horizontal:&lt;/em&gt; Two-way structural ties engineered to restrict the effective slenderness ratio of vertical props[cite: 1].&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;Diagonal:&lt;/em&gt; Inclined framing elements engineered to transfer wind and lateral forces directly through props[cite: 1].&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Tie Bolt:&lt;/strong&gt; High-tensile interconnecting rod used to clamp opposing shutter faces and resist lateral liquid pressure[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Riband:&lt;/strong&gt; Flat-laid horizontal member deployed to withstand lateral pressure forces[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Starter (Kicker):&lt;/strong&gt; Concrete stub cast monolithically with footings/slabs to locate and secure vertical column/wall shuttering[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Shikanjas:&lt;/strong&gt; Mechanical clamping brackets used to hold opposite shuttering panels or right-angled corners firmly together[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Four-Way Head:&lt;/strong&gt; Top-mounted support head used to receive and support I-beams or double runners beneath slabs and beams[cite: 1].
  &lt;/div&gt;
  &lt;div class=&quot;term-card&quot;&gt;
    &lt;strong&gt;Tripod:&lt;/strong&gt; Three-legged base accessory used to stabilize vertical props during erection and maintain plumb alignment[cite: 1].
  &lt;/div&gt;

  &lt;!-- 6.0 Roles &amp; Responsibilities --&gt;
  &lt;h2&gt;6.0 Roles &amp;amp; Responsibilities&lt;/h2&gt;

  &lt;h3&gt;6.1 Project Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Verify that formwork operations strictly adhere to contract specifications, structural drawings, and approved design calculations[cite: 1].&lt;/li&gt;
    &lt;li&gt;Ensure activities progress according to the baseline schedule and confirm all necessary formwork systems and staging materials are available in good condition[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate directly with the Client, Consultant, Project Manager, Site Engineer, Safety Engineer, and Surveyors for safe execution[cite: 1].&lt;/li&gt;
    &lt;li&gt;Enforce quality control standards and safety protocols in coordination with QA/QC and HSE teams[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.2 Site Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Direct daily shuttering operations in accordance with approved shop drawings and project specifications[cite: 1].&lt;/li&gt;
    &lt;li&gt;Provide detailed instruction and assign specific operational responsibilities to the execution crew[cite: 1].&lt;/li&gt;
    &lt;li&gt;Track daily productivity, compare against project targets, and submit updates to the Project Engineer / Project Manager[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with Safety Engineers to maintain safe field practices during erection and dismantling[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with QA/QC Engineers to arrange timely field inspections for completed shuttering elements[cite: 1].&lt;/li&gt;
    &lt;li&gt;Cross-check daily site production against reports provided by Foremen[cite: 1].&lt;/li&gt;
    &lt;li&gt;Distribute updated structural drawings and revisions immediately to the field execution team[cite: 1].&lt;/li&gt;
    &lt;li&gt;Work with Surveyors to verify levels, verticality, plumbness, and line alignment before concrete placement[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.3 QA/QC Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Ensure all shuttering materials, release agents, and assembly procedures meet quality requirements[cite: 1].&lt;/li&gt;
    &lt;li&gt;Perform preliminary field inspections on finished formwork before issuing official requests for client/consultant inspection[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain structured inspection records, pre-pour checklists, and test documentation for official records[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.4 Safety Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Enforce project safety procedures in line with the HSE plan and conduct relevant site safety briefings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Monitor working platforms, staging systems, edge protection, and access ladders to prevent accidents[cite: 1].&lt;/li&gt;
    &lt;li&gt;Perform regular field safety audits and report hazards or incidents immediately to project management[cite: 1].&lt;/li&gt;
    &lt;li&gt;Ensure work areas are kept clean, tidy, and free of trip hazards[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.5 Foreman&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Distribute daily labor, tools, shuttering plates, and staging equipment in coordination with the Site Engineer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Submit daily progress reports and coordinate upcoming resource requirements with the Site Engineer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Assist the surveyor during layout setting out, line marking, and level checks[cite: 1].&lt;/li&gt;
    &lt;li&gt;Enforce safety guidelines and quality parameters directly on the field workforce[cite: 1].&lt;/li&gt;
    &lt;li&gt;Report unexpected site conditions, material damage, or safety concerns immediately[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.6 Surveyor&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Establish project benchmarks from approved reference points and provide line layout, axis grid, and level markings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Perform routine check measurements during formwork assembly to maintain design tolerances[cite: 1].&lt;/li&gt;
    &lt;li&gt;Record line alignment and soffit elevation metrics, reporting deviations to the Site Engineer[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 7.0 Construction Procedure / Method --&gt;
  &lt;h2&gt;7.0 Construction Procedure &amp;amp; Work Methodology&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Preparatory Works:&lt;/strong&gt; Inspect, clean, and grade steel form panels or plywood sheets prior to deployment[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Layout &amp;amp; Dimensional Checks:&lt;/strong&gt; Verify overall layout line alignment, vertical elevation, and grid intersections against approved structural construction drawings[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Erection &amp;amp; Structural Integrity:&lt;/strong&gt; Assemble formwork centering and shuttering as detailed in specifications prior to concrete placement to confine and mold wet concrete[cite: 1]:
      &lt;ul&gt;
        &lt;li&gt;Forms must offer sufficient strength to safely carry hydrostatic concrete loads, dynamic placement impact, and temporary construction live loads[cite: 1].&lt;/li&gt;
        &lt;li&gt;System stiffness must prevent surface deflection or joint displacement under full concrete weight[cite: 1].&lt;/li&gt;
        &lt;li&gt;Design systems to enable clean, scientific striking without jarring or damaging cured concrete surfaces[cite: 1].&lt;/li&gt;
        &lt;li&gt;Ensure adequate working space and clear access for concrete placement and compaction equipment[cite: 1].&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Joint Sealing &amp;amp; Fixation:&lt;/strong&gt; Secure shuttering joints, corner angles, and panel connections tightly to prevent cement slurry leakage during vibration[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Release Agent Application:&lt;/strong&gt; Apply an even coating of approved form release oil or stripping oil to interior form contact faces to prevent concrete adhesion[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Bracing Systems:&lt;/strong&gt; Install adequate longitudinal, lateral, and vertical bracing to stabilize systems against lateral pressures from fresh concrete placement[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Controlled Stripping:&lt;/strong&gt; Apply form release agents systematically to facilitate safe, clean dismantling during formwork removal[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 8.0 Material Requirements --&gt;
  &lt;h2&gt;8.0 Material Requirements&lt;/h2&gt;
  &lt;p&gt;All materials utilized must comply with project structural requirements and relevant code specifications[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Timber / Wood framing elements[cite: 1]&lt;/li&gt;
    &lt;li&gt;Composite timber and hybrid wooden framing components[cite: 1]&lt;/li&gt;
    &lt;li&gt;Shuttering Plywood (conforming to IS 303)[cite: 1]&lt;/li&gt;
    &lt;li&gt;Aluminum formwork panels and beams[cite: 1]&lt;/li&gt;
    &lt;li&gt;Steel shuttering plates and tubular staging elements[cite: 1]&lt;/li&gt;
    &lt;li&gt;Engineered plastic formwork systems[cite: 1]&lt;/li&gt;
    &lt;li&gt;Chemical form release agents and stripping oils[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 9.0 Equipment Requirements --&gt;
  &lt;h2&gt;9.0 Equipment Requirements&lt;/h2&gt;
  &lt;div class=&quot;grid-tools&quot;&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Auto Level Instrument &amp;amp; Accessories[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Hammers &amp;amp; Striking Tools[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Prying Levers &amp;amp; Alignment Bars[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Timber Jointing Hardware (Bolts, Nuts, Clamps)[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Hydraulic Jacks[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Four-Way Heads[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Stabilizing Tripods[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Shikanjas / Column Clamps[cite: 1]&lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 10.0 Health and Safety Provisions --&gt;
  &lt;h2&gt;10.0 Health &amp;amp; Safety Provisions&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Prioritize site safety throughout formwork assembly, concrete placement, and stripping[cite: 1].&lt;/li&gt;
    &lt;li&gt;Where formwork or falsework is erected at heights, install standard guardrails, perimeter barriers, safety netting, advance warning signs, and hazard warning tape around the perimeter[cite: 1].&lt;/li&gt;
    &lt;li&gt;Implement controlled safety measures during formwork stripping, including restricted exclusion zones, overhead protection, and PPE usage[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 11.0 Quality Control Approvals --&gt;
  &lt;h2&gt;11.0 Quality Control Approvals&lt;/h2&gt;
  &lt;p&gt;The following quality control documentation must be formally submitted and approved prior to starting formwork operations[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Quality Control Procedure (QCP) for Formwork Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Formwork Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Field Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Execution &amp;amp; Pre-Pour Checklists for Formwork[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 12.0 Supporting Documentation --&gt;
  &lt;h2&gt;12.0 Supporting Documentation&lt;/h2&gt;
  &lt;p&gt;This Method Statement must be implemented alongside the following documents[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Contract Specifications and Structural Construction Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;Quality Control Procedure (QCP) for Formwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Formwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Method Statement (MS) for Formwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project HSE Plan[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 13.0 Distribution List --&gt;
  &lt;h2&gt;13.0 Distribution List&lt;/h2&gt;
  &lt;p&gt;Copies distributed for implementation, compliance, and record maintenance[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Management Representative[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Manager[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;Site Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;HSE Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;QA/QC Engineer[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-for-formwork-and.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-802392196430869503</guid><pubDate>Wed, 22 Jul 2026 18:03:14 +0000</pubDate><atom:updated>2026-07-22T23:33:14.434+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement for Painting Works</title><description>&lt;div class=&quot;painting-ms-container&quot; style=&quot;font-family: Arial, sans-serif; line-height: 1.6; color: #2d3748; max-width: 100%; margin: 0 auto;&quot;&gt;

  &lt;style&gt;
    .painting-ms-container h1 {
      color: #1a365d;
      text-align: center;
      font-size: 24px;
      margin-bottom: 20px;
      font-weight: bold;
    }
    .painting-ms-container h2 {
      color: #1a365d;
      border-bottom: 2px solid #2b6cb0;
      padding-bottom: 5px;
      margin-top: 25px;
      font-size: 18px;
      font-weight: bold;
    }
    .painting-ms-container h3 {
      color: #2b6cb0;
      margin-top: 18px;
      font-size: 16px;
      font-weight: bold;
    }
    .painting-ms-container h4 {
      color: #2d3748;
      margin-top: 12px;
      font-size: 14px;
      font-weight: bold;
    }
    .painting-ms-container table {
      width: 100%;
      border-collapse: collapse;
      margin: 15px 0;
      display: table;
    }
    .painting-ms-container th, .painting-ms-container td {
      border: 1px solid #cbd5e0;
      padding: 8px 12px;
      text-align: left;
      font-size: 13px;
    }
    .painting-ms-container th {
      background-color: #f7fafc;
      color: #2d3748;
      font-weight: bold;
    }
    .painting-ms-container ul {
      padding-left: 20px;
      margin-bottom: 12px;
    }
    .painting-ms-container li {
      margin-bottom: 6px;
      font-size: 14px;
    }
    .painting-ms-container p {
      margin-bottom: 10px;
      font-size: 14px;
    }
    .painting-ms-container .def-list td:first-child {
      font-weight: bold;
      width: 15%;
      white-space: nowrap;
    }
    .painting-ms-container .grid-tools {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
      gap: 10px;
      margin: 15px 0;
    }
    .painting-ms-container .grid-item {
      background: #f7fafc;
      border: 1px solid #e2e8f0;
      padding: 10px 14px;
      border-radius: 4px;
      font-size: 14px;
    }
    .painting-ms-container .note-box {
      background-color: #ebf8ff;
      border-left: 4px solid #3182ce;
      padding: 12px 15px;
      margin: 15px 0;
      border-radius: 2px;
    }
    .painting-ms-container .note-box p {
      margin-bottom: 6px;
      color: #2b6cb0;
    }
  &lt;/style&gt;

  &lt;!-- Title Header --&gt;
  &lt;h1&gt;Method Statement for Painting Works&lt;/h1&gt;

  &lt;!-- 1.0 Revision Status --&gt;
  &lt;h2&gt;1.0 Revision Status&lt;/h2&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Revision Number&lt;/th&gt;
        &lt;th&gt;Date&lt;/th&gt;
        &lt;th&gt;Originator&lt;/th&gt;
        &lt;th&gt;Reviewed&lt;/th&gt;
        &lt;th&gt;Approved&lt;/th&gt;
        &lt;th&gt;Description of Re-submittal&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

  &lt;!-- 2.0 Scope &amp; Objectives --&gt;
  &lt;h2&gt;2.0 Scope &amp;amp; Objectives&lt;/h2&gt;
  &lt;p&gt;The scope includes the standard guidelines and operational procedures to be adopted for executing surface preparation and painting works across all civil and structural elements[cite: 1].&lt;/p&gt;

  &lt;!-- 3.0 Reference Standards --&gt;
  &lt;h2&gt;3.0 Reference Standards&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Project Technical Specifications &amp;amp; Approved Contract Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 14428:1997&lt;/strong&gt; – Painting of structures in aggressive chemical environment: Guidelines[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 1477 (Part 1):1971&lt;/strong&gt; – Code of practice for painting of ferrous metals in buildings: Pretreatment[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 1477 (Part 2):1971&lt;/strong&gt; – Code of practice for painting of ferrous metals in buildings: Painting[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 2395 (Part 1):1994&lt;/strong&gt; – Code of practice for painting of concrete, masonry, and plaster surfaces: Operations and workmanship[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 2395 (Part 2):1994&lt;/strong&gt; – Code of practice for painting of concrete, masonry, and plaster surfaces: Schedules[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 2524 (Part 1):1968&lt;/strong&gt; – Code of practice for painting of non-ferrous metals in buildings: Pretreatment[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 2524 (Part 2):1968&lt;/strong&gt; – Code of practice for painting of non-ferrous metals in buildings: Painting[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 3140:1965&lt;/strong&gt; – Code of practice for painting asbestos cement building products[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 9954:1981&lt;/strong&gt; – Pictorial surface preparation standards for painting of steel surfaces[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 1200 (Part 13):1994&lt;/strong&gt; – Method of measurement of building and civil engineering works: Whitewashing, colour washing, distempering, and painting[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 1200 (Part 15):1987&lt;/strong&gt; – Method of measurement of building and civil engineering works: Painting, polishing, varnishing etc[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 4.0 Definitions --&gt;
  &lt;h2&gt;4.0 Definitions &amp;amp; Terminology&lt;/h2&gt;
  &lt;table class=&quot;def-list&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;MS&lt;/td&gt;
      &lt;td&gt;Method Statement[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;QCP&lt;/td&gt;
      &lt;td&gt;Quality Control Procedure[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ITP&lt;/td&gt;
      &lt;td&gt;Inspection &amp;amp; Test Plan[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

  &lt;!-- 5.0 Health &amp; Safety Hazards --&gt;
  &lt;h2&gt;5.0 Health &amp;amp; Safety Hazards&lt;/h2&gt;
  &lt;p&gt;Specific safety measures must be strictly followed as applicable on site[cite: 1]. Comprehensive health, safety, and environmental measures are detailed in the Project Safety Plan[cite: 1].&lt;/p&gt;

  &lt;!-- 6.0 Responsibilities --&gt;
  &lt;h2&gt;6.0 Roles &amp;amp; Responsibilities&lt;/h2&gt;

  &lt;h3&gt;6.1 Project Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Ensure all painting activities are strictly executed in accordance with technical specifications and contract drawings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Confirm works progress as per the approved baseline schedule, ensuring necessary operational equipment is available in good working condition[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with Client/Consultant, Project Manager, Site Engineer, Safety Engineer, and Surveyors for safe execution[cite: 1].&lt;/li&gt;
    &lt;li&gt;Directly enforce safety measures and quality control protocols in coordination with HSE and QA/QC teams[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.2 Site Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Supervise field painting operations per approved drawings and specifications[cite: 1].&lt;/li&gt;
    &lt;li&gt;Provide detailed instructions and distribute daily operational tasks to the construction crew[cite: 1].&lt;/li&gt;
    &lt;li&gt;Monitor daily progress against planned targets and report status to the Project Engineer/Manager[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with Safety Engineers to maintain safe site practices and QA Engineers for required site inspections[cite: 1].&lt;/li&gt;
    &lt;li&gt;Verify daily output reports received from the Foreman and update execution instructions accordingly[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.3 QA/QC Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Verify that all painting execution follows technical specifications and quality control procedures[cite: 1].&lt;/li&gt;
    &lt;li&gt;Inspect finished work for quality compliance prior to submitting inspection requests for Client approval[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain structured, complete inspection and test records for official project documentation[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.4 Safety Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Enforce site safety procedures in line with the Project HSE Plan, conducting regular toolbox talks[cite: 1].&lt;/li&gt;
    &lt;li&gt;Inspect active work areas, mitigate environmental or work hazards, and report incidents directly to senior management[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain a clean, organized, and tidy work environment[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.5 Foreman&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Distribute daily labor, tools, and materials in coordination with the Site Engineer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Track daily output metrics and report unexpected site conditions or resource needs immediately[cite: 1].&lt;/li&gt;
    &lt;li&gt;Enforce QC and safety requirements directly on the workforce[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 7.0 Construction Procedure / Method --&gt;
  &lt;h2&gt;7.0 Construction Procedure &amp;amp; Work Methodology&lt;/h2&gt;
  &lt;p&gt;The latest architectural drawings indicating start points, joints, levels, offsets, color codes, patterns, and paint types must be available on site[cite: 1].&lt;/p&gt;

  &lt;h3&gt;7.1 Pre-Painting Operations&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Deploy experienced, skilled painters for all specialized application stages[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain approved manufacturer shade cards and color codes on site for reference[cite: 1].&lt;/li&gt;
    &lt;li&gt;Thoroughly mix paint inside containers prior to application[cite: 1]. Prepare and apply materials strictly according to manufacturer instructions[cite: 1].&lt;/li&gt;
    &lt;li&gt;Ensure all prior civil, plastering, and electrical conduit/casing works are fully completed[cite: 1].&lt;/li&gt;
    &lt;li&gt;Secure main access doors with locks to prevent unauthorized entry during application and drying[cite: 1].&lt;/li&gt;
    &lt;li&gt;Allow a minimum gap of &lt;strong&gt;60 days&lt;/strong&gt; between the completion of plastering and the start of painting[cite: 1].&lt;/li&gt;
    &lt;li&gt;Monitor moisture content in walls[cite: 1]. If walls cannot fully dry out, apply permeable coatings (lime wash, color wash, cement paint, or oil-free distemper) to permit natural curing[cite: 1]. Do not apply glossy paint until drying is complete[cite: 1].&lt;/li&gt;
    &lt;li&gt;Do not execute painting in wet, humid, or unfavorable weather conditions where dew formation is likely[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.2 Surface Preparation (Plaster &amp;amp; Masonry)&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Inspect walls to ensure they are sanded and dusted off[cite: 1].&lt;/li&gt;
    &lt;li&gt;Once thoroughly dry, brush wall surfaces with emery/sandpaper to remove loose particles, dust, and efflorescence[cite: 1].&lt;/li&gt;
    &lt;li&gt;Cut observed wall cracks into a &#39;V&#39;-shaped groove using a round wheel cutter to the crack&#39;s full depth[cite: 1]. Fill the groove with Plaster of Paris (POP) or specialized crack sealant and allow it to dry completely[cite: 1].&lt;/li&gt;
    &lt;li&gt;Inspect plastered surfaces for hollowness/voids and complete rectifications as guided by the QA department[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.3 Execution &amp;amp; Application Procedures&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Verify complete availability of primer, putty, paint, thinners, linseed oil, turpentine, brushes, rollers, and masking materials before beginning[cite: 1].&lt;/li&gt;
    &lt;li&gt;Protect non-painted surfaces, joinery, and floors using empty cement bags, plastic sheets, or hessian cloth[cite: 1].&lt;/li&gt;
    &lt;li&gt;Complete ceiling painting before painting adjacent walls[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Wetting:&lt;/strong&gt; Wet surfaces at least 2 hours prior to applying cement paint[cite: 1]. Acrylic paints do not require pre-wetting unless specified by the manufacturer[cite: 1].&lt;/li&gt;
    &lt;li&gt;In hot/dry weather, set up protective cloth curtains to work under shade[cite: 1]. Keep paint buckets stirred continuously to prevent segregation[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply waterproof polymer coats to dead walls to prevent water ingress[cite: 1]. Apply a suitable primer coat before the polymer layer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply an anti-fungal/algae-repellent coat (via spray machine) on exposed walls[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.4 Primer Application &amp;amp; Touch-Up&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Tint the primer coat close to the finish color for improved coverage[cite: 1].&lt;/li&gt;
    &lt;li&gt;Saturate rollers evenly[cite: 1]. Apply from the middle of the wall upward toward the ceiling, then down to the floor maintaining continuous strokes[cite: 1]. Use brushes to cut in edges and corners[cite: 1].&lt;/li&gt;
    &lt;li&gt;Inspect primed surfaces for nail holes or cuts[cite: 1]. Fill defects using drywall compound/putty, sand smooth after drying, and dust off[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.5 Application of First Finish Coat&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Cut in edges with a brush and roll the main surface wall immediately[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply brush strokes in a systematic sequence: one downward, one upward, and one left-to-right[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Curing Cement Paint:&lt;/strong&gt; After 12 hours of hardening, cure cement paint by fog spraying or sprinkling water 2–3 times daily for 2 days[cite: 1]. In hot weather, moisten the 1st coat before applying the 2nd coat[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Acrylic Paint:&lt;/strong&gt; No curing required[cite: 1]. Maintain a minimum 8-hour gap between successive coats[cite: 1].&lt;/li&gt;
    &lt;li&gt;Re-check for surface imperfections, touch up with compound, sand lightly, and dust off[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.6 Application of Second &amp;amp; Final Finish Coats&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Apply the 2nd coat using the same method as the first[cite: 1]. Maintain wet hessian barriers to protect finished coats from direct sun and wind[cite: 1].&lt;/li&gt;
    &lt;li&gt;Cure 2nd coat of cement paint for at least 2 days[cite: 1]. (No water curing required for acrylic or textured finishes)[cite: 1].&lt;/li&gt;
    &lt;li&gt;If a 3rd coat is specified by the Architect, apply it thinner than the preceding coats[cite: 1].&lt;/li&gt;
    &lt;li&gt;Spray painting machines may be utilized across entire surfaces where specified[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Post-Painting Cleanup:&lt;/strong&gt; Remove paint stains from doors, frames, tiles, glass panes, MS grills, handrails, and electrical boxes[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.7 Specific Paint Types &amp;amp; Application Details&lt;/h3&gt;

  &lt;h4&gt;White Wash&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Prepare slaked lime solution (Donga) by mixing crushed lime with water and filtering through cloth[cite: 1].&lt;/li&gt;
    &lt;li&gt;Add fabric whitener (Indigo powder), glue, and salt to the Donga mixture[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply 1st coat using three-way brush strokes (down, up, left-to-right)[cite: 1]. Allow to dry before applying the 2nd (and optional 3rd) coat[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;Colour Wash&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Prepared similarly to white wash, replacing Indigo powder with specified color pigments[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply in 2 coats following standard brush application rules[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;Dry Distemper&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Prepare mix by adding ~500 ml water per 1 kg powder distemper (or per manufacturer instructions)[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply 1st coat on clean, sanded walls[cite: 1]. Allow to dry before applying 2nd coat[cite: 1]. Apply a thinner 3rd coat if specified[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;Oil Bound Distemper (OBD) &amp;amp; Flat Oil Paint&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Apply primer coat (diluted with ~300 ml thinner per liter of primer) over prepared surfaces[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply full putty coat (25 kg whiting powder + 500 ml linseed oil + 1 L white oil paint + water, or approved readymade putty)[cite: 1]. Let dry, apply a second layer of primer and putty, then sand smooth with emery paper[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply 1st coat of OBD (diluted ~500 ml water per 1 L OBD)[cite: 1]. Touch up surface undulations with putty after drying[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply 2nd coat of OBD or Flat Oil Paint (diluted ~500 ml thinner per 1 L paint)[cite: 1]. Use opened paint cans within 2–3 days[cite: 1]. Lightly rub finished surface with a clean cloth without stripping paint[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;div class=&quot;note-box&quot;&gt;
    &lt;p&gt;&lt;strong&gt;IMPORTANT NOTE ON THINNERS:&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;Do not add thinners (like mineral turpentine) merely on the assumption that factory paint is too thick[cite: 1]. Viscosity must be checked prior to adjustment[cite: 1]. Thinner addition requires prior technical approval and must follow manufacturer guidelines[cite: 1].&lt;/p&gt;
  &lt;/div&gt;

  &lt;h4&gt;Lustre Oil Paint&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Follow OBD prep steps, adding a base coat (50% white oil paint + 50% primer + thinner) over the second putty layer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply two coats of Lustre paint (thinned ~500 ml per liter or per specs)[cite: 1]. Apply a thin 3rd coat if required[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;Paint on Structural Steel / MS Surfaces&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Clean steel surfaces of rust and mill scale using emery paper/wire brushing[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply 1st coat of red oxide primer[cite: 1]. Once dry, apply a 2nd coat of red oxide[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply two coats of synthetic enamel/oil paint (thinned per specs), allowing the 1st coat to dry fully before applying the 2nd[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;Paint on Wooden Surfaces&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Execute surface preparation, primer, putty, and finish coats following the methodology specified for Oil Bound Distemper[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;Plastic Emulsion &amp;amp; Plastic Acrylic Paint&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Requires an ultra-smooth plaster base (Gypsum or POP)[cite: 1]. (Donga application is not required over Gypsum/POP)[cite: 1].&lt;/li&gt;
    &lt;li&gt;Mix per manufacturer guidelines and apply finish coats uniformly[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;Textured &amp;amp; Special Decorative Finishes&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Spray Texture:&lt;/strong&gt; Spray Acrylic Quartz (1 mm to 1.5 mm thickness) using a compressor spray gun with designer nozzles[cite: 1]. Creates a washable, decorative pattern[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Roller Texture:&lt;/strong&gt; Apply Acrylic Quartz with a trowel, then form pattern grooves using a specialized pattern roller (1 mm to 1.5 mm thickness)[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Acrylic Top Coat:&lt;/strong&gt; Apply selected topcoat of Acrylic Emulsion by brush[cite: 1]. Apply a 2nd coat to make the texture waterproof and weatherproof[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Synthetic Resin Base with Acrylic Overcoats (Renova):&lt;/strong&gt;
      &lt;ul&gt;
        &lt;li&gt;Clean base plaster, apply primer coat, and lightly roughen cement plaster with a wire brush to form mild mechanical keys[cite: 1].&lt;/li&gt;
        &lt;li&gt;Apply fiber-reinforced synthetic cladding plaster by trowel (acid and alkali resistant)[cite: 1].&lt;/li&gt;
        &lt;li&gt;Apply 5 total layers: 1 trowel coat of synthetic plaster followed by 4 chemical brush overcoats in specified plain, stone, or metallic finishes[cite: 1].&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 8.0 Material Requirements --&gt;
  &lt;h2&gt;8.0 Material Requirements&lt;/h2&gt;
  &lt;p&gt;All materials must comply with project specifications and base requirements[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Paint Types:&lt;/strong&gt; White Wash / Colour Wash, Dry Distemper, Oil Bound Distemper (OBD), Oil / Lustre / Plastic / Velvet Paint, Cement Paint, Acrylic Paint, Textured Paint[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Consumables &amp;amp; Additives:&lt;/strong&gt; Primer, Putty, Thinner, Glue, Whiting Powder, Linseed Oil, Turpentine, Crack Filling Material, and Adhesives[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Base Classifications:&lt;/strong&gt;
      &lt;ul&gt;
        &lt;li&gt;Water-based Paints[cite: 1]&lt;/li&gt;
        &lt;li&gt;Oil-based Paints[cite: 1]&lt;/li&gt;
        &lt;li&gt;Polymer-based Paints[cite: 1]&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 9.0 Equipment Requirements --&gt;
  &lt;h2&gt;9.0 Equipment Requirements&lt;/h2&gt;
  &lt;div class=&quot;grid-tools&quot;&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Paint Brushes (Various Sizes)[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Paint Rollers &amp;amp; Pattern Rollers[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Trowels &amp;amp; Putty Knives[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Spray Gun &amp;amp; Air Compressor[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Emery / Sandpaper &amp;amp; Wire Brushes[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Hessian Cloth &amp;amp; Protection Sheets[cite: 1]&lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 10.0 Health and Safety Provisions --&gt;
  &lt;h2&gt;10.0 Health &amp;amp; Safety Provisions&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Safety is paramount; all painting tasks must adhere to safe working practices[cite: 1].&lt;/li&gt;
    &lt;li&gt;Provide adequate safety barriers, signboards, advance warning notices, and flashing warning lights around painting work zones[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 11.0 Quality Control Approvals --&gt;
  &lt;h2&gt;11.0 Quality Control Approvals&lt;/h2&gt;
  &lt;p&gt;Required QC documentation must be approved prior to starting field painting activities[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Quality Control Procedure (QCP) for Painting Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Painting Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Field Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Execution &amp;amp; Testing Inspection Checksheets[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 12.0 Supporting Documentation --&gt;
  &lt;h2&gt;12.0 Supporting Documentation&lt;/h2&gt;
  &lt;p&gt;This Method Statement must be read in conjunction with[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Contract Specifications and Approved Architectural/Structural Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;Quality Control Procedure (QCP) for Painting[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Painting[cite: 1]&lt;/li&gt;
    &lt;li&gt;Method Statement (MS) for Painting[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project HSE Plan[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 13.0 Distribution List --&gt;
  &lt;h2&gt;13.0 Distribution List&lt;/h2&gt;
  &lt;p&gt;Issued for implementation, field verification, and record maintenance[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Management Representative[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Manager[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;Site Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;HSE Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;QA/QC Engineer[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-for-painting-works.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-8761776748681230445</guid><pubDate>Wed, 22 Jul 2026 17:59:27 +0000</pubDate><atom:updated>2026-07-22T23:29:27.177+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement details the standard procedure for Roadwork execution</title><description>&lt;div class=&quot;roadwork-ms-container&quot; style=&quot;font-family: Arial, sans-serif; line-height: 1.6; color: #2d3748; max-width: 100%; margin: 0 auto;&quot;&gt;

  &lt;style&gt;
    .roadwork-ms-container h1 {
      color: #1a365d;
      text-align: center;
      font-size: 24px;
      margin-bottom: 20px;
      font-weight: bold;
    }
    .roadwork-ms-container h2 {
      color: #1a365d;
      border-bottom: 2px solid #2b6cb0;
      padding-bottom: 5px;
      margin-top: 25px;
      font-size: 18px;
      font-weight: bold;
    }
    .roadwork-ms-container h3 {
      color: #2b6cb0;
      margin-top: 15px;
      font-size: 15px;
      font-weight: bold;
    }
    .roadwork-ms-container table {
      width: 100%;
      border-collapse: collapse;
      margin: 15px 0;
      display: table;
    }
    .roadwork-ms-container th, .roadwork-ms-container td {
      border: 1px solid #cbd5e0;
      padding: 8px 12px;
      text-align: left;
      font-size: 13px;
    }
    .roadwork-ms-container th {
      background-color: #f7fafc;
      color: #2d3748;
      font-weight: bold;
    }
    .roadwork-ms-container ul {
      padding-left: 20px;
      margin-bottom: 12px;
    }
    .roadwork-ms-container li {
      margin-bottom: 6px;
      font-size: 14px;
    }
    .roadwork-ms-container p {
      margin-bottom: 10px;
      font-size: 14px;
    }
    .roadwork-ms-container .def-list td:first-child {
      font-weight: bold;
      width: 15%;
      white-space: nowrap;
    }
    .roadwork-ms-container .spec-table td {
      font-size: 13px;
    }
  &lt;/style&gt;

  &lt;!-- Title Header --&gt;
  &lt;h1&gt;Method Statement for Roadwork Construction&lt;/h1&gt;

  &lt;!-- 1.0 Revision Status --&gt;
  &lt;h2&gt;1.0 Revision Status&lt;/h2&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Revision Number&lt;/th&gt;
        &lt;th&gt;Date&lt;/th&gt;
        &lt;th&gt;Originator&lt;/th&gt;
        &lt;th&gt;Reviewed&lt;/th&gt;
        &lt;th&gt;Approved&lt;/th&gt;
        &lt;th&gt;Description of Re-submittal&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

  &lt;!-- 2.0 Scope &amp; Objectives --&gt;
  &lt;h2&gt;2.0 Scope &amp;amp; Objectives&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;This Method Statement details the standard procedure for Roadwork execution[cite: 1].&lt;/li&gt;
    &lt;li&gt;The contractor shall design and prepare structural/pavement drawings backed by detailed design calculations[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 3.0 Reference --&gt;
  &lt;h2&gt;3.0 Reference Standards&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Project Technical Specifications[cite: 1]&lt;/li&gt;
    &lt;li&gt;Civil Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC 37:2001&lt;/strong&gt; – Guidelines for the Design of Flexible Pavements (incorporating bituminous surfacing, granular base, and sub-base as per MoRTH Specifications Sections 400 &amp;amp; 500)[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC: SP-20:2002&lt;/strong&gt; – Rural Roads Manual (for road formation, culverts, and minor bridges on rural roads/ODRs with projected traffic &amp;lt; 450 CVPD)[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC 81:1997 / 81:2001&lt;/strong&gt; – Guidelines for Strengthening Road Pavements using Benkelman Beam Deflection Technique[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC 58:1974&lt;/strong&gt; – Guidelines for the Design of Rigid Pavements for Highways[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC 15:1981&lt;/strong&gt; – Standard Specification and Code of Practice for Construction of Concrete Roads[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC 86:1983&lt;/strong&gt; – Geometric Design Standards for Urban Roads in Plains[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC 73:1980&lt;/strong&gt; – Geometric Design Standards for Rural (Non-Urban) Highways[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IRC 64:1990&lt;/strong&gt; – Guidelines for Capacity of Roads in Rural Areas[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 4.0 Definitions --&gt;
  &lt;h2&gt;4.0 Definitions &amp;amp; Terminology&lt;/h2&gt;
  &lt;table class=&quot;def-list&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;MS&lt;/td&gt;
      &lt;td&gt;Method Statement[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;QCP&lt;/td&gt;
      &lt;td&gt;Quality Control Procedure[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ITP&lt;/td&gt;
      &lt;td&gt;Inspection &amp;amp; Test Plan[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NH&lt;/td&gt;
      &lt;td&gt;National Highways – Main arterial highways connecting ports, state capitals, and industrial centers[cite: 1].&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SH&lt;/td&gt;
      &lt;td&gt;State Highways – Routes linking district headquarters and major cities to National Highways[cite: 1].&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;MDR&lt;/td&gt;
      &lt;td&gt;Major District Roads – Key roads connecting production areas and markets[cite: 1].&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ODR&lt;/td&gt;
      &lt;td&gt;Other District Roads – Roads serving rural production areas and market outlets[cite: 1].&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ROB / RUB&lt;/td&gt;
      &lt;td&gt;Road Over Bridge / Road Under Bridge[cite: 1]&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

  &lt;h3&gt;Technical Terminology&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Consolidation:&lt;/strong&gt; Process of making freshly placed concrete into a uniform, compact mass by eliminating voids around reinforcement[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Clearing &amp;amp; Grubbing:&lt;/strong&gt; Preparing the road right-of-way by removing surface trees, stumps, and organic debris[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Staking:&lt;/strong&gt; Transferring alignment and design elevation data from construction drawings to the ground[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 5.0 Health &amp; Safety Hazards --&gt;
  &lt;h2&gt;5.0 Health and Safety Hazards&lt;/h2&gt;
  &lt;p&gt;Specific safety measures must be strictly enforced on-site as covered in the Project Safety Plan and &lt;strong&gt;IRC: SP: 55&lt;/strong&gt; (Guidelines on Safety in Road Construction Zones)[cite: 1].&lt;/p&gt;

  &lt;!-- 6.0 Responsibilities --&gt;
  &lt;h2&gt;6.0 Roles &amp;amp; Responsibilities&lt;/h2&gt;

  &lt;h3&gt;6.1 Project Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Ensure roadwork execution aligns strictly with specifications and approved construction drawings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Verify that equipment is in good operational condition and activities follow the approved baseline schedule[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with Client/Consultant, Site Engineers, Safety Team, and Surveyors for seamless execution[cite: 1].&lt;/li&gt;
    &lt;li&gt;Directly oversee quality control and health/safety plan enforcement[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.2 Site Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Supervise field execution according to drawings and technical specifications[cite: 1].&lt;/li&gt;
    &lt;li&gt;Distribute daily responsibilities to construction foremen and monitor daily progress outputs[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with Safety Engineers to maintain safe site practices and QA Engineers for required sampling/testing[cite: 1].&lt;/li&gt;
    &lt;li&gt;Verify levels and alignment markers with the survey team[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.3 QA/QC Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Enforce quality control procedures and conduct inspections prior to requesting Client approval[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain complete, auditable inspection and material test records[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.4 Safety Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Implement site safety measures as per the HSE Plan, keeping the workforce trained and aware[cite: 1].&lt;/li&gt;
    &lt;li&gt;Inspect active work zones, prevent unsafe conditions, and keep working areas clean and tidy[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.5 Foreman&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Distribute daily manpower and machinery resources in coordination with the Site Engineer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Track daily outputs, oversee setting out execution, and report site incidents immediately[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.6 Surveyor&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Establish control benchmarks and maintain final alignment centerline, formation levels, and survey files[cite: 1].&lt;/li&gt;
    &lt;li&gt;Perform double-run leveling and angular measurements using high-precision instruments (e.g., Automatic Level, Theodolite, Distomat)[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 7.0 Procedure / Method to be Employed --&gt;
  &lt;h2&gt;7.0 Construction Procedure&lt;/h2&gt;

  &lt;h3&gt;7.1 Documentation &amp;amp; Site Mobilization&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Maintain key project documents on site: Survey reports, BOQ, Site Order Book, Work Diaries, Quality Control Record Books, up-to-date schedule, and cloth-mounted working drawings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Establish temporary traffic diversions per site conditions for works executed over partial roadway widths[cite: 1].&lt;/li&gt;
    &lt;li&gt;Ensure environmental protection: Keep borrow pits out of the ROW, control soil erosion, locate asphalt/batching plants away from habitations, and suppress dust[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.2 Setting Out &amp;amp; Surveying&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Reference the main centerline every 50 m in plain/rolling terrain, 20 m in hilly terrain, and at all curve points[cite: 1].&lt;/li&gt;
    &lt;li&gt;Establish working benchmarks tied to reference points at a minimum frequency of 4 per kilometer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Set offset timber/steel level posts 1 meter beyond formation edges to verify finished layer elevations[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.3 Clearing &amp;amp; Grubbing&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Demarcate limits and preserve protected roadside utilities, trees, and structures[cite: 1].&lt;/li&gt;
    &lt;li&gt;Cut trees and stumps such that no organic material remains within 500 mm of the subgrade[cite: 1].&lt;/li&gt;
    &lt;li&gt;Strip and stockpile topsoil for reapplication on slopes; do not burn organic matter in forested areas[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.4 Earthwork &amp;amp; Subgrade Preparation&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Maintain specified cross-falls right from the subgrade level[cite: 1]. The finished subgrade must be at least 0.6 m above the High Flood Level (HFL) or natural ground[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Compaction Standards:&lt;/strong&gt; Compact subgrade to at least 97% Laboratory Maximum Dry Density (per IS: 2720 Part VIII)[cite: 1]. Embankment layers must achieve at least 95% compaction[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Layer Limits:&lt;/strong&gt; Spread embankment material in loose layers not exceeding 200 mm[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Material Density Criteria:&lt;/strong&gt; Minimum dry unit weight for embankments up to 3 m height is 15.2 kN/m³; for heights &amp;gt; 3 m or subject to flooding, minimum is 17.5 kN/m³[cite: 1]. Subgrade CBR must exceed 5%[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.5 Special Earthwork Conditions&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Expansive Clays:&lt;/strong&gt; Not allowed in the subgrade or the 500 mm zone directly beneath it[cite: 1]. Allowed in lower embankment sections if compacted to &amp;ge; 90% density[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Widening Existing Roads:&lt;/strong&gt; Cut horizontal benches 0.3 m wide if existing side slopes are steeper than 4:1 to ensure structural bonding[cite: 1]. Scarify existing asphalt surfaces by 50 mm if within 1 m of the new subgrade level[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Backfilling Structures:&lt;/strong&gt; Suspend filling around structures until concrete/masonry has cured for 14 days[cite: 1]. Raise fill symmetrically on both sides using non-plastic material (PI &amp;le; 20, LL &amp;le; 40)[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Rockfill Embankment:&lt;/strong&gt; Prohibited within 500 mm below formation level[cite: 1]. Layer thickness must not exceed 500 mm with maximum rock size of 300 mm, compacted with 5 passes of an 8–10 ton vibratory roller[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.6 Blasting &amp;amp; Pre-Splitting Operations&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Conduct blasting only during fixed, pre-announced hours under experienced supervision with red flag warnings[cite: 1]. Store explosives in an approved, lightning-protected magazine[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Pre-Splitting:&lt;/strong&gt; Drill parallel holes (&amp;le; 900 mm spacing) along the desired slope[cite: 1]. Keep production holes at least 2.5 m away from the pre-split line, firing pre-split holes prior to main blasts[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.7 Macadam Base Course Construction&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Subgrade Protection:&lt;/strong&gt; On high-plasticity subgrades, lay a blanket course (3–4 inches of sand/screenings) or geotextile to prevent base infiltration[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Spreading &amp;amp; Compacting:&lt;/strong&gt; Spread coarse aggregates uniformly[cite: 1]. Roll from edges to center (or low-to-high side on superelevations) with steel-wheeled rollers until wave movement ceases[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Applying Screenings:&lt;/strong&gt; Spread fine screenings in thin lifts while rolling continuously to fill surface voids[cite: 1]. Sprinkle water to flush screenings into voids, rolling until a grout wave forms[cite: 1]. Allow section to dry completely[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Surface Tolerances:&lt;/strong&gt; Check surface with a 12-foot straightedge[cite: 1]. Maximum allowable deviation is 3/4 inch for standard roads/airfields and 1/8 inch for jet aircraft pavements[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

&lt;!-- 7.8 Rigid Pavement (PCC) Procedures --&gt;
  &lt;h3&gt;7.8 Rigid Pavement (PCC) Procedures&lt;/h3&gt;
  
  &lt;h4&gt;7.8.1 Placement&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Placement:&lt;/strong&gt; Place concrete directly via transit mixers/spreaders avoiding excessive relocation to prevent segregation[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;7.8.2 Screeding (Strikeoff)&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;The screeding or strikeoff process cuts off excess roughly placed concrete to achieve target slab design elevations[cite: 1].&lt;/li&gt;
    &lt;li&gt;This is typically performed by dragging a calibrated straightedge across the concrete surface at required grade levels[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h4&gt;7.8.3 Consolidation&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;Consolidation is achieved using internal slender needle vibrators[cite: 1].&lt;/li&gt;
    &lt;li&gt;Proper consolidation through controlled vibration is vital to structural performance and concrete durability[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;div class=&quot;note-box&quot;&gt;
    &lt;p&gt;&lt;strong&gt;CRITICAL VIBRATION NOTES:&lt;/strong&gt;&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Over-Vibration Hazards:&lt;/strong&gt; Prolonged vibration in one area or excessively high vibration rates can cause non-uniform aggregate distribution, loss of entrained air, and surface bleeding (water accumulation), leading to severe durability reduction[cite: 1].&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Under-Vibration Hazards:&lt;/strong&gt; Insufficient vibration time or low vibration rates can result in poor coarse aggregate distribution and large entrained air voids, compromising compressive strength and slab integrity[cite: 1].&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Vibrator Static Head:&lt;/strong&gt; The depth of fresh PCC above the vibrator head assists in driving coarse aggregate particles together as the vibrator advances[cite: 1].&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;h4&gt;7.8.4 Finishing Operations&lt;/h4&gt;
  &lt;p&gt;Finishing encompasses all processes required to achieve final surface levels, smoothness, and non-skid texturing[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Floating:&lt;/strong&gt; A flat float is passed over fresh concrete to eliminate high/low spots, embed coarse aggregate below the surface, clear minor imperfections, and consolidate top mortar in preparation for texturing[cite: 1].&lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;Texturing:&lt;/strong&gt; Imparts a non-skid texture to the smooth floated concrete surface[cite: 1]:
      &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Microtexture:&lt;/strong&gt; Produced by dragging burlap or artificial turf behind the paver to enhance tire friction and safe low-speed vehicular control[cite: 1].&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Macrotexture:&lt;/strong&gt; Achieved via transverse tining to facilitate surface water drainage and prevent high-speed hydroplaning[cite: 1]. Standard tining dimensions require grooves 3–5 mm deep, 3 mm wide, and spaced 12–20 mm apart to obtain an average texture depth around 0.7 mm[cite: 1]. Untextured margins may be left over joint lines to ensure clean joint sawing and sealing[cite: 1].&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 8.0 Material Requirements --&gt;
  &lt;h2&gt;8.0 Material Requirements&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Concrete:&lt;/strong&gt; Plain Cement Concrete (PCC) and Reinforced Cement Concrete (RCC) mixes prepared strictly as per design specifications[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Bitumen:&lt;/strong&gt; Bituminous binders, tack coats, or prime coats as specified for flexible layers or expansion joint fillings[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Aggregates:&lt;/strong&gt; Clean, well-graded Fine Aggregates (sand) and Coarse Aggregates (crushed stone)[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Soil:&lt;/strong&gt; Suitable selected soil for subgrade or embankment construction (if required)[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 9.0 Equipment Requirements --&gt;
  &lt;h2&gt;9.0 Equipment Requirements&lt;/h2&gt;
  &lt;div class=&quot;pcc-grid-tools&quot;&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Auto Level Instrument &amp;amp; Staff[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Excavators &amp;amp; JCBs[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Rollers (Steel &amp;amp; Vibratory)[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Dozers &amp;amp; Earthmoving Machinery[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Bitumen Laying Machines / Pavers[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Bitumen Heating Drums &amp;amp; Boilers[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Concrete Pumps &amp;amp; Hose Pipes[cite: 1]&lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 10.0 Health and Safety Provisions --&gt;
  &lt;h2&gt;10.0 Health and Safety Provisions&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;High priority is given to jobsite safety to maintain safe construction practices during all roadwork operations[cite: 1].&lt;/li&gt;
    &lt;li&gt;Install safety barriers, warning signboards, advance traffic notices, and warning tape surrounding active construction zones[cite: 1].&lt;/li&gt;
    &lt;li&gt;Enforce extra precautions during topsoil stripping and deep earthwork excavation operations[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 11.0 Quality Control Approvals --&gt;
  &lt;h2&gt;11.0 Quality Control Approvals&lt;/h2&gt;
  &lt;p&gt;All mandatory Quality Control documents must be formally approved prior to executing roadwork[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Quality Control Procedure (QCP) for Roadwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Roadwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Field Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Execution &amp;amp; Testing Check Sheets for Roadwork[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 12.0 Supporting Documentation --&gt;
  &lt;h2&gt;12.0 Supporting Documentation&lt;/h2&gt;
  &lt;p&gt;This Method Statement must be implemented in conjunction with[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Contract Specifications and Approved Construction Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;Quality Control Procedure (QCP) for Roadwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Roadwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Method Statement (MS) for General Roadwork[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project HSE Plan[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 13.0 Distribution List --&gt;
  &lt;h2&gt;13.0 Distribution List&lt;/h2&gt;
  &lt;p&gt;Issued for implementation, field verification, and records[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Management Representative[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Manager[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;Site Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;HSE Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;QA/QC Engineer[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-details-standard.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-6414399741933953336</guid><pubDate>Wed, 22 Jul 2026 17:52:57 +0000</pubDate><atom:updated>2026-07-22T23:22:57.842+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement for Plain Cement Concrete (PCC) Works</title><description>&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.6; color: #333333; max-width: 100%; margin: 0 auto;&quot; class=&quot;pcc-ms-container&quot;&gt;

  &lt;style&gt;
    .pcc-ms-container h2 {
      color: #1a365d;
      border-bottom: 2px solid #2b6cb0;
      padding-bottom: 5px;
      margin-top: 25px;
      font-size: 20px;
    }
    .pcc-ms-container h3 {
      color: #2b6cb0;
      margin-top: 15px;
      font-size: 16px;
    }
    .pcc-ms-container table {
      width: 100%;
      border-collapse: collapse;
      margin: 15px 0;
      overflow-x: auto;
      display: block;
    }
    .pcc-ms-container th, .pcc-ms-container td {
      border: 1px solid #cbd5e0;
      padding: 8px 12px;
      text-align: left;
      font-size: 14px;
    }
    .pcc-ms-container th {
      background-color: #f7fafc;
      color: #2d3748;
      font-weight: bold;
    }
    .pcc-ms-container ul {
      padding-left: 20px;
      margin-bottom: 15px;
    }
    .pcc-ms-container li {
      margin-bottom: 6px;
    }
    .pcc-ms-container p {
      margin-bottom: 12px;
    }
    .pcc-grid-tools {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
      gap: 10px;
      margin: 15px 0;
    }
    .pcc-grid-item {
      background: #f7fafc;
      border: 1px solid #e2e8f0;
      padding: 8px 12px;
      border-radius: 4px;
      font-size: 14px;
    }
  &lt;/style&gt;

  &lt;!-- Title Header --&gt;
  &lt;h1 style=&quot;color: #1a365d; text-align: center; font-size: 24px; margin-bottom: 20px;&quot;&gt;Method Statement for Plain Cement Concrete (PCC) Works&lt;/h1&gt;

  &lt;!-- 1.0 Revision Status --&gt;
  &lt;h2&gt;1.0 Revision Status&lt;/h2&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Revision Number&lt;/th&gt;
        &lt;th&gt;Date&lt;/th&gt;
        &lt;th&gt;Originator&lt;/th&gt;
        &lt;th&gt;Reviewed&lt;/th&gt;
        &lt;th&gt;Approved&lt;/th&gt;
        &lt;th&gt;Description of Re-submittal&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;td&gt;&amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

  &lt;!-- 2.0 Scope &amp; Objectives --&gt;
  &lt;h2&gt;2.0 Scope &amp;amp; Objectives&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;This Method Statement details the complete procedure for Plain Cement Concrete (PCC) works[cite: 1].&lt;/li&gt;
    &lt;li&gt;PCC with an aggregate size of 40 mm is utilized as a bed/levelling layer for foundations and flooring[cite: 1].&lt;/li&gt;
    &lt;li&gt;PCC with an aggregate size of 20 mm is utilized for window sills, coping, and damp-proof courses (plinth concrete) incorporating waterproofing compounds[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 3.0 Reference --&gt;
  &lt;h2&gt;3.0 Reference&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Project Technical Specifications[cite: 1]&lt;/li&gt;
    &lt;li&gt;Contract Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 456:2000&lt;/strong&gt; – Plain and Reinforced Concrete: Code of Practice[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 6461 (Part 7): 1973&lt;/strong&gt; – Code of symbols, terms and definitions relating to concrete: Part 7 Mixing, laying, compaction, curing and other constructional aspects[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IS 4845&lt;/strong&gt; – Definitions and terminology relating to hydraulic cement[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 4.0 Definitions --&gt;
  &lt;h2&gt;4.0 Definitions &amp;amp; Abbreviations&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;MS:&lt;/strong&gt; Method Statement[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;QCP:&lt;/strong&gt; Quality Control Procedure[cite: 1]&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;ITP:&lt;/strong&gt; Inspection &amp;amp; Test Plan[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 5.0 Health and Safety Hazards --&gt;
  &lt;h2&gt;5.0 Health &amp;amp; Safety Hazards&lt;/h2&gt;
  &lt;p&gt;Specific safety measures must be followed as applicable[cite: 1]. All mandatory health, safety, and environmental measures are detailed separately in the Project Safety Plan[cite: 1].&lt;/p&gt;

  &lt;!-- 6.0 Responsibilities --&gt;
  &lt;h2&gt;6.0 Responsibilities&lt;/h2&gt;

  &lt;h3&gt;6.1 Project Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Ensure all PCC works are executed strictly in accordance with approved specifications and drawings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Verify that ongoing activities adhere to the planned construction program and that all required equipment is on site and in good operational condition[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with the Client/Consultant, Project Manager, Site Engineer, Safety Engineer, and Surveyor for safe, smooth execution[cite: 1].&lt;/li&gt;
    &lt;li&gt;Enforce safety measures and quality control in conjunction with the Safety and QA/QC Engineers following the project HSE and Quality Plans[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.2 Site Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Directly supervise PCC operations as per project specifications and construction drawings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Distribute daily site responsibilities and technical details to the construction execution team[cite: 1].&lt;/li&gt;
    &lt;li&gt;Monitor daily work progress against the project schedule and report updates to the Project Engineer/Manager[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with Safety personnel to maintain safe working practices at all times[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with QA/QC engineers to initiate timely sampling, testing, and final inspections[cite: 1].&lt;/li&gt;
    &lt;li&gt;Ensure maximum productivity from deployed labor and machinery, cross-checking outputs against daily foreman reports[cite: 1].&lt;/li&gt;
    &lt;li&gt;Communicate updated drawing revisions to foremen promptly[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate with the surveyor to verify lines, levels, and structural alignments[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.3 QA Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Verify that all ongoing and completed PCC works comply with project specifications and quality procedures[cite: 1].&lt;/li&gt;
    &lt;li&gt;Perform physical inspections of finished works prior to submitting requests for Client/Consultant approval[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain structured inspection and concrete test records for future reference[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.4 Safety Engineer&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Enforce site implementation of all safety measures outlined in the HSE plan[cite: 1].&lt;/li&gt;
    &lt;li&gt;Inspect active site areas to verify safety adequacy and conduct toolbox talks to prevent site incidents[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain clean and tidy work areas across all PCC activity zones[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.5 Foreman&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Manage daily labor and equipment distribution in coordination with the Site Engineer[cite: 1].&lt;/li&gt;
    &lt;li&gt;Submit daily output reports and assist in short-term work planning[cite: 1].&lt;/li&gt;
    &lt;li&gt;Coordinate directly with surveyors for setting out and reference marking[cite: 1].&lt;/li&gt;
    &lt;li&gt;Implement all safety and quality control requirements passed down by project engineers[cite: 1].&lt;/li&gt;
    &lt;li&gt;Report any site delays or unforeseen site conditions to the Site Engineer immediately[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;6.6 Surveyor&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Establish benchmarks from verified control points and provide all line, layout, and level markings[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain all survey data and perform periodic level checks on ongoing PCC pours[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 7.0 Procedure / Method to be Employed --&gt;
  &lt;h2&gt;7.0 Procedure / Method to be Employed&lt;/h2&gt;

  &lt;h3&gt;7.1 Site Preparation &amp;amp; Layout Check&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Verify layout, line, levels, and plan dimensions with the survey team prior to placing concrete[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.2 Concrete Mix &amp;amp; Proportioning&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Nominal Mix:&lt;/strong&gt; Use 1:2:4 (Cement : Sand : Coarse Aggregate) by volume when specified[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Compressive Strength:&lt;/strong&gt; Standard 1:2:4 nominal mix concrete must achieve a minimum 7-day compressive strength of 140 kg/cm²[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.3 Concrete Mixing&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Hand Mixing:&lt;/strong&gt; Permitted only on a watertight masonry platform or heavy-duty sheet iron tray[cite: 1].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Machine / Batch Mixing:&lt;/strong&gt; Load coarse aggregates, sand, and cement into the mixer drum in correct proportions to obtain a uniform distribution[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.4 Slump Control&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Conduct standard slump tests regularly to control water additions and maintain concrete consistency[cite: 1].&lt;/li&gt;
    &lt;li&gt;Maintain a slump range between &lt;strong&gt;7.5 cm and 10 cm&lt;/strong&gt; for general building works[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.5 Formwork &amp;amp; Shuttering&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Provide sturdy shuttering and centering to support and confine concrete to design dimensions[cite: 1].&lt;/li&gt;
    &lt;li&gt;Apply approved shuttering oil on inner faces to prevent concrete sticking upon stripping[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.6 Concrete Placement &amp;amp; Compaction&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Deposit concrete gently into place (do not drop from height or throw) in uniform layers not exceeding &lt;strong&gt;15 cm in depth&lt;/strong&gt;[cite: 1].&lt;/li&gt;
    &lt;li&gt;Compact thoroughly using steel rods, wooden tampers, or mechanical immersion/screed vibrators to eliminate voids and achieve maximum density[cite: 1].&lt;/li&gt;
    &lt;li&gt;Ram and finish the top concrete surface smooth to correct design levels[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.7 Curing&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Initial curing must begin within ~2 hours of placement as soon as the surface hardens[cite: 1].&lt;/li&gt;
    &lt;li&gt;Keep surfaces continuously damp by covering with wet gunny bags or wet sand for at least 24 hours[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 8.0 Material Requirements --&gt;
  &lt;h2&gt;8.0 Material Requirements&lt;/h2&gt;

  &lt;h3&gt;Coarse Aggregates&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Must consist of inert, clean, dense, hard, durable, non-absorbent, broken stone (granite or equivalent)[cite: 1].&lt;/li&gt;
    &lt;li&gt;Free from dirt, clay, organic matter, and dust[cite: 1].&lt;/li&gt;
    &lt;li&gt;Graded 20 mm nominal size and below, completely retained on a 5 mm square mesh, with voids not exceeding 42%[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Fine Aggregates (Sand)&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Clean coarse sand with hard, sharp, angular grains passing through a 5 mm square mesh[cite: 1].&lt;/li&gt;
    &lt;li&gt;Free from silt, clay, organic impurities, and salts. &lt;strong&gt;Sea sand is strictly prohibited.&lt;/strong&gt;[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Cement&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Fresh Portland cement conforming to ISI standards with proper strength and fineness[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Water&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Clean, fresh, free from acids, alkalis, oils, or organic materials, and suitable for drinking purposes[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 9.0 Equipment Requirements --&gt;
  &lt;h2&gt;9.0 Equipment Requirements&lt;/h2&gt;
  
  &lt;div class=&quot;pcc-grid-tools&quot;&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Auto Level Instrument &amp;amp; Staff[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Transit Mixer / Concrete Mixer[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Wooden &amp;amp; Steel Rammers[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Plate Compactor[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Internal Needle Vibrators[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;External Form Vibrators[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Concrete Placer &amp;amp; Spreaders[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Finishing Trowels[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Concrete Edgers &amp;amp; Groovers[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Concrete Stamps &amp;amp; Rollers[cite: 1]&lt;/div&gt;
    &lt;div class=&quot;pcc-grid-item&quot;&gt;Carpentry &amp;amp; Shuttering Tools[cite: 1]&lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 10.0 Health and Safety Provisions --&gt;
  &lt;h2&gt;10.0 Health &amp;amp; Safety Provisions&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;High importance is assigned to jobsite safety to ensure safe execution of all PCC activities[cite: 1].&lt;/li&gt;
    &lt;li&gt;Erect physical barriers, safety signboards, and warning tape around foundation pits &lt;strong&gt;at least 1 meter away&lt;/strong&gt; from excavation edges[cite: 1].&lt;/li&gt;
    &lt;li&gt;For deep excavation pits subject to ground collapse risks, ensure earth sides are properly sloped back, stepped, or shored prior to labor entry[cite: 1].&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 11.0 Quality Control Approvals --&gt;
  &lt;h2&gt;11.0 Quality Control Approvals&lt;/h2&gt;
  &lt;p&gt;The following technical documents must be formally approved prior to starting PCC works[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Quality Control Procedure (QCP) for PCC Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for PCC Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Field Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Inspection Checksheets for PCC Works[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 12.0 Supporting Documentation --&gt;
  &lt;h2&gt;12.0 Supporting Documentation&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Contract Specifications and GFC Drawings[cite: 1]&lt;/li&gt;
    &lt;li&gt;QCP for PCC Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;ITP for PCC Works[cite: 1]&lt;/li&gt;
    &lt;li&gt;Method Statement (MS) for Earthworks[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Quality Plan[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project HSE Plan[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- 13.0 Distribution --&gt;
  &lt;h2&gt;13.0 Distribution List&lt;/h2&gt;
  &lt;p&gt;Copies issued for review, compliance, and field execution[cite: 1]:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Management Representative[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Manager[cite: 1]&lt;/li&gt;
    &lt;li&gt;Project Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;Site Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;HSE Engineer[cite: 1]&lt;/li&gt;
    &lt;li&gt;QA/QC Engineer[cite: 1]&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-for-plain-cement.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-5825912737866999251</guid><pubDate>Wed, 22 Jul 2026 17:44:56 +0000</pubDate><atom:updated>2026-07-22T23:14:56.485+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement for Plastering</title><description>&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.6; color: #333333; max-width: 100%; margin: 0 auto;&quot;&gt;

  &lt;style&gt;
    .ms-container h2 {
      color: #1a365d;
      border-bottom: 2px solid #2b6cb0;
      padding-bottom: 5px;
      margin-top: 25px;
      font-size: 20px;
    }
    .ms-container h3 {
      color: #2b6cb0;
      margin-top: 15px;
      font-size: 16px;
    }
    .ms-container table {
      width: 100%;
      border-collapse: collapse;
      margin: 15px 0;
      overflow-x: auto;
      display: block;
    }
    .ms-container th, .ms-container td {
      border: 1px solid #cbd5e0;
      padding: 8px 12px;
      text-align: left;
      font-size: 14px;
    }
    .ms-container th {
      background-color: #f7fafc;
      color: #2d3748;
      font-weight: bold;
    }
    .ms-container ul {
      padding-left: 20px;
      margin-bottom: 15px;
    }
    .ms-container li {
      margin-bottom: 6px;
    }
    .ms-container p {
      margin-bottom: 12px;
    }
    .ms-highlight {
      background-color: #ebf8ff;
      border-left: 4px solid #3182ce;
      padding: 10px 15px;
      margin: 15px 0;
    }
  &lt;/style&gt;

  &lt;div class=&quot;ms-container&quot;&gt;

    &lt;!-- 1.0 Revision Status --&gt;
    &lt;h2&gt;1.0 Revision Status&lt;/h2&gt;
    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th&gt;Revision Number&lt;/th&gt;
          &lt;th&gt;Date&lt;/th&gt;
          &lt;th&gt;Originator&lt;/th&gt;
          &lt;th&gt;Reviewed&lt;/th&gt;
          &lt;th&gt;Approved&lt;/th&gt;
          &lt;th&gt;Description of Re-submittal&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
          &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;!-- 2.0 Scope &amp; Objectives --&gt;
    &lt;h2&gt;2.0 Scope &amp;amp; Objectives&lt;/h2&gt;
    &lt;p&gt;Plastering work to correct line, level, and plumb within acceptable tolerances includes preparing surfaces and applying plaster. Work may be executed in single coats or multiple coats depending upon the Bill of Quantities (BOQ).&lt;/p&gt;

    &lt;!-- 3.0 Reference --&gt;
    &lt;h2&gt;3.0 Reference&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;Project Technical Specification&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 1200 (Part 12): 1976&lt;/strong&gt; – Methods of measurement of building and civil works: Part 12 Plastering and pointing (Third Revision)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 383: 1970&lt;/strong&gt; – Specification for coarse and fine aggregates from natural sources for concrete (Second Revision)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 1489 (Part 1): 1991&lt;/strong&gt; – Specification for Portland Pozzolana Cement: Part 1 Flyash based (Third Revision)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 1489 (Part 2): 1991&lt;/strong&gt; – Specification for Portland-Pozzolana Cement: Part 2 Calcined clay based (Third Revision)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 1542: 1992&lt;/strong&gt; – Specification for sand for plaster (Second Revision)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 1661: 1972&lt;/strong&gt; – Code of practice for application of cement and cement-lime plaster finishes (First Revision)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 2402: 1963&lt;/strong&gt; – Code of practice for external rendered finishes&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;IS 2645: 2003&lt;/strong&gt; – CED 2 Integral Cement Waterproofing Compounds&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 4.0 Health and Safety Hazards --&gt;
    &lt;h2&gt;4.0 Health &amp;amp; Safety Hazards&lt;/h2&gt;
    &lt;p&gt;Specific safety measures have to be followed as applicable. All detailed safety measures are covered separately in the Project Safety Plan.&lt;/p&gt;

    &lt;!-- 5.0 Definitions --&gt;
    &lt;h2&gt;5.0 Definitions&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Background:&lt;/strong&gt; The surface to which the first coat of plaster is applied.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Blistering:&lt;/strong&gt; The development of defects on the finished plastered surface in the form of swelling.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Hacking:&lt;/strong&gt; The process of creating corrugations on a solid background surface (such as concrete) to establish a mechanical bond with the plaster.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Dado:&lt;/strong&gt; The lower part of a plastered wall (up to 2 m above the floor) made more resistant than the upper part to protect against floor cleaning, moisture, dust, and dirt.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 6.0 Responsibilities --&gt;
    &lt;h2&gt;6.0 Responsibilities&lt;/h2&gt;
    
    &lt;h3&gt;6.1 Project Engineer&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;Ensure plastering activities are carried out according to specifications and approved drawings.&lt;/li&gt;
      &lt;li&gt;Ensure ongoing works progress according to the planned schedule and that all required equipment is available and in good working condition.&lt;/li&gt;
      &lt;li&gt;Coordinate with Client, Consultant, Project Manager, Site Engineer, Safety Engineer, and Surveyor for safe and proper execution.&lt;/li&gt;
      &lt;li&gt;Pay specific attention to all safety measures and quality control in coordination with the Safety and QC Engineers, in line with the HSE and Quality Plans.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;6.2 Site Engineer&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;Ensure plastering works are executed according to specifications.&lt;/li&gt;
      &lt;li&gt;Provide all necessary technical information and distribute responsibilities to the plastering team.&lt;/li&gt;
      &lt;li&gt;Monitor work progress in accordance with the project schedule and report status to the Project Engineer / Project Manager.&lt;/li&gt;
      &lt;li&gt;Coordinate with the Safety Engineer to maintain safe site practices.&lt;/li&gt;
      &lt;li&gt;Ensure optimal daily productivity from equipment and manpower against daily reports.&lt;/li&gt;
      &lt;li&gt;Pass revised site information promptly to supervisors and ensure proper implementation.&lt;/li&gt;
      &lt;li&gt;Coordinate with the surveyor to plan survey work in advance per the work sequence.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;6.3 QA Engineer&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;Ensure all works comply with specifications and approved quality procedures.&lt;/li&gt;
      &lt;li&gt;Inspect completed works prior to requesting client approval.&lt;/li&gt;
      &lt;li&gt;Maintain complete plastering inspection records for future reference.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;6.4 Safety Engineer&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;Implement all safety measures in accordance with the HSE plan and ensure worker awareness.&lt;/li&gt;
      &lt;li&gt;Verify that implemented site safety precautions remain adequate.&lt;/li&gt;
      &lt;li&gt;Inspect ongoing activities, conduct safety trainings, and report incidents to the Project Manager and Client.&lt;/li&gt;
      &lt;li&gt;Maintain clean and tidy work areas across the site.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 7.0 Procedure / Method to be Employed --&gt;
    &lt;h2&gt;7.0 Procedure / Method to be Employed&lt;/h2&gt;

    &lt;h3&gt;7.1 Checks Before Plastering&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Sequence:&lt;/strong&gt; External plastering should ideally be completed before internal plastering to avoid rapid drying and shrinkage of internal surfaces.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Curing Gap:&lt;/strong&gt; Allow a minimum gap of 7 days following brickwork completion before applying plaster.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Surface Wetting:&lt;/strong&gt; Wet brickwork surfaces two days prior to plastering. On the day of plastering, surfaces should achieve a Saturated Surface Dry (SSD) condition.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Level Pads (Thiyyas):&lt;/strong&gt; Fix 60 mm &amp;times; 60 mm level pads on walls and ceilings as reference markers. Spacing between pads must not exceed 2 meters.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Surface Preparation:&lt;/strong&gt; Remove all nails, wooden inserts, and concrete projections from surfaces. Clean the surface using wire brushes to remove dust, oil spots, and algae.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Hacking:&lt;/strong&gt; Create rough textures on concrete surfaces by hacking at 20 mm intervals to ensure proper mechanical bond with mortar.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;7.2 Checks During Plastering&lt;/h3&gt;
    
    &lt;h4&gt;A. Cement Sand Plaster&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Cube Testing:&lt;/strong&gt; Cast 7.07 cm mortar test cubes for 28-day compressive strength testing (Minimum required strength: 3.5 MPa).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Batching:&lt;/strong&gt; Weigh-batch cement and sand. If weigh-batching is not feasible, use calibrated gauge boxes (pharmas). In the absence of specific guidelines, use a 1:3 mortar mix for ceilings and 1:4 for side walls.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Cement Selection:&lt;/strong&gt; Use PPC or OPC blended with fly ash to reduce water demand, shrinkage, thermal cracking, heat of hydration, and to improve resistance against sulphate attack.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Water-Cement Ratio:&lt;/strong&gt; Maintain w/c ratio per mix design, or adjust to achieve optimal workability.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Mixing:&lt;/strong&gt; Dry-mix cement and sand thoroughly before adding water. Mix wet mortar for at least 3 minutes. Any plasticizers used must be pre-approved by the Chief Engineer.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Pot Life:&lt;/strong&gt; Use mortar within 90 minutes of mixing to prevent premature drying (unless approved retarders are used).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Thickness:&lt;/strong&gt; Internal plaster coat thickness must remain within 12 mm to 15 mm.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h4&gt;B. Gypsum Plaster&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Thickness Limits:&lt;/strong&gt; Restrict Gypsum plaster thickness on walls to 8–15 mm. If wall undulations require &gt;15 mm thickness, apply a cement-sand back coat first.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Back Coat Requirements:&lt;/strong&gt; Apply a 6–10 mm thick 1:4 cement-sand mortar back coat on brickwork. Wet-cure the back coat for 7 days before applying Gypsum. Clearly mark application dates on site to monitor curing.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Ceiling Thickness:&lt;/strong&gt; Restrict ceiling Gypsum plaster thickness to 6–10 mm.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Level Strips:&lt;/strong&gt; Form full-height vertical Gypsum level strips and verify right angles.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Door Frames:&lt;/strong&gt; Align door frames accurately with respect to Gypsum level pads (thiyyas).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Application Timing:&lt;/strong&gt; Apply Gypsum plaster only after the cement back coat has completely dried.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;7.3 Checks After Plastering&lt;/h3&gt;
    
    &lt;h4&gt;A. Cement Sand Plaster Finishing&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Neeru / Sanla Finish:&lt;/strong&gt; Apply neeru/sanla finish within 2 hours while the plaster coat is green. Trowel smoothly to a thickness not exceeding 1.5 mm, followed by curing.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Shrinkage Grooves:&lt;/strong&gt; Cut 5 mm deep grooves spaced at 5 ft horizontally and vertically on finished surfaces (including back coats) to control shrinkage cracking. Fill these grooves with Plaster of Paris (POP) after 4 weeks.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Site Cleaning:&lt;/strong&gt; Immediately clean window/door frames, sills, switch boxes, fan boxes, plumbing fittings, and glass surfaces after plaster application.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Tiling Preparation:&lt;/strong&gt; Roughen plaster surfaces receiving wall tiles to improve bond strength. Do not apply neeru, sanla, POP, or Gypsum over tiled zones.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Skirting &amp;amp; Waterproofing Cuts:&lt;/strong&gt; Cut plaster clean above floor slab level to match skirting tile heights. In toilets, cut plaster 300 mm above finished floor level (FFL) to accommodate base-coat waterproofing.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Date Stamping &amp;amp; Curing:&lt;/strong&gt; Mark the plastering date on walls to monitor curing schedules. Keep plaster continuously wet for 7–10 days. Apply water gently from the top of walls to prevent surface peeling caused by high-pressure water jets.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h4&gt;B. POP / Gypsum Post-Checks&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;No Surface Chasing:&lt;/strong&gt; Avoid chasing or grooving walls/ceilings after final POP or Gypsum application.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Immediate Cleaning:&lt;/strong&gt; Clean wooden sections and fittings on the same day to avoid stubborn white staining after polishing.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;7.4 Curing Requirements&lt;/h3&gt;
    &lt;div class=&quot;ms-highlight&quot;&gt;
      &lt;p&gt;&lt;strong&gt;Damp Curing:&lt;/strong&gt; Keep each coat damp for at least 5 days. Allow coats to dry before applying subsequent coats (dampen the previous coat lightly before applying a new one).&lt;/p&gt;
      &lt;p&gt;&lt;strong&gt;Hot / Dry / Windy Weather:&lt;/strong&gt; Commence curing immediately upon initial setting of the plaster to prevent rapid moisture loss.&lt;/p&gt;
    &lt;/div&gt;

    &lt;!-- 8.0 Materials Required --&gt;
    &lt;h2&gt;8.0 Materials Required&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;Cement (OPC Grade 43 / PPC)&lt;/li&gt;
      &lt;li&gt;Natural Sand&lt;/li&gt;
      &lt;li&gt;Crushed Sand&lt;/li&gt;
      &lt;li&gt;Fly Ash&lt;/li&gt;
      &lt;li&gt;Water&lt;/li&gt;
      &lt;li&gt;Admixtures / Plasticizers&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 9.0 Tools --&gt;
    &lt;h2&gt;9.0 Tools &amp;amp; Equipment&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;Trowels &amp;amp; Floats&lt;/li&gt;
      &lt;li&gt;Plumb Bob&lt;/li&gt;
      &lt;li&gt;3 m Spirit Levels&lt;/li&gt;
      &lt;li&gt;Right Angles (Try Squares)&lt;/li&gt;
      &lt;li&gt;Measuring Tapes&lt;/li&gt;
      &lt;li&gt;Scratchers / Hacking Tools&lt;/li&gt;
      &lt;li&gt;Approved &quot;Good for Construction&quot; (GFC) Drawings&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 10.0 Health and Safety Provisions --&gt;
    &lt;h2&gt;10.0 Health &amp;amp; Safety Provisions&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;Prioritize safe working practices across all plastering operations.&lt;/li&gt;
      &lt;li&gt;Install physical barriers, warning signage, and flashlights around active work areas.&lt;/li&gt;
      &lt;li&gt;Ensure all site personnel wear mandatory PPE (eye protection, gloves, skin protection).&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 11.0 Q.C. Approval and Other Documentary Requirements --&gt;
    &lt;h2&gt;11.0 Quality Control Approvals&lt;/h2&gt;
    &lt;p&gt;The following quality documentation must be approved prior to starting plastering operations:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;Quality Control Procedure (QCP) for Plastering&lt;/li&gt;
      &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Plastering&lt;/li&gt;
      &lt;li&gt;Project Field Quality Plan&lt;/li&gt;
      &lt;li&gt;Plastering Inspection Checksheets&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 12.0 Supporting Documentation --&gt;
    &lt;h2&gt;12.0 Supporting Documentation&lt;/h2&gt;
    &lt;p&gt;This Method Statement shall be read alongside:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;Contract Specifications and GFC Drawings&lt;/li&gt;
      &lt;li&gt;QCP &amp;amp; ITP for Plastering Works&lt;/li&gt;
      &lt;li&gt;Method Statement (MS) for Plastering&lt;/li&gt;
      &lt;li&gt;Project Quality Plan&lt;/li&gt;
      &lt;li&gt;Project HSE Plan&lt;/li&gt;
    &lt;/ul&gt;

    &lt;!-- 13.0 Distribution --&gt;
    &lt;h2&gt;13.0 Distribution List&lt;/h2&gt;
    &lt;p&gt;Copies of this Method Statement are distributed to:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;Management Representative&lt;/li&gt;
      &lt;li&gt;Project Manager&lt;/li&gt;
      &lt;li&gt;Project Engineer&lt;/li&gt;
      &lt;li&gt;Site Engineer&lt;/li&gt;
      &lt;li&gt;HSE Engineer&lt;/li&gt;
      &lt;li&gt;QA/QC Engineer&lt;/li&gt;
    &lt;/ul&gt;

  &lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-for-plastering.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-3932514001524383874</guid><pubDate>Wed, 22 Jul 2026 17:41:08 +0000</pubDate><atom:updated>2026-07-22T23:11:08.612+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement for Reinforcement Work</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Method Statement for Reinforcement Work&lt;/title&gt;
    &lt;style&gt;
        :root {
            --primary-color: #1e3a8a;
            --secondary-color: #0284c7;
            --dark-text: #1f2937;
            --light-bg: #f8fafc;
            --border-color: #e2e8f0;
        }

        body {
            font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.6;
            color: var(--dark-text);
            background-color: #f1f5f9;
            margin: 0;
            padding: 20px;
        }

        .container {
            max-width: 1000px;
            margin: 0 auto;
            background: #ffffff;
            padding: 40px;
            border-radius: 8px;
            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
        }

        h1 {
            color: var(--primary-color);
            border-bottom: 3px solid var(--primary-color);
            padding-bottom: 10px;
            text-align: center;
            text-transform: uppercase;
            letter-spacing: 1px;
            margin-bottom: 30px;
        }

        h2 {
            color: var(--primary-color);
            border-bottom: 2px solid var(--secondary-color);
            padding-bottom: 5px;
            margin-top: 35px;
            font-size: 1.4rem;
        }

        h3 {
            color: var(--secondary-color);
            margin-top: 20px;
            font-size: 1.1rem;
        }

        p, li {
            font-size: 0.95rem;
        }

        ul, ol {
            padding-left: 25px;
        }

        li {
            margin-bottom: 8px;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-size: 0.95rem;
        }

        th, td {
            border: 1px solid var(--border-color);
            padding: 12px 15px;
            text-align: left;
        }

        th {
            background-color: var(--primary-color);
            color: #ffffff;
            font-weight: 600;
        }

        tr:nth-child(even) {
            background-color: var(--light-bg);
        }

        blockquote {
            background-color: var(--light-bg);
            border-left: 4px solid var(--secondary-color);
            margin: 20px 0;
            padding: 15px 20px;
            font-style: italic;
        }

        .grid-list {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
            gap: 10px;
            padding-left: 0;
            list-style: none;
        }

        .grid-list li {
            background: var(--light-bg);
            padding: 8px 12px;
            border-radius: 4px;
            border: 1px solid var(--border-color);
        }

        @media (max-width: 768px) {
            .container {
                padding: 20px;
            }
            table {
                font-size: 0.85rem;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;

    &lt;h1&gt;Method Statement for Reinforcement Work&lt;/h1&gt;

    &lt;!-- 3.0 Scope &amp; Objectives --&gt;
    &lt;section&gt;
        &lt;h2&gt;3.0 Scope &amp;amp; Objectives&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;This Method Statement details the procedure for Reinforcement work[cite: 1].&lt;/li&gt;
            &lt;li&gt;The contractor shall execute work according to design and drawings backed by design calculations.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 4.0 References --&gt;
    &lt;section&gt;
        &lt;h2&gt;4.0 References&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;Project Technical Specification&lt;/li&gt;
            &lt;li&gt;Civil Drawings&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;IS CODES:&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;strong&gt;IS 432 (Part-I): 1982&lt;/strong&gt; – Mild Steel and medium tensile steel bars and hard-drawn steel wire for concrete reinforcement&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 1566: 1967&lt;/strong&gt; – Hard-drawn steel wire fabric for concrete reinforcement&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 1786: 1985&lt;/strong&gt; – High strength deformed steel bars and wires for concrete reinforcement&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 2502: 1963&lt;/strong&gt; – Bending and fixing of bars for concrete reinforcement&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 5.0 Health and Safety Hazards --&gt;
    &lt;section&gt;
        &lt;h2&gt;5.0 Health &amp;amp; Safety Hazards&lt;/h2&gt;
        &lt;p&gt;Specific safety measures must be followed as applicable, and all safety measures are covered separately in the project safety plan.&lt;/p&gt;
    &lt;/section&gt;

    &lt;!-- 6.0 Definitions &amp; Notation --&gt;
    &lt;section&gt;
        &lt;h2&gt;6.0 Definitions &amp;amp; Notation&lt;/h2&gt;
        
        &lt;h3&gt;Abbreviations &amp;amp; Symbols&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;MS:&lt;/strong&gt; Method Statement&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;QCP:&lt;/strong&gt; Quality Control Procedure&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;ITP:&lt;/strong&gt; Inspection &amp;amp; Test Plan&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Fe:&lt;/strong&gt; Grade of steel / yield stress or 0.2% proof stress&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Θ:&lt;/strong&gt; Angle made at bent-up&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Ф:&lt;/strong&gt; Diameter of bars&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;7.0 Reinforcement Work Terminology&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Batch:&lt;/strong&gt; Any quantity of bars/wires of the same size and grade, whether in coils or bundles, presented for examination and testing at one time.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Bundle:&lt;/strong&gt; Two or more coils or a number of lengths properly bound together.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Elongation:&lt;/strong&gt; The increase in length of a tensile test piece under stress. The elongation at fracture is conventionally expressed as a percentage of the original gauge length of a standard test piece.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Longitudinal Rib:&lt;/strong&gt; A rib of uniform cross-section, parallel to the axis of the bar/wire (before cold-working, if any).&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Nominal Diameter or Size:&lt;/strong&gt; The diameter of a plain round bar/wire having the same mass per metre length as the deformed bar/wire. (Nominal Perimeter of a Deformed Bar/Wire = 3.14 times the nominal diameter).&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Nominal Mass:&lt;/strong&gt; The mass of the bar/wire of nominal diameter and of density 0.00785 kg/mm² per metre run.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;0.2 Percent Proof Stress:&lt;/strong&gt; The stress at which a non-proportional elongation equal to 0.2 percent of the original gauge length takes place.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Tensile Strength:&lt;/strong&gt; The maximum load reached in a tensile test divided by the effective cross-sectional area of the gauge length portion of the test piece (also termed ultimate tensile stress).&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Transverse Rib:&lt;/strong&gt; Any rib on the surface of a bar/wire other than a longitudinal rib.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Yield Stress:&lt;/strong&gt; Stress (load per unit cross-sectional area) at which elongation first occurs in the test piece without increasing the load during a tensile test. In the case of steels with no definite yield point, proof stress shall be applicable.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- Responsibilities --&gt;
    &lt;section&gt;
        &lt;h2&gt;Responsibility Matrix&lt;/h2&gt;
        &lt;table&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Role&lt;/th&gt;
                    &lt;th&gt;Key Responsibilities&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Project Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Ensures reinforcement work is carried out according to specifications and drawings, coordinates site schedule and equipment, interacts with Client/Consultant/PM/Engineers, and focuses on HSE and Quality Plan compliance.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Site Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Executes work per specifications, distributes responsibilities, monitors progress, coordinates with Safety and QA engineers, tracks daily manpower/equipment productivity, passes revised drawing data to foremen, and coordinates with surveyors for alignment.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;QA Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Ensures work complies with specifications and quality procedures, inspects finished work for client approval, and maintains inspection and test records.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Safety Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Implements safety measures per HSE plan, ensures safety adequacy on site, inspects site activities, conducts worker training, and maintains site cleanliness.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Foreman&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Directs daily labor and resource distribution, submits daily progress reports, coordinates with surveyors for layout, incorporates QC/Safety requirements, and reports unforeseen site incidents immediately.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Surveyor&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Establishes benchmarks from agreed points, provides setting out and level markings, and periodically checks level and alignment of reinforcement works.&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/section&gt;

    &lt;!-- 7.0 Procedure / Method --&gt;
    &lt;section&gt;
        &lt;h2&gt;7.0 Procedure / Method to be Employed&lt;/h2&gt;
        
        &lt;h3&gt;Fabrication of Reinforcement&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Fabricate reinforcing steel in conformance with concrete product tolerances and project specifications. Ensure adequate concrete cover for corrosion protection and structural bonding.&lt;/li&gt;
            &lt;li&gt;Inspect reinforcement cages for conformance to approved design requirements and document findings in the pre-pour inspection.&lt;/li&gt;
            &lt;li&gt;Bend all reinforcing bars in accordance with standard fabrication practices with bend diameters not less than standard limits.&lt;/li&gt;
            &lt;li&gt;Fabricate cages by tying, clipping, or welding (where permissible by standards) into rigid assemblies.&lt;/li&gt;
            &lt;li&gt;Repair any damaged coating on epoxy-coated steel using approved patching material as per the manufacturer&#39;s recommendations. Patch cut ends and weld areas of epoxy-coated bars. &lt;strong&gt;Do not flame cut epoxy-coated reinforcing steel.&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;Fixing in Position&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Accurately place cut and bent bars in position as detailed in structural drawings.&lt;/li&gt;
            &lt;li&gt;Fasten hold-down devices to the casting bed or cage to establish horizontal and vertical orientations for draped strands. Utilize only up to 75% of the yield strength of hold-down devices to resist uplift/drag-down forces. Ensure hold-down device diameters are $\ge 3/4\text{ inches}$ to reduce friction and strand damage.&lt;/li&gt;
            &lt;li&gt;Separate layers of bars using spacer bars.&lt;/li&gt;
            &lt;li&gt;For bars bent aside at construction joints and later restored, maintain a bend radius of at least 4 bar diameters for plain mild steel or 6 bar diameters for deformed bars.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Tolerances for Effective Depth (unless specified otherwise):&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;Effective depth $\le 200\text{ mm}$: $+10\text{ mm}$&lt;/li&gt;
                    &lt;li&gt;Effective depth $&gt; 200\text{ mm}$: $+15\text{ mm}$&lt;/li&gt;
                    &lt;li&gt;Specified cover must never be reduced by more than $5\text{ mm}$.&lt;/li&gt;
                    &lt;li&gt;No compromise on cover for foundations.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;Protect reinforcement bars exposed for over 3 months against corrosion using a coat of cement wash.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;Fabrication and Positioning of Blockouts&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Construct blockouts using rigid, non-absorptive material that will not harm concrete and can withstand casting/curing.&lt;/li&gt;
            &lt;li&gt;Secure blockouts using non-corrosive supports (do not use reinforcing steel) to counteract floating tendencies during casting.&lt;/li&gt;
            &lt;li&gt;Design blockouts to minimize concrete damage during removal. Coring holes in hardened concrete may be used as an alternative.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 8.0 &amp; 9.0 Material &amp; Equipment Requirements --&gt;
    &lt;section&gt;
        &lt;h2&gt;8.0 Material &amp;amp; Equipment Requirements&lt;/h2&gt;
        
        &lt;h3&gt;Materials&lt;/h3&gt;
        &lt;ul class=&quot;grid-list&quot;&gt;
            &lt;li&gt;Fe 415 Grade Steel&lt;/li&gt;
            &lt;li&gt;Fe 500 Grade Steel&lt;/li&gt;
            &lt;li&gt;Fe 550 Grade Steel&lt;/li&gt;
            &lt;li&gt;Thermo Mechanically Treated (TMT) Bars&lt;/li&gt;
            &lt;li&gt;Corrosion Resistant Steel (CRS) Bars&lt;/li&gt;
            &lt;li&gt;Bars/Wires (Diameters 4 mm to 50 mm)&lt;/li&gt;
            &lt;li&gt;Cold-Worked High Strength Deformed Bars ($\ge 8\text{ mm}$ diameter)&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;Equipment&lt;/h3&gt;
        &lt;ul class=&quot;grid-list&quot;&gt;
            &lt;li&gt;Auto Level &amp;amp; Tripod&lt;/li&gt;
            &lt;li&gt;Plumb Bob&lt;/li&gt;
            &lt;li&gt;Wire Bending Hooks&lt;/li&gt;
            &lt;li&gt;Bar Bending Machine&lt;/li&gt;
            &lt;li&gt;Coiled Steel Straightening Equipment / Jig &amp;amp; Mandrel&lt;/li&gt;
            &lt;li&gt;Mechanical Threaded Coupler&lt;/li&gt;
            &lt;li&gt;Measuring Tape&lt;/li&gt;
            &lt;li&gt;Cover Blocks &amp;amp; Spacers&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 10.0 Health &amp; Safety Provisions --&gt;
    &lt;section&gt;
        &lt;h2&gt;10.0 Health &amp;amp; Safety Provisions&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;Give major importance to safety matters to ensure safe reinforcement laying activities.&lt;/li&gt;
            &lt;li&gt;Provide adequate barriers, signboards, advance warning signs, and warning tape when working at elevated heights.&lt;/li&gt;
            &lt;li&gt;Mandate the strict use of Personal Protective Equipment (PPE) during reinforcement operations.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 11.0 Quality Control Approvals --&gt;
    &lt;section&gt;
        &lt;h2&gt;11.0 Quality Control Approvals&lt;/h2&gt;
        &lt;p&gt;Approve all quality control documentation prior to commencing reinforcement work:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Quality Control Procedure (QCP) for Reinforcement Work&lt;/li&gt;
            &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Reinforcement Work&lt;/li&gt;
            &lt;li&gt;Project Field Quality Plan&lt;/li&gt;
            &lt;li&gt;Reinforcement Work Check Sheets&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 12.0 Supporting Documentation --&gt;
    &lt;section&gt;
        &lt;h2&gt;12.0 Supporting Documentation&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;Contract Specifications and Drawings&lt;/li&gt;
            &lt;li&gt;QCP for Reinforcement Work&lt;/li&gt;
            &lt;li&gt;ITP for Reinforcement Work&lt;/li&gt;
            &lt;li&gt;Method Statement (MS) for Reinforcement Works&lt;/li&gt;
            &lt;li&gt;Project Quality Plan &amp;amp; Project HSE Plan&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 13.0 Distribution --&gt;
    &lt;section&gt;
        &lt;h2&gt;13.0 Distribution List&lt;/h2&gt;
        &lt;blockquote&gt;
            &lt;strong&gt;Issued for Information / Action / Comments to:&lt;/strong&gt;&lt;br&gt;
            Management Representative | Project Manager | Project Engineer | Site Engineer | HSE Engineer | QA/QC Engineer
        &lt;/blockquote&gt;
    &lt;/section&gt;

&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-for-reinforcement-work.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-6404932658466741965</guid><pubDate>Wed, 22 Jul 2026 17:38:06 +0000</pubDate><atom:updated>2026-07-22T23:08:06.763+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement for Brickwork</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Method Statement for Brickwork&lt;/title&gt;
    &lt;style&gt;
        :root {
            --primary-color: #1e3a8a;
            --secondary-color: #0284c7;
            --dark-text: #1f2937;
            --light-bg: #f8fafc;
            --border-color: #e2e8f0;
        }

        body {
            font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.6;
            color: var(--dark-text);
            background-color: #f1f5f9;
            margin: 0;
            padding: 20px;
        }

        .container {
            max-width: 1000px;
            margin: 0 auto;
            background: #ffffff;
            padding: 40px;
            border-radius: 8px;
            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
        }

        h1 {
            color: var(--primary-color);
            border-bottom: 3px solid var(--primary-color);
            padding-bottom: 10px;
            text-align: center;
            text-transform: uppercase;
            letter-spacing: 1px;
            margin-bottom: 30px;
        }

        h2 {
            color: var(--primary-color);
            border-bottom: 2px solid var(--secondary-color);
            padding-bottom: 5px;
            margin-top: 35px;
            font-size: 1.4rem;
        }

        h3 {
            color: var(--secondary-color);
            margin-top: 20px;
            font-size: 1.1rem;
        }

        p, li {
            font-size: 0.95rem;
        }

        ul, ol {
            padding-left: 25px;
        }

        li {
            margin-bottom: 8px;
        }

        hr {
            border: 0;
            height: 1px;
            background: var(--border-color);
            margin: 30px 0;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-size: 0.95rem;
        }

        th, td {
            border: 1px solid var(--border-color);
            padding: 12px 15px;
            text-align: left;
        }

        th {
            background-color: var(--primary-color);
            color: #ffffff;
            font-weight: 600;
        }

        tr:nth-child(even) {
            background-color: var(--light-bg);
        }

        blockquote {
            background-color: var(--light-bg);
            border-left: 4px solid var(--secondary-color);
            margin: 20px 0;
            padding: 15px 20px;
            font-style: italic;
        }

        .grid-list {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
            gap: 10px;
            padding-left: 0;
            list-style: none;
        }

        .grid-list li {
            background: var(--light-bg);
            padding: 8px 12px;
            border-radius: 4px;
            border: 1px solid var(--border-color);
        }

        @media (max-width: 768px) {
            .container {
                padding: 20px;
            }
            table {
                font-size: 0.85rem;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;

    &lt;h1&gt;Method Statement for Brickwork&lt;/h1&gt;

    &lt;!-- 1.0 Scope &amp; Objectives --&gt;
    &lt;section&gt;
        &lt;h2&gt;1.0 Scope &amp;amp; Objectives&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;This Method Statement details the standardized construction procedure for executing quality Brickwork.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 3.0 Reference --&gt;
    &lt;section&gt;
        &lt;h2&gt;3.0 References&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;Project Technical Specifications&lt;/li&gt;
            &lt;li&gt;Approved Civil Drawings&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Indian Standard (IS) Codes:&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;strong&gt;IS 1077:1992&lt;/strong&gt; – Common burnt clay building bricks – Specification&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 2117:1991&lt;/strong&gt; – Guide for manufacture of hand-made common burnt clay building bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 2119:1980&lt;/strong&gt; – Code of practice for construction of brick-cum-concrete composite floor/roof&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 2180:1988&lt;/strong&gt; – Specification for heavy duty burnt clay building bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 2212:1991&lt;/strong&gt; – Code of practice for brick works&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 2222:1991&lt;/strong&gt; – Specification for burnt clay perforated building bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 2691:1988&lt;/strong&gt; – Specification for burnt clay facing bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 3068:1986&lt;/strong&gt; – Specification for broken brick coarse aggregates for lime concrete&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 3182:1986&lt;/strong&gt; – Specification for broken brick fine aggregates for lime mortar&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 3495 (Parts 1–4):1992&lt;/strong&gt; – Methods of tests of burnt clay building bricks (Compressive strength, Water absorption, Efflorescence, Warpage)&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 3952:1988&lt;/strong&gt; – Specification for burnt clay hollow bricks for walls/partitions&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 4139:1989&lt;/strong&gt; – Specification for calcium silicate bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 4860:1968&lt;/strong&gt; – Specification for acid-resistant bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 4885:1988&lt;/strong&gt; – Specification for sewer bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 5454:1978&lt;/strong&gt; – Methods of sampling of clay building bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 5766:1970&lt;/strong&gt; – Code of practice for laying burnt clay brick flooring&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 5779:1986&lt;/strong&gt; – Specification for burnt clay soling bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 6165:1992&lt;/strong&gt; – Dimensions for special shapes of clay bricks&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;IS 12894:2002&lt;/strong&gt; – Specification for pulverized fuel ash lime bricks&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 4.0 Definitions --&gt;
    &lt;section&gt;
        &lt;h2&gt;4.0 Definitions &amp;amp; Terminology&lt;/h2&gt;
        
        &lt;h3&gt;Abbreviations&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;MS:&lt;/strong&gt; Method Statement&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;QCP:&lt;/strong&gt; Quality Control Procedure&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;ITP:&lt;/strong&gt; Inspection &amp;amp; Test Plan&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;Brickwork Terminology&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Bull Header:&lt;/strong&gt; A rowlock brick laid with its longest dimension perpendicular to the face of the wall.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Bull Stretcher:&lt;/strong&gt; A rowlock brick laid with its longest dimension parallel to the face of the wall.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Course:&lt;/strong&gt; A continuous horizontal row of masonry units bonded together.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Header:&lt;/strong&gt; A brick laid flat with its longest dimension perpendicular to the face of the wall to tie wythes together.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Rowlock:&lt;/strong&gt; A brick laid on its face or edge.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Soldier:&lt;/strong&gt; A brick laid on its end so its longest dimension is parallel to the vertical axis of the wall.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Stretcher:&lt;/strong&gt; A brick laid flat with its longest dimension parallel to the face of the wall.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Wythe:&lt;/strong&gt; A continuous vertical section/thickness of masonry (4&quot; or greater).&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;Types of Masonry Bonds&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Running Bond:&lt;/strong&gt; Simplest pattern consisting only of stretchers; requires reinforcing ties.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Common (American) Bond:&lt;/strong&gt; Variation of running bond with courses of full-length headers at regular intervals.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Flemish Bond:&lt;/strong&gt; Alternating stretchers and headers in each course, centered over the course below.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;English Bond:&lt;/strong&gt; Alternating courses of stretchers and headers with aligned vertical joints for stretchers.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;English Cross (Dutch) Bond:&lt;/strong&gt; Variation of English bond where vertical joints in alternate stretcher courses are offset.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Stack (Block) Bond:&lt;/strong&gt; Decorative pattern with all vertical joints aligned; non-structural unless reinforced.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 5.0 Health and Safety Hazards --&gt;
    &lt;section&gt;
        &lt;h2&gt;5.0 Health &amp;amp; Safety Hazards&lt;/h2&gt;
        &lt;p&gt;Specific safety measures must be followed as applicable on-site. All site personnel must strictly adhere to the provisions established in the main Project Safety Plan.&lt;/p&gt;
    &lt;/section&gt;

    &lt;!-- 6.0 Responsibilities --&gt;
    &lt;section&gt;
        &lt;h2&gt;6.0 Responsibilities&lt;/h2&gt;
        &lt;table&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Role&lt;/th&gt;
                    &lt;th&gt;Key Responsibilities&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Project Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Ensures brickwork conforms to specifications/drawings, manages schedules/equipment, coordinates with Clients/Consultants, and enforces safety and quality compliance.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Site Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Distributes tasks, monitors daily work progress against schedules, coordinates with QA/Safety/Surveyors, and delivers revised site info to foremen.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;QA Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Ensures compliance with QCP/specifications, inspects finished work prior to client approval, and maintains inspection and testing records.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Safety Engineer&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Implements the HSE plan, conducts site risk assessments, delivers safety training, prevents hazards, and maintains site cleanliness.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Foreman&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Manages daily labor allocation, provides daily site progress reports, assists the site surveyor, and directly executes quality/safety directives.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Surveyor&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Establishes benchmarks, marks setting-out lines/levels, and conducts periodic checks to verify horizontal and vertical alignment.&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/section&gt;

    &lt;!-- 7.0 Procedure / Method --&gt;
    &lt;section&gt;
        &lt;h2&gt;7.0 Procedure / Method to be Employed&lt;/h2&gt;
        
        &lt;h3&gt;7.1 Site Selection &amp;amp; Preparation&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Select site locations on firm ground with effective drainage, avoiding proximity to large tree roots.&lt;/li&gt;
            &lt;li&gt;Construct concrete footers or foundations and allow a minimum curing period of 2 days before laying bricks.&lt;/li&gt;
            &lt;li&gt;Stack bricks systematically across the job site and pre-dampen/hose them down a few hours prior to laying to prevent absorption of mortar water.&lt;/li&gt;
            &lt;li&gt;Snap chalk guidelines from foundation edges to maintain true alignment.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;7.2 Mortar Preparation &amp;amp; Brick Laying&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;Mix mortar to a smooth, plastic-like consistency.&lt;/li&gt;
            &lt;li&gt;Conduct a dry run by laying stretchers along chalk lines (allowing a ½&quot; head joint) to verify alignment before applying mortar.&lt;/li&gt;
            &lt;li&gt;Apply mortar roughly 1&quot; thick, 1 brick wide, and 3 to 4 bricks long, furrowing slightly with the tip of the trowel.&lt;/li&gt;
            &lt;li&gt;Lay the first course firmly into place; check alignment, height, and level using a spirit level. Tap gently to adjust—never pull set bricks.&lt;/li&gt;
            &lt;li&gt;Construct end and corner leads (5 courses high) utilizing cut half/quarter bricks for bond staggering. Verify square corners using the 3-4-5 rule or a carpenter&#39;s square.&lt;/li&gt;
            &lt;li&gt;String a mason&#39;s line 1/16&quot; off the brick face between leads and complete the interior courses working toward the center.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;7.3 Finishing Mortar Joints&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Concave &amp;amp; V-Joints:&lt;/strong&gt; Preferred for structural durability and high resistance to water penetration.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Weathered Joints:&lt;/strong&gt; Highly watertight and strong.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Flush Joints:&lt;/strong&gt; Simple, flat finish cut off by trowel (moderate strength/weather resistance).&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Raked / Struck / Extruded:&lt;/strong&gt; Decorative; not recommended in high-rainfall or freezing climates.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;7.4 Pillars, Posts &amp;amp; Edging&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Pillars:&lt;/strong&gt; Cast firm concrete footings. Install vertical reinforcement steel or electrical conduits prior to pouring, check vertical plumb constantly, and top with sloped concrete or stone caps to shed water.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Brick Edging:&lt;/strong&gt; Excavate a trench (4&quot; deep, 8&quot; wide), tamp soil smooth, lay mortar mix, set bricks firmly, and trim excess mortar.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 8.0 Materials &amp; Equipment --&gt;
    &lt;section&gt;
        &lt;h2&gt;8.0 Materials &amp;amp; Equipment Requirements&lt;/h2&gt;
        &lt;ul class=&quot;grid-list&quot;&gt;
            &lt;li&gt;Bricks &amp;amp; Mortar/Mason Mix&lt;/li&gt;
            &lt;li&gt;Chalk Line &amp;amp; Mason&#39;s Line&lt;/li&gt;
            &lt;li&gt;Line Blocks &amp;amp; Mortarboard&lt;/li&gt;
            &lt;li&gt;Water Hose &amp;amp; Wheelbarrow&lt;/li&gt;
            &lt;li&gt;Brick Trowel &amp;amp; Concave Jointer&lt;/li&gt;
            &lt;li&gt;Spirit Level &amp;amp; Carpenter&#39;s Square&lt;/li&gt;
            &lt;li&gt;Measuring Tape&lt;/li&gt;
            &lt;li&gt;Brick Set &amp;amp; Mason&#39;s Hammer&lt;/li&gt;
            &lt;li&gt;Safety Goggles / Personal Protective Equipment&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 9.0 Health and Safety Provisions --&gt;
    &lt;section&gt;
        &lt;h2&gt;9.0 Health &amp;amp; Safety Provisions&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;Erect safety barriers, warning signs, and warning tape around active construction zones.&lt;/li&gt;
            &lt;li&gt;Provide working platforms and edge protection when brickwork is carried out at elevated heights.&lt;/li&gt;
            &lt;li&gt;Enforce additional safety checks during formwork or platform stripping operations.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 10.0 Quality Control Requirements --&gt;
    &lt;section&gt;
        &lt;h2&gt;10.0 Quality Control Approvals&lt;/h2&gt;
        &lt;p&gt;Prior to commencing work, the following documents must be submitted and approved:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Quality Control Procedure (QCP) for Brickwork&lt;/li&gt;
            &lt;li&gt;Inspection &amp;amp; Test Plan (ITP) for Brickwork&lt;/li&gt;
            &lt;li&gt;Project Field Quality Plan&lt;/li&gt;
            &lt;li&gt;Brickwork Checklist Forms&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 11.0 Supporting Documentation --&gt;
    &lt;section&gt;
        &lt;h2&gt;11.0 Supporting Documentation&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;Contract Specifications &amp;amp; Approved Drawings&lt;/li&gt;
            &lt;li&gt;QCP and ITP for Brickwork&lt;/li&gt;
            &lt;li&gt;Method Statement (MS) for Brickwork&lt;/li&gt;
            &lt;li&gt;Project Quality Plan &amp;amp; Project HSE Plan&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;!-- 12.0 Distribution --&gt;
    &lt;section&gt;
        &lt;h2&gt;12.0 Distribution List&lt;/h2&gt;
        &lt;blockquote&gt;
            &lt;strong&gt;Issued to:&lt;/strong&gt; Management Representative | Project Manager | Project Engineer | Site Engineer | HSE Engineer | QA/QC Engineer
        &lt;/blockquote&gt;
    &lt;/section&gt;

&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-for-brickwork.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-867740544915207044</guid><pubDate>Wed, 22 Jul 2026 17:33:17 +0000</pubDate><atom:updated>2026-07-22T23:03:17.212+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Concreting Works Method Statement</title><description>
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;title&gt;Concreting Works Method Statement | Standard Operating Procedure&lt;/title&gt;

&lt;style&gt;
*{
    margin:0;
    padding:0;
    box-sizing:border-box;
}

body{
    font-family:&#39;Segoe UI&#39;, Arial, sans-serif;
    background:#eef2f7;
    color:#222;
    line-height:1.7;
    font-size:16px;
}

.wrapper{
    max-width:1100px;
    margin:30px auto;
    background:#fff;
    border-radius:10px;
    overflow:hidden;
    box-shadow:0 5px 20px rgba(0,0,0,.15);
}

.header{
    background:linear-gradient(135deg, #0d47a1, #1976d2);
    color:white;
    padding:35px;
    text-align:center;
}

.header h1{
    font-size:34px;
    margin-bottom:10px;
    letter-spacing:1px;
}

.header h2{
    font-size:20px;
    font-weight:400;
    opacity:0.95;
}

.info{
    display:grid;
    grid-template-columns:repeat(auto-fit, minmax(220px, 1fr));
    gap:15px;
    padding:25px;
    background:#f7f9fc;
    border-bottom:1px solid #e0e6ed;
}

.card{
    background:white;
    padding:15px;
    border-left:5px solid #1565c0;
    border-radius:8px;
    box-shadow:0 2px 8px rgba(0,0,0,.08);
}

.card b{
    color:#0d47a1;
    font-size:0.9em;
    text-transform:uppercase;
    letter-spacing:0.5px;
}

.content{
    padding:35px;
}

.section{
    margin-bottom:40px;
}

.section h2{
    background:#1565c0;
    color:white;
    padding:12px 18px;
    border-radius:6px;
    margin-bottom:20px;
    font-size:20px;
}

.section h3{
    color:#1565c0;
    margin:25px 0 12px;
    font-size:18px;
    border-bottom:2px solid #e0e6ed;
    padding-bottom:5px;
}

.section h4{
    color:#0d47a1;
    margin:15px 0 8px;
    font-size:16px;
}

ul, ol{
    margin-left:25px;
    margin-bottom:15px;
}

li{
    margin-bottom:8px;
}

table{
    width:100%;
    border-collapse:collapse;
    margin-top:20px;
    margin-bottom:20px;
}

table th{
    background:#1565c0;
    color:white;
    padding:12px;
    border:1px solid #ddd;
    text-align:left;
    font-size:15px;
}

table td{
    padding:10px 12px;
    border:1px solid #ddd;
    font-size:15px;
}

table tr:nth-child(even){
    background-color:#f9fbfd;
}

.note{
    background:#fff8e1;
    border-left:6px solid #ffa000;
    padding:15px 20px;
    margin:20px 0;
    border-radius:0 8px 8px 0;
}

.warning{
    background:#ffebee;
    border-left:6px solid #d32f2f;
    padding:15px 20px;
    margin:20px 0;
    border-radius:0 8px 8px 0;
}

.success{
    background:#e8f5e9;
    border-left:6px solid #388e3c;
    padding:15px 20px;
    margin:20px 0;
    border-radius:0 8px 8px 0;
}

.toc{
    background:#f8fafc;
    border:1px solid #e2e8f0;
    padding:25px;
    margin-bottom:35px;
    border-radius:8px;
}

.toc h2{
    background:none;
    color:#1565c0;
    padding:0;
    margin-bottom:15px;
    font-size:22px;
}

.toc ul{
    list-style:none;
    margin:0;
}

.toc li{
    padding:8px 0;
    border-bottom:1px solid #edf2f7;
}

.toc li:last-child{
    border-bottom:none;
}

.toc a{
    text-decoration:none;
    color:#1565c0;
    font-weight:600;
    transition:color 0.2s;
}

.toc a:hover{
    color:#0d47a1;
    text-decoration:underline;
}

.footer{
    background:#0d47a1;
    color:white;
    text-align:center;
    padding:25px;
    margin-top:30px;
}

.footer h3{
    font-size:18px;
    margin-bottom:8px;
    font-weight:500;
}

.footer p{
    font-size:14px;
    opacity:0.85;
}

@media(max-width:768px){
    .header h1{ font-size:26px; }
    .content{ padding:20px; }
    .info{ grid-template-columns:1fr; }
}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div class=&quot;wrapper&quot;&gt;

    &lt;!-- HEADER --&gt;
    &lt;div class=&quot;header&quot;&gt;
        &lt;h1&gt;CONCRETING WORKS&lt;/h1&gt;
        &lt;h2&gt;METHOD STATEMENT / STANDARD OPERATING PROCEDURE&lt;/h2&gt;
    &lt;/div&gt;

    &lt;!-- DOCUMENT INFO CARDS --&gt;
    &lt;div class=&quot;info&quot;&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;b&gt;Project&lt;/b&gt;&lt;br&gt;
            Civil &amp; Structural Concreting
        &lt;/div&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;b&gt;Document Title&lt;/b&gt;&lt;br&gt;
            Method Statement for Concreting Works
        &lt;/div&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;b&gt;Revision No.&lt;/b&gt;&lt;br&gt;
            01
        &lt;/div&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;b&gt;Applicable Standards&lt;/b&gt;&lt;br&gt;
            IS 456, IS 2911, IS 8142, IS 9103, IS 10262, IS 4926
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;content&quot;&gt;

        &lt;!-- TABLE OF CONTENTS --&gt;
        &lt;div class=&quot;toc&quot;&gt;
            &lt;h2&gt;Table of Contents&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. Scope &amp; Objectives&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. Revision Status&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Reference Standards&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. Definitions &amp; Terminology&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;5. Health &amp; Safety Hazards&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec6&quot;&gt;6. Responsibilities&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec7&quot;&gt;7. Procedure / Method to be Employed&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec8&quot;&gt;8. Material Requirements&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec9&quot;&gt;9. Equipment Requirements&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec10&quot;&gt;10. Health &amp; Safety Provisions&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec11&quot;&gt;11. QA/QC Documentation&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;12. Supporting Documents&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;13. Distribution&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 1 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec1&quot;&gt;
            &lt;h2&gt;1. Scope &amp; Objectives&lt;/h2&gt;
            &lt;p&gt;
                This Method Statement details the step-by-step procedure for executing &lt;strong&gt;Concreting Works&lt;/strong&gt; across various civil structures safely, efficiently, and in full compliance with approved engineering drawings, project technical specifications, and relevant Indian Standards.
            &lt;/p&gt;
            &lt;div class=&quot;success&quot;&gt;
                &lt;b&gt;Key Objectives&lt;/b&gt;
                &lt;ul&gt;
                    &lt;li&gt;Ensure structural integrity and required compressive strength of concrete.&lt;/li&gt;
                    &lt;li&gt;Ensure proper compaction, placement, and curing procedures to prevent defects.&lt;/li&gt;
                    &lt;li&gt;Maintain dimensional tolerances and surface finishes as specified.&lt;/li&gt;
                    &lt;li&gt;Implement rigorous Quality Control (QC) and Health, Safety &amp; Environment (HSE) measures.&lt;/li&gt;
                    &lt;li&gt;Ensure systematic record-keeping and inspection procedures prior to, during, and after concreting.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 2 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec2&quot;&gt;
            &lt;h2&gt;2. Revision Status&lt;/h2&gt;
            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Revision&lt;/th&gt;
                        &lt;th&gt;Date&lt;/th&gt;
                        &lt;th&gt;Description&lt;/th&gt;
                        &lt;th&gt;Status&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;00&lt;/td&gt;
                        &lt;td&gt;10-05-2008&lt;/td&gt;
                        &lt;td&gt;Initial Issue for Review &amp; Approval&lt;/td&gt;
                        &lt;td&gt;Approved&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;01&lt;/td&gt;
                        &lt;td&gt;22-07-2026&lt;/td&gt;
                        &lt;td&gt;Updated to incorporate RMC &amp; Formwork Specifications&lt;/td&gt;
                        &lt;td&gt;Active&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 3 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec3&quot;&gt;
            &lt;h2&gt;3. Reference Standards&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Project Technical Specifications &amp; Approved Civil Drawings&lt;/strong&gt;&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;IS 456 : 2000&lt;/strong&gt; - Code of Practice for Plain and Reinforced Concrete&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;IS 8142 : 1976&lt;/strong&gt; - Method of Test for Determining Setting Time of Concrete by Penetration Resistance&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;IS 2911 (Part 1 / Sec 1) : 1979&lt;/strong&gt; - Code of Practice for Design and Construction of Pile Foundations (Driven Cast-in-situ Concrete Piles)&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;IS 9103 : 1999&lt;/strong&gt; - Concrete Admixtures – Specification&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;IS 10262 : 1982 / 2019&lt;/strong&gt; - Recommended Guidelines for Concrete Mix Design&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;IS 4926 : 2003&lt;/strong&gt; - Ready Mixed Concrete – Code of Practice&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 4 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec4&quot;&gt;
            &lt;h2&gt;4. Definitions &amp; Terminology&lt;/h2&gt;
            
            &lt;h3&gt;4.1 Abbreviations&lt;/h3&gt;
            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Abbreviation&lt;/th&gt;
                        &lt;th&gt;Meaning&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;MS&lt;/td&gt;
                        &lt;td&gt;Method Statement&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;QCP&lt;/td&gt;
                        &lt;td&gt;Quality Control Procedure&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;ITP&lt;/td&gt;
                        &lt;td&gt;Inspection &amp; Test Plan&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;RMC&lt;/td&gt;
                        &lt;td&gt;Ready Mixed Concrete&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;PPE&lt;/td&gt;
                        &lt;td&gt;Personal Protective Equipment&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;

            &lt;h3&gt;4.2 Concreting &amp; Formwork Terminology&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Riband:&lt;/strong&gt; A horizontal member laid flat to resist horizontal pressure exerted during concrete placement.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Starter (Kicker):&lt;/strong&gt; A small height of concrete wall or column cast monolithically with the footing/slab to establish layout alignment for subsequent vertical lifts.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Shikanjas:&lt;/strong&gt; Special clamping tools used to hold two opposite formwork panels or right-angle joints firmly during pouring.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Four-way Head:&lt;/strong&gt; Structural support head mounted on props to hold I-section steel beams beneath slab or beam soffits.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Tripod:&lt;/strong&gt; A three-legged support frame used to secure vertical props in an exact plumb and stable position.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;div class=&quot;note&quot;&gt;
                &lt;b&gt;Note:&lt;/b&gt; All site activities must align strictly with the approved Method Statement, Quality Control Plan (QCP), Inspection &amp; Test Plan (ITP), and Project HSE Guidelines.
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 5 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec5&quot;&gt;
            &lt;h2&gt;5. Health &amp; Safety Hazards&lt;/h2&gt;
            &lt;p&gt;
                Concreting operations involve heavy equipment movement, working at heights, handling hazardous chemical admixtures, and high-pressure concrete pumping. Specific safety precautions covered in the Project Safety Plan must be strictly enforced.
            &lt;/p&gt;
            &lt;div class=&quot;warning&quot;&gt;
                &lt;b&gt;Potential Health &amp; Safety Hazards&lt;/b&gt;
                &lt;ul&gt;
                    &lt;li&gt;Contact with wet concrete causing chemical burns or skin irritation.&lt;/li&gt;
                    &lt;li&gt;Failure or blowout of formwork and shoring systems under hydrostatic concrete pressure.&lt;/li&gt;
                    &lt;li&gt;Structural collapse during concrete pouring due to improper prop placement.&lt;/li&gt;
                    &lt;li&gt;Whip-hazard or blockage rupture of concrete pump pipes and hoses.&lt;/li&gt;
                    &lt;li&gt;Working at heights during slab, column, or beam pours (fall hazards).&lt;/li&gt;
                    &lt;li&gt;Noise and vibration hazards from concrete vibrator motors and transit mixers.&lt;/li&gt;
                    &lt;li&gt;Trip hazards from exposed rebar, electrical cables, and formwork bracing.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 6 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec6&quot;&gt;
            &lt;h2&gt;6. Responsibilities&lt;/h2&gt;

            &lt;h3&gt;6.1 Project Engineer&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;Ensure concreting operations are executed per approved specifications, drawings, and Method Statement.&lt;/li&gt;
                &lt;li&gt;Verify that all required plant, machinery, raw materials, and manpower are mobilized and fully operational.&lt;/li&gt;
                &lt;li&gt;Coordinate with Client/Consultant, Project Manager, Site Engineer, Safety Engineer, and Surveyor.&lt;/li&gt;
                &lt;li&gt;Enforce quality control and HSE guidelines in close coordination with QC and HSE teams.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;6.2 Site Engineer&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;Supervise daily concreting activities on-site according to approved drawings.&lt;/li&gt;
                &lt;li&gt;Issue clear work instructions to site foremen and operational teams.&lt;/li&gt;
                &lt;li&gt;Monitor progress against target schedules and submit daily progress reports.&lt;/li&gt;
                &lt;li&gt;Coordinate with QA/QC Engineer for inspections before, during, and after concreting.&lt;/li&gt;
                &lt;li&gt;Ensure alignment, cover, rebar placement, and formwork verticality are verified with the Surveyor.&lt;/li&gt;
                &lt;li&gt;Ensure all revised drawings and instructions are communicated to field foremen.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;6.3 QA / QC Engineer&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;Verify raw materials, concrete mix design approvals, and RMC delivery tickets.&lt;/li&gt;
                &lt;li&gt;Perform field quality tests (slump, temperature, air content, cube casting) as per ITP.&lt;/li&gt;
                &lt;li&gt;Inspect formwork, rebar, embedded items, and cleanliness prior to issuing pour clearance.&lt;/li&gt;
                &lt;li&gt;Maintain complete inspection and test records for audit and final handover.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;6.4 Safety Engineer&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;Implement Project HSE Plan across all concreting activities.&lt;/li&gt;
                &lt;li&gt;Conduct daily pre-task briefing / toolbox talks with workers.&lt;/li&gt;
                &lt;li&gt;Inspect scaffolding, working platforms, concrete pump lines, and electrical connections.&lt;/li&gt;
                &lt;li&gt;Ensure 100% compliance with mandatory PPE (helmets, safety boots, gloves, goggles).&lt;/li&gt;
                &lt;li&gt;Maintain clean, hazard-free, and tidy site conditions.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;6.5 Foreman&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;Direct daily labor deployment and task distribution in coordination with the Site Engineer.&lt;/li&gt;
                &lt;li&gt;Monitor pouring rate, compaction using vibrators, and proper finishing.&lt;/li&gt;
                &lt;li&gt;Ensure field safety protocols and QC requirements are followed by crew members.&lt;/li&gt;
                &lt;li&gt;Immediately report any site anomalies or unexpected disruptions to the Site Engineer.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;6.6 Surveyor&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;Establish reference benchmarks and mark concrete pour levels, gridlines, and plumb lines.&lt;/li&gt;
                &lt;li&gt;Verify alignment and soffit levels of formwork before and during concrete placement.&lt;/li&gt;
                &lt;li&gt;Maintain survey records and regularly verify structural dimensions.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 7 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec7&quot;&gt;
            &lt;h2&gt;7. Procedure / Method to be Employed&lt;/h2&gt;

            &lt;h3&gt;7.1 Pre-Concreting Activities&lt;/h3&gt;

            &lt;h4&gt;7.1.1 Document Verification &amp; Mix Design Approval (For RMC / Site-Mixed)&lt;/h4&gt;
            &lt;ul&gt;
                &lt;li&gt;The latest approved Mix Design report must be available on-site before starting any pour.&lt;/li&gt;
                &lt;li&gt;Mix trials shall conform to &lt;strong&gt;IS 456:2000&lt;/strong&gt; to verify workability, initial/final setting times, fresh density, compressive strength, and yield.&lt;/li&gt;
                &lt;li&gt;All concrete constituents (Cement, Mineral Admixtures like Fly Ash/GGBS, Silica Fume, Aggregates, Water, and Chemical Admixtures) must fulfill quality, durability, and structural requirements.&lt;/li&gt;
                &lt;li&gt;If Ready Mixed Concrete (RMC) is procured, the supplier must provide:
                    &lt;ul&gt;
                        &lt;li&gt;Manufacturer credentials &amp; Batching Plant certification.&lt;/li&gt;
                        &lt;li&gt;Proof of Conformance for all raw materials.&lt;/li&gt;
                        &lt;li&gt;Plant calibration records and mix design compliance.&lt;/li&gt;
                    &lt;/ul&gt;
                &lt;/li&gt;
            &lt;/ul&gt;

            &lt;h4&gt;7.1.2 Surface Preparation &amp; Formwork Setup&lt;/h4&gt;
            &lt;ul&gt;
                &lt;li&gt;Subgrade, lean concrete, or existing slab surfaces must be thoroughly cleaned of debris, concrete waste, oil, and grease.&lt;/li&gt;
                &lt;li&gt;Wall/column layout lines are accurately marked on clean surfaces using markers or chalk lines.&lt;/li&gt;
                &lt;li&gt;Formwork panels are inspected for defects; deformed panels must be rejected.&lt;/li&gt;
                &lt;li&gt;Apply approved formwork releasing agent evenly. Releasing agent must not stain concrete or contaminate reinforcement steel.&lt;/li&gt;
                &lt;li&gt;Erect formwork sequentially following manufacturer drawings. Lock pins, wedges, and shikanjas securely.&lt;/li&gt;
                &lt;li&gt;Check soffit levels of beams and decks using auto-level. Verify wall verticality with plumb bob/tripod.&lt;/li&gt;
                &lt;li&gt;Check all block-outs, door/window openings, electrical conduits, and junction boxes against drawings.&lt;/li&gt;
                &lt;li&gt;Cover wall ties with plastic sleeves for easy removal. Ensure props and four-way heads are fully plumb and braced.&lt;/li&gt;
                &lt;li&gt;Gaps in formwork panels must be sealed using masking tape or 4–6 mm thick aluminum closure sheets (no loose plywood scraps / gabadi).&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;7.2 During-Concreting Activities&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;Continuous supervision must be maintained to ensure pins, wedges, and props do not loosen under vibration.&lt;/li&gt;
                &lt;li&gt;Pouring rate for vertical members (walls/columns) shall not exceed &lt;strong&gt;2 meters per hour&lt;/strong&gt; in height to avoid excessive lateral pressure.&lt;/li&gt;
                &lt;li&gt;High-frequency needle vibrators must be used systematically to ensure dense compaction without touching rebar directly or causing segregation.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h4&gt;7.2.1 Concrete Transportation &amp; Delivery Ticket Inspection&lt;/h4&gt;
            &lt;p&gt;Every transit mixer arriving at the site must carry a delivery ticket detailing:&lt;/p&gt;
            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Plant &amp; Batching Information&lt;/th&gt;
                        &lt;th&gt;Site Delivery Entry Details&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Depot Name / Number &amp; Serial Ticket No.&lt;/td&gt;
                        &lt;td&gt;Exact arrival time on site&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Date, Truck No., Purchaser &amp; Site Location&lt;/td&gt;
                        &lt;td&gt;Time when discharge was completed&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Concrete Grade &amp; Target Workability (Slump)&lt;/td&gt;
                        &lt;td&gt;Water / Admixture added on site (if authorized)&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Min. Cement Content, Cement Type &amp; Grade&lt;/td&gt;
                        &lt;td&gt;Authorized signature for site water request&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Max. Free Water-Cement Ratio &amp; Max Aggregate Size&lt;/td&gt;
                        &lt;td&gt;Pouring location / element ID&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Admixture type &amp; dosage added at plant&lt;/td&gt;
                        &lt;td&gt;Signature of site representative accepting load&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;

            &lt;h4&gt;7.2.2 Field Quality Testing&lt;/h4&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;On-Site Testing:&lt;/strong&gt; Slump test, Slump Flow (for SCC), and Visual Stability Index.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Verification Reports:&lt;/strong&gt; Temperature, Fresh Density (Unit Weight), Air Content, and Casting of Concrete Test Cubes for 7-day and 28-day strength.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h4&gt;7.2.3 Depositing Concrete into Forms&lt;/h4&gt;
            &lt;ul&gt;
                &lt;li&gt;Verify formwork dimensions and cleanliness immediately prior to placing concrete.&lt;/li&gt;
                &lt;li&gt;Keep free fall of concrete to a minimum (maximum 1.5 meters) to prevent segregation.&lt;/li&gt;
                &lt;li&gt;For flat slabs, deposit concrete near its final location starting from corners/edges, working into previously placed wet concrete.&lt;/li&gt;
                &lt;li&gt;For vertical elements (walls/columns), place concrete in uniform horizontal layers (300–500 mm lift height).&lt;/li&gt;
                &lt;li&gt;When placing face mix and back-up mix in architectural concrete, ensure reinforcing is not contaminated with slurry that impairs bond.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h4&gt;7.2.4 Construction Joints&lt;/h4&gt;
            &lt;ul&gt;
                &lt;li&gt;Locations of construction joints must be pre-approved by the Consultant/Engineers.&lt;/li&gt;
                &lt;li&gt;Joints shall be located where shear force is minimal, formed straight and perpendicular to the direction of main reinforcement.&lt;/li&gt;
                &lt;li&gt;Joint surfaces must be roughened, cleaned, and treated with cement slurry or bonding agent before fresh pour.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;7.3 Post-Concreting Activities&lt;/h3&gt;

            &lt;h4&gt;7.3.1 Striking of Formwork&lt;/h4&gt;
            &lt;p&gt;Formwork removal shall occur only after the specified minimum stripping period is met, in the following sequence:&lt;/p&gt;
            &lt;ol&gt;
                &lt;li&gt;Wall and column vertical formwork.&lt;/li&gt;
                &lt;li&gt;Deck props (leaving intermediate re-shores intact where specified).&lt;/li&gt;
                &lt;li&gt;Deck panels.&lt;/li&gt;
                &lt;li&gt;Beam soffit props.&lt;/li&gt;
                &lt;li&gt;Beam soffits.&lt;/li&gt;
                &lt;li&gt;Beam side panels.&lt;/li&gt;
            &lt;/ol&gt;
            &lt;p&gt;Plastic tie sleeves and wall ties shall be pulled, and tie holes must be grouted with approved non-shrink repair mortar. Formwork faces must be cleaned immediately with scrapers and re-oiled.&lt;/p&gt;

            &lt;h4&gt;7.3.2 Concrete Curing Procedures&lt;/h4&gt;
            &lt;ul&gt;
                &lt;li&gt;Curing must begin immediately after initial set is established and concrete surface hardens.&lt;/li&gt;
                &lt;li&gt;Prevent rapid moisture loss / quick drying due to wind or high ambient temperature.&lt;/li&gt;
                &lt;li&gt;Accelerated curing (steam curing) shall not commence until initial set is complete.&lt;/li&gt;
                &lt;li&gt;Temperature gradients within structural members must not exceed &lt;strong&gt;22°C (40°F)&lt;/strong&gt;.&lt;/li&gt;
                &lt;li&gt;Maintain moist curing (ponding, wet hessian cloth, or approved membrane curing compound) for a minimum of &lt;strong&gt;7 to 10 days&lt;/strong&gt; (14 days for concrete with mineral admixtures).&lt;/li&gt;
                &lt;li&gt;When steam curing, do not direct steam jets directly onto formwork; ensure uniform circulation.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h4&gt;7.3.3 Field Book Records&lt;/h4&gt;
            &lt;p&gt;Maintain an accurate site concreting log containing: arrival/discharge timestamps, site additions, pour element numbers, slump records, cube batch IDs, and inspector signatures.&lt;/p&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 8 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec8&quot;&gt;
            &lt;h2&gt;8. Material Requirements&lt;/h2&gt;
            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Material&lt;/th&gt;
                        &lt;th&gt;Specification &amp; Compliance Criteria&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Concrete Mix&lt;/td&gt;
                        &lt;td&gt;Approved mix design complying with IS 456 &amp; IS 10262 for strength and durability grade.&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Water&lt;/td&gt;
                        &lt;td&gt;Clean, potable water free from deleterious amounts of oils, acids, alkalis, salts, and organic matter.&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Releasing Agent&lt;/td&gt;
                        &lt;td&gt;Approved chemical form-release agent (non-staining, chemical-reacting type).&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Admixtures&lt;/td&gt;
                        &lt;td&gt;Plasticizers, Superplasticizers, Retarders, or Air-entrainers conforming to IS 9103.&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 9 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec9&quot;&gt;
            &lt;h2&gt;9. Equipment Requirements&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Survey Gear:&lt;/strong&gt; Auto Level, Tripods, Plumb Bobs, Leveling Staves.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Compaction Equipment:&lt;/strong&gt; High-frequency needle vibrators (electrical / petrol driven), surface vibrators.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Mixing &amp; Placing Equipment:&lt;/strong&gt; Concrete Batching Plant / RMC Transit Mixers, Concrete Mobile Pump / Static Line Pump, Concrete Buckets &amp; Tower Crane / Hoist, Site Concrete Mixer.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Formwork Accessories:&lt;/strong&gt; Steel props, four-way heads, shikanjas, ribands, tie rods, plastic sleeves, aluminum closure sheets.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 10 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec10&quot;&gt;
            &lt;h2&gt;10. Health &amp; Safety Provisions&lt;/h2&gt;
            &lt;div class=&quot;warning&quot;&gt;
                &lt;b&gt;Mandatory Safety Protocols&lt;/b&gt;
                &lt;ul&gt;
                    &lt;li&gt;Concreting operations must fully align with the site-specific HSE Plan.&lt;/li&gt;
                    &lt;li&gt;Staging, scaffolding, and working platforms at heights must feature guardrails, toe-boards, and secure access ladders.&lt;/li&gt;
                    &lt;li&gt;Advance warning signs, barricades, and safety tape must surround the active concrete pump and transit mixer radius.&lt;/li&gt;
                    &lt;li&gt;Signalmen/banksmen equipped with high-visibility vests must guide transit mixer movements.&lt;/li&gt;
                    &lt;li&gt;Concrete pump pipelines must be anchored securely and pressure-tested before use.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;

            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Personal Protective Equipment (PPE)&lt;/th&gt;
                        &lt;th&gt;Mandatory Application&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Safety Helmet &amp; High-Vis Jacket&lt;/td&gt;
                        &lt;td&gt;Mandatory for all site personnel at all times (✔)&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Safety Boots / Rubber Gumboot&lt;/td&gt;
                        &lt;td&gt;Mandatory during concrete pouring &amp; washing (✔)&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Heavy Duty Rubber Gloves&lt;/td&gt;
                        &lt;td&gt;Mandatory when handling wet concrete &amp; vibrators (✔)&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Eye Protection / Safety Goggles&lt;/td&gt;
                        &lt;td&gt;Mandatory during pumping, pouring, and vibrator use (✔)&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Ear Protection (Ear Plugs/Muffs)&lt;/td&gt;
                        &lt;td&gt;Required around vibrators, pumps, and batch plant (As Required)&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Full Body Harness&lt;/td&gt;
                        &lt;td&gt;Mandatory when working at heights above 1.8m (✔)&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 11 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec11&quot;&gt;
            &lt;h2&gt;11. QA / QC Documentation&lt;/h2&gt;
            &lt;p&gt;All quality documentation must be reviewed and approved by the QA/QC department and Client representative prior to initiating pour operations:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;Approved Method Statement (MS) for Concreting Works&lt;/li&gt;
                &lt;li&gt;Approved Quality Control Procedure (QCP)&lt;/li&gt;
                &lt;li&gt;Approved Inspection &amp; Test Plan (ITP) for Concrete&lt;/li&gt;
                &lt;li&gt;Project Field Quality Plan (FQP)&lt;/li&gt;
                &lt;li&gt;Approved Concrete Mix Design Reports &amp; Raw Material Test Certificates&lt;/li&gt;
                &lt;li&gt;Pre-Concreting Checksheets (Formwork, Reinforcement, MEP Embeds Clearance)&lt;/li&gt;
                &lt;li&gt;Concrete Pour Cards &amp; Cube Test Register&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 12 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec12&quot;&gt;
            &lt;h2&gt;12. Supporting Documentation&lt;/h2&gt;
            &lt;p&gt;This Method Statement shall be read in conjunction with the following project documents:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;Contract Technical Specifications and Approved Structural Drawings&lt;/li&gt;
                &lt;li&gt;Quality Control Procedure (QCP) for Structural Concrete&lt;/li&gt;
                &lt;li&gt;Inspection &amp; Test Plan (ITP) for Civil Works&lt;/li&gt;
                &lt;li&gt;Project Quality Assurance Plan&lt;/li&gt;
                &lt;li&gt;Project Health, Safety &amp; Environment (HSE) Plan&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

        &lt;!-- SECTION 13 --&gt;
        &lt;div class=&quot;section&quot; id=&quot;sec13&quot;&gt;
            &lt;h2&gt;13. Distribution&lt;/h2&gt;
            &lt;p&gt;Copies of this approved Method Statement shall be distributed to the following key stakeholders:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;Management Representative&lt;/li&gt;
                &lt;li&gt;Project Manager&lt;/li&gt;
                &lt;li&gt;Project Engineer&lt;/li&gt;
                &lt;li&gt;Site Engineer&lt;/li&gt;
                &lt;li&gt;HSE Engineer / Safety Officer&lt;/li&gt;
                &lt;li&gt;QA / QC Engineer&lt;/li&gt;
                &lt;li&gt;Survey Team&lt;/li&gt;
                &lt;li&gt;Client / Consultant Representatives&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;!-- FOOTER --&gt;
    &lt;div class=&quot;footer&quot;&gt;
        &lt;h3&gt;Standard Operating Procedure – Concreting Works&lt;/h3&gt;
        &lt;p&gt;Prepared in accordance with Project Specifications, Applicable Indian Standards (IS Codes), Quality Assurance Requirements, and HSE Guidelines.&lt;/p&gt;
        &lt;br&gt;
        &lt;p&gt;© Engineering Method Statement | Structural Concreting SOP&lt;/p&gt;
    &lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/concreting-works-method-statement.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-4971109746414972834</guid><pubDate>Tue, 21 Jul 2026 01:17:18 +0000</pubDate><atom:updated>2026-07-22T23:03:39.350+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><title>Method Statement for Piling Work</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

&lt;title&gt;Piling Works Method Statement | Standard Operating Procedure&lt;/title&gt;

&lt;style&gt;
*{
    margin:0;
    padding:0;
    box-sizing:border-box;
}

body{
    font-family:Segoe UI,Arial,sans-serif;
    background:#eef2f7;
    color:#222;
    line-height:1.7;
    font-size:16px;
}

.wrapper{
    max-width:1100px;
    margin:30px auto;
    background:#fff;
    border-radius:10px;
    overflow:hidden;
    box-shadow:0 5px 20px rgba(0,0,0,.15);
}

.header{
    background:linear-gradient(135deg,#0d47a1,#1976d2);
    color:white;
    padding:35px;
    text-align:center;
}

.header h1{
    font-size:34px;
    margin-bottom:10px;
}

.header h2{
    font-size:20px;
    font-weight:400;
}

.info{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(250px,1fr));
    gap:15px;
    padding:25px;
    background:#f7f9fc;
}

.card{
    background:white;
    padding:15px;
    border-left:5px solid #1565c0;
    border-radius:8px;
    box-shadow:0 2px 8px rgba(0,0,0,.08);
}

.card b{
    color:#0d47a1;
}

.content{
    padding:30px;
}

.section{
    margin-bottom:40px;
}

.section h2{
    background:#1565c0;
    color:white;
    padding:12px 18px;
    border-radius:6px;
    margin-bottom:20px;
}

.section h3{
    color:#1565c0;
    margin:20px 0 10px;
}

ul{
    margin-left:25px;
    margin-bottom:15px;
}

li{
    margin-bottom:8px;
}

table{
    width:100%;
    border-collapse:collapse;
    margin-top:20px;
    margin-bottom:20px;
}

table th{
    background:#1565c0;
    color:white;
    padding:12px;
    border:1px solid #ddd;
}

table td{
    padding:10px;
    border:1px solid #ddd;
}

.note{
    background:#fff8e1;
    border-left:6px solid orange;
    padding:15px;
    margin:20px 0;
}

.warning{
    background:#ffebee;
    border-left:6px solid red;
    padding:15px;
    margin:20px 0;
}

.success{
    background:#e8f5e9;
    border-left:6px solid green;
    padding:15px;
    margin:20px 0;
}

.toc{
    background:#fafafa;
    border:1px solid #ddd;
    padding:20px;
    margin-bottom:35px;
    border-radius:8px;
}

.toc h2{
    background:none;
    color:#1565c0;
    padding:0;
    margin-bottom:15px;
}

.toc ul{
    list-style:none;
    margin:0;
}

.toc li{
    padding:8px;
    border-bottom:1px solid #eee;
}

.toc a{
    text-decoration:none;
    color:#1565c0;
    font-weight:bold;
}

.toc a:hover{
    color:#0d47a1;
}

.footer{
    background:#0d47a1;
    color:white;
    text-align:center;
    padding:20px;
    margin-top:30px;
}

@media(max-width:768px){

.header h1{
font-size:28px;
}

.content{
padding:20px;
}

}
&lt;/style&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;div class=&quot;wrapper&quot;&gt;

&lt;div class=&quot;header&quot;&gt;

&lt;h1&gt;PILING WORKS&lt;/h1&gt;

&lt;h2&gt;METHOD STATEMENT / STANDARD OPERATING PROCEDURE&lt;/h2&gt;

&lt;/div&gt;

&lt;div class=&quot;info&quot;&gt;

&lt;div class=&quot;card&quot;&gt;
&lt;b&gt;Project&lt;/b&gt;&lt;br&gt;
Piling Works
&lt;/div&gt;

&lt;div class=&quot;card&quot;&gt;
&lt;b&gt;Document&lt;/b&gt;&lt;br&gt;
Method Statement
&lt;/div&gt;

&lt;div class=&quot;card&quot;&gt;
&lt;b&gt;Revision&lt;/b&gt;&lt;br&gt;
01
&lt;/div&gt;

&lt;div class=&quot;card&quot;&gt;
&lt;b&gt;Applicable Standards&lt;/b&gt;&lt;br&gt;
IS 456, IS 2314, IS 5121, IS 1200
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;content&quot;&gt;

&lt;div class=&quot;toc&quot;&gt;

&lt;h2&gt;Table of Contents&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;#sec1&quot;&gt;1. Revision Status&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec2&quot;&gt;2. Scope &amp; Objectives&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec3&quot;&gt;3. Reference Standards&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec4&quot;&gt;4. Definitions&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec5&quot;&gt;5. Health &amp; Safety Hazards&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec6&quot;&gt;6. Responsibilities&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec7&quot;&gt;7. Procedure / Method&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec8&quot;&gt;8. Material Requirements&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec9&quot;&gt;9. Equipment Requirements&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec10&quot;&gt;10. Health &amp; Safety Provisions&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec11&quot;&gt;11. QA/QC Documentation&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec12&quot;&gt;12. Supporting Documents&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#sec13&quot;&gt;13. Distribution&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- SECTION 1 --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec1&quot;&gt;

&lt;h2&gt;1. Revision Status&lt;/h2&gt;

&lt;table&gt;

&lt;tr&gt;

&lt;th&gt;Revision&lt;/th&gt;

&lt;th&gt;Date&lt;/th&gt;

&lt;th&gt;Description&lt;/th&gt;

&lt;th&gt;Status&lt;/th&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;00&lt;/td&gt;

&lt;td&gt;10-05-2008&lt;/td&gt;

&lt;td&gt;Initial Issue for Review &amp; Approval&lt;/td&gt;

&lt;td&gt;Approved&lt;/td&gt;

&lt;/tr&gt;

&lt;/table&gt;

&lt;/div&gt;

&lt;!-- SECTION 2 --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec2&quot;&gt;

&lt;h2&gt;2. Scope &amp; Objectives&lt;/h2&gt;

&lt;p&gt;
This Method Statement describes the complete procedure for executing
Piling Works safely, efficiently and in accordance with approved
drawings, project specifications and applicable Indian Standards.
&lt;/p&gt;

&lt;div class=&quot;success&quot;&gt;

&lt;b&gt;Objectives&lt;/b&gt;

&lt;ul&gt;

&lt;li&gt;Ensure safe execution of piling works.&lt;/li&gt;

&lt;li&gt;Maintain required quality standards.&lt;/li&gt;

&lt;li&gt;Achieve required pile capacity.&lt;/li&gt;

&lt;li&gt;Maintain dimensional accuracy.&lt;/li&gt;

&lt;li&gt;Comply with approved specifications.&lt;/li&gt;

&lt;li&gt;Provide proper inspection and documentation.&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;!-- SECTION 3 --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec3&quot;&gt;

&lt;h2&gt;3. Reference Standards&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;Project Technical Specifications&lt;/li&gt;

&lt;li&gt;Approved Construction Drawings&lt;/li&gt;

&lt;li&gt;IS 456 : 2000 Plain and Reinforced Concrete Code&lt;/li&gt;

&lt;li&gt;IS 2314 : 1986 Steel Sheet Piling Sections&lt;/li&gt;

&lt;li&gt;IS 5121 : Safety Code for Piling and Deep Foundations&lt;/li&gt;

&lt;li&gt;IS 1200 (Part 23) Method of Measurement of Piling Works&lt;/li&gt;

&lt;li&gt;Applicable Contract Specifications&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- SECTION 4 --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec4&quot;&gt;

&lt;h2&gt;4. Definitions&lt;/h2&gt;

&lt;table&gt;

&lt;tr&gt;

&lt;th&gt;Abbreviation&lt;/th&gt;

&lt;th&gt;Meaning&lt;/th&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;MS&lt;/td&gt;

&lt;td&gt;Method Statement&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;QCP&lt;/td&gt;

&lt;td&gt;Quality Control Procedure&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;ITP&lt;/td&gt;

&lt;td&gt;Inspection &amp; Test Plan&lt;/td&gt;

&lt;/tr&gt;

&lt;/table&gt;

&lt;div class=&quot;note&quot;&gt;

&lt;b&gt;Note:&lt;/b&gt;

All construction activities shall comply with the approved Method
Statement, Quality Plan, Inspection &amp; Test Plan, Health Safety &amp;
Environment Plan and Project Specifications.

&lt;/div&gt;

&lt;/div&gt;

&lt;!-- PART 2 STARTS FROM SECTION 5 --&gt;
  &lt;!-- ========================= --&gt;
&lt;!-- SECTION 5 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec5&quot;&gt;

&lt;h2&gt;5. Health &amp; Safety Hazards&lt;/h2&gt;

&lt;p&gt;
Specific Health, Safety and Environmental (HSE) requirements shall be
implemented throughout all piling activities. All personnel shall comply
with the approved Project Safety Plan and statutory regulations.
&lt;/p&gt;

&lt;div class=&quot;warning&quot;&gt;

&lt;b&gt;Potential Hazards&lt;/b&gt;

&lt;ul&gt;

&lt;li&gt;Movement of piling rigs and heavy machinery.&lt;/li&gt;

&lt;li&gt;Working near suspended loads.&lt;/li&gt;

&lt;li&gt;Pile collapse during lifting or pitching.&lt;/li&gt;

&lt;li&gt;Excavation collapse.&lt;/li&gt;

&lt;li&gt;Noise and vibration during pile driving.&lt;/li&gt;

&lt;li&gt;Flying debris from hammer impact.&lt;/li&gt;

&lt;li&gt;Electrical hazards from nearby utilities.&lt;/li&gt;

&lt;li&gt;Fire hazards during gas cutting and welding.&lt;/li&gt;

&lt;li&gt;Working at height while handling piles.&lt;/li&gt;

&lt;li&gt;Poor housekeeping causing slips and trips.&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- SECTION 6 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec6&quot;&gt;

&lt;h2&gt;6. Responsibilities&lt;/h2&gt;

&lt;h3&gt;6.1 Project Engineer&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Execute piling work according to approved drawings and specifications.&lt;/li&gt;

&lt;li&gt;Ensure all manpower, equipment and materials are available.&lt;/li&gt;

&lt;li&gt;Coordinate with Client, Consultant and Project Manager.&lt;/li&gt;

&lt;li&gt;Ensure quality control requirements are followed.&lt;/li&gt;

&lt;li&gt;Ensure all HSE requirements are implemented.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;6.2 Site Engineer&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Supervise daily piling activities.&lt;/li&gt;

&lt;li&gt;Provide work instructions to construction team.&lt;/li&gt;

&lt;li&gt;Monitor progress against project schedule.&lt;/li&gt;

&lt;li&gt;Coordinate inspections with QA/QC Engineer.&lt;/li&gt;

&lt;li&gt;Maintain proper alignment and pile locations.&lt;/li&gt;

&lt;li&gt;Coordinate with Surveyor.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;6.3 QA / QC Engineer&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Inspect completed works.&lt;/li&gt;

&lt;li&gt;Verify compliance with specifications.&lt;/li&gt;

&lt;li&gt;Maintain inspection records.&lt;/li&gt;

&lt;li&gt;Arrange client inspections.&lt;/li&gt;

&lt;li&gt;Approve completed stages before proceeding.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;6.4 Safety Engineer&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Implement Project HSE Plan.&lt;/li&gt;

&lt;li&gt;Conduct toolbox talks.&lt;/li&gt;

&lt;li&gt;Inspect work areas regularly.&lt;/li&gt;

&lt;li&gt;Ensure PPE compliance.&lt;/li&gt;

&lt;li&gt;Investigate unsafe conditions.&lt;/li&gt;

&lt;li&gt;Maintain safe working environment.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;6.5 Foreman&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Allocate manpower.&lt;/li&gt;

&lt;li&gt;Coordinate with Site Engineer.&lt;/li&gt;

&lt;li&gt;Monitor daily productivity.&lt;/li&gt;

&lt;li&gt;Ensure safety compliance.&lt;/li&gt;

&lt;li&gt;Report unforeseen issues immediately.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;6.6 Surveyor&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Establish benchmarks.&lt;/li&gt;

&lt;li&gt;Carry out pile setting-out.&lt;/li&gt;

&lt;li&gt;Verify pile coordinates.&lt;/li&gt;

&lt;li&gt;Maintain survey records.&lt;/li&gt;

&lt;li&gt;Monitor verticality and alignment.&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- SECTION 7 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec7&quot;&gt;

&lt;h2&gt;7. Procedure / Method to be Employed&lt;/h2&gt;

&lt;h3&gt;7.1 Preliminary Works&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Review approved drawings.&lt;/li&gt;

&lt;li&gt;Verify benchmark coordinates.&lt;/li&gt;

&lt;li&gt;Locate all pile positions.&lt;/li&gt;

&lt;li&gt;Mark pile centers accurately.&lt;/li&gt;

&lt;li&gt;Check existing underground utilities.&lt;/li&gt;

&lt;li&gt;Arrange access roads for piling rig.&lt;/li&gt;

&lt;li&gt;Ensure working platform is stable.&lt;/li&gt;

&lt;/ul&gt;

&lt;div class=&quot;note&quot;&gt;

&lt;b&gt;Important&lt;/b&gt;&lt;br&gt;

Pile locations shall be checked jointly by Surveyor, Site Engineer and
Consultant before commencement of piling.

&lt;/div&gt;

&lt;h3&gt;7.2 Trial Pile Driving Test&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Carry out trial pile before production piling.&lt;/li&gt;

&lt;li&gt;Use approved piling equipment.&lt;/li&gt;

&lt;li&gt;Drive pile up to design bearing strata.&lt;/li&gt;

&lt;li&gt;Record penetration for every hammer blow.&lt;/li&gt;

&lt;li&gt;Measure rebound.&lt;/li&gt;

&lt;li&gt;Measure penetration depth.&lt;/li&gt;

&lt;li&gt;Prepare Trial Pile Driving Report.&lt;/li&gt;

&lt;li&gt;Obtain Consultant approval.&lt;/li&gt;

&lt;/ul&gt;

&lt;table&gt;

&lt;tr&gt;

&lt;th&gt;Observation&lt;/th&gt;

&lt;th&gt;Requirement&lt;/th&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Penetration Depth&lt;/td&gt;

&lt;td&gt;Record Continuously&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Hammer Blow Count&lt;/td&gt;

&lt;td&gt;Every 50 cm&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Pile Rebound&lt;/td&gt;

&lt;td&gt;Record&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Final Bearing&lt;/td&gt;

&lt;td&gt;Verify with Bore Log&lt;/td&gt;

&lt;/tr&gt;

&lt;/table&gt;

&lt;h3&gt;7.3 Review of Trial Results&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Review pile capacity.&lt;/li&gt;

&lt;li&gt;Review penetration rate.&lt;/li&gt;

&lt;li&gt;Confirm pile length.&lt;/li&gt;

&lt;li&gt;Confirm hammer suitability.&lt;/li&gt;

&lt;li&gt;Revise pile specifications if required.&lt;/li&gt;

&lt;li&gt;Obtain Engineer approval before production piling.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;7.4 Pile Driving Equipment&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Hydraulic Rig&lt;/li&gt;

&lt;li&gt;Diesel Hammer&lt;/li&gt;

&lt;li&gt;Hydraulic Hammer&lt;/li&gt;

&lt;li&gt;Pile Leads&lt;/li&gt;

&lt;li&gt;Pile Cushion&lt;/li&gt;

&lt;li&gt;Steel Casing&lt;/li&gt;

&lt;li&gt;Crane&lt;/li&gt;

&lt;li&gt;Survey Instruments&lt;/li&gt;

&lt;/ul&gt;

&lt;div class=&quot;success&quot;&gt;

&lt;b&gt;Equipment Requirement&lt;/b&gt;

&lt;p&gt;

The selected hammer shall be capable of achieving the required
penetration and bearing capacity without causing structural damage to
the pile.

&lt;/p&gt;

&lt;/div&gt;

&lt;h3&gt;7.5 Production Pile Driving&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Lift pile safely.&lt;/li&gt;

&lt;li&gt;Position accurately over pile mark.&lt;/li&gt;

&lt;li&gt;Check verticality before driving.&lt;/li&gt;

&lt;li&gt;Maintain hammer alignment.&lt;/li&gt;

&lt;li&gt;Continue driving without unnecessary interruption.&lt;/li&gt;

&lt;li&gt;Record blow count.&lt;/li&gt;

&lt;li&gt;Monitor penetration.&lt;/li&gt;

&lt;li&gt;Monitor pile movement continuously.&lt;/li&gt;

&lt;li&gt;Protect pile head using approved cushion.&lt;/li&gt;

&lt;li&gt;Replace damaged cushion immediately.&lt;/li&gt;

&lt;/ul&gt;

&lt;div class=&quot;warning&quot;&gt;

&lt;b&gt;Stop Work Immediately If&lt;/b&gt;

&lt;ul&gt;

&lt;li&gt;Pile damage is observed.&lt;/li&gt;

&lt;li&gt;Unexpected obstruction is encountered.&lt;/li&gt;

&lt;li&gt;Specified penetration cannot be achieved.&lt;/li&gt;

&lt;li&gt;Pile deviates beyond permissible limits.&lt;/li&gt;

&lt;li&gt;Equipment malfunction occurs.&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;h3&gt;7.6 Driving Sequence&lt;/h3&gt;

&lt;ul&gt;

&lt;li&gt;Drive piles from interior towards outside.&lt;/li&gt;

&lt;li&gt;Avoid excessive ground displacement.&lt;/li&gt;

&lt;li&gt;Prevent damage to adjacent piles.&lt;/li&gt;

&lt;li&gt;Prevent excessive soil densification.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;7.7 Verticality Requirements&lt;/h3&gt;

&lt;table&gt;

&lt;tr&gt;

&lt;th&gt;Parameter&lt;/th&gt;

&lt;th&gt;Requirement&lt;/th&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Pile Verticality&lt;/td&gt;

&lt;td&gt;1 : 100 Maximum&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Central Position&lt;/td&gt;

&lt;td&gt;±100 mm&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Pile Head Level&lt;/td&gt;

&lt;td&gt;±10 mm&lt;/td&gt;

&lt;/tr&gt;

&lt;/table&gt;

&lt;!-- PART 3 STARTS FROM SECTION 8 --&gt;
  
  &lt;!-- ========================= --&gt;
&lt;!-- SECTION 8 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec8&quot;&gt;

&lt;h2&gt;8. Material Requirements&lt;/h2&gt;

&lt;table&gt;

&lt;tr&gt;
&lt;th&gt;Material&lt;/th&gt;
&lt;th&gt;Specification&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Cement&lt;/td&gt;
&lt;td&gt;Fresh Ordinary Portland Cement conforming to relevant IS Specifications.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Coarse Aggregate&lt;/td&gt;
&lt;td&gt;Approved graded aggregate.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Fine Aggregate&lt;/td&gt;
&lt;td&gt;Clean natural sand conforming to specifications.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Water&lt;/td&gt;
&lt;td&gt;Clean potable water free from harmful salts and impurities.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Reinforcement Steel&lt;/td&gt;
&lt;td&gt;Approved grade as per structural drawings.&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;div class=&quot;note&quot;&gt;

&lt;b&gt;Quality Requirement&lt;/b&gt;

All materials shall be approved before use and accompanied by relevant
test certificates wherever applicable.

&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- SECTION 9 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec9&quot;&gt;

&lt;h2&gt;9. Equipment Requirements&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;Survey Instruments&lt;/li&gt;

&lt;li&gt;Hydraulic Piling Rig&lt;/li&gt;

&lt;li&gt;Diesel Hammer&lt;/li&gt;

&lt;li&gt;Hydraulic Hammer&lt;/li&gt;

&lt;li&gt;Crane&lt;/li&gt;

&lt;li&gt;Transit Mixer&lt;/li&gt;

&lt;li&gt;Concrete Pump&lt;/li&gt;

&lt;li&gt;Steel Casing&lt;/li&gt;

&lt;li&gt;Tremie Pipe&lt;/li&gt;

&lt;li&gt;Auger&lt;/li&gt;

&lt;li&gt;Gas Cutter&lt;/li&gt;

&lt;li&gt;Pneumatic Hammer&lt;/li&gt;

&lt;li&gt;Vibrator Needles&lt;/li&gt;

&lt;li&gt;Jack Hammer&lt;/li&gt;

&lt;li&gt;Wooden Floats&lt;/li&gt;

&lt;li&gt;Trowels&lt;/li&gt;

&lt;li&gt;Pick and Carry Crane&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- SECTION 10 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec10&quot;&gt;

&lt;h2&gt;10. Health &amp; Safety Provisions&lt;/h2&gt;

&lt;div class=&quot;warning&quot;&gt;

&lt;ul&gt;

&lt;li&gt;Safety shall receive the highest priority throughout piling operations.&lt;/li&gt;

&lt;li&gt;Only trained and authorized personnel shall operate equipment.&lt;/li&gt;

&lt;li&gt;All workers shall wear mandatory PPE.&lt;/li&gt;

&lt;li&gt;Barricading and warning signs shall be installed around work areas.&lt;/li&gt;

&lt;li&gt;Excavations shall be properly protected against collapse.&lt;/li&gt;

&lt;li&gt;Maintain safe distance from operating piling rigs.&lt;/li&gt;

&lt;li&gt;Daily equipment inspections shall be conducted.&lt;/li&gt;

&lt;li&gt;Fire extinguishers shall be available during gas cutting and welding.&lt;/li&gt;

&lt;li&gt;Good housekeeping shall be maintained throughout the site.&lt;/li&gt;

&lt;li&gt;Emergency response procedures shall be communicated to all workers.&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;table&gt;

&lt;tr&gt;

&lt;th&gt;PPE&lt;/th&gt;

&lt;th&gt;Mandatory&lt;/th&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Safety Helmet&lt;/td&gt;

&lt;td&gt;✔&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Safety Shoes&lt;/td&gt;

&lt;td&gt;✔&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Reflective Jacket&lt;/td&gt;

&lt;td&gt;✔&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Safety Gloves&lt;/td&gt;

&lt;td&gt;✔&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Eye Protection&lt;/td&gt;

&lt;td&gt;✔&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Ear Protection&lt;/td&gt;

&lt;td&gt;As Required&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Safety Harness&lt;/td&gt;

&lt;td&gt;When Working at Height&lt;/td&gt;

&lt;/tr&gt;

&lt;/table&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- SECTION 11 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec11&quot;&gt;

&lt;h2&gt;11. QA / QC Documentation&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;Approved Method Statement.&lt;/li&gt;

&lt;li&gt;Inspection &amp; Test Plan (ITP).&lt;/li&gt;

&lt;li&gt;Quality Control Procedure (QCP).&lt;/li&gt;

&lt;li&gt;Approved Material Test Reports.&lt;/li&gt;

&lt;li&gt;Pile Driving Records.&lt;/li&gt;

&lt;li&gt;Survey Records.&lt;/li&gt;

&lt;li&gt;Pile Location Records.&lt;/li&gt;

&lt;li&gt;Concrete Cube Test Reports.&lt;/li&gt;

&lt;li&gt;Pile Integrity / Load Test Reports (where applicable).&lt;/li&gt;

&lt;li&gt;Daily Inspection Reports.&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- SECTION 12 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec12&quot;&gt;

&lt;h2&gt;12. Supporting Documentation&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;Contract Specifications.&lt;/li&gt;

&lt;li&gt;Approved Construction Drawings.&lt;/li&gt;

&lt;li&gt;Method Statement.&lt;/li&gt;

&lt;li&gt;Inspection &amp; Test Plan.&lt;/li&gt;

&lt;li&gt;Quality Control Procedure.&lt;/li&gt;

&lt;li&gt;Project Quality Plan.&lt;/li&gt;

&lt;li&gt;Project HSE Plan.&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- SECTION 13 --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;section&quot; id=&quot;sec13&quot;&gt;

&lt;h2&gt;13. Distribution&lt;/h2&gt;

&lt;p&gt;
Copies of this Method Statement shall be distributed to the following
personnel:
&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;Management Representative&lt;/li&gt;

&lt;li&gt;Project Manager&lt;/li&gt;

&lt;li&gt;Project Engineer&lt;/li&gt;

&lt;li&gt;Site Engineer&lt;/li&gt;

&lt;li&gt;QA/QC Engineer&lt;/li&gt;

&lt;li&gt;HSE Engineer&lt;/li&gt;

&lt;li&gt;Survey Team&lt;/li&gt;

&lt;li&gt;Client / Consultant&lt;/li&gt;

&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- ========================= --&gt;
&lt;!-- FOOTER --&gt;
&lt;!-- ========================= --&gt;

&lt;div class=&quot;footer&quot;&gt;

&lt;h3&gt;Standard Operating Procedure – Piling Works&lt;/h3&gt;

&lt;p&gt;
Prepared in accordance with Project Specifications, Applicable Indian
Standards (IS Codes), Quality Assurance Requirements and Health,
Safety &amp; Environment (HSE) Practices.
&lt;/p&gt;

&lt;br&gt;

&lt;p&gt;
© Engineering Method Statement | Blogger HTML Version
&lt;/p&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;
  &lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/method-statement-for-piling-work.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-4392012533830693780</guid><pubDate>Fri, 10 Jul 2026 12:32:04 +0000</pubDate><atom:updated>2026-07-10T18:11:23.267+05:30</atom:updated><title> Steel Quantity Estimation Guide &amp; Calculator for Building of various types</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Steel Quantity Estimation Guide &amp; Calculator&lt;/title&gt;
    &lt;style&gt;
        :root {
            --primary-color: pink;
            --secondary-color: blue;
            --dark-color: black;
            --light-bg: brown;
            --card-bg: white;
            --accent-color: #d80032;
        }

        body {
            font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.6;
            color: var(--dark-color);
            background-color: var(--light-bg);
            margin: 0;
            padding: 0;
        }

        .container {
            max-width: 1100px;
            margin: 0 auto;
            padding: 2px;
        }

        header {
            background-color: var(--primary-color);
            color: white;
            padding: 2px 2px;
            text-align: center;
            border-bottom: 5px solid var(--secondary-color);
            margin-bottom: 30px;
            border-radius: 4px;
        }

        header h1 {
            margin: 0;
            font-size: 2.5rem;
          color: white;
        }

        header p {
            margin: 10px 0 0 0;
            opacity: 0.9;
            font-size: 1.1rem;
          color: yellow;
        }

        .grid {
            display: grid;
            grid-template-columns: 1fr;
            gap: 30px;
        }

        @media (min-width: 768px) {
            .grid {
                grid-template-columns: 3fr 2fr;
            }
        }

        .card {
            background: var(--card-bg);
            padding: 2px;
            border-radius: 8px;
            box-shadow: 0 4px 15px rgba(0,0,0,0.05);
            margin-bottom: 25px;
        }

        h2 {
            color: var(--primary-color);
            border-bottom: 2px solid var(--secondary-color);
            padding-bottom: 8px;
            margin-top: 0;
        }

        h3 {
            color: var(--primary-color);
            margin-top: 20px;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin: 15px 0;
            font-size: 0.95rem;
        }

        th, td {
            border: 1px solid #dddddd;
            text-align: left;
            padding: 1px;
        }

        th {
            background-color: var(--primary-color);
            color: white;
        }

        tr:nth-child(even) {
            background-color: #f9f9f9;
        }

        .form-group {
            margin-bottom: 20px;
        }

        label {
            display: block;
            font-weight: 600;
            margin-bottom: 8px;
            color: red;
        }

        select, input {
            width: 100%;
            padding: 1px;
            border: 1px solid #ccc;
            border-radius: 4px;
            box-sizing: border-box;
            font-size: 16px;
        }

        button {
            width: 100%;
            background-color: var(--primary-color);
            color: white;
            padding: 14px;
            border: none;
            border-radius: 4px;
            font-size: 16px;
            font-weight: bold;
            cursor: pointer;
            transition: background 0.3s ease;
        }

        button:hover {
            background-color: #1d4477;
        }

        .results {
            margin-top: 25px;
            padding: 2px;
            background-color: #f9f7f5;
            border-left: 5px solid var(--secondary-color);
            border-radius: 4px;
            display: none;
        }

        .result-line {
            font-size: 1.1rem;
            margin: 10px 0;
        }

        .highlight {
            font-weight: bold;
            color: var(--accent-color);
            font-size: 1.2rem;
        }

        blockquote {
            background: #f9f9f9;
            border-left: 10px solid var(--primary-color);
            margin: 1.5em 10px;
            padding: 0.5em 10px;
        }

        .tips-list, .factors-list {
            padding-left: 20px;
        }

        .tips-list li, .factors-list li {
            margin-bottom: 10px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;header&gt;
        &lt;h1&gt;Steel Quantity Estimation Guide&lt;/h1&gt;
        &lt;p&gt;Master structural steel calculation rules, reference frameworks, and optimization methodologies.&lt;/p&gt;
    &lt;/header&gt;

    &lt;div class=&quot;grid&quot;&gt;
        &lt;main&gt;
            &lt;section class=&quot;card&quot;&gt;
                &lt;h2&gt;1. Introduction to Structural Steel Estimation&lt;/h2&gt;
                &lt;p&gt;Reinforcement steel (Rebar) provides crucial tensile strength to concrete structures. Accurately estimating the required quantity of steel during the planning phase prevents resource shortfalls, allows precise procurement scheduling, and helps protect margins from sudden structural price fluctuations.&lt;/p&gt;
                
                &lt;h3&gt;Key Drivers of Steel Consumption&lt;/h3&gt;
                &lt;ul class=&quot;factors-list&quot;&gt;
                    &lt;li&gt;&lt;strong&gt;Building Design &amp; Structural System:&lt;/strong&gt; Frame structural systems require distinct optimization compared to load-bearing wall configurations.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Building Height &amp; Number of Floors:&lt;/strong&gt; Cumulative dead and live loads across elevated vertical planes demand higher cross-sectional areas of reinforcement.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Seismic Zone &amp; Soil Conditions:&lt;/strong&gt; High-risk seismic zones require strict ductile detailing rules, leading to higher steel consumption ratios.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Concrete Grade:&lt;/strong&gt; Balancing concrete compressive strengths against steel tensile properties affects overall reinforcement weight requirements.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/section&gt;

            &lt;section class=&quot;card&quot;&gt;
                &lt;h2&gt;2. Standard Consumption Reference Benchmarks&lt;/h2&gt;
                &lt;p&gt;The matrix below outlines approximate consumption standards measured in &lt;strong&gt;kilograms per square foot (kg/sq.ft.) of Built-Up Area&lt;/strong&gt;:&lt;/p&gt;
                
                &lt;div style=&quot;overflow-x:auto;&quot;&gt;
                    &lt;table&gt;
                        &lt;thead&gt;
                            &lt;tr&gt;
                                &lt;th&gt;Type of Building&lt;/th&gt;
                                &lt;th&gt;G (Ground)&lt;/th&gt;
                                &lt;th&gt;G + 1&lt;/th&gt;
                                &lt;th&gt;G + 2&lt;/th&gt;
                                &lt;th&gt;G + 3&lt;/th&gt;
                                &lt;th&gt;G + 4 &amp; Above&lt;/th&gt;
                            &lt;/tr&gt;
                        &lt;/thead&gt;
                        &lt;tbody&gt;
                            &lt;tr&gt;
                                &lt;td&gt;&lt;strong&gt;Residential Building&lt;/strong&gt;&lt;/td&gt;
                                &lt;td&gt;3.5 – 4.5&lt;/td&gt;
                                &lt;td&gt;4.5 – 5.5&lt;/td&gt;
                                &lt;td&gt;5.0 – 6.0&lt;/td&gt;
                                &lt;td&gt;5.5 – 6.5&lt;/td&gt;
                                &lt;td&gt;6.0 – 7.0&lt;/td&gt;
                            &lt;/tr&gt;
                            &lt;tr&gt;
                                &lt;td&gt;&lt;strong&gt;Commercial Building&lt;/strong&gt;&lt;/td&gt;
                                &lt;td&gt;4.5 – 6.0&lt;/td&gt;
                                &lt;td&gt;5.5 – 7.0&lt;/td&gt;
                                &lt;td&gt;6.0 – 8.0&lt;/td&gt;
                                &lt;td&gt;7.0 – 9.0&lt;/td&gt;
                                &lt;td&gt;8.0 – 10.0&lt;/td&gt;
                            &lt;/tr&gt;
                            &lt;tr&gt;
                                &lt;td&gt;&lt;strong&gt;Industrial Building&lt;/strong&gt;&lt;/td&gt;
                                &lt;td&gt;6.0 – 8.0&lt;/td&gt;
                                &lt;td&gt;7.0 – 9.0&lt;/td&gt;
                                &lt;td&gt;8.0 – 10.0&lt;/td&gt;
                                &lt;td&gt;9.0 – 12.0&lt;/td&gt;
                                &lt;td&gt;10.0 – 14.0&lt;/td&gt;
                            &lt;/tr&gt;
                            &lt;tr&gt;
                                &lt;td&gt;&lt;strong&gt;Hall / Warehouse&lt;/strong&gt;&lt;/td&gt;
                                &lt;td&gt;5.0 – 7.0&lt;/td&gt;
                                &lt;td&gt;6.0 – 8.0&lt;/td&gt;
                                &lt;td&gt;7.0 – 9.0&lt;/td&gt;
                                &lt;td&gt;8.0 – 10.0&lt;/td&gt;
                                &lt;td&gt;9.0 – 12.0&lt;/td&gt;
                            &lt;/tr&gt;
                        &lt;/tbody&gt;
                    &lt;/table&gt;
                &lt;/div&gt;
            &lt;/section&gt;

            &lt;section class=&quot;card&quot;&gt;
                &lt;h2&gt;3. Unit Weight Calculations&lt;/h2&gt;
                &lt;p&gt;To convert structural schedules into bulk weights, use the standard mathematical unit weight conversion formula:&lt;/p&gt;
                &lt;blockquote&gt;
                    &lt;strong&gt;Weight (kg/m) = D² / 162&lt;/strong&gt;&lt;br&gt;
                    &lt;small&gt;Where D represents nominal Bar Diameter in millimeters (mm).&lt;/small&gt;
                &lt;/blockquote&gt;

                &lt;div style=&quot;overflow-x:auto;&quot;&gt;
                    &lt;table&gt;
                        &lt;thead&gt;
                            &lt;tr&gt;
                                &lt;th&gt;Diameter (mm)&lt;/th&gt;
                                &lt;th&gt;Weight (kg/m)&lt;/th&gt;
                                &lt;th&gt;Diameter (mm)&lt;/th&gt;
                                &lt;th&gt;Weight (kg/m)&lt;/th&gt;
                            &lt;/tr&gt;
                        &lt;/thead&gt;
                        &lt;tbody&gt;
                            &lt;tr&gt;&lt;td&gt;8 mm&lt;/td&gt;&lt;td&gt;0.395&lt;/td&gt;&lt;td&gt;25 mm&lt;/td&gt;&lt;td&gt;3.853&lt;/td&gt;&lt;/tr&gt;
                            &lt;tr&gt;&lt;td&gt;10 mm&lt;/td&gt;&lt;td&gt;0.617&lt;/td&gt;&lt;td&gt;28 mm&lt;/td&gt;&lt;td&gt;4.834&lt;/td&gt;&lt;/tr&gt;
                            &lt;tr&gt;&lt;td&gt;12 mm&lt;/td&gt;&lt;td&gt;0.888&lt;/td&gt;&lt;td&gt;32 mm&lt;/td&gt;&lt;td&gt;6.313&lt;/td&gt;&lt;/tr&gt;
                            &lt;tr&gt;&lt;td&gt;16 mm&lt;/td&gt;&lt;td&gt;1.578&lt;/td&gt;&lt;td&gt;36 mm&lt;/td&gt;&lt;td&gt;7.990&lt;/td&gt;&lt;/tr&gt;
                            &lt;tr&gt;&lt;td&gt;20 mm&lt;/td&gt;&lt;td&gt;2.466&lt;/td&gt;&lt;td&gt;40 mm&lt;/td&gt;&lt;td&gt;9.865&lt;/td&gt;&lt;/tr&gt;
                        &lt;/tbody&gt;
                    &lt;/table&gt;
                &lt;/div&gt;
            &lt;/section&gt;

            &lt;section class=&quot;card&quot;&gt;
                &lt;h2&gt;4. Material Usage Tips&lt;/h2&gt;
                &lt;ul class=&quot;tips-list&quot;&gt;
                    &lt;li&gt;&lt;strong&gt;Opt for High Performance:&lt;/strong&gt; Prioritize Fe 500 / Fe 500D Thermo-Mechanically Treated (TMT) options for enhanced tensile properties and better earthquake resistance.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Reduce Bending Wastage:&lt;/strong&gt; Establish structured cutting lists (BBS) to minimize scrap material.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Ensure Proper Lap Length:&lt;/strong&gt; Maintain accurate structural splice overlaps and anchorage standards according to design drawings.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/section&gt;
        &lt;/main&gt;

        &lt;aside&gt;
            &lt;div class=&quot;card&quot; style=&quot;position: sticky; top: 20px;&quot;&gt;
                &lt;h2&gt;Interactive Estimator&lt;/h2&gt;
                
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label for=&quot;buildingType&quot;&gt;Type of Building&lt;/label&gt;
                    &lt;select id=&quot;buildingType&quot;&gt;
                        &lt;option value=&quot;residential&quot;&gt;Residential Building&lt;/option&gt;
                        &lt;option value=&quot;commercial&quot;&gt;Commercial Building&lt;/option&gt;
                        &lt;option value=&quot;industrial&quot;&gt;Industrial Building&lt;/option&gt;
                        &lt;option value=&quot;warehouse&quot;&gt;Hall / Warehouse&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;

                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label for=&quot;floors&quot;&gt;Number of Floors&lt;/label&gt;
                    &lt;select id=&quot;floors&quot;&gt;
                        &lt;option value=&quot;g&quot;&gt;G (Ground Floor)&lt;/option&gt;
                        &lt;option value=&quot;g1&quot;&gt;G + 1&lt;/option&gt;
                        &lt;option value=&quot;g2&quot;&gt;G + 2&lt;/option&gt;
                        &lt;option value=&quot;g3&quot;&gt;G + 3&lt;/option&gt;
                        &lt;option value=&quot;g4&quot;&gt;G + 4 &amp; Above&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;

                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label for=&quot;area&quot;&gt;Total Built-Up Area (Sq. Ft.)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;area&quot; placeholder=&quot;e.g., 2500&quot; min=&quot;1&quot;&gt;
                &lt;/div&gt;

                &lt;button onclick=&quot;calculateSteelRequirement()&quot;&gt;Calculate Estimate&lt;/button&gt;

                &lt;div class=&quot;results&quot; id=&quot;resultsBlock&quot;&gt;
                    &lt;h3&gt;Estimation Results&lt;/h3&gt;
                    &lt;p class=&quot;result-line&quot;&gt;Consumption Rate: &lt;span id=&quot;rateRange&quot; class=&quot;highlight&quot;&gt;&lt;/span&gt; kg/sq.ft.&lt;/p&gt;
                    &lt;p class=&quot;result-line&quot;&gt;Total Weight (kg): &lt;br&gt;&lt;span id=&quot;weightRangeKg&quot; class=&quot;highlight&quot;&gt;&lt;/span&gt; kg&lt;/p&gt;
                    &lt;p class=&quot;result-line&quot;&gt;Total Metric Tonnes: &lt;br&gt;&lt;span id=&quot;weightRangeTonnes&quot; class=&quot;highlight&quot;&gt;&lt;/span&gt; MT&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/aside&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    // Embedded Data Matrix mapping building properties to min/max consumption parameters
    const matrixData = {
        residential: { g: [3.5, 4.5], g1: [4.5, 5.5], g2: [5.0, 6.0], g3: [5.5, 6.5], g4: [6.0, 7.0] },
        commercial:  { g: [4.5, 6.0], g1: [5.5, 7.0], g2: [6.0, 8.0], g3: [7.0, 9.0], g4: [8.0, 10.0] },
        industrial:  { g: [6.0, 8.0], g1: [7.0, 9.0], g2: [8.0, 10.0], g3: [9.0, 12.0], g4: [10.0, 14.0] },
        warehouse:   { g: [5.0, 7.0], g1: [6.0, 8.0], g2: [7.0, 9.0], g3: [8.0, 10.0], g4: [9.0, 12.0] }
    };

    function calculateSteelRequirement() {
        const buildingType = document.getElementById(&#39;buildingType&#39;).value;
        const floors = document.getElementById(&#39;floors&#39;).value;
        const area = parseFloat(document.getElementById(&#39;area&#39;).value);

        if (isNaN(area) || area &lt;= 0) {
            alert(&#39;Please enter a valid numeric value for the built-up area.&#39;);
            return;
        }

        const limits = matrixData[buildingType][floors];
        const minRate = limits[0];
        const maxRate = limits[1];

        const minKg = (minRate * area).toFixed(0);
        const maxKg = (maxRate * area).toFixed(0);

        const minMT = (minKg / 1000).toFixed(2);
        const maxMT = (maxKg / 1000).toFixed(2);

        document.getElementById(&#39;rateRange&#39;).innerText = `${minRate} - ${maxRate}`;
        document.getElementById(&#39;weightRangeKg&#39;).innerText = `${Number(minKg).toLocaleString()} to ${Number(maxKg).toLocaleString()}`;
        document.getElementById(&#39;weightRangeTonnes&#39;).innerText = `${minMT} - ${maxMT}`;
        
        document.getElementById(&#39;resultsBlock&#39;).style.display = &#39;block&#39;;
    }
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/steel-quantity-estimation-guide.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-2281255514835578006</guid><pubDate>Fri, 10 Jul 2026 02:02:51 +0000</pubDate><atom:updated>2026-07-10T07:34:13.673+05:30</atom:updated><title>STAAD input generator tool for bridge</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;STAAD 3D Bridge Structure Generator&lt;/title&gt;
    &lt;style&gt;
        body { font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif; margin: 20px; color: #333; background-color: #f4f6f9; }
        .container { max-width: 1350px; margin: auto; background: white; padding: 2px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
        h2, h3 { color: #1e40af; border-bottom: 2px solid #e2e8f0; padding-bottom: 8px; }
        .section { margin-bottom: 25px; padding: 1px; border: 1px solid #cbd5e1; border-radius: 6px; background-color: #f8fafc; }
        .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
        .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 15px; }
        label { display: block; font-weight: bold; margin-bottom: 5px; font-size: 0.9em; color: #334155; }
        input, select { width: 100%; padding: 2px; border: 1px solid #cbd5e1; border-radius: 4px; box-sizing: border-box; }
        button { background-color: #1e40af; color: white; padding: 2px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 1em; font-weight: bold; width: 100%; transition: background 0.2s; }
        button:hover { background-color: #1e3a8a; }
        textarea { width: 100%; height: 350px; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: 0.85em; background-color: #1e293b; color: #38bdf8; padding: 1px; border-radius: 5px; box-sizing: border-box; resize: vertical; line-height: 1.4; }
        .help-text { font-size: 0.8em; color: #64748b; font-style: italic; margin-top: 2px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;h2&gt;STAAD 3D Bridge Substructure &amp; Superstructure Generator&lt;/h2&gt;
    &lt;p&gt;Generate clean, analysis-ready &lt;code&gt;.std&lt;/code&gt; files for standard concrete girder bridges. Automatically maps sequential node sharing, distinct components, releases for bearings, and finite element plate mesh variables.&lt;/p&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;1. Foundation &amp; Pier Geometry&lt;/h3&gt;
        &lt;div class=&quot;grid-3&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Number of Piles per Pier&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;numPiles&quot; value=&quot;4&quot; min=&quot;2&quot; max=&quot;9&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Pile Length [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;pileLength&quot; value=&quot;15.0&quot; step=&quot;0.5&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Pile Diameter [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;pileDia&quot; value=&quot;1.0&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;br&gt;
        &lt;div class=&quot;grid-3&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Pile Cap Thickness [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;capThick&quot; value=&quot;1.8&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Pier Type&lt;/label&gt;
                &lt;select id=&quot;pierType&quot;&gt;
                    &lt;option value=&quot;circular&quot;&gt;Circular Pillar&lt;/option&gt;
                    &lt;option value=&quot;wall&quot;&gt;Wall Type (Rectangular)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Pier Height (Excl. Cap) [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;pierHeight&quot; value=&quot;8.0&quot; step=&quot;0.5&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;br&gt;
        &lt;div class=&quot;grid-2&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Pier Circular Dia / Wall Thk [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;pierDimX&quot; value=&quot;1.5&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Pier Cap Depth &amp; Width [m]&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;pierCapDims&quot; value=&quot;1.5, 1.8&quot;&gt;
                &lt;div class=&quot;help-text&quot;&gt;Depth, Width (e.g., 1.5, 1.8)&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;2. Superstructure (Girders &amp; Deck Slab)&lt;/h3&gt;
        &lt;div class=&quot;grid-3&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Bridge Carriage Width [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;bridgeWidth&quot; value=&quot;10.5&quot; step=&quot;0.5&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Number of Main Girders&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;numGirders&quot; value=&quot;4&quot; min=&quot;2&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Girder Depth [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;girderDepth&quot; value=&quot;1.6&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;br&gt;
        &lt;div class=&quot;grid-2&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Bridge Span Length [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;spanLength&quot; value=&quot;25.0&quot; step=&quot;0.5&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Slab Deck Thickness [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;slabThick&quot; value=&quot;0.25&quot; step=&quot;0.01&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;3. Material Specification (Indian Standards)&lt;/h3&gt;
        &lt;div class=&quot;grid-2&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Concrete Grade (Substructure)&lt;/label&gt;
                &lt;select id=&quot;fckSub&quot;&gt;
                    &lt;option value=&quot;35000&quot;&gt;M35 Concrete&lt;/option&gt;
                    &lt;option value=&quot;40000&quot; selected&gt;M40 Concrete&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Concrete Grade (Superstructure)&lt;/label&gt;
                &lt;select id=&quot;fckSuper&quot;&gt;
                    &lt;option value=&quot;45000&quot; selected&gt;M45 Concrete&lt;/option&gt;
                    &lt;option value=&quot;50000&quot;&gt;M50 Concrete&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;button onclick=&quot;generateBridgeSTAAD()&quot;&gt;Generate 3D Bridge STAAD Model&lt;/button&gt;
    
    &lt;br&gt;&lt;br&gt;
    
    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;4. Generated Output (.STD Data)&lt;/h3&gt;
        &lt;textarea id=&quot;staadOutput&quot; readonly placeholder=&quot;STAAD Space file content will appear here...&quot;&gt;&lt;/textarea&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;button style=&quot;background-color: #22c55e;&quot; onclick=&quot;downloadBridgeStd()&quot;&gt;Download Bridge .STD File&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
function generateBridgeSTAAD() {
    // 1. Gather input parameters
    const numPiles = parseInt(document.getElementById(&#39;numPiles&#39;).value);
    const pileL = parseFloat(document.getElementById(&#39;pileLength&#39;).value);
    const pileD = parseFloat(document.getElementById(&#39;pileDia&#39;).value);
    const capT = parseFloat(document.getElementById(&#39;capThick&#39;).value);
    const pierType = document.getElementById(&#39;pierType&#39;).value;
    const pierH = parseFloat(document.getElementById(&#39;pierHeight&#39;).value);
    const pierDimX = parseFloat(document.getElementById(&#39;pierDimX&#39;).value);
    
    const capDims = document.getElementById(&#39;pierCapDims&#39;).value.split(&#39;,&#39;).map(Number);
    const pierCapDepth = capDims[0];
    const pierCapWidth = capDims[1];

    const brWidth = parseFloat(document.getElementById(&#39;bridgeWidth&#39;).value);
    const numGirders = parseInt(document.getElementById(&#39;numGirders&#39;).value);
    const girderDepth = parseFloat(document.getElementById(&#39;girderDepth&#39;).value);
    const spanL = parseFloat(document.getElementById(&#39;spanLength&#39;).value);
    const slabT = parseFloat(document.getElementById(&#39;slabThick&#39;).value);
    
    const fckSub = document.getElementById(&#39;fckSub&#39;).value;
    const fckSuper = document.getElementById(&#39;fckSuper&#39;).value;

    let nodes = [];
    let members = [];
    let plates = [];
    let nodeMap = {};

    function addNode(x, y, z) {
        let key = `${x.toFixed(4)}_${y.toFixed(4)}_${z.toFixed(4)}`;
        if (nodeMap[key]) return nodeMap[key];
        let id = nodes.length + 1;
        nodes.push({id, x: parseFloat(x.toFixed(4)), y: parseFloat(y.toFixed(4)), z: parseFloat(z.toFixed(4))});
        nodeMap[key] = id;
        return id;
    }

    function addMember(n1, n2, type) {
        let id = members.length + 1;
        members.push({id, n1, n2, type});
        return id;
    }

    // Origin (0,0,0) is centered under the pier base cap level
    // 2. Generate Piles Setup 
    let pileBaseNodeIds = [];
    let pileTopNodeIds = [];
    
    let rows = Math.ceil(Math.sqrt(numPiles));
    let cols = Math.ceil(numPiles / rows);
    let spacing = pileD * 2.5; 

    let pCount = 0;
    for(let r=0; r&lt;rows; r++) {
        for(let c=0; c&lt;cols; c++) {
            if(pCount &gt;= numPiles) break;
            let px = (c - (cols-1)/2) * spacing;
            let pz = (r - (rows-1)/2) * spacing;
            
            let nBase = addNode(px, -pileL, pz);
            let nTop = addNode(px, 0, pz);
            pileBaseNodeIds.push(nBase);
            pileTopNodeIds.push(nTop);
            
            addMember(nBase, nTop, &#39;pile&#39;);
            pCount++;
        }
    }

    // 3. Pier Column setup (Centered)
    let nPierBase = addNode(0, 0, 0); // At top of pile cap line
    let nPierTop = addNode(0, pierH, 0);
    let pierMemId = addMember(nPierBase, nPierTop, &#39;pier&#39;);

    // 4. Pier Cap Line Setup (Spanning across Bridge Width Z direction)
    let nCapLeft = addNode(0, pierH, -brWidth/2);
    let nCapRight = addNode(0, pierH, brWidth/2);
    
    // Split pier cap to connect exactly with the pier center node line
    let pierCapMems = [];
    pierCapMems.push(addMember(nCapLeft, nPierTop, &#39;piercap&#39;));
    pierCapMems.push(addMember(nPierTop, nCapRight, &#39;piercap&#39;));

    // 5. Bearings and Longitudinal Girders Setup
    let girderStartNodeIds = [];
    let girderEndNodeIds = [];
    let bearingLinkMems = [];
    let girderMems = [];

    let girderSpacing = brWidth / (numGirders - 1 || 1);
    
    for(let g=0; g&lt;numGirders; g++) {
        let gz = -brWidth/2 + (g * girderSpacing);
        
        // Pier cap reference point node for bearing placement
        let nCapRef = addNode(0, pierH, gz);
        
        // Superstructure nodes at bearing height elevation shift
        let nGirdStart = addNode(0, pierH + 0.1, gz); 
        let nGirdEnd = addNode(spanL, pierH + 0.1, gz);
        
        girderStartNodeIds.push(nGirdStart);
        girderEndNodeIds.push(nGirdEnd);

        // Bearing structural linkage elements
        let bMem = addMember(nCapRef, nGirdStart, &#39;bearing&#39;);
        bearingLinkMems.push(bMem);

        // Longitudinal Girder line element
        let gMem = addMember(nGirdStart, nGirdEnd, &#39;girder&#39;);
        girderMems.push(gMem);
    }

    // 6. Finite Element Slab Deck Meshing Loop (Over Longitudinal Lines)
    let xDivs = 10; // Splitting span longitudinally
    let deckPlateIds = [];
    
    let prevRowNodes = [];
    // Initialize starting edge row nodes
    for(let g=0; g&lt;numGirders; g++) {
        prevRowNodes.push(girderStartNodeIds[g]);
    }

    for(let x=1; x&lt;=xDivs; x++) {
        let currX = (spanL / xDivs) * x;
        let currRowNodes = [];
        
        for(let g=0; g&lt;numGirders; g++) {
            let gz = -brWidth/2 + (g * girderSpacing);
            // If it is the last node point, map to existing girder end node point to avoid duplicate nodes
            let nId = (x === xDivs) ? girderEndNodeIds[g] : addNode(currX, pierH + 0.1, gz);
            currRowNodes.push(nId);
        }

        // Connect plates between previous node grid rows and current rows
        for(let g=0; g&lt;numGirders-1; g++) {
            let pId = plates.length + 1;
            plates.push({
                id: pId,
                n1: prevRowNodes[g],
                n2: currRowNodes[g],
                n3: currRowNodes[g+1],
                n4: prevRowNodes[g+1]
            });
            deckPlateIds.push(pId);
        }
        prevRowNodes = currRowNodes;
    }

    // 7. Write the complete .STD clean string
    let out = `STAAD SPACE\nSTART JOB INFORMATION\nENGINEER DATE 10-Jul-26\nEND JOB INFORMATION\n`;
    out += `INPUT WIDTH 79\nUNIT METER KN\n\nJOINT COORDINATES\n`;
    nodes.forEach(n =&gt; { out += `${n.id} ${n.x.toFixed(3)} ${n.y.toFixed(3)} ${n.z.toFixed(3).replace(&#39;-0&#39;,&#39;0&#39;)};\n`; });

    out += `\nMEMBER INCIDENCES\n`;
    members.forEach(m =&gt; { out += `${m.id} ${m.n1} ${m.n2};\n`; });

    out += `\nELEMENT INCIDENCES\n`;
    plates.forEach(p =&gt; { out += `${p.id} ${p.n1} ${p.n2} ${p.n3} ${p.n4};\n`; });

    out += `\nDEFINE MATERIAL START\nISOTROPIC CONCRETE\nE 3.15e+07\nPOISSON 0.2\nDEN 25\nEND DEFINE MATERIAL\n`;

    // Assign Cross Section Structural Properties
    out += `\nMEMBER PROPERTY INDIAN\n`;
    
    let pileMems = members.filter(m =&gt; m.type === &#39;pile&#39;).map(m =&gt; m.id).join(&#39; &#39;);
    out += `${pileMems} PRISMATIC YD ${pileD.toFixed(2)};\n`;

    if(pierType === &#39;circular&#39;) {
        out += `${pierMemId} PRISMATIC YD ${pierDimX.toFixed(2)};\n`;
    } else {
        out += `${pierMemId} PRISMATIC YD ${pierDimX.toFixed(2)} ZD ${pierCapWidth.toFixed(2)};\n`;
    }

    let capsMems = members.filter(m =&gt; m.type === &#39;piercap&#39;).map(m =&gt; m.id).join(&#39; &#39;);
    out += `${capsMems} PRISMATIC YD ${pierCapDepth.toFixed(2)} ZD ${pierCapWidth.toFixed(2)};\n`;

    let girdsStr = members.filter(m =&gt; m.type === &#39;girder&#39;).map(m =&gt; m.id).join(&#39; &#39;);
    out += `${girdsStr} PRISMATIC YD ${girderDepth.toFixed(2)} ZD 0.45;\n`;

    let bearMems = bearingLinkMems.join(&#39; &#39;);
    out += `${bearMems} PRISMATIC YD 0.40 ZD 0.40;\n`;

    out += `\nELEMENT PROPERTY\n`;
    out += `${deckPlateIds.join(&#39; &#39;)} THICKNESS ${slabT.toFixed(2)}\n`;

    out += `\nCONSTANTS\nMATERIAL CONCRETE ALL\n`;

    // Release conditions to turn bearing elements into functional structural bearings
    out += `\nMEMBER RELEASE\n`;
    out += `${bearMems} START MX MY MZ\n`; // Elastomeric/pinned bearing simulation parameters

    // Soil boundaries simulation - Piles fixed at base depth
    out += `\nSUPPORTS\n`;
    pileBaseNodeIds.forEach(id =&gt; { out += `${id} FIXED\n`; });

    // Primary IRC-adjacent loading blocks
    out += `\nLOAD 1 LOADTYPE DEAD TITLE DL_SELFWEIGHT\nSELFWEIGHT Y -1.0\n`;
    out += `LOAD 2 LOADTYPE DEAD TITLE DL_DECK_SIDL\n`;
    out += `ELEMENT LOAD\n${deckPlateIds.join(&#39; &#39;)} PR GY -3.5\n`; // SIDL for wearing course crash barriers

    out += `\nLOAD COMB 101 1.35DL\n1 1.35 2 1.35\n`;

    // Indian Concrete Code Design Blocks (IS 456 / IRC 112 tracking setup)
    out += `\nPERFORM ANALYSIS\n\nPARAMETER 1\nCODE INDIAN\n`;
    out += `FC ${fckSub} MEMBER ${pileMems} ${pierMemId} ${capsMems}\n`;
    out += `FC ${fckSuper} MEMBER ${girdsStr}\n`;
    out += `TRACK 1.0 ALL\n`;
    out += `DESIGN BEAM ${girdsStr}\n`;
    out += `DESIGN COLUMN ${pierMemId}\n`;
    out += `DESIGN ELEMENT ${deckPlateIds.join(&#39; &#39;)}\n`;
    out += `FINISH\n`;

    document.getElementById(&#39;staadOutput&#39;).value = out;
}

function downloadBridgeStd() {
    const text = document.getElementById(&#39;staadOutput&#39;).value;
    if(!text) { alert(&#39;Please generate the bridge file first!&#39;); return; }
    const blob = new Blob([text], { type: &#39;text/plain&#39; });
    const anchor = document.createElement(&#39;a&#39;);
    anchor.download = &quot;3D_Bridge_IRC_Framework.std&quot;;
    anchor.href = window.URL.createObjectURL(blob);
    anchor.click();
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/staad-input-generator-tool-for-bridge.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-101968800237093268</guid><pubDate>Fri, 10 Jul 2026 01:53:53 +0000</pubDate><atom:updated>2026-07-10T07:25:24.311+05:30</atom:updated><title>STAAD frame input file generator tool</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;STAAD PEB Frame Generator (Indian Standards)&lt;/title&gt;
    &lt;style&gt;
        body { font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif; margin: 20px; color: #333; background-color: #f9f9f9; }
        .container { max-width: 1300px; margin: auto; background: white; padding: 2px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }
        h2, h3 { color: #d9534f; border-bottom: 2px solid #eaeaea; padding-bottom: 8px; }
        .section { margin-bottom: 25px; padding: 1px; border: 1px solid #e1e1e1; border-radius: 6px; background-color: #fcfcfc; }
        .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
        .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 15px; }
        label { display: block; font-weight: bold; margin-bottom: 5px; font-size: 0.9em; }
        input, select { width: 100%; padding: 2px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; }
        button { background-color: #d9534f; color: white; padding: 2px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 1em; font-weight: bold; width: 100%; transition: background 0.2s; }
        button:hover { background-color: #c9302c; }
        textarea { width: 100%; height: 300px; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: 0.85em; background-color: #222; color: #a9ffaf; padding: 1px; border-radius: 5px; box-sizing: border-box; resize: vertical; }
        .help-text { font-size: 0.8em; color: #666; font-style: italic; margin-top: 2px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;h2&gt;STAAD PEB Frame Generator (IS 800:2007)&lt;/h2&gt;
    &lt;p&gt;Generates an entry-ready &lt;code&gt;.std&lt;/code&gt; file configured for Indian standard structural verification. No duplicate nodes, and automatic taper matching across split points.&lt;/p&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;1. Global Geometry&lt;/h3&gt;
        &lt;div class=&quot;grid-3&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Frame Type&lt;/label&gt;
                &lt;select id=&quot;frameType&quot; onchange=&quot;toggleFrameInputs()&quot;&gt;
                    &lt;option value=&quot;symmetric&quot;&gt;Symmetric Gable&lt;/option&gt;
                    &lt;option value=&quot;single-slope&quot;&gt;Single Slope&lt;/option&gt;
                    &lt;option value=&quot;asymmetric&quot;&gt;Asymmetric Gable&lt;/option&gt;
                    &lt;option value=&quot;multi-span&quot;&gt;Multi-Span Rigid&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Left Eave Height (H1) [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;eaveHeight1&quot; value=&quot;6.0&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Right Eave Height (H2) [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;eaveHeight2&quot; value=&quot;6.0&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;br&gt;
        &lt;div class=&quot;grid-2&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Span Widths [m] (Comma separated for multi-span)&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;spanWidths&quot; value=&quot;24.0&quot;&gt;
                &lt;div class=&quot;help-text&quot;&gt;e.g., &quot;12, 12&quot; or &quot;20&quot;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Ridge Location [m] (From Left Ext)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;ridgeLoc&quot; value=&quot;12.0&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;br&gt;
        &lt;div class=&quot;grid-2&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Apex Height (Total Height) [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;apexHeight&quot; value=&quot;8.0&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Bay Spacing [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;baySpacing&quot; value=&quot;6.0&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;2. Span Mezzanines&lt;/h3&gt;
        &lt;div class=&quot;grid-2&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Mezzanine Heights per Span [m]&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;mezzHeights&quot; value=&quot;3.5, 0&quot;&gt;
                &lt;div class=&quot;help-text&quot;&gt;Comma separated (e.g., &quot;3.5, 0&quot; means Span 1 has a mezzanine, Span 2 does not).&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;3. PEB Plate &amp; Steel Grades&lt;/h3&gt;
        &lt;div class=&quot;grid-3&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Steel Yield Strength (Fy) [MPa]&lt;/label&gt;
                &lt;select id=&quot;steelFy&quot;&gt;
                    &lt;option value=&quot;345000&quot;&gt;345 MPa (E350 / High Tensile)&lt;/option&gt;
                    &lt;option value=&quot;250000&quot;&gt;250 MPa (E250 / Mild Steel)&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Column Base Depth [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;colBaseD&quot; value=&quot;0.40&quot; step=&quot;0.05&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Column Top Depth [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;colTopD&quot; value=&quot;0.85&quot; step=&quot;0.05&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;br&gt;
        &lt;div class=&quot;grid-3&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Rafter Start Depth [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;rafStartD&quot; value=&quot;0.85&quot; step=&quot;0.05&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Rafter Apex Depth [m]&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;rafMidD&quot; value=&quot;0.45&quot; step=&quot;0.05&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Flange Width / Web Thk [m]&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;plateDims&quot; value=&quot;0.22, 0.008&quot;&gt;
                &lt;div class=&quot;help-text&quot;&gt;Width, Thickness (e.g. 0.22, 0.008)&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;button onclick=&quot;generateSTAADFile()&quot;&gt;Generate IS 800:2007 STAAD File&lt;/button&gt;
    
    &lt;br&gt;&lt;br&gt;
    
    &lt;div class=&quot;section&quot;&gt;
        &lt;h3&gt;4. Generated Output (.STD Data)&lt;/h3&gt;
        &lt;textarea id=&quot;staadOutput&quot; readonly&gt;&lt;/textarea&gt;
        &lt;br&gt;&lt;br&gt;
        &lt;button style=&quot;background-color: #28a745;&quot; onclick=&quot;downloadStdFile()&quot;&gt;Download .STD File&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
function toggleFrameInputs() {
    const type = document.getElementById(&#39;frameType&#39;).value;
    const spansInput = document.getElementById(&#39;spanWidths&#39;);
    const ridgeInput = document.getElementById(&#39;ridgeLoc&#39;);
    
    if(type === &#39;symmetric&#39;) {
        const totalW = spansInput.value.split(&#39;,&#39;).map(Number).reduce((a,b)=&gt;a+b, 0) || 24;
        ridgeInput.value = (totalW / 2).toFixed(2);
        ridgeInput.disabled = true;
    } else {
        ridgeInput.disabled = false;
    }
}

function generateSTAADFile() {
    const frameType = document.getElementById(&#39;frameType&#39;).value;
    const h1 = parseFloat(document.getElementById(&#39;eaveHeight1&#39;).value);
    let h2 = parseFloat(document.getElementById(&#39;eaveHeight2&#39;).value);
    const apexH = parseFloat(document.getElementById(&#39;apexHeight&#39;).value);
    const bay = parseFloat(document.getElementById(&#39;baySpacing&#39;).value);
    
    const spans = document.getElementById(&#39;spanWidths&#39;).value.split(&#39;,&#39;).map(Number);
    const mezzs = document.getElementById(&#39;mezzHeights&#39;).value.split(&#39;,&#39;).map(Number);
    const steelFy = document.getElementById(&#39;steelFy&#39;).value;
    
    const pDims = document.getElementById(&#39;plateDims&#39;).value.split(&#39;,&#39;).map(Number);
    const fW = pDims[0];
    const thk = pDims[1];

    let totalWidth = spans.reduce((a, b) =&gt; a + b, 0);
    let ridgeX = parseFloat(document.getElementById(&#39;ridgeLoc&#39;).value);
    if(frameType === &#39;symmetric&#39;) { ridgeX = totalWidth / 2; }
    if(frameType === &#39;single-slope&#39;) { ridgeX = totalWidth; h2 = apexH; }

    const colB = parseFloat(document.getElementById(&#39;colBaseD&#39;).value);
    const colT = parseFloat(document.getElementById(&#39;colTopD&#39;).value);
    const rafS = parseFloat(document.getElementById(&#39;rafStartD&#39;).value);
    const rafM = parseFloat(document.getElementById(&#39;rafMidD&#39;).value);

    let nodes = [];
    let members = [];
    let nodeMap = {};
    
    function addNode(x, y, z) {
        let key = `${x.toFixed(4)}_${y.toFixed(4)}_${z.toFixed(4)}`;
        if (nodeMap[key]) return nodeMap[key];
        let id = nodes.length + 1;
        nodes.push({id, x: parseFloat(x.toFixed(4)), y: parseFloat(y.toFixed(4)), z: parseFloat(z.toFixed(4))});
        nodeMap[key] = id;
        return id;
    }

    function addMember(n1, n2, type, d1, d2) {
        let id = members.length + 1;
        members.push({id, n1, n2, type, d1, d2});
        return id;
    }

    let currentX = 0;
    let columnNodeIds = [];
    
    for (let i = 0; i &lt;= spans.length; i++) {
        let colX = currentX;
        let colY_Top = h1;
        
        if (frameType === &#39;single-slope&#39;) {
            colY_Top = h1 + (h2 - h1) * (colX / totalWidth);
        } else {
            if (colX &lt;= ridgeX) {
                colY_Top = h1 + ((apexH - h1) * (colX / ridgeX));
            } else {
                colY_Top = apexH - ((apexH - h2) * ((colX - ridgeX) / (totalWidth - ridgeX)));
            }
        }

        let nBase = addNode(colX, 0.0, 0.0);
        let nTop = addNode(colX, colY_Top, 0.0);
        
        let mH = 0;
        if(i &lt; spans.length &amp;&amp; mezzs[i] &gt; 0) mH = mezzs[i];
        else if(i &gt; 0 &amp;&amp; mezzs[i-1] &gt; 0) mH = mezzs[i-1];
        
        if (mH &gt; 0 &amp;&amp; mH &lt; colY_Top) {
            let nMezzCol = addNode(colX, mH, 0.0);
            addMember(nBase, nMezzCol, &#39;column&#39;, colB, colB + (colT-colB)*(mH/colY_Top));
            addMember(nMezzCol, nTop, &#39;column&#39;, colB + (colT-colB)*(mH/colY_Top), colT);
            columnNodeIds.push({base: nBase, top: nTop, x: colX});
        } else {
            addMember(nBase, nTop, &#39;column&#39;, colB, colT);
            columnNodeIds.push({base: nBase, top: nTop, x: colX});
        }
        if (i &lt; spans.length) currentX += spans[i];
    }

    let ridgeNodeId = null;
    let internalRidgeSpanIdx = -1;
    let cumX = 0;
    for(let i=0; i&lt;spans.length; i++){
        if(ridgeX &gt; cumX &amp;&amp; ridgeX &lt; cumX + spans[i]){
            ridgeNodeId = addNode(ridgeX, apexH, 0.0);
            internalRidgeSpanIdx = i;
            break;
        }
        cumX += spans[i];
    }

    for (let i = 0; i &lt; spans.length; i++) {
        let leftCol = columnNodeIds[i];
        let rightCol = columnNodeIds[i+1];

        if (mezzs[i] &amp;&amp; mezzs[i] &gt; 0) {
            let mY = mezzs[i];
            let mNodeLeft = addNode(leftCol.x, mY, 0.0);
            let mNodeRight = addNode(rightCol.x, mY, 0.0);
            addMember(mNodeLeft, mNodeRight, &#39;mezzanine&#39;, rafM, rafM); 
        }

        if (i === internalRidgeSpanIdx &amp;&amp; ridgeNodeId !== null) {
            addMember(leftCol.top, ridgeNodeId, &#39;rafter&#39;, rafS, rafM);
            addMember(ridgeNodeId, rightCol.top, &#39;rafter&#39;, rafM, rafS);
        } else {
            let dLeft = (leftCol.x &lt; ridgeX) ? rafS : rafM;
            let dRight = (rightCol.x &lt;= ridgeX) ? rafM : rafS;
            if(frameType === &#39;single-slope&#39;) { dLeft = rafS; dRight = rafM; }
            addMember(leftCol.top, rightCol.top, &#39;rafter&#39;, dLeft, dRight);
        }
    }

    // Generate output with Indian Design configurations
    let out = `STAAD PLANE\nSTART JOB INFORMATION\nENGINEER DATE 10-Jul-26\nEND JOB INFORMATION\n`;
    out += `INPUT WIDTH 79\nUNIT METER KN\n\nJOINT COORDINATES\n`;
    nodes.forEach(n =&gt; { out += `${n.id} ${n.x.toFixed(3)} ${n.y.toFixed(3)} ${n.z.toFixed(3).replace(&#39;-0&#39;,&#39;0&#39;)};\n`; });

    out += `\nMEMBER INCIDENCES\n`;
    members.forEach(m =&gt; { out += `${m.id} ${m.n1} ${m.n2};\n`; });

    out += `\nDEFINE MATERIAL START\nISOTROPIC STEEL\nE 2e+08\nPOISSON 0.3\nDEN 78.5\nEND DEFINE MATERIAL\n\nMEMBER PROPERTY AMERICAN\n`;
    members.forEach(m =&gt; {
        if(m.type === &#39;mezzanine&#39;) {
            out += `${m.id} PRISMATIC AX 0.008 IX 0.0002 IY 0.00005 IZ 0.0002;\n`;
        } else {
            out += `${m.id} TAPERED ${m.d1.toFixed(3)} ${thk} ${m.d2.toFixed(3)} ${fW} ${thk};\n`;
        }
    });

    out += `\nCONSTANTS\nMATERIAL STEEL ALL\n\nSUPPORTS\n`;
    columnNodeIds.forEach(c =&gt; { out += `${c.base} PINNED\n`; });

    // Base Load Setup (IS 875 Framework)
    out += `\nLOAD 1 LOADTYPE DEAD TITLE DL_STRUCTURAL\nSELFWEIGHT Y -1.0\n`;
    out += `LOAD 2 LOADTYPE LIVE TITLE LL_ROOF\n`;
    let rafterMems = members.filter(m =&gt; m.type === &#39;rafter&#39;).map(m =&gt; m.id).join(&#39; &#39;);
    out += `MEMBER LOAD\n${rafterMems} UNI GY -0.75\n`; // Default standard light roof LL base

    // IS 800:2007 Limit State Combinations (Strength verification factors)
    out += `\nLOAD COMB 101 1.5(DL + LL)\n1 1.5 2 1.5\n`;
    out += `LOAD COMB 102 1.5DL + 1.0LL\n1 1.5 2 1.0\n`;

    // Indian Code Parameter Block
    out += `\nPERFORM ANALYSIS\n\nPARAMETER 1\nCODE INDIAN\n`;
    out += `FYLD ${steelFy} ALL\n`;
    out += `TRACK 1.0 ALL\n`;
    out += `BEAM 1.0 ALL\n`;
    out += `CHECK CODE ALL\n\nFINISH\n`;

    document.getElementById(&#39;staadOutput&#39;).value = out;
}

function downloadStdFile() {
    const text = document.getElementById(&#39;staadOutput&#39;).value;
    if(!text) { alert(&#39;Please generate the file first!&#39;); return; }
    const blob = new Blob([text], { type: &#39;text/plain&#39; });
    const anchor = document.createElement(&#39;a&#39;);
    anchor.download = &quot;PEB_IS800_Frame.std&quot;;
    anchor.href = window.URL.createObjectURL(blob);
    anchor.click();
}

window.onload = function() { toggleFrameInputs(); };
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/staad-frame-input-file-generator-tool.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-9185198629248770087</guid><pubDate>Fri, 10 Jul 2026 01:32:16 +0000</pubDate><atom:updated>2026-07-10T07:02:50.544+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><category domain="http://www.blogger.com/atom/ns#">Design calculations</category><category domain="http://www.blogger.com/atom/ns#">Drawings</category><title>RCC Reinforcement Detailing Checklist as per IS Codes</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;Complete 50-Point Checklist for RCC Reinforcement Detailing as per IS 456:2000, IS 13920:2016 and other Indian Standards. Essential guide for civil engineers, site supervisors and students.&quot;&gt;
    &lt;title&gt;RCC Reinforcement Detailing Checklist as per IS Codes (2026 Updated)&lt;/title&gt;
    &lt;style&gt;
        body { font-family: &#39;Segoe UI&#39;, Arial, sans-serif; line-height: 1.7; color: #333; max-width: 900px; margin: 0 auto; padding: 20px; }
        h1, h2, h3 { color: #1e3a8a; }
        table { width: 100%; border-collapse: collapse; margin: 25px 0; }
        th, td { border: 1px solid #ccc; padding: 12px; text-align: left; vertical-align: top; }
        th { background-color: #1e3a8a; color: white; }
        tr:nth-child(even) { background-color: #f8fafc; }
        .highlight { background-color: #fef3c7; padding: 2px 6px; border-radius: 3px; }
        ul { padding-left: 20px; }
        .note { background-color: #f0f9ff; border-left: 5px solid #3b82f6; padding: 15px; margin: 20px 0; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;h1&gt;Reinforcement Detailing Checklist as per Indian Standards&lt;/h1&gt;
    
    &lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; July 2026 | &lt;strong&gt;Category:&lt;/strong&gt; Civil Engineering, Structural Design, Construction Practices&lt;/p&gt;
    
    &lt;p&gt;Proper reinforcement detailing is one of the most critical aspects of RCC construction. Poor detailing can lead to structural failure, excessive cracking, or costly rework. To help engineers, site supervisors, and students, here is a comprehensive &lt;strong&gt;50-point checklist&lt;/strong&gt; compiled from key Indian Standards — primarily &lt;strong&gt;IS 456:2000&lt;/strong&gt; and &lt;strong&gt;IS 13920:2016&lt;/strong&gt;.&lt;/p&gt;

    &lt;div class=&quot;note&quot;&gt;
        &lt;strong&gt;Important:&lt;/strong&gt; This checklist is for quick reference only. Always refer to the latest versions of the relevant IS Codes and approved drawings for your project.
    &lt;/div&gt;

    &lt;h2&gt;Why Reinforcement Detailing Matters?&lt;/h2&gt;
    &lt;p&gt;Good detailing ensures:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Proper stress transfer between concrete and steel&lt;/li&gt;
        &lt;li&gt;Adequate ductility, especially in seismic zones&lt;/li&gt;
        &lt;li&gt;Durability through sufficient cover and spacing&lt;/li&gt;
        &lt;li&gt;Ease of construction and bar placement&lt;/li&gt;
        &lt;li&gt;Compliance with statutory and quality requirements&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h2&gt;Complete 50-Point Reinforcement Detailing Checklist&lt;/h2&gt;
    
    &lt;table&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th width=&quot;5%&quot;&gt;No.&lt;/th&gt;
                &lt;th width=&quot;75%&quot;&gt;Requirement&lt;/th&gt;
                &lt;th width=&quot;20%&quot;&gt;Reference&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Use only ISI marked steel reinforcement conforming to IS 1786.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.1.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Fe 415 or Fe 500 grade steel shall be used as per design requirements.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.1.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Bars shall be free from rust, loose scale, paint and other deleterious materials.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.1.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Reinforcing steel bars shall conform to IS 1786.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.1.4&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Minimum diameter of main reinforcement shall be 8 mm.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Minimum diameter of distribution reinforcement shall be 6 mm.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;Minimum diameter of stirrup shall be 6 mm.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;Select bar diameter as per structural design and detailing drawings.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.4&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;Bending of reinforcement shall be done as per IS 2502. Re-bending or straightening not permitted unless approved by the engineer.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;Bending diameter for bars shall be as per IS 2502:1963 Table 2.&lt;/td&gt;&lt;td&gt;IS 2502:1963 Table 2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;Hooks in bars shall be provided as per Table 26.2 of IS 456.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;All bends, hooks and deformations shall be tightly secured.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;Minimum clear cover shall be as per Table 16 of IS 456.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.4.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;Clear cover to main reinforcement shall not be less than specified clear cover.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.4.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;Cover blocks shall be used to maintain the specified clear cover.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.4.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;Spacing of reinforcement bars shall be as per the design and code.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.3.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;Maximum spacing of main reinforcement in slabs shall be lesser of 3d or 300 mm, whichever is less.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.3.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;Spacing of distribution reinforcement in slabs shall not exceed 5 times the slab thickness.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.3.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;Minimum vertical spacing between layers of reinforcement bars shall be greater of bar diameter, 25 mm or 1.33 times maximum size of aggregate.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.3.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;Minimum clear horizontal spacing between parallel bars shall be greater of bar diameter, 25 mm or 1.33 times maximum size of aggregate.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.3.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;Bars in tension shall be continuous or lapped with proper development length.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;Development length of bars shall be as per Cl. 26.2.1 of IS 456.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;Ld = (Ø × 0.87 fy) / (4 × τbd) (Development Length Formula)&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;Lap length in tension zone shall not be less than 50d.*&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;Lap length in compression zone shall not be less than 40d.*&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;Laps shall be staggered and not more than 50% bars lapped at one section.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;Laps shall not be provided at points of maximum stress.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;Provide extra bars at openings, corners and discontinuities.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.8&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;Provide anchorage at supports as per the design and IS 456.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;Provide 135° hooks at ends of stirrups.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.4 &amp;amp; IS 13920&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;Stirrups shall be closely spaced near supports.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;Maximum spacing of stirrups shall not exceed 0.75d or 300 mm.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;Spacing of stirrups in columns shall not exceed least lateral dimension.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;Provide crossties in columns in addition to closed stirrups.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;Provide ductile detailing as per IS 13920:2016.&lt;/td&gt;&lt;td&gt;IS 13920:2016&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;Use 135° hook in seismic zones for stirrups.&lt;/td&gt;&lt;td&gt;IS 13920:2016 Cl. 7.4.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;Provide closer spacing of reinforcement in plastic hinge regions.&lt;/td&gt;&lt;td&gt;IS 13920:2016 Cl. 7.4.6&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;Minimum longitudinal reinforcement in columns shall be 0.8% of gross area.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;Maximum longitudinal reinforcement in columns shall be 6% of gross area.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;Longitudinal bars in a column shall be held by lateral ties.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;Provide minimum 2 bars at corners of rectangular columns.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;Provide minimum 4 bars in circular columns.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.5.3.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;43&lt;/td&gt;&lt;td&gt;Bars shall be supported so that they do not displace during concrete placing.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.7.1&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;Welding of reinforcement shall only be done when permitted by the design engineer and applicable standards.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.5&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;Mechanical couplers shall conform to the approved specifications and project requirements.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.6&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;46&lt;/td&gt;&lt;td&gt;Do not cut reinforcement bars at critical sections unless unavoidable.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.7.2&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;Provide dowel bars in joints as per design.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.2.4&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;Use chairs and spacer blocks to maintain position of reinforcement.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.7.3&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;Ensure proper cover, spacing and anchorage before concreting.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.7.4&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;Inspection of reinforcement shall be done and approved before concreting.&lt;/td&gt;&lt;td&gt;IS 456:2000 Cl. 26.7.5&lt;/td&gt;&lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;h2&gt;Key Development &amp; Lap Length Notes&lt;/h2&gt;
    &lt;ul&gt;
        &lt;li&gt;Development length (Ld) depends on grade of steel, concrete and bond stress.&lt;/li&gt;
        &lt;li&gt;In tension zones, lap length is generally 50d (for M20 &amp;amp; Fe415) but must be calculated properly.&lt;/li&gt;
        &lt;li&gt;Always stagger laps and avoid laps in high stress zones.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h2&gt;Seismic (Ductile) Detailing – IS 13920:2016 Highlights&lt;/h2&gt;
    &lt;ul&gt;
        &lt;li&gt;135° hooks with 6d or 75 mm extension (whichever is more).&lt;/li&gt;
        &lt;li&gt;Closer stirrup spacing in potential plastic hinge regions.&lt;/li&gt;
        &lt;li&gt;Special confining reinforcement in columns and beam-column joints.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;note&quot;&gt;
        &lt;strong&gt;Pro Tip:&lt;/strong&gt; Always prepare a detailed Bar Bending Schedule (BBS) and get it approved before starting reinforcement work.
    &lt;/div&gt;

    &lt;h2&gt;Conclusion&lt;/h2&gt;
    &lt;p&gt;Following this checklist will significantly improve the quality, safety, and durability of your RCC structures. Bookmark this page or save the image for quick reference on site.&lt;/p&gt;
    
    &lt;hr&gt;
    &lt;p&gt;&lt;small&gt;References: IS 456:2000, IS 13920:2016, IS 2502:1963. This article is for educational and reference purposes.&lt;/small&gt;&lt;/p&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/rcc-reinforcement-detailing-checklist.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-3575555052498625808</guid><pubDate>Thu, 09 Jul 2026 06:30:41 +0000</pubDate><atom:updated>2026-07-09T12:00:41.800+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Building</category><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><category domain="http://www.blogger.com/atom/ns#">Estimate Preparation</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Testing of Sand</title><description>&lt;article style=&quot;font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; max-width: 800px; margin: 0 auto; padding: 15px;&quot;&gt;

    &lt;p&gt;In civil engineering and construction, the quality of sand (fine aggregate) plays a critical role in determining the strength and durability of concrete and mortar. Using sub-standard sand can lead to structural failures, excessive shrinkage, and weak bonding.&lt;/p&gt;
    
    &lt;p&gt;To ensure high-quality construction, engineers perform several field and laboratory tests. This comprehensive guide covers the &lt;strong&gt;top 4 essential tests for sand&lt;/strong&gt;, complete with interactive calculators to help you instantly compute your test results.&lt;/p&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #ddd; margin: 30px 0;&quot; /&gt;

    &lt;section style=&quot;margin-bottom: 40px;&quot;&gt;
        &lt;h2 style=&quot;color: #1a5276; border-left: 5px solid #1a5276; padding-left: 10px;&quot;&gt;1. Silt Content Test&lt;/h2&gt;
        &lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt; To determine the percentage of silt and clay particles present in the sand. High silt content decreases the bonding strength between cement and aggregates.&lt;/p&gt;
        
        &lt;h3&gt;Procedure:&lt;/h3&gt;
        &lt;ol&gt;
            &lt;li&gt;Take a sample of sand in a 250 ml measuring cylinder.&lt;/li&gt;
            &lt;li&gt;Add water along with a 1% salt solution (by volume) to help the silt settle faster.&lt;/li&gt;
            &lt;li&gt;Shake the mixture vigorously and allow it to stand undisturbed for approximately &lt;strong&gt;3 hours&lt;/strong&gt;.&lt;/li&gt;
            &lt;li&gt;The silt layer will settle cleanly on top of the sand layer. Measure both heights.&lt;/li&gt;
        &lt;/ol&gt;

        &lt;blockquote style=&quot;background: #f9f9f9; border-left: 5px solid #f39c12; margin: 1.5em 10px; padding: 0.5em 10px;&quot;&gt;
            &lt;strong&gt;Important Note:&lt;/strong&gt; The typical permissible limit of silt for natural sand is generally &lt;strong&gt;&amp;le; 8% by volume&lt;/strong&gt; (as per IS 383:2016).
        &lt;/blockquote&gt;

        &lt;div style=&quot;background: #f4f6f7; border: 1px solid #d5dbdb; padding: 20px; border-radius: 8px; margin-top: 20px;&quot;&gt;
            &lt;h4 style=&quot;margin-top: 0; color: #1a5276;&quot;&gt;Silt Content Calculator&lt;/h4&gt;
            &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Height of Silt Layer (H&lt;sub&gt;1&lt;/sub&gt;) in mm:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;siltH1&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 6&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Height of Sand Layer (H&lt;sub&gt;2&lt;/sub&gt;) in mm:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;siltH2&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 100&quot;&gt;
            &lt;/div&gt;
            &lt;button onclick=&quot;calculateSilt()&quot; style=&quot;background: #1a5276; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; font-weight: bold;&quot;&gt;Calculate Silt Content&lt;/button&gt;
            &lt;div id=&quot;siltResult&quot; style=&quot;margin-top: 15px; font-weight: bold; color: #27ae60;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #ddd; margin: 30px 0;&quot; /&gt;

    &lt;section style=&quot;margin-bottom: 40px;&quot;&gt;
        &lt;h2 style=&quot;color: #27ae60; border-left: 5px solid #27ae60; padding-left: 10px;&quot;&gt;2. Bulking of Sand Test&lt;/h2&gt;
        &lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt; To determine the increase in the volume of sand caused by the presence of surface moisture. When moisture forms a film around sand grains, it pushes them apart, artificially increasing the volume.&lt;/p&gt;
        
        &lt;h3&gt;Procedure:&lt;/h3&gt;
        &lt;ol&gt;
            &lt;li&gt;Fill a graduated cylinder with damp (moist) sand and note its height (H&lt;sub&gt;1&lt;/sub&gt;).&lt;/li&gt;
            &lt;li&gt;Add water to the cylinder until the sand is fully saturated.&lt;/li&gt;
            &lt;li&gt;Stir or shake to eliminate air voids and allow it to settle. Note the new saturated height (H&lt;sub&gt;2&lt;/sub&gt;).&lt;/li&gt;
        &lt;/ol&gt;

        &lt;blockquote style=&quot;background: #f9f9f9; border-left: 5px solid #f39c12; margin: 1.5em 10px; padding: 0.5em 10px;&quot;&gt;
            &lt;strong&gt;Note:&lt;/strong&gt; Bulking generally ranges from &lt;strong&gt;10% to 30%&lt;/strong&gt; depending on the moisture level and the fineness of the sand.
        &lt;/blockquote&gt;

        &lt;div style=&quot;background: #f4f6f7; border: 1px solid #d5dbdb; padding: 20px; border-radius: 8px; margin-top: 20px;&quot;&gt;
            &lt;h4 style=&quot;margin-top: 0; color: #27ae60;&quot;&gt;Bulking of Sand Calculator&lt;/h4&gt;
            &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Height of Moist Sand (H&lt;sub&gt;1&lt;/sub&gt;) in mm:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;bulkH1&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 120&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Height of Sand after Saturation (H&lt;sub&gt;2&lt;/sub&gt;) in mm:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;bulkH2&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 100&quot;&gt;
            &lt;/div&gt;
            &lt;button onclick=&quot;calculateBulking()&quot; style=&quot;background: #27ae60; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; font-weight: bold;&quot;&gt;Calculate Bulking %&lt;/button&gt;
            &lt;div id=&quot;bulkingResult&quot; style=&quot;margin-top: 15px; font-weight: bold; color: #27ae60;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #ddd; margin: 30px 0;&quot; /&gt;

    &lt;section style=&quot;margin-bottom: 40px;&quot;&gt;
        &lt;h2 style=&quot;color: #8e44ad; border-left: 5px solid #8e44ad; padding-left: 10px;&quot;&gt;3. Specific Gravity Test (Pycnometer Method)&lt;/h2&gt;
        &lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt; To determine the density (specific gravity) of the sand particles, which indicates the quality and heaviness of the material.&lt;/p&gt;
        
        &lt;h3&gt;Procedure:&lt;/h3&gt;
        &lt;ol&gt;
            &lt;li&gt;Clean, dry, and weigh the empty pycnometer with its cap (or weigh it filled only with water up to the mark as &lt;strong&gt;W&lt;sub&gt;1&lt;/sub&gt;&lt;/strong&gt;).&lt;/li&gt;
            &lt;li&gt;Add a known weight of dry sand into the pycnometer and weigh it with water up to the mark (&lt;strong&gt;W&lt;sub&gt;2&lt;/sub&gt;&lt;/strong&gt;).&lt;/li&gt;
            &lt;li&gt;Follow standard multi-step weighing protocols using the specific gravity formulation below to isolate the aggregate mass against displaced water volume.&lt;/li&gt;
        &lt;/ol&gt;

        &lt;blockquote style=&quot;background: #f9f9f9; border-left: 5px solid #f39c12; margin: 1.5em 10px; padding: 0.5em 10px;&quot;&gt;
            &lt;strong&gt;Typical Range:&lt;/strong&gt; The specific gravity for natural sand typically falls between &lt;strong&gt;2.6 and 2.7&lt;/strong&gt;.
        &lt;/blockquote&gt;

        &lt;div style=&quot;background: #f4f6f7; border: 1px solid #d5dbdb; padding: 20px; border-radius: 8px; margin-top: 20px;&quot;&gt;
            &lt;h4 style=&quot;margin-top: 0; color: #8e44ad;&quot;&gt;Specific Gravity Calculator&lt;/h4&gt;
            &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Weight of Pycnometer + Water (W&lt;sub&gt;1&lt;/sub&gt;) in grams:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;sgW1&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 1500&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Weight of Pycnometer + Water + Oven Dry Sand (W&lt;sub&gt;2&lt;/sub&gt;) in grams:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;sgW2&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 1815&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Weight of Pycnometer + Water + Sand up to mark (W&lt;sub&gt;3&lt;/sub&gt;) in grams:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;sgW3&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 1695&quot;&gt;
            &lt;/div&gt;
            &lt;button onclick=&quot;calculateSG()&quot; style=&quot;background: #8e44ad; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; font-weight: bold;&quot;&gt;Calculate Specific Gravity&lt;/button&gt;
            &lt;div id=&quot;sgResult&quot; style=&quot;margin-top: 15px; font-weight: bold; color: #27ae60;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #ddd; margin: 30px 0;&quot; /&gt;

    &lt;section style=&quot;margin-bottom: 40px;&quot;&gt;
        &lt;h2 style=&quot;color: #e67e22; border-left: 5px solid #e67e22; padding-left: 10px;&quot;&gt;4. Water Absorption Test&lt;/h2&gt;
        &lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt; To find out the percentage of water absorbed by the sand. Highly porous sand absorbs more water, which can alter the water-cement ratio of a concrete mix.&lt;/p&gt;
        
        &lt;h3&gt;Procedure:&lt;/h3&gt;
        &lt;ol&gt;
            &lt;li&gt;Take a sample of sand and dry it completely in an oven at 105 &amp;plusmn; 5&amp;deg;C until it reaches a constant weight. Record this as Oven Dry Weight (&lt;strong&gt;W&lt;sub&gt;1&lt;/sub&gt;&lt;/strong&gt;).&lt;/li&gt;
            &lt;li&gt;Soak a sample in water for 24 hours to achieve a fully saturated state.&lt;/li&gt;
            &lt;li&gt;Drain the water and bring the sample to a Saturated Surface Dry (SSD) state using a damp cloth. Record this weight as &lt;strong&gt;W&lt;sub&gt;2&lt;/sub&gt;&lt;/strong&gt;.&lt;/li&gt;
        &lt;/ol&gt;

        &lt;div style=&quot;background: #f4f6f7; border: 1px solid #d5dbdb; padding: 20px; border-radius: 8px; margin-top: 20px;&quot;&gt;
            &lt;h4 style=&quot;margin-top: 0; color: #e67e22;&quot;&gt;Water Absorption Calculator&lt;/h4&gt;
            &lt;div style=&quot;margin-bottom: 10px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Oven Dry Weight (W&lt;sub&gt;1&lt;/sub&gt;) in grams:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;waW1&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 500&quot;&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
                &lt;label style=&quot;display:block; margin-bottom:5px;&quot;&gt;Saturated Surface Dry Weight (W&lt;sub&gt;2&lt;/sub&gt;) in grams:&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;waW2&quot; style=&quot;width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;&quot; placeholder=&quot;e.g., 508&quot;&gt;
            &lt;/div&gt;
            &lt;button onclick=&quot;calculateWA()&quot; style=&quot;background: #e67e22; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; font-weight: bold;&quot;&gt;Calculate Water Absorption %&lt;/button&gt;
            &lt;div id=&quot;waResult&quot; style=&quot;margin-top: 15px; font-weight: bold; color: #27ae60;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;script&gt;
        function calculateSilt() {
            let h1 = parseFloat(document.getElementById(&#39;siltH1&#39;).value);
            let h2 = parseFloat(document.getElementById(&#39;siltH2&#39;).value);
            if(isNaN(h1) || isNaN(h2) || h2 === 0) {
                document.getElementById(&#39;siltResult&#39;).innerText = &quot;Please enter valid measurements.&quot;;
                return;
            }
            let result = (h1 / h2) * 100;
            document.getElementById(&#39;siltResult&#39;).innerText = &quot;Silt Content = &quot; + result.toFixed(2) + &quot;% &quot; + (result &gt; 8 ? &quot;(Exceeds recommended 8% limit)&quot; : &quot;(Within acceptable limits)&quot;);
        }

        function calculateBulking() {
            let h1 = parseFloat(document.getElementById(&#39;bulkH1&#39;).value);
            let h2 = parseFloat(document.getElementById(&#39;bulkH2&#39;).value);
            if(isNaN(h1) || isNaN(h2) || h2 === 0) {
                document.getElementById(&#39;bulkingResult&#39;).innerText = &quot;Please enter valid measurements.&quot;;
                return;
            }
            let result = ((h1 - h2) / h2) * 100;
            document.getElementById(&#39;bulkingResult&#39;).innerText = &quot;Bulking percentage = &quot; + result.toFixed(2) + &quot;%&quot;;
        }

        function calculateSG() {
            let w1 = parseFloat(document.getElementById(&#39;sgW1&#39;).value);
            let w2 = parseFloat(document.getElementById(&#39;sgW2&#39;).value);
            let w3 = parseFloat(document.getElementById(&#39;sgW3&#39;).value);
            if(isNaN(w1) || isNaN(w2) || isNaN(w3)) {
                document.getElementById(&#39;sgResult&#39;).innerText = &quot;Please enter valid weight values.&quot;;
                return;
            }
            let numerator = (w2 - w1);
            let denominator = (w2 - w1) - (w3 - w1);
            if (denominator === 0) {
                document.getElementById(&#39;sgResult&#39;).innerText = &quot;Invalid inputs causing division by zero.&quot;;
                return;
            }
            let result = numerator / denominator;
            document.getElementById(&#39;sgResult&#39;).innerText = &quot;Specific Gravity (G) = &quot; + result.toFixed(2);
        }

        function calculateWA() {
            let w1 = parseFloat(document.getElementById(&#39;waW1&#39;).value);
            let w2 = parseFloat(document.getElementById(&#39;waW2&#39;).value);
            if(isNaN(w1) || isNaN(w2) || w1 === 0) {
                document.getElementById(&#39;waResult&#39;).innerText = &quot;Please enter valid weight values.&quot;;
                return;
            }
            let result = ((w2 - w1) / w1) * 100;
            document.getElementById(&#39;waResult&#39;).innerText = &quot;Water Absorption = &quot; + result.toFixed(2) + &quot;%&quot;;
        }
    &lt;/script&gt;
&lt;/article&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/testing-of-sand.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-41306259701348704</guid><pubDate>Wed, 08 Jul 2026 14:59:36 +0000</pubDate><atom:updated>2026-07-08T20:34:38.637+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Design calculations</category><category domain="http://www.blogger.com/atom/ns#">Drawings</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Structural Analysis</category><title>R-Factor in Seismic Design</title><description>&lt;article&gt;
    &lt;header&gt;
        &lt;h1 style=&quot;color: #1a365d; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; border-bottom: 2px solid #3182ce; padding-bottom: 10px;&quot;&gt;
            Why the Code &quot;Rewards&quot; Ductility: Mastering the R-Factor in Seismic Design (IS 1893 vs. IS 13920)
        &lt;/h1&gt;
        &lt;p style=&quot;font-style: italic; color: #4a5568; font-size: 1.1em; margin-top: 5px;&quot;&gt;
            Just for information only, an expert advice shall be taken case by case.
        &lt;/p&gt;
    &lt;/header&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e2e8f0; margin: 20px 0;&quot; /&gt;

    &lt;section&gt;
        &lt;p&gt;
            As structural engineers, we often look at seismic design codes as a rigid set of rules. But if you look closer, building codes are actually giving you a massive design discount—&lt;strong&gt;if you know how to earn it&lt;/strong&gt;. 
        &lt;/p&gt;
        &lt;p&gt;
            Modern seismic codes (like India&#39;s &lt;strong&gt;IS 1893 (Part 1): 2016&lt;/strong&gt;) don’t scale down lateral forces because a building is inherently &quot;safe enough.&quot; They do it because they expect the structure to &lt;strong&gt;deform inelastically, dissipate seismic energy, and avoid catastrophic, brittle failure&lt;/strong&gt; through meticulous ductile detailing. 
        &lt;/p&gt;
        &lt;p&gt;
            The core philosophy is remarkably simple: 
            &lt;code style=&quot;background-color: #edf2f7; padding: 2px 6px; border-radius: 4px; font-weight: bold; color: #2b6cb0;&quot;&gt;
                More Confinement &amp;rarr; High Ductility &amp;rarr; Higher R-Value &amp;rarr; Lower Design Seismic Forces
            &lt;/code&gt;
        &lt;/p&gt;
    &lt;/section&gt;

    &lt;h2 style=&quot;color: #2c5282; margin-top: 30px;&quot;&gt;The Engineering Math: Design Base Shear vs. Elastic Demand&lt;/h2&gt;
    &lt;section&gt;
        &lt;p&gt;
            If we designed a structure to remain completely elastic during a severe earthquake, the building components would become impossibly massive, expensive, and impractical. Instead, codes allow us to divide the theoretical elastic base shear force by a &lt;strong&gt;Response Reduction Factor ($R$)&lt;/strong&gt;.
        &lt;/p&gt;
        
        &lt;div style=&quot;background-color: #f7fafc; border-left: 4px solid #3182ce; padding: 15px; margin: 20px 0; font-family: monospace; font-size: 1.2em; text-align: center;&quot;&gt;
            $$V_{design} = \frac{V_{elastic}}{R}$$
        &lt;/div&gt;

        &lt;p&gt;
            The value of $R$ directly depends on the seismic force-resisting system you choose and its level of detailing. A higher $R$ value directly drops your design lateral loads.
        &lt;/p&gt;
    &lt;/section&gt;

    &lt;h2 style=&quot;color: #2c5282; margin-top: 30px;&quot;&gt;Indian Code Equivalents: OMRF vs. SMRF&lt;/h2&gt;
    &lt;section&gt;
        &lt;p&gt;
            Just as international codes (ASCE 7) differentiate between Ordinary, Intermediate, and Special Moment Frames, the Indian Standard &lt;strong&gt;IS 1893 (Part 1): 2016 (Table 9)&lt;/strong&gt; rewards structural ductilty similarly:
        &lt;/p&gt;

        &lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 20px 0; font-family: Arial, sans-serif;&quot;&gt;
            &lt;thead&gt;
                &lt;tr style=&quot;background-color: #2b6cb0; color: white; text-align: left;&quot;&gt;
                    &lt;th style=&quot;padding: 12px; border: 1px solid #cbd5e0;&quot;&gt;Frame Type&lt;/th&gt;
                    &lt;th style=&quot;padding: 12px; border: 1px solid #cbd5e0;&quot;&gt;R-Factor (IS 1893)&lt;/th&gt;
                    &lt;th style=&quot;padding: 12px; border: 1px solid #cbd5e0;&quot;&gt;Force Reduction&lt;/th&gt;
                    &lt;th style=&quot;padding: 12px; border: 1px solid #cbd5e0;&quot;&gt;Detailing Standard&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr style=&quot;background-color: #f7fafc;&quot;&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0; font-weight: bold;&quot;&gt;Ordinary Moment Resisting Frame (OMRF)&lt;/td&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0; text-align: center;&quot;&gt;&lt;strong&gt;3.0&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0; color: #718096;&quot;&gt;Baseline forces&lt;/td&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0;&quot;&gt;IS 456 (Normal RC detailing)&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr style=&quot;background-color: #ffffff;&quot;&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0; font-weight: bold; color: #2b6cb0;&quot;&gt;Special Moment Resisting Frame (SMRF)&lt;/td&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0; text-align: center; color: #2b6cb0;&quot;&gt;&lt;strong&gt;5.0&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0; font-weight: bold; color: #2f855a;&quot;&gt;~40% Load Reduction&lt;/td&gt;
                    &lt;td style=&quot;padding: 12px; border: 1px solid #cbd5e0; font-weight: bold;&quot;&gt;IS 13920: 2016 (Ductile detailing)&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
            By opting for an &lt;strong&gt;SMRF&lt;/strong&gt; instead of an OMRF, the code allows you to reduce your structural design seismic forces by &lt;strong&gt;40%&lt;/strong&gt;. However, this &quot;discount&quot; comes with a strict contractual obligation: you must enforce stringent detailing requirements on site.
        &lt;/p&gt;
    &lt;/section&gt;

    &lt;h2 style=&quot;color: #2c5282; margin-top: 30px;&quot;&gt;How Confinement Changes the Game (IS 13920 Requirements)&lt;/h2&gt;
    &lt;section&gt;
        &lt;p&gt;
            What does an $R = 5.0$ demand on the blueprint? It requires changing the failure mode from brittle concrete crushing to ductile steel yielding. This is achieved by confining the concrete core using closely spaced links (ties/stirrups).
        &lt;/p&gt;
        
        &lt;p&gt;According to &lt;strong&gt;IS 13920: 2016&lt;/strong&gt;, as we transition into ductile zones (such as plastic hinge regions at beam-column junctions), the detailing requirements become incredibly demanding:&lt;/p&gt;

        &lt;ul style=&quot;line-height: 1.6; color: #2d3748;&quot;&gt;
            &lt;li&gt;&lt;strong&gt;Tighter Confinement:&lt;/strong&gt; Closely spaced links prevent the longitudinal reinforcement bars from buckling prematurely under cyclic axial compression.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Closer Tie Spacing ($s_v$):&lt;/strong&gt; In the plastic hinge zone ($l_o$) of a column, the spacing of links is restricted to the minimum of $1/4$ of the minimum column dimension, 6 times the diameter of the smallest longitudinal bar, or $100\text{ mm}$ (Clause 8.1).&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Stronger Anchorage:&lt;/strong&gt; Beam longitudinal bars entering an external joint must be anchored with a $90^\circ$ bend plus an extension length of at least $8$ times the bar diameter, keeping the hook safely embedded in the confined column core.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Controlled Splices:&lt;/strong&gt; Lap splices are strictly prohibited within the joint core or within a distance of $2d$ from the face of the beam or column connection where plastic hinges are expected to form.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e2e8f0; margin: 30px 0;&quot; /&gt;

    &lt;section style=&quot;background-color: #ebf8ff; padding: 20px; border-radius: 8px; border: 1px solid #bee3f8;&quot;&gt;
        &lt;h3 style=&quot;color: #2b6cb0; margin-top: 0;&quot;&gt;Takeaway&lt;/h3&gt;
        &lt;p style=&quot;margin-bottom: 0;&quot;&gt;
            Next time you select your Response Reduction Factor ($R$) in your structural analysis software, remember that it is not just a numerical setting. An $R$-value is a direct reflection of the physical confinement you provide on-site. If your site drawings do not rigorously enforce the dense, intricate tie spacings specified by &lt;strong&gt;IS 13920&lt;/strong&gt;, your structure will not possess the ductility assumed in your calculations—putting it at risk during a design-level seismic event. Design responsibly!
        &lt;/p&gt;
    &lt;/section&gt;
&lt;/article&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/r-factor-in-seismic-design.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-7104515336099915086</guid><pubDate>Tue, 07 Jul 2026 05:39:14 +0000</pubDate><atom:updated>2026-07-07T11:15:13.783+05:30</atom:updated><title>Steel Structures Design checks calculator tool</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Steel Structures Design Toolkit (Offline)&lt;/title&gt;
    &lt;style&gt;
        /* Modern Dark Theme - CSS Core */
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #111827;
            color: #f3f4f6;
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif;
            padding: 24px;
            line-height: 1.5;
        }
        .container {
            max-width: 1000px;
            margin: 0 auto;
        }
        header {
            text-align: center;
            border-bottom: 1px solid #374151;
            padding-bottom: 16px;
            margin-bottom: 32px;
        }
        h1 {
            color: #60a5fa;
            font-size: 1.8rem;
            letter-spacing: 0.05em;
        }
        p.subtitle {
            color: #9ca3af;
            font-size: 0.875rem;
            margin-top: 4px;
        }
        
        /* Grid Layout */
        .grid {
            display: grid;
            grid-template-columns: 1fr;
            gap: 24px;
        }
        @media (min-width: 768px) {
            .grid {
                grid-template-columns: 1fr 1fr;
            }
            .col-span-2 {
                grid-column: span 2;
            }
            .triple-grid {
                display: grid;
                grid-template-columns: 1fr 1fr 1fr;
                gap: 16px;
            }
        }

        /* Card Styles */
        .card {
            background-color: #1f2937;
            border: 1px solid #374151;
            border-radius: 12px;
            padding: 24px;
            box-shadow: 0 4px 6px -1px rgba(0,0,0,0.3);
        }
        .card h2 {
            font-size: 1.25rem;
            margin-bottom: 16px;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .text-blue { color: #60a5fa; }
        .text-emerald { color: #34d399; }
        .text-purple { color: #c084fc; }

        /* Form Controls */
        .form-group {
            margin-bottom: 16px;
        }
        .grid-2-col {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 8px;
        }
        label {
            display: block;
            font-size: 0.75rem;
            text-transform: uppercase;
            letter-spacing: 0.05em;
            color: #9ca3af;
            margin-bottom: 4px;
            font-weight: 500;
        }
        input {
            width: 100%;
            background-color: #374151;
            border: 1px solid #4b5563;
            color: #ffffff;
            border-radius: 6px;
            padding: 8px 12px;
            font-size: 1rem;
            outline: none;
        }
        input:focus {
            border-color: #60a5fa;
        }

        /* Buttons */
        button {
            width: 100%;
            color: white;
            font-weight: 500;
            padding: 10px;
            border: none;
            border-radius: 6px;
            cursor: pointer;
            font-size: 1rem;
            transition: background 0.2s;
            margin-top: 8px;
        }
        .btn-blue { background-color: #2563eb; }
        .btn-blue:hover { background-color: #1d4ed8; }
        .btn-emerald { background-color: #059669; }
        .btn-emerald:hover { background-color: #047857; }
        .btn-purple { background-color: #9333ea; }
        .btn-purple:hover { background-color: #7e22ce; }

        /* Results Display */
        .result-box {
            margin-top: 16px;
            padding: 12px;
            background-color: #111827;
            border-radius: 6px;
        }
        .border-blue { border-left: 4px solid #2563eb; }
        .border-emerald { border-left: 4px solid #059669; }
        
        .result-title {
            font-size: 0.75rem;
            text-transform: uppercase;
            color: #9ca3af;
            display: block;
        }
        .result-value {
            font-size: 1.5rem;
            font-weight: bold;
            margin-top: 4px;
        }
        
        /* Connection Specific Outputs */
        .conn-outputs {
            margin-top: 24px;
            border-top: 1px solid #374151;
            padding-top: 16px;
            display: grid;
            grid-template-columns: 1fr;
            gap: 16px;
        }
        @media (min-width: 640px) {
            .conn-outputs { grid-template-columns: 1fr 1fr 1fr; }
        }
        .box-highlight {
            border: 2px solid #a855f7;
            background-color: rgba(147, 51, 234, 0.1);
        }
        .text-purple-light { color: #d8b4fe; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;div class=&quot;container&quot;&gt;
        &lt;header&gt;
            &lt;h1&gt;Steel Structures Design Toolkit&lt;/h1&gt;
            &lt;p class=&quot;subtitle&quot;&gt;Offline Mode • Based on IS 800:2007 (Limit State Design)&lt;/p&gt;
        &lt;/header&gt;

        &lt;div class=&quot;grid&quot;&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;h2 class=&quot;text-blue&quot;&gt;&lt;span&gt;1.&lt;/span&gt; Tension Member Capacity&lt;/h2&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Gross Area, A&lt;sub&gt;g&lt;/sub&gt; (mm²)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;tension-ag&quot; value=&quot;1200&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Yield Strength, f&lt;sub&gt;y&lt;/sub&gt; (MPa)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;tension-fy&quot; value=&quot;250&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Partial Safety Factor, γ&lt;sub&gt;m0&lt;/sub&gt;&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;tension-gam&quot; value=&quot;1.10&quot; step=&quot;0.01&quot;&gt;
                &lt;/div&gt;
                &lt;button onclick=&quot;calculateTension()&quot; class=&quot;btn-blue&quot;&gt;Calculate Capacity&lt;/button&gt;
                
                &lt;div class=&quot;result-box border-blue&quot;&gt;
                    &lt;span class=&quot;result-title&quot;&gt;Design Strength, T&lt;sub&gt;d&lt;/sub&gt;&lt;/span&gt;
                    &lt;div id=&quot;tension-result&quot; class=&quot;result-value&quot;&gt;272.73 kN&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;h2 class=&quot;text-emerald&quot;&gt;&lt;span&gt;2.&lt;/span&gt; Compression &amp; Slenderness&lt;/h2&gt;
                &lt;div class=&quot;form-group grid-2-col&quot;&gt;
                    &lt;div&gt;
                        &lt;label&gt;Eff. Length, L&lt;sub&gt;e&lt;/sub&gt; (mm)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;comp-le&quot; value=&quot;3000&quot;&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;label&gt;Rad. of Gyration, r (mm)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;comp-r&quot; value=&quot;25&quot;&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Young&#39;s Modulus, E (GPa)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;comp-e&quot; value=&quot;200&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Moment of Inertia, I (×10⁴ mm⁴)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;comp-i&quot; value=&quot;75&quot;&gt;
                &lt;/div&gt;
                &lt;button onclick=&quot;calculateCompression()&quot; class=&quot;btn-emerald&quot;&gt;Calculate Buckling&lt;/button&gt;
                
                &lt;div class=&quot;result-box border-emerald grid-2-col&quot; style=&quot;padding: 12px;&quot;&gt;
                    &lt;div&gt;
                        &lt;span class=&quot;result-title&quot;&gt;Slenderness, λ&lt;/span&gt;
                        &lt;div id=&quot;comp-lambda-res&quot; class=&quot;result-value&quot; style=&quot;font-size: 1.25rem;&quot;&gt;120.00&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;span class=&quot;result-title&quot;&gt;Euler Load, P&lt;sub&gt;cr&lt;/sub&gt;&lt;/span&gt;
                        &lt;div id=&quot;comp-pcr-res&quot; class=&quot;result-value&quot; style=&quot;font-size: 1.25rem;&quot;&gt;164.49 kN&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card col-span-2&quot;&gt;
                &lt;h2 class=&quot;text-purple&quot;&gt;&lt;span&gt;3.&lt;/span&gt; Bolt Connection Strength (Shear &amp; Bearing)&lt;/h2&gt;
                &lt;div class=&quot;triple-grid&quot;&gt;
                    &lt;div&gt;
                        &lt;div class=&quot;form-group&quot;&gt;
                            &lt;label&gt;Bolt Ultimate Strength, f&lt;sub&gt;ub&lt;/sub&gt; (MPa)&lt;/label&gt;
                            &lt;input type=&quot;number&quot; id=&quot;bolt-fub&quot; value=&quot;400&quot;&gt;
                        &lt;/div&gt;
                        &lt;div class=&quot;form-group&quot;&gt;
                            &lt;label&gt;Net Area of Bolt, A&lt;sub&gt;b&lt;/sub&gt; (mm²)&lt;/label&gt;
                            &lt;input type=&quot;number&quot; id=&quot;bolt-ab&quot; value=&quot;245&quot;&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;div class=&quot;form-group&quot;&gt;
                            &lt;label&gt;Plate Ultimate Strength, f&lt;sub&gt;u&lt;/sub&gt; (MPa)&lt;/label&gt;
                            &lt;input type=&quot;number&quot; id=&quot;bolt-fu&quot; value=&quot;410&quot;&gt;
                        &lt;/div&gt;
                        &lt;div class=&quot;form-group grid-2-col&quot;&gt;
                            &lt;div&gt;
                                &lt;label&gt;Dia, d (mm)&lt;/label&gt;
                                &lt;input type=&quot;number&quot; id=&quot;bolt-d&quot; value=&quot;20&quot;&gt;
                            &lt;/div&gt;
                            &lt;div&gt;
                                &lt;label&gt;Plate t (mm)&lt;/label&gt;
                                &lt;input type=&quot;number&quot; id=&quot;bolt-t&quot; value=&quot;12&quot;&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div style=&quot;display: flex; flex-direction: column; justify-content: space-between;&quot;&gt;
                        &lt;div class=&quot;form-group&quot;&gt;
                            &lt;label&gt;Bearing Factor, k&lt;sub&gt;b&lt;/sub&gt;&lt;/label&gt;
                            &lt;input type=&quot;number&quot; id=&quot;bolt-kb&quot; value=&quot;0.5&quot; step=&quot;0.05&quot;&gt;
                        &lt;/div&gt;
                        &lt;button onclick=&quot;calculateBolt()&quot; class=&quot;btn-purple&quot;&gt;Evaluate Connection&lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;conn-outputs&quot;&gt;
                    &lt;div class=&quot;result-box&quot; style=&quot;border: 1px solid #374151;&quot;&gt;
                        &lt;span class=&quot;result-title&quot;&gt;Bolt Shear, V&lt;sub&gt;dsb&lt;/sub&gt;&lt;/span&gt;
                        &lt;div id=&quot;bolt-vdsb&quot; class=&quot;result-value&quot; style=&quot;font-size: 1.25rem;&quot;&gt;45.26 kN&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;result-box&quot; style=&quot;border: 1px solid #374151;&quot;&gt;
                        &lt;span class=&quot;result-title&quot;&gt;Bolt Bearing, V&lt;sub&gt;dpb&lt;/sub&gt;&lt;/span&gt;
                        &lt;div id=&quot;bolt-vdpb&quot; class=&quot;result-value&quot; style=&quot;font-size: 1.25rem; color: #fbbf24;&quot;&gt;78.72 kN&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;result-box box-highlight&quot;&gt;
                        &lt;span class=&quot;result-title&quot; style=&quot;color: #c084fc; font-weight: bold;&quot;&gt;Governing Value&lt;/span&gt;
                        &lt;div id=&quot;bolt-governing&quot; class=&quot;result-value&quot; style=&quot;font-size: 1.4rem; color: #e9d5ff;&quot;&gt;45.26 kN&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        function calculateTension() {
            const ag = parseFloat(document.getElementById(&#39;tension-ag&#39;).value) || 0;
            const fy = parseFloat(document.getElementById(&#39;tension-fy&#39;).value) || 0;
            const gam = parseFloat(document.getElementById(&#39;tension-gam&#39;).value) || 1.1;

            const td = (ag * fy) / gam / 1000;
            document.getElementById(&#39;tension-result&#39;).innerText = td.toFixed(2) + &#39; kN&#39;;
        }

        function calculateCompression() {
            const le = parseFloat(document.getElementById(&#39;comp-le&#39;).value) || 0;
            const r = parseFloat(document.getElementById(&#39;comp-r&#39;).value) || 1;
            const eGPa = parseFloat(document.getElementById(&#39;comp-e&#39;).value) || 200;
            const iSc = parseFloat(document.getElementById(&#39;comp-i&#39;).value) || 0;

            const lambda = le / r;
            const E_MPa = eGPa * 1000;
            const I_mm4 = iSc * 10000; 

            const pcr = (Math.PI * Math.PI * E_MPa * I_mm4) / (le * le) / 1000; 

            document.getElementById(&#39;comp-lambda-res&#39;).innerText = lambda.toFixed(2);
            document.getElementById(&#39;comp-pcr-res&#39;).innerText = pcr.toFixed(2) + &#39; kN&#39;;
        }

        function calculateBolt() {
            const fub = parseFloat(document.getElementById(&#39;bolt-fub&#39;).value) || 0;
            const ab = parseFloat(document.getElementById(&#39;bolt-ab&#39;).value) || 0;
            const fu = parseFloat(document.getElementById(&#39;bolt-fu&#39;).value) || 0;
            const d = parseFloat(document.getElementById(&#39;bolt-d&#39;).value) || 0;
            const t = parseFloat(document.getElementById(&#39;bolt-t&#39;).value) || 0;
            const kb = parseFloat(document.getElementById(&#39;bolt-kb&#39;).value) || 0;
            const gam = 1.25; 

            const vdsb = (fub * ab) / (Math.sqrt(3) * gam) / 1000;
            const vdpb = (2.5 * kb * d * t * fu) / gam / 1000;
            const governing = Math.min(vdsb, vdpb);

            document.getElementById(&#39;bolt-vdsb&#39;).innerText = vdsb.toFixed(2) + &#39; kN&#39;;
            document.getElementById(&#39;bolt-vdpb&#39;).innerText = vdpb.toFixed(2) + &#39; kN&#39;;
            document.getElementById(&#39;bolt-governing&#39;).innerText = governing.toFixed(2) + &#39; kN&#39;;
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/07/steel-structures-design-checks.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-3410337850703798666</guid><pubDate>Fri, 26 Jun 2026 10:36:25 +0000</pubDate><atom:updated>2026-07-04T08:44:46.252+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software</category><title>complex to simple KML</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;AutoCAD KML Element Extractor&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
            margin: 30px;
            background-color: #f8f9fa;
            color: #333;
        }
        .container {
            max-width: 750px;
            margin: 0 auto;
            background: white;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 4px 20px rgba(0,0,0,0.08);
        }
        h2 { color: #2c3e50; margin-top: 0; border-bottom: 2px solid #ecf0f1; padding-bottom: 10px; }
        p { color: #7f8c8d; font-size: 0.95em; line-height: 1.5; }
        .drop-zone {
            margin: 25px 0;
            padding: 30px;
            border: 3px dashed #3498db;
            border-radius: 6px;
            background: #eaf2f8;
            text-align: center;
            cursor: pointer;
            transition: background 0.3s;
        }
        .drop-zone:hover, .drop-zone.dragover { background: #d4e6f1; }
        .btn {
            display: inline-block;
            background-color: #2ecc71;
            color: white;
            padding: 12px 24px;
            border: none;
            border-radius: 4px;
            font-weight: bold;
            font-size: 1em;
            cursor: pointer;
            text-decoration: none;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }
        .btn:hover { background-color: #27ae60; }
        .btn:disabled { background-color: #bdc3c7; cursor: not-allowed; box-shadow: none; }
        .status-box {
            margin: 20px 0;
            padding: 15px;
            border-radius: 4px;
            display: none;
            font-weight: 500;
        }
        .info { background-color: #e8f4fd; color: #2980b9; border-left: 5px solid #2980b9; }
        .success { background-color: #e8f8f5; color: #27ae60; border-left: 5px solid #27ae60; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;h2&gt;AutoCAD All Geometry Extractor (Lines &amp; Polygons)&lt;/h2&gt;
    &lt;p&gt;Extracts all linear assets, right-of-way lines, site boundaries, and closed polygons out of messy AutoCAD KML layers and converts them into cleanly structured, GIS-ready entities.&lt;/p&gt;
    
    &lt;div class=&quot;drop-zone&quot; id=&quot;dropZone&quot; onclick=&quot;document.getElementById(&#39;fileInput&#39;).click()&quot;&gt;
        &lt;strong&gt;Click to select or drag your complex CAD KML here&lt;/strong&gt;
        &lt;input type=&quot;file&quot; id=&quot;fileInput&quot; accept=&quot;.kml&quot; style=&quot;display: none;&quot; /&gt;
    &lt;/div&gt;

    &lt;div id=&quot;status&quot; class=&quot;status-box info&quot;&gt;&lt;/div&gt;
    
    &lt;div style=&quot;text-align: center; margin-top: 25px;&quot;&gt;
        &lt;button id=&quot;downloadBtn&quot; class=&quot;btn&quot; disabled&gt;Download Flattened KML&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;
  
  &lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif; color: #333; line-height: 1.6; max-width: 800px; margin: 0 auto; padding: 20px;&quot;&gt;
    
    &lt;h1 style=&quot;color: #1a73e8; border-bottom: 2px solid #e8f0fe; padding-bottom: 10px;&quot;&gt;User Guide: KML Geometry Extractor &amp;amp; Flattener&lt;/h1&gt;
    
    &lt;p style=&quot;font-size: 16px; color: #5f6368;&quot;&gt;
        Welcome to the user manual for the &lt;strong&gt;KML Geometry Extractor Tool&lt;/strong&gt;. This lightweight, browser-based tool allows you to isolate, clean, and flatten spatial geometry vectors directly from any standard &lt;code&gt;.kml&lt;/code&gt; file. 
    &lt;/p&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e0e0e0; margin: 25px 0;&quot; /&gt;

    &lt;h2 style=&quot;color: #202124; font-size: 20px;&quot;&gt;What This Tool Does&lt;/h2&gt;
    &lt;p&gt;Complex KML files generated from GIS software or Google Earth often contain deeply nested folders, complex metadata tables, and erratic styling. This tool scripts away that clutter by:&lt;/p&gt;
    &lt;ul style=&quot;padding-left: 20px; color: #3c4043;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Extracting Geometries:&lt;/strong&gt; Automatically scans files to pull out all &lt;code&gt;LineString&lt;/code&gt; (paths) and &lt;code&gt;Polygon&lt;/code&gt; elements.&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Data Cleaning:&lt;/strong&gt; Scrubs out whitespaces and faulty formatting to standardize coordinates.&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Flattening Hierarchies:&lt;/strong&gt; Strips down multi-nested structures into a fast-loading, simplified KML tree.&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Applying Clean Styles:&lt;/strong&gt; Assigns visible red styles to lines and semi-transparent green styles to polygons automatically.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e0e0e0; margin: 25px 0;&quot; /&gt;

    &lt;h2 style=&quot;color: #202124; font-size: 20px;&quot;&gt;How to Use the Tool&lt;/h2&gt;
    
    &lt;div style=&quot;background-color: #f8f9fa; border-left: 4px solid #1a73e8; padding: 15px; margin-bottom: 20px; border-radius: 4px;&quot;&gt;
        &lt;p style=&quot;margin: 0; font-weight: bold; color: #1a73e8;&quot;&gt;Step 1: Upload Your KML File&lt;/p&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; color: #5f6368;&quot;&gt;You can click the &lt;strong&gt;Choose File / Browse&lt;/strong&gt; input button to select your file, or simply drag and drop your target &lt;code&gt;.kml&lt;/code&gt; file directly into the designated drop zone area on your screen.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background-color: #f8f9fa; border-left: 4px solid #1a73e8; padding: 15px; margin-bottom: 20px; border-radius: 4px;&quot;&gt;
        &lt;p style=&quot;margin: 0; font-weight: bold; color: #1a73e8;&quot;&gt;Step 2: Monitor Real-Time Status&lt;/p&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; color: #5f6368;&quot;&gt;Watch the status display box. The script processes calculations instantly in your browser cache. Upon completion, it will output a success notification showing exactly how many lines and polygons were successfully parsed.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background-color: #f8f9fa; border-left: 4px solid #1a73e8; padding: 15px; margin-bottom: 20px; border-radius: 4px;&quot;&gt;
        &lt;p style=&quot;margin: 0; font-weight: bold; color: #1a73e8;&quot;&gt;Step 3: Download the Optimized File&lt;/p&gt;
        &lt;p style=&quot;margin: 5px 0 0 0; color: #5f6368;&quot;&gt;The &lt;strong&gt;Download Button&lt;/strong&gt; will unlock dynamically after processing completes. Click it to save your freshly optimized file. The export file will match your source file name appended with &lt;code&gt;_flat_all.kml&lt;/code&gt;.&lt;/p&gt;
    &lt;/div&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e0e0e0; margin: 25px 0;&quot; /&gt;

    &lt;h2 style=&quot;color: #202124; font-size: 20px;&quot;&gt;Troubleshooting Errors&lt;/h2&gt;
    
    &lt;table style=&quot;width: 100%; border-collapse: collapse; margin-top: 15px; font-size: 14px;&quot;&gt;
        &lt;thead&gt;
            &lt;tr style=&quot;background-color: #f1f3f4; border-bottom: 2px solid #dadce0; text-align: left;&quot;&gt;
                &lt;th style=&quot;padding: 10px; font-weight: 600; color: #202124;&quot;&gt;Error Notice&lt;/th&gt;
                &lt;th style=&quot;padding: 10px; font-weight: 600; color: #202124;&quot;&gt;Root Cause&lt;/th&gt;
                &lt;th style=&quot;padding: 10px; font-weight: 600; color: #202124;&quot;&gt;Resolution Path&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr style=&quot;border-bottom: 1px solid #e0e0e0;&quot;&gt;
                &lt;td style=&quot;padding: 10px; font-weight: bold; color: #d93025;&quot;&gt;&quot;No LineString or Polygon data found...&quot;&lt;/td&gt;
                &lt;td style=&quot;padding: 10px; color: #5f6368;&quot;&gt;The uploaded file contains only points/placemarks or metadata tables with no actual path tracks or vector geometry lines.&lt;/td&gt;
                &lt;td style=&quot;padding: 10px; color: #5f6368;&quot;&gt;Verify that your spatial source contains lines or shapes before uploading.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style=&quot;border-bottom: 1px solid #e0e0e0;&quot;&gt;
                &lt;td style=&quot;padding: 10px; font-weight: bold; color: #d93025;&quot;&gt;&quot;Execution aborted: Corrupt xml layout...&quot;&lt;/td&gt;
                &lt;td style=&quot;padding: 10px; color: #5f6368;&quot;&gt;The structural layout of your file breaks standard XML code parser rules or has corrupt tag nestings.&lt;/td&gt;
                &lt;td style=&quot;padding: 10px; color: #5f6368;&quot;&gt;Re-save or export the file out of your GIS program (like Google Earth) to rebuild its XML framework.&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;div style=&quot;margin-top: 30px; padding: 15px; background-color: #fff8e1; border: 1px solid #ffe082; border-radius: 4px;&quot;&gt;
        &lt;p style=&quot;margin: 0; font-size: 13px; color: #b78103;&quot;&gt;
            &lt;strong&gt;Privacy Note:&lt;/strong&gt; This application relies entirely on client-side JavaScript. Your spatial geographical files are parsed locally inside your machine&#39;s browser memory window. No spatial vector data or document layers are uploaded or sent to external servers.
        &lt;/p&gt;
    &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
let optimizedKMLContent = &quot;&quot;;
let originalFileName = &quot;extracted_geometries.kml&quot;;

const fileInput = document.getElementById(&#39;fileInput&#39;);
const dropZone = document.getElementById(&#39;dropZone&#39;);
const downloadBtn = document.getElementById(&#39;downloadBtn&#39;);

fileInput.addEventListener(&#39;change&#39;, (e) =&gt; handleFile(e.target.files[0]));

dropZone.addEventListener(&#39;dragover&#39;, (e) =&gt; { e.preventDefault(); dropZone.classList.add(&#39;dragover&#39;); });
dropZone.addEventListener(&#39;dragleave&#39;, () =&gt; dropZone.classList.remove(&#39;dragover&#39;));
dropZone.addEventListener(&#39;drop&#39;, (e) =&gt; {
    e.preventDefault();
    dropZone.classList.remove(&#39;dragover&#39;);
    if (e.dataTransfer.files.length &gt; 0) {
        fileInput.files = e.dataTransfer.files;
        handleFile(e.dataTransfer.files[0]);
    }
});

function parseCoordsText(text) {
    if (!text) return &quot;&quot;;
    let points = [];
    const pairs = text.trim().split(/[\s\n\r]+/);
    pairs.forEach(pair =&gt; {
        const parts = pair.split(&#39;,&#39;);
        if (parts.length &gt;= 2) {
            const lon = parts[0].trim();
            const lat = parts[1].trim();
            const alt = parts[2] ? parts[2].trim() : &quot;0&quot;;
            if (lon &amp;&amp; lat &amp;&amp; !isNaN(parseFloat(lon)) &amp;&amp; !isNaN(parseFloat(lat))) {
                points.push(`${lon},${lat},${alt}`);
            }
        }
    });
    return points.join(&#39;\n\t\t\t\t&#39;);
}

function handleFile(file) {
    if (!file) return;
    originalFileName = file.name.replace(&quot;.kml&quot;, &quot;_flat_all.kml&quot;);
    showStatus(&quot;Extracting line and polygon layers...&quot;, &quot;info&quot;);
    downloadBtn.disabled = true;

    const reader = new FileReader();
    reader.onload = function(evt) {
        try {
            const parser = new DOMParser();
            const xmlDoc = parser.parseFromString(evt.target.result, &quot;text/xml&quot;);
            
            let placemarksElements = xmlDoc.getElementsByTagName(&quot;Placemark&quot;);
            let kmlPlacemarksBlocks = [];
            let lineCount = 0;
            let polyCount = 0;

            for (let i = 0; i &lt; placemarksElements.length; i++) {
                const pm = placemarksElements[i];
                const nameTag = pm.getElementsByTagName(&quot;name&quot;)[0];
                const pmName = nameTag ? nameTag.textContent.trim() : `Feature_${i+1}`;
                
                // Look for internal geometries
                const lineStrings = pm.getElementsByTagName(&quot;LineString&quot;);
                const polygons = pm.getElementsByTagName(&quot;Polygon&quot;);

                // Process standard lines
                for (let j = 0; j &lt; lineStrings.length; j++) {
                    const coordTag = lineStrings[j].getElementsByTagName(&quot;coordinates&quot;)[0];
                    if (!coordTag) continue;
                    const cleanedCoords = parseCoordsText(coordTag.textContent);
                    if (!cleanedCoords) continue;

                    lineCount++;
                    kmlPlacemarksBlocks.push(`
        &lt;Placemark&gt;
          &lt;name&gt;${pmName} (Line ${lineCount})&lt;/name&gt;
          &lt;styleUrl&gt;#extractedLineStyle&lt;/styleUrl&gt;
          &lt;LineString&gt;
            &lt;tessellate&gt;1&lt;/tessellate&gt;
            &lt;altitudeMode&gt;clampToGround&lt;/altitudeMode&gt;
            &lt;coordinates&gt;
\t\t\t\t${cleanedCoords}
            &lt;/coordinates&gt;
          &lt;/LineString&gt;
        &lt;/Placemark&gt;`);
                }

                // Process Polygons
                for (let k = 0; k &lt; polygons.length; k++) {
                    const coordTag = polygons[k].getElementsByTagName(&quot;coordinates&quot;)[0]; // Target outer boundaries primarily
                    if (!coordTag) continue;
                    const cleanedCoords = parseCoordsText(coordTag.textContent);
                    if (!cleanedCoords) continue;

                    polyCount++;
                    kmlPlacemarksBlocks.push(`
        &lt;Placemark&gt;
          &lt;name&gt;${pmName} (Polygon ${polyCount})&lt;/name&gt;
          &lt;styleUrl&gt;#extractedPolyStyle&lt;/styleUrl&gt;
          &lt;Polygon&gt;
            &lt;tessellate&gt;1&lt;/tessellate&gt;
            &lt;altitudeMode&gt;clampToGround&lt;/altitudeMode&gt;
            &lt;outerBoundaryIs&gt;
              &lt;LinearRing&gt;
                &lt;coordinates&gt;
\t\t\t\t\t${cleanedCoords}
                &lt;/coordinates&gt;
              &lt;/LinearRing&gt;
            &lt;/outerBoundaryIs&gt;
          &lt;/Polygon&gt;
        &lt;/Placemark&gt;`);
                }
            }

            if (kmlPlacemarksBlocks.length === 0) {
                showStatus(&quot;Error: No LineString or Polygon data found in this file.&quot;, &quot;info&quot;);
                return;
            }

            // Assembly structure
            optimizedKMLContent = `&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;kml xmlns=&quot;http://www.opengis.net/kml/2.2&quot;&gt;
  &lt;Document&gt;
    &lt;name&gt;${file.name.replace(&quot;.kml&quot;, &quot; (Flattened Elements)&quot;)}&lt;/name&gt;
    &lt;Style id=&quot;extractedLineStyle&quot;&gt;
      &lt;LineStyle&gt;&lt;color&gt;ff0000ff&lt;/color&gt;&lt;width&gt;3&lt;/width&gt;&lt;/LineStyle&gt;
    &lt;/Style&gt;
    &lt;Style id=&quot;extractedPolyStyle&quot;&gt;
      &lt;LineStyle&gt;&lt;color&gt;ff00ff00&lt;/color&gt;&lt;width&gt;2&lt;/width&gt;&lt;/LineStyle&gt;
      &lt;PolyStyle&gt;&lt;color&gt;4000ff00&lt;/color&gt;&lt;fill&gt;1&lt;/fill&gt;&lt;outline&gt;1&lt;/outline&gt;&lt;/PolyStyle&gt;
    &lt;/Style&gt;
    ${kmlPlacemarksBlocks.join(&#39;\n&#39;)}
  &lt;/Document&gt;
&lt;/kml&gt;`;

            showStatus(`Success! Extracted ${lineCount} LineString(s) and ${polyCount} Polygon(s). Generated clean file layout.`, &quot;success&quot;);
            downloadBtn.disabled = false;

        } catch (err) {
            showStatus(&quot;Execution aborted: Corrupt xml layout detected inside your KML file.&quot;, &quot;info&quot;);
            console.error(err);
        }
    };
    reader.readAsText(file);
}

downloadBtn.addEventListener(&#39;click&#39;, function() {
    if (!optimizedKMLContent) return;
    const blob = new Blob([optimizedKMLContent], { type: &quot;application/vnd.google-earth.kml+xml&quot; });
    const link = document.createElement(&quot;a&quot;);
    link.href = URL.createObjectURL(blob);
    link.download = originalFileName;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
});

function showStatus(text, type) {
    const el = document.getElementById(&#39;status&#39;);
    el.innerText = text;
    el.style.display = &#39;block&#39;;
    el.className = &quot;status-box &quot; + type;
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/06/complext-to-simple-kml.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-3077069220461103986</guid><pubDate>Fri, 26 Jun 2026 10:06:59 +0000</pubDate><atom:updated>2026-06-30T08:22:57.193+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Roads</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Road alignment Radius of Curvature check according to design speed</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;IRC Polynomial Curvature Geometry Checker&lt;/title&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;

body{
    font-family:Arial;
    background:#f2f4f7;
    margin:20px;
}

.container{
    max-width:1200px;
    margin:auto;
    background:white;
    padding:20px;
    border-radius:10px;
    box-shadow:0 0 10px rgba(0,0,0,0.15);
}

h2{
    color:#0056b3;
}

table{
    width:100%;
    border-collapse:collapse;
    margin-top:20px;
}

th,td{
    border:1px solid #ccc;
    padding:8px;
    text-align:center;
}

th{
    background:#0056b3;
    color:white;
}

.pass{
    background:#d4edda;
    color:green;
    font-weight:bold;
}

.fail{
    background:#f8d7da;
    color:red;
    font-weight:bold;
}

.summary{
    padding:15px;
    margin-top:20px;
    font-weight:bold;
}

button{
    padding:10px 20px;
    margin-top:20px;
    background:#28a745;
    color:white;
    border:none;
    border-radius:5px;
    cursor:pointer;
}

select{
    padding:8px;
}

&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div class=&quot;container&quot; id=&quot;reportContainer&quot;&gt;

&lt;h2&gt;IRC Horizontal Geometry Checker&lt;/h2&gt;

&lt;select id=&quot;terrain&quot;&gt;
    &lt;option value=&quot;plain&quot;&gt;Plain (100 km/h)&lt;/option&gt;
    &lt;option value=&quot;rolling&quot;&gt;Rolling (80 km/h)&lt;/option&gt;
    &lt;option value=&quot;mountainous&quot;&gt;Mountainous (50 km/h)&lt;/option&gt;
    &lt;option value=&quot;steep&quot;&gt;Steep (40 km/h)&lt;/option&gt;
&lt;/select&gt;

&lt;input type=&quot;file&quot; id=&quot;kmlFile&quot; accept=&quot;.kml&quot;&gt;

&lt;div id=&quot;summaryBox&quot;&gt;&lt;/div&gt;

&lt;table id=&quot;resultsTable&quot; style=&quot;display:none;&quot;&gt;

&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Point&lt;/th&gt;
&lt;th&gt;Longitude&lt;/th&gt;
&lt;th&gt;Latitude&lt;/th&gt;
&lt;th&gt;Radius (m)&lt;/th&gt;
&lt;th&gt;Superelevation (%)&lt;/th&gt;
&lt;th&gt;Transition Length (m)&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody id=&quot;resultsBody&quot;&gt;&lt;/tbody&gt;

&lt;/table&gt;

&lt;button onclick=&quot;exportPDF()&quot;&gt;Export PDF&lt;/button&gt;

&lt;/div&gt;
  
  &lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif; color: #333; line-height: 1.6; max-width: 800px; margin: 0 auto; padding: 20px;&quot;&gt;
    
    &lt;h1 style=&quot;color: #0288d1; border-bottom: 2px solid #e1f5fe; padding-bottom: 10px; margin-bottom: 5px;&quot;&gt;User Guide: IRC Road Alignment Compliance Checker&lt;/h1&gt;
    &lt;p style=&quot;font-size: 14px; color: #757575; font-style: italic; margin-top: 0;&quot;&gt;Automated Geometric Design Evaluation Tool&lt;/p&gt;
    
    &lt;p style=&quot;font-size: 16px; color: #424242;&quot;&gt;
        This tool analyzes road centerlines from &lt;strong&gt;KML files&lt;/strong&gt; to verify alignment parameters against standard &lt;strong&gt;IRC (Indian Roads Congress)&lt;/strong&gt; design criteria. It computes curve radius, required superelevation, and transition spiral lengths in real-time.
    &lt;/p&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e0e0e0; margin: 25px 0;&quot; /&gt;

    &lt;h2 style=&quot;color: #212121; font-size: 20px;&quot;&gt;IRC Design Standards Applied&lt;/h2&gt;
    &lt;p&gt;The tool evaluates your spatial data using a local coordinate projection ($R = 6,371\text{ km}$) and quadratic regression curves over a sliding 11-point mathematical window. The design thresholds are structured as follows:&lt;/p&gt;
    
    &lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 15px 0; font-size: 14px; text-align: left;&quot;&gt;
        &lt;thead&gt;
            &lt;tr style=&quot;background-color: #f5f5f5; border-bottom: 2px solid #e0e0e0;&quot;&gt;
                &lt;th style=&quot;padding: 12px; font-weight: 600; color: #212121;&quot;&gt;Terrain Classification&lt;/th&gt;
                &lt;th style=&quot;padding: 12px; font-weight: 600; color: #212121;&quot;&gt;Design Speed ($V$)&lt;/th&gt;
                &lt;th style=&quot;padding: 12px; font-weight: 600; color: #212121;&quot;&gt;Min. Permissible Radius ($R_{min}$)&lt;/th&gt;
                &lt;th style=&quot;padding: 12px; font-weight: 600; color: #212121;&quot;&gt;Max. Superelevation ($e_{max}$)&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr style=&quot;border-bottom: 1px solid #eee;&quot;&gt;
                &lt;td style=&quot;padding: 10px; font-weight: 500;&quot;&gt;&lt;strong&gt;Plain&lt;/strong&gt;&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;100 km/h&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;360 meters&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;7.00%&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style=&quot;border-bottom: 1px solid #eee;&quot;&gt;
                &lt;td style=&quot;padding: 10px; font-weight: 500;&quot;&gt;&lt;strong&gt;Rolling&lt;/strong&gt;&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;80 km/h&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;230 meters&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;7.00%&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style=&quot;border-bottom: 1px solid #eee;&quot;&gt;
                &lt;td style=&quot;padding: 10px; font-weight: 500;&quot;&gt;&lt;strong&gt;Mountainous&lt;/strong&gt;&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;50 km/h&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;90 meters&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;7.00%&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr style=&quot;border-bottom: 1px solid #eee;&quot;&gt;
                &lt;td style=&quot;padding: 10px; font-weight: 500;&quot;&gt;&lt;strong&gt;Steep&lt;/strong&gt;&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;40 km/h&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;60 meters&lt;/td&gt;
                &lt;td style=&quot;padding: 10px;&quot;&gt;7.00%&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e0e0e0; margin: 25px 0;&quot; /&gt;

    &lt;h2 style=&quot;color: #212121; font-size: 20px;&quot;&gt;Step-by-Step Instructions&lt;/h2&gt;
    
    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;span style=&quot;display: inline-block; background-color: #0288d1; color: white; padding: 2px 8px; border-radius: 3px; font-weight: bold; font-size: 12px; margin-bottom: 5px;&quot;&gt;STEP 1&lt;/span&gt;
        &lt;p style=&quot;margin: 0; padding-left: 5px; color: #424242;&quot;&gt;
            Select your project&#39;s geography type using the &lt;strong&gt;Terrain&lt;/strong&gt; drop-down menu. This loads the correct speed parameters and geometric rulesets.
        &lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;span style=&quot;display: inline-block; background-color: #0288d1; color: white; padding: 2px 8px; border-radius: 3px; font-weight: bold; font-size: 12px; margin-bottom: 5px;&quot;&gt;STEP 2&lt;/span&gt;
        &lt;p style=&quot;margin: 0; padding-left: 5px; color: #424242;&quot;&gt;
            Click on &lt;strong&gt;Choose File / Upload KML&lt;/strong&gt; and provide your file containing the path string. 
            &lt;br /&gt;&lt;small style=&quot;color: #e53935;&quot;&gt;*Note: The path alignment must contain &lt;strong&gt;at least 11 survey coordinate points&lt;/strong&gt; to enable the mathematical curvature checks.&lt;/small&gt;
        &lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;span style=&quot;display: inline-block; background-color: #0288d1; color: white; padding: 2px 8px; border-radius: 3px; font-weight: bold; font-size: 12px; margin-bottom: 5px;&quot;&gt;STEP 3&lt;/span&gt;
        &lt;p style=&quot;margin: 0; padding-left: 5px; color: #424242;&quot;&gt;
            Review the generated engineering data layout. Look for the &lt;strong&gt;Summary Box&lt;/strong&gt; output at the base of your UI:
        &lt;/p&gt;
        &lt;ul style=&quot;margin: 5px 0 0 15px; padding: 0; color: #616161;&quot;&gt;
            &lt;li&gt;&lt;span style=&quot;color: #2e7d32; font-weight: bold;&quot;&gt;PASS / TANGENT:&lt;/span&gt; The segment satisfies IRC criteria or is a straight line ($R &gt; 10,000\text{ m}$).&lt;/li&gt;
            &lt;li&gt;&lt;span style=&quot;color: #c62828; font-weight: bold;&quot;&gt;FAIL:&lt;/span&gt; The curve is too sharp for the designated vehicle design speed.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;span style=&quot;display: inline-block; background-color: #0288d1; color: white; padding: 2px 8px; border-radius: 3px; font-weight: bold; font-size: 12px; margin-bottom: 5px;&quot;&gt;STEP 4&lt;/span&gt;
        &lt;p style=&quot;margin: 0; padding-left: 5px; color: #424242;&quot;&gt;
            Click the &lt;strong&gt;Export PDF Report&lt;/strong&gt; action button. The application calls an internal cloning window to format a clean, presentation-ready engineering spreadsheet report page directly to an A4 PDF document download.
        &lt;/p&gt;
    &lt;/div&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #e0e0e0; margin: 25px 0;&quot; /&gt;

    &lt;h2 style=&quot;color: #212121; font-size: 20px;&quot;&gt;Engineered Output Metric Calculations&lt;/h2&gt;
    &lt;p&gt;For every passing node, the tool computes two main structural highway design values:&lt;/p&gt;
    
    &lt;blockquote style=&quot;margin: 15px 0; padding: 10px 15px; background-color: #f9f9f9; border-left: 4px solid #b0bec5; font-size: 14px; color: #37474f;&quot;&gt;
        &lt;strong&gt;1. Equilibrium Superelevation ($e$):&lt;/strong&gt; Calculated using the structural formula:
        $$e = \frac{V^2}{225 \cdot R}$$
        The script automatically caps the output value at a maximum threshold of $7.00\%$ per standard mixed-traffic specifications.
    &lt;/blockquote&gt;

    &lt;blockquote style=&quot;margin: 15px 0; padding: 10px 15px; background-color: #f9f9f9; border-left: 4px solid #b0bec5; font-size: 14px; color: #37474f;&quot;&gt;
        &lt;strong&gt;2. Transition Spiral Curve Length ($L_s$):&lt;/strong&gt; Derived from the comfort rate of acceleration parameters:
        $$L_s = \frac{0.0215 \cdot V^3}{80 \cdot R}$$
        This defines the safe length requirement over which the highway cross-slope shifts from a normal crown to a fully elevated state.
    &lt;/blockquote&gt;

    &lt;div style=&quot;margin-top: 30px; padding: 12px; background-color: #efebe9; border-radius: 4px; border: 1px solid #d7ccc8;&quot;&gt;
        &lt;p style=&quot;margin: 0; font-size: 12px; color: #4e342e; text-align: center;&quot;&gt;
            &lt;strong&gt;System Engine:&lt;/strong&gt; Requires the &lt;code&gt;html2pdf&lt;/code&gt; dependency library available in your application wrapper template window to build structural report exports.
        &lt;/p&gt;
    &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

const irc = {
    plain:{speed:100,minR:360},
    rolling:{speed:80,minR:230},
    mountainous:{speed:50,minR:90},
    steep:{speed:40,minR:60}
};

document.getElementById(&quot;kmlFile&quot;)
.addEventListener(&quot;change&quot;,loadKML);

function loadKML(e){

    const file=e.target.files[0];

    if(!file) return;

    const reader=new FileReader();

    reader.onload=function(evt){

        const parser=new DOMParser();

        const xml=parser.parseFromString(
            evt.target.result,
            &quot;text/xml&quot;
        );

        const nodes=
            xml.getElementsByTagName(&quot;coordinates&quot;);

        let coords=[];

        for(let i=0;i&lt;nodes.length;i++){

            const txt=
                nodes[i].textContent.trim();

            const pairs=
                txt.split(/[\s\n\r]+/);

            pairs.forEach(p=&gt;{

                const a=p.split(&quot;,&quot;);

                if(a.length&gt;=2){

                    const lon=parseFloat(a[0]);
                    const lat=parseFloat(a[1]);

                    if(!isNaN(lat))
                        coords.push({lon,lat});
                }
            });
        }

        if(coords.length&lt;11){

            alert(&quot;Minimum 11 points required.&quot;);

            return;
        }

        process(coords);
    };

    reader.readAsText(file);
}

function toXY(lon,lat,lon0,lat0){

    const R=6371000;

    const x=R*
        (lon-lon0)*
        Math.PI/180*
        Math.cos(lat0*Math.PI/180);

    const y=R*
        (lat-lat0)*
        Math.PI/180;

    return {x,y};
}

function gaussian(A,B){

    const n=B.length;

    for(let i=0;i&lt;n;i++){

        let max=i;

        for(let j=i+1;j&lt;n;j++){

            if(Math.abs(A[j][i])&gt;
               Math.abs(A[max][i]))
                max=j;
        }

        [A[i],A[max]]=[A[max],A[i]];
        [B[i],B[max]]=[B[max],B[i]];

        for(let j=i+1;j&lt;n;j++){

            const f=A[j][i]/A[i][i];

            for(let k=i;k&lt;n;k++)
                A[j][k]-=f*A[i][k];

            B[j]-=f*B[i];
        }
    }

    let x=Array(n).fill(0);

    for(let i=n-1;i&gt;=0;i--){

        x[i]=B[i];

        for(let j=i+1;j&lt;n;j++)
            x[i]-=A[i][j]*x[j];

        x[i]/=A[i][i];
    }

    return x;
}

function fitQuadratic(points){

    let sx=0,sx2=0,sx3=0,sx4=0;

    let sy=0,sxy=0,sx2y=0;

    const n=points.length;

    points.forEach(p=&gt;{

        const x=p.x;
        const y=p.y;

        sx+=x;
        sx2+=x*x;
        sx3+=x*x*x;
        sx4+=x*x*x*x;

        sy+=y;
        sxy+=x*y;
        sx2y+=x*x*y;
    });

    const A=[
        [n,sx,sx2],
        [sx,sx2,sx3],
        [sx2,sx3,sx4]
    ];

    const B=[sy,sxy,sx2y];

    return gaussian(A,B);
}

function curvature(coeff,x){

    const a=coeff[2];
    const b=coeff[1];

    const y1=2*a*x+b;

    const y2=2*a;

    if(Math.abs(y2)&lt;1e-8)
        return 999999;

    return Math.pow(
        1+y1*y1,
        1.5
    )/Math.abs(y2);
}

function superelevation(V,R){

    let e=(V*V)/(225*R);

    if(e&gt;0.07)
        e=0.07;

    return e*100;
}

function transition(V,R){

    return (0.0215*V*V*V)/(80*R);
}

function process(coords){

    const terrain=
        document.getElementById(&quot;terrain&quot;).value;

    const std=irc[terrain];

    const V=std.speed;

    const lon0=coords[0].lon;
    const lat0=coords[0].lat;

    const xy=
        coords.map(c=&gt;
            toXY(c.lon,c.lat,lon0,lat0)
        );

    const tbody=
        document.getElementById(
            &quot;resultsBody&quot;
        );

    tbody.innerHTML=&quot;&quot;;

    let fail=0;

    for(let i=5;i&lt;xy.length-5;i++){

        let local=[];

        for(let j=i-5;j&lt;=i+5;j++){

            local.push({
                x:xy[j].x-xy[i].x,
                y:xy[j].y-xy[i].y
            });
        }

        const coeff=
            fitQuadratic(local);

        const R=
            curvature(coeff,0);

        const e=
            superelevation(V,R);

        const Ls=
            transition(V,R);

        let cls=&quot;pass&quot;;
        let status=&quot;PASS&quot;;

        if(R&lt;std.minR){

            cls=&quot;fail&quot;;

            status=&quot;FAIL&quot;;

            fail++;
        }

        if(R&gt;10000){

            status=&quot;TANGENT&quot;;

            cls=&quot;&quot;;
        }

        tbody.innerHTML+=`
        &lt;tr&gt;
        &lt;td&gt;${i}&lt;/td&gt;
        &lt;td&gt;${coords[i].lon.toFixed(6)}&lt;/td&gt;
        &lt;td&gt;${coords[i].lat.toFixed(6)}&lt;/td&gt;
        &lt;td&gt;${R.toFixed(1)}&lt;/td&gt;
        &lt;td&gt;${e.toFixed(2)}&lt;/td&gt;
        &lt;td&gt;${Ls.toFixed(1)}&lt;/td&gt;
        &lt;td class=&quot;${cls}&quot;&gt;
        ${status}
        &lt;/td&gt;
        &lt;/tr&gt;
        `;
    }

    document.getElementById(
        &quot;resultsTable&quot;
    ).style.display=&quot;table&quot;;

    const summary=
        document.getElementById(
            &quot;summaryBox&quot;
        );

    if(fail&gt;0){

        summary.className=
            &quot;summary fail&quot;;

        summary.innerHTML=
            `${fail} locations violate IRC radius requirements.`;
    }
    else{

        summary.className=
            &quot;summary pass&quot;;

        summary.innerHTML=
            &quot;Alignment satisfies IRC requirements.&quot;;
    }
}

function exportPDF() {

    const original = document.getElementById(&quot;reportContainer&quot;);

    // Create clone
    const clone = original.cloneNode(true);

    // Remove unnecessary controls
    const fileInput = clone.querySelector(&quot;#kmlFile&quot;);
    if(fileInput) fileInput.remove();

    // Replace select by text
    const terrainSelect =
        document.getElementById(&quot;terrain&quot;);

    const terrainText =
        terrainSelect.options[
            terrainSelect.selectedIndex
        ].text;

    const clonedSelect =
        clone.querySelector(&quot;#terrain&quot;);

    if(clonedSelect){

        const span=document.createElement(&quot;div&quot;);

        span.innerHTML =
            &quot;&lt;b&gt;Terrain:&lt;/b&gt; &quot; +
            terrainText;

        span.style.marginBottom=&quot;10px&quot;;

        clonedSelect.parentNode.replaceChild(
            span,
            clonedSelect
        );
    }

    // Put clone temporarily into DOM
    const holder=document.createElement(&quot;div&quot;);

    holder.style.position=&quot;absolute&quot;;
    holder.style.left=&quot;-9999px&quot;;
    holder.style.top=&quot;0&quot;;
    holder.style.width=&quot;1400px&quot;;

    holder.appendChild(clone);

    document.body.appendChild(holder);

    const options={

        margin:10,

        filename:&quot;IRC_Report.pdf&quot;,

        image:{
            type:&quot;jpeg&quot;,
            quality:1
        },

        html2canvas:{
            scale:2,
            useCORS:true,
            scrollX:0,
            scrollY:0,
            windowWidth:1400,
            windowHeight:clone.scrollHeight
        },

        jsPDF:{
            unit:&quot;mm&quot;,
            format:&quot;a4&quot;,
            orientation:&quot;landscape&quot;
        },

        pagebreak:{
            mode:[&quot;css&quot;,&quot;legacy&quot;]
        }
    };

    setTimeout(function(){

        html2pdf()
        .set(options)
        .from(clone)
        .save()
        .then(function(){

            document.body.removeChild(holder);

        });

    },300);
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/06/road-alignment-radius-of-curvature.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-6407646585304885879</guid><pubDate>Tue, 02 Jun 2026 13:08:02 +0000</pubDate><atom:updated>2026-06-23T14:05:19.678+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Construction Procedure</category><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">PWD Working</category><title>Project tasks report </title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Project &amp; Task Lifecycle Tracker&lt;/title&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.6.0/jspdf.plugin.autotable.min.js&quot;&gt;&lt;/script&gt;
    
&lt;style&gt;
    /* --- CSS Variables Configuration --- */
    :root {
        --primary-color: #0056b3;
        --secondary-color: #6c757d;
        --danger-color: #dc3545;
        --success-color: #28a745;
        --warning-color: #ffc107;
        --light-bg: #f8f9fa;
        --border-color: #dee2e6;
    }

    /* --- Core Container Setup --- */
    .tracker-container {
        font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Arial, sans-serif;
        color: #333;
        max-width: 1100px;
        margin: 20px auto;
        padding: 15px;
        background: #ffffff;
        border-radius: 8px;
        box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    }

    /* --- Typography Scope Isolation --- */
    .tracker-container h1 {
        color: var(--primary-color);
        margin-bottom: 5px;
    }

    .tracker-container h2, 
    .tracker-container h3 {
        color: #222;
        border-bottom: 2px solid var(--light-bg);
        padding-bottom: 8px;
        margin-top: 25px;
    }

    .tracker-container header {
        border-bottom: 2px solid var(--border-color);
        padding-bottom: 15px;
        margin-bottom: 30px;
    }

    /* --- Form Elements --- */
    .form-group {
        margin-bottom: 15px;
    }

    .form-group label {
        display: block;
        font-weight: bold;
        margin-bottom: 5px;
    }

    .form-control {
        width: 100%;
        padding: 8px;
        border: 1px solid var(--border-color);
        border-radius: 4px;
        box-sizing: border-box;
    }

    /* --- Layout Components --- */
    .project-section, .task-section {
        background: var(--light-bg);
        padding: 15px;
        border-radius: 6px;
        margin-bottom: 20px;
        border: 1px solid var(--border-color);
    }

    .grid-2 {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 15px;
    }

    /* --- Button Architectures --- */
    .btn-group {
        display: flex;
        gap: 10px;
        margin-top: 10px;
        flex-wrap: wrap;
    }

    .btn {
        padding: 6px 12px;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        font-weight: 500;
        color: #fff;
        font-size: 0.9em;
        transition: opacity 0.15s ease;
    }

    .btn:hover { opacity: 0.9; }
    .btn:disabled { opacity: 0.5; cursor: not-allowed; }

    .btn-primary { background-color: var(--primary-color); }
    .btn-danger { background-color: var(--danger-color); }
    .btn-success { background-color: var(--success-color); }
    .btn-secondary { background-color: var(--secondary-color); }

    /* --- Table Core Grid --- */
    table {
        width: 100%;
        border-collapse: collapse;
        margin-top: 15px;
        background: #fff;
    }

    th, td {
        border: 1px solid var(--border-color);
        padding: 10px;
        text-align: left;
        vertical-align: top;
    }

    th { background-color: #f1f3f5; }

    /* --- Status Pill Badges --- */
    .status-badge {
        padding: 4px 8px;
        border-radius: 12px;
        font-size: 0.8em;
        font-weight: bold;
        cursor: pointer;
        display: inline-block;
        transition: all 0.2s ease;
        user-select: none;
        border: 1px solid transparent;
        white-space: nowrap;
    }
    
    .status-pending { background-color: #ffeeba; color: #856404; border-color: #ffe082; }
    .status-pending:hover { background-color: #ffd54f; }

    .status-completed { background-color: #d4edda; color: #155724; border-color: #c3e6cb; }
    .status-completed:hover { background-color: #a5d6a7; }

    /* Static Document Badges */
    .badge {
        display: inline-block;
        padding: 2px 6px;
        font-size: 0.8rem;
        font-weight: 600;
        border-radius: 4px;
        color: #fff;
    }
    .badge-blue { background-color: var(--primary-color); }
    .badge-green { background-color: var(--success-color); }
    .badge-red { background-color: var(--danger-color); }
    .badge-gray { background-color: var(--secondary-color); }

    /* --- Subtask Matrix Column Layout --- */
    .subtask-column-layout {
        display: flex;
        flex-direction: column;
        gap: 6px;
    }

    .subtask-row {
        display: grid;
        grid-template-columns: 2fr 1.2fr 1.2fr auto;
        gap: 8px;
        align-items: center;
        background: #fdfdfd;
        padding: 6px;
        border: 1px dashed #ced4da;
        border-radius: 4px;
    }

    .subtask-input-bar {
        display: grid;
        grid-template-columns: 2fr 1.2fr auto;
        gap: 8px;
        margin-top: 10px;
        padding-top: 10px;
        border-top: 1px solid var(--border-color);
    }

    .subtask-input-bar input {
        padding: 5px;
        font-size: 0.85em;
        border: 1px solid var(--border-color);
        border-radius: 4px;
        width: 100%;
        box-sizing: border-box;
    }

    /* --- Documentation Elements --- */
    .highlight-box {
        background-color: #e8f4fd;
        border-left: 4px solid var(--primary-color);
        padding: 15px;
        border-radius: 4px;
        margin: 20px 0;
    }

    .danger-box {
        background-color: #fdf2f2;
        border-left: 4px solid var(--danger-color);
        padding: 15px;
        border-radius: 4px;
        margin: 20px 0;
    }

    code {
        font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, monospace;
        background-color: #f1f3f5;
        padding: 2px 6px;
        border-radius: 4px;
        font-size: 0.9em;
    }

    .info-tip {
        font-size: 0.85em;
        color: #6c757d;
        margin-top: 5px;
        font-style: italic;
    }

    ol, ul { padding-left: 20px; }
    li { margin-bottom: 8px; }

    footer {
        margin-top: 50px;
        padding-top: 20px;
        border-top: 1px solid var(--border-color);
        font-size: 0.85rem;
        text-align: center;
        color: var(--secondary-color);
    }

    /* --- Fluid Mobile Responsiveness Breakpoints --- */
    @media (max-width: 768px) {
        .grid-2 { 
            grid-template-columns: 1fr; 
        }
        .subtask-row, 
        .subtask-input-bar {
            grid-template-columns: 1fr;
            gap: 4px;
        }
        .subtask-row &gt; * {
            width: 100%;
        }
    }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;tracker-container&quot;&gt;
    &lt;h2&gt;Project &amp; Task Lifecycle Tracker&lt;/h2&gt;

    &lt;div class=&quot;project-section&quot;&gt;
        &lt;div class=&quot;form-group&quot;&gt;
            &lt;label for=&quot;projectSelect&quot;&gt;Select Project:&lt;/label&gt;
            &lt;select id=&quot;projectSelect&quot; class=&quot;form-control&quot; onchange=&quot;loadSelectedProject()&quot;&gt;
                &lt;option value=&quot;&quot;&gt;-- Choose a Project --&lt;/option&gt;
            &lt;/select&gt;
        &lt;/div&gt;
        &lt;div class=&quot;btn-group&quot;&gt;
            &lt;button class=&quot;btn btn-secondary&quot; onclick=&quot;showNewProjectForm()&quot;&gt;+ Create New Project&lt;/button&gt;
            &lt;button id=&quot;editProjBtn&quot; class=&quot;btn btn-primary&quot; onclick=&quot;enableProjectEdit()&quot; disabled&gt;Edit Project Name&lt;/button&gt;
            &lt;button id=&quot;deleteProjBtn&quot; class=&quot;btn btn-danger&quot; onclick=&quot;deleteCurrentProject()&quot; disabled&gt;Delete Entire Project&lt;/button&gt;
            &lt;button id=&quot;pdfBtn&quot; class=&quot;btn btn-success&quot; onclick=&quot;exportToPDF()&quot; disabled&gt;Export Status Report (PDF)&lt;/button&gt;
        &lt;/div&gt;

        &lt;div id=&quot;projectForm&quot; style=&quot;display:none; margin-top:15px; padding-top:15px; border-top:1px dashed #ccc;&quot;&gt;
            &lt;div class=&quot;form-group&quot;&gt;
                &lt;label id=&quot;projFormLabel&quot; for=&quot;projectNameInput&quot;&gt;Project Name:&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;projectNameInput&quot; class=&quot;form-control&quot; placeholder=&quot;Enter project name&quot;&gt;
            &lt;/div&gt;
            &lt;button class=&quot;btn btn-success&quot; onclick=&quot;saveProject()&quot;&gt;Save Project&lt;/button&gt;
            &lt;button class=&quot;btn btn-secondary&quot; onclick=&quot;cancelProjectForm()&quot;&gt;Cancel&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;taskWorkspace&quot; style=&quot;display: none;&quot;&gt;
        &lt;div class=&quot;task-section&quot;&gt;
            &lt;h3&gt;Add New Main Task&lt;/h3&gt;
            &lt;div class=&quot;form-group&quot;&gt;
                &lt;label for=&quot;taskName&quot;&gt;Main Task Description:&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;taskName&quot; class=&quot;form-control&quot; placeholder=&quot;What needs to be done?&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;grid-2&quot;&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label for=&quot;taskDeadline&quot;&gt;Deadline:&lt;/label&gt;
                    &lt;input type=&quot;date&quot; id=&quot;taskDeadline&quot; class=&quot;form-control&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label for=&quot;taskStatus&quot;&gt;Status:&lt;/label&gt;
                    &lt;select id=&quot;taskStatus&quot; class=&quot;form-control&quot; onchange=&quot;toggleCompletionDate()&quot;&gt;
                        &lt;option value=&quot;Pending&quot;&gt;Pending&lt;/option&gt;
                        &lt;option value=&quot;Completed&quot;&gt;Completed&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;form-group&quot; id=&quot;completionDateGroup&quot; style=&quot;display: none;&quot;&gt;
                &lt;label for=&quot;taskCompletionDate&quot;&gt;Date of Completion:&lt;/label&gt;
                &lt;input type=&quot;date&quot; id=&quot;taskCompletionDate&quot; class=&quot;form-control&quot;&gt;
            &lt;/div&gt;
            &lt;button class=&quot;btn btn-primary&quot; onclick=&quot;saveTask()&quot;&gt;Add Main Task&lt;/button&gt;
        &lt;/div&gt;

        &lt;h3&gt;Task Matrix&lt;/h3&gt;
        &lt;p class=&quot;info-tip&quot;&gt;💡 Tip: Click directly on any status badge (Main Task or Subtask) to flip its status instantly.&lt;/p&gt;
        &lt;div style=&quot;overflow-x: auto;&quot;&gt;
            &lt;table id=&quot;taskTable&quot;&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th style=&quot;width: 25%;&quot;&gt;Main Task Description&lt;/th&gt;
                        &lt;th style=&quot;width: 45%;&quot;&gt;Subtasks Structure (Description | Deadline | Status | Action)&lt;/th&gt;
                        &lt;th style=&quot;width: 10%;&quot;&gt;Main Deadline&lt;/th&gt;
                        &lt;th style=&quot;width: 10%;&quot;&gt;Main Status&lt;/th&gt;
                        &lt;th style=&quot;width: 10%;&quot;&gt;Main Comp. Date&lt;/th&gt;
                        &lt;th style=&quot;width: 5%;&quot;&gt;Action&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody id=&quot;taskTableBody&quot;&gt;
                    &lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
  
  &lt;header&gt;
        &lt;h1&gt;Project &amp; Task Lifecycle Tracker&lt;/h1&gt;
        &lt;p class=&quot;meta-info&quot;&gt;Official User Guide &amp; Technical Documentation&lt;/p&gt;
    &lt;/header&gt;

    &lt;section id=&quot;introduction&quot;&gt;
        &lt;h2&gt;1. Introduction&lt;/h2&gt;
        &lt;p&gt;The &lt;strong&gt;Project &amp; Task Lifecycle Tracker&lt;/strong&gt; is an enterprise-grade, single-page application built to structure complex project workflows into digestible, relational milestones. Designed for professionals managing infrastructure tasks and rigorous timelines, this utility supports a parent-child relationship hierarchy (Main Tasks &amp; Subtasks) alongside robust data isolation capabilities.&lt;/p&gt;
        
        &lt;div class=&quot;highlight-box&quot;&gt;
            &lt;strong&gt;Key Feature: Localized Architecture&lt;/strong&gt;&lt;br&gt;
            Unlike traditional tracking tools that depend on external server environments or third-party cloud cookies, this application runs entirely client-side. Your operational data remains securely inside your browser profile.
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;section id=&quot;technical-architecture&quot;&gt;
        &lt;h2&gt;2. Data Engine &amp; Technical Architecture&lt;/h2&gt;
        &lt;p&gt;To operate reliably offline and store large datasets without performance bottlenecks, the tool leverages the browser&#39;s native &lt;strong&gt;IndexedDB API&lt;/strong&gt;. Here is how the underlying mechanism handles your input:&lt;/p&gt;
        
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Database Schema:&lt;/strong&gt; Operates under the storage identity &lt;code&gt;YogiPWD_SubtaskTrackerDB_v2&lt;/code&gt;.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Relational Mapping:&lt;/strong&gt; It isolates records across two main internal tables (Object Stores):
                &lt;ul&gt;
                    &lt;li&gt;&lt;code&gt;projects&lt;/code&gt;: Stores the primary master containers using an auto-incremented key configuration.&lt;/li&gt;
                    &lt;li&gt;&lt;code&gt;tasks&lt;/code&gt;: Stores core task rows indexed directly by a &lt;code&gt;projectId&lt;/code&gt; foreign key to guarantee relational integrity.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Subtask Structuring:&lt;/strong&gt; Subtasks are systematically embedded directly into their respective parent task arrays. This structural nesting facilitates instantaneous localized updates and prevents orphaned data records.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section id=&quot;user-guide&quot;&gt;
        &lt;h2&gt;3. Step-by-Step Functional Guide&lt;/h2&gt;
        
        &lt;h3&gt;3.1 Initializing a Workspace&lt;/h3&gt;
        &lt;p&gt;When you open the application, the task matrix remains hidden until an explicit workspace scope is designated:&lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;Click the &lt;span class=&quot;badge badge-gray&quot;&gt;+ Create New Project&lt;/span&gt; button.&lt;/li&gt;
            &lt;li&gt;Type your specific project banner or work order name into the dynamically exposed configuration input field.&lt;/li&gt;
            &lt;li&gt;Click &lt;strong&gt;Save Project&lt;/strong&gt;. The workspace immediately shifts focus to your newly initialized project.&lt;/li&gt;
        &lt;/ol&gt;

        &lt;h3&gt;3.2 Managing Core Components&lt;/h3&gt;
        &lt;p&gt;Once a project is active, you can leverage the top control panel layout:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Edit Project Name:&lt;/strong&gt; Modifies the active project identity without altering any task rows nested underneath it.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Delete Entire Project:&lt;/strong&gt; &lt;span class=&quot;badge badge-red&quot;&gt;Danger Area&lt;/span&gt; This triggers a recursive transactional cascade. Confirming this action permanently deletes the project container, its main metrics, and all associated subtask blocks from the database.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;3.3 Populating the Task Matrix&lt;/h3&gt;
        &lt;p&gt;The &lt;strong&gt;Add New Main Task&lt;/strong&gt; form accepts primary activity entries. To populate it:&lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;Provide a &lt;strong&gt;Main Task Description&lt;/strong&gt; (e.g., &lt;em&gt;&quot;Procurement Validation&quot;&lt;/em&gt; or &lt;em&gt;&quot;Site Alignment Inspection&quot;&lt;/em&gt;).&lt;/li&gt;
            &lt;li&gt;Set a primary calendar &lt;strong&gt;Deadline&lt;/strong&gt;.&lt;/li&gt;
            &lt;li&gt;Assign an initial lifecycle phase status (&lt;span class=&quot;badge badge-gray&quot;&gt;Pending&lt;/span&gt; or &lt;span class=&quot;badge badge-green&quot;&gt;Completed&lt;/span&gt;). If &lt;code&gt;Completed&lt;/code&gt; is chosen, a localized date input field will appear to log the verification timeline.&lt;/li&gt;
            &lt;li&gt;Click &lt;strong&gt;Add Main Task&lt;/strong&gt; to instantly append the entry into the primary tracking table.&lt;/li&gt;
        &lt;/ol&gt;

        &lt;h3&gt;3.4 Building the Subtask Structure&lt;/h3&gt;
        &lt;p&gt;Each main task row contains a nested data-entry column designed for breakdown logging:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Locate the input strip immediately below the main task row details.&lt;/li&gt;
            &lt;li&gt;Type out specific granular subtasks, specify their isolated due dates, and click the &lt;strong&gt;+ Add&lt;/strong&gt; button.&lt;/li&gt;
            &lt;li&gt;The system assigns a high-resolution microscopic timestamp identifier (&lt;code&gt;Date.now()&lt;/code&gt;) to every subtask block to ensure unique event tracking.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section id=&quot;advanced-interactions&quot;&gt;
        &lt;h2&gt;4. Advanced Interaction &amp; Quick Shortcuts&lt;/h2&gt;
        
        &lt;h3&gt;4.1 Instant Status Flipping&lt;/h3&gt;
        &lt;p&gt;For high-speed updates during site briefings or coordination reviews, you do not need to open complex edit menus. The interface provides &lt;strong&gt;Inline State Flipping&lt;/strong&gt;:&lt;/p&gt;
        &lt;div class=&quot;highlight-box&quot; style=&quot;background-color: #fffbeb; border-left-color: #f59e0b;&quot;&gt;
            &lt;strong&gt;Shortcut:&lt;/strong&gt; Click directly on any status badge display (e.g., &lt;code style=&quot;background-color: #fef3c7;&quot;&gt;Pending ⇄&lt;/code&gt;) in the matrix grid. The underlying database engine instantly switches its execution state.
        &lt;/div&gt;
        &lt;ul&gt;
            &lt;li&gt;Flipping to &lt;code&gt;Completed&lt;/code&gt; prompts a native system confirmation box requesting the completion calendar date (defaults automatically to the current date).&lt;/li&gt;
            &lt;li&gt;Reverting an item from &lt;code&gt;Completed&lt;/code&gt; back to &lt;code&gt;Pending&lt;/code&gt; automatically clears the corresponding completion date field.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section id=&quot;reporting-outputs&quot;&gt;
        &lt;h2&gt;5. Structured PDF Status Reports&lt;/h2&gt;
        &lt;p&gt;When stakeholders or senior management require an update, click the &lt;span class=&quot;badge badge-green&quot;&gt;Export Status Report (PDF)&lt;/span&gt; utility button. The reporting engine automatically generates a professional, dual-tier audit document using the following layout parameters:&lt;/p&gt;

        &lt;table&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Report Section&lt;/th&gt;
                    &lt;th&gt;Color Code&lt;/th&gt;
                    &lt;th&gt;Data Inclusion Mapping&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;1. Remaining / Pending Tasks&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;span class=&quot;badge badge-red&quot;&gt;Red Header&lt;/span&gt;&lt;/td&gt;
                    &lt;td&gt;Lists incomplete parent tasks and individual active subtask rows waiting for validation.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;2. Completed Achievements&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;span class=&quot;badge badge-green&quot;&gt;Green Header&lt;/span&gt;&lt;/td&gt;
                    &lt;td&gt;Isolates finalized milestones along with their confirmed dates of completion.&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;The generated PDF automatically handles name sanitization, converting special characters into clean underscores (&lt;code&gt;_&lt;/code&gt;) to output clean, storage-friendly file naming conventions.&lt;/p&gt;
    &lt;/section&gt;

    &lt;footer&gt;
        &lt;p&gt;Project &amp; Task Lifecycle Tracker Technical Manual — Built for Engineers and Project Managers.&lt;/p&gt;
    &lt;/footer&gt;

&lt;script&gt;
    // --- IndexedDB Management ---
    const DB_NAME = &#39;YogiPWD_SubtaskTrackerDB_v2&#39;;
    const DB_VERSION = 1;
    let db;

    const request = indexedDB.open(DB_NAME, DB_VERSION);

    request.onerror = function(e) { console.error(&quot;Database error: &quot;, e.target.error); };
    request.onsuccess = function(e) {
        db = e.target.result;
        initProjectDropdown();
    };

    request.onupgradeneeded = function(e) {
        let dbInstance = e.target.result;
        if (!dbInstance.objectStoreNames.contains(&#39;projects&#39;)) {
            dbInstance.createObjectStore(&#39;projects&#39;, { keyPath: &#39;id&#39;, autoIncrement: true });
        }
        if (!dbInstance.objectStoreNames.contains(&#39;tasks&#39;)) {
            let taskStore = dbInstance.createObjectStore(&#39;tasks&#39;, { keyPath: &#39;id&#39;, autoIncrement: true });
            taskStore.createIndex(&#39;projectId&#39;, &#39;projectId&#39;, { unique: false });
        }
    };

    let currentProjectId = null;
    let isEditingProject = false;

    // --- Project Logics ---
    function initProjectDropdown() {
        const transaction = db.transaction([&#39;projects&#39;], &#39;readonly&#39;);
        const store = transaction.objectStore(&#39;projects&#39;);
        const request = store.getAll();

        request.onsuccess = function() {
            const dropdown = document.getElementById(&#39;projectSelect&#39;);
            dropdown.innerHTML = &#39;&lt;option value=&quot;&quot;&gt;-- Choose a Project --&lt;/option&gt;&#39;;
            request.result.forEach(project =&gt; {
                let option = document.createElement(&#39;option&#39;);
                option.value = project.id;
                option.textContent = project.name;
                dropdown.appendChild(option);
            });
            if(currentProjectId) dropdown.value = currentProjectId;
        };
    }

    function showNewProjectForm() {
        isEditingProject = false;
        document.getElementById(&#39;projFormLabel&#39;).textContent = &quot;New Project Name:&quot;;
        document.getElementById(&#39;projectNameInput&#39;).value = &quot;&quot;;
        document.getElementById(&#39;projectForm&#39;).style.display = &#39;block&#39;;
    }

    function enableProjectEdit() {
        if (!currentProjectId) return;
        isEditingProject = true;
        document.getElementById(&#39;projFormLabel&#39;).textContent = &quot;Edit Project Name:&quot;;
        const dropdown = document.getElementById(&#39;projectSelect&#39;);
        document.getElementById(&#39;projectNameInput&#39;).value = dropdown.options[dropdown.selectedIndex].text;
        document.getElementById(&#39;projectForm&#39;).style.display = &#39;block&#39;;
    }

    function cancelProjectForm() {
        document.getElementById(&#39;projectForm&#39;).style.display = &#39;none&#39;;
    }

    function saveProject() {
        const name = document.getElementById(&#39;projectNameInput&#39;).value.trim();
        if (!name) return alert(&quot;Please enter a valid project name.&quot;);

        const transaction = db.transaction([&#39;projects&#39;], &#39;readwrite&#39;);
        const store = transaction.objectStore(&#39;projects&#39;);

        if (isEditingProject &amp;&amp; currentProjectId) {
            store.put({ id: currentProjectId, name: name }).onsuccess = function() {
                cancelProjectForm();
                initProjectDropdown();
            };
        } else {
            store.add({ name: name }).onsuccess = function(e) {
                currentProjectId = e.target.result;
                cancelProjectForm();
                initProjectDropdown();
                setTimeout(() =&gt; {
                    document.getElementById(&#39;projectSelect&#39;).value = currentProjectId;
                    loadSelectedProject();
                }, 100);
            };
        }
    }

    function deleteCurrentProject() {
        if (!currentProjectId) return;
        if (!confirm(&quot;Delete this project, its main tasks, and all subtasks permanently?&quot;)) return;

        const transaction = db.transaction([&#39;projects&#39;, &#39;tasks&#39;], &#39;readwrite&#39;);
        transaction.objectStore(&#39;projects&#39;).delete(currentProjectId);

        const taskStore = transaction.objectStore(&#39;tasks&#39;);
        const index = taskStore.index(&#39;projectId&#39;);
        index.openCursor(IDBKeyRange.only(currentProjectId)).onsuccess = function(e) {
            let cursor = e.target.result;
            if (cursor) {
                cursor.delete();
                cursor.continue();
            }
        };

        transaction.oncomplete = function() {
            currentProjectId = null;
            document.getElementById(&#39;taskWorkspace&#39;).style.display = &#39;none&#39;;
            toggleProjectControlButtons(false);
            initProjectDropdown();
        };
    }

    function loadSelectedProject() {
        const val = document.getElementById(&#39;projectSelect&#39;).value;
        if (!val) {
            currentProjectId = null;
            document.getElementById(&#39;taskWorkspace&#39;).style.display = &#39;none&#39;;
            toggleProjectControlButtons(false);
            return;
        }
        currentProjectId = parseInt(val);
        toggleProjectControlButtons(true);
        document.getElementById(&#39;taskWorkspace&#39;).style.display = &#39;block&#39;;
        renderTasks();
    }

    function toggleProjectControlButtons(enabled) {
        document.getElementById(&#39;editProjBtn&#39;).disabled = !enabled;
        document.getElementById(&#39;deleteProjBtn&#39;).disabled = !enabled;
        document.getElementById(&#39;pdfBtn&#39;).disabled = !enabled;
    }

    // --- Task &amp; Subtask Logics ---
    function toggleCompletionDate() {
        const status = document.getElementById(&#39;taskStatus&#39;).value;
        const dateGroup = document.getElementById(&#39;completionDateGroup&#39;);
        if (status === &#39;Completed&#39;) {
            dateGroup.style.display = &#39;block&#39;;
            document.getElementById(&#39;taskCompletionDate&#39;).value = new Date().toISOString().split(&#39;T&#39;)[0];
        } else {
            dateGroup.style.display = &#39;none&#39;;
            document.getElementById(&#39;taskCompletionDate&#39;).value = &quot;&quot;;
        }
    }

    function saveTask() {
        const name = document.getElementById(&#39;taskName&#39;).value.trim();
        const deadline = document.getElementById(&#39;taskDeadline&#39;).value;
        const status = document.getElementById(&#39;taskStatus&#39;).value;
        let compDate = document.getElementById(&#39;taskCompletionDate&#39;).value;

        if (!name || !deadline) return alert(&quot;Task description and deadline are required.&quot;);

        const taskItem = {
            projectId: currentProjectId,
            name: name,
            deadline: deadline,
            status: status,
            completionDate: status === &#39;Completed&#39; ? compDate : &quot;&quot;,
            subtasks: []
        };

        const transaction = db.transaction([&#39;tasks&#39;], &#39;readwrite&#39;);
        transaction.objectStore(&#39;tasks&#39;).add(taskItem).onsuccess = function() {
            document.getElementById(&#39;taskName&#39;).value = &quot;&quot;;
            document.getElementById(&#39;taskDeadline&#39;).value = &quot;&quot;;
            renderTasks();
        };
    }

    function addSubtask(taskId) {
        const subtaskName = document.getElementById(`subName-${taskId}`).value.trim();
        const subtaskDate = document.getElementById(`subDate-${taskId}`).value;

        if (!subtaskName || !subtaskDate) return alert(&quot;Fill in subtask description and target deadline.&quot;);

        const transaction = db.transaction([&#39;tasks&#39;], &#39;readwrite&#39;);
        const store = transaction.objectStore(&#39;tasks&#39;);

        store.get(taskId).onsuccess = function(e) {
            let task = e.target.result;
            if(!task.subtasks) task.subtasks = [];

            task.subtasks.push({
                id: Date.now(),
                name: subtaskName,
                deadline: subtaskDate,
                status: &#39;Pending&#39;,
                completionDate: &#39;&#39;
            });

            store.put(task).onsuccess = function() {
                renderTasks();
            };
        };
    }

    function changeTaskStatusInline(taskId, currentStatus) {
        let newStatus = currentStatus === &#39;Pending&#39; ? &#39;Completed&#39; : &#39;Pending&#39;;
        let compDate = &quot;&quot;;
        
        if(newStatus === &#39;Completed&#39;) {
            compDate = prompt(&quot;Confirm Completion Date (YYYY-MM-DD):&quot;, new Date().toISOString().split(&#39;T&#39;)[0]);
            if (compDate === null) return;
            if (compDate.trim() === &quot;&quot;) compDate = new Date().toISOString().split(&#39;T&#39;)[0];
        } else {
            if(!confirm(&quot;Revert main task to Pending?&quot;)) return;
        }

        const transaction = db.transaction([&#39;tasks&#39;], &#39;readwrite&#39;);
        const store = transaction.objectStore(&#39;tasks&#39;);
        store.get(taskId).onsuccess = function(e) {
            let data = e.target.result;
            data.status = newStatus;
            data.completionDate = compDate;
            store.put(data).onsuccess = function() { renderTasks(); };
        };
    }

    function changeSubtaskStatusInline(taskId, subtaskId, currentStatus) {
        let newStatus = currentStatus === &#39;Pending&#39; ? &#39;Completed&#39; : &#39;Pending&#39;;
        let compDate = &quot;&quot;;

        if(newStatus === &#39;Completed&#39;) {
            compDate = prompt(&quot;Confirm Subtask Completion Date (YYYY-MM-DD):&quot;, new Date().toISOString().split(&#39;T&#39;)[0]);
            if (compDate === null) return;
            if (compDate.trim() === &quot;&quot;) compDate = new Date().toISOString().split(&#39;T&#39;)[0];
        }

        const transaction = db.transaction([&#39;tasks&#39;], &#39;readwrite&#39;);
        const store = transaction.objectStore(&#39;tasks&#39;);
        store.get(taskId).onsuccess = function(e) {
            let task = e.target.result;
            let sub = task.subtasks.find(s =&gt; s.id === subtaskId);
            if(sub) {
                sub.status = newStatus;
                sub.completionDate = newStatus === &#39;Completed&#39; ? compDate : &quot;&quot;;
            }
            store.put(task).onsuccess = function() { renderTasks(); };
        };
    }

    function deleteTask(taskId) {
        if (!confirm(&quot;Remove this main task entirely?&quot;)) return;
        db.transaction([&#39;tasks&#39;], &#39;readwrite&#39;).objectStore(&#39;tasks&#39;).delete(taskId).onsuccess = function() {
            renderTasks();
        };
    }

    function deleteSubtask(taskId, subtaskId) {
        if (!confirm(&quot;Remove this subtask row?&quot;)) return;
        const transaction = db.transaction([&#39;tasks&#39;], &#39;readwrite&#39;);
        const store = transaction.objectStore(&#39;tasks&#39;);
        store.get(taskId).onsuccess = function(e) {
            let task = e.target.result;
            task.subtasks = task.subtasks.filter(s =&gt; s.id !== subtaskId);
            store.put(task).onsuccess = function() { renderTasks(); };
        };
    }

    function renderTasks() {
        const tbody = document.getElementById(&#39;taskTableBody&#39;);
        tbody.innerHTML = &quot;&quot;;

        const index = db.transaction([&#39;tasks&#39;], &#39;readonly&#39;).objectStore(&#39;tasks&#39;).index(&#39;projectId&#39;);
        index.getAll(IDBKeyRange.only(currentProjectId)).onsuccess = function(e) {
            let tasks = e.target.result;
            if(tasks.length === 0) {
                tbody.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;6&quot; style=&quot;text-align:center; color:#888;&quot;&gt;No tasks recorded yet.&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            tasks.forEach(task =&gt; {
                let tr = document.createElement(&#39;tr&#39;);
                let badgeClass = task.status === &#39;Completed&#39; ? &#39;status-completed&#39; : &#39;status-pending&#39;;
                
                // Build Clean Subtask Grid layout Inside its Separate Dedicated Column
                let subtasksHtml = `&lt;div class=&quot;subtask-column-layout&quot;&gt;`;
                if(task.subtasks &amp;&amp; task.subtasks.length &gt; 0) {
                    task.subtasks.forEach(sub =&gt; {
                        let subBadge = sub.status === &#39;Completed&#39; ? &#39;status-completed&#39; : &#39;status-pending&#39;;
                        let dateDisplay = sub.completionDate ? `[Done: ${sub.completionDate}]` : &#39;&#39;;
                        subtasksHtml += `
                            &lt;div class=&quot;subtask-row&quot;&gt;
                                &lt;span style=&quot;font-weight:500; color:#495057;&quot;&gt;↳ ${sub.name}&lt;/span&gt;
                                &lt;span style=&quot;font-size:0.85em; color:#6c757d;&quot;&gt;Due: ${sub.deadline}&lt;/span&gt;
                                &lt;span class=&quot;status-badge ${subBadge}&quot; onclick=&quot;changeSubtaskStatusInline(${task.id}, ${sub.id}, &#39;${sub.status}&#39;)&quot;&gt;
                                    ${sub.status} ${dateDisplay} ⇄
                                &lt;/span&gt;
                                &lt;button style=&quot;background:none; border:none; color:var(--danger-color); cursor:pointer; font-weight:bold;&quot; onclick=&quot;deleteSubtask(${task.id}, ${sub.id})&quot; title=&quot;Delete Subtask&quot;&gt;×&lt;/button&gt;
                            &lt;/div&gt;`;
                    });
                } else {
                    subtasksHtml += `&lt;div style=&quot;font-style:italic; color:#999; font-size:0.85em; padding: 4px;&quot;&gt;No subtasks added yet.&lt;/div&gt;`;
                }
                
                // Form layout row directly inside subtask column for seamless input
                subtasksHtml += `
                    &lt;div class=&quot;subtask-input-bar&quot;&gt;
                        &lt;input type=&quot;text&quot; id=&quot;subName-${task.id}&quot; placeholder=&quot;New subtask details...&quot;&gt;
                        &lt;input type=&quot;date&quot; id=&quot;subDate-${task.id}&quot;&gt;
                        &lt;button class=&quot;btn btn-secondary&quot; style=&quot;padding:2px 10px; font-size:0.8em;&quot; onclick=&quot;addSubtask(${task.id})&quot;&gt;+ Add&lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;`;

                tr.innerHTML = `
                    &lt;td&gt;&lt;strong&gt;${task.name}&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;${subtasksHtml}&lt;/td&gt;
                    &lt;td&gt;&lt;span style=&quot;font-size:0.9em; font-weight:500;&quot;&gt;${task.deadline}&lt;/span&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;span class=&quot;status-badge ${badgeClass}&quot; onclick=&quot;changeTaskStatusInline(${task.id}, &#39;${task.status}&#39;)&quot;&gt;${task.status} ⇄&lt;/span&gt;&lt;/td&gt;
                    &lt;td&gt;${task.completionDate ? task.completionDate : &#39;-&#39;}&lt;/td&gt;
                    &lt;td&gt;&lt;button class=&quot;btn btn-danger&quot; style=&quot;padding: 4px 8px; font-size:0.8em;&quot; onclick=&quot;deleteTask(${task.id})&quot;&gt;Delete&lt;/button&gt;&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            });
        };
    }

    // --- Structured AutoTable PDF Report Outflow ---
    function exportToPDF() {
        if (!currentProjectId) return;
        const dropdown = document.getElementById(&#39;projectSelect&#39;);
        const projectName = dropdown.options[dropdown.selectedIndex].text;

        db.transaction([&#39;tasks&#39;], &#39;readonly&#39;).objectStore(&#39;tasks&#39;).index(&#39;projectId&#39;).getAll(IDBKeyRange.only(currentProjectId)).onsuccess = function(e) {
            const allTasks = e.target.result;
            const remainingTasks = allTasks.filter(t =&gt; t.status !== &#39;Completed&#39;);
            const completedTasks = allTasks.filter(t =&gt; t.status === &#39;Completed&#39;);

            const { jsPDF } = window.jspdf;
            const doc = new jsPDF();

            // Header Elements Document Style Formatting
            doc.setFont(&quot;Helvetica&quot;, &quot;bold&quot;); doc.setFontSize(18);
            doc.text(&quot;PROJECT STATUS REPORT (SEPARATED BREAKDOWN)&quot;, 14, 20);
            doc.setFontSize(11); doc.setFont(&quot;Helvetica&quot;, &quot;normal&quot;); doc.setTextColor(50);
            doc.text(`Project Workspace: ${projectName}`, 14, 28);
            doc.text(`Generated Date: ${new Date().toLocaleDateString()}`, 14, 34);
            doc.line(14, 38, 196, 38);

            let currentY = 45;

            // Section 1: Pending Matrix Rows Mapping
            doc.setFont(&quot;Helvetica&quot;, &quot;bold&quot;); doc.setFontSize(13); doc.setTextColor(220, 53, 69);
            doc.text(&quot;1. Remaining / Pending Tasks Structure&quot;, 14, currentY);

            let remainingRows = [];
            remainingTasks.forEach(t =&gt; {
                remainingRows.push([t.name, t.deadline, t.status, t.completionDate || &#39;-&#39;]);
                if(t.subtasks &amp;&amp; t.subtasks.length &gt; 0) {
                    t.subtasks.forEach(s =&gt; {
                        remainingRows.push([`   ↳ Subtask: ${s.name}`, s.deadline, `Subtask: ${s.status}`, s.completionDate || &#39;-&#39;]);
                    });
                }
            });

            window.jspdf.autoTable(doc, {
                startY: currentY + 4,
                head: [[&#39;Task / Subtask Breakdown Details&#39;, &#39;Target Deadline&#39;, &#39;Status Type&#39;, &#39;Completion Date&#39;]],
                body: remainingRows.length &gt; 0 ? remainingRows : [[&#39;No remaining workflow items found.&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;]],
                headStyles: { fillColor: [220, 53, 69] },
                theme: &#39;striped&#39;,
                margin: { left: 14, right: 14 }
            });

            currentY = doc.lastAutoTable.finalY + 12;

            // Section 2: Completed Matrix Rows Mapping
            doc.setFont(&quot;Helvetica&quot;, &quot;bold&quot;); doc.setFontSize(13); doc.setTextColor(40, 167, 69);
            doc.text(&quot;2. Completed Achievements&quot;, 14, currentY);

            let completedRows = [];
            completedTasks.forEach(t =&gt; {
                completedRows.push([t.name, t.deadline, t.status, t.completionDate]);
                if(t.subtasks &amp;&amp; t.subtasks.length &gt; 0) {
                    t.subtasks.forEach(s =&gt; {
                        completedRows.push([`   ↳ Subtask: ${s.name}`, s.deadline, `Subtask: ${s.status}`, s.completionDate || &#39;-&#39;]);
                    });
                }
            });

            window.jspdf.autoTable(doc, {
                startY: currentY + 4,
                head: [[&#39;Task / Subtask Breakdown Details&#39;, &#39;Target Deadline&#39;, &#39;Status Type&#39;, &#39;Completion Date&#39;]],
                body: completedRows.length &gt; 0 ? completedRows : [[&#39;No primary achievements documented under this frame.&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;]],
                headStyles: { fillColor: [40, 167, 69] },
                theme: &#39;striped&#39;,
                margin: { left: 14, right: 14 }
            });

            const sanitizedFileName = projectName.replace(/[^a-z0-9]/gi, &#39;_&#39;).toLowerCase();
            doc.save(`Subtask_Report_${sanitizedFileName}.pdf`);
        };
    }
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/06/project-tasks-report.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-6135974966372327668</guid><pubDate>Tue, 02 Jun 2026 04:47:33 +0000</pubDate><atom:updated>2026-06-23T14:05:47.174+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Design calculations</category><category domain="http://www.blogger.com/atom/ns#">Formulas</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Fundamental Dynamics</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Fundamental Dynamics Calculator&lt;/title&gt;
    &lt;style&gt;
        :root {
            /* Maharashtra PWD / Professional Blue Theme */
            --primary: #0056b3;
            --secondary: #4a90e2;
            --bg-light: #f8f9fa;
            --border-color: #dee2e6;
            --text-dark: #212529;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;Helvetica Neue&quot;, Arial, sans-serif;
            background-color: #f4f6f9;
            color: var(--text-dark);
            margin: 0;
            padding: 2px;
        }

        .container {
            max-width: 1500px;
            margin: 0 auto;
            background: #fff;
            padding: 3px;
            border-radius: 8px;
            box-shadow: 0 4px 12px rgba(0,0,0,0.1);
        }

        h1 {
            color: var(--primary);
            border-bottom: 2px solid var(--primary);
            padding-bottom: 10px;
            margin-top: 0;
        }

        /* Tabs Navigation */
        .tabs {
            display: flex;
            border-bottom: 2px solid var(--border-color);
            margin-bottom: 25px;
        }

        .tab-btn {
            background: none;
            border: none;
            padding: 1px 2px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            color: #6c757d;
            border-bottom: 3px solid transparent;
            transition: all 0.2s;
        }

        .tab-btn.active {
            color: var(--primary);
            border-bottom-color: var(--primary);
        }

        .tab-content {
            display: none;
        }

        .tab-content.active {
            display: block;
        }

        /* Form &amp; Grid Layout */
        .calc-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 5px;
        }

        @media (max-width: 1500px) {
            .calc-grid {
                grid-template-columns: 1fr;
            }
        }

        .card {
            background: var(--bg-light);
            border: 1px solid var(--border-color);
            border-radius: 6px;
            padding: 2px;
        }

        .card h3 {
            margin-top: 0;
            color: var(--primary);
            border-bottom: 1px solid var(--border-color);
            padding-bottom: 2px;
        }

        .form-group {
            margin-bottom: 15px;
            display: flex;
            flex-direction: column;
        }

        label {
            font-weight: 600;
            margin-bottom: 5px;
            font-size: 14px;
        }

        input {
            padding: 2px 2px;
            border: 1px solid #ccc;
            border-radius: 4px;
            font-size: 15px;
        }

        input:focus {
            outline: none;
            border-color: var(--secondary);
            box-shadow: 0 0 5px rgba(74, 144, 226, 0.3);
        }

        /* Output Formatting */
        .results-box {
            background: #e9ecef;
            border-left: 4px solid var(--primary);
            padding: 2px;
            margin-top: 15px;
            border-radius: 0 4px 4px 0;
        }

        .result-item {
            display: flex;
            justify-content: space-between;
            padding: 2px 0;
            border-bottom: 1px dashed #ced4da;
        }

        .result-item:last-child {
            border-bottom: none;
        }

        .result-val {
            font-weight: 700;
            color: #000;
        }
      .docs-wrapper {
        max-w: 1200px;
        margin: 40px auto;
        font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif;
        color: #2d3748;
        line-height: 1.7;
        background: #ffffff;
        padding: 40px;
        border-radius: 12px;
        box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
        border: 1px solid #e2e8f0;
    }
    .docs-section {
        margin-bottom: 40px;
    }
    .docs-title {
        color: #1a365d;
        font-size: 28px;
        font-weight: 700;
        border-bottom: 3px solid #3182ce;
        padding-bottom: 10px;
        margin-bottom: 20px;
    }
    .docs-subtitle {
        color: #2b6cb0;
        font-size: 20px;
        font-weight: 600;
        margin-top: 25px;
        margin-bottom: 12px;
    }
    .formula-card {
        background: #f7fafc;
        border-left: 4px solid #4299e1;
        padding: 15px 20px;
        margin: 15px 0;
        font-family: &quot;Courier New&quot;, Courier, monospace;
        font-size: 15px;
        font-weight: bold;
        color: #2d3748;
        overflow-x: auto;
    }
    .docs-grid {
        display: grid;
        grid-template-columns: 1fr;
        gap: 20px;
        margin: 20px 0;
    }
    @media (min-width: 768px) {
        .docs-grid { grid-template-columns: 1fr 1fr; }
    }
    .app-box {
        background: #ebf8ff;
        border: 1px solid #bee3f8;
        padding: 15px 20px;
        border-radius: 6px;
    }
    .app-box h4 {
        color: #2b6cb0;
        margin-top: 0;
        margin-bottom: 8px;
        font-size: 16px;
    }
    .example-table {
        width: 100%;
        border-collapse: collapse;
        margin: 15px 0;
        font-size: 14px;
    }
    .example-table th, .example-table td {
        border: 1px solid #e2e8f0;
        padding: 10px 12px;
        text-align: left;
    }
    .example-table th {
        background: #edf2f7;
        color: #4a5568;
    }
    .step-list {
        padding-left: 20px;
    }
    .step-list li {
        margin-bottom: 10px;
    }
    .text-muted {
        color: #718096;
        font-size: 13px;
    }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;h1&gt;Fundamental Dynamics Calculator&lt;/h1&gt;
    
    &lt;div class=&quot;tabs&quot;&gt;
        &lt;button class=&quot;tab-btn active&quot; onclick=&quot;switchTab(&#39;kinematics&#39;)&quot;&gt;Kinematics&lt;/button&gt;
        &lt;button class=&quot;tab-btn&quot; onclick=&quot;switchTab(&#39;kinetics&#39;)&quot;&gt;Kinetics&lt;/button&gt;
    &lt;/div&gt;

    &lt;div id=&quot;kinematics&quot; class=&quot;tab-content active&quot;&gt;
        &lt;div class=&quot;calc-grid&quot;&gt;
            
            &lt;div class=&quot;card&quot;&gt;
                &lt;h3&gt;Rectilinear &amp; Fixed Axis Rotational Motion&lt;/h3&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Initial Velocity ($v_0$) [m/s] / ($\omega_0$) [rad/s]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;v0&quot; value=&quot;0&quot; oninput=&quot;calcKinematics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Constant Acceleration ($a_c$) [m/s²] / ($\alpha_c$) [rad/s²]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;ac&quot; value=&quot;2&quot; oninput=&quot;calcKinematics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Time Duration ($t$) [seconds]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;time&quot; value=&quot;5&quot; oninput=&quot;calcKinematics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Radius of Rotation ($r$) [meters] &lt;small&gt;(For Point P conversion)&lt;/small&gt;&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;rad&quot; value=&quot;0.5&quot; oninput=&quot;calcKinematics()&quot;&gt;
                &lt;/div&gt;

                &lt;div class=&quot;results-box&quot;&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Final Linear Velocity ($v$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_v&quot;&gt;0.00&lt;/span&gt; m/s&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Linear Displacement ($\Delta s$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_s&quot;&gt;0.00&lt;/span&gt; m&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Final Angular Velocity ($\omega$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_omega&quot;&gt;0.00&lt;/span&gt; rad/s&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Angular Displacement ($\theta$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_theta&quot;&gt;0.00&lt;/span&gt; rad&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Tangential Acceleration ($a_t$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_at&quot;&gt;0.00&lt;/span&gt; m/s²&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Normal Acceleration ($a_n$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_an&quot;&gt;0.00&lt;/span&gt; m/s²&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;h3&gt;Curvilinear Profiles ($n, t, b$ Geometry)&lt;/h3&gt;
                &lt;p style=&quot;font-size:13px; color:#6c757d; margin-top:-5px;&quot;&gt;Evaluates profile radius $\rho = \frac{[1 + (dy/dx)^2]^{3/2}}{|d^2y/dx^2|}$&lt;/p&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Instantaneous Velocity ($v$) [m/s]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;curv_v&quot; value=&quot;15&quot; oninput=&quot;calcKinematics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;First Derivative ($dy/dx$) [Slope]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;dydx&quot; value=&quot;0.5&quot; oninput=&quot;calcKinematics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Second Derivative ($d^2y/dx^2$) [Curvature rate]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;d2ydx2&quot; value=&quot;0.02&quot; oninput=&quot;calcKinematics()&quot;&gt;
                &lt;/div&gt;

                &lt;div class=&quot;results-box&quot; style=&quot;margin-top: 45px;&quot;&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Radius of Curvature ($\rho$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_rho&quot;&gt;0.00&lt;/span&gt; m&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Normal Acceleration ($a_n = v^2/\rho$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_curv_an&quot;&gt;0.00&lt;/span&gt; m/s²&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;kinetics&quot; class=&quot;tab-content&quot;&gt;
        &lt;div class=&quot;calc-grid&quot;&gt;
            
            &lt;div class=&quot;card&quot;&gt;
                &lt;h3&gt;Mass Properties &amp; Work Parameters&lt;/h3&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Mass ($m$) [kg]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;mass&quot; value=&quot;10&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Radius of Gyration ($k$) [meters]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;rog&quot; value=&quot;0.3&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Constant Force ($F_c$) [Newtons]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;force&quot; value=&quot;50&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Force Angle ($\theta$) [Degrees]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;angle&quot; value=&quot;0&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Displacement ($\Delta s$) [meters]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;disp&quot; value=&quot;10&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;

                &lt;div class=&quot;results-box&quot;&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Mass Moment of Inertia ($I_G$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_ig&quot;&gt;0.00&lt;/span&gt; kg·m²&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Required Unopposed Force ($\Sigma F$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_f_req&quot;&gt;0.00&lt;/span&gt; N&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Work Done by Force ($U_F$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_uf&quot;&gt;0.00&lt;/span&gt; J&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;card&quot;&gt;
                &lt;h3&gt;Energy, Power &amp; Restitution&lt;/h3&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Spring Constant ($k_s$) [N/m]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;ks&quot; value=&quot;500&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Spring Compression/Extension ($s$) [m]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;spring_s&quot; value=&quot;0.2&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Efficiency ($\varepsilon$) [Decimal, e.g., 0.85]&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;efficiency&quot; value=&quot;0.85&quot; min=&quot;0&quot; max=&quot;1&quot; step=&quot;0.05&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;form-group&quot;&gt;
                    &lt;label&gt;Coefficient of Restitution ($e$)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;cor&quot; value=&quot;0.8&quot; min=&quot;0&quot; max=&quot;1&quot; step=&quot;0.05&quot; oninput=&quot;calcKinetics()&quot;&gt;
                &lt;/div&gt;

                &lt;div class=&quot;results-box&quot; style=&quot;margin-top:25px;&quot;&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Elastic Potential Energy ($V_e$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_ve&quot;&gt;0.00&lt;/span&gt; J&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Kinetic Energy (Translational, $T$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_ke&quot;&gt;0.00&lt;/span&gt; J&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Useful Power Output ($P_{\text{out}}$ @ $v_o$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_pout&quot;&gt;0.00&lt;/span&gt; W&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Required Power Input ($P_{\text{in}}$):&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_pin&quot;&gt;0.00&lt;/span&gt; W&lt;/div&gt;
                    &lt;div class=&quot;result-item&quot;&gt;&lt;span&gt;Relative Separation Velocity:&lt;/span&gt; &lt;span class=&quot;result-val&quot; id=&quot;res_vsep&quot;&gt;0.00&lt;/span&gt; m/s&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
  
  &lt;div class=&quot;docs-wrapper&quot;&gt;
    &lt;section class=&quot;docs-section&quot;&gt;
        &lt;h2 class=&quot;docs-title&quot;&gt;Theoretical Framework: Kinematics vs. Kinetics in Classical Mechanics&lt;/h2&gt;
        &lt;p&gt;
            In engineering design and analytical mechanics, analyzing moving systems requires dividing problems into two fundamental classifications: &lt;strong&gt;Kinematics&lt;/strong&gt; and &lt;strong&gt;Kinetics&lt;/strong&gt;. While both frameworks examine motion parameters across spatial coordinates, their mathematical boundaries evaluate entirely separate conditions. 
        &lt;/p&gt;
        &lt;p&gt;
            &lt;strong&gt;Kinematics&lt;/strong&gt; acts as the geometry of motion. It details, maps, and analyzes the position, velocity, acceleration, and temporal profiles of particles or rigid bodies without accounting for the active structural forces, torques, or masses that induce the change in state. Conversely, &lt;strong&gt;Kinetics&lt;/strong&gt; forms the causal bridge, connecting the geometric displacement pathways derived via kinematics directly to the unbalanced forces, system mass properties, work expenditures, and energy transfers governed by Newtonian laws.
        &lt;/p&gt;

        &lt;h3 class=&quot;docs-subtitle&quot;&gt;1. Rectilinear Tracking &amp;amp; Fixed-Axis Rotational Analogies&lt;/h3&gt;
        &lt;p&gt;
            When processing particle dynamics along a direct one-dimensional spatial path, a constant linear acceleration profile allows for direct algebraic integrations over a fixed time frame. Similarly, rigid bodies rotating about a stationary axis of rotation mirror these exact expressions when mapped through angular transformations. The structural parallels are defined as follows:
        &lt;/p&gt;
        &lt;div class=&quot;formula-card&quot;&gt;
            Linear Velocity: v = v₀ + (a_c × t)&lt;br&gt;
            Linear Displacement: Δs = (v₀ × t) + (0.5 × a_c × t²)&lt;br&gt;&lt;br&gt;
            Angular Velocity: ω = ω₀ + (α_c × t)&lt;br&gt;
            Angular Displacement: θ = (ω₀ × t) + (0.5 × α_c × t²)
        &lt;/div&gt;
        &lt;p&gt;
            When tracking a specific point (Point P) located along a rotating structural element at a radial distance (r) from the center of rotation, the point experiences a split acceleration profile. The &lt;strong&gt;Tangential Acceleration (a&lt;sub&gt;t&lt;/sub&gt;)&lt;/strong&gt; accounts for changes in speed and maps directly to the angular acceleration, while the &lt;strong&gt;Normal Acceleration (a&lt;sub&gt;n&lt;/sub&gt;)&lt;/strong&gt; represents the continuous change in spatial direction caused by centripetal forces pushing inward toward the axis.
        &lt;/p&gt;
        &lt;div class=&quot;formula-card&quot;&gt;
            a&lt;sub&gt;t&lt;/sub&gt; = α_c × r &amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp; a&lt;sub&gt;n&lt;/sub&gt; = ω² × r
        &lt;/div&gt;

        &lt;h3 class=&quot;docs-subtitle&quot;&gt;2. Curvilinear Coordinate Profiles (Normal-Tangential Plane Geometry)&lt;/h3&gt;
        &lt;p&gt;
            For complex trajectories—such as calculating safety clear zones along highway horizontal curves or tracking mechanical structural fairings—particles are analyzed using localized Normal-Tangential (n-t) coordinate systems. If the continuous path profile is represented analytically by a spatial function y = f(x), the instantaneous local tracking radius can be determined using calculus via the &lt;strong&gt;Radius of Curvature (ρ)&lt;/strong&gt; formula:
        &lt;/p&gt;
        &lt;div class=&quot;formula-card&quot;&gt;
            ρ = [1 + (dy/dx)²]&lt;sup&gt;1.5&lt;/sup&gt; / |d²y/dx²|&lt;br&gt;
            a&lt;sub&gt;n&lt;/sub&gt; = v² / ρ
        &lt;/div&gt;
        &lt;p&gt;
            Here, dy/dx defines the instantaneous linear slope parameter, while d²y/dx² evaluates the curvature rate. A high curvature rate dramatically compresses the local radius ρ, causing a sharp spike in normal acceleration forces even when vehicle or equipment velocity remains completely static.
        &lt;/p&gt;

        &lt;h3 class=&quot;docs-subtitle&quot;&gt;3. Mass Profile Sizing &amp;amp; The Work-Energy Theorem&lt;/h3&gt;
        &lt;p&gt;
            Moving from geometric tracking to kinetic analysis requires mapping the resistance to motion. In linear translation, this parameter is system mass (m). In rotational systems, resistance to angular acceleration depends on how that mass is distributed relative to the axis of rotation—defined as the &lt;strong&gt;Mass Moment of Inertia (I&lt;sub&gt;G&lt;/sub&gt;)&lt;/strong&gt;. Engineers simplify this structural distribution property using the &lt;strong&gt;Radius of Gyration (k)&lt;/strong&gt;:
        &lt;/p&gt;
        &lt;div class=&quot;formula-card&quot;&gt;
            I&lt;sub&gt;G&lt;/sub&gt; = m × k²
        &lt;/div&gt;
        &lt;p&gt;
            When external force fields interact with these components, the total change in kinetic state matches the net work executed on the system. If a constant external force (F&lt;sub&gt;c&lt;/sub&gt;) acts at an angular offset (θ) across a linear translation path (Δs), the work parameter (U_F) and required unopposed balancing force are governed by:
        &lt;/p&gt;
        &lt;div class=&quot;formula-card&quot;&gt;
            U_F = F_c × cos(θ) × Δs &amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp; ΣF = m × a_c
        &lt;/div&gt;

        &lt;h3 class=&quot;docs-subtitle&quot;&gt;4. Energy Transformations, Spring Metrics, and Collisions&lt;/h3&gt;
        &lt;p&gt;
            In closed system evaluations, mechanical energy transfers continuously between kinetic configurations (T = 0.5 × m × v²) and potential storage configurations. Elastic recovery devices (such as mechanical isolation springs or structural dampening columns) store energy in the form of &lt;strong&gt;Elastic Potential Energy (V&lt;sub&gt;e&lt;/sub&gt;)&lt;/strong&gt; based on their spring stiffness constant (k&lt;sub&gt;s&lt;/sub&gt;) and deformation distance (s):
        &lt;/p&gt;
        &lt;div class=&quot;formula-card&quot;&gt;
            V&lt;sub&gt;e&lt;/sub&gt; = 0.5 × k&lt;sub&gt;s&lt;/sub&gt; × s²
        &lt;/div&gt;
        &lt;p&gt;
            Real-world transfers are bounded by mechanical system operating efficiencies (ε). The real power input required to drive a system demands more energy expenditure than the useful power output delivered. Additionally, sudden velocity changes due to impacts are governed by the &lt;strong&gt;Coefficient of Restitution (e)&lt;/strong&gt;, a localized material index dictating relative separation speeds relative to initial approach parameters:
        &lt;/p&gt;
        &lt;div class=&quot;formula-card&quot;&gt;
            P&lt;sub&gt;out&lt;/sub&gt; = (F_c × cos(θ)) × v₀ &amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp; P&lt;sub&gt;in&lt;/sub&gt; = P&lt;sub&gt;out&lt;/sub&gt; / ε &amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp; v&lt;sub&gt;sep&lt;/sub&gt; = e × v
        &lt;/div&gt;

        &lt;div class=&quot;docs-grid&quot;&gt;
            &lt;div class=&quot;app-box&quot;&gt;
                &lt;h4&gt;Civil Infrastructure Applications&lt;/h4&gt;
                &lt;p class=&quot;text-muted&quot;&gt;Used to check structural safe banking angles, maximum approach speed limits on horizontal transitions, and kinetic energy absorption profiles for highway crash cushions.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;app-box&quot;&gt;
                &lt;h4&gt;Mechanical Sizing Applications&lt;/h4&gt;
                &lt;p class=&quot;text-muted&quot;&gt;Used to calculate the required power inputs for industrial cranes, torque load limits on rotating shafts, and the spring constants needed for heavy equipment vibration isolators.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;section class=&quot;docs-section&quot; style=&quot;border-top: 1px solid #e2e8f0; padding-top: 20px;&quot;&gt;
        &lt;h2 class=&quot;docs-title&quot;&gt;Operational Manual &amp;amp; Verification Guide&lt;/h2&gt;
        &lt;p&gt;
            The Fundamental Dynamics Calculator processes system parameters in real time. Follow these steps to navigate modules and process engineering scenarios:
        &lt;/p&gt;
        
        &lt;h3 class=&quot;docs-subtitle&quot;&gt;How to Operate the Interface&lt;/h3&gt;
        &lt;ol class=&quot;step-list&quot;&gt;
            &lt;li&gt;&lt;strong&gt;Select Core Domain:&lt;/strong&gt; Click the &lt;strong&gt;Kinematics&lt;/strong&gt; tab to calculate pure motion values (velocities, curves, coordinates). Click the &lt;strong&gt;Kinetics&lt;/strong&gt; tab to evaluate mechanical properties (forces, inertia, spring metrics, power calculations).&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Provide Inputs:&lt;/strong&gt; Click inside any numeric field and type your engineering parameters. The script recalculates values immediately upon input change; there is no need to click a submit button.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Interpret Output Fields:&lt;/strong&gt; Results update in real time in the gray boxes at the bottom of each card. Units match standard SI metrics (meters, seconds, Newtons, Joules, Watts).&lt;/li&gt;
        &lt;/ol&gt;

        &lt;h3 class=&quot;docs-subtitle&quot;&gt;Mathematical Benchmark Verification Case&lt;/h3&gt;
        &lt;p&gt;
            To verify system calculations, enter the following default parameter baseline into the calculator engine and check the outputs against the analytical solutions below:
        &lt;/p&gt;

        &lt;table class=&quot;example-table&quot;&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Module Category&lt;/th&gt;
                    &lt;th&gt;Input Parameters Entered&lt;/th&gt;
                    &lt;th&gt;Expected Analytical Output Value&lt;/th&gt;
                    &lt;th&gt;Governing Formula Applied&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Rectilinear Kinematics&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;v₀ = 0 m/s, a&lt;sub&gt;c&lt;/sub&gt; = 2 m/s², t = 5 s&lt;/td&gt;
                    &lt;td&gt;&lt;strong&gt;Final Velocity (v):&lt;/strong&gt; 10.00 m/s&lt;/td&gt;
                    &lt;td&gt;v = v₀ + a&lt;sub&gt;c&lt;/sub&gt;t = 0 + 2(5)&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Linear Displacement&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;v₀ = 0 m/s, a&lt;sub&gt;c&lt;/sub&gt; = 2 m/s², t = 5 s&lt;/td&gt;
                    &lt;td&gt;&lt;strong&gt;Displacement (Δs):&lt;/strong&gt; 25.00 m&lt;/td&gt;
                    &lt;td&gt;Δs = v₀t + 0.5a&lt;sub&gt;c&lt;/sub&gt;t² = 0 + 0.5(2)(25)&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Point P Transformation&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;r = 0.5 m, (Calculated ω = 10.00 rad/s)&lt;/td&gt;
                    &lt;td&gt;&lt;strong&gt;Normal Accel. (a&lt;sub&gt;n&lt;/sub&gt;):&lt;/strong&gt; 50.00 m/s²&lt;/td&gt;
                    &lt;td&gt;a&lt;sub&gt;n&lt;/sub&gt; = ω²r = (10)² × 0.5 = 100 × 0.5&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Curvilinear Geometry&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;v = 15 m/s, dy/dx = 0.5, d²y/dx² = 0.02&lt;/td&gt;
                    &lt;td&gt;&lt;strong&gt;Radius of Curvature (ρ):&lt;/strong&gt; 69.88 m&lt;/td&gt;
                    &lt;td&gt;ρ = [1 + (0.5)²]&lt;sup&gt;1.5&lt;/sup&gt; / 0.02 = 1.3975 / 0.02&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Mass &amp;amp; Inertia Sizing&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;m = 10 kg, Radius of Gyration k = 0.3 m&lt;/td&gt;
                    &lt;td&gt;&lt;strong&gt;Inertia (I&lt;sub&gt;G&lt;/sub&gt;):&lt;/strong&gt; 0.9000 kg·m²&lt;/td&gt;
                    &lt;td&gt;I&lt;sub&gt;G&lt;/sub&gt; = m × k² = 10 × (0.3)² = 10 × 0.09&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Work &amp;amp; Energy Profiles&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Spring Constant k&lt;sub&gt;s&lt;/sub&gt; = 500 N/m, s = 0.2 m&lt;/td&gt;
                    &lt;td&gt;&lt;strong&gt;Potential Energy (V&lt;sub&gt;e&lt;/sub&gt;):&lt;/strong&gt; 10.00 J&lt;/td&gt;
                    &lt;td&gt;V&lt;sub&gt;e&lt;/sub&gt; = 0.5 × k&lt;sub&gt;s&lt;/sub&gt; × s² = 0.5 × 500 × 0.04&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
        &lt;p class=&quot;text-muted&quot; style=&quot;font-style: italic;&quot;&gt;
            Note: The Kinetics module uses the calculated results from the Kinematics tab as live context parameters. Modifying velocity or acceleration fields inside the Kinematics tab will cause corresponding updates to Kinetic energy, power required, and impact velocity outputs automatically.
        &lt;/p&gt;
    &lt;/section&gt;
&lt;/div&gt;

&lt;script&gt;
    // Tab Switcher Logic
    function switchTab(tabId) {
        document.querySelectorAll(&#39;.tab-content&#39;).forEach(el =&gt; el.classList.remove(&#39;active&#39;));
        document.querySelectorAll(&#39;.tab-btn&#39;).forEach(el =&gt; el.classList.remove(&#39;active&#39;));
        
        document.getElementById(tabId).classList.add(&#39;active&#39;);
        event.currentTarget.classList.add(&#39;active&#39;);
        
        // Refresh calculations on view change
        calcKinematics();
        calcKinetics();
    }

    // Kinematics Calculation Block
    function calcKinematics() {
        // Inputs
        const v0 = parseFloat(document.getElementById(&#39;v0&#39;).value) || 0;
        const ac = parseFloat(document.getElementById(&#39;ac&#39;).value) || 0;
        const t = parseFloat(document.getElementById(&#39;time&#39;).value) || 0;
        const r = parseFloat(document.getElementById(&#39;rad&#39;).value) || 0;
        
        const curv_v = parseFloat(document.getElementById(&#39;curv_v&#39;).value) || 0;
        const dydx = parseFloat(document.getElementById(&#39;dydx&#39;).value) || 0;
        const d2ydx2 = Math.abs(parseFloat(document.getElementById(&#39;d2ydx2&#39;).value)) || 0.00001; // Avoid divide by zero

        // 1. Rectilinear Calculations
        const v = v0 + (ac * t);
        const s = (v0 * t) + (0.5 * ac * t * t);

        // 2. Fixed Axis Rotational Calculations (Direct mappings match setup formulas)
        const omega = v0 + (ac * t); 
        const theta = (v0 * t) + (0.5 * ac * t * t);

        // 3. Point P Transformations
        const at = ac * r;
        const an = (omega * omega) * r;

        // 4. Curvilinear Geometry Equations
        const rho = Math.pow(1 + Math.pow(dydx, 2), 1.5) / d2ydx2;
        const curv_an = (curv_v * curv_v) / rho;

        // Render Outputs
        document.getElementById(&#39;res_v&#39;).innerText = v.toFixed(2);
        document.getElementById(&#39;res_s&#39;).innerText = s.toFixed(2);
        document.getElementById(&#39;res_omega&#39;).innerText = omega.toFixed(2);
        document.getElementById(&#39;res_theta&#39;).innerText = theta.toFixed(2);
        document.getElementById(&#39;res_at&#39;).innerText = at.toFixed(2);
        document.getElementById(&#39;res_an&#39;).innerText = an.toFixed(2);
        document.getElementById(&#39;res_rho&#39;).innerText = rho.toFixed(2);
        document.getElementById(&#39;res_curv_an&#39;).innerText = curv_an.toFixed(2);
    }

    // Kinetics Calculation Block
    function calcKinetics() {
        // Inputs
        const m = parseFloat(document.getElementById(&#39;mass&#39;).value) || 0;
        const k = parseFloat(document.getElementById(&#39;rog&#39;).value) || 0;
        const Fc = parseFloat(document.getElementById(&#39;force&#39;).value) || 0;
        const angleDeg = parseFloat(document.getElementById(&#39;angle&#39;).value) || 0;
        const ds = parseFloat(document.getElementById(&#39;disp&#39;).value) || 0;
        
        const ks = parseFloat(document.getElementById(&#39;ks&#39;).value) || 0;
        const spring_s = parseFloat(document.getElementById(&#39;spring_s&#39;).value) || 0;
        const eff = parseFloat(document.getElementById(&#39;efficiency&#39;).value) || 1;
        const cor = parseFloat(document.getElementById(&#39;cor&#39;).value) || 0;
        
        // Grab context from Kinematics outputs dynamically
        const current_v = parseFloat(document.getElementById(&#39;res_v&#39;).innerText) || 0;
        const current_v0 = parseFloat(document.getElementById(&#39;v0&#39;).value) || 0;
        const ac_val = parseFloat(document.getElementById(&#39;ac&#39;).value) || 0;

        // 1. Mass Profile
        const Ig = m * (k * k);

        // 2. Force &amp; Work
        const angleRad = angleDeg * (Math.PI / 180);
        const U_F = Fc * Math.cos(angleRad) * ds;
        const F_req = m * ac_val; // Required force for specified linear acceleration

        // 3. Energy Metrics
        const Ve = 0.5 * ks * (spring_s * spring_s);
        const KE = 0.5 * m * (current_v * current_v);

        // 4. Power &amp; Efficiency Profile
        // P = F * v (Using horizontal force component at execution velocity)
        const P_out = (Fc * Math.cos(angleRad)) * current_v0; 
        const P_in = eff &gt; 0 ? (P_out / eff) : 0;

        // 5. Momentum Collision Check
        // e = v_sep / v_appr -&gt; Relative separation speed across a boundary plane
        const v_sep = cor * current_v;

        // Render Outputs
        document.getElementById(&#39;res_ig&#39;).innerText = Ig.toFixed(4);
        document.getElementById(&#39;res_f_req&#39;).innerText = F_req.toFixed(2);
        document.getElementById(&#39;res_uf&#39;).innerText = U_F.toFixed(2);
        document.getElementById(&#39;res_ve&#39;).innerText = Ve.toFixed(2);
        document.getElementById(&#39;res_ke&#39;).innerText = KE.toFixed(2);
        document.getElementById(&#39;res_pout&#39;).innerText = P_out.toFixed(2);
        document.getElementById(&#39;res_pin&#39;).innerText = P_in.toFixed(2);
        document.getElementById(&#39;res_vsep&#39;).innerText = v_sep.toFixed(2);
    }

    // Run initial execution loops on initialization
    window.onload = function() {
        calcKinematics();
        calcKinetics();
    };
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/06/fundamental-dynamics.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-1431075268105714920</guid><pubDate>Thu, 28 May 2026 06:02:03 +0000</pubDate><atom:updated>2026-06-22T19:22:36.554+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Bridge</category><category domain="http://www.blogger.com/atom/ns#">Building</category><category domain="http://www.blogger.com/atom/ns#">Design calculations</category><category domain="http://www.blogger.com/atom/ns#">Earth retaining structures</category><category domain="http://www.blogger.com/atom/ns#">Structural Analysis</category><title>Tool for analysis of Isolated footing subjected to axial load and high biaxial moments</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  
    &lt;title&gt;Rigorous 5-Case Biaxial Footing Analyzer &amp; Report Generator&lt;/title&gt;
&lt;style&gt;
    /* ==========================================
       GLOBAL APP WRAPPER &amp; RESET FOR BLOGGER
       ========================================== */
    .app-viewport-wrapper {
        box-sizing: border-box;
        width: 100%;
        font-family: &#39;Segoe UI&#39;, -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
        line-height: 1.5;
        margin: 15px auto;
        padding: 0;
    }
    
    .app-viewport-wrapper *, 
    .app-viewport-wrapper *:before, 
    .app-viewport-wrapper *:after {
        box-sizing: inherit;
    }

    /* ==========================================
       SCREEN ARCHITECTURE (DARK APPLICATION UI)
       ========================================== */
    .app-container {
        max-width: 100%; /* Ensures it never overflows the Blogger post column */
        width: 1400px;
        margin: 0 auto;
        background: #1e293b;
        color: #f8fafc;
        border-radius: 12px;
        box-shadow: 0 10px 25px rgba(0,0,0,0.25);
        padding: 25px;
    }
    
    .app-container header {
        background: linear-gradient(135deg, #0f172a 0%, #111827 100%);
        color: #ffffff;
        padding: 25px;
        border-radius: 8px;
        margin-bottom: 25px;
        box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    }
    
    .app-container h1 { 
        color: #38bdf8; 
        font-size: 24px; 
        text-transform: uppercase; 
        margin: 0 0 5px 0; 
        border-bottom: 2px solid #475569; 
        padding-bottom: 10px;
    }
    
    .app-container h2 { 
        color: #f1f5f9; 
        font-size: 16px; 
        margin: 20px 0 10px 0; 
        border-left: 4px solid #38bdf8; 
        padding-left: 8px;
        border-bottom: none;
        padding-bottom: 0;
    }
    
    .app-container h3 { 
        color: #38bdf8; 
        margin-top: 20px; 
        font-size: 16px;
    }

    /* Interactive Layout Grid */
    .main-grid {
        display: grid;
        grid-template-columns: 1fr 1.3fr;
        gap: 25px;
    }
    
    @media (max-width: 900px) {
        .main-grid {
            grid-template-columns: 1fr; /* Responsive fallback for phones/tablets */
        }
    }

    /* Cards &amp; Inputs */
    .input-card {
        background: #334155;
        padding: 20px;
        border-radius: 8px;
        border: 1px solid #475569;
    }
    
    .app-container label { 
        display: block; 
        font-size: 13px; 
        font-weight: 600; 
        margin-top: 12px; 
        color: #cbd5e1; 
    }
    
    .app-container input { 
        width: 100%; 
        padding: 10px; 
        margin: 5px 0 12px 0; 
        background: #1e293b; 
        border: 1px solid #475569; 
        border-radius: 6px; 
        color: #ffffff; 
    }
    
    .app-container input:focus {
        outline: 2px solid #0ea5e9;
        border-color: transparent;
    }

    /* Dynamic Buttons */
    .btn { 
        width: 100%; 
        padding: 12px; 
        font-weight: bold; 
        border-radius: 6px; 
        cursor: pointer; 
        border: none; 
        transition: background 0.2s ease-in-out; 
        margin-bottom: 10px; 
        font-size: 14px; 
    }
    .btn-calc { background: #0284c7; color: #ffffff; }
    .btn-calc:hover { background: #0369a1; }
    .btn-pdf { background: #ef4444; color: #ffffff; }
    .btn-pdf:hover { background: #dc2626; }
    
    /* Interactive View Tables */
    .app-container table { 
        width: 100%; 
        border-collapse: collapse; 
        margin: 15px 0; 
        font-size: 13px; 
        background: #1e293b; 
        border-radius: 6px;
        overflow: hidden;
        box-shadow: none;
    }
    .app-container th, .app-container td { 
        border: 1px solid #475569; 
        padding: 10px 12px; 
        text-align: left; 
    }
    .app-container th { 
        background: #0f172a; 
        color: #38bdf8; 
        font-weight: 600;
    }
    .app-container td { color: #f8fafc; }

    /* Component Badges */
    .badge { background: #0ea5e9; padding: 3px 8px; border-radius: 4px; font-weight: bold; font-family: monospace; color: white;}
    .badge-alert { background: #f59e0b; }
    .badge-crit { background: #ef4444; }
    
    canvas { 
        background: #ffffff; 
        border-radius: 8px; 
        border: 1px solid #475569;
        width: 100%; 
        height: auto; 
        margin-top: 15px; 
        display: block;
    }
    
    code {
        font-family: &quot;SFMono-Regular&quot;, Consolas, &quot;Liberation Mono&quot;, Menlo, monospace;
        background-color: #f1f5f9;
        padding: 2px 6px;
        border-radius: 4px;
        font-size: 0.9em;
        color: #0f172a;
    }

    /* ==========================================
       TECHNICAL DOCUMENT / USER GUIDE VIEW (LIGHT INTERFACE)
       ========================================== */
    .guide-container {
        background: #ffffff;
        color: #334155;
        border: 1px solid #e2e8f0;
        border-radius: 12px;
        padding: 30px;
        margin-top: 30px;
        box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
    }
    .guide-container h2 {
        color: #0f172a; 
        font-size: 20px;
        border-bottom: 2px solid #e2e8f0; 
        padding-bottom: 8px; 
        margin-top: 35px;
    }
    .guide-container h3 { color: #0284c7; margin-top: 25px; font-size: 16px; }
    .guide-container table {
        width: 100%;
        border-collapse: collapse;
        margin: 20px 0;
        background: #ffffff;
        border-radius: 8px;
        overflow: hidden;
        border: 1px solid #e2e8f0;
    }
    .guide-container th, .guide-container td {
        padding: 12px 15px;
        text-align: left;
        border-bottom: 1px solid #e2e8f0;
        color: #334155;
    }
    .guide-container th { background-color: #f1f5f9; color: #1e293b; font-weight: 600; border: none; }
    .guide-container ul { padding-left: 20px; }
    .guide-container li { margin-bottom: 8px; }
    
    /* Technical Alert Containers */
    .alert-box {
        background-color: #fff1f2;
        border-left: 4px solid #f43f5e;
        padding: 15px;
        border-radius: 0 8px 8px 0;
        margin: 20px 0;
        color: #9f1239;
    }
    .info-box {
        background-color: #f0fdf4;
        border-left: 4px solid #22c55e;
        padding: 15px;
        border-radius: 0 8px 8px 0;
        margin: 20px 0;
        color: #166534;
    }
    .case-card {
        background: #f8fafc;
        border: 1px solid #e2e8f0;
        border-radius: 8px;
        padding: 20px;
        margin-bottom: 15px;
    }

    /* Hidden cleanly on workspace UI screen views */
    #pdfReportLayout { display: none; }

    /* ==========================================
       STRICT PRINT STYLESHEET (PDF EXPORT ENGINE)
       ========================================== */
    @media print {
        @page {
            size: A4 portrait;
            margin: 20mm 15mm 20mm 15mm;
        }
        body {
            background: #ffffff !important;
            color: #0f172a !important;
            font-family: &#39;Segoe UI&#39;, Arial, sans-serif !important;
            font-size: 11pt !important;
            padding: 0 !important;
            margin: 0 !important;
        }
        .app-viewport-wrapper, .app-container, .guide-container, .no-print, canvas {
            display: none !important; 
        }
        #pdfReportLayout {
            display: block !important; 
        }
        .pdf-header {
            border-bottom: 3px solid #1e3a8a;
            padding-bottom: 5px;
            margin-bottom: 20px;
        }
        .pdf-header h1 {
            color: #1e3a8a !important;
            font-size: 24pt !important;
            margin: 0 !important;
            border: none !important;
        }
        #pdfReportLayout h2 {
            color: #1e40af !important;
            font-size: 14pt !important;
            margin: 20px 0 8px 0 !important;
            border-left: 4px solid #1e40af !important;
            padding-left: 6px !important;
            border-bottom: none !important;
            page-break-after: avoid !important;
        }
        #pdfReportLayout table {
            width: 100% !important;
            margin: 12px 0 !important;
            background: transparent !important;
            page-break-inside: avoid !important;
            border-collapse: collapse !important;
        }
        #pdfReportLayout th {
            background-color: #1e3a8a !important;
            color: white !important;
            font-weight: 600 !important;
            -webkit-print-color-adjust: exact;
            print-color-adjust: exact;
        }
        #pdfReportLayout td, #pdfReportLayout th {
            border: 1px solid #cbd5e1 !important;
            padding: 8px 10px !important;
            color: #0f172a !important;
            font-size: 10pt !important;
        }
        #pdfReportLayout tr:nth-child(even) {
            background-color: #f8fafc !important;
            -webkit-print-color-adjust: exact;
            print-color-adjust: exact;
        }
        .pdf-diagram {
            text-align: center;
            margin: 20px 0;
            page-break-inside: avoid;
        }
        .pdf-diagram img {
            max-width: 80%;
            border: 1px solid #94a3b8;
            border-radius: 6px;
        }
        .case-banner {
            background: #fef3c7 !important;
            border-left: 5px solid #d97706 !important;
            padding: 12px;
            margin: 15px 0;
            color: #78350f !important;
            -webkit-print-color-adjust: exact;
            print-color-adjust: exact;
        }
        .sign-row {
            margin-top: 50px;
            page-break-inside: avoid;
        }
    }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;app-container&quot;&gt;

    &lt;h1&gt;
        Rigorous Biaxial Footing Analyzer
        (All 5 Analytical Cases)
    &lt;/h1&gt;

    &lt;div class=&quot;main-grid&quot;&gt;

        &lt;!-- ===================================== --&gt;
        &lt;!-- INPUT PANEL --&gt;
        &lt;!-- ===================================== --&gt;

        &lt;div class=&quot;input-card no-print&quot;&gt;

            &lt;h2&gt;Design Load Inputs &amp; Geometry&lt;/h2&gt;

            &lt;label for=&quot;L&quot;&gt;
                Footing Length L (m)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;L&quot;
                value=&quot;3.00&quot;
                step=&quot;0.05&quot;
                min=&quot;0.01&quot;
            &gt;

            &lt;label for=&quot;B&quot;&gt;
                Footing Width B (m)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;B&quot;
                value=&quot;2.50&quot;
                step=&quot;0.05&quot;
                min=&quot;0.01&quot;
            &gt;

            &lt;label for=&quot;P&quot;&gt;
                Axial Structural Load P (kN)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;P&quot;
                value=&quot;1500&quot;
                step=&quot;25&quot;
                min=&quot;0.01&quot;
            &gt;

            &lt;label for=&quot;Mx&quot;&gt;
                Moment Mx (kNm, about X-Axis)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;Mx&quot;
                value=&quot;650&quot;
                step=&quot;10&quot;
            &gt;

            &lt;label for=&quot;My&quot;&gt;
                Moment My (kNm, about Y-Axis)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;My&quot;
                value=&quot;550&quot;
                step=&quot;10&quot;
            &gt;

            &lt;!-- ===================================== --&gt;
            &lt;!-- GEOTECHNICAL PARAMETERS --&gt;
            &lt;!-- ===================================== --&gt;

            &lt;h2&gt;Geotechnical &amp; Stability Parameters&lt;/h2&gt;

            &lt;label for=&quot;qall&quot;&gt;
                Allowable SBC q&lt;sub&gt;all&lt;/sub&gt; (kN/m²)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;qall&quot;
                value=&quot;250&quot;
                step=&quot;5&quot;
                min=&quot;1&quot;
            &gt;

            &lt;label for=&quot;mu&quot;&gt;
                Coefficient of Friction μ
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;mu&quot;
                value=&quot;0.50&quot;
                step=&quot;0.05&quot;
                min=&quot;0&quot;
            &gt;

            &lt;label for=&quot;H&quot;&gt;
                Factored Horizontal Load H (kN)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;H&quot;
                value=&quot;120&quot;
                step=&quot;5&quot;
                min=&quot;0&quot;
            &gt;

            &lt;label for=&quot;t&quot;&gt;
                Footing Thickness t (m)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;t&quot;
                value=&quot;0.75&quot;
                step=&quot;0.05&quot;
                min=&quot;0.05&quot;
            &gt;

            &lt;label for=&quot;cx&quot;&gt;
                Column Size Along X (m)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;cx&quot;
                value=&quot;0.50&quot;
                step=&quot;0.05&quot;
                min=&quot;0.05&quot;
            &gt;

            &lt;label for=&quot;cy&quot;&gt;
                Column Size Along Y (m)
            &lt;/label&gt;
            &lt;input
                type=&quot;number&quot;
                id=&quot;cy&quot;
                value=&quot;0.50&quot;
                step=&quot;0.05&quot;
                min=&quot;0.05&quot;
            &gt;

            &lt;!-- ===================================== --&gt;
            &lt;!-- ACTION BUTTONS --&gt;
            &lt;!-- ===================================== --&gt;

            &lt;button
                class=&quot;btn btn-calc&quot;
                onclick=&quot;evaluateFootingMechanics()&quot;
                type=&quot;button&quot;
            &gt;
                Compute Metrics
            &lt;/button&gt;

            &lt;button
                class=&quot;btn btn-pdf&quot;
                onclick=&quot;generateProfessionalReportPDF()&quot;
                type=&quot;button&quot;
            &gt;
                📄 Export Calculation PDF
            &lt;/button&gt;

        &lt;/div&gt;
      &lt;/div&gt;

        &lt;!-- ===================================== --&gt;
        &lt;!-- RESULTS PANEL --&gt;
        &lt;!-- ===================================== --&gt;

        &lt;div&gt;

            &lt;div
                class=&quot;input-card&quot;
                style=&quot;background:#1e293b;&quot;
            &gt;

                &lt;h2&gt;
                    Current Execution Matrix Preview
                &lt;/h2&gt;

                &lt;div id=&quot;screenReadout&quot;&gt;
                    Run computation to verify active stress blocks.
                &lt;/div&gt;

            &lt;/div&gt;

            &lt;canvas
                id=&quot;blueprintCanvas&quot;
                width=&quot;600&quot;
                height=&quot;500&quot;
            &gt;&lt;/canvas&gt;

        &lt;/div&gt;

    &lt;/div&gt;

&lt;!-- ===================================== --&gt;
&lt;!-- PDF REPORT LAYOUT --&gt;
&lt;!-- ===================================== --&gt;

&lt;div id=&quot;pdfReportLayout&quot;&gt;

    &lt;!-- HEADER --&gt;

    &lt;div class=&quot;pdf-header&quot;&gt;

        &lt;h1&gt;
            Structural Engineering Calculation Document
        &lt;/h1&gt;

        &lt;div
            style=&quot;
                font-size:10pt;
                color:#475569;
                font-weight:bold;
            &quot;
        &gt;
            RIGID SHALLOW FOOTING BIAXIAL
            PRESSURE REPORT
            (ALL 5 GEOMETRIC CASES)
        &lt;/div&gt;

    &lt;/div&gt;

    &lt;p&gt;
        &lt;strong&gt;Generation Date:&lt;/strong&gt;
        &lt;span id=&quot;pdfTime&quot;&gt;&lt;/span&gt;
    &lt;/p&gt;

    &lt;!-- SECTION 1 --&gt;

    &lt;h2&gt;
        1. Input Geometric Bounds &amp; Vector Loading
    &lt;/h2&gt;

    &lt;div id=&quot;pdfInputsTable&quot;&gt;&lt;/div&gt;

    &lt;!-- SECTION 2 --&gt;

    &lt;h2&gt;
        2. Stress Block Case Evaluation Framework
    &lt;/h2&gt;

    &lt;div id=&quot;pdfCaseDetails&quot;&gt;&lt;/div&gt;

    &lt;!-- SECTION 3 --&gt;

    &lt;h2&gt;
        3. Soil Pressure Structural Response Matrix
    &lt;/h2&gt;

    &lt;div id=&quot;pdfPressuresTable&quot;&gt;&lt;/div&gt;

    &lt;!-- SECTION 4 --&gt;

    &lt;h2 style=&quot;page-break-before: always;&quot;&gt;
        4. Soil-Structure Separation Vector Diagram
    &lt;/h2&gt;

    &lt;p&gt;
        The engineering map below outlines the
        precise boundary coordinates of the
        Neutral Axis and associated
        zero-pressure uplift regions.
    &lt;/p&gt;

    &lt;div class=&quot;pdf-diagram&quot;&gt;

        &lt;img
            id=&quot;pdfStaticImageBridge&quot;
            alt=&quot;Footing Structural Analysis Diagram&quot;
        &gt;

    &lt;/div&gt;

    &lt;!-- SECTION 5 --&gt;

    &lt;h2&gt;
        5. Compliance Summary &amp;
        Professional Validation Sign-Off
    &lt;/h2&gt;

    &lt;ul&gt;

        &lt;li&gt;
            The internal calculation engine checks
            soil-structure lift-off for all
            five biaxial loading cases.
        &lt;/li&gt;

        &lt;li&gt;
            Peak edge bearing pressure
            p&lt;sub&gt;max&lt;/sub&gt; must remain within
            allowable SBC limits.
        &lt;/li&gt;

        &lt;li&gt;
            Reinforcement enhancement is required
            if uplift or severe stress
            concentration develops.
        &lt;/li&gt;

    &lt;/ul&gt;

    &lt;!-- SECTION 6 --&gt;

    &lt;h2&gt;
        6. Stability &amp; Geotechnical Validation
    &lt;/h2&gt;

    &lt;div id=&quot;pdfStabilityChecks&quot;&gt;&lt;/div&gt;

    &lt;!-- SIGNATURE BLOCK --&gt;

    &lt;div class=&quot;sign-row&quot;&gt;

        &lt;table
            style=&quot;
                border:none !important;
                margin-top:60px;
                width:100%;
            &quot;
        &gt;

            &lt;tr
                style=&quot;
                    background:transparent !important;
                &quot;
            &gt;

                &lt;td
                    style=&quot;
                        border:none !important;
                        text-align:left;
                        width:50%;
                        padding:0;
                    &quot;
                &gt;

                    &lt;div
                        style=&quot;
                            border-top:1px solid #94a3b8;
                            width:220px;
                            padding-top:5px;
                            color:#475569;
                            font-size:10pt;
                        &quot;
                    &gt;
                        Prepared By:
                        Structural Engineer
                    &lt;/div&gt;

                &lt;/td&gt;

                &lt;td
                    style=&quot;
                        border:none !important;
                        text-align:right;
                        width:50%;
                        padding:0;
                    &quot;
                &gt;

                    &lt;div
                        style=&quot;
                            border-top:1px solid #94a3b8;
                            width:220px;
                            padding-top:5px;
                            color:#475569;
                            font-size:10pt;
                            display:inline-block;
                            text-align:left;
                        &quot;
                    &gt;
                        Approved By:
                        Principal Structural Engineer
                    &lt;/div&gt;

                &lt;/td&gt;

            &lt;/tr&gt;

        &lt;/table&gt;

    &lt;/div&gt;

&lt;/div&gt;
  
  &lt;header&gt;
        &lt;h1&gt;Footing Mechanics Analysis Engine&lt;/h1&gt;
        &lt;p&gt;User Documentation &amp; Mathematical Reference Guide&lt;/p&gt;
    &lt;/header&gt;

    &lt;main&gt;
        &lt;section id=&quot;overview&quot;&gt;
            &lt;h2&gt;1. System Overview&lt;/h2&gt;
            &lt;p&gt;
                The provided JavaScript analysis module evaluates the soil-structure interaction behavior of a rigid rectangular shallow foundation subjected to &lt;strong&gt;axial load ($P$) and biaxial flexure ($M_x, M_y$)&lt;/strong&gt;. It evaluates structural eccentricity ratios, segments the structural response into one of five critical contact mechanics zones, checks geotechnical limits, and renders a live, scaled engineering diagram via an HTML5 canvas.
            &lt;/p&gt;
        &lt;/section&gt;

        &lt;section id=&quot;inputs&quot;&gt;
            &lt;h2&gt;2. Expected Input Fields&lt;/h2&gt;
            &lt;p&gt;The calculation engine binds data from your HTML template via &lt;code&gt;document.getElementById()&lt;/code&gt;. Ensure the following IDs match your input fields exactly:&lt;/p&gt;
            
            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Element ID&lt;/th&gt;
                        &lt;th&gt;Parameter Name&lt;/th&gt;
                        &lt;th&gt;Engineering Description&lt;/th&gt;
                        &lt;th&gt;Expected Unit&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;L&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Footing Length&lt;/td&gt;&lt;td&gt;Dimension parallel to the X-axis (Must be &amp;gt; 0)&lt;/td&gt;&lt;td&gt;meters (m)&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;B&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Footing Width&lt;/td&gt;&lt;td&gt;Dimension parallel to the Y-axis (Must be &amp;gt; 0)&lt;/td&gt;&lt;td&gt;meters (m)&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;P&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Axial Load&lt;/td&gt;&lt;td&gt;Vertical concentric structural load (Must be &amp;gt; 0)&lt;/td&gt;&lt;td&gt;kiloNewtons (kN)&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;Mx&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Moment X&lt;/td&gt;&lt;td&gt;Overturning moment rotating around the X-axis&lt;/td&gt;&lt;td&gt;kN·m&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;My&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Moment Y&lt;/td&gt;&lt;td&gt;Overturning moment rotating around the Y-axis&lt;/td&gt;&lt;td&gt;kN·m&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;qall&lt;/code&gt;&lt;/td&gt;&lt;td&gt;SBC&lt;/td&gt;&lt;td&gt;Allowable Safe Bearing Capacity of the underlying stratum&lt;/td&gt;&lt;td&gt;kN/m²&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;mu&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Friction Coefficient ($\mu$)&lt;/td&gt;&lt;td&gt;Interface sliding friction factor between concrete and soil&lt;/td&gt;&lt;td&gt;dimensionless&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Horizontal Load&lt;/td&gt;&lt;td&gt;Lateral shear forces driving sliding tendencies&lt;/td&gt;&lt;td&gt;kiloNewtons (kN)&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;t&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Footing Thickness&lt;/td&gt;&lt;td&gt;Total depth/thickness of concrete structural raft slab&lt;/td&gt;&lt;td&gt;meters (m)&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;cx&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Column Width (X)&lt;/td&gt;&lt;td&gt;Structural base column size in the X-direction&lt;/td&gt;&lt;td&gt;meters (m)&lt;/td&gt;&lt;/tr&gt;
                    &lt;tr&gt;&lt;td&gt;&lt;code&gt;cy&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Column Depth (Y)&lt;/td&gt;&lt;td&gt;Structural base column size in the Y-direction&lt;/td&gt;&lt;td&gt;meters (m)&lt;/td&gt;&lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/section&gt;

        &lt;section id=&quot;mechanics-cases&quot;&gt;
            &lt;h2&gt;3. Structural Contact Mechanics &amp;amp; Case Zonation&lt;/h2&gt;
            &lt;p&gt;Eccentricities are mapped into ratio benchmarks ($r_x = \frac{|M_y|/P}{L}$ and $r_y = \frac{|M_x|/P}{B}$). The algorithm processes the foundation behavior using five distinct kinematic conditions:&lt;/p&gt;

            &lt;div class=&quot;case-card&quot;&gt;
                &lt;h3&gt;Case I: Full Compression ($r_x \le \frac{1}{6}$ AND $r_y \le \frac{1}{6}$)&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Behavior:&lt;/strong&gt; The resultant load stays perfectly within the traditional &quot;Kern&quot; or middle-third bounds. Zero uplift occurs across the envelope.&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;Governing Equation:&lt;/strong&gt; $$q = \frac{P}{A} \pm \frac{6M_x}{LB^2} \pm \frac{6M_y}{BL^2}$$&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;case-card&quot;&gt;
                &lt;h3&gt;Case II: One-Way Lift-Off Along Length ($r_x &amp;gt; \frac{1}{6}$ AND $r_y \le \frac{1}{6}$)&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Behavior:&lt;/strong&gt; Excessive longitudinal eccentricity induces local heel separation. The Neutral Axis runs cleanly parallel to the footing width.&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;Effective Length ($L_{eff}$):&lt;/strong&gt; $\alpha \cdot L$, where $\alpha = 1.5 - 3r_x$&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;case-card&quot;&gt;
                &lt;h3&gt;Case III: One-Way Lift-Off Along Width ($r_y &amp;gt; \frac{1}{6}$ AND $r_x \le \frac{1}{6}$)&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Behavior:&lt;/strong&gt; Excessive lateral eccentricity induces side separation. The Neutral Axis runs parallel to the footing length.&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;Effective Width ($B_{eff}$):&lt;/strong&gt; $\beta \cdot B$, where $\beta = 1.5 - 3r_y$&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;case-card&quot;&gt;
                &lt;h3&gt;Case IV: Pentagonal Compression Zone ($r_x &amp;gt; \frac{1}{6}$, $r_y &amp;gt; \frac{1}{6}$, and $r_x, r_y &amp;lt; 0.5$)&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Behavior:&lt;/strong&gt; Significant biaxial bending causes a single localized corner of the footing to lift off the soil stratum. The effective bearing footprint shifts into a pentagonal layout.&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;case-card&quot;&gt;
                &lt;h3&gt;Case V: Triangular Compression Block (Severe Biaxial Overturning)&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Behavior:&lt;/strong&gt; High over-turning moment triggers severe global tilt. Only an isolated triangular wedge remains under active structural compression.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/section&gt;

        &lt;section id=&quot;safety-checks&quot;&gt;
            &lt;h2&gt;4. Automated Geotechnical Safety Frameworks&lt;/h2&gt;
            &lt;p&gt;The code processes and yields key stability triggers inside the target &lt;code&gt;#screenReadout&lt;/code&gt; wrapper element:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Allowable SBC Validation:&lt;/strong&gt; Compares peak pressure ($q_{max}$) against user-provided &lt;code&gt;qall&lt;/code&gt;. Flags an explicit, colored &lt;code&gt;EXCEEDS ALLOWABLE SBC&lt;/code&gt; alert if structural stresses exceed capacities.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Factor of Safety (FOS) Calculations:&lt;/strong&gt; Evaluates safety ratios against lateral sliding structural failures ($\frac{\mu \cdot P}{H}$) and mechanical overturning actions ($\frac{\text{Resisting Moment}}{\text{Overturning Moment}}$).&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Punching Shear Assessment:&lt;/strong&gt; Calculates uniform out-of-plane continuous column punching boundary forces using critical perimeter tracking formulas: $$2 \cdot ((c_x + t) + (c_y + t))$$ Striking thresholds exceeding 1000 kN/m² throws an immediate &lt;code&gt;CRITICAL PUNCHING SHEAR&lt;/code&gt; warning.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;div class=&quot;alert-box&quot;&gt;
                &lt;strong&gt;Critical Structural Warnings Triggered by the Engine:&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;code&gt;HIGH DIFFERENTIAL SETTLEMENT RISK&lt;/code&gt;: Automatically triggers if your effective compressed structural bearing contact space falls below &lt;strong&gt;70%&lt;/strong&gt;.&lt;/li&gt;
                    &lt;li&gt;&lt;code&gt;HEAVY TOP REINFORCEMENT REQUIRED&lt;/code&gt;: Triggers if tension/uplift is present, or if soil bearing utilization crosses beyond &lt;strong&gt;85%&lt;/strong&gt;.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
        &lt;/section&gt;

        &lt;section id=&quot;visualization&quot;&gt;
            &lt;h2&gt;5. Dynamic Blueprint Visualization Canvas&lt;/h2&gt;
            &lt;p&gt;
                The module includes a secondary renderer function named &lt;code&gt;renderEngineeringBlueprint()&lt;/code&gt; which handles real-time scaling and context vector drawing on an HTML canvas element tagged with &lt;code&gt;id=&quot;blueprintCanvas&quot;&lt;/code&gt;.
            &lt;/p&gt;
            &lt;div class=&quot;info-box&quot;&gt;
                &lt;strong&gt;Visual Map Indicators Generated on Canvas:&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;strong style=&quot;color: #0284c7;&quot;&gt;Sky Blue Boundaries:&lt;/strong&gt; The nominal footprint boundaries of your structural base concrete footing.&lt;/li&gt;
                    &lt;li&gt;&lt;strong style=&quot;color: #3b82f6;&quot;&gt;Shaded Inner Polygon:&lt;/strong&gt; The verified region under active structural compression.&lt;/li&gt;
                    &lt;li&gt;&lt;strong style=&quot;color: #dc2626;&quot;&gt;Red Dashed Line:&lt;/strong&gt; The computed Neutral Axis line separating compression zones from soil lift-off regions.&lt;/li&gt;
                    &lt;li&gt;&lt;strong style=&quot;color: #16a34a;&quot;&gt;Green Vector Line:&lt;/strong&gt; Vector highlighting resultant load path displacement showing eccentricity coordinates relative to structural center point.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
        &lt;/section&gt;
    &lt;/main&gt;

&lt;script&gt;
let calculationArchive = null;

function evaluateFootingMechanics() {

    const L = parseFloat(document.getElementById(&#39;L&#39;).value);
    const B = parseFloat(document.getElementById(&#39;B&#39;).value);
    const P = parseFloat(document.getElementById(&#39;P&#39;).value);
    const Mx = parseFloat(document.getElementById(&#39;Mx&#39;).value);
    const My = parseFloat(document.getElementById(&#39;My&#39;).value);

    const qall = parseFloat(document.getElementById(&#39;qall&#39;).value);
    const mu = parseFloat(document.getElementById(&#39;mu&#39;).value);
    const H = parseFloat(document.getElementById(&#39;H&#39;).value);
    const t = parseFloat(document.getElementById(&#39;t&#39;).value);
    const cx = parseFloat(document.getElementById(&#39;cx&#39;).value);
    const cy = parseFloat(document.getElementById(&#39;cy&#39;).value);

    // ==========================================
    // VALIDATION
    // ==========================================
    if (
        isNaN(L) || isNaN(B) || isNaN(P) ||
        L &lt;= 0 || B &lt;= 0 || P &lt;= 0
    ) {
        alert(&quot;L, B and P must be greater than zero.&quot;);
        return;
    }

    // ==========================================
    // ECCENTRICITIES
    // ==========================================
    const ex = Math.abs(My / P);
    const ey = Math.abs(Mx / P);

    const rx = ex / L;
    const ry = ey / B;

    const qavg = P / (L * B);

    // ==========================================
    // INITIALIZE VARIABLES
    // ==========================================
    let caseName = &quot;&quot;;
    let caseDesc = &quot;&quot;;

    let pmax = 0;
    let pmin = 0;

    let alpha = 0;
    let beta = 0;

    let hasUplift = false;

    let naPoints = [];

    let detailedSteps = &quot;&quot;;

    let effectiveArea = L * B;

    let governingEquation = &quot;&quot;;

    let contactPercentage = 100;

    let bearingUtilization = 0;

    let sbcStatus = &quot;SAFE&quot;;

    let fosSliding = 999;

    let fosOverturning = 999;

    let resultantEccentricity = 0;

    let resultantAngle = 0;

    let settlementWarning = &quot;NORMAL&quot;;

    let reinforcementTrigger = &quot;NORMAL&quot;;

    let punchingShear = 0;

    let punchingStatus = &quot;SAFE&quot;;

    let compressionPolygon = [];

    // ==========================================
    // CASE I
    // FULL COMPRESSION
    // ==========================================
    if (
        rx &lt;= 1/6 &amp;&amp;
        ry &lt;= 1/6
    ) {

        caseName = &quot;Case I: Full Compression&quot;;

        caseDesc =
            &quot;Entire footing remains in compression.&quot;;

        governingEquation =
            &quot;q = P/A ± 6Mx/(LB²) ± 6My/(BL²)&quot;;

        pmax =
            qavg * (1 + 6 * rx + 6 * ry);

        pmin =
            qavg * (1 - 6 * rx - 6 * ry);

        hasUplift = false;

        compressionPolygon = [
            [-L/2, -B/2],
            [ L/2, -B/2],
            [ L/2,  B/2],
            [-L/2,  B/2]
        ];

        detailedSteps = `
&lt;h3&gt;Case I: Full Compression&lt;/h3&gt;

&lt;p&gt;
Both eccentricities lie within kern limits.
&lt;/p&gt;

&lt;p&gt;
rₓ = ${rx.toFixed(4)} ≤ 1/6
&lt;/p&gt;

&lt;p&gt;
rᵧ = ${ry.toFixed(4)} ≤ 1/6
&lt;/p&gt;

&lt;p&gt;
Maximum Pressure =
&lt;strong&gt;${pmax.toFixed(3)} kN/m²&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Minimum Pressure =
&lt;strong&gt;${pmin.toFixed(3)} kN/m²&lt;/strong&gt;
&lt;/p&gt;
`;
    }
  
  

// ====================================================================================
    // CASE II
    // UPLIFT ALONG LENGTH
// ====================================================================================
  
  
  
    else if (
        rx &gt; 1/6 &amp;&amp;
        ry &lt;= 1/6
    ) {

        caseName =
            &quot;Case II: One-Way Lift-Off Along Length&quot;;

        caseDesc =
            &quot;Neutral axis cuts parallel to width.&quot;;

        hasUplift = true;

        alpha =
            Math.max(0.05, 1.5 - 3 * rx);

        const Leff = alpha * L;

        effectiveArea = Leff * B;

        pmax =
            (2 * P) / (3 * effectiveArea);

        pmin = 0;

        const xNA =
            L / 2 - Leff;

        naPoints = [
            { x: xNA, y: -B/2 },
            { x: xNA, y:  B/2 }
        ];

        compressionPolygon = [
            [xNA, -B/2],
            [L/2, -B/2],
            [L/2, B/2],
            [xNA, B/2]
        ];

        detailedSteps = `
&lt;h3&gt;Case II: One-Way Lift-Off Along Length&lt;/h3&gt;

&lt;p&gt;
rₓ = ${rx.toFixed(4)} &gt; 1/6
&lt;/p&gt;

&lt;p&gt;
Effective Compression Length =
${Leff.toFixed(3)} m
&lt;/p&gt;

&lt;p&gt;
Effective Area =
${effectiveArea.toFixed(3)} m²
&lt;/p&gt;

&lt;p&gt;
Maximum Pressure =
&lt;strong&gt;${pmax.toFixed(3)} kN/m²&lt;/strong&gt;
&lt;/p&gt;
`;
    }

    // ==========================================
    // CASE III
    // UPLIFT ALONG WIDTH
    // ==========================================
    else if (
        ry &gt; 1/6 &amp;&amp;
        rx &lt;= 1/6
    ) {

        caseName =
            &quot;Case III: One-Way Lift-Off Along Width&quot;;

        caseDesc =
            &quot;Neutral axis cuts parallel to length.&quot;;

        hasUplift = true;

        beta =
            Math.max(0.05, 1.5 - 3 * ry);

        const Beff = beta * B;

        effectiveArea = L * Beff;

        pmax =
            (2 * P) / (3 * effectiveArea);

        pmin = 0;

        const yNA =
            B / 2 - Beff;

        naPoints = [
            { x: -L/2, y: yNA },
            { x:  L/2, y: yNA }
        ];

        compressionPolygon = [
            [-L/2, yNA],
            [L/2, yNA],
            [L/2, B/2],
            [-L/2, B/2]
        ];

        detailedSteps = `
&lt;h3&gt;Case III: One-Way Lift-Off Along Width&lt;/h3&gt;

&lt;p&gt;
rᵧ = ${ry.toFixed(4)} &gt; 1/6
&lt;/p&gt;

&lt;p&gt;
Effective Compression Width =
${Beff.toFixed(3)} m
&lt;/p&gt;

&lt;p&gt;
Effective Area =
${effectiveArea.toFixed(3)} m²
&lt;/p&gt;

&lt;p&gt;
Maximum Pressure =
&lt;strong&gt;${pmax.toFixed(3)} kN/m²&lt;/strong&gt;
&lt;/p&gt;
`;
    }

    // ==========================================
    // CASE IV
    // PENTAGONAL CONTACT
    // ==========================================
    else if (
        rx &gt; 1/6 &amp;&amp;
        ry &gt; 1/6 &amp;&amp;
        rx &lt; 0.5 &amp;&amp;
        ry &lt; 0.5
    ) {

        caseName =
            &quot;Case IV: Pentagonal Compression Zone&quot;;

        caseDesc =
            &quot;Biaxial uplift with partial corner separation.&quot;;

        hasUplift = true;

        alpha =
            Math.max(0.05, 1.5 - 2 * rx);

        beta =
            Math.max(0.05, 1.5 - 2 * ry);

        effectiveArea =
            L * B *
            (
                1 -
                0.5 *
                (1 - alpha) *
                (1 - beta)
            );

        pmax =
            (2 * P) / effectiveArea;

        pmin = 0;

        naPoints = [
            {
                x: -L/2 + alpha * L,
                y: -B/2
            },
            {
                x: -L/2,
                y: -B/2 + beta * B
            }
        ];

        compressionPolygon = [
            [-L/2 + alpha*L, -B/2],
            [L/2, -B/2],
            [L/2, B/2],
            [-L/2, B/2],
            [-L/2, -B/2 + beta*B]
        ];

        detailedSteps = `
&lt;h3&gt;Case IV: Pentagonal Compression Zone&lt;/h3&gt;

&lt;p&gt;
Both eccentricities exceed kern limits.
&lt;/p&gt;

&lt;p&gt;
Effective Area =
${effectiveArea.toFixed(3)} m²
&lt;/p&gt;

&lt;p&gt;
Maximum Pressure =
&lt;strong&gt;${pmax.toFixed(3)} kN/m²&lt;/strong&gt;
&lt;/p&gt;
`;
    }

    // ==========================================
    // CASE V
    // TRIANGULAR CONTACT
    // ==========================================
    else {

        caseName =
            &quot;Case V: Triangular Compression Block&quot;;

        caseDesc =
            &quot;Extreme overturning with triangular compression region.&quot;;

        hasUplift = true;

        alpha =
            Math.max(0.05, 3 * (0.5 - rx));

        beta =
            Math.max(0.05, 3 * (0.5 - ry));

        effectiveArea =
            0.5 * alpha * beta * L * B;

        pmax =
            (3 * P) / effectiveArea;

        pmin = 0;

        naPoints = [
            {
                x: L/2 - alpha*L,
                y: B/2
            },
            {
                x: L/2,
                y: B/2 - beta*B
            }
        ];

        compressionPolygon = [
            [L/2 - alpha*L, B/2],
            [L/2, B/2],
            [L/2, B/2 - beta*B]
        ];

        detailedSteps = `
&lt;h3&gt;Case V: Triangular Compression Block&lt;/h3&gt;

&lt;p&gt;
Extreme biaxial uplift condition.
&lt;/p&gt;

&lt;p&gt;
Effective Area =
${effectiveArea.toFixed(3)} m²
&lt;/p&gt;

&lt;p&gt;
Maximum Pressure =
&lt;strong&gt;${pmax.toFixed(3)} kN/m²&lt;/strong&gt;
&lt;/p&gt;
`;
    }

    // ==========================================
    // COMMON GEOTECHNICAL CHECKS
    // ==========================================
    const grossArea = L * B;

    contactPercentage =
        (effectiveArea / grossArea) * 100;

    bearingUtilization =
        (pmax / qall) * 100;

    sbcStatus =
        pmax &lt;= qall
            ? &quot;SAFE&quot;
            : &quot;EXCEEDS ALLOWABLE SBC&quot;;

    const resistingForce =
        mu * P;

    fosSliding =
        H &gt; 0
            ? resistingForce / H
            : 999;

    const resistingMoment =
        P * (L / 2);

    const overturningMoment =
        Math.sqrt(Mx * Mx + My * My);

    fosOverturning =
        overturningMoment &gt; 0
            ? resistingMoment / overturningMoment
            : 999;

    resultantEccentricity =
        Math.sqrt(ex * ex + ey * ey);

    resultantAngle =
        Math.atan2(ey, ex) * 180 / Math.PI;

    if (contactPercentage &lt; 70) {

        settlementWarning =
            &quot;HIGH DIFFERENTIAL SETTLEMENT RISK&quot;;
    }

    if (
        hasUplift ||
        pmax &gt; qall * 0.85
    ) {

        reinforcementTrigger =
            &quot;HEAVY TOP REINFORCEMENT REQUIRED&quot;;
    }

    const punchingPerimeter =
        2 * ((cx + t) + (cy + t));

    const punchingArea =
        (cx + t) * (cy + t);

    punchingShear =
        (
            P - qavg * punchingArea
        ) /
        (
            punchingPerimeter * t
        );

    if (punchingShear &gt; 1000) {

        punchingStatus =
            &quot;CRITICAL PUNCHING SHEAR&quot;;
    }

    // ==========================================
    // NEUTRAL AXIS ANGLE
    // ==========================================
    let thetaDeg = 0;

    if (naPoints.length === 2) {

        const dy =
            naPoints[1].y - naPoints[0].y;

        const dx =
            naPoints[1].x - naPoints[0].x;

        thetaDeg =
            Math.abs(
                Math.atan2(dy, dx) *
                180 / Math.PI
            );
    }

    // ==========================================
    // SAVE RESULTS
    // ==========================================
    calculationArchive = {

        L,
        B,
        P,
        Mx,
        My,

        ex,
        ey,

        rx,
        ry,

        qavg,

        pmax,
        pmin,

        alpha,
        beta,

        thetaDeg,

        hasUplift,

        naPoints,

        caseName,
        caseDesc,

        detailedSteps,

        effectiveArea,

        governingEquation,

        contactPercentage,

        bearingUtilization,

        sbcStatus,

        fosSliding,

        fosOverturning,

        resultantEccentricity,

        resultantAngle,

        settlementWarning,

        reinforcementTrigger,

        punchingShear,

        punchingStatus,

        compressionPolygon,

        qall
    };

    // ==========================================
    // SCREEN OUTPUT
    // ==========================================
    document.getElementById(
        &#39;screenReadout&#39;
    ).innerHTML = `

&lt;table&gt;

&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Active Case&lt;/td&gt;
&lt;td&gt;
&lt;span class=&quot;badge ${hasUplift ? &#39;badge-alert&#39; : &#39;&#39;}&quot;&gt;
${caseName}
&lt;/span&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Average Pressure&lt;/td&gt;
&lt;td&gt;${qavg.toFixed(2)} kN/m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Maximum Pressure&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;${pmax.toFixed(2)} kN/m²&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Minimum Pressure&lt;/td&gt;
&lt;td&gt;${pmin.toFixed(2)} kN/m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Effective Contact Area&lt;/td&gt;
&lt;td&gt;${effectiveArea.toFixed(2)} m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Contact Area Percentage&lt;/td&gt;
&lt;td&gt;${contactPercentage.toFixed(1)} %&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Bearing Utilization&lt;/td&gt;
&lt;td&gt;${bearingUtilization.toFixed(1)} %&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Allowable SBC Check&lt;/td&gt;
&lt;td&gt;
&lt;b style=&quot;color:${pmax &lt;= qall ? &#39;#22c55e&#39; : &#39;#ef4444&#39;};&quot;&gt;
${sbcStatus}
&lt;/b&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;FOS Against Sliding&lt;/td&gt;
&lt;td&gt;${fosSliding.toFixed(2)}&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;FOS Against Overturning&lt;/td&gt;
&lt;td&gt;${fosOverturning.toFixed(2)}&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Resultant Eccentricity&lt;/td&gt;
&lt;td&gt;${resultantEccentricity.toFixed(3)} m&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Resultant Vector Angle&lt;/td&gt;
&lt;td&gt;${resultantAngle.toFixed(2)}°&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Settlement Warning&lt;/td&gt;
&lt;td&gt;${settlementWarning}&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Reinforcement Trigger&lt;/td&gt;
&lt;td&gt;${reinforcementTrigger}&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Punching Shear Stress&lt;/td&gt;
&lt;td&gt;${punchingShear.toFixed(2)} kN/m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Punching Status&lt;/td&gt;
&lt;td&gt;${punchingStatus}&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;div style=&quot;
margin-top:20px;
padding:15px;
background:#0f172a;
border-radius:8px;
border:1px solid #475569;
line-height:1.7;
&quot;&gt;

&lt;h2 style=&quot;margin-top:0;&quot;&gt;
Detailed Engineering Calculations
&lt;/h2&gt;

${detailedSteps}

&lt;/div&gt;
`;

    renderEngineeringBlueprint(
        L,
        B,
        ex,
        ey,
        hasUplift,
        naPoints,
      	compressionPolygon,
    	pmax
    );
}
  
function renderEngineeringBlueprint(
    L,
    B,
    ex,
    ey,
    hasUplift,
    naPoints,
    compressionPolygon = [],
    pmax = 0
) {

    const canvas = document.getElementById(&#39;blueprintCanvas&#39;);
    const ctx = canvas.getContext(&#39;2d&#39;);

    ctx.clearRect(0, 0, canvas.width, canvas.height);

    const cX = canvas.width / 2;
    const cY = canvas.height / 2;

    const scale = Math.min(
        380 / L,
        300 / B
    );

    const fW = L * scale;
    const fH = B * scale;

    // ==========================================
    // BACKGROUND
    // ==========================================

    ctx.fillStyle = &#39;#ffffff&#39;;
    ctx.fillRect(0, 0, canvas.width, canvas.height);

    // ==========================================
    // FOOTING OUTLINE
    // ==========================================

    ctx.fillStyle = &#39;#f8fafc&#39;;
    ctx.strokeStyle = &#39;#0284c7&#39;;
    ctx.lineWidth = 3;

    ctx.fillRect(
        cX - fW / 2,
        cY - fH / 2,
        fW,
        fH
    );

    ctx.strokeRect(
        cX - fW / 2,
        cY - fH / 2,
        fW,
        fH
    );

    // ==========================================
    // PRESSURE CONTOUR SHADING
    // ==========================================

    const gradient = ctx.createLinearGradient(
        cX - fW / 2,
        cY - fH / 2,
        cX + fW / 2,
        cY + fH / 2
    );

    gradient.addColorStop(0, &#39;rgba(34,197,94,0.15)&#39;);
    gradient.addColorStop(0.5, &#39;rgba(234,179,8,0.18)&#39;);
    gradient.addColorStop(1, &#39;rgba(239,68,68,0.28)&#39;);

    ctx.fillStyle = gradient;

    ctx.fillRect(
        cX - fW / 2,
        cY - fH / 2,
        fW,
        fH
    );

    // ==========================================
    // GRID LINES
    // ==========================================

    ctx.strokeStyle = &#39;#94a3b8&#39;;
    ctx.lineWidth = 1;
    ctx.setLineDash([4, 4]);

    ctx.beginPath();

    ctx.moveTo(cX - fW / 2 - 25, cY);
    ctx.lineTo(cX + fW / 2 + 25, cY);

    ctx.moveTo(cX, cY - fH / 2 - 25);
    ctx.lineTo(cX, cY + fH / 2 + 25);

    ctx.stroke();

    ctx.setLineDash([]);

    // ==========================================
    // AXIS LABELS
    // ==========================================

    ctx.fillStyle = &#39;#334155&#39;;
    ctx.font = &#39;bold 12px Arial&#39;;

    ctx.fillText(&#39;X&#39;, cX + fW / 2 + 10, cY - 8);
    ctx.fillText(&#39;Y&#39;, cX + 8, cY - fH / 2 - 10);

    // ==========================================
    // COMPRESSION POLYGON
    // ==========================================

    if (compressionPolygon.length &gt;= 2) {

        ctx.fillStyle = &#39;rgba(59,130,246,0.22)&#39;;
        ctx.strokeStyle = &#39;#1d4ed8&#39;;
        ctx.lineWidth = 2;

        ctx.beginPath();

        compressionPolygon.forEach((pt, index) =&gt; {

            const px = cX + pt[0] * scale;
            const py = cY - pt[1] * scale;

            if (index === 0) {
                ctx.moveTo(px, py);
            } else {
                ctx.lineTo(px, py);
            }
        });

        ctx.closePath();
        ctx.fill();
        ctx.stroke();

        // Coordinates labels

        ctx.fillStyle = &#39;#1e3a8a&#39;;
        ctx.font = &#39;11px Arial&#39;;

        compressionPolygon.forEach((pt, i) =&gt; {

            const px = cX + pt[0] * scale;
            const py = cY - pt[1] * scale;

            ctx.beginPath();
            ctx.arc(px, py, 4, 0, Math.PI * 2);
            ctx.fill();

            ctx.fillText(
                `P${i+1}(${pt[0].toFixed(2)}, ${pt[1].toFixed(2)})`,
                px + 8,
                py - 8
            );
        });
    }

    // ==========================================
    // RESULTANT LOCATION
    // ==========================================

    const pX = cX + (ex * scale);
    const pY = cY - (ey * scale);

    // vector line

    ctx.strokeStyle = &#39;#16a34a&#39;;
    ctx.lineWidth = 3;

    ctx.beginPath();
    ctx.moveTo(cX, cY);
    ctx.lineTo(pX, pY);
    ctx.stroke();

    // arrow head

    const angle = Math.atan2(
        pY - cY,
        pX - cX
    );

    const arrowLength = 12;

    ctx.beginPath();

    ctx.moveTo(pX, pY);

    ctx.lineTo(
        pX - arrowLength * Math.cos(angle - Math.PI / 6),
        pY - arrowLength * Math.sin(angle - Math.PI / 6)
    );

    ctx.lineTo(
        pX - arrowLength * Math.cos(angle + Math.PI / 6),
        pY - arrowLength * Math.sin(angle + Math.PI / 6)
    );

    ctx.closePath();

    ctx.fillStyle = &#39;#16a34a&#39;;
    ctx.fill();

    // load point

    ctx.fillStyle = &#39;#ef4444&#39;;

    ctx.beginPath();
    ctx.arc(pX, pY, 8, 0, Math.PI * 2);
    ctx.fill();

    ctx.fillStyle = &#39;#ffffff&#39;;
    ctx.font = &#39;bold 10px Arial&#39;;
    ctx.textAlign = &#39;center&#39;;
    ctx.textBaseline = &#39;middle&#39;;

    ctx.fillText(&#39;P&#39;, pX, pY);

    // label

    ctx.fillStyle = &#39;#166534&#39;;
    ctx.font = &#39;bold 12px Arial&#39;;

    ctx.fillText(
        &#39;Resultant Vector&#39;,
        (cX + pX) / 2,
        (cY + pY) / 2 - 10
    );

    // ==========================================
    // UPLIFT REGION
    // ==========================================

    if (hasUplift &amp;&amp; naPoints.length === 2) {

        ctx.fillStyle = &#39;rgba(239,68,68,0.12)&#39;;

        ctx.fillRect(
            cX - fW / 2,
            cY - fH / 2,
            fW,
            fH
        );
    }

    // ==========================================
    // NEUTRAL AXIS
    // ==========================================

    if (hasUplift &amp;&amp; naPoints.length === 2) {

        ctx.strokeStyle = &#39;#dc2626&#39;;
        ctx.lineWidth = 2.5;

        ctx.setLineDash([8, 5]);

        ctx.beginPath();

        ctx.moveTo(
            cX + naPoints[0].x * scale,
            cY - naPoints[0].y * scale
        );

        ctx.lineTo(
            cX + naPoints[1].x * scale,
            cY - naPoints[1].y * scale
        );

        ctx.stroke();

        ctx.setLineDash([]);

        // label

        ctx.fillStyle = &#39;#dc2626&#39;;
        ctx.font = &#39;bold 11px Arial&#39;;
        ctx.textAlign = &#39;left&#39;;

        ctx.fillText(
            &#39;Neutral Axis&#39;,
            cX + naPoints[0].x * scale + 10,
            cY - naPoints[0].y * scale - 10
        );
    }


   // ==========================================
// MAX PRESSURE INDICATOR
// ==========================================

ctx.fillStyle = &#39;#7f1d1d&#39;;
ctx.font = &#39;bold 13px Arial&#39;;
ctx.textAlign = &#39;right&#39;;

var superscriptTwo = String.fromCharCode(178);

ctx.fillText(
    `qmax = ${pmax.toFixed(1)} kN/m` + superscriptTwo,
    canvas.width - 20,
    30
);

    // ==========================================
    // LEGEND
    // ==========================================

    const legendX = 20;
    const legendY = canvas.height - 120;

    ctx.fillStyle = &#39;#0f172a&#39;;
    ctx.fillRect(legendX, legendY, 220, 95);

    ctx.strokeStyle = &#39;#475569&#39;;
    ctx.strokeRect(legendX, legendY, 220, 95);

    ctx.font = &#39;11px Arial&#39;;
    ctx.textAlign = &#39;left&#39;;

    // compression zone

    ctx.fillStyle = &#39;rgba(59,130,246,0.5)&#39;;
    ctx.fillRect(legendX + 10, legendY + 12, 18, 12);

    ctx.fillStyle = &#39;#ffffff&#39;;
    ctx.fillText(
        &#39;Compression Zone&#39;,
        legendX + 38,
        legendY + 22
    );

    // neutral axis

    ctx.strokeStyle = &#39;#dc2626&#39;;
    ctx.setLineDash([6, 4]);

    ctx.beginPath();
    ctx.moveTo(legendX + 10, legendY + 42);
    ctx.lineTo(legendX + 30, legendY + 42);
    ctx.stroke();

    ctx.setLineDash([]);

    ctx.fillStyle = &#39;#ffffff&#39;;

    ctx.fillText(
        &#39;Neutral Axis&#39;,
        legendX + 38,
        legendY + 46
    );

    // resultant vector

    ctx.strokeStyle = &#39;#16a34a&#39;;

    ctx.beginPath();
    ctx.moveTo(legendX + 10, legendY + 68);
    ctx.lineTo(legendX + 30, legendY + 68);
    ctx.stroke();

    ctx.fillText(
        &#39;Resultant Vector&#39;,
        legendX + 38,
        legendY + 72
    );
}

// ==========================================
// ASYNCHRONOUS PDF REPORT GENERATION PIPELINE
// ==========================================

// ==========================================
// ADVANCED PDF EXPORT ENGINE
// High-quality multi-page PDF with:
// ✔ Tables
// ✔ Engineering calculations
// ✔ Canvas drawing
// ✔ Auto page breaks
// ✔ Clean formatting
// ✔ jsPDF + html2canvas
// ==========================================
async function generateProfessionalReportPDF() {

    if (!calculationArchive) {

        alert(
            &quot;Please run footing analysis first.&quot;
        );

        return;
    }

    const s = calculationArchive;

    // ==========================================
    // PREPARE REPORT DATA
    // ==========================================
    document.getElementById(
        &#39;pdfTime&#39;
    ).innerText =
        new Date().toLocaleString();

    // ==========================================
    // INPUT TABLE
    // ==========================================
    document.getElementById(
        &#39;pdfInputsTable&#39;
    ).innerHTML = `

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;
&lt;td&gt;Footing Length (L)&lt;/td&gt;
&lt;td&gt;${s.L.toFixed(3)} m&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Footing Width (B)&lt;/td&gt;
&lt;td&gt;${s.B.toFixed(3)} m&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Axial Load (P)&lt;/td&gt;
&lt;td&gt;${s.P.toFixed(2)} kN&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Moment Mx&lt;/td&gt;
&lt;td&gt;${s.Mx.toFixed(2)} kNm&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Moment My&lt;/td&gt;
&lt;td&gt;${s.My.toFixed(2)} kNm&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Eccentricity ex&lt;/td&gt;
&lt;td&gt;${s.ex.toFixed(4)} m&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Eccentricity ey&lt;/td&gt;
&lt;td&gt;${s.ey.toFixed(4)} m&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Allowable SBC&lt;/td&gt;
&lt;td&gt;${s.qall.toFixed(2)} kN/m²&lt;/td&gt;
&lt;/tr&gt;

&lt;/tbody&gt;
&lt;/table&gt;
`;

    // ==========================================
    // CASE DETAILS
    // ==========================================
    document.getElementById(
        &#39;pdfCaseDetails&#39;
    ).innerHTML = `

&lt;div style=&quot;
padding:15px;
border:2px solid #1e293b;
border-radius:10px;
background:#f8fafc;
margin-bottom:20px;
&quot;&gt;

&lt;h2 style=&quot;margin-top:0;&quot;&gt;
${s.caseName}
&lt;/h2&gt;

&lt;p&gt;
${s.caseDesc}
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Governing Equation:&lt;/b&gt;
${s.governingEquation}
&lt;/p&gt;

&lt;/div&gt;

&lt;div style=&quot;
padding:15px;
border:1px solid #cbd5e1;
border-radius:8px;
background:white;
line-height:1.8;
&quot;&gt;

${s.detailedSteps}

&lt;/div&gt;
`;

    // ==========================================
    // PRESSURE TABLE
    // ==========================================
    document.getElementById(
        &#39;pdfPressuresTable&#39;
    ).innerHTML = `

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;
&lt;td&gt;Average Pressure&lt;/td&gt;
&lt;td&gt;${s.qavg.toFixed(2)} kN/m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Maximum Pressure&lt;/td&gt;
&lt;td&gt;${s.pmax.toFixed(2)} kN/m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Minimum Pressure&lt;/td&gt;
&lt;td&gt;${s.pmin.toFixed(2)} kN/m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Effective Area&lt;/td&gt;
&lt;td&gt;${s.effectiveArea.toFixed(2)} m²&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Contact Percentage&lt;/td&gt;
&lt;td&gt;${s.contactPercentage.toFixed(1)} %&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Bearing Utilization&lt;/td&gt;
&lt;td&gt;${s.bearingUtilization.toFixed(1)} %&lt;/td&gt;
&lt;/tr&gt;

&lt;/tbody&gt;
&lt;/table&gt;
`;

    // ==========================================
    // STABILITY TABLE
    // ==========================================
    document.getElementById(
        &#39;pdfStabilityChecks&#39;
    ).innerHTML = `

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;
&lt;td&gt;SBC Check&lt;/td&gt;
&lt;td&gt;${s.pmax.toFixed(2)} / ${s.qall.toFixed(2)}&lt;/td&gt;
&lt;td&gt;${s.sbcStatus}&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;FOS Sliding&lt;/td&gt;
&lt;td&gt;${s.fosSliding.toFixed(2)}&lt;/td&gt;
&lt;td&gt;
${s.fosSliding &gt;= 1.5 ? &#39;SAFE&#39; : &#39;UNSAFE&#39;}
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;FOS Overturning&lt;/td&gt;
&lt;td&gt;${s.fosOverturning.toFixed(2)}&lt;/td&gt;
&lt;td&gt;
${s.fosOverturning &gt;= 2 ? &#39;SAFE&#39; : &#39;UNSAFE&#39;}
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Punching Shear&lt;/td&gt;
&lt;td&gt;${s.punchingShear.toFixed(2)}&lt;/td&gt;
&lt;td&gt;${s.punchingStatus}&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Settlement&lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;
${s.settlementWarning}
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Reinforcement&lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;
${s.reinforcementTrigger}
&lt;/td&gt;
&lt;/tr&gt;

&lt;/tbody&gt;
&lt;/table&gt;
`;

    // ==========================================
    // CONVERT CANVAS TO IMAGE
    // ==========================================
    const canvas =
        document.getElementById(
            &#39;blueprintCanvas&#39;
        );

    const imgData =
        canvas.toDataURL(
            &#39;image/png&#39;,
            1.0
        );

    document.getElementById(
        &#39;pdfStaticImageBridge&#39;
    ).src = imgData;

    // ==========================================
    // WAIT FOR DOM RENDER
    // ==========================================
    await new Promise(resolve =&gt;
        setTimeout(resolve, 400)
    );

    // ==========================================
    // GENERATE PDF
    // ==========================================
    const reportElement =
        document.getElementById(
            &#39;pdfReportLayout&#39;
        );

    const reportCanvas =
        await html2canvas(
            reportElement,
            {
                scale: 2,
                useCORS: true,
                backgroundColor: &quot;#ffffff&quot;
            }
        );

    const reportImage =
        reportCanvas.toDataURL(
            &#39;image/jpeg&#39;,
            1.0
        );

    // ==========================================
    // jsPDF SETUP
    // ==========================================
    const {
        jsPDF
    } = window.jspdf;

    const pdf =
        new jsPDF(
            &#39;p&#39;,
            &#39;mm&#39;,
            &#39;a4&#39;
        );

    const pdfWidth =
        pdf.internal.pageSize.getWidth();

    const pdfHeight =
        pdf.internal.pageSize.getHeight();

    const margin = 10;

    const usableWidth =
        pdfWidth - margin * 2;

    const imgWidth =
        usableWidth;

    const imgHeight =
        (
            reportCanvas.height *
            imgWidth
        ) / reportCanvas.width;

    let heightLeft =
        imgHeight;

    let position = 0;

    // ==========================================
    // FIRST PAGE
    // ==========================================
    pdf.addImage(
        reportImage,
        &#39;JPEG&#39;,
        margin,
        position + margin,
        imgWidth,
        imgHeight
    );

    heightLeft -= (
        pdfHeight - margin * 2
    );

    // ==========================================
    // MULTI-PAGE SUPPORT
    // ==========================================
    while (heightLeft &gt; 0) {

        position =
            heightLeft -
            imgHeight +
            margin;

        pdf.addPage();

        pdf.addImage(
            reportImage,
            &#39;JPEG&#39;,
            margin,
            position,
            imgWidth,
            imgHeight
        );

        heightLeft -= (
            pdfHeight - margin * 2
        );
    }

    // ==========================================
    // FOOTER PAGE NUMBERS
    // ==========================================
    const totalPages =
        pdf.internal.getNumberOfPages();

    for (
        let i = 1;
        i &lt;= totalPages;
        i++
    ) {

        pdf.setPage(i);

        pdf.setFontSize(9);

        pdf.text(
            `Page ${i} of ${totalPages}`,
            pdfWidth - 35,
            pdfHeight - 5
        );
    }

    // ==========================================
    // SAVE PDF
    // ==========================================
    pdf.save(
        &#39;Rigorous_Biaxial_Footing_Report.pdf&#39;
    );
}

// ==========================================
// AUTO EXECUTION
// ==========================================

window.onload = () =&gt; {

    evaluateFootingMechanics();

};
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/05/tool-for-analysis-of-isolated-footing.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-8498013643921700976</guid><pubDate>Tue, 26 May 2026 06:25:28 +0000</pubDate><atom:updated>2026-05-26T11:58:44.830+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">PWD Working</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>NTKMA PMIS Operating information</title><description>&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.8; max-width: 1000px; margin: 0 auto; padding: 25px; background-color: #f9f9f9; border-radius: 10px;&quot;&gt;

    &lt;h1 style=&quot;color: #162f6a; text-align: center;&quot;&gt;How to Use Project Plan Module in NTKMA PMIS&lt;/h1&gt;
    &lt;p style=&quot;text-align: center; font-size: 18px; color: #333;&quot;&gt;&lt;strong&gt;Step-by-Step Detailed Explanation for Adding Tasks, Subtasks, Activities &amp;amp; All Important Features&lt;/strong&gt;&lt;/p&gt;

    &lt;hr style=&quot;border: 2px solid #ff9f00;&quot;&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;1. Overview of Project Plan Module&lt;/h2&gt;
    &lt;p&gt;This module is used to create a detailed &lt;strong&gt;Work Breakdown Structure (WBS)&lt;/strong&gt; for infrastructure projects under Nashik Trimbakeshwar Kumbh Mela 2027. It allows you to define:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Tasks&lt;/strong&gt; – Major work items&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Subtasks&lt;/strong&gt; – Detailed breakdown under tasks&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Activities&lt;/strong&gt; – Granular level items for progress tracking&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Once the plan is &lt;strong&gt;Verified&lt;/strong&gt;, editing becomes restricted.&lt;/p&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;2. Initial Steps After Opening the Page&lt;/h2&gt;
    &lt;ol&gt;
        &lt;li&gt;Select your &lt;strong&gt;Project&lt;/strong&gt; from the top dropdown menu.&lt;/li&gt;
        &lt;li&gt;The system automatically checks the verification status (&lt;code&gt;data-isverifiedplan&lt;/code&gt;).&lt;/li&gt;
        &lt;li&gt;If the plan is already verified:
            &lt;ul&gt;
                &lt;li&gt;“Add Task” button will be hidden.&lt;/li&gt;
                &lt;li&gt;Most editing options will be disabled.&lt;/li&gt;
                &lt;li&gt;You will see warning messages when trying to edit.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
    &lt;/ol&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;3. Adding Tasks &amp;amp; Subtasks&lt;/h2&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;Method A: Using Main “Add Task” Button (Recommended for new projects)&lt;/h3&gt;
    &lt;ol&gt;
        &lt;li&gt;Click the green button &lt;strong&gt;“Add Task”&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;A modal window opens with a treeview structure.&lt;/li&gt;
        &lt;li&gt;Enter &lt;strong&gt;Task Name&lt;/strong&gt;, &lt;strong&gt;Start Date&lt;/strong&gt;, and &lt;strong&gt;End Date&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;Click the &lt;strong&gt;+&lt;/strong&gt; (plus) button next to the task.&lt;/li&gt;
        &lt;li&gt;You will get two options:
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Add Same Level&lt;/strong&gt; → Add another task at the same hierarchy level.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Add Sub Level&lt;/strong&gt; → Create a &lt;strong&gt;Subtask&lt;/strong&gt; under the current task.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;Continue adding tasks and subtasks as needed.&lt;/li&gt;
        &lt;li&gt;Click &lt;strong&gt;“Create Task”&lt;/strong&gt; at the bottom to save all tasks in bulk.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;Method B: Add Task/Subtask Under Existing Task&lt;/h3&gt;
    &lt;ol&gt;
        &lt;li&gt;In the main task table, click the &lt;strong&gt;+&lt;/strong&gt; icon next to any existing task.&lt;/li&gt;
        &lt;li&gt;A popup modal will open.&lt;/li&gt;
        &lt;li&gt;Add new task or subtask and save.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Click on any parent task row in the table to expand or collapse its subtasks.&lt;/p&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;4. Adding &amp;amp; Managing Activities&lt;/h2&gt;
    &lt;ol&gt;
        &lt;li&gt;Click the red button &lt;strong&gt;“Add/Delete Activity”&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;The screen splits: Left side shows Tasks &amp;amp; Subtasks tree, Right side shows activities.&lt;/li&gt;
        &lt;li&gt;Click on any Task/Subtask on the left panel.&lt;/li&gt;
        &lt;li&gt;On the right side, fill details for each activity:
            &lt;ul&gt;
                &lt;li&gt;Activity Title&lt;/li&gt;
                &lt;li&gt;Unit of Measurement (Km, Nos, Cum, etc.)&lt;/li&gt;
                &lt;li&gt;Target Value&lt;/li&gt;
                &lt;li&gt;Start Date &amp;amp; End Date&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;Click &lt;strong&gt;“Save Activity”&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;You can add multiple activities for one task.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;5. Other Important Tools &amp;amp; Features&lt;/h2&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;A. Task/Sub-Task Weightage&lt;/h3&gt;
    &lt;p&gt;Click the yellow button &lt;strong&gt;“Task/Sub-Task Weightage”&lt;/strong&gt;. This opens a separate page where you assign percentage weight to each task and subtask. Total must be &lt;strong&gt;100%&lt;/strong&gt;. This is crucial for overall progress calculation.&lt;/p&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;B. Reset Task / Subtask Sequence&lt;/h3&gt;
    &lt;ol&gt;
        &lt;li&gt;Click &lt;strong&gt;“Reset Task Sequence”&lt;/strong&gt; or &lt;strong&gt;“Reset Sub Task Sequence”&lt;/strong&gt; button.&lt;/li&gt;
        &lt;li&gt;Drag and drop rows to reorder.&lt;/li&gt;
        &lt;li&gt;Click &lt;strong&gt;“Update Task Sequence”&lt;/strong&gt; to save the new order.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;C. Task Dependencies&lt;/h3&gt;
    &lt;ol&gt;
        &lt;li&gt;Click the chain-link icon on any task.&lt;/li&gt;
        &lt;li&gt;In the modal, you can link the current task to other tasks (same project or different projects).&lt;/li&gt;
        &lt;li&gt;This creates logical dependencies (e.g., Task B cannot start before Task A is finished).&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;D. View Project Plan&lt;/h3&gt;
    &lt;p&gt;Click the blue button &lt;strong&gt;“View Project Plan”&lt;/strong&gt; to download a complete visual project schedule (usually in PDF format with Gantt chart view).&lt;/p&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;E. Update Physical Progress&lt;/h3&gt;
    &lt;p&gt;Click the blue button &lt;strong&gt;“Update Physical Progress”&lt;/strong&gt;. This takes you to another module where you can update actual % completion of activities.&lt;/p&gt;

    &lt;h3 style=&quot;color: #ff9f00;&quot;&gt;F. Activity Sequence Reset&lt;/h3&gt;
    &lt;ol&gt;
        &lt;li&gt;Inside Activity view, click &lt;strong&gt;“Reset Sequence”&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;Drag and drop activities to change order.&lt;/li&gt;
        &lt;li&gt;Click &lt;strong&gt;“Update Activity Sequence”&lt;/strong&gt; to save.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;6. Action Buttons Summary&lt;/h2&gt;

    &lt;table border=&quot;1&quot; cellpadding=&quot;12&quot; cellspacing=&quot;0&quot; style=&quot;width:100%; border-collapse: collapse; margin: 20px 0; background:white;&quot;&gt;
        &lt;thead&gt;
            &lt;tr style=&quot;background-color: #162f6a; color: white;&quot;&gt;
                &lt;th&gt;Button&lt;/th&gt;
                &lt;th&gt;Function&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Add Task&lt;/strong&gt; (Green)&lt;/td&gt;&lt;td&gt;Add new tasks &amp;amp; subtasks&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Add/Delete Activity&lt;/strong&gt; (Red)&lt;/td&gt;&lt;td&gt;Manage detailed activities&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Task/Sub-Task Weightage&lt;/strong&gt; (Yellow)&lt;/td&gt;&lt;td&gt;Assign weight percentages&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;&lt;strong&gt;View Project Plan&lt;/strong&gt; (Blue)&lt;/td&gt;&lt;td&gt;Download complete plan&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Update Physical Progress&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Update % completion&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Back to Task List&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Return to main task view&lt;/td&gt;&lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;7. Critical Restrictions – Verified Plan&lt;/h2&gt;
    &lt;div style=&quot;background-color: #f8d7da; padding: 20px; border-radius: 8px; border-left: 6px solid #dc3545; margin: 20px 0;&quot;&gt;
        &lt;strong&gt;⚠ Important Warning:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
        Once the Project Plan is &lt;strong&gt;Verified&lt;/strong&gt; by higher authorities:
        &lt;ul&gt;
            &lt;li&gt;You cannot add, edit, or delete Tasks, Subtasks, or Activities.&lt;/li&gt;
            &lt;li&gt;Only Physical Progress updating is allowed.&lt;/li&gt;
            &lt;li&gt;Contact PMU (Project Monitoring Unit) or MIS Expert for any changes.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;h2 style=&quot;color: #162f6a;&quot;&gt;8. Recommended Best Workflow&lt;/h2&gt;
    &lt;ol&gt;
        &lt;li&gt;Select Project&lt;/li&gt;
        &lt;li&gt;Add all Tasks &amp;amp; Subtasks using “Add Task”&lt;/li&gt;
        &lt;li&gt;Add detailed Activities under each task&lt;/li&gt;
        &lt;li&gt;Set Task/Subtask Weightage (Total 100%)&lt;/li&gt;
        &lt;li&gt;Define Dependencies where required&lt;/li&gt;
        &lt;li&gt;Reset sequence if needed&lt;/li&gt;
        &lt;li&gt;Review using “View Project Plan”&lt;/li&gt;
        &lt;li&gt;Finally, get the plan verified&lt;/li&gt;
    &lt;/ol&gt;

    &lt;hr&gt;
    &lt;p style=&quot;text-align: center; color: #555; font-size: 15px;&quot;&gt;
        &lt;strong&gt;Need Help?&lt;/strong&gt; Contact PMIS Expert, for Nashik Trimbakeshwar Kumbh Mela Project Monitoring Information System (PMIS)
    &lt;/p&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/05/ntkma-pmis-operating-information.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-4261175496075075260</guid><pubDate>Tue, 05 May 2026 12:08:19 +0000</pubDate><atom:updated>2026-05-21T18:11:21.619+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Estimate Preparation</category><category domain="http://www.blogger.com/atom/ns#">PWD Working</category><title>Estimate Calculation Tool (SSR 2022-23)</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;PWD SSR Estimate Tool&lt;/title&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.3.0/papaparse.min.js&quot;&gt;&lt;/script&gt;
    &lt;style&gt;
        :root { --primary: #2c3e50; --accent: #3498db; --success: #27ae60; }
        body { font-family: &#39;Segoe UI&#39;, sans-serif; margin: 2px; background: #f8f9fa; color: #333; }
        .container { max-width: 1300px; margin: auto; background: white; padding: 2px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
        .grid-header { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-bottom: 20px; padding: 2px; background: #eef2f3; border-radius: 6px; }
        .status-bar { padding: 2px; margin-bottom: 15px; border-radius: 4px; font-weight: bold; text-align: center; }
        .loading { background: #fff3cd; color: #856404; }
        .ready { background: #d4edda; color: #155724; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; font-size: 13px; }
        th, td { border: 1px solid #dee2e6; padding: 2px; text-align: left; }
        th { background: var(--primary); color: white; position: sticky; top: 0; }
        tr:nth-child(even) { background: #f2f2f2; }
        .summary-panel { margin-top: 30px; display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
        .box { padding: 2px; border: 1px solid #ddd; border-radius: 5px; background: #fff; margin-bottom: 20px; }
        input, select { width: 100%; padding: 2px; box-sizing: border-box; border: 1px solid #ccc; border-radius: 4px; }
        .btn { background: var(--success); color: white; border: none; padding: 2px 2px; cursor: pointer; border-radius: 4px; font-weight: bold; }
        .btn:disabled { background: #ccc; }
        .table-container { max-height: 400px; overflow-y: auto; border: 1px solid #ddd; margin-top: 20px; }
        th { position: sticky; top: 0; z-index: 10; }
        .project-bar { display: flex; gap: 10px; background: #34495e; padding: 2px; border-radius: 6px; margin-bottom: 20px; color: white; align-items: center; }
        .project-bar input, .project-bar select { width: auto; flex-grow: 1; }
        .btn-edit { background: #f39c12; padding: 2px 2px; font-size: 11px; margin-right: 5px; }
        .btn-delete { background: #e74c3c; padding: 2px 2px; font-size: 11px; }
        .btn-export { background: #9b59b6; }
        .btn-save { background: #2980b9; }
      .highlight{
    background:#fff3cd;
    padding:12px;
    border-left:5px solid #ff9800;
    margin:15px 0;
}
.formula{
    background:#e8f5e9;
    padding:12px;
    border-left:5px solid #2e7d32;
    font-weight:bold;
    margin:15px 0;
}
      code{
    background:#eef2f5;
    padding:2px 6px;
    border-radius:4px;
    color:#c62828;
}
pre{
    background:#272822;
    color:#f8f8f2;
    padding:15px;
    overflow:auto;
    border-radius:6px;
}
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  
  &lt;amp-auto-ads type=&quot;adsense&quot;
        data-ad-client=&quot;ca-pub-2103856900504884&quot;&gt;
&lt;/amp-auto-ads&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;h2&gt;Estimate Calculation Tool (SSR 2022-23)&lt;/h2&gt;
    &lt;div id=&quot;status&quot; class=&quot;status-bar loading&quot;&gt;Initializing connection to Google Sheets...&lt;/div&gt;
  
    &lt;div class=&quot;project-bar&quot;&gt;
        &lt;input type=&quot;text&quot; id=&quot;projectName&quot; placeholder=&quot;Project Name (e.g. Bridge at Km 5/200)&quot;&gt;
        &lt;select id=&quot;projectList&quot; onchange=&quot;loadProject(this.value)&quot;&gt;
            &lt;option value=&quot;&quot;&gt;-- Load Saved Project --&lt;/option&gt;
        &lt;/select&gt;
    &lt;/div&gt;
    
    &lt;div class=&quot;project-bar&quot;&gt;
        &lt;button class=&quot;btn btn-save&quot; onclick=&quot;saveToDB()&quot;&gt;Save Project&lt;/button&gt;
        &lt;button class=&quot;btn btn-export&quot; onclick=&quot;exportJSON()&quot;&gt;Export JSON&lt;/button&gt;
        &lt;input type=&quot;file&quot; id=&quot;importFile&quot; style=&quot;display:none&quot; onchange=&quot;importJSON(event)&quot;&gt;
        &lt;button class=&quot;btn&quot; onclick=&quot;document.getElementById(&#39;importFile&#39;).click()&quot;&gt;Import JSON&lt;/button&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-header&quot;&gt;
        &lt;div&gt;
            &lt;label&gt;Lead Distance (km)&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;leadDist&quot; placeholder=&quot;Enter Lead km&quot; oninput=&quot;recalculateAll()&quot;&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;label&gt;Cess (%)&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;cessInput&quot; value=&quot;1&quot; oninput=&quot;recalculateAll()&quot;&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;label&gt;Area/Tribal Charges (%)&lt;/label&gt;
            &lt;select id=&quot;areaCharge&quot; onchange=&quot;recalculateAll()&quot;&gt;
                &lt;option value=&quot;0&quot;&gt;None (0%)&lt;/option&gt;
                &lt;option value=&quot;10&quot;&gt;Tribal (10%)&lt;/option&gt;
                &lt;option value=&quot;5&quot;&gt;Jail Premises (5%)&lt;/option&gt;
                &lt;option value=&quot;15&quot;&gt;Municipal (15%)&lt;/option&gt;
            &lt;/select&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-header&quot; style=&quot;background: #d1ecf1;&quot;&gt;
        &lt;div style=&quot;flex: 2;&quot;&gt;
            &lt;label&gt;SSR Item No.&lt;/label&gt;
            &lt;input type=&quot;text&quot; id=&quot;itemSearch&quot; placeholder=&quot;e.g. Bd-A.1&quot;&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;label&gt;Quantity&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;itemQty&quot; value=&quot;1&quot;&gt;
        &lt;/div&gt;
        &lt;div style=&quot;display: flex; align-items: flex-end;&quot;&gt;
            &lt;button id=&quot;addBtn&quot; class=&quot;btn&quot; onclick=&quot;addItem()&quot; disabled&gt;Add Item&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;table-container&quot;&gt;
        &lt;table id=&quot;mainTable&quot;&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Item No&lt;/th&gt;
                    &lt;th&gt;Description&lt;/th&gt;
                    &lt;th&gt;Unit&lt;/th&gt;
                    &lt;th&gt;Qty&lt;/th&gt;
                    &lt;th&gt;SSR Rate&lt;/th&gt;
                    &lt;th&gt;Net Rate&lt;/th&gt;
                    &lt;th&gt;Lead&lt;/th&gt;
                    &lt;th&gt;Final Rate&lt;/th&gt;
                    &lt;th&gt;Amount&lt;/th&gt;
                    &lt;th&gt;Actions&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody id=&quot;tableBody&quot;&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  
    &lt;div class=&quot;summary-panel&quot;&gt;  
        &lt;div class=&quot;box&quot;&gt;
            &lt;h3&gt;Project Abstract&lt;/h3&gt;
            &lt;div id=&quot;abstractSummary&quot;&gt;Total Cost calculations will appear here.&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;div class=&quot;summary-panel&quot;&gt;  
        &lt;div class=&quot;box&quot;&gt;
            &lt;h3&gt;Material Consumption Summary&lt;/h3&gt;
            &lt;div id=&quot;materialSummary&quot;&gt;Enter items to see consumption...&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
  
  &lt;div class=&quot;container&quot;&gt;

&lt;h1&gt;Functioning of this tool&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;SSR-based estimation&lt;/li&gt;
&lt;li&gt;Material consumption analysis&lt;/li&gt;
&lt;li&gt;Lead charge calculations&lt;/li&gt;
&lt;li&gt;BOQ preparation&lt;/li&gt;
&lt;li&gt;GST and abstract generation&lt;/li&gt;
&lt;li&gt;Project storage and retrieval&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;1. Purpose of the System&lt;/h2&gt;

&lt;p&gt;
The software behaves like a digital estimation office used in:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PWD Departments&lt;/li&gt;
&lt;li&gt;MoRTH Projects&lt;/li&gt;
&lt;li&gt;Irrigation Works&lt;/li&gt;
&lt;li&gt;Building Construction&lt;/li&gt;
&lt;li&gt;Road Projects&lt;/li&gt;
&lt;li&gt;Bridge Works&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Engineering Activity&lt;/th&gt;
&lt;th&gt;Code Function&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;SSR Item Selection&lt;/td&gt;
&lt;td&gt;&lt;code&gt;addItem()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Lead Charge Calculation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;interpolateLead()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Rate Analysis&lt;/td&gt;
&lt;td&gt;&lt;code&gt;recalculateAll()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Estimate Abstract&lt;/td&gt;
&lt;td&gt;&lt;code&gt;updateSummaries()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Project Saving&lt;/td&gt;
&lt;td&gt;&lt;code&gt;saveToDB()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;2. Database Initialization&lt;/h2&gt;

&lt;pre&gt;
const request = indexedDB.open(&quot;PWDEstimateDB&quot;, 1);
&lt;/pre&gt;

&lt;p&gt;
This creates a local browser database for storing projects.
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;
Equivalent Civil Engineering Meaning:
&lt;ul&gt;
&lt;li&gt;Digital Estimate Register&lt;/li&gt;
&lt;li&gt;DPR File Storage&lt;/li&gt;
&lt;li&gt;Tender Estimate Archive&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;
Each project is saved using:
&lt;/p&gt;

&lt;pre&gt;
db.createObjectStore(&quot;projects&quot;, { keyPath: &quot;name&quot; });
&lt;/pre&gt;

&lt;p&gt;
Example Project Names:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Construction of CC Road&lt;/li&gt;
&lt;li&gt;Bridge Repair Estimate&lt;/li&gt;
&lt;li&gt;Road Widening Work&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;3. SSR and Lead Data Loading&lt;/h2&gt;

&lt;pre&gt;
const SSR_CSV = &quot;...&quot;;
const LEAD_CSV = &quot;...&quot;;
&lt;/pre&gt;

&lt;p&gt;
The software loads:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSR Schedule of Rates&lt;/li&gt;
&lt;li&gt;Lead Charge Tables&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;SSR Sheet Contains&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Item Codes&lt;/li&gt;
&lt;li&gt;Descriptions&lt;/li&gt;
&lt;li&gt;Units&lt;/li&gt;
&lt;li&gt;SSR Rates&lt;/li&gt;
&lt;li&gt;Material Consumption Factors&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Lead Sheet Contains&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Murum Lead Rates&lt;/li&gt;
&lt;li&gt;Sand Transportation Rates&lt;/li&gt;
&lt;li&gt;Metal Lead Charges&lt;/li&gt;
&lt;li&gt;Cement Transportation Costs&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;4. Material Mapping Logic&lt;/h2&gt;

&lt;pre&gt;
const materialMapping = {
    &quot;Murum&quot;: &#39;D&#39;,
    &quot;Natural Sand&quot;: &#39;J&#39;
}
&lt;/pre&gt;

&lt;p&gt;
This maps materials to their corresponding lead-rate columns.
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;
Engineering Meaning:
&lt;p&gt;
If Murum transportation rates are stored in Column D,
the software automatically fetches transportation charges from Column D.
&lt;/p&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;5. Material Consumption Factors&lt;/h2&gt;

&lt;pre&gt;
const matColumns = {
    &quot;Cement&quot;: &#39;K&#39;,
    &quot;Steel&quot;: &#39;P&#39;
}
&lt;/pre&gt;

&lt;p&gt;
Every SSR item consumes materials.
The software extracts these automatically.
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;SSR Item&lt;/th&gt;
&lt;th&gt;Cement&lt;/th&gt;
&lt;th&gt;Sand&lt;/th&gt;
&lt;th&gt;Aggregate&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;PCC 1:4:8&lt;/td&gt;
&lt;td&gt;1.5 Bags&lt;/td&gt;
&lt;td&gt;0.45 m³&lt;/td&gt;
&lt;td&gt;0.90 m³&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;div class=&quot;highlight&quot;&gt;
This enables:
&lt;ul&gt;
&lt;li&gt;Material Statements&lt;/li&gt;
&lt;li&gt;Quarry Planning&lt;/li&gt;
&lt;li&gt;Lead Analysis&lt;/li&gt;
&lt;li&gt;Royalty Estimation&lt;/li&gt;
&lt;li&gt;Transport Logistics&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;6. Initialization Function&lt;/h2&gt;

&lt;pre&gt;
async function init()
&lt;/pre&gt;

&lt;p&gt;
This initializes the entire estimating system.
&lt;/p&gt;

&lt;p&gt;
It:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Downloads SSR Data&lt;/li&gt;
&lt;li&gt;Downloads Lead Data&lt;/li&gt;
&lt;li&gt;Parses Spreadsheets&lt;/li&gt;
&lt;li&gt;Activates Estimation Engine&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;7. Column Letter Conversion&lt;/h2&gt;

&lt;pre&gt;
function letterToIdx(letter)
&lt;/pre&gt;

&lt;p&gt;
Converts spreadsheet columns:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A → 0&lt;/li&gt;
&lt;li&gt;B → 1&lt;/li&gt;
&lt;li&gt;AA → 26&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This bridges spreadsheet engineering data with software calculations.
&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;8. Lead Charge Interpolation&lt;/h2&gt;

&lt;pre&gt;
function interpolateLead(dist, colLetter)
&lt;/pre&gt;

&lt;p&gt;
This is the most important engineering calculation in the software.
&lt;/p&gt;

&lt;h3&gt;Engineering Principle&lt;/h3&gt;

&lt;p&gt;
Lead rates are available at fixed intervals.
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Distance&lt;/th&gt;
&lt;th&gt;Lead Rate&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;5 km&lt;/td&gt;
&lt;td&gt;₹120&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;10 km&lt;/td&gt;
&lt;td&gt;₹180&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
If actual lead distance is 7 km,
the software calculates intermediate transportation rate automatically.
&lt;/p&gt;

&lt;div class=&quot;formula&quot;&gt;
Interpolation Formula:&lt;br&gt;&lt;br&gt;

y = y1 + ((x - x1) × (y2 - y1) / (x2 - x1))
&lt;/div&gt;

&lt;div class=&quot;highlight&quot;&gt;
Used In:
&lt;ul&gt;
&lt;li&gt;Earthwork&lt;/li&gt;
&lt;li&gt;Road Construction&lt;/li&gt;
&lt;li&gt;Canal Excavation&lt;/li&gt;
&lt;li&gt;Bridge Works&lt;/li&gt;
&lt;li&gt;Embankment Projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;9. Adding SSR Items&lt;/h2&gt;

&lt;pre&gt;
function addItem()
&lt;/pre&gt;

&lt;p&gt;
This acts like BOQ entry software.
&lt;/p&gt;

&lt;p&gt;
Engineer enters:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSR Item Code&lt;/li&gt;
&lt;li&gt;Quantity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The system:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searches SSR Database&lt;/li&gt;
&lt;li&gt;Retrieves Rates&lt;/li&gt;
&lt;li&gt;Adds Item to Estimate&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;10. Quantity Editing &amp; Deletion&lt;/h2&gt;

&lt;pre&gt;
editItem()
deleteItem()
&lt;/pre&gt;

&lt;p&gt;
Equivalent to:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BOQ Revision&lt;/li&gt;
&lt;li&gt;Quantity Corrections&lt;/li&gt;
&lt;li&gt;Variation Statement Modifications&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;11. Project Saving&lt;/h2&gt;

&lt;pre&gt;
saveToDB()
&lt;/pre&gt;

&lt;p&gt;
Stores:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estimate Items&lt;/li&gt;
&lt;li&gt;Lead Distances&lt;/li&gt;
&lt;li&gt;Cess Settings&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight&quot;&gt;
Equivalent Civil Engineering Meaning:
&lt;ul&gt;
&lt;li&gt;Saving DPR Files&lt;/li&gt;
&lt;li&gt;Tender Estimate Storage&lt;/li&gt;
&lt;li&gt;Project Archive&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;12. Recalculation Engine&lt;/h2&gt;

&lt;pre&gt;
function recalculateAll()
&lt;/pre&gt;

&lt;p&gt;
This is the core estimation engine.
&lt;/p&gt;

&lt;h3&gt;Step 1 – Material Consumption&lt;/h3&gt;

&lt;pre&gt;
matTotals[m] += factor * item.inputQty;
&lt;/pre&gt;

&lt;p&gt;
Example:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PCC requires 2 cement bags/m³&lt;/li&gt;
&lt;li&gt;Quantity = 10 m³&lt;/li&gt;
&lt;li&gt;Total Cement = 20 Bags&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;13. Net SSR Rate Calculation&lt;/h2&gt;

&lt;pre&gt;
const netRate = ssrRate - (ssrRate * cessFact);
&lt;/pre&gt;

&lt;p&gt;
This deducts:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Labour Cess&lt;/li&gt;
&lt;li&gt;Department Recoveries&lt;/li&gt;
&lt;li&gt;Royalty Adjustments&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;14. Lead Charge Calculation&lt;/h2&gt;

&lt;pre&gt;
itemLeadCost += (factor * leadRate);
&lt;/pre&gt;

&lt;p&gt;
Calculates transportation cost of each material.
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Material&lt;/th&gt;
&lt;th&gt;Consumption&lt;/th&gt;
&lt;th&gt;Lead Rate&lt;/th&gt;
&lt;th&gt;Lead Cost&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Cement&lt;/td&gt;
&lt;td&gt;5 Bags&lt;/td&gt;
&lt;td&gt;₹12/Bag&lt;/td&gt;
&lt;td&gt;₹60&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;15. Final Rate Derivation&lt;/h2&gt;

&lt;pre&gt;
finalRate = netRate + itemLeadCost
&lt;/pre&gt;

&lt;p&gt;
Final item rate includes:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Net SSR Rate&lt;/li&gt;
&lt;li&gt;Transportation Escalation&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;16. Amount Calculation&lt;/h2&gt;

&lt;pre&gt;
amount = finalRate × quantity
&lt;/pre&gt;

&lt;div class=&quot;formula&quot;&gt;
Amount = Rate × Quantity
&lt;/div&gt;

&lt;p&gt;
Equivalent to standard BOQ calculations.
&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;17. Material Summary&lt;/h2&gt;

&lt;pre&gt;
updateSummaries()
&lt;/pre&gt;

&lt;p&gt;
Generates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Material Statements&lt;/li&gt;
&lt;li&gt;Lead Statements&lt;/li&gt;
&lt;li&gt;Consumption Abstracts&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Material&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;Lead&lt;/th&gt;
&lt;th&gt;Charges&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Cement&lt;/td&gt;
&lt;td&gt;250 Bags&lt;/td&gt;
&lt;td&gt;40 km&lt;/td&gt;
&lt;td&gt;₹15,000&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Sand&lt;/td&gt;
&lt;td&gt;18 m³&lt;/td&gt;
&lt;td&gt;12 km&lt;/td&gt;
&lt;td&gt;₹7,200&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;18. GST Calculation&lt;/h2&gt;

&lt;pre&gt;
const gst = grandTotal * 0.18;
&lt;/pre&gt;

&lt;p&gt;
Adds 18% GST to estimate.
&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;19. Estimate Abstract&lt;/h2&gt;

&lt;p&gt;
Final Estimate:
&lt;/p&gt;

&lt;div class=&quot;formula&quot;&gt;
Grand Total = Civil Cost + Lead Charges + GST
&lt;/div&gt;

&lt;p&gt;
Equivalent to:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Administrative Approval Abstract&lt;/li&gt;
&lt;li&gt;Tender Schedule Amount&lt;/li&gt;
&lt;li&gt;DPR Cost Summary&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;20. Dynamic Material Leads&lt;/h2&gt;

&lt;pre&gt;
updateLeadDist(material, val)
&lt;/pre&gt;

&lt;p&gt;
Allows separate lead distances for each material.
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Material&lt;/th&gt;
&lt;th&gt;Lead Distance&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Murum&lt;/td&gt;
&lt;td&gt;8 km&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Sand&lt;/td&gt;
&lt;td&gt;35 km&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Cement&lt;/td&gt;
&lt;td&gt;120 km&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;div class=&quot;highlight&quot;&gt;
Very useful for:
&lt;ul&gt;
&lt;li&gt;Hill Roads&lt;/li&gt;
&lt;li&gt;Remote Villages&lt;/li&gt;
&lt;li&gt;Bridge Projects&lt;/li&gt;
&lt;li&gt;Irrigation Works&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;21. JSON Export/Import&lt;/h2&gt;

&lt;pre&gt;
exportJSON()
importJSON()
&lt;/pre&gt;

&lt;p&gt;
Equivalent to:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estimate File Backup&lt;/li&gt;
&lt;li&gt;Project Sharing&lt;/li&gt;
&lt;li&gt;DPR Transfer Between Offices&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;22. Engineering Strengths&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automated Rate Analysis&lt;/li&gt;
&lt;li&gt;Dynamic Material Consumption&lt;/li&gt;
&lt;li&gt;Material-wise Lead Calculation&lt;/li&gt;
&lt;li&gt;Offline Project Storage&lt;/li&gt;
&lt;li&gt;Reusable SSR Database&lt;/li&gt;
&lt;li&gt;Fast Quantity Revisions&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;23. Practical Civil Engineering Applications&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PWD Estimates&lt;/li&gt;
&lt;li&gt;MoRTH Road Projects&lt;/li&gt;
&lt;li&gt;Bridge Works&lt;/li&gt;
&lt;li&gt;Irrigation Estimates&lt;/li&gt;
&lt;li&gt;Building BOQs&lt;/li&gt;
&lt;li&gt;Tender Costing&lt;/li&gt;
&lt;li&gt;Contractor Billing&lt;/li&gt;
&lt;li&gt;DPR Preparation&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;24. Equivalent Commercial Software&lt;/h2&gt;

&lt;p&gt;
This code partially replicates features of:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PWD Estimate Software&lt;/li&gt;
&lt;li&gt;CivilMantra&lt;/li&gt;
&lt;li&gt;Candy&lt;/li&gt;
&lt;li&gt;CostX&lt;/li&gt;
&lt;li&gt;Excel-based DPR Systems&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;25. Final Engineering Interpretation&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;
This software is a browser-based SSR-driven civil estimation engine integrating:
&lt;ul&gt;
&lt;li&gt;Material Consumption Analysis&lt;/li&gt;
&lt;li&gt;Lead Charge Interpolation&lt;/li&gt;
&lt;li&gt;Transportation Costing&lt;/li&gt;
&lt;li&gt;Abstract Preparation&lt;/li&gt;
&lt;li&gt;Persistent Project Management&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;
In practical civil engineering terms, it automates the complete workflow from SSR item selection to final estimate abstract generation with realistic material transportation logistics.
&lt;/p&gt;

&lt;/div&gt;

&lt;script&gt;
let ssrData = [];
let leadData = [];
let estimateList = [];
let db;
window.materialLeads = {}; 

const request = indexedDB.open(&quot;PWDEstimateDB&quot;, 1);
request.onupgradeneeded = e =&gt; {
    db = e.target.result;
    db.createObjectStore(&quot;projects&quot;, { keyPath: &quot;name&quot; });
};
request.onsuccess = e =&gt; {
    db = e.target.result;
    refreshProjectList();
};
  
const SSR_CSV = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vQ4kUoGLLSfoAc_0FAGlfiajGDhAOOd0oPI-I2F4-b21mm-IjOGP5dBNtHtRC97VJJZU17ZSWKWwfqm/pub?gid=0&amp;single=true&amp;output=csv&quot;;
const LEAD_CSV = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vQ4kUoGLLSfoAc_0FAGlfiajGDhAOOd0oPI-I2F4-b21mm-IjOGP5dBNtHtRC97VJJZU17ZSWKWwfqm/pub?gid=860705186&amp;single=true&amp;output=csv&quot;;

// Lead CSV matching column letters (Matching image 1)
const materialMapping = {
    &quot;Murum&quot;: &#39;D&#39;, &quot;Earth / Soil&quot;: &#39;D&#39;, &quot;Rubble / Soling&quot;: &#39;H&#39;, 
    &quot;Natural Sand&quot;: &#39;J&#39;, &quot;Crush Sand&quot;: &#39;J&#39;, &quot;Metal Below 40 mm&quot;: &#39;J&#39;,
    &quot;40 mm &amp; Above&quot;: &#39;M&#39;, &quot;Cement&quot;: &#39;R&#39;, &quot;Bricks&quot;: &#39;T&#39;, 
    &quot;Flooring Tiles&quot;: &#39;V&#39;, &quot;Manglore Tiles&quot;: &#39;V&#39;, &quot;Steel&quot;: &#39;X&#39;
};

// SSR material consumption factor column letters (From &quot;SSR 22 23&quot; - Matching image 2)
const matColumns = {
    &quot;Cement&quot;: &#39;K&#39;, &quot;Natural Sand&quot;: &#39;L&#39;, &quot;Crush Sand&quot;: &#39;M&#39;, &quot;Metal Below 40 mm&quot;: &#39;N&#39;,
    &quot;Pipes&quot;: &#39;O&#39;, &quot;Steel&quot;: &#39;P&#39;, &quot;Murum&quot;: &#39;Q&#39;, &quot;Earth / Soil&quot;: &#39;R&#39;, &quot;Rubble / Soling&quot;: &#39;S&#39;,
    &quot;40 mm &amp; Above&quot;: &#39;T&#39;, &quot;Asphalt&quot;: &#39;U&#39;, &quot;Bricks&quot;: &#39;V&#39;, &quot;Concrete&quot;: &#39;W&#39;, &quot;GRIT&quot;: &#39;X&#39;,
    &quot;Flooring Tiles&quot;: &#39;Y&#39;, &quot;Glazed / Ceramic Tiles&quot;: &#39;Z&#39;, &quot;Natural Stone Flooring&quot;: &#39;AA&#39;,
    &quot;Manglore Tiles&quot;: &#39;AB&#39;
};

async function init() {
    try {
        const cacheBuster = `&amp;t=${new Date().getTime()}`;
        const [res1, res2] = await Promise.all([
            fetch(SSR_CSV + cacheBuster), 
            fetch(LEAD_CSV + cacheBuster)
        ]);
        
        if (!res1.ok || !res2.ok) throw new Error(&quot;Could not retrieve spreadsheet data.&quot;);

        const t1 = await res1.text();
        const t2 = await res2.text();

        Papa.parse(t1, { header: false, skipEmptyLines: true, complete: (r) =&gt; { ssrData = r.data; } });
        Papa.parse(t2, { header: false, skipEmptyLines: true, complete: (r) =&gt; {
            leadData = r.data;
            document.getElementById(&#39;status&#39;).innerText = &quot;System Ready - Data Loaded&quot;;
            document.getElementById(&#39;status&#39;).className = &quot;status-bar ready&quot;;
            document.getElementById(&#39;addBtn&#39;).disabled = false;
        }});
    } catch (e) {
        document.getElementById(&#39;status&#39;).innerText = &quot;Connection Failed: &quot; + e.message;
        document.getElementById(&#39;status&#39;).style.background = &quot;#f8d7da&quot;;
    }
}

function letterToIdx(letter) {
    let index = 0;
    const str = letter.toUpperCase();
    for (let i = 0; i &lt; str.length; i++) {
        index = index * 26 + str.charCodeAt(i) - 64;
    }
    return index - 1; 
}

function interpolateLead(dist, colLetter) {
    if (!leadData || leadData.length === 0 || isNaN(dist)) return 0;
    const colIdx = letterToIdx(colLetter);

    const sorted = leadData
        .map(row =&gt; {
            const kmVal = parseFloat(String(row[0]).trim());
            const rateVal = parseFloat(String(row[colIdx]).replace(/,/g, &#39;&#39;).trim()) || 0;
            return { km: kmVal, val: rateVal };
        })
        .filter(r =&gt; !isNaN(r.km))
        .sort((a, b) =&gt; a.km - b.km);

    if (sorted.length === 0) return 0;
    if (dist &lt;= sorted[0].km) return sorted[0].val;
    if (dist &gt;= sorted[sorted.length - 1].km) return sorted[sorted.length - 1].val;

    for (let i = 0; i &lt; sorted.length - 1; i++) {
        if (dist &gt;= sorted[i].km &amp;&amp; dist &lt;= sorted[i + 1].km) {
            const x1 = sorted[i].km, x2 = sorted[i + 1].km;
            const y1 = sorted[i].val, y2 = sorted[i + 1].val;
            if (x1 === x2) return y1;
            return y1 + ((dist - x1) * (y2 - y1) / (x2 - x1));
        }
    }
    return 0;
}

function addItem() {
    if (ssrData.length === 0) return alert(&quot;SSR data not loaded yet.&quot;);
    const searchInput = document.getElementById(&#39;itemSearch&#39;).value.trim();
    const qty = parseFloat(document.getElementById(&#39;itemQty&#39;).value) || 0;

    const item = ssrData.find(row =&gt; row &amp;&amp; String(row[2]).trim() === searchInput);
    if (item) {
        const clonedItem = [...item];
        clonedItem.inputQty = qty;
        estimateList.push(clonedItem);
        recalculateAll();
        document.getElementById(&#39;itemSearch&#39;).value = &quot;&quot;;
    } else {
        alert(`Item &quot;${searchInput}&quot; not found in SSR.`);
    }
}

function deleteItem(index) {
    if(confirm(&quot;Remove this item?&quot;)) {
        estimateList.splice(index, 1);
        recalculateAll();
    }
}

function editItem(index) {
    const newQty = prompt(&quot;Enter new Quantity:&quot;, estimateList[index].inputQty);
    if (newQty !== null) {
        estimateList[index].inputQty = parseFloat(newQty) || 0;
        recalculateAll();
    }
}

function saveToDB() {
    const name = document.getElementById(&#39;projectName&#39;).value.trim();
    if (!name) return alert(&quot;Please enter a Project Name&quot;);
    const transaction = db.transaction([&quot;projects&quot;], &quot;readwrite&quot;);
    transaction.objectStore(&quot;projects&quot;).put({
        name: name,
        estimateList: estimateList,
        materialLeads: window.materialLeads,
        settings: {
            lead: document.getElementById(&#39;leadDist&#39;).value,
            cess: document.getElementById(&#39;cessInput&#39;).value
        }
    });
    transaction.oncomplete = () =&gt; { alert(&quot;Project Saved Successfully!&quot;); refreshProjectList(); };
}

async function loadProject(name) {
    if (!name) return;
    const store = db.transaction([&quot;projects&quot;], &quot;readonly&quot;).objectStore(&quot;projects&quot;);
    store.get(name).onsuccess = e =&gt; {
        const p = e.target.result;
        estimateList = p.estimateList;
        window.materialLeads = p.materialLeads || {};
        document.getElementById(&#39;projectName&#39;).value = p.name;
        document.getElementById(&#39;leadDist&#39;).value = p.settings.lead;
        document.getElementById(&#39;cessInput&#39;).value = p.settings.cess;
        recalculateAll();
    };
}

function refreshProjectList() {
    const select = document.getElementById(&#39;projectList&#39;);
    const store = db.transaction([&quot;projects&quot;], &quot;readonly&quot;).objectStore(&quot;projects&quot;);
    select.innerHTML = &#39;&lt;option value=&quot;&quot;&gt;-- Load Saved Project --&lt;/option&gt;&#39;;
    store.openCursor().onsuccess = e =&gt; {
        const cursor = e.target.result;
        if (cursor) {
            const opt = document.createElement(&#39;option&#39;);
            opt.value = cursor.key; opt.textContent = cursor.key;
            select.appendChild(opt);
            cursor.continue();
        }
    };
}

function recalculateAll() {
    if (leadData.length === 0) return;

    const cessFact = parseFloat(document.getElementById(&#39;cessInput&#39;).value) / 100 || 0;
    const globalLead = parseFloat(document.getElementById(&#39;leadDist&#39;).value) || 0;
    let html = &quot;&quot;;
    let totalPartA = 0;
    let matTotals = {};
    for (let m in matColumns) matTotals[m] = 0;

    // Calculate dynamic total material consumptions (Item Qty * consumption factor)
    estimateList.forEach(item =&gt; {
        for (let m in matColumns) {
            const colIdx = letterToIdx(matColumns[m]);
            const factor = parseFloat(String(item[colIdx]).replace(/,/g, &#39;&#39;)) || 0;
            matTotals[m] += factor * item.inputQty;
        }
    });

    estimateList.forEach((item, index) =&gt; {
        const ssrRate = parseFloat(String(item[8]).replace(/,/g, &#39;&#39;)) || 0; 
        const netRate = ssrRate - (ssrRate * cessFact);
      	const areacostperc = parseFloat(document.getElementById(&#39;areaCharge&#39;).value) || 0;
      	const AreaCost = netRate * areacostperc/100
        
        let itemLeadCost = 0;
        for (let m in matColumns) {
            const colIdx = letterToIdx(matColumns[m]);
            const factor = parseFloat(String(item[colIdx]).replace(/,/g, &#39;&#39;)) || 0;
            
            if (factor &gt; 0 &amp;&amp; materialMapping[m]) {
                const specDist = window.materialLeads[m];
                const dist = (specDist !== undefined &amp;&amp; specDist !== &quot;&quot;) ? parseFloat(specDist) : globalLead;
                const leadRate = interpolateLead(dist, materialMapping[m]);
                itemLeadCost += (factor * leadRate);
            }
        }

        const finalRate = netRate + itemLeadCost + (ssrRate * cessFact) + AreaCost;
        const amount = finalRate * item.inputQty;
        totalPartA += (netRate * item.inputQty);

        html += `&lt;tr&gt;
            &lt;td&gt;${item[2] || &#39;N/A&#39;}&lt;/td&gt; 
            &lt;td title=&quot;${item[4] || &#39;&#39;}&quot;&gt;${(item[4] || &#39;N/A&#39;).substring(0,35)}...&lt;/td&gt;
            &lt;td&gt;${item[7] || &#39;N/A&#39;}&lt;/td&gt;
            &lt;td&gt;${item.inputQty}&lt;/td&gt;
            &lt;td&gt;${ssrRate.toFixed(2)}&lt;/td&gt;
            &lt;td&gt;${netRate.toFixed(2)}&lt;/td&gt;
            &lt;td style=&quot;color: #2980b9;&quot;&gt;${itemLeadCost.toFixed(2)}&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;${finalRate.toFixed(2)}&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;${amount.toFixed(2)}&lt;/td&gt;
            &lt;td&gt;
                &lt;button class=&quot;btn btn-edit&quot; onclick=&quot;editItem(${index})&quot;&gt;Edit&lt;/button&gt;
                &lt;button class=&quot;btn btn-delete&quot; onclick=&quot;deleteItem(${index})&quot;&gt;Del&lt;/button&gt;
            &lt;/td&gt;
        &lt;/tr&gt;`;
    });

    document.getElementById(&#39;tableBody&#39;).innerHTML = html;
    updateSummaries(totalPartA, matTotals);
}

function updateSummaries(partA, matTotals) {
    let matHtml = `&lt;table style=&quot;width:100%; font-size:11px; border-collapse:collapse;&quot;&gt;
        &lt;thead&gt;&lt;tr style=&quot;background:#eee;&quot;&gt;&lt;th&gt;Material&lt;/th&gt;&lt;th&gt;Consumption Qty&lt;/th&gt;&lt;th&gt;Lead (km)&lt;/th&gt;&lt;th&gt;Charges&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;`;
    
    let totalLeadAmount = 0;
    let found = false;
    const globalLead = parseFloat(document.getElementById(&#39;leadDist&#39;).value) || 0;

    for (let m in matTotals) {
        if (matTotals[m] &gt; 0) {
            let specDist = window.materialLeads[m];
            let dist = (specDist !== undefined &amp;&amp; specDist !== &quot;&quot;) ? parseFloat(specDist) : globalLead;
            let colLetter = materialMapping[m];
            let leadRate = (colLetter !== undefined) ? interpolateLead(dist, colLetter) : 0;
            let leadAmt = matTotals[m] * leadRate;
            totalLeadAmount += leadAmt;

            matHtml += `&lt;tr&gt;
                &lt;td&gt;${m}&lt;/td&gt;
                &lt;td&gt;&lt;strong&gt;${matTotals[m].toFixed(3)}&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;&lt;input type=&quot;number&quot; value=&quot;${dist}&quot; style=&quot;width:65px&quot; oninput=&quot;updateLeadDist(&#39;${m}&#39;, this.value)&quot;&gt;&lt;/td&gt;
                &lt;td&gt;₹${leadAmt.toFixed(2)}&lt;/td&gt;
            &lt;/tr&gt;`;
            found = true;
        }
    }

    document.getElementById(&#39;materialSummary&#39;).innerHTML = found ? matHtml + &quot;&lt;/tbody&gt;&lt;/table&gt;&quot; : &quot;No consumption.&quot;;
    
    const grandTotal = partA + totalLeadAmount;
    const gst = grandTotal * 0.18;
    document.getElementById(&#39;abstractSummary&#39;).innerHTML = `
        &lt;p&gt;Civil (Net): ₹${partA.toLocaleString(undefined, {minimumFractionDigits: 2})}&lt;/p&gt;
        &lt;p&gt;Total Lead: ₹${totalLeadAmount.toLocaleString(undefined, {minimumFractionDigits: 2})}&lt;/p&gt;
        &lt;p&gt;GST (18%): ₹${gst.toLocaleString(undefined, {minimumFractionDigits: 2})}&lt;/p&gt;
        &lt;hr&gt;&lt;h4&gt;Grand Total: ₹${(grandTotal + gst).toLocaleString(undefined, {minimumFractionDigits: 2})}&lt;/h4&gt;`;
}

function updateLeadDist(material, val) {
    window.materialLeads[material] = val;
    recalculateAll(); 
}

function exportJSON() {
    const data = JSON.stringify({
        project: document.getElementById(&#39;projectName&#39;).value,
        items: estimateList,
        materialLeads: window.materialLeads
    });
    const blob = new Blob([data], { type: &#39;application/json&#39; });
    const url = URL.createObjectURL(blob);
    const a = document.createElement(&#39;a&#39;);
    a.href = url;
    a.download = `${document.getElementById(&#39;projectName&#39;).value || &#39;Estimate&#39;}.json`;
    a.click();
}

function importJSON(event) {
    const reader = new FileReader();
    reader.onload = e =&gt; {
        try {
            const imported = JSON.parse(e.target.result);
            estimateList = imported.items || [];
            window.materialLeads = imported.materialLeads || {};
            if(imported.project) document.getElementById(&#39;projectName&#39;).value = imported.project;
            recalculateAll();
        } catch(err) { alert(&quot;Invalid JSON file&quot;); }
    };
    reader.readAsText(event.target.files[0]);
}

init();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/05/estimate-calculation-tool-ssr-2022-23.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1074964965522467583.post-2605591030278010824</guid><pubDate>Wed, 29 Apr 2026 12:16:32 +0000</pubDate><atom:updated>2026-07-18T13:17:45.952+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">PWD Working</category><title>Tentative Project schedule Generator</title><description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js&quot;&gt;&lt;/script&gt;
    &lt;title&gt;MoRTH Resource &amp; Machinery Planner&lt;/title&gt;
&lt;style&gt;
/* 1. BASE APP STYLES - Scoped to avoid Blogger conflicts */
#civil-scheduler {
    font-family: &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif;
    background: #fdfdfd;
    color: #2c3e50;
    line-height: 1.5;
}

#civil-scheduler .card {
    background: #ffffff;
    padding: 2px;
    border-radius: 10px;
    box-shadow: 0 10px 25px rgba(0,0,0,0.05);
    border: 1px solid #eaeeef;
    margin-bottom: 20px;
}

#civil-scheduler h2 {
    margin: 0 0 20px 0;
    color: #1a3a83;
    font-size: 1.5rem;
    display: flex;
    align-items: center;
    gap: 10px;
}

/* 2. CONTROL PANEL */
#civil-scheduler .controls {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 2px;
    background: #f8f9fc;
    padding: 2px;
    border-radius: 8px;
    border: 1px solid #e3e6f0;
    margin-bottom: 5px;
}

#civil-scheduler .input-group label {
    display: block;
    font-weight: 600;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 6px;
    color: #4e73df;
}

#civil-scheduler input {
    width: 100%;
    padding: 2px;
    border: 1px solid #d1d3e2;
    border-radius: 5px;
    box-sizing: border-box;
}

#civil-scheduler button {
    background: #4e73df;
    color: white;
    border: none;
    border-radius: 5px;
    padding: 2px 2px;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.3s ease;
    height: 42px;
    align-self: end;
}

#civil-scheduler button:hover {
    background: #2e59d9;
    transform: translateY(-1px);
    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}

/* 3. TABLE STYLES */
#civil-scheduler .table-container {
    width: 100%;
    max-height: 1700px;
    overflow: auto;
    border: 1px solid #e3e6f0;
    border-radius: 8px;
    background: #fff;
}

#civil-scheduler table {
    width: 100%;
    min-width: 600px;
    border-collapse: collapse;
    font-size: 13px;
}

#civil-scheduler th {
    background: #4e73df;
    color: #ffffff;
    padding: 2px 2px;
    font-weight: 600;
    text-transform: uppercase;
    font-size: 11px;
    border: 1px solid #dbe2ef;
    text-align: center;
    position: sticky;
    top: 0;
    z-index: 5;
}

#civil-scheduler td {
    padding: 2px 2px;
    border: 1px solid #e3e6f0;
    background: #fff;
    vertical-align: middle;
}

#civil-scheduler .qty-input {
    width: 80px;
    padding: 2px;
    border: 1px solid #d1d3e2;
    text-align: center;
    font-weight: bold;
    color: #e74a3b;
}

#civil-scheduler .machine-badge {
    display: inline-block;
    background: #1cc88a;
    color: white;
    padding: 2px 2px;
    border-radius: 20px;
    font-size: 11px;
    font-weight: 700;
}

/* SCROLLBAR */
#civil-scheduler .table-container::-webkit-scrollbar,
.gantt-wrapper::-webkit-scrollbar {
    height: 10px;
    width: 10px;
}

#civil-scheduler .table-container::-webkit-scrollbar-thumb,
.gantt-wrapper::-webkit-scrollbar-thumb {
    background: #b8c2d6;
    border-radius: 10px;
}

/* 4. GANTT CHART STYLES */
.gantt-wrapper {
    margin-top: 30px;
    background: #fff;
    padding: 2px;
    border-radius: 8px;
    border: 1px solid #eaeeef;
    overflow: auto;
    max-height: 1700px;
}

.gantt-chart {
    display: grid;
    grid-template-columns: 250px 1fr;
    border: 1px solid #ddd;
    position: relative;
    min-width: 1600px;
    width: max-content;
}

.gantt-label {
    padding: 2px 2px;
    border-bottom: 1px solid #eee;
    background: #fdfdfd;
    font-size: 11px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.gantt-timeline {
    position: relative;
    height: 35px;
    border-bottom: 1px solid #eee;
    background-image: linear-gradient(
        to right,
        #f1f1f1 1px,
        transparent 1px
    );
    background-size: 5% 100%;
}

.gantt-bar {
    position: absolute;
    height: 16px;
    top: 9px;
    border-radius: 10px;
    background: #4e73df;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}

.monsoon-bar {
    background: #9b59b6 !important;
}

/* PDF EXPORT SAFE RULES */
.html2pdf__container,
.html2pdf__container * {
    box-sizing: border-box;
}

.html2pdf__container {
    background: #ffffff !important;
    color: #000000 !important;
    width: 100% !important;
    overflow: visible !important;
}

.html2pdf__container .controls,
.html2pdf__container button {
    display: none !important;
}

/* IMPORTANT: REMOVE SCROLL IN PDF */
.html2pdf__container .table-container {
    overflow: visible !important;
    max-height: none !important;
    height: auto !important;
}

.html2pdf__container .gantt-wrapper {
    overflow: visible !important;
    max-height: none !important;
    height: auto !important;
}

.html2pdf__container table {
    border-collapse: collapse !important;
    width: 100% !important;
    min-width: 1200px !important;
}

.html2pdf__container th,
.html2pdf__container td {
    border: 1px solid #d9d9d9 !important;
}

.html2pdf__container .gantt-chart {
    display: grid !important;
    grid-template-columns: 150px 1fr !important;
    min-width: 1600px !important;
    width: max-content !important;
}

/* Better rendering */
* {
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
}

/* A3 Landscape */
@page {
    size: A3 landscape;
    margin: 10mm;
}
#civil-scheduler select {
    width: 100%;
    padding: 2px;
    border: 1px solid #d1d3e2;
    border-radius: 5px;
    box-sizing: border-box;
    background: #fff;
}
  .start-date,
.end-date{
    width:130px;
    padding:2px;
    border:1px solid #d1d3e2;
    border-radius:4px;
    font-size:11px;
}
  .highlight{
    background:#fff8e1;
    border-left:5px solid #ff9800;
    padding:14px;
    margin:15px 0;
}

.formula{
    background:#e8f5e9;
    border-left:5px solid #2e7d32;
    padding:14px;
    font-weight:bold;
    margin:15px 0;
}

.note{
    background:#e3f2fd;
    border-left:5px solid #1976d2;
    padding:14px;
    margin:15px 0;
}
  pre{
    background:#272822;
    color:#f8f8f2;
    padding:15px;
    overflow:auto;
    border-radius:6px;
}

code{
    background:#eef2f5;
    padding:2px 5px;
    border-radius:4px;
    color:#c62828;
}

&lt;/style&gt;
  
  &lt;/head&gt;
&lt;body&gt;

&lt;!-- In your Blogger HTML, wrap your content like this: --&gt;
&lt;div id=&quot;civil-scheduler&quot;&gt;
    &lt;div class=&quot;card&quot;&gt;
        &lt;h2&gt;🚧 Road Project Resource &amp; Machinery Planner&lt;/h2&gt;
      
      &lt;div class=&quot;input-group&quot;&gt;
    &lt;label&gt;Project Name&lt;/label&gt;
    &lt;input id=&quot;projectName&quot; type=&quot;text&quot; placeholder=&quot;Enter Project Name&quot;&gt;
&lt;/div&gt;

&lt;div class=&quot;input-group&quot;&gt;
    &lt;label&gt;Saved Projects&lt;/label&gt;
    &lt;select id=&quot;savedProjects&quot;&gt;
        &lt;option value=&quot;&quot;&gt;Select Project&lt;/option&gt;
    &lt;/select&gt;
&lt;/div&gt;
      
      

&lt;button onclick=&quot;saveProject()&quot;&gt;Save Project&lt;/button&gt;
&lt;button onclick=&quot;loadProject()&quot;&gt;Load Project&lt;/button&gt;
&lt;button onclick=&quot;deleteProject()&quot;&gt;Delete Project&lt;/button&gt;
        
        &lt;div class=&quot;controls&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Work Order Date&lt;/label&gt;
                &lt;input id=&quot;woDate&quot; type=&quot;date&quot; onchange=&quot;regenerateProjectDates()&quot;&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Project Length (km)&lt;/label&gt;
                &lt;input id=&quot;projLength&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;10&quot; /&gt;
            &lt;/div&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label&gt;Duration (Days)&lt;/label&gt;
                &lt;input id=&quot;totalDuration&quot; type=&quot;number&quot; value=&quot;365&quot; /&gt;
            &lt;/div&gt;
            &lt;button onclick=&quot;generateSchedule()&quot;&gt;Generate Schedule&lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&quot;table-container&quot;&gt;
            &lt;table id=&quot;mainTable&quot;&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th style=&quot;min-width: 220px;&quot;&gt;Activity Description&lt;/th&gt;
                        &lt;th&gt;Quantity&lt;/th&gt;
                        &lt;th&gt;Unit&lt;/th&gt;
                        &lt;th&gt;Start Date&lt;/th&gt;
                        &lt;th&gt;End Date&lt;/th&gt;
                        &lt;th&gt;Days&lt;/th&gt;
                        &lt;th&gt;Machinery&lt;/th&gt;
                        &lt;th&gt;Output/Day&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody id=&quot;tbody&quot;&gt;
                    &lt;!-- JS will populate this --&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
  
  &lt;div class=&quot;gantt-wrapper&quot;&gt;
    &lt;h3&gt;Timeline Visualization&lt;/h3&gt;
    &lt;div id=&quot;ganttChart&quot; class=&quot;gantt-chart&quot;&gt;
        &lt;!-- JS will populate this --&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;button onclick=&quot;downloadPDF()&quot; style=&quot;background:#1cc88a;&quot;&gt;Download A3 PDF&lt;/button&gt;
  
  &lt;div class=&quot;container&quot;&gt;

&lt;h1&gt;Road Project Resource &amp; Machinery Planner – Civil Engineering Perspective&lt;/h1&gt;

&lt;p&gt;
This code is an advanced &lt;strong&gt;Road Construction Planning and Scheduling System&lt;/strong&gt;
developed for civil engineering projects.
&lt;/p&gt;

&lt;p&gt;
It automates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project Scheduling&lt;/li&gt;
&lt;li&gt;Road Construction Planning&lt;/li&gt;
&lt;li&gt;Machinery Requirement Analysis&lt;/li&gt;
&lt;li&gt;Resource Allocation&lt;/li&gt;
&lt;li&gt;Timeline Visualization&lt;/li&gt;
&lt;li&gt;Gantt Chart Generation&lt;/li&gt;
&lt;li&gt;Project Monitoring&lt;/li&gt;
&lt;li&gt;PDF Reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;1. Purpose of the Software&lt;/h2&gt;

&lt;p&gt;
This software behaves like a digital:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Construction Planning Cell&lt;/li&gt;
&lt;li&gt;Project Monitoring Unit (PMU)&lt;/li&gt;
&lt;li&gt;Road Execution Scheduler&lt;/li&gt;
&lt;li&gt;Machinery Deployment Planner&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Engineering Activity&lt;/th&gt;
&lt;th&gt;Code Function&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Project Scheduling&lt;/td&gt;
&lt;td&gt;&lt;code&gt;generateSchedule()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Machinery Planning&lt;/td&gt;
&lt;td&gt;&lt;code&gt;updateResources()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Duration Analysis&lt;/td&gt;
&lt;td&gt;&lt;code&gt;updateDuration()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Timeline Visualization&lt;/td&gt;
&lt;td&gt;&lt;code&gt;drawGantt()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;PDF Report Generation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;downloadPDF()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Project Saving&lt;/td&gt;
&lt;td&gt;&lt;code&gt;saveProject()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;2. Main User Interface&lt;/h2&gt;

&lt;pre&gt;
&amp;lt;div id=&quot;civil-scheduler&quot;&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
This is the complete project planning dashboard.
&lt;/p&gt;

&lt;p&gt;
The interface allows engineers to:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create projects&lt;/li&gt;
&lt;li&gt;Generate schedules&lt;/li&gt;
&lt;li&gt;Manage timelines&lt;/li&gt;
&lt;li&gt;Calculate machinery requirements&lt;/li&gt;
&lt;li&gt;Export reports&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;3. Project Information Inputs&lt;/h2&gt;

&lt;pre&gt;
&amp;lt;input id=&quot;projectName&quot;&amp;gt;
&amp;lt;input id=&quot;woDate&quot;&amp;gt;
&amp;lt;input id=&quot;projLength&quot;&amp;gt;
&amp;lt;input id=&quot;totalDuration&quot;&amp;gt;
&lt;/pre&gt;

&lt;h3&gt;Engineering Meaning&lt;/h3&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Engineering Purpose&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Project Name&lt;/td&gt;
&lt;td&gt;Identification of road work&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Work Order Date&lt;/td&gt;
&lt;td&gt;Project commencement reference&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Project Length&lt;/td&gt;
&lt;td&gt;Total road length in km&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Duration&lt;/td&gt;
&lt;td&gt;Total contractual period&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;div class=&quot;highlight&quot;&gt;
Equivalent to:
&lt;ul&gt;
&lt;li&gt;Work Program Register&lt;/li&gt;
&lt;li&gt;Contract Agreement Data&lt;/li&gt;
&lt;li&gt;Construction Time Schedule&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;4. IndexedDB Project Storage&lt;/h2&gt;

&lt;pre&gt;
const request = indexedDB.open(&quot;MoRTHPlannerDB&quot;, 1);
&lt;/pre&gt;

&lt;p&gt;
Creates a local browser database for storing projects.
&lt;/p&gt;

&lt;h3&gt;Engineering Interpretation&lt;/h3&gt;

&lt;p&gt;
Acts like:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Digital DPR Archive&lt;/li&gt;
&lt;li&gt;Construction Schedule Register&lt;/li&gt;
&lt;li&gt;Project Monitoring Database&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;5. Saving Projects&lt;/h2&gt;

&lt;pre&gt;
function saveProject()
&lt;/pre&gt;

&lt;p&gt;
Stores:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project Details&lt;/li&gt;
&lt;li&gt;Schedule Table&lt;/li&gt;
&lt;li&gt;Gantt Chart&lt;/li&gt;
&lt;li&gt;Timeline Data&lt;/li&gt;
&lt;li&gt;Resource Calculations&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;note&quot;&gt;
Equivalent to saving:
&lt;ul&gt;
&lt;li&gt;CPM Charts&lt;/li&gt;
&lt;li&gt;Bar Charts&lt;/li&gt;
&lt;li&gt;Construction Programs&lt;/li&gt;
&lt;li&gt;Project Planning Reports&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;6. Project Loading &amp; Deletion&lt;/h2&gt;

&lt;pre&gt;
loadProject()
deleteProject()
&lt;/pre&gt;

&lt;p&gt;
Allows:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opening saved construction schedules&lt;/li&gt;
&lt;li&gt;Revising project plans&lt;/li&gt;
&lt;li&gt;Removing old schedules&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;7. Schedule Generation Engine&lt;/h2&gt;

&lt;pre&gt;
function generateSchedule()
&lt;/pre&gt;

&lt;p&gt;
This is the core planning engine of the software.
&lt;/p&gt;

&lt;h3&gt;Engineering Purpose&lt;/h3&gt;

&lt;p&gt;
Automatically generates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Construction Activities&lt;/li&gt;
&lt;li&gt;Start Dates&lt;/li&gt;
&lt;li&gt;End Dates&lt;/li&gt;
&lt;li&gt;Machinery Deployment&lt;/li&gt;
&lt;li&gt;Execution Sequence&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;8. Activity Template&lt;/h2&gt;

&lt;pre&gt;
const activityTemplate = [
[&quot;Earthwork (Embankment/Subgrade)&quot;, 0.12, 0.50, &quot;cum&quot;, 300]
]
&lt;/pre&gt;

&lt;h3&gt;Engineering Interpretation&lt;/h3&gt;

&lt;p&gt;
Each activity contains:
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Activity Name&lt;/td&gt;
&lt;td&gt;Construction Operation&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Start Fraction&lt;/td&gt;
&lt;td&gt;Project Start Position&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;End Fraction&lt;/td&gt;
&lt;td&gt;Project Completion Position&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Unit&lt;/td&gt;
&lt;td&gt;Measurement Unit&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Output Rate&lt;/td&gt;
&lt;td&gt;Daily Machinery Productivity&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;9. Pre-Construction Activities&lt;/h2&gt;

&lt;p&gt;
The software includes planning activities such as:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DPR Preparation&lt;/li&gt;
&lt;li&gt;Forest Clearance&lt;/li&gt;
&lt;li&gt;Utility Shifting&lt;/li&gt;
&lt;li&gt;Land Acquisition&lt;/li&gt;
&lt;li&gt;Tender Process&lt;/li&gt;
&lt;li&gt;Agreement Execution&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlight&quot;&gt;
This makes the software highly realistic for:
&lt;ul&gt;
&lt;li&gt;MoRTH Projects&lt;/li&gt;
&lt;li&gt;PWD Road Works&lt;/li&gt;
&lt;li&gt;EPC Contracts&lt;/li&gt;
&lt;li&gt;BOT Highway Projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;10. Construction Activities&lt;/h2&gt;

&lt;p&gt;
The software includes actual field construction operations:
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Activity&lt;/th&gt;
&lt;th&gt;Engineering Work&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Earthwork&lt;/td&gt;
&lt;td&gt;Formation &amp; Embankment&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;GSB&lt;/td&gt;
&lt;td&gt;Granular Sub Base&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;WMM&lt;/td&gt;
&lt;td&gt;Wet Mix Macadam&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;DBM&lt;/td&gt;
&lt;td&gt;Dense Bituminous Macadam&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;PQC&lt;/td&gt;
&lt;td&gt;Pavement Quality Concrete&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;BC/SDBC&lt;/td&gt;
&lt;td&gt;Bituminous Wearing Course&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;11. Automatic Quantity Estimation&lt;/h2&gt;

&lt;pre&gt;
const getQty = (name) =&gt; {
    if(name.includes(&quot;Embankment&quot;))
        return km * 4500;
}
&lt;/pre&gt;

&lt;p&gt;
The software estimates quantities automatically using road length.
&lt;/p&gt;

&lt;h3&gt;Engineering Meaning&lt;/h3&gt;

&lt;p&gt;
Example:
&lt;/p&gt;

&lt;div class=&quot;formula&quot;&gt;
Earthwork Quantity = Road Length × Standard Earthwork Factor
&lt;/div&gt;

&lt;p&gt;
For a 10 km road:
&lt;/p&gt;

&lt;div class=&quot;formula&quot;&gt;
Earthwork = 10 × 4500 = 45,000 cum
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;12. Unit Determination Logic&lt;/h2&gt;

&lt;pre&gt;
getUnit()
&lt;/pre&gt;

&lt;p&gt;
Automatically assigns engineering units:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cum → Earthwork&lt;/li&gt;
&lt;li&gt;sqm → Pavement Layers&lt;/li&gt;
&lt;li&gt;m → Drainage&lt;/li&gt;
&lt;li&gt;nos → Structures&lt;/li&gt;
&lt;li&gt;Ha → Forest Clearance&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;13. Dynamic Date Generation&lt;/h2&gt;

&lt;pre&gt;
addDays()
formatDate()
&lt;/pre&gt;

&lt;p&gt;
Automatically calculates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Activity Start Date&lt;/li&gt;
&lt;li&gt;Activity End Date&lt;/li&gt;
&lt;li&gt;Total Duration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Engineering Significance&lt;/h3&gt;

&lt;p&gt;
Equivalent to:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPM Scheduling&lt;/li&gt;
&lt;li&gt;PERT Planning&lt;/li&gt;
&lt;li&gt;Bar Chart Planning&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;14. Monsoon Adjustment Logic&lt;/h2&gt;

&lt;pre&gt;
if (task[0].includes(&quot;Bituminous&quot;))
&lt;/pre&gt;

&lt;p&gt;
This is one of the most important engineering features.
&lt;/p&gt;

&lt;p&gt;
The software detects:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bituminous activities during monsoon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
and automatically postpones them.
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;
Engineering Reason:
&lt;ul&gt;
&lt;li&gt;Bituminous works should not be executed during heavy rainfall&lt;/li&gt;
&lt;li&gt;Moisture affects compaction&lt;/li&gt;
&lt;li&gt;Rain damages hot mix quality&lt;/li&gt;
&lt;li&gt;Temperature control becomes difficult&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;
This reflects actual site engineering practice.
&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;15. Machinery Requirement Calculation&lt;/h2&gt;

&lt;pre&gt;
machinesNeeded = qty / (dur × stdRate)
&lt;/pre&gt;

&lt;div class=&quot;formula&quot;&gt;
Machinery Sets Required =
Quantity ÷ (Available Days × Daily Production)
&lt;/div&gt;

&lt;h3&gt;Example&lt;/h3&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Earthwork Quantity&lt;/td&gt;
&lt;td&gt;45,000 cum&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Duration&lt;/td&gt;
&lt;td&gt;50 Days&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Excavator Output&lt;/td&gt;
&lt;td&gt;300 cum/day&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;div class=&quot;formula&quot;&gt;
Machines Needed =
45000 ÷ (50 × 300)
= 3 Sets
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;16. Resource Warning System&lt;/h2&gt;

&lt;pre&gt;
badge.style.background =
(machinesNeeded &gt; 15)
&lt;/pre&gt;

&lt;p&gt;
If machinery requirement becomes excessive:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System shows warning color&lt;/li&gt;
&lt;li&gt;Indicates unrealistic planning&lt;/li&gt;
&lt;li&gt;Suggests schedule revision&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;17. Duration Update Logic&lt;/h2&gt;

&lt;pre&gt;
updateDuration()
&lt;/pre&gt;

&lt;p&gt;
If engineer changes dates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Duration recalculates automatically&lt;/li&gt;
&lt;li&gt;Machinery requirements update instantly&lt;/li&gt;
&lt;li&gt;Gantt chart refreshes automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;18. Gantt Chart Generation&lt;/h2&gt;

&lt;pre&gt;
drawGantt()
drawEditableGantt()
&lt;/pre&gt;

&lt;p&gt;
This generates a visual construction timeline.
&lt;/p&gt;

&lt;h3&gt;Engineering Meaning&lt;/h3&gt;

&lt;p&gt;
Equivalent to:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MS Project Charts&lt;/li&gt;
&lt;li&gt;Primavera Schedules&lt;/li&gt;
&lt;li&gt;Construction Bar Charts&lt;/li&gt;
&lt;li&gt;Highway Execution Programs&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;19. Timeline Header&lt;/h2&gt;

&lt;pre&gt;
month:&#39;short&#39;,
year:&#39;2-digit&#39;
&lt;/pre&gt;

&lt;p&gt;
The software automatically creates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monthly Progress Timeline&lt;/li&gt;
&lt;li&gt;Year-wise Schedule Markers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Example:
&lt;/p&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Jan-26&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Feb-26&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Mar-26&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;20. Gantt Bars&lt;/h2&gt;

&lt;pre&gt;
bar.style.left
bar.style.width
&lt;/pre&gt;

&lt;p&gt;
These determine:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Activity start position&lt;/li&gt;
&lt;li&gt;Activity duration&lt;/li&gt;
&lt;li&gt;Execution overlap&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Engineering Interpretation&lt;/h3&gt;

&lt;p&gt;
Allows engineers to visualize:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Critical activities&lt;/li&gt;
&lt;li&gt;Parallel operations&lt;/li&gt;
&lt;li&gt;Project sequencing&lt;/li&gt;
&lt;li&gt;Resource conflicts&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;21. Editable Scheduling&lt;/h2&gt;

&lt;p&gt;
When engineers manually edit dates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schedule updates dynamically&lt;/li&gt;
&lt;li&gt;Resources recalculate&lt;/li&gt;
&lt;li&gt;Timeline regenerates&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;note&quot;&gt;
Equivalent to live project planning in:
&lt;ul&gt;
&lt;li&gt;Primavera P6&lt;/li&gt;
&lt;li&gt;MS Project&lt;/li&gt;
&lt;li&gt;TILOS&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;hr&gt;

&lt;h2&gt;22. PDF Report Generation&lt;/h2&gt;

&lt;pre&gt;
downloadPDF()
&lt;/pre&gt;

&lt;p&gt;
Generates:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A3 Project Schedule&lt;/li&gt;
&lt;li&gt;Printable Gantt Charts&lt;/li&gt;
&lt;li&gt;Construction Planning Reports&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Engineering Importance&lt;/h3&gt;

&lt;p&gt;
Useful for:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review Meetings&lt;/li&gt;
&lt;li&gt;Progress Monitoring&lt;/li&gt;
&lt;li&gt;Client Submission&lt;/li&gt;
&lt;li&gt;Authority Approvals&lt;/li&gt;
&lt;li&gt;Site Execution Planning&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;23. Automatic File Naming&lt;/h2&gt;

&lt;pre&gt;
Road_Project_2026-05-14.pdf
&lt;/pre&gt;

&lt;p&gt;
The system automatically:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adds Project Name&lt;/li&gt;
&lt;li&gt;Adds Date&lt;/li&gt;
&lt;li&gt;Creates organized documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;24. Engineering Strengths of This Software&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Realistic Construction Sequencing&lt;/li&gt;
&lt;li&gt;Automatic Machinery Planning&lt;/li&gt;
&lt;li&gt;Monsoon-sensitive Scheduling&lt;/li&gt;
&lt;li&gt;Dynamic Resource Allocation&lt;/li&gt;
&lt;li&gt;Editable Gantt Charts&lt;/li&gt;
&lt;li&gt;Automatic Quantity Estimation&lt;/li&gt;
&lt;li&gt;Project Database Storage&lt;/li&gt;
&lt;li&gt;A3 PDF Reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;25. Practical Applications&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MoRTH Highway Projects&lt;/li&gt;
&lt;li&gt;PWD Road Works&lt;/li&gt;
&lt;li&gt;Rural Roads&lt;/li&gt;
&lt;li&gt;Expressways&lt;/li&gt;
&lt;li&gt;Bridge Approach Roads&lt;/li&gt;
&lt;li&gt;Urban Roads&lt;/li&gt;
&lt;li&gt;Industrial Corridor Projects&lt;/li&gt;
&lt;li&gt;EPC Contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;26. Equivalent Commercial Software&lt;/h2&gt;

&lt;p&gt;
This code partially replicates features of:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primavera P6&lt;/li&gt;
&lt;li&gt;MS Project&lt;/li&gt;
&lt;li&gt;TILOS&lt;/li&gt;
&lt;li&gt;Asta Powerproject&lt;/li&gt;
&lt;li&gt;Candy Construction Planning&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;27. Final Engineering Interpretation&lt;/h2&gt;

&lt;div class=&quot;highlight&quot;&gt;
This software is a browser-based road construction planning and machinery deployment system integrating:
&lt;ul&gt;
&lt;li&gt;Construction Scheduling&lt;/li&gt;
&lt;li&gt;Road Activity Sequencing&lt;/li&gt;
&lt;li&gt;Resource Planning&lt;/li&gt;
&lt;li&gt;Machinery Analysis&lt;/li&gt;
&lt;li&gt;Timeline Visualization&lt;/li&gt;
&lt;li&gt;Gantt Chart Monitoring&lt;/li&gt;
&lt;li&gt;Project Archiving&lt;/li&gt;
&lt;li&gt;PDF Reporting&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;
In practical civil engineering terms, this software automates the complete workflow from project initiation to construction scheduling, machinery deployment, and progress visualization for road infrastructure projects.
&lt;/p&gt;

&lt;/div&gt;
  
  
&lt;script&gt;
  
  let db;

const request = indexedDB.open(&quot;MoRTHPlannerDB&quot;, 1);

request.onupgradeneeded = function(e) {

    db = e.target.result;

    if (!db.objectStoreNames.contains(&quot;projects&quot;)) {

        db.createObjectStore(&quot;projects&quot;, {
            keyPath: &quot;name&quot;
        });

    }
};

request.onsuccess = function(e) {

    db = e.target.result;

    refreshProjectList();
};

request.onerror = function() {

    alert(&quot;IndexedDB failed&quot;);
};

function saveProject() {

    const projectName =
        document.getElementById(&quot;projectName&quot;).value.trim();

    if (!projectName) {

        alert(&quot;Enter Project Name&quot;);
        return;
    }

    const projectData = {

        name: projectName,

        woDate:
            document.getElementById(&quot;woDate&quot;).value,

        projLength:
            document.getElementById(&quot;projLength&quot;).value,

        totalDuration:
            document.getElementById(&quot;totalDuration&quot;).value,

        tableHTML:
            document.getElementById(&quot;tbody&quot;).innerHTML,

        ganttHTML:
            document.getElementById(&quot;ganttChart&quot;).innerHTML,

        savedAt:
            new Date().toISOString()
    };

    const tx = db.transaction(
        [&quot;projects&quot;],
        &quot;readwrite&quot;
    );

    const store = tx.objectStore(&quot;projects&quot;);

    store.put(projectData);

    tx.oncomplete = function() {

        alert(&quot;Project Saved&quot;);

        refreshProjectList();
    };
}

function refreshProjectList() {

    const dropdown =
        document.getElementById(&quot;savedProjects&quot;);

    dropdown.innerHTML =
        &#39;&lt;option value=&quot;&quot;&gt;Select Project&lt;/option&gt;&#39;;

    const tx =
        db.transaction([&quot;projects&quot;], &quot;readonly&quot;);

    const store =
        tx.objectStore(&quot;projects&quot;);

    const request =
        store.getAll();

    request.onsuccess = function() {

        request.result.forEach(project =&gt; {

            const option =
                document.createElement(&quot;option&quot;);

            option.value = project.name;

            option.textContent = project.name;

            dropdown.appendChild(option);
        });
    };
}

function loadProject() {

    const projectName =
        document.getElementById(&quot;savedProjects&quot;).value;

    if (!projectName) {

        alert(&quot;Select Project&quot;);
        return;
    }

    const tx =
        db.transaction([&quot;projects&quot;], &quot;readonly&quot;);

    const store =
        tx.objectStore(&quot;projects&quot;);

    const request =
        store.get(projectName);

    request.onsuccess = function() {

        const data = request.result;

        if (!data) return;

        document.getElementById(&quot;projectName&quot;).value =
            data.name;

        document.getElementById(&quot;woDate&quot;).value =
            data.woDate;

        document.getElementById(&quot;projLength&quot;).value =
            data.projLength;

        document.getElementById(&quot;totalDuration&quot;).value =
            data.totalDuration;

        document.getElementById(&quot;tbody&quot;).innerHTML =
            data.tableHTML;

        document.getElementById(&quot;ganttChart&quot;).innerHTML =
            data.ganttHTML;

        restoreRowEvents();
      
      regenerateGanttFromTable();

        alert(&quot;Project Loaded&quot;);
    };
}

function deleteProject() {

    const projectName =
        document.getElementById(&quot;savedProjects&quot;).value;

    if (!projectName) {

        alert(&quot;Select Project&quot;);
        return;
    }

    if (!confirm(&quot;Delete Project?&quot;)) return;

    const tx =
        db.transaction([&quot;projects&quot;], &quot;readwrite&quot;);

    const store =
        tx.objectStore(&quot;projects&quot;);

    store.delete(projectName);

    tx.oncomplete = function() {

        refreshProjectList();

        alert(&quot;Project Deleted&quot;);
    };
}

function restoreRowEvents() {

    document
    .querySelectorAll(&quot;.qty-input&quot;)
    .forEach(input =&gt; {

        input.oninput = function() {

            updateResources(
                this.parentElement.parentElement
            );
        };
    });

    document
    .querySelectorAll(&quot;.start-date, .end-date&quot;)
    .forEach(input =&gt; {

        input.onchange = function() {

            updateDuration(
                this.parentElement.parentElement
            );
        };
    });
}
  
function addDays(date, days) {
    let d = new Date(date);
    d.setDate(d.getDate() + days);
    return d;
}

function formatDate(d) {
    return d.toLocaleDateString(&#39;en-GB&#39;).replace(/\//g, &#39;-&#39;);
}

function generateSchedule() {
    const woInput = document.getElementById(&quot;woDate&quot;).value;
    if (!woInput) { alert(&quot;Please select a Work Order Date&quot;); return; }
    
    const wo = new Date(woInput);
    const km = parseFloat(document.getElementById(&quot;projLength&quot;).value) || 0;
    const totalProjDays = parseInt(document.getElementById(&quot;totalDuration&quot;).value) || 365;
    const tbody = document.getElementById(&quot;tbody&quot;);
    tbody.innerHTML = &quot;&quot;;

    let scheduleData = []; // To store data for Gantt

const activityTemplate = [
        // Added Survey &amp; Investigation Activities (Pre-construction phase)
        [&quot;Topographic Survey&quot;, -0.50, -0.42, &quot;km&quot;, 2.0],
        [&quot;Geotechnical Investigation&quot;, -0.48, -0.40, &quot;nos&quot;, 1.0],
        [&quot;Traffic Survey&quot;, -0.48, -0.44, &quot;Job&quot;, 1.0],
        
        // Original activities
        [&quot;DPR Preparation including costing&quot;, -0.45, -0.35, &quot;Job&quot;, 0.05],
        [&quot;DPR Approval&quot;, -0.35, -0.28, &quot;Job&quot;, 0.1],
        [&quot;Administrative and Financial approval&quot;, -0.28, -0.20, &quot;Job&quot;, 0.1],
        [&quot;Forest Clearance (Tree Cutting/ROW)&quot;, -0.25, -0.02, &quot;Ha&quot;, 0.2],
        [&quot;Utility Clearance (MJP/Irrigation/EB)&quot;, -0.20, -0.05, &quot;km&quot;, 0.1],
        [&quot;Statutory Clearance (CRZ/NGT/Railway)&quot;, -0.25, -0.02, &quot;Job&quot;, 0.02],
        [&quot;Land Acquisition/Transfer&quot;, -0.30, -0.05, &quot;Ha&quot;, 0.1],
        [&quot;Encroachment Removal&quot;, -0.15, -0.05, &quot;km&quot;, 0.2],
        [&quot;Preparation of Bid Document&quot;, -0.25, -0.20, &quot;Job&quot;, 0.2],
        [&quot;Tender Publication &amp; Submission&quot;, -0.20, -0.12, &quot;Job&quot;, 0.05],
        [&quot;Technical &amp; Financial Evaluation&quot;, -0.12, -0.06, &quot;Job&quot;, 0.1],
        [&quot;LOA Issuance &amp; Acceptance&quot;, -0.06, -0.03, &quot;Job&quot;, 0.2],
        [&quot;Agreement &amp; Security Deposit&quot;, -0.03, -0.01, &quot;Job&quot;, 0.2],
        [&quot;Work Order Issuance&quot;, 0.00, 0.00, &quot;Date&quot;, 1],
        [&quot;Project Kick start &amp; Deployment&quot;, 0.01, 0.05, &quot;Job&quot;, 0.1],
        [&quot;Retaining Wall / Toe Wall&quot;, 0.05, 0.40, &quot;cum&quot;, 14], 
        [&quot;Culverts (New/Repair)&quot;, 0.08, 0.60, &quot;nos&quot;, 0.1],
        [&quot;RCC Box Drain / Pipe Drain&quot;, 0.10, 0.70, &quot;m&quot;, 25],
        [&quot;Clearing and Grubbing&quot;, 0.02, 0.20, &quot;Ha&quot;, 0.5],
        [&quot;Earthwork (Embankment/Subgrade)&quot;, 0.12, 0.50, &quot;cum&quot;, 300],
        [&quot;Sub-Base Course (GSB)&quot;, 0.25, 0.65, &quot;cum&quot;, 36],
        [&quot;Non Bituminous Base Course (WMM)&quot;, 0.40, 0.75, &quot;cum&quot;, 200],
        [&quot;Bituminous Base Course (DBM)&quot;, 0.55, 0.90, &quot;sqm&quot;, 640],
        [&quot;Dry Lean Concrete (DLC)&quot;, 0.45, 0.80, &quot;cum&quot;, 20],
        [&quot;Pavement Quality Concrete (PQC)&quot;, 0.50, 0.90, &quot;cum&quot;, 14],
        [&quot;Bituminous Wearing Course (BC/SDBC)&quot;, 0.80, 0.98, &quot;sqm&quot;, 760],
        [&quot;Side Shoulders&quot;, 0.85, 0.99, &quot;sqm&quot;, 500],
        [&quot;RCC Cover Slab Drain&quot;, 0.60, 0.90, &quot;m&quot;, 30],
        [&quot;Junction Development&quot;, 0.70, 0.95, &quot;nos&quot;, 0.1],
        [&quot;Bus Shelter &amp; Toilet Blocks&quot;, 0.50, 0.90, &quot;nos&quot;, 0.05],
        [&quot;Crash Barrier&quot;, 0.80, 0.98, &quot;m&quot;, 50],
        [&quot;Traffic Signs &amp; Gantry&quot;, 0.90, 1.00, &quot;nos&quot;, 2],
        [&quot;Road Marking&quot;, 0.92, 1.00, &quot;sqm&quot;, 400],
        [&quot;Solar Lights / Blinkers&quot;, 0.90, 1.00, &quot;nos&quot;, 5],
        [&quot;Km Stones &amp; Finishing&quot;, 0.95, 1.00, &quot;nos&quot;, 2]
    ];

    const getQty = (name) =&gt; {
        // Quantity rules for new surveys
        if(name.includes(&quot;Topographic Survey&quot;)) return km;
        if(name.includes(&quot;Geotechnical Investigation&quot;)) return Math.max(1, Math.round(km * 2)); // Assumes 2 boreholes/trial pits per km
        if(name.includes(&quot;Traffic Survey&quot;)) return 1; 

        // Original quantity rules
        if(name.includes(&quot;Embankment&quot;)) return km * 4500;
        if(name.includes(&quot;GSB&quot;)) return km * 2500;
        if(name.includes(&quot;WMM&quot;)) return km * 2000;
        if(name.includes(&quot;Bituminous&quot;)) return km * 7000;
        if(name.includes(&quot;DLC&quot;)) return km * 2200; 
        if(name.includes(&quot;PQC&quot;)) return km * 2200;
        if(name.includes(&quot;Retaining&quot;)) return km * 150;
        if(name.includes(&quot;RCC Box Drain&quot;)) return km * 1000;
        if(name.includes(&quot;Forest&quot;)) return km * 0.8;
        if(name.includes(&quot;Land Acquisition&quot;)) return km * 1.5;
        if(name.includes(&quot;Clearing and Grubbing&quot;)) return km * 0.7;
        if(name.includes(&quot;Cover Slab Drain&quot;)) return km * 500;
        if(name.includes(&quot;Crash Barrier&quot;)) return km * 200;
        if(name.includes(&quot;Marking&quot;)) return km * 150;
        if(name.includes(&quot;Utility&quot;) || name.includes(&quot;Encroachment&quot;)) return km;
        if(name.includes(&quot;Junction&quot;)) return 4;
        if(name.includes(&quot;Bus Shelter&quot;)) return 2;
        return 1;
    }

    const getUnit = (name) =&gt; {
        if(name.includes(&quot;sqm&quot;) || name.includes(&quot;Bituminous&quot;) || name.includes(&quot;Marking&quot;) || name.includes(&quot;Shoulders&quot;)) return &quot;sqm&quot;;
        if(name.includes(&quot;cum&quot;) || name.includes(&quot;Earthwork&quot;) || name.includes(&quot;Base Course&quot;) || name.includes(&quot;PQC&quot;)  || name.includes(&quot;DLC&quot;) || name.includes(&quot;Wall&quot;)) return &quot;cum&quot;;
        if(name.includes(&quot;nos&quot;) || name.includes(&quot;Culverts&quot;) || name.includes(&quot;Junction&quot;) || name.includes(&quot;Shelter&quot;) || name.includes(&quot;Km Stones&quot;) || name.includes(&quot;Geotechnical&quot;)) return &quot;nos&quot;;
        if(name.includes(&quot;Ha&quot;) || name.includes(&quot;Forest&quot;) || name.includes(&quot;Clearing&quot;)) return &quot;Ha&quot;;
        if(name.includes(&quot;m&quot;) || name.includes(&quot;Drain&quot;) || name.includes(&quot;Barrier&quot;)) return &quot;m&quot;;
        if(name.includes(&quot;km&quot;) || name.includes(&quot;Topographic&quot;)) return &quot;km&quot;;
        return &quot;Job&quot;;
    }

    activityTemplate.forEach((task) =&gt; {
        let row = tbody.insertRow();
        let startDays = Math.round(task[1] * totalProjDays);
        let endDays = Math.round(task[2] * totalProjDays);
        let workDuration = Math.max(1, endDays - startDays);
        
        let sDate = addDays(wo, startDays);
        let eDate = addDays(wo, endDays);
        let isMonsoon = false;

        if (task[0].includes(&quot;Bituminous&quot;) &amp;&amp; !task[0].includes(&quot;Non&quot;)) {
            if (sDate.getMonth() &gt;= 5 &amp;&amp; sDate.getMonth() &lt;= 8) {
                sDate = new Date(sDate.getFullYear(), 9, 1);
                eDate = addDays(sDate, workDuration);
                isMonsoon = true;
            }
        }

        row.innerHTML = `
            &lt;td style=&quot;text-align:left&quot;&gt;${task[0]}&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;number&quot; class=&quot;qty-input&quot; value=&quot;${Math.round(getQty(task[0]))}&quot; oninput=&quot;updateResources(this.parentElement.parentElement)&quot;&gt;&lt;/td&gt;
            &lt;td&gt;${getUnit(task[0])}&lt;/td&gt;
            &lt;td&gt;
    &lt;input 
        type=&quot;date&quot; 
        class=&quot;start-date&quot; 
        value=&quot;${sDate.toISOString().split(&#39;T&#39;)[0]}&quot;
        onchange=&quot;updateDuration(this.parentElement.parentElement)&quot;
    &gt;
&lt;/td&gt;

&lt;td&gt;
    &lt;input 
        type=&quot;date&quot; 
        class=&quot;end-date&quot; 
        value=&quot;${eDate.toISOString().split(&#39;T&#39;)[0]}&quot;
        onchange=&quot;updateDuration(this.parentElement.parentElement)&quot;
    &gt;
&lt;/td&gt;
            &lt;td class=&quot;dur-val&quot;&gt;${workDuration}&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;machine-badge&quot;&gt;--&lt;/span&gt;&lt;/td&gt;
            &lt;td class=&quot;std-out&quot;&gt;${task[4]}&lt;/td&gt;
        `;
        row.dataset.mRate = task[4];
        updateResources(row);

        // Save data for Gantt
        scheduleData.push({
            name: task[0],
            start: startDays,
            end: startDays + workDuration,
            isMonsoon: isMonsoon
        });
    });

    drawGantt(scheduleData, totalProjDays);
}

function updateResources(row) {
    const qty = parseFloat(row.querySelector(&#39;.qty-input&#39;).value) || 0;
    const dur = parseInt(row.querySelector(&#39;.dur-val&#39;).innerText) || 1;
    const stdRate = parseFloat(row.dataset.mRate);

    // Engineering Formula: Quantity / (Available Days * Machine Production)
    let machinesNeeded = Math.ceil(qty / (dur * stdRate));
    
    const badge = row.querySelector(&#39;.machine-badge&#39;);
    badge.innerText = machinesNeeded + (machinesNeeded &gt; 1 ? &quot; Sets&quot; : &quot; Set&quot;);
    
    // UI Warning if resources are too high
    badge.style.background = (machinesNeeded &gt; 15) ? &quot;#eb4d4b&quot; : &quot;#20bf6b&quot;;
}
  
function updateDuration(row) {

    const startVal =
        row.querySelector(&quot;.start-date&quot;).value;

    const endVal =
        row.querySelector(&quot;.end-date&quot;).value;

    if (!startVal || !endVal) return;

    // Safe date parsing
    const start = new Date(startVal + &quot;T00:00:00&quot;);
    const end = new Date(endVal + &quot;T00:00:00&quot;);

    let diff =
        Math.ceil(
            (end - start) /
            (1000 * 60 * 60 * 24)
        );

    if (diff &lt; 1) diff = 1;

    row.querySelector(&quot;.dur-val&quot;).innerText = diff;

    updateResources(row);

    // IMPORTANT → Refresh Gantt
    regenerateGanttFromTable();
}
  
  function regenerateGanttFromTable() {

    const rows =
        document.querySelectorAll(&quot;#tbody tr&quot;);

    const ganttData = [];

    let minDate = null;
    let maxDate = null;

    rows.forEach(row =&gt; {

        const task =
            row.cells[0].innerText;

        const startVal =
            row.querySelector(&quot;.start-date&quot;).value;

        const endVal =
            row.querySelector(&quot;.end-date&quot;).value;

        if (!startVal || !endVal) return;

        const start =
            new Date(startVal + &quot;T00:00:00&quot;);

        const end =
            new Date(endVal + &quot;T00:00:00&quot;);

        if (!minDate || start &lt; minDate)
            minDate = start;

        if (!maxDate || end &gt; maxDate)
            maxDate = end;

        ganttData.push({
            name: task,
            startDate: start,
            endDate: end
        });
    });

    drawEditableGantt(ganttData, minDate, maxDate);
}
  
function drawEditableGantt(data, minDate, maxDate) {

    const chart =
        document.getElementById(&quot;ganttChart&quot;);

    chart.innerHTML = &quot;&quot;;

    const totalRange =
        Math.ceil(
            (maxDate - minDate) /
            (1000 * 60 * 60 * 24)
        );

    // Header spacer
    const spacer = document.createElement(&quot;div&quot;);
    spacer.style.background = &quot;#4e73df&quot;;
    chart.appendChild(spacer);

    // Timeline Header
    const header = document.createElement(&quot;div&quot;);

    header.style.cssText =
        &quot;position:relative;height:30px;background:#4e73df;color:white;font-size:10px;font-weight:bold;&quot;;

    let current =
        new Date(minDate);

    current.setDate(1);

    while (current &lt;= maxDate) {

        const tick =
            document.createElement(&quot;div&quot;);

        const offset =
            (current - minDate) /
            (1000 * 60 * 60 * 24);

        const left =
            (offset / totalRange) * 100;

        tick.style.cssText =
            `position:absolute;
             left:${left}%;
             border-left:1px solid rgba(255,255,255,0.3);
             height:100%;
             padding-left:4px;
             display:flex;
             align-items:center;`;

        tick.innerText =
            current.toLocaleString(
                &#39;default&#39;,
                {
                    month:&#39;short&#39;,
                    year:&#39;2-digit&#39;
                }
            );

        header.appendChild(tick);

        current.setMonth(current.getMonth() + 1);
    }

    chart.appendChild(header);

    // Tasks
    data.forEach(task =&gt; {

        const label =
            document.createElement(&quot;div&quot;);

        label.className = &quot;gantt-label&quot;;

        label.innerText = task.name;

        const timeline =
            document.createElement(&quot;div&quot;);

        timeline.className = &quot;gantt-timeline&quot;;

        const bar =
            document.createElement(&quot;div&quot;);

        bar.className = &quot;gantt-bar&quot;;

        const left =
            ((task.startDate - minDate) /
            (1000 * 60 * 60 * 24) /
            totalRange) * 100;

        const width =
            ((task.endDate - task.startDate) /
            (1000 * 60 * 60 * 24) /
            totalRange) * 100;

        bar.style.left = left + &quot;%&quot;;

        bar.style.width =
            Math.max(0.5, width) + &quot;%&quot;;

        timeline.appendChild(bar);

        chart.appendChild(label);

        chart.appendChild(timeline);
    });
}
  
function drawGantt(data, totalDays) {
    const chart = document.getElementById(&quot;ganttChart&quot;);
    chart.innerHTML = &quot;&quot;;
    const woDate = new Date(document.getElementById(&quot;woDate&quot;).value);

    const minStart = Math.min(...data.map(d =&gt; d.start));
    const maxEnd = Math.max(...data.map(d =&gt; d.end));
    const range = maxEnd - minStart;

    // Create Date Header
    const spacer = document.createElement(&quot;div&quot;);
    spacer.style.background = &quot;#4e73df&quot;;
    chart.appendChild(spacer);

    const header = document.createElement(&quot;div&quot;);
    header.style.cssText = &quot;position:relative; height:30px; background:#4e73df; color:white; font-size:10px; font-weight:bold;&quot;;
    
    let current = addDays(woDate, minStart);
    current.setDate(1); // Align to start of month
    const end = addDays(woDate, maxEnd);

    while (current &lt;= end) {
        const tick = document.createElement(&quot;div&quot;);
        const offset = (current - addDays(woDate, minStart)) / (1000*60*60*24);
        const left = (offset / range) * 100;
        
        if (left &gt;= 0 &amp;&amp; left &lt; 100) {
            tick.style.cssText = `position:absolute; left:${left}%; border-left:1px solid rgba(255,255,255,0.3); height:100%; padding-left:4px; display:flex; align-items:center;`;
            tick.innerText = current.toLocaleString(&#39;default&#39;, { month: &#39;short&#39;, year: &#39;2-digit&#39; });
            header.appendChild(tick);
        }
        current.setMonth(current.getMonth() + 1);
    }
    chart.appendChild(header);

    // Render Task Rows
    data.forEach(task =&gt; {
        const label = document.createElement(&quot;div&quot;);
        label.className = &quot;gantt-label&quot;;
        label.innerText = task.name;

        const timeline = document.createElement(&quot;div&quot;);
        timeline.className = &quot;gantt-timeline&quot;;

        const bar = document.createElement(&quot;div&quot;);
        bar.className = &quot;gantt-bar&quot; + (task.isMonsoon ? &quot; monsoon-bar&quot; : &quot;&quot;);
        const left = ((task.start - minStart) / range) * 100;
        const width = ((task.end - task.start) / range) * 100;

        bar.style.left = left + &quot;%&quot;;
        bar.style.width = Math.max(0.5, width) + &quot;%&quot;;
        
        timeline.appendChild(bar);
        chart.appendChild(label);
        chart.appendChild(timeline);
    });
}
  
async function downloadPDF() {
  
  if (
    !document.getElementById(&quot;tbody&quot;).innerHTML.trim()
) {
    alert(&quot;Generate Schedule First&quot;);
    return;
}

    const element = document.createElement(&quot;div&quot;);

    element.style.background = &quot;#ffffff&quot;;
    element.style.padding = &quot;20px&quot;;
    element.style.width = &quot;1600px&quot;;

    const title = document.createElement(&quot;h2&quot;);
  
    const projectName =
    document.getElementById(&quot;projectName&quot;).value ||
    &quot;Road Project&quot;;

title.innerText =
    projectName + &quot; - Project Schedule &amp; Gantt Chart&quot;;
  
    title.style.color = &quot;#1a3a83&quot;;
    title.style.marginBottom = &quot;20px&quot;;

    element.appendChild(title);

    element.appendChild(
        document.querySelector(&quot;#civil-scheduler&quot;).cloneNode(true)
    );

    element.appendChild(
        document.querySelector(&quot;.gantt-wrapper&quot;).cloneNode(true)
    );

    document.body.appendChild(element);

    try {

        await new Promise(r =&gt; setTimeout(r, 1500));

        const canvas = await html2canvas(element, {
            scale: 2,
            useCORS: true,
            backgroundColor: &quot;#ffffff&quot;,
            logging: false,
            scrollX: 0,
            scrollY: 0
        });

        const imgData = canvas.toDataURL(&quot;image/jpeg&quot;, 1.0);

        const { jsPDF } = window.jspdf;

        const pdf = new jsPDF({
            orientation: &quot;landscape&quot;,
            unit: &quot;mm&quot;,
            format: &quot;a3&quot;
        });

        const pageWidth = 420;
        const pageHeight = 297;

        const imgWidth = pageWidth;

        const imgHeight = (canvas.height * imgWidth) / canvas.width;

        let heightLeft = imgHeight;

        let position = 0;

        // First page
        pdf.addImage(
            imgData,
            &quot;JPEG&quot;,
            0,
            position,
            imgWidth,
            imgHeight
        );

        heightLeft -= pageHeight;

        // Additional pages
        while (heightLeft &gt; 0) {

            position = heightLeft - imgHeight;

            pdf.addPage();

            pdf.addImage(
                imgData,
                &quot;JPEG&quot;,
                0,
                position,
                imgWidth,
                imgHeight
            );

            heightLeft -= pageHeight;
        }

        // Project Name + Date based PDF filename
const projectName = document.getElementById(&quot;projectName&quot;)?.value || &quot;Road_Project&quot;;

const today = new Date();

const fileDate =
    today.getFullYear() + &quot;-&quot; +
    String(today.getMonth() + 1).padStart(2, &quot;0&quot;) + &quot;-&quot; +
    String(today.getDate()).padStart(2, &quot;0&quot;);

// Remove invalid filename characters
const safeProjectName = projectName
    .replace(/[&lt;&gt;:&quot;/\\|?*]+/g, &quot;&quot;)
    .replace(/\s+/g, &quot;_&quot;);

pdf.save(`${safeProjectName}_${fileDate}.pdf`);

    } catch(err) {

        console.error(err);

        alert(&quot;PDF generation failed&quot;);

    } finally {

        document.body.removeChild(element);

    }
}
  
  function regenerateProjectDates() {

    generateSchedule();

    saveProject();
}
&lt;/script&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;https://yogipwd.blogspot.com/&lt;/div&gt;</description><link>https://www.yogipwd.com/2026/04/tentative-project-schedule-generator.html</link><author>noreply@blogger.com (Yogendra)</author><thr:total>0</thr:total></item></channel></rss>