Every post about this topic reads like a checklist. This one is a data model, because the underlying rule, 16 CFR part 1110, is written like a schema: it names fields, it names the party that owns each record, and it attaches a clock to retrieval. The rule does not describe testing, and section 1110.1 says so in one sentence, which is why an implementation that stores a lab PDF and calls the job done has modeled the wrong object.
The record
1110.11(a) enumerates content. Mapped to columns, a finished product certificate looks like this. One product per certificate, from 1110.13(a), so the row is keyed by a product identifier and not by a shipment.
CREATE TABLE finished_product_certificate (
id BIGSERIAL PRIMARY KEY,
-- 1110.11(a)(1): one of gtin/model/rn/serial/sku/upc/alternate + description
identifier_kind TEXT NOT NULL, -- enum below
identifier_value TEXT NOT NULL,
product_description TEXT NOT NULL, -- must be sufficient to match goods to paper
-- 1110.11(a)(2): every applicable rule stated separately, so this is a set, not a string
cited_rules TEXT[] NOT NULL CHECK (array_length(cited_rules,1) >= 1),
-- 1110.11(a)(3): certifier contact block
certifier_name TEXT NOT NULL,
certifier_street TEXT NOT NULL,
certifier_city TEXT NOT NULL,
certifier_region TEXT,
certifier_country TEXT NOT NULL,
certifier_email TEXT NOT NULL,
certifier_phone TEXT NOT NULL,
-- 1110.11(a)(4): record keeper, may be a position title if always staffed
record_keeper TEXT NOT NULL,
record_keeper_contacts TEXT NOT NULL,
-- 1110.11(a)(5): month and year minimum, plus manufacturer identity and place
manufacture_yymm DATE NOT NULL, -- day component unused by the rule
manufacture_place TEXT NOT NULL,
manufacturer_contacts TEXT NOT NULL,
-- 1110.11(a)(6): MOST RECENT test date and place, per body relied on
last_test_date DATE NOT NULL,
test_bodies JSONB NOT NULL, -- [{name, address, email, phone}]
-- 1110.11(a)(7): attestation text, fixed wording for paper and non-eFiled forms
attestation TEXT NOT NULL,
records_url TEXT, -- 1110.11(b) optional electronic access
testing_exclusion TEXT -- 1110.11(c) replaces test date/place per rule
);
CREATE UNIQUE INDEX one_product_per_certificate
ON finished_product_certificate (identifier_kind, identifier_value);
The identifier set is closed in the rule, and the enum should mirror it rather than drifting.
CREATE TYPE certificate_identifier_kind AS ENUM (
'gtin','model','registered_number','serial','sku','upc','alternate'
);
Two constraints in the prose are easy to lose in a schema. First, cited_rules is an array because 1110.11(a)(2) requires each applicable rule, ban, standard or regulation to be identified separately. A concatenated string passes a text search and fails the requirement. Second, last_test_date is singular by design: 1110.11(a)(6) asks for the most recent date and place of testing per body relied upon, which is a "latest per lab" query, not a test log. Keep the log elsewhere and expose the derived field.
Who owns the row
The ownership rule is one sentence in 1110.7(a) and it is a join condition, not a policy. For product manufactured outside the United States, the importer as defined in the part is the certifier, and the definition in 1110.3 resolves that term to the importer of record, the party whose bond supports the entry. For domestic product, 1110.7(b) assigns the manufacturer, then reassigns to the private labeler when the goods are privately labeled unless the manufacturer already issued the certificate.
ALTER TABLE finished_product_certificate
ADD COLUMN certifying_party_role TEXT NOT NULL
CHECK (certifying_party_role IN ('importer_of_record','manufacturer','private_labeler'));
-- Gate query: a shipment may not reach entry filing with no certifier resolved.
-- It has to return zero rows before the entry is transmitted.
SELECT s.id
FROM shipment s
JOIN product p ON p.id = s.product_id
WHERE NOT EXISTS (
SELECT 1 FROM finished_product_certificate c
WHERE c.identifier_kind = p.identifier_kind
AND c.identifier_value = p.identifier_value
AND c.certifying_party_role IS NOT NULL
);
Enforcement is where the model stops being documentation. Section 1110.13(a)(1) requires the data elements of 1110.11 to be eFiled in ACE at the time of filing the entry, or when the entry is transmitted, or when entry and summary go in together, using the Commission's PGA Message Set guide. Goods leaving a zone for consumption or storage sit inside that sentence, as do low value parcels entering under the de minimis statute at 19 U.S.C. 1321(a)(2)(C). Mail imports go into the Product Registry before arrival. The practical consequence for a pipeline design is that the certificate is a synchronous dependency of the entry, not a background job.
before: manifest -> entry_filing(ace, pga=CPSC) -> customs_release
after: manifest -> certificate_row.ensure_ready() -> entry_filing(...) -> release
^ fails closed when identifier, cited_rules or attestation is null
Retrieval has a stated latency. Section 1110.13(c) is what turns a missing row into a finding, because the certificate has to be in front of the Commission or CBP the moment either asks, and the rule reads that as within 24 hours. Section 1110.13(b) puts a second duty on the certifier, which is to furnish the certificate to each distributor or retailer. A store of record with a 48 hour export process is out of spec even when the data is complete.
Delegation is allowed and responsibility is not transferable. Section 1110.15 lets a certifier rely on another party to test, to certify components, or to enter data into the registry on their behalf, and then leaves those audit attributes with the party named in 1110.7 rather than with the delegate. In an audit trail that means the acting party is an attribute of the event while the accountable party is a column on the record.
Our fulfillment team runs three sites in China, 13,000 square meters at Suzhou, 8,000 at Dongguan and 3,000 at Shenzhen, and the receiving scan is where a missing identifier shows up as an unmatched row rather than as a claim. We hold no opinion on rates or transit promises, and the fields above come from 16 CFR 1110 rather than from a service level. FulfillNexa by SBT (fulfillnexa.com) operates the inbound and outbound handling for sellers shipping from these facilities.
Top comments (0)