<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Samer Karwande</title>
    <description>The latest articles on DEV Community by Samer Karwande (@samer_karwande_fb0c3a4935).</description>
    <link>https://dev.to/samer_karwande_fb0c3a4935</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4088297%2F933dedea-1244-42ea-a618-6aed1b9dc1b3.png</url>
      <title>DEV Community: Samer Karwande</title>
      <link>https://dev.to/samer_karwande_fb0c3a4935</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samer_karwande_fb0c3a4935"/>
    <language>en</language>
    <item>
      <title>A Practical Data Model for Evidence-Ready EPR Compliance</title>
      <dc:creator>Samer Karwande</dc:creator>
      <pubDate>Thu, 27 Aug 2026 13:08:58 +0000</pubDate>
      <link>https://dev.to/samer_karwande_fb0c3a4935/a-practical-data-model-for-evidence-ready-epr-compliance-775</link>
      <guid>https://dev.to/samer_karwande_fb0c3a4935/a-practical-data-model-for-evidence-ready-epr-compliance-775</guid>
      <description>&lt;p&gt;Environmental compliance trackers often begin as one spreadsheet with a column for every possible requirement. That works for a small dataset, but Extended Producer Responsibility (EPR) evidence becomes difficult to audit when registrations, material categories, targets, recycler documents and returns are mixed in the same row.&lt;/p&gt;

&lt;p&gt;A better approach is to model the compliance record as linked entities.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Obligated entity
&lt;/h2&gt;

&lt;p&gt;Keep the legal entity separate from the operating site or brand.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;entity_id
legal_name
registration_identifier
business_role
responsible_owner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents a change in contact person or site name from rewriting historical records.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Material or equipment category
&lt;/h2&gt;

&lt;p&gt;Store the category mapping as its own controlled list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;category_id
regime
category_name
effective_from
effective_to
source_reference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The effective dates matter because classifications and reporting instructions can change. Historical submissions should continue to point to the version used at that time.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Obligation period
&lt;/h2&gt;

&lt;p&gt;Treat each reporting period as a separate record rather than adding another set of columns every year.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;period_id
entity_id
category_id
period_start
period_end
quantity_basis
target_quantity
status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The calculation workbook or approved methodology should be linked, not hidden inside a comment cell.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Evidence document
&lt;/h2&gt;

&lt;p&gt;Every supporting file needs metadata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;evidence_id
document_type
issuer
document_date
valid_from
valid_to
file_location
checksum
review_status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A checksum or version identifier helps prove which file was reviewed when similarly named documents are replaced.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Transaction or certificate record
&lt;/h2&gt;

&lt;p&gt;Keep recycler, certificate and quantity details in a transaction table that can be reconciled against the period obligation.&lt;/p&gt;

&lt;p&gt;Useful validation rules include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no certificate quantity without a valid category&lt;/li&gt;
&lt;li&gt;no double allocation of the same evidence&lt;/li&gt;
&lt;li&gt;certificate validity must overlap the reporting period&lt;/li&gt;
&lt;li&gt;totals must reconcile to the approved obligation calculation&lt;/li&gt;
&lt;li&gt;every manual adjustment needs a reason and approver&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build an audit trail, not just a dashboard
&lt;/h2&gt;

&lt;p&gt;Dashboards are useful, but an audit trail is more important. Record who changed a value, when it changed, the previous value and the reason. Keep status transitions explicit: draft, reviewed, approved and submitted should not mean the same thing.&lt;/p&gt;

&lt;p&gt;The exact fields depend on the applicable regime and current official requirements, but the design principle is stable: separate master data, obligations, evidence and transactions, then connect them with durable identifiers.&lt;/p&gt;

&lt;p&gt;For an overview of EPR applicability, registration, category mapping, certificates and return support, see &lt;a href="https://ujjwalengineers.com/extended-producer-responsibility-epr-compliance.html" rel="noopener noreferrer"&gt;Ujjwal Engineers’ EPR compliance page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A clean data model does not replace regulatory review. It makes that review faster, traceable and far easier to repeat.&lt;/p&gt;

</description>
      <category>data</category>
      <category>productivity</category>
      <category>architecture</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>Designing an Audit-Ready Environmental Compliance Tracker</title>
      <dc:creator>Samer Karwande</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:16:11 +0000</pubDate>
      <link>https://dev.to/samer_karwande_fb0c3a4935/designing-an-audit-ready-environmental-compliance-tracker-5coi</link>
      <guid>https://dev.to/samer_karwande_fb0c3a4935/designing-an-audit-ready-environmental-compliance-tracker-5coi</guid>
      <description>&lt;p&gt;Environmental compliance data is often scattered across calendars, laboratory reports, waste manifests, equipment logs and email threads. A simple tracker can make that information reviewable—but only if its structure supports evidence, ownership and validation.&lt;/p&gt;

&lt;p&gt;This is a practical data model for building one without turning it into a large software project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with four connected tables
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Obligations
&lt;/h3&gt;

&lt;p&gt;Use one row per consent condition or statutory requirement. Useful fields include obligation ID, approval reference, requirement, frequency, owner, due rule, evidence type and status.&lt;/p&gt;

&lt;p&gt;Use stable IDs such as AIR-012 or WASTE-007. Do not use the row number as an identifier because sorting or inserting rows will break references.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Tasks
&lt;/h3&gt;

&lt;p&gt;Generate individual tasks from recurring obligations. Store a task ID, obligation ID, reporting period, due date, assignee, completion date and review status.&lt;/p&gt;

&lt;p&gt;This separates the rule—monitor stack emissions quarterly—from each actual monitoring event.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Evidence
&lt;/h3&gt;

&lt;p&gt;Store metadata rather than embedding every file inside the tracker. Useful fields include evidence ID, task ID, document name, revision, issue date, storage link, verifier and verification date.&lt;/p&gt;

&lt;p&gt;A task should not be marked complete only because a file exists. It should be complete when the file has been reviewed and linked to the correct obligation and period.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Exceptions
&lt;/h3&gt;

&lt;p&gt;Keep missed deadlines, equipment downtime and non-conformities visible. Record the related task, detection date, description, risk level, corrective action, owner, target date and closure evidence.&lt;/p&gt;

&lt;p&gt;Deleting an overdue task destroys the audit trail. Close it through an exception and corrective-action record instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add validation before dashboards
&lt;/h2&gt;

&lt;p&gt;Colourful dashboards are useful only after the underlying data is reliable. Start with checks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every active obligation has an owner&lt;/li&gt;
&lt;li&gt;every recurring obligation has a next due date&lt;/li&gt;
&lt;li&gt;every completed task has verified evidence&lt;/li&gt;
&lt;li&gt;no evidence file is linked to unrelated reporting periods&lt;/li&gt;
&lt;li&gt;monitoring dates fall inside the required period&lt;/li&gt;
&lt;li&gt;production and waste records use consistent units&lt;/li&gt;
&lt;li&gt;overdue corrective actions remain visible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a spreadsheet, these can be implemented with lookup formulas and conditional formatting. In a small application, run them as scheduled tests and write failures to a review queue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat dates as rules, not manual text
&lt;/h2&gt;

&lt;p&gt;Avoid storing quarterly only as a note. Store a frequency code and calculate due dates from an explicit rule. This allows reminders to be generated consistently and makes exceptions easier to explain.&lt;/p&gt;

&lt;p&gt;Some deadlines are based on financial years, calendar years, consent dates or days after an event. The rule needs to preserve that context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserve changes
&lt;/h2&gt;

&lt;p&gt;Record who changed an obligation, what changed and why. If the tracker is a database, add an audit table. If it is a spreadsheet, issue locked monthly copies and keep a change log.&lt;/p&gt;

&lt;p&gt;Never overwrite an old consent condition after an amendment. Close the old record with an effective-end date and create a new version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect the operational checklist
&lt;/h2&gt;

&lt;p&gt;The tracker should mirror what a facility must demonstrate during an inspection: valid approvals, monitoring continuity, production within consented capacity, reconciled waste records, pollution-control equipment logs and closure evidence for previous findings.&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://ujjwalengineers.com/blog/how-to-prepare-gpcb-mpcb-inspection.html" rel="noopener noreferrer"&gt;pollution-board inspection checklist&lt;/a&gt; provides a useful operational reference for deciding which evidence fields the tracker should contain.&lt;/p&gt;

&lt;p&gt;A good compliance tracker does not replace professional review. Its job is to make obligations, evidence and exceptions traceable enough that the right questions are asked before an inspector asks them.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>dataengineering</category>
      <category>sustainability</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Practical Data Workflow for HAZOP and QRA Studies</title>
      <dc:creator>Samer Karwande</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:01:22 +0000</pubDate>
      <link>https://dev.to/samer_karwande_fb0c3a4935/a-practical-data-workflow-for-hazop-and-qra-studies-33fe</link>
      <guid>https://dev.to/samer_karwande_fb0c3a4935/a-practical-data-workflow-for-hazop-and-qra-studies-33fe</guid>
      <description>&lt;p&gt;Safety studies often fail for a surprisingly ordinary reason: the data trail is hard to reproduce.&lt;/p&gt;

&lt;p&gt;A HAZOP workshop may produce hundreds of deviations, causes, safeguards and actions. A QRA may combine release frequencies, weather data, consequence models, ignition assumptions and population inputs. If those elements live in disconnected spreadsheets with inconsistent naming, the study becomes difficult to review and even harder to update.&lt;/p&gt;

&lt;p&gt;Here is a lightweight data workflow that keeps the analysis auditable.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Give every object a stable ID
&lt;/h2&gt;

&lt;p&gt;Use permanent identifiers for process nodes, equipment, scenarios, safeguards and actions. A node called &lt;code&gt;REACTOR_FEED_01&lt;/code&gt; should keep that ID even if its display name changes.&lt;/p&gt;

&lt;p&gt;Stable IDs make joins predictable and stop small wording changes from creating duplicate records.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Separate source data from calculated results
&lt;/h2&gt;

&lt;p&gt;Keep raw inputs immutable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;equipment and line lists&lt;/li&gt;
&lt;li&gt;P&amp;amp;IDs and revision numbers&lt;/li&gt;
&lt;li&gt;material properties&lt;/li&gt;
&lt;li&gt;failure-frequency sources&lt;/li&gt;
&lt;li&gt;weather and population datasets&lt;/li&gt;
&lt;li&gt;operator or inspection evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Calculated fields—risk ranking, release rate, consequence distance and individual-risk contribution—should be generated from those inputs rather than manually pasted over them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Store assumptions as first-class data
&lt;/h2&gt;

&lt;p&gt;An assumption is not a comment buried in a workbook. Give it an owner, source, date, status and affected scenario IDs.&lt;/p&gt;

&lt;p&gt;A small assumptions table can contain:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;assumption_id&lt;/td&gt;
&lt;td&gt;A-014&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;statement&lt;/td&gt;
&lt;td&gt;Detector response time is 30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;source&lt;/td&gt;
&lt;td&gt;Vendor datasheet, rev 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;owner&lt;/td&gt;
&lt;td&gt;Instrumentation lead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;affected_scenarios&lt;/td&gt;
&lt;td&gt;S-021, S-022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;review_status&lt;/td&gt;
&lt;td&gt;Approved&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This makes later revalidation much faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Build validation checks into the workflow
&lt;/h2&gt;

&lt;p&gt;Before review, automatically flag:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scenarios without a source or node ID&lt;/li&gt;
&lt;li&gt;safeguards with no evidence reference&lt;/li&gt;
&lt;li&gt;duplicated scenario IDs&lt;/li&gt;
&lt;li&gt;actions without owners or due dates&lt;/li&gt;
&lt;li&gt;consequence results generated from superseded inputs&lt;/li&gt;
&lt;li&gt;risk values whose units do not match the project standard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even basic spreadsheet formulas or a short script can catch these issues before a workshop or client review.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Preserve version history
&lt;/h2&gt;

&lt;p&gt;Record the dataset version, model version and document revision used for each run. A result without its input version is not reproducible.&lt;/p&gt;

&lt;p&gt;For teams using Git, text-based CSV, JSON or YAML exports can provide a useful change history. For spreadsheet-heavy projects, a controlled document register and locked issue copies are still better than emailing files named &lt;code&gt;final_v7_revised.xlsx&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Link HAZOP and QRA without mixing their purposes
&lt;/h2&gt;

&lt;p&gt;HAZOP is primarily a structured qualitative method for identifying deviations, causes, consequences and safeguards. QRA quantifies selected accident scenarios using frequency and consequence analysis.&lt;/p&gt;

&lt;p&gt;The datasets should connect through scenario IDs, but the methods should not be treated as interchangeable. A clear explanation of the distinction is available in this &lt;a href="https://ujjwalengineers.com/blog/hazop-vs-qra-difference.html" rel="noopener noreferrer"&gt;HAZOP vs QRA guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal schema
&lt;/h2&gt;

&lt;p&gt;A practical starting point is five connected tables:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;nodes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hazop_deviations&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scenarios&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;safeguards&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;actions&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not to build a large software platform. It is to make every conclusion traceable from source input to review decision.&lt;/p&gt;

&lt;p&gt;When the data structure is clean, workshops become easier to facilitate, assumptions are easier to challenge, and future updates cost much less.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>productivity</category>
      <category>dataengineering</category>
      <category>riskmanagement</category>
    </item>
  </channel>
</rss>
