概要

項目内容
案件IDMAS-154
カテゴリ自動入力パイプライン(即効)
PhasePhase 1.5
優先度P1 (★★)
所要時間2-3時間
対象ファイル100_config/101_sys_config.js, 300_ui/301_ui_assist.js, 000_infra/004_utils.js, 500_import/502_receipt_reader.js, 800_ops/807_migration_i10.js
前提案件なし

目的

取引先名の表記ゆれ問題を根本解決するため、12_mst_partner に人が読める「略称」列(例: Amazon, freee, 角会計事務所)を新設する。この略称は、ファイル名(MAS-152)・UI表示・マッチング照合すべてで統一された短縮名として使用される。

現在のコード

100_config/101_sys_config.js (L474)

      'MST_PART': { headers: ["有効フラグ","取引先コード","法人番号","略称_4文字","取引先名_正式","UI用取引先名","取引先区分"], color: "#666666" },

300_ui/301_ui_assist.js (L25-32)

  if (sName.includes('16_wrk_master')) {
    const idCell = sheet.getRange(row, 1);
    if (col >= 3 && val && idCell.isBlank()) {
      idCell.setValue(generateNextIdForAssist_(sheet, 'REQ_', 1, 4, true));
      sheet.getRange(row, 2).setValue(new Date()); 
      if (sheet.getRange(row, 4).isBlank()) sheet.getRange(row, 4).setValue('取引先');
    }
  }

修正方針

Step 1: DDLスキーマ変更とUtils関数の追加

  1. 100_config/101_sys_config.jsMST_PARTWRK_MAST のヘッダーに「略称」を追加。
    • MST_PART: 取引先名_正式 の右に 略称 を追加。
    • WRK_MAST: 取引先略称_4文字 の右に 取引先略称 を追加。
    • inputColssetVali の列インデックスをずらす。
  2. 000_infra/004_utils.jsgenerateLogicalAbbr(name)normalizePartnerName(rawName) を追加。
    • generateLogicalAbbr: 法人格(株式会社、合同会社など)とカッコ内の補足を除去。
    • normalizePartnerName: OCR抽出名から MST_PART略称 を検索して返す。

Step 2: UIアシスト(自動提案)の実装

300_ui/301_ui_assist.jshandleUxAssist を拡張し、16_wrk_master で「登録名称」が入力された際に、Utils.generateLogicalAbbr を用いて「取引先略称」を自動提案する。

Step 3: OCR抽出名→略称の照合ロジック連携

500_import/502_receipt_reader.jsextracted.vendorUtils.normalizePartnerName でラップし、OCRで読み取った取引先名を略称に正規化して出力する。

Step 4: 既存データ移行スクリプトの作成

800_ops/807_migration_i10.js を作成し、既存の 12_mst_partner の「略称」列を一括生成する。

Step 5: 銀行CSV名寄せ連携(MAS-145 強化)

  1. 100_config/101_sys_config.jsMST_PART headers に「銀行摘要名」列を追加(「略称」の右)。
  2. 500_import/502_bank_importer.jsisMemoFuzzyMatch_ に MST_PART の「銀行摘要名」列による照合を追加:
    • loadBankMemoNameMap_(): MST_PART の銀行摘要名→取引先名_正式のマップを構築(キャッシュ付き)
    • resolveBankMemoToVendor_(bankMemo): 銀行摘要から取引先名を名寄せ解決(完全一致→部分一致)
    • isMemoFuzzyMatch_ の先頭で名寄せ解決を試み、解決できればSTLの取引先名と照合
  3. ユーザーが 12_mst_partner の「銀行摘要名」列に半角カナ(例: サイトウ タツキ)を手入力することで、銀行CSVのカナ摘要と取引先の紐付けが可能になる。

影響範囲

  • 12_mst_partner16_wrk_master の列構成が変更される。
  • OCR読み取り結果の取引先名が、マスタの略称に正規化されるようになる。
  • 銀行CSVマッチング時に、MST_PARTの銀行摘要名でカナ→取引先名の名寄せが行われる。

注意事項

  1. 101_sys_config.jssetVali の列番号(1始まり)を正確にずらすこと。
  2. Utils.generateLogicalAbbr の法人格リストは網羅的に定義すること(株式会社、合同会社、有限会社、一般社団法人、NPO法人など、およびその略称 (株) (株) 等)。
  3. マイグレーションスクリプトは冪等性を持たせ、既に略称が入力されている行はスキップすること。

エッジケース

条件表示値理由
法人格のみの名称(例: "株式会社")"株式会社"全て除去されて空文字になる場合は元の名称を返す
マスタ未登録のOCR抽出名論理略称化された名称マスタに完全一致しなくても、法人格を除去したクリーンな名称を返すため

実データ検証

  • 12_mst_partner の既存データに、特殊な法人格やカッコ書きが含まれていないか確認。
  • 16_wrk_master の列構成がDDLと一致しているか確認。

関連ドキュメント

仕様書リンク関連箇所
CLAUDE.mdマイグレーションスクリプト運用ガイドライン

人間が検討すべき事項

  • 既存の UI用取引先名 との使い分けルール: UI用取引先名 はプルダウン等での表示用(必要に応じて部門名などを付加)、略称 はファイル名や名寄せ用の純粋な短縮名として使い分ける。

実装プロンプト(Claude Code 用)

あなたはGAS会計システム(bizlp-gas-accounting)のシニア開発者です。
案件 MAS-154「取引先マスタの論理略称カラム追加+自動生成」を実装してください。

## 実行前タスク
以下のファイルを読み込んでください:
1. `100_config/101_sys_config.js` — `MST_PART` と `WRK_MAST` のヘッダー定義、`inputCols`、`setVali` の位置
2. `000_infra/004_utils.js` — ヘルパー関数の追加位置
3. `300_ui/301_ui_assist.js` — `handleUxAssist` の `16_wrk_master` 処理ブロック
4. `500_import/502_receipt_reader.js` — `extracted.vendor` の出力箇所
5. `CLAUDE.md` — マイグレーションスクリプトの命名規則

## 修正対象ファイル
- `100_config/101_sys_config.js` (変更)
- `000_infra/004_utils.js` (追記)
- `300_ui/301_ui_assist.js` (変更)
- `500_import/502_receipt_reader.js` (変更)
- `800_ops/807_migration_i10.js` (新規作成)

## 実装内容

### Step 1: DDLスキーマ変更
`100_config/101_sys_config.js` を修正:
- `MST_PART` のヘッダー: `取引先名_正式` の右に `略称` を追加。
  - 変更前: `["有効フラグ","取引先コード","法人番号","略称_4文字","取引先名_正式","UI用取引先名","取引先区分"]`
  - 変更後: `["有効フラグ","取引先コード","法人番号","略称_4文字","取引先名_正式","略称","UI用取引先名","取引先区分"]`
- `WRK_MAST` のヘッダー: `取引先略称_4文字` の右に `取引先略称` を追加。
  - 変更前: `["申請ID","申請日時","申請者名","マスタ種別","登録名称","取引先略称_4文字","PJ大区分","PJ小区分","PJ社内外","PJ資産化","取引先法人番号","取引先区分","承認ステータス","システム発番コード"]`
  - 変更後: `["申請ID","申請日時","申請者名","マスタ種別","登録名称","取引先略称_4文字","取引先略称","PJ大区分","PJ小区分","PJ社内外","PJ資産化","取引先法人番号","取引先区分","承認ステータス","システム発番コード"]`
- `inputCols` の修正: `MST_PART` は `[1,2,3,4,5,6,7,8]` に変更。
- `setVali` の修正: 
  - `MST_PART` の `取引先区分` は 7 → 8 に変更。
  - `WRK_MAST` の `PJ大区分` 以降の列番号を +1 する(7→8, 8→9, 9→10, 10→11, 12→13, 13→14)。

### Step 2: Utils関数の追加
`000_infra/004_utils.js` に以下を追加:
- `generateLogicalAbbr(name)`: 法人格(株式会社、合同会社、有限会社、一般社団法人、NPO法人、(株)、(株)など)とカッコ内の補足を除去し、trim()して返す。結果が空文字になる場合は元のnameを返す。
- `normalizePartnerName(rawName)`: `rawName` を `generateLogicalAbbr` で変換した上で、`MST_PART` の `略称` または `取引先名_正式` と照合。一致すればマスタの `略称` を返し、一致しなければ変換後の名称を返す。

### Step 3: UIアシスト(自動提案)の実装
`300_ui/301_ui_assist.js` の `handleUxAssist` を修正:
- `16_wrk_master` の処理ブロックで、入力された列が「登録名称」(列番号5)の場合、`Utils.generateLogicalAbbr` を呼び出して「取引先略称」(列番号7)にセットする。

### Step 4: OCR抽出名→略称の照合ロジック連携
`500_import/502_receipt_reader.js` を修正:
- L129付近の `extracted.vendor || ''` を `Utils.normalizePartnerName(extracted.vendor || '')` に変更。

### Step 5: マイグレーションスクリプトの作成
`800_ops/807_migration_i10.js` を作成:
- 関数名: `migrationI10()`
- `12_mst_partner` を読み込み、「略称」列が空の行に対して `Utils.generateLogicalAbbr(取引先名_正式)` を実行して書き込む。
- 冪等性を確保し、既に値がある場合はスキップする。
- `101_sys_config.js` の「🔧 マイグレーション」メニューに `migrationI10` を追加。

## 制約
- `101_sys_config.js` の `setVali` の列番号変更は慎重に行うこと。
- マイグレーションスクリプトは `CLAUDE.md` の規約に従うこと。

## エッジケース
- ゼロ除算: なし
- 境界値: 法人格のみの名称(例: "株式会社")が入力された場合、`generateLogicalAbbr` は空文字ではなく "株式会社" を返すこと。
- データなし: OCRで取引先名が抽出できなかった場合は空文字を返す。

## 実データ検証
- `101_sys_config.js` の `setVali` の列番号が、実際のシートの列番号と一致しているか確認。

## 動作確認
1. `npm run push:dev` を実行。
2. GASエディタで `setupAllSchemas` を実行し、`12_mst_partner` と `16_wrk_master` に新しい列が追加されることを確認。
3. `16_wrk_master` で「登録名称」に「株式会社テスト(東京)」と入力し、「取引先略称」に「テスト」が自動入力されることを確認。
4. メニューから `migrationI10` を実行し、既存の `12_mst_partner` に略称が生成されることを確認。

### 拡張思考の使用状況
| フェーズ | 拡張思考 | 備考 |
|---------|:--------:|------|
| Step 1-5 | あり | DDL変更に伴う列インデックスのズレの正確な計算、正規表現を用いた法人格除去ロジックの構築 |

推奨実行モデル

工程推奨モデル理由
仕様書作成(本ドキュメント)Claude Opus 4.6複数ファイルにまたがるDDL変更と列インデックスの依存関係を正確に把握する必要があるため
実装Claude Sonnet 4.6DDL変更、Utils追加、UIアシスト連携など中程度の判断が必要

変更履歴

日付変更内容
2026-04-16初版作成
2026-04-16Step 5 追加: 銀行CSV名寄せ連携(MST_PARTに「銀行摘要名」列追加、isMemoFuzzyMatch_に名寄せ照合追加)