nx_supp_jurisdiction.nx
buildroot/runtime/nx_supp_jurisdiction.nx
about
nx_supp_jurisdiction.nx -- SUPPLEMENT GTM SUITE / MARKET ACCESS rung.
Answers "where can this actually be manufactured and sold", per market,
with the premarket burden and the review clock made explicit.
THE RESULT IS COUNTERINTUITIVE AND IT IS THE POINT OF THIS FILE. The
instinct when a market feels closed is to look offshore. For a BOTANICAL
or AMINO ACID supplement that instinct is backwards: the United States is
the most PERMISSIVE major market in the world, because DSHEA grandfathered
pre-1994 ingredients and requires NO premarket approval for them. Every
other market here demands premarket authorisation of some kind:
US no approval for an old dietary ingredient; 75-day
notification only for a NEW one (least burden)
Australia listing against a permitted-ingredient list, fast
EAEU State Registration certificate (SGR) required BEFORE sale
Japan Foods with Function Claims, notify 60 days ahead
Canada product licence + NPN before sale
EU Novel Food authorisation for anything without significant
pre-1997 EU consumption history (most burden)
So "go somewhere friendlier" is a real strategy for many industries and a
losing one here. The honest reason a botanical stack is easy to sell in
the US is that the US barely gates it.
THE ONE THING NO JURISDICTION OFFERS. A substance regulated as a MEDICINE
has no supplement pathway anywhere on this list -- not the US, not the
EAEU, not anywhere. Kisspeptin-10, BPC-157, oxytocin and bremelanotide
are medicines or unapproved new drugs in every one of these markets, so
sj_any_peptide_supplement_path() returns 0 by construction rather than by
promise. A government partnership does not convert a drug into a
supplement; it just moves which regulator objects.
TIMELINES AND FEES ARE INDICATIVE PLANNING FIGURES, not quotes -- they
move with dossier quality, ingredient novelty, and local counsel.
sj_estimate_is_indicative() exists so nothing downstream presents them as
commitments. Sanctions, banking access and export controls are a SEPARATE
analysis this file does not attempt and must not be read as clearing.
Grounding (cited; researcher-groundable):
dshea_1994_old_dietary_ingredient_no_premarket_approval
dependencies 2 imports · 3 importers
imports: nx_syscalls.nxnx_supp_ingredient.nx
imported by: nx_gtm_svc.nxnx_plan_svc.nxnx_prodready.nx
structs
| none |
consts
| 51 | const SJ_MAGIC_200000: i64 = 200000 |
| 52 | const SJ_MAGIC_800000: i64 = 800000 |
| 53 | const SJ_MAGIC_1000000: i64 = 1000000 |
| 54 | const SJ_MAGIC_500000: i64 = 500000 |
| 55 | const SJ_MAGIC_35000000: i64 = 35000000 |
| 59 | const SJ_US: i64 = 0 |
| 60 | const SJ_EAEU: i64 = 1 // Belarus, Russia, Kazakhstan, Armenia, Kyrgyzstan |
| 61 | const SJ_EU: i64 = 2 |
| 62 | const SJ_CANADA: i64 = 3 |
| 63 | const SJ_AUSTRALIA: i64 = 4 |
| 64 | const SJ_JAPAN: i64 = 5 |
| 65 | const SJ_N: i64 = 6 |
| 67 | const SJ_INVALID: i64 = 0 - 1 |
| 71 | const SJ_PATH_NONE: i64 = 0 // no lawful supplement route |
| 72 | const SJ_PATH_NO_PREMARKET: i64 = 1 // notify/register facility only |
| 73 | const SJ_PATH_NOTIFICATION: i64 = 2 // file and wait a statutory clock |
| 74 | const SJ_PATH_REGISTRATION: i64 = 3 // dossier + certificate before sale |
| 75 | const SJ_PATH_AUTHORISATION: i64 = 4 // full pre-approval (novel food) |
| 76 | const SJ_PATH_DRUG_ONLY: i64 = 5 // medicines route, not a supplement |
functions
| 78 | func sj_valid(j: i64) -> i64 |
| 84 | func sj_name(j: i64) -> *u8 called by 1: gtm_jurisdiction_path |
| 94 | func sj_regime(j: i64) -> *u8 called by 1: gtm_jurisdiction_path |
| 109 | func sj_pathway(j: i64, ingredient: i64) -> i64 |
| 129 | func sj_premarket_required(j: i64, ingredient: i64) -> i64 |
| 137 | func sj_is_sellable(j: i64, ingredient: i64) -> i64 |
| 147 | func sj_review_days(j: i64) -> i64 |
| 158 | func sj_dossier_cost_cents(j: i64) -> i64 |
| 168 | func sj_estimate_is_indicative(j: i64) -> i64 |
| 174 | func sj_requires_separate_sanctions_review(j: i64) -> i64 called by 1: gtm_jurisdiction_path |
| 182 | func sj_lowest_burden_market(ingredient: i64) -> i64 |
| 201 | func sj_markets_open(ingredient: i64) -> i64 calls 1: sj_is_sellable |
| 215 | func sj_any_peptide_supplement_path() -> i64 calls 1: sj_is_sellable |
| 233 | func sj_parallel_launch_days(m0: i64, m1: i64) -> i64 calls 1: sj_review_days |
| 242 | func sj_combined_dossier_cost_cents(m0: i64, m1: i64) -> i64 calls 1: sj_dossier_cost_cents |