<?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: Kristi Hampson</title>
    <description>The latest articles on DEV Community by Kristi Hampson (@kristi-hampson).</description>
    <link>https://dev.to/kristi-hampson</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%2F4022300%2F178cd4ff-b80f-4dfa-92d5-76750cd01286.png</url>
      <title>DEV Community: Kristi Hampson</title>
      <link>https://dev.to/kristi-hampson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kristi-hampson"/>
    <language>en</language>
    <item>
      <title>How Automated TRACES Validation Works: Batch vs API</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Thu, 20 Aug 2026 07:41:20 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/how-automated-traces-validation-works-batch-vs-api-cj2</link>
      <guid>https://dev.to/kristi-hampson/how-automated-traces-validation-works-batch-vs-api-cj2</guid>
      <description>&lt;p&gt;Automated TRACES validation works in two shapes. Batch upload takes a file of establishment codes against a template and returns validated rows in seconds. API integration sends codes as a continuous feed from your own system and returns results inline. Both check against the official TRACES EU database. The choice is about where your code list already lives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Definition
&lt;/h3&gt;

&lt;p&gt;A batch job validates a snapshot of your catalogue. An API call validates a code at the moment your workflow needs the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option one: batch upload
&lt;/h2&gt;

&lt;p&gt;Good when the catalogue is a file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prepare a template with approval number, country and activity.&lt;/li&gt;
&lt;li&gt;Upload the full catalogue in one pass.&lt;/li&gt;
&lt;li&gt;Read the flagged rows rather than all rows.&lt;/li&gt;
&lt;li&gt;Export the timestamped result as your audit record.
### Where batch fits best&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monthly or weekly catalogue sweeps, supplier onboarding sets, and any clean-up of a list nobody has checked in a while.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option two: API integration
&lt;/h2&gt;

&lt;p&gt;Good when validation belongs inside an existing service.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send codes as they appear on a booking or a purchase order.&lt;/li&gt;
&lt;li&gt;Handle the response in the same request path.&lt;/li&gt;
&lt;li&gt;Store flags with your own records.
Latency stops mattering when the alternative is three to five minutes of human portal work per code. A 2,000-code catalogue at four minutes each is about 130 staff hours, and both routes cut that to seconds with up to 99% accuracy. For a side by side view of the trade-offs, see &lt;a href="https://www.icustoms.ai/blogs/manual-traces-lookup-vs-automated-validation/" rel="noopener noreferrer"&gt;automated TRACES establishment code checks&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Picking one
&lt;/h2&gt;

&lt;p&gt;Start with batch to clean the catalogue, then move to API for continuous feeds. A single-code spot-check search still helps for one-off questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can TRACES lookups be automated at all?&lt;/strong&gt;&lt;br&gt;
Yes. Establishment lists are official public data, so bulk validation by API or batch upload is possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need both methods?&lt;/strong&gt;&lt;br&gt;
Most teams end up using batch for sweeps and API for live checks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does the output contain?&lt;/strong&gt;&lt;br&gt;
Validation status, error flags, and a timestamp for the audit trail.&lt;/p&gt;

&lt;p&gt;See how many hours your team could hand back before the next batch run. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>automation</category>
      <category>compliance</category>
      <category>datavalidation</category>
    </item>
    <item>
      <title>A Technical Breakdown of EU Establishment Approval by HS Chapter</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Wed, 19 Aug 2026 07:43:01 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/a-technical-breakdown-of-eu-establishment-approval-by-hs-chapter-1ja4</link>
      <guid>https://dev.to/kristi-hampson/a-technical-breakdown-of-eu-establishment-approval-by-hs-chapter-1ja4</guid>
      <description>&lt;p&gt;At a data level, EU establishment approval is a lookup problem: match a commodity code to a regulation, then match a supplier to an establishment record.&lt;/p&gt;

&lt;h2&gt;
  
  
  The chapter-to-regulation mapping
&lt;/h2&gt;

&lt;p&gt;Chapters 2, 3, 4 and 16 map directly to Regulation (EC) 853/2004, no exceptions. Chapter 5 and chapter 15 map conditionally, depending on whether the specific code falls under food hygiene rules or animal by-product rules under Regulation (EU) 1069/2009.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the mapping breaks down
&lt;/h2&gt;

&lt;p&gt;Composite products break a simple chapter lookup. A product classified in chapter 18 (chocolate) can still carry an establishment requirement for its dairy component. Any system relying on chapter-level rules alone will miss this. This &lt;a href="https://www.icustoms.ai/blogs/products-requiring-eu-approved-establishment/" rel="noopener noreferrer"&gt;HS chapters requiring EU approval&lt;/a&gt; reference sets out the exceptions in detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The establishment record itself
&lt;/h2&gt;

&lt;p&gt;Each approved facility has an establishment approval number, published on TRACES NT, tied to a specific country and activity. A facility can hold approval for one activity (edible meat) and not another (pet food materials) under the same premises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a validation check
&lt;/h2&gt;

&lt;p&gt;A working validation flow needs three data points per shipment: the commodity code, the exporting country, and the specific activity the establishment is approved for. Missing any one of these produces a false pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why re-validation matters
&lt;/h2&gt;

&lt;p&gt;Establishment status isn't static. Records get delisted or updated without notice, so a validation check run at supplier onboarding, not repeated at shipment time, will eventually pass a consignment it shouldn't.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; to see how this validation runs as an automated check against the TRACES database.&lt;/p&gt;

</description>
      <category>euestablishment</category>
      <category>hschapter</category>
      <category>hscode</category>
      <category>ai</category>
    </item>
    <item>
      <title>Modelling the CHED: A Two-Part Document With Two Owners</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:34:06 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/modelling-the-ched-a-two-part-document-with-two-owners-327</link>
      <guid>https://dev.to/kristi-hampson/modelling-the-ched-a-two-part-document-with-two-owners-327</guid>
      <description>&lt;h2&gt;
  
  
  The shape of the record
&lt;/h2&gt;

&lt;p&gt;If you are building or integrating anything that touches EU border compliance, it helps to think of the Common Health Entry Document as a single record with two write phases and two distinct owners. It lives in TRACES NT and it is submitted before the consignment reaches a border control post.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase one: the operator writes
&lt;/h3&gt;

&lt;p&gt;Part 1 is populated by the operator responsible for the consignment, in practice the importer or their customs agent. The payload covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;consignment and goods detail&lt;/li&gt;
&lt;li&gt;country of origin&lt;/li&gt;
&lt;li&gt;health certificate references&lt;/li&gt;
&lt;li&gt;establishment approval numbers for every facility that produced, processed or stored the goods
Anyone mapping fields from an internal system should treat the establishment code list as a repeating group rather than a single value, because a real consignment often carries several. The &lt;a href="https://www.icustoms.ai/blogs/common-health-entry-document-ched/" rel="noopener noreferrer"&gt;CHED Part 1 and Part 2 structure&lt;/a&gt; sets out how these sections divide.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase two: the authority writes
&lt;/h3&gt;

&lt;p&gt;Part 2 is written by the border control post. It records documentary check results, identity check results, physical check results where applied, and the final decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  The immutability boundary
&lt;/h3&gt;

&lt;p&gt;This is the part that matters most for system design. A CHED can be amended while it remains on the operator's side. Once the border control post records its decision in Part 2, the document is final. Treat the Part 2 write as the point where your local copy becomes read-only, and design your correction workflow to sit entirely upstream of it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validation belongs upstream
&lt;/h3&gt;

&lt;p&gt;Because documentary checks happen before physical inspection, any validation you can run pre-submission returns far more value than post-submission error handling. To see that validation layer working against live TRACES data, &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ched</category>
      <category>document</category>
      <category>owners</category>
      <category>ai</category>
    </item>
    <item>
      <title>TRACES NT for Technical Teams: What Sits Under the EU Certification Platform</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Mon, 17 Aug 2026 08:42:16 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/traces-nt-for-technical-teams-what-sits-under-the-eu-certification-platform-1d6f</link>
      <guid>https://dev.to/kristi-hampson/traces-nt-for-technical-teams-what-sits-under-the-eu-certification-platform-1d6f</guid>
      <description>&lt;p&gt;TRACES NT is the European Commission's platform for sanitary and phytosanitary certification. If you are integrating customs or logistics software with EU processes, it is the system your data eventually has to agree with. TRACES Classic, its 2004 predecessor, was decommissioned in 2022.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical shape of the platform
&lt;/h2&gt;

&lt;p&gt;Authentication runs on EU Login with two-factor authentication, replacing the system-specific credentials Classic used. That matters for anyone designing a user provisioning flow, because identity is federated at EU level rather than held per application.&lt;/p&gt;

&lt;p&gt;Document handling centres on four CHED types: CHED-A, CHED-P, CHED-PP and CHED-D. Electronic signatures are native and carry EU-wide legal recognition, which removes the print-sign-scan cycle Classic depended on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration surface
&lt;/h2&gt;

&lt;p&gt;Classic offered limited external integration. TRACES NT is interoperable with customs IT systems, iRASFF and other EU digital systems, and it sits as a core component of IMSOC alongside ADIS and EUROPHYT. Reporting moved from QlikView to Qlik Sense in 2024, with filtering that suits operational dashboards rather than fixed reports. The architectural contrast between the two generations is documented in this &lt;a href="https://www.icustoms.ai/blogs/traces-classic-vs-traces-nt/" rel="noopener noreferrer"&gt;TRACES NT vs TRACES Classic technical comparison&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where engineering effort pays off
&lt;/h2&gt;

&lt;p&gt;The platform is not the bottleneck. Manual entry is. Consignment details, certificate numbers and establishment codes are typed in and verified against official lists by people. Any pipeline that extracts those fields from source documents and validates codes before submission removes the most common cause of border holds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scale to design for
&lt;/h2&gt;

&lt;p&gt;Over 113,000 users across 90+ countries, and more than 5.4 million official documents processed in 2024.&lt;/p&gt;

&lt;p&gt;See how iCustoms fits alongside the EU certification stack: &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>compliance</category>
      <category>logistics</category>
      <category>govtech</category>
    </item>
    <item>
      <title>TRACES NT Access: A Technical Setup Guide for Identity and Roles</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Wed, 12 Aug 2026 07:52:46 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/traces-nt-access-a-technical-setup-guide-for-identity-and-roles-4n3f</link>
      <guid>https://dev.to/kristi-hampson/traces-nt-access-a-technical-setup-guide-for-identity-and-roles-4n3f</guid>
      <description>&lt;h2&gt;
  
  
  Understand the two-system model first
&lt;/h2&gt;

&lt;p&gt;TRACES NT does not manage its own credentials. Authentication runs entirely through EU Login, the European Commission's shared identity service, while authorisation happens inside TRACES NT through roles and organisation membership. Separating those two concerns explains almost every access problem teams hit.&lt;/p&gt;

&lt;p&gt;The platform itself certifies movements of animals, plants, food and feed, and is managed by DG SANTE under Regulation (EU) 2017/625.&lt;/p&gt;

&lt;h3&gt;
  
  
  The identity layer: EU Login
&lt;/h3&gt;

&lt;p&gt;Create the EU Login account with a work email, which becomes the permanent identity handle. Verify through the confirmation link, set a password, then enrol two-factor authentication with a mobile number or the EU Login Mobile app. Enrolment is the step most often deferred, and deferring it is what produces later authentication failures rather than authorisation errors. The &lt;a href="https://www.icustoms.ai/blogs/traces-registration-guide/" rel="noopener noreferrer"&gt;TRACES NT account setup walkthrough&lt;/a&gt; covers each screen in order.&lt;/p&gt;

&lt;h3&gt;
  
  
  The authorisation layer: roles and organisations
&lt;/h3&gt;

&lt;p&gt;Sign into TRACES NT with EU Login credentials and request access. Select the role type that matches your function: operator for businesses, authority for competent authorities, or private user. Then bind yourself to an organisation by searching for the existing record. Create a new organisation only when none exists, using exact legal name, address and activity type.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validation is asynchronous
&lt;/h3&gt;

&lt;p&gt;Requests sit pending until approved. Existing organisations are approved by their internal administrator. New organisations go to the competent authority, which usually takes one to a few working days. Design your onboarding timeline around that latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verify the binding
&lt;/h3&gt;

&lt;p&gt;At first login, confirm the dashboard shows the correct organisation and role. Assign a second administrator immediately so approvals are not single threaded.&lt;/p&gt;

&lt;p&gt;See how iCustoms sits alongside your TRACES NT access to speed up filings. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tracesnt</category>
      <category>logistics</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Modelling EU Border Clearance as a Three Gate Workflow</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Tue, 11 Aug 2026 07:31:46 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/modelling-eu-border-clearance-as-a-three-gate-workflow-4cf</link>
      <guid>https://dev.to/kristi-hampson/modelling-eu-border-clearance-as-a-three-gate-workflow-4cf</guid>
      <description>&lt;p&gt;EU border clearance is a sequential pipeline with three gates: documentary, identity and physical. A consignment only reaches gate two if gate one passes. Model it that way and your process priorities become obvious, because most loads fail at the first gate and never touch a laboratory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gate one: documentary
&lt;/h2&gt;

&lt;p&gt;Inputs are the CHED, the health certificate and the supporting commercial documents. The check validates them against TRACES records. Failure modes include missing certificates, inconsistent data across documents, invalid establishment codes and the wrong CHED type. This is where the majority of holds happen, and it is the only gate you can fully test before departure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gate two: identity
&lt;/h2&gt;

&lt;p&gt;Seals, labels and container details are cross checked against the paperwork. A seal number that differs from the health certificate record fails here. Ownership sits with the carrier or exporter, so remediation is slower. Mapping the &lt;a href="https://www.icustoms.ai/blogs/shipment-held-eu-border-establishment-code/" rel="noopener noreferrer"&gt;EU border control post clearance workflow&lt;/a&gt; end to end makes those ownership boundaries explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gate three: physical
&lt;/h2&gt;

&lt;p&gt;Risk based sampling and laboratory testing on a proportion of consignments. Temperature breaches, labelling defects and adverse results surface here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design implication
&lt;/h2&gt;

&lt;p&gt;Shift your quality effort left. Every control you add at gate one runs while the goods are still cheap to hold. Every control you skip becomes an exception handled at a ramp, on a clock, with demurrage running.&lt;/p&gt;

&lt;p&gt;Add a written hold reason as a mandatory first step in your exception path. You cannot route a fix to the right owner until you know which gate failed.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Which gate is most expensive to fail?&lt;/strong&gt; &lt;br&gt;
Gate one is most common. Gate three is usually most severe, because it concerns the product itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; to see how the documentary gate can be tested in full before departure.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>workflow</category>
      <category>devops</category>
    </item>
    <item>
      <title>Modelling EUDR Geolocation Data Before the 2026 Deadline</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Mon, 10 Aug 2026 08:43:02 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/modelling-eudr-geolocation-data-before-the-2026-deadline-1a14</link>
      <guid>https://dev.to/kristi-hampson/modelling-eudr-geolocation-data-before-the-2026-deadline-1a14</guid>
      <description>&lt;p&gt;EUDR requires geolocation coordinates for every plot of land where a commodity was produced. That single requirement turns a document process into a data problem, because coordinates must link to suppliers, suppliers to product lines, and product lines to HS codes in Annex I.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three joins that matter
&lt;/h2&gt;

&lt;p&gt;Your data model needs three reliable joins. First, product to HS code, since Annex I decides scope. Second, product to supplier, including intermediate processors who may sit between you and the farm. Third, supplier to plot coordinates, which is the join most systems have never held. Build the schema so one product can carry many plots and one plot can serve many products, because commodity chains rarely map one to one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where records break in practice
&lt;/h2&gt;

&lt;p&gt;Coordinates arrive as scanned maps, screenshots, spreadsheets with inconsistent formats, or verbal descriptions. Suppliers rarely hold this information in a usable format at the first request, so plan for extraction and normalisation rather than clean imports. Validation should run at ingest, not at filing time, so gaps surface while there is still time to chase them. The requirement itself, and its place in the wider filing sequence, is set out in these &lt;a href="https://www.icustoms.ai/blogs/eudr-traces-compliance-guide/" rel="noopener noreferrer"&gt;EUDR geolocation data requirements&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Store the outputs, not just the inputs
&lt;/h2&gt;

&lt;p&gt;Once a Due Diligence Statement is submitted to the EUDR Information System, it returns a reference number. Persist that reference against the shipment record, because it has to appear on the customs declaration and be verifiable by authorities.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;p&gt;Is one coordinate per supplier enough? No. The requirement is per plot of land where the commodity was produced.&lt;/p&gt;

&lt;p&gt;Should coordinates sit in the same store as customs data? They need to be joinable to it, since classification and declarations depend on the same product records.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; to see how iCustoms handles trade data&lt;/p&gt;

</description>
      <category>ai</category>
      <category>geolocation</category>
      <category>eudr</category>
      <category>deadline</category>
    </item>
    <item>
      <title>Building a Reliable TRACES Establishment Code Validation Check</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Fri, 07 Aug 2026 10:34:35 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/building-a-reliable-traces-establishment-code-validation-check-3201</link>
      <guid>https://dev.to/kristi-hampson/building-a-reliable-traces-establishment-code-validation-check-3201</guid>
      <description>&lt;p&gt;A TRACES establishment code check is a three-field match, not a string lookup. The validation passes only when the approval number, the country of the establishment and the activity category all line up against the official TRACES EU database. Treating it as a single-field comparison is the most common design error.&lt;/p&gt;

&lt;h2&gt;
  
  
  The record you need
&lt;/h2&gt;

&lt;p&gt;Every validated row requires four inputs:&lt;/p&gt;

&lt;p&gt;Field   Purpose&lt;br&gt;
&lt;code&gt;sku&lt;/code&gt;  Identifies the product line containing animal-origin ingredients&lt;br&gt;
&lt;code&gt;approval_number&lt;/code&gt;  The establishment code issued to the facility&lt;br&gt;
&lt;code&gt;country&lt;/code&gt;  Country of origin of the establishment&lt;br&gt;
&lt;code&gt;activity_type&lt;/code&gt;    Meat, dairy, fishery or animal by-products&lt;/p&gt;

&lt;p&gt;Missing any one of these makes the result unverifiable rather than merely incomplete.&lt;/p&gt;
&lt;h2&gt;
  
  
  Normalise before you compare
&lt;/h2&gt;

&lt;p&gt;Most false failures come from input hygiene, not the reference data. Strip whitespace, remove non-printing characters introduced by copy and paste, and reject merged-cell exports before parsing rather than after.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;approval_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;          &lt;span class="c1"&gt;# stray spaces from pasted codes
&lt;/span&gt;&lt;span class="n"&gt;approval_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;collapse_internal_ws&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;approval_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nf"&gt;columns_aligned&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;            &lt;span class="c1"&gt;# merged cells scramble mapping
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A validation service can only tell you a code is unrecognised. It cannot tell you the code was fine and your parser mangled it. That distinction belongs on your side of the boundary. The full &lt;a href="https://www.icustoms.ai/blogs/how-to-validate-eu-traces-establishment-codes/" rel="noopener noreferrer"&gt;TRACES establishment code workflow&lt;/a&gt; covers the template structure this maps onto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model the failure states separately
&lt;/h2&gt;

&lt;p&gt;Do not collapse outcomes into pass and fail. There are at least four states worth distinguishing: approved, unrecognised number, country mismatch, and activity category mismatch. Each has a different remediation path, and merging them forces a human to re-diagnose every flag by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the result, not just the verdict
&lt;/h2&gt;

&lt;p&gt;Persist the validated row with its timestamp and outcome. The audit trail is a deliverable, not a log. When compliance reviews arrive, the question is what was checked and when.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>traces</category>
      <category>establishmentcode</category>
      <category>validationcheck</category>
    </item>
    <item>
      <title>Why Storing a TRACES Establishment Code as a Static Field Is a Data Modelling Bug</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Wed, 05 Aug 2026 08:39:25 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/why-storing-a-traces-establishment-code-as-a-static-field-is-a-data-modelling-bug-1dd1</link>
      <guid>https://dev.to/kristi-hampson/why-storing-a-traces-establishment-code-as-a-static-field-is-a-data-modelling-bug-1dd1</guid>
      <description>&lt;h2&gt;
  
  
  The bug
&lt;/h2&gt;

&lt;p&gt;Most ERP setups treat a TRACES establishment code the way they treat a VAT number. One field on the supplier record, entered once, trusted forever.&lt;/p&gt;

&lt;p&gt;That model is wrong, because the value is not the fact. The code is an identifier. The fact you actually depend on is the approval status of that identifier on a given date, for a given activity category. Those are different objects, and collapsing them into one field guarantees stale data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the code represents
&lt;/h2&gt;

&lt;p&gt;A TRACES establishment code is the approval number the EU assigns to a facility authorised to produce or handle animal-origin products. National competent authorities propose the facility, DG SANTE reviews it, and the European Commission publishes the listing through TRACES NT. A useful primer on &lt;a href="https://www.icustoms.ai/blogs/what-is-traces-establishment-code/" rel="noopener noreferrer"&gt;what a TRACES establishment code&lt;/a&gt; is sets out that chain and where the public lists sit.&lt;/p&gt;

&lt;p&gt;A better shape&lt;br&gt;
supplier&lt;br&gt;
  establishment_code (string)&lt;/p&gt;

&lt;p&gt;establishment_check&lt;br&gt;
  code (string)&lt;br&gt;
  activity_category (enum)&lt;br&gt;
  checked_at (timestamp)&lt;br&gt;
  listed (boolean)&lt;br&gt;
  matched_name (string)&lt;br&gt;
  consignment_id (fk)&lt;/p&gt;

&lt;p&gt;Now status is an event with a timestamp, not an attribute. You can answer "was this listed on the ship date" without guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the timestamp matters
&lt;/h2&gt;

&lt;p&gt;Establishments get suspended after audits and delisted after disease outbreaks, with no notification to the trader. A code valid in one month can be refused the next. Without checked_at, a checked shipment and an unchecked shipment look identical in your database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to put the check
&lt;/h2&gt;

&lt;p&gt;Pre-shipment, inside the workflow, ideally through an API call from the ERP or TMS rather than a human opening a portal tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>logistics</category>
      <category>traces</category>
      <category>establishmentcode</category>
    </item>
    <item>
      <title>What Is EU TRACES? An Overview for Trade and Ops Teams</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Fri, 31 Jul 2026 11:51:40 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/what-is-eu-traces-an-overview-for-trade-and-ops-teams-5f9a</link>
      <guid>https://dev.to/kristi-hampson/what-is-eu-traces-an-overview-for-trade-and-ops-teams-5f9a</guid>
      <description>&lt;p&gt;Anyone building or managing customs and compliance workflows in the EU eventually runs into TRACES. It is worth understanding before it shows up as a blocker in your process.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the system does
&lt;/h2&gt;

&lt;p&gt;TRACES, short for TRAde Control and Expert System, is the European Commission's digital platform for sanitary and phytosanitary certification. Consignments of animals, animal products, certain food and feed of non-animal origin, and most plants need official certificates confirming they meet EU health and safety rules, and TRACES is where those certificates get created, signed and checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it replaced paper certificates
&lt;/h2&gt;

&lt;p&gt;Before TRACES, authorities exchanged paper documents, which made checks slow and fraud hard to catch. The platform now gives traders and authorities a shared digital workspace, run by DG SANTE under Regulation (EU) 2017/625 and Implementing Regulation (EU) 2019/1715. Our &lt;a href="https://www.icustoms.ai/blogs/what-is-traces-eu/" rel="noopener noreferrer"&gt;EU TRACES explainer&lt;/a&gt; breaks down the full certification workflow, from certificate creation through to the Common Health Entry Document check at the border.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where integration teams should focus
&lt;/h2&gt;

&lt;p&gt;The certification workflow itself is stable and well documented. The variable part, and the part most worth automating, is establishment code validation: the approval numbers non-EU facilities need before their goods can enter the EU. These get delisted without warning, and the public portal only supports one code at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it into a pipeline
&lt;/h2&gt;

&lt;p&gt;If you are already processing trade documents programmatically, establishment code checks are a natural API addition. iTraces from iCustoms offers bulk upload, single lookups and direct API integration into ERP or TMS platforms, which is a cleaner fit than scripting against a manual portal.&lt;br&gt;
&lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Pre-Submission Review Step That Catches Customs Errors Before HMRC Does</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Thu, 30 Jul 2026 06:54:14 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/a-pre-submission-review-step-that-catches-customs-errors-before-hmrc-does-2g2i</link>
      <guid>https://dev.to/kristi-hampson/a-pre-submission-review-step-that-catches-customs-errors-before-hmrc-does-2g2i</guid>
      <description>&lt;h2&gt;
  
  
  What the procedure code controls
&lt;/h2&gt;

&lt;p&gt;The procedure code tells HMRC what is happening to the goods, and it drives whether duty is due, suspended, or relieved. Because it is often reused from a previous, similar shipment, it is one of the easiest fields to get wrong without noticing, and one of the most costly when you do. A wrong code can suspend duty that should be paid or charge duty that should have been relieved, and neither is a small problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treating it like code, not a copy-paste
&lt;/h2&gt;

&lt;p&gt;Think of the procedure code the way you would treat a config value: never carry it over on autopilot. Confirm it matches what is genuinely happening to these goods on this shipment, check the linked authorisations are valid, and confirm the duty account is right. This guide to the &lt;a href="https://www.icustoms.ai/blogs/uk-customs-declaration-errors-how-to-avoid/" rel="noopener noreferrer"&gt;UK customs declaration errors &lt;/a&gt;agents make most and how to avoid them covers procedure codes alongside the other common slips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validating before submission
&lt;/h2&gt;

&lt;p&gt;A validation step confirms the procedure code fits before the entry reaches HMRC, the same principle as a test passing before you deploy.&lt;/p&gt;

&lt;p&gt;Want to see procedure-code validation catch a carried-over value? &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; to see the check run.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hmrc</category>
      <category>errors</category>
      <category>customs</category>
    </item>
    <item>
      <title>Modelling SDP as a Two-Stage Pipeline</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Tue, 28 Jul 2026 07:13:45 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/modelling-sdp-as-a-two-stage-pipeline-20p3</link>
      <guid>https://dev.to/kristi-hampson/modelling-sdp-as-a-two-stage-pipeline-20p3</guid>
      <description>&lt;p&gt;If you think in pipelines, the Simplified Declaration Procedure clicks into place quickly.&lt;/p&gt;

&lt;p&gt;Stage one is the simplified frontier declaration. It carries reduced data, enough to obtain release. Latency at the border drops because there is less to submit and validate up front.&lt;/p&gt;

&lt;p&gt;Stage two is the supplementary declaration. It carries the full payload and drives the duty calculation. It runs asynchronously, usually due by the fourth working day of the next month.&lt;/p&gt;

&lt;p&gt;The link between the two stages is the part that matters most. Every frontier entry must map to its supplementary record, and you keep evidence for each release. The &lt;a href="https://www.icustoms.ai/blogs/cds-simplified-declaration-uk/" rel="noopener noreferrer"&gt;two-stage SDP customs&lt;/a&gt; pipeline describes exactly how HMRC expects that mapping to hold.&lt;/p&gt;

&lt;p&gt;Duty settles through a monthly deferment, so the finance leg is batched rather than per-transaction. That batching is where the cash-flow benefit comes from.&lt;/p&gt;

&lt;p&gt;The failure mode is a broken link between stages. If a frontier entry has no matching supplementary record, or the totals do not reconcile against the deferment statement, you carry compliance risk. Carry frontier data forward automatically and the error rate drops.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>sdp</category>
      <category>cds</category>
      <category>uk</category>
    </item>
  </channel>
</rss>
