55 組だけご判断ください(1 組は自動・止まっている参照 132 件)・行をクリックすると残す記録をその場で選べます

住所も電話も無いか姓しか無く、データだけでは同じと言い切れない組です。 記録ごとの 担当者・営業行・患者 の件数が判断材料。0 件なら消しても失う参照はありません。 迷えば「わからない」で構いません。

あなたの
判断
種別
重複の
根拠
見立て

なぜ二重になるのか

移行のせいではありません。CMS は追加しかしないので、全角スペースひとつ違えば別の事業所、 2 つのクリニックが登録した同じ人は 2 人になります。紹介先がどちらを指すか決まらず、 クリニックの選択肢にも両方出ます。

営業行の移行より先に流します

先に営業行を 1,913 行入れると、退役する記録を指した参照が同じ数だけ増えます。 順序は 統合 → 営業データ移行

訪問看護ステーションなど、サービス名を含む事業所

本番マスタ 765 件が名称に「ステーション」を含みます。突合は名称を丸ごと見るので、 「○○訪問看護ステーション」と「○○居宅介護支援事業所」は別のまま——同じ建物・同じ法人でも 別サービスで、レセプトも担当者も別だからです(サービス名を除くと同名になる組が 201 組、 うち 128 組は同一所在地。重複ではありません)。今回の 56 まとまりのうち ステーション名は 0 件、いずれも表記ゆれによる同一名。サービス種別をまたぐ統合は 3 件です。

回答のしかた

要判断 55 件は残す記録を番号で選ぶか「別の事業所です/別人です」。 自動 1 件もその場で止められます。回答は突合表と同じ保存先に入り、統合スクリプトが読みます (同じまとまりに違う回答が並べば、どちらでも統合しません)。

既存の参照をどうするか

退役させる前に、担当者の勤務先・営業行の紹介先からの参照を残す記録へ付け替えます (担当者 0 件・営業行 1 件)。付け替えと退役は同じ journal なので、 取り消せば参照も元に戻ります。要判断は統合しないため、その 132 件はいまのまま。 行を開くと、どの担当者・どの営業行がどの項目で指しているかが 1 件ずつ出ます。

統合が実際に書くもの

  1. 残す記録を決める — 項目が多いほう、次に参照が多いほう、最後は ID 順。再実行しても同じ。
  2. 空欄を埋める — 残す側が空の項目だけ。上書きなし(今回 1 項目)。
  3. 参照を移す — 担当者 0 件・営業行 1 件を残す記録へ。
  4. 削除ではなく退役is_deletedmerged_into。CMS の論理削除と 同じ扱いで、参照を見落としても復旧できます。
  5. journal に記録 — 書き込みごとに前の値を残すので rollback.py --journal が正確な取り消しに。

検証

エミュレータ(本番スナップショットから復元)で通し、取り消し後の snapshot.py --diffidentical

python3 scripts/snapshot.py --target <t>               # 先にバックアップ
python3 transform/merge.py --apply --target <t>        # 統合
python3 transform/rollback.py --journal <path> --apply # 取り消し
判定本番に二重に入っている記録 同じだと言える理由違い参照

本番マスタ=事業所 3,715 件・担当者 1,884 件。うち 56 まとまりが重複、 統合すると 56 件が消えます(自動 1・要判断 55)。数字は scripts/merge_page.py が本番スナップショットで transform/merge.py を空実行して算出。