Downstream E2E Smoke Checks
Downstream E2E Smoke Checks
この文書は、analysis_inputs/ から NCA / PopPK 側へ最低限つながるかを確認するための smoke check を説明します。
これは Phoenix, NONMEM, nlmixr2 の正式検証ではありません。目的は、fixture CSVが下流parser、簡易NCA計算、PopPK control/template作成まで破綻しないことを早く確認することです。
Command
python3 tools/run_downstream_smoke.py \
--analysis-dir outputs/<run>/workflow/analysis_inputs \
--out-dir outputs/<run>/workflow/downstream_smoke
make harness-check では、versioned examplesに対してこのsmoke checkと外部validation profileのprobeを実行します。
make downstream-check
make external-validation-probe
What It Does
flowchart LR
A["analysis_inputs/ADPC.csv"] --> B["make_downstream_adapters.py"]
A --> C["simple NCA smoke"]
D["analysis_inputs/POPPK_INPUT.csv"] --> B
D --> E["PopPK parser smoke"]
B --> F["validate_downstream_adapters.py"]
C --> G["NCA_SUMMARY.csv"]
E --> H["NONMEM / nlmixr2 parser templates"]
F --> I["DOWNSTREAM_SMOKE_MANIFEST.yml"]
G --> I
H --> I
Outputs
| Output | Meaning |
|---|---|
adapters/ |
R NCA / Phoenix-like / NONMEM-like / nlmixr2-like adapter CSVs |
nca_smoke/NCA_SUMMARY.csv |
simple linear-trapezoidal CMAX, TMAX_H, AUCLAST summary |
poppk_smoke/POPPK_PARSE_SUMMARY.yml |
dose/observation row counts and parser readiness checks |
poppk_smoke/nonmem_parser_template.ctl |
NONMEM parser smoke control template |
poppk_smoke/nlmixr2_parser_template.R |
nlmixr2 parser smoke model template |
DOWNSTREAM_SMOKE_MANIFEST.yml |
status, counts, warnings, limitations |
Interpretation
| Status | Meaning |
|---|---|
OK |
Adapter CSVs have expected columns and simple NCA/PopPK parser smoke checks pass |
WARN |
Outputs were generated but some rows or summaries need review |
FAILED |
Adapter contract or required parser-ready structure is broken |
Boundary
This check improves workflow confidence, but it does not replace:
- Phoenix project validation
- NONMEM execution
- nlmixr2 estimation
- model-specific dataset requirements
- clinical pharmacology validation
For formal tool use, treat the generated files as starting fixtures and add tool/project-specific control files, metadata, and validation outside this harness.
POPPK_INPUT.csv の CMT は parser smoke fixture 用の convention です。既定は投与行 1、観測行 2 ですが、実NONMEM/nlmixr2モデルに合わせる場合は make_analysis_inputs.py または run_workflow.py で --dose-cmt と --observation-cmt を指定してください。
Site-specific Adapter Layer
施設ごとの列名、固定値、必須列を合わせたい場合は、標準adapterの後ではなく analysis_inputs/ から直接 site-specific CSV を作ります。
python3 tools/make_site_adapters.py \
--analysis-dir outputs/<run>/workflow/analysis_inputs \
--spec-yml external_validation/site_adapter_template.yml \
--out-dir outputs/<run>/workflow/site_adapters
external_validation/site_adapter_template.yml をコピーして、施設のNCA/PopPK dataset仕様に合わせます。
adapters:
site_nca:
source: ADPC
output: site_nca.csv
columns:
- name: SUBJECT
source: USUBJID
- name: TIME
source: TIME_H
- name: CONC
source: AVAL
required_nonblank: [SUBJECT, TIME, CONC]
出力:
site_nca.csv
site_poppk.csv
SITE_ADAPTER_MANIFEST.yml
このlayerは施設別mappingをrepo内でレビュー可能にするためのものです。submission-ready ADaM、正式Phoenix dataset、正式NONMEM datasetを保証しません。
Optional External Tool Validation In This Repo
Phoenix / NONMEM / nlmixr2 の実行環境がある場合は、同じリポジトリ内の optional validation layer から呼べます。
python3 tools/run_external_tool_validation.py \
--profile-yml external_validation/tool_profiles.yml \
--downstream-dir outputs/<run>/workflow/downstream_smoke \
--out-dir outputs/<run>/workflow/external_tool_validation \
--tools nonmem,nlmixr2 \
--execute
--execute を付けない場合は、実行せずにコマンド存在確認だけ行います。
python3 tools/run_external_tool_validation.py \
--downstream-dir outputs/<run>/workflow/downstream_smoke \
--out-dir outputs/<run>/workflow/external_tool_validation
既定profileは external_validation/tool_profiles.yml です。
| Profile | Default behavior |
|---|---|
phoenix |
placeholder。各施設のPhoenix automation commandに置き換えて使う |
nonmem |
nmfe75 と生成済み nonmem_parser_template.ctl を使う想定 |
nlmixr2 |
Rscript から nlmixr2 packageと生成済みtemplateを読む |
出力:
EXTERNAL_TOOL_VALIDATION.yml
<tool>/stdout.log
<tool>/stderr.log
このlayerは同じrepoにありますが、外部ツール本体やライセンスは同梱しません。CIや通常の make harness-check では外部ツール実行を必須にしません。