nx_supply_risk.nx
buildroot/runtime/nx_supply_risk.nx
about
nx_supply_risk.nx -- GTM SUITE / MANUFACTURING SOURCING + APPROVAL RISK rung.
Where to make the material, what importing your own rigor actually costs,
and what any of it does to the odds of approval.
THE CENTRAL QUESTION THIS ANSWERS: can you buy a cheap manufacturing base
and supply the discipline yourself? Largely YES -- GMP is INSPECTION-based,
not nationality-based. A facility in Hyderabad holding an EU-GMP
certificate and a clean FDA inspection record is legally equivalent to one
in Basel, and roughly half of US generic supply already comes from India.
Quality Agreements, vendor qualification, person-in-plant and independent
lot release are precisely the mechanism for importing rigor, and large
sponsors do it every day.
BUT THE RIGOR IS NOT FREE, AND THAT IS THE WHOLE FINDING. Model the true
cost -- sticker + audit burden + the expected cost of an inspection-driven
delay -- and the cheap options CONVERGE. On a $10M API spend the effective
costs of India, Poland and China land within a few percent of one another,
because the sticker advantage of the cheapest is eaten by its risk premium.
Once that is visible, the right basis for choosing is quality of access and
regulatory adjacency, NOT the quoted price. Choosing on sticker alone is
choosing the risk without pricing it.
AN IRONY WORTH NAMING. The dominant failure mode at low-cost sites is DATA
INTEGRITY -- falsified or selectively reported records, the Ranbaxy 2013
felony plea being the canonical case. That is the SAME failure mode as the
opioid scandal, in a different jurisdiction and a different direction.
Fleeing one does not escape the class; only auditing does.
ON APPROVAL RISK. FDA does not reject drugs for being foreign -- most new
approvals involve foreign data and foreign manufacture. What it does reject
is (a) a dataset drawn from a single non-representative population, and
(b) a facility that fails inspection. Both are manageable and both are
under sponsor control, which is why they are modelled here as inputs
rather than as fate.
Costs in THOUSANDS of USD; probabilities in per-mil.
Grounding (cited; researcher-groundable):
fda_foreign_facility_inspection_and_oai_classification
ich_q7_gmp_active_pharmaceutical_ingredients
dependencies 1 imports · 1 importers
imports: nx_syscalls.nx
imported by: nx_gtm_svc.nx
structs
| none |
consts
| 48 | const SR_MAGIC_1100: i64 = 1100 |
| 52 | const SR_SWITZERLAND: i64 = 0 |
| 53 | const SR_US: i64 = 1 |
| 54 | const SR_IRELAND: i64 = 2 |
| 55 | const SR_KOREA: i64 = 3 |
| 56 | const SR_POLAND: i64 = 4 |
| 57 | const SR_INDIA: i64 = 5 |
| 58 | const SR_CHINA: i64 = 6 |
| 59 | const SR_N: i64 = 7 |
| 61 | const SR_INVALID: i64 = 0 - 1 |
| 126 | const SR_DELAY_COST_K: i64 = 18000 |
| 234 | const SR_APPROVAL_OK: i64 = 1 |
| 235 | const SR_RISK_SINGLE_POPULATION: i64 = 2 |
| 236 | const SR_RISK_FACILITY_INSPECTION: i64 = 3 |
functions
| 63 | func sr_name(s: i64) -> *u8 called by 1: gtm_supply_effective |
| 74 | func sr_valid(s: i64) -> i64 |
| 83 | func sr_cost_permil(s: i64) -> i64 called by 1: sr_sticker_cost_k |
| 101 | func sr_audit_burden_k(s: i64) -> i64 |
| 114 | func sr_inspection_fail_permil(s: i64) -> i64 |
| 128 | func sr_expected_delay_cost_k(s: i64) -> i64 |
| 136 | func sr_eu_gmp_available(s: i64) -> i64 |
| 146 | func sr_sticker_cost_k(s: i64, spend_k: i64) -> i64 |
| 153 | func sr_effective_cost_k(s: i64, spend_k: i64) -> i64 |
| 165 | func sr_saving_retained_permil(s: i64, spend_k: i64) -> i64 |
| 179 | func sr_best_effective(spend_k: i64) -> i64 calls 1: sr_effective_cost_k |
| 196 | func sr_best_sticker(spend_k: i64) -> i64 calls 1: sr_sticker_cost_k |
| 213 | func sr_low_cost_converged(spend_k: i64, tol_permil: i64) -> i64 calls 1: sr_effective_cost_k |
| 242 | func sr_data_applicability_risk(multiregional: i64, n_regions: i64) -> i64 called by 1: sr_approval_blocker |
| 250 | func sr_approval_blocker(multiregional: i64, n_regions: i64, site: i64) -> i64 |
| 260 | func sr_foreign_origin_is_a_barrier() -> i64 |
| 267 | func sr_capture_bias_favours_approval() -> i64 |