1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude詳細設計書

1
Last updated at Posted at 2026-09-15

社内マーケティング調査用プログラム 詳細設計書

①ABC分析結果


前提条件(重要)

本設計書作成にあたり、以下の前提を置いています。着手前に必ず発注元・業務担当者と確認してください。

No 項目 内容
1 レコード様式名 ご指示では「TKMASR」とありましたが、添付DDS上の実際のレコード様式名は TKMASPR です。本書はDDS実物を正とし、TKMASPR を採用します。
2 データ型ルール ご指示では「全角はO型、半角はA型、数値はP型」とのことでしたが、添付DDSでは氏名・住所等の文字項目を含め全項目が A型 または P型 で定義されており、O型 の項目は存在しません。本書はDDS実物を正とし、O型は使用しません。
3 信用限度額項目 DDS上に「信用限度額」であることが明示された項目名がありません。項目名の並び(TKGURI/TKNURI/TKZURI/TKUZAN/TKGEND/TKNYUK)から、TKGEND(9P0)を 信用限度額 と推定して設計しています。実際の項目定義書(添付予定だったテキストファイル)と必ず突合してください。
4 添付テキストファイル 「添付したテキストファイルを参照」とのご指示がありましたが、本セッションにファイルが確認できなかったため、ユーザー提示のDDSソースのみを設計根拠としています。
5 ワークファイル名 未指定のため TKMASPW とします(TKMASP + Work)。
6 結果格納項目名 未指定のため TKKEKA(1A:ランク結果 "A"/"B"/"C")とします。
7 実行環境 IBM i(AS/400)、RPG IV 固定長形式、CLプログラムから起動される単独バッチジョブを想定。
8 出力先 「最新のファイルではSQL/QUERYで検索可能」との要件より、最終結果はDB2/400物理ファイル(ワークファイル)に格納する方式とし、画面/帳票出力は行わない。

1. システム概要

1.1 システム名

社内マーケティング調査用プログラム

1.2 概要

得意先マスタファイル(TKMASP)を基に、得意先ごとの信用限度額を用いたABC分析を行い、分析結果(ランクA/B/C)を付与したワークファイルを作成するバッチプログラム。作成されたワークファイルはユーザーがSQL文やQUERY/400を用いて自由に検索・分析できる状態で保持される。

1.3 実行方式

  • バッチ処理(オンライン起動可)
  • 起動契機:業務担当者による都度実行(日次/月次等の定期実行は未定、必要な場合はジョブスケジューラ設定を別途検討)

1.4 処理概要フロー

  1. プログラム実行
  2. 得意先マスタ(TKMASP)を丸ごとコピーしたワークファイル(TKMASPW)を作成(結果カラム TKKEKA を追加済みの形式で作成)
  3. ワークファイルに対しCHAINによる読込・アップデート処理を実施し、ABC分析結果を反映
  4. 処理完了後、ワークファイルはSQL/QUERYで検索可能な状態となる

2. 業務概要

2.1 業務目的

得意先マスタに登録されている得意先の「信用限度額」をもとに、売上・与信管理上の重要度をABCの3ランクに分類し、マーケティング施策の優先順位付けの基礎データとする。

2.2 ABC分析の考え方(パレート分析)

信用限度額の降順に得意先を並べ、全体合計に対する累積構成比を算出し、以下の基準でランク付けする。

ランク 累積構成比の範囲
A 累積構成比 ≦ 70.00%
B 70.00% < 累積構成比 ≦ 90.00%
C 90.00% < 累積構成比

2.3 分析基準項目

  • 分析基準:信用限度額(TKGEND、前提3参照)

2.4 出力

  • ワークファイル TKMASPW の各レコードに、分析結果ランク(TKKEKA:A/B/C)を格納する。
  • 帳票・画面出力は行わない(ユーザーはSQL/QUERYで直接参照する)。

3. 業務フロー

┌─────────────────────┐
│  業務担当者:実行指示  │
└──────────┬───────────┘
           │
           ▼
┌─────────────────────────────┐
│ ABC分析プログラム 実行         │
│(得意先マスタTKMASPを読込)    │
└──────────┬───────────────────┘
           │
           ▼
┌─────────────────────────────┐
│ ワークファイル TKMASPW 作成    │
│(結果カラムTKKEKA付与済み)    │
└──────────┬───────────────────┘
           │
           ▼
┌─────────────────────────────┐
│ 信用限度額でソート・集計       │
│ 構成比/累積構成比算出         │
│ ランク(A/B/C)判定           │
└──────────┬───────────────────┘
           │
           ▼
┌─────────────────────────────┐
│ TKMASPWへランク結果反映        │
│(CHAIN → UPDATE)            │
└──────────┬───────────────────┘
           │
           ▼
┌─────────────────────────────┐
│ 業務担当者:SQL/QUERYで分析    │
│ 結果を検索・活用               │
└─────────────────────────────┘

4. 処理フロー(プログラム内部)

[開始]
  │
  ▼
①初期化処理
  ・ワークファイル TKMASPW をCLRPFM等でクリア(既存時)
  ・累計変数、件数変数を初期化
  │
  ▼
②TKMASP 全件読込(OPEN)
  ・オープンエラー時 → エラー処理へ
  │
  ▼
③TKMASPの内容をTKMASPWへ複写(結果カラムTKKEKAはスペース初期化)
  ・レコード読込エラー時 → エラー処理へ
  ・件数0件(データなし)の場合 → エラー処理へ
  │
  ▼
④TKMASPWを信用限度額(TKGEND)降順にソート
  (QSORT/SQL ORDER BY/論理ファイルのいずれかで実現。9章参照)
  │
  ▼
⑤信用限度額合計(総合計)を算出
  ・合計が0の場合 → ゼロ除算エラー処理へ
  │
  ▼
⑥ソート順に1件ずつ読込み、構成比・累積構成比を算出
  │
  ▼
⑦累積構成比よりランク(A/B/C)を判定
  │
  ▼
⑧該当キー(TKBANG)でTKMASPWをCHAINし、TKKEKAをUPDATE
  ・CHAIN失敗時 → エラー処理へ
  │
  ▼
⑨全件処理完了まで⑥~⑧を繰返し
  │
  ▼
⑩ファイルクローズ
  │
  ▼
[終了]

5. ER図

本業務では得意先マスタ1ファイルのみを使用するため、複数ファイル間のリレーションは存在しない。参考として、得意先マスタとワークファイルの対応関係を示す。

┌───────────────────────┐        コピー・結果付与        ┌───────────────────────────┐
│   TKMASP(得意先マスタ)  │ ─────────────────────────▶ │  TKMASPW(ワークファイル)    │
│---------------------  │        (1レコード:1レコード) │  ----------------------------│
│ PK: TKBANG(得意先番号) │                              │ PK: TKBANG(得意先番号)      │
│  :(既存項目一式)      │                              │  :(既存項目一式)           │
│                        │                              │ TKKEKA(結果:A/B/C)※追加項目 │
└───────────────────────┘                              └───────────────────────────┘
  • カーディナリティ:TKMASP:TKMASPW = 1:1(全件複写、レコード増減なし)

6. ファイル関連図

                 ┌─────────────────┐
                 │  ABC分析プログラム  │
                 │ (RPG IV 固定長)  │
                 └───┬─────────┬────┘
                     │入力     │入出力
                     ▼         ▼
         ┌───────────────┐  ┌────────────────────┐
         │ TKMASP         │  │ TKMASPW             │
         │(得意先マスタ)  │  │(ワークファイル)      │
         │ 入力専用(INPUT)│  │ 更新可(UPDATE)      │
         └───────────────┘  └─────────┬──────────┘
                                       │
                                       ▼
                            ┌──────────────────────┐
                            │ ユーザー:SQL/QUERY検索 │
                            └──────────────────────┘

7. 使用ファイル一覧

No ファイル名 種別 用途 入出力モード レコード様式
1 TKMASP 物理ファイル(既存マスタ) 得意先マスタ(分析元データ) INPUT(入力専用) TKMASPR
2 TKMASPW 物理ファイル(ワーク/新規作成) TKMASPの複写+分析結果格納 UPDATE(入出力) TKMASPWR

※TKMASPWはプログラム内、または前処理(CLプログラム/DDS)にてTKMASPのDDSを元に TKKEKA(1A)を追加した形式で作成する。作成方法は「9.1 ワークファイル作成方式」を参照。


8. 項目定義

8.1 TKMASP(得意先マスタ)項目定義

No 項目名 桁数/型 項目名(論理) 備考
1 TKBANG 5A 得意先番号 キー項目(ユニークキー)
2 TKNAKN 20A 得意先名(漢字)
3 TKNAKJ 20A 得意先名(カナ)
4 TKADR1 20A 住所1
5 TKADR2 20A 住所2
6 TKTIKU 2A 地区コード
7 TKPOST 6A 郵便番号
8 TKTELE 13A 電話番号
9 TKGURI 9P0 (要確認:前年繰越額等の可能性) 本分析では未使用
10 TKNURI 9P0 (要確認:年間売上高等の可能性) 本分析では未使用
11 TKZURI 9P0 (要確認:前年売上高等の可能性) 本分析では未使用
12 TKUZAN 9P0 (要確認:売掛残高等の可能性) 本分析では未使用
13 TKGEND 9P0 信用限度額(推定) ★ABC分析の基準項目。要現物確認(前提3)
14 TKNYUK 6P0 (要確認:入金日等 YYMMDD) 本分析では未使用
15 TKSIME 1A 締め日区分等 本分析では未使用

キー:TKBANG(ユニークキー、昇順)

8.2 TKMASPW(ワークファイル)項目定義

TKMASPの全15項目 + 以下1項目を追加。

No 項目名 桁数/型 項目名(論理) 備考
16 TKKEKA 1A 結果(ABCランク) 初期値:スペース。処理後に "A"/"B"/"C" を設定

キー:TKBANG(TKMASPと同一。ユニークキー、昇順)

8.3 プログラム内部変数定義

変数名 桁数/型 内容
#GAKUKEI 11P0 信用限度額合計(全体)
#GAKUKUM 11P0 累積信用限度額
#KOSEI 7P2 構成比(%)
#RUIKEI 7P2 累積構成比(%)
#KENSU 7P0 得意先総件数
#RANK 1A 判定結果(A/B/C)
#ERRFLG 1A エラーフラグ('0'=正常、'1'=異常)
#ERRMSG 80A エラーメッセージ格納

9. ABC分析ロジック

9.1 ワークファイル作成方式

  1. TKMASPのDDSをコピーし、フィールド TKKEKA(1A)を追加したDDS TKMASPWR を事前に用意する(物理ファイルソースとして保持)。
  2. プログラム実行時、CLプログラム側で以下を実施する。
    • TKMASPW が既存の場合:CLRPFM TKMASPW(内容クリア)
    • TKMASPW が未作成の場合:CRTPF FILE(TKMASPW) SRCFILE(...) SRCMBR(TKMASPWR)
  3. RPGプログラム内でTKMASPを全件READし、TKMASPWへWRITE(複写)する。この時点で TKKEKA はスペースで初期化する。

9.2 ソート処理

信用限度額(TKGEND)降順に並べ替える。以下いずれかの方式で実現する(実装者の環境に応じて選択、本書は方式Aを標準とする)。

  • 方式A(推奨):TKGENDを降順キーとする論理ファイル(例:TKMASPWL、キー:TKGEND DESCEND, TKBANG ASCEND)を作成し、RPGでその論理ファイルをREADする。
  • 方式B:SQL RPG(EXEC SQL)でカーソルを ORDER BY TKGEND DESC, TKBANG ASC として定義し、順次FETCHする。
  • 方式C:QSORT組込みサブルーチン/配列ソートを用いる(件数が配列サイズ上限内であることが前提)。

※同一信用限度額の場合は得意先番号(TKBANG)昇順で並べる(順序の一意性を担保するため)。

9.3 信用限度額合計の算出

#GAKUKEI = TKMASPW全件のTKGENDの合計値
  • RPGでは、ソート前の複写処理時(8.1③工程)に合わせて積算するか、ソート後の1パス目で積算する。
  • 合計が0の場合はゼロ除算エラーとして処理を中断する(13章参照)。

9.4 構成比・累積構成比の算出

信用限度額降順ソート済みTKMASPWを先頭から1件ずつ処理し、以下の計算を行う。

【1件ごとの構成比】
#KOSEI = (TKGEND ÷ #GAKUKEI) × 100        小数第2位まで(切捨てとする/要業務確認)

【累積構成比】
#GAKUKUM = #GAKUKUM + TKGEND(当該件までの累積信用限度額)
#RUIKEI  = (#GAKUKUM ÷ #GAKUKEI) × 100     小数第2位まで(切捨てとする/要業務確認)
  • 計算精度:中間演算は 11P2(パック10桁+小数2桁相当)以上の桁数を確保し、丸め誤差による累積構成比のズレ(特に最終件で100.00%にならない現象)に注意する。
  • 端数処理(切捨て/四捨五入)の具体的な業務要件が未確定のため、本書では「切捨て」を暫定採用。業務担当者確認の上、確定させること。

9.5 ランク判定

「10.信用限度額80%以上判定ロジック」内の判定基準を用いて、#RUIKEI の値からA/B/Cを判定し、#RANK にセットする。

9.6 ワークファイルへの反映

CHAIN(TKBANG : TKMASPW)
IF %FOUND(TKMASPW);
   TKKEKA = #RANK;
   UPDATE TKMASPWR;
ELSE;
   ・CHAIN失敗(レコード不整合)→エラー処理へ(13章参照)
ENDIF;

10. 信用限度額80%以上判定ロジック

「80%以上」という表現は、業務要件のA/B/C分岐基準(70%・90%)とは別に、ご要望の章立てにある項目です。本書では、章立てのタイトルに従い、ランク判定処理全体(累積構成比によるA/B/C判定)をここで具体化します。80%はA・Bランクの境界(70%)とB・Cランクの境界(90%)の中間に位置する値であり、単独の「80%以上」という基準は業務要件本文中には明記されていないため、本章はABC判定ロジックの詳細仕様として扱います。80%を独立した判定基準として使う必要がある場合は、別途要件を確認してください。

10.1 判定基準(再掲)

ランク 条件式
A #RUIKEI ≦ 70.00
B 70.00 < #RUIKEI ≦ 90.00
C 90.00 < #RUIKEI

10.2 RPG IV 判定ロジック(擬似コード)

IF #RUIKEI <= 70.00;
   #RANK = 'A';
ELSEIF #RUIKEI <= 90.00;
   #RANK = 'B';
ELSE;
   #RANK = 'C';
ENDIF;

10.3 境界値の扱い

  • 累積構成比がちょうど「70.00」の得意先は A ランクとする(≦のため)。
  • 累積構成比がちょうど「90.00」の得意先は B ランクとする(≦のため)。
  • 累積構成比が「90.00」を超える最初の得意先から C ランクとする。

10.4 全件Cにならないための考慮

信用限度額が全件同額、または極端に偏った分布の場合でも、上記の累積構成比計算により必ずA・B・Cいずれかに機械的に分類される。特殊な分布パターン(例:1件で100%を占める等)でも本ロジックで破綻しないことをテストケースで確認すること(14章に準ずるテスト観点は別紙とする)。


11. 抽出条件

No 条件 内容
1 対象ファイル TKMASP 全件(絞り込みなし)
2 除外条件 なし(削除フラグ等の論理削除項目がDDS上に存在しないため、全件を有効データとして扱う)
3 信用限度額がマイナスの場合 業務要件未確定。本書では マイナス値も含めて集計対象とする(符号付きのまま合計・構成比計算を行う)。マイナス値を除外すべき場合は要件確認の上、抽出条件に「TKGEND ≧ 0」を追加すること。
4 信用限度額が未設定(0)の得意先 集計対象には含めるが、構成比0%として扱う(全件0の場合はゼロ除算エラーとなるため13章のエラー処理に従う)。

12. 集計条件

No 集計項目 集計方法
1 信用限度額合計 TKMASP(=TKMASPW複写後)の全件のTKGENDを単純合計
2 構成比 各得意先のTKGENDを信用限度額合計で除し100を乗算(9.4参照)
3 累積構成比 信用限度額降順に並べた順に構成比を積み上げて算出(9.4参照)
4 集計単位 得意先単位(TKBANG単位)。部門・地区等でのグルーピング集計は本要件には含まれない
5 ソート順 信用限度額(TKGEND)降順、同額の場合は得意先番号(TKBANG)昇順

13. エラー処理

13.1 エラー処理方針

各処理工程でエラーを検知した場合、以下のいずれかに該当する処理を行い、エラーメッセージをジョブログ/メッセージキューに出力の上、プログラムを異常終了(LR=*ON、リターンコード≠0)とする。処理途中でTKMASPWへの更新が一部完了している場合でも、ロールバック(コミットメント制御)は本要件では未定義のため、コミットメント制御を導入するかは別途確認し、暫定として非コミット運用とする。

13.2 エラー種別・処理内容・メッセージ例

No エラー種別 検知タイミング 処理内容 エラーメッセージ例
1 データなし TKMASP読込0件時 ワークファイル作成をスキップし、異常終了 E001: 得意先マスタ(TKMASP)にデータが存在しません。処理を中止します。
2 ファイルオープンエラー TKMASPまたはTKMASPWのOPEN失敗時 直後に処理中断、異常終了 E002: ファイルオープンに失敗しました。ファイル名:&1 状態コード:&2
3 レコード読込エラー READ/CHAIN時の入出力エラー(%ERROR発生) 当該レコードをスキップせず、即時処理中断、異常終了 E003: レコード読込中にエラーが発生しました。ファイル名:&1 得意先番号:&2
4 ゼロ除算(信用限度額合計が0) 構成比算出前の合計チェック時 除算処理を実施せず、異常終了 E004: 信用限度額の合計が0のため、構成比を算出できません。処理を中止します。
5 システム異常 上記以外の予期しないRPGエラー(%STATUS等) エラー内容をログ出力し、異常終了 E999: システム異常が発生しました。プログラム名:&1 状態コード:&2 詳細:&3

13.3 エラーチェック実装位置(処理フロー対応)

処理フロー工程(4章) 対応するエラー種別
②TKMASP読込(OPEN) No.2 ファイルオープンエラー
③TKMASP→TKMASPW複写 No.1 データなし、No.3 レコード読込エラー
⑤信用限度額合計算出 No.4 ゼロ除算
⑥⑦構成比・ランク判定 No.5 システム異常(想定外の演算エラー)
⑧CHAIN・UPDATE No.3 レコード読込エラー(CHAIN失敗を含む)、No.5 システム異常

13.4 RPG IV実装上の留意点

  • ファイルOPEN時は INFDS(ファイル情報データ構造)の状態コードを判定し、エラー時は分岐してエラー処理サブルーチン(*PSSR または EXSR $ERROR)へ制御を渡す。
  • READ/CHAIN命令には %ERROR 組込関数を付加し、エラー検知を行う(例外を発生させずハンドリングする方式を推奨)。
  • ゼロ除算は、除算実行前に必ず分母(#GAKUKEI)を事前チェックし、0の場合は演算自体を実行しない(RPGの %ERROR に頼らず事前ガードを行うことで、意図しないMCH1211等のハード例外を防止する)。
  • 想定外例外(システム異常)は *PSSR グローバルエラーサブルーチンで捕捉し、状態コード・プログラム名をメッセージに含めてジョブログへ送出(QMHSNDPM API等)した上でLR=*ONにして終了する。

付録:未確定事項一覧(要業務確認)

  1. TKGEND が本当に「信用限度額」であるかの項目定義確認(最重要)
  2. 構成比・累積構成比の端数処理方式(切捨て/四捨五入/切上げ)
  3. 信用限度額がマイナスの場合の扱い(集計対象に含めるか除外するか)
  4. コミットメント制御の要否(処理途中エラー時のロールバック要否)
  5. ワークファイル(TKMASPW)の命名規則、および既存ファイルがある場合の再実行時の扱い(洗い替えでよいか)
  6. 定期実行の要否(ジョブスケジューラ登録の必要性)

当記事の著作権はIBMに帰属します。詳細はこちらをご参照ください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?