A certificate of compliance is usually kept as a PDF in a shared folder. The folder is organized well, the file is named after the SKU, and a person can find it in about forty seconds. Then the entry is filed and the requirement turns out to be data rather than a document, and the forty seconds becomes a shipment sitting where it is not supposed to sit.
16 CFR part 1110, as amended by the Commission's final rule at 90 FR 1800 published 8 January 2025 and effective 8 July 2026, requires that for imported finished products the certificate data elements go into ACE as part of the entry filing, using CPSC's PGA Message Set, and that for goods imported by mail the same data sit in CPSC's Product Registry before the goods arrive. Each certificate accompanies the product or shipment and describes one product only. It has to reach every distributor and retailer, and it has to be produced for inspection on demand, since the rule reads immediately as within 24 hours.
The engineering consequence is that the certificate stops being an artifact and becomes a projection over rows you should already have had.
The rows
create table certificate (
certificate_id text primary key,
product_id text not null unique, -- one product per certificate
certifier_id text not null, -- 1110.11(3)
record_keeper_id text not null, -- 1110.11(4), may be a staffed position
manufacture_id text not null, -- 1110.11(5)
manufactured_on date not null, -- 1110.11(5), to at least month and year
attested_by text not null, -- 1110.11(7)
attested_at timestamptz not null,
status text not null check (status in ('draft','ready','filed','superseded'))
);
create table certificate_rule (
certificate_id text not null references certificate,
rule_citation text not null, -- each rule listed separately, 1110.11(2)
primary key (certificate_id, rule_citation)
);
create table party_contact (
party_id text primary key,
kind text not null check (kind in ('certifier','record_keeper','manufacturer','lab')),
name text not null,
street text not null,
city text not null,
region text not null,
country text not null,
email text not null,
phone text not null,
position_only boolean not null default false, -- a record keeper may be a title
always_staffed boolean not null default true
);
create table test_record (
certificate_id text not null references certificate,
lab_party_id text not null references party_contact,
tested_on date not null, -- the most recent test date
tested_place text not null,
report_ref text not null
);
create table product_identifier (
product_id text not null,
kind text not null check (kind in ('gtin','model','registered','serial','sku','upc','alternate')),
value text not null,
primary key (product_id, kind, value)
);
Six tables for one document, and five of them trace straight to the content list in 1110.11. The identifier table encodes that the certificate must carry at least one unique identifier from a defined set, with a description sufficient to match the goods. The rule table encodes that citations are listed separately rather than collapsed into a free-text summary. The party table encodes that four organizations have to be reachable by name, street address, city, region, country, email and telephone inside one certificate, and that two of them are tied to dates. The sixth table is not a 1110.11 element at all. It is the retrieval log behind the 24-hour request.
The state machine is where the deadline lives
create view certificate_readiness as
select c.certificate_id, c.product_id,
case
when not exists (select 1 from certificate_rule r where r.certificate_id = c.certificate_id)
then 'no_rule_citation'
when (select count(*) from party_contact p
where p.party_id in (c.certifier_id, c.record_keeper_id, c.manufacture_id)) < 3
then 'parties_unreachable'
when exists (select 1 from party_contact p
where p.party_id = c.record_keeper_id
and p.position_only and not p.always_staffed)
then 'record_keeper_position_unstaffed'
when not exists (select 1 from test_record t where t.certificate_id = c.certificate_id)
then 'no_test_record'
when not exists (select 1 from product_identifier i where i.product_id = c.product_id)
then 'no_unique_identifier'
else 'ready'
end as state
from certificate c;
Anything that is not ready cannot be filed at entry, which turns a paperwork gap into an entry problem. The useful move is to make the entry event refuse to start until the projection is clean, and to treat a draft certificate as an absence rather than a placeholder.
type Entry = { mode: 'ocean' | 'air' | 'mail'; deMinimis: boolean; productId: string };
export function channel(e: Entry, state: string): 'ace_at_entry' | 'registry_before_arrival' | 'block' {
if (state !== 'ready') return 'block';
if (e.mode === 'mail') return 'registry_before_arrival';
return 'ace_at_entry';
}
The deMinimis flag is carried into the decision because the rule's reach includes shipments claiming the small-value exemption, and mail entries are routed to the registry ahead of arrival instead of to the entry filing. A system that models only the container-load case has an unhandled branch precisely in the channel this rule calls out by name.
Twenty-four hours is a retrieval contract
The availability requirement is a service-level objective with a clock that starts when an agency asks. Practically that means the certificate bundle has to be reconstructible for a shipment that already left, which is why the rows above are keyed and dated rather than overwritten.
create table certificate_bundle_log (
bundle_id text primary key,
certificate_id text not null references certificate,
shipment_ref text not null,
built_at timestamptz not null,
built_by text not null,
recipient_kind text not null check (recipient_kind in ('cpsc','cbp','distributor','retailer'))
);
The superseded status exists because a certificate describing last season's configuration is not corrected by editing it. When a factory, a lab or a composition changes, a new certificate is issued and the old row keeps its dates so that the shipment that already moved still has an answer attached to it. Editing a certificate in place destroys the only evidence that the goods in transit matched a document at the time they were filed.
What this is and is not. It is a schema-shaped reading of published requirements, and it is not a compliance opinion: whether a specific product needs a certificate, which rule citations apply, and whether a given document is valid are questions for the party that owns the obligation and the bodies that examine it. FulfillNexa by SBT (fulfillnexa.com) moves seller goods from three Chinese sites, 13,000 square meters in Suzhou, 8,000 in Dongguan and 3,000 in Shenzhen, and we do not issue, sign or hold a certificate belonging to a brand. The narrower point is this. A pick list built against a ready projection and a pick list built against a folder of PDFs look identical on a floor, and behave differently the day a document request arrives with a clock on it.
Top comments (0)