A unit that leaves the country for repair and comes back is only defensible if the record can prove the same physical article returned and only the described work happened. Model that proof as assertions bound to a serial number, not as a note on an order.
The invariant lives on the serial, not the order
An order is a container for commercial intent. A serial is a container for identity. When a unit crosses a border twice, the question a reviewer will eventually ask is not which order it belonged to but whether the thing that came back is the thing that left. Attach the claim to the serial and the order becomes a pointer to it.
The claim itself has two halves. The first half asserts physical continuity: this serial left, this serial returned, same article. The second half asserts work scope: the operations recorded against the serial are the only operations performed. Write both as assertions with a subject, a predicate, and evidence references, so a later reader can evaluate them without reading a free-text note.
Under 19 CFR 10.8(a)(1) the person who performed the work declares that the articles received are the articles exported, that they were received solely for repair or alteration, that only the described work was done, and that no substitution was made. That is four assertions in one sentence. A schema that stores it as a blob cannot answer which of the four is disputed.
Substitution is a different event type
Three events look similar in a status column and are not similar at all. A repair changes the condition of a part and leaves the part in place. A part swap removes one component and installs another, so the serial persists while a child serial changes. A unit swap replaces the serial itself, which breaks the continuity assertion outright.
An "updated in place" row collapses all three into one mutation. The row records that something about the unit is different, which is exactly the fact a reviewer needs decomposed. Once the distinction is gone from the event log, no downstream query can recover it.
Give each event a distinct type and a distinct payload. A repair carries the before-condition, the after-condition, and the work description. A part swap carries the removed component identifier, the installed component identifier, and the reason. A unit swap carries the retired serial and the successor serial, and it should be modeled as a terminal event for the original identity rather than an update to it.
Two declarations, two owners, two clocks
The declaration shape in 19 CFR 10.8 separates the party who did the work from the party with knowledge at the origin side. The first declaration comes from the repairer and covers receipt, scope, cost or value of the work, and the no-substitution statement. The second comes from the owner, importer, consignee, or agent and affirms that the repairer's declaration is true, that the articles were not made in the United States under the subheading cited in the regulation, and that they left without benefit of drawback.
Two declarations mean two field owners. The repairer owns receipt date, work description, and completion. The origin-side party owns export date, export port, and the origin facts about manufacture. Neither party should be able to write the other's fields, and the export timestamp must come from the origin side because the repairer cannot observe it.
A single merged record destroys that provenance. Keep the declarations as separate signed objects that reference the same serial, and let the entry record cite both rather than restate either.
Unchanged is a test, not a status
The claim under 19 CFR 10.1(a) rests on goods coming back with no increase in value and no improvement in condition. That is a comparison, and a comparison needs three facts held separately: the before-state at export, the work log during the absence, and the after-state at return.
Store the before-state as a snapshot with a hash and a timestamp. Store the work log as append-only events. Store the after-state as its own snapshot. The test then evaluates whether the work log is empty or contains only operations that the claim permits, and whether the after-state matches the before-state on the attributes the claim covers.
A status field reading "unchanged" asserts the conclusion without the inputs. When the conclusion is challenged, the reviewer needs the three facts, and a boolean cannot produce them.
The threshold is paperwork, not a tax answer
19 CFR 10.1(a) applies the two-declaration requirement to shipments valued over $2,500 claimed free under the cited subheadings. Read that as a documentation trigger. The number decides which paperwork is required, not what duty is owed.
Keep the distinction in code by naming the field for what it does. A predicate called requiresTwoDeclarations is honest. A field called isDutyFree is not, because it invites a UI to render a tax conclusion the record cannot support.
The same discipline applies one paragraph later. Under 19 CFR 10.1(b), where returned goods are worth more than $2,500 and the U.S. maker's name and address are not plainly on them, the Center director can demand further documentation, a statement from the manufacturer or an export invoice or transport document among the examples the rule gives. That is a conditional evidence request, so the model needs a slot for supplementary evidence and a flag for whether the marking condition is satisfied. Surface the flag as an evidence gap, never as an outcome.
Event sourcing keeps the claim answerable
An append-only log makes the no-substitution claim evaluable at any future date, because the sequence of events is the proof. Corrections arrive as new events that supersede earlier ones, and the earlier ones remain visible.
emit("unit.received", serial="SN-1042", at=ts1, by="repairer")
emit("work.performed", serial="SN-1042", kind="repair", part="P-77", at=ts2)
emit("unit.returned", serial="SN-1042", at=ts3, evidence=[snap_before, snap_after])
assert no_event(kind="part.swap" or kind="unit.swap", serial="SN-1042")
The assertion at the end is the claim. It runs against the log rather than against a mutable row, so a later edit cannot silently erase a substitution event. Values above are illustrative.
What the floor records
The floor keeps three timestamps per unit: arrival, packing configuration, and any dated change to that configuration. Suzhou holds 13,000 square meters of that operation alongside the Dongguan and Shenzhen sites in China, and the record is kept under the name FulfillNexa by SBT (fulfillnexa.com). It answers a question about what was received and does not decide one.
Top comments (0)