# JRA-VAN 確定オッズ問題 引継ぎ資料

作成日: 2026-06-12（診断完了分を追記）

## 診断で確定したこと（2026-06-12）

`diag_jvlink_integrity.py` 結果（2026/01/01〜06/11・option 4）:

| 指標 | 件数 |
|------|------|
| RA 成績確定 (k7) | 1,506 |
| O1+odds（JV 生データに単勝値あり） | 1,536 |
| k7 なのに JV 側オッズ無し | **0** |

**→ JV-Link は完全。keiba.db の NL_O1 で TanOdds が 491/1506 なのは jrvltsql の展開／書き込み側。**

次: **`o1_raw_all.txt` をオフラインでパース**（JV 再取得不要）→ NL_O1 と突き合わせ → 原因特定 → 入れ直し or jrvltsql 修正。

### オフラインパース（2026-06-12 追加）

`jltsql fetch` が `Download stalled` でも、既にダンプ済みの `C:\Users\oshim\jrvltsql\o1_raw_all.txt` で **①パース** を検証できる。

```bat
cd /d C:\Users\oshim\jrvltsql
scp root@133.130.90.66:/var/www/html/ai-horse-race.maspis.com/scripts/windows/parse_o1_raw_file.py .
scp root@133.130.90.66:/var/www/html/ai-horse-race.maspis.com/scripts/windows/parse_o1_raw_file.bat .
parse_o1_raw_file.bat
```

| 出力 | 意味 |
|------|------|
| `パースできた X / できない Y` | 本丸。Y>0 なら原因別内訳を見る |
| Y の原因 `odds_all_zero` 等 | 生データにオッズが無い（JV配信内容） |
| X≈全件 かつ `パースOKだがDB空` 多数 | **jrvltsql DB 書き込み側** |
| `--show-fail -1` | 失敗全件リストを result に追記 |

## データの流れ

```
JRA-VAN → JV-Link(固定長) → jrvltsql パース → NL_O1 等 → import_jrvltsql_db.py → MySQL
```

本番が読むのは最終的に **NL_O1.TanOdds**（馬番行）と **import 後の odds_lines**。

## 関連スクリプト

| ファイル | 用途 |
|----------|------|
| `scripts/windows/diag_jvlink_integrity.py` | JV-Link 単体・RA×O1 整合性 |
| `scripts/windows/diag_jvlink_integrity.bat` | 上記実行 |
| `scripts/windows/inspect_nl_o1.py` | NL_O1 スキーマ・サンプル表示 |
| `scripts/windows/parse_o1_raw_file.py` | **o1_raw_all.txt オフラインパース**（fetch 不要） |
| `scripts/windows/dump_o1_raw_all.py` | JV から全 O1 生データ → o1_raw_all.txt |
| `collectors/import_jrvltsql_db.py` | NL_O1.TanOdds → odds_lines |

## 参考

- **2020〜 単勝・馬連 手順まとめ:** `docs/ops_odds_2020_tansho_umaren.md`
- RACE に O1 含む: https://developer.jra-van.jp/t/topic/860
- jrvltsql data_support: https://github.com/miyamamoto/jrvltsql/blob/master/docs/data_support.md
