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分析(得意先マスタ 信用限度額構成比)

項目 内容
文書名 得意先マスタ ABC分析 詳細設計書
対象環境 IBM i(AS/400) RPG IV(固定形式)
版数 1.00

1. システム概要

1.1 目的

得意先マスタファイル(TKMASP)に登録されている全得意先について、信用限度額(TKGEND) を分析軸としたABC分析を行い、得意先ごとのランク(A/B/C)を判定する。判定結果はワークファイルに書き込み、後続でユーザーがSQL文またはQUERYにより自由に検索・集計できる状態にする。

1.2 処理概要

  1. プログラムを起動する。
  2. 得意先マスタファイル(TKMASP)を丸ごとコピーし、結果格納用の項目をあらかじめ付加したワークファイルを作成する。
  3. ワークファイルに対してCHAINによる更新処理(UPDATE)を行い、ABC分析結果等を書き込む。
  4. 処理完了後、ワークファイルはそのままユーザーの検索対象として利用可能な状態で保持される。

1.3 前提条件(本書内で明記する不足情報の補足)

本要件書には明記されていないが、設計上必要となる事項を以下のとおり仮定する。

No 前提事項 内容
1 ワークファイル名 TKMASW とする(TKMASPのコピー+分析結果項目付加)
2 TKNYUK(最終入金日)の小数桁 DDS上 6P のみで小数桁の明記が無いため、日付項目(YYMMDD形式)とみなし小数桁 0 と仮定する(6P 0 相当)。本ABC分析処理では未使用項目。
3 構成比・累積構成比の格納要否 要件上必須なのは「結果」列のみだが、ユーザーがSQL/QUERYで根拠を検証できるよう、構成比・累積構成比・順位も付加項目として 提案 する(必須要件ではなく拡張提案。詳細は8章参照)。
4 信用限度額が同額の場合の順位付け 信用限度額が同額の得意先が複数存在する場合、得意先番号(TKBANG)昇順を第二ソートキーとし、順位を一意に確定する。
5 信用限度額がマイナス値の場合 データ不整合とみなし、集計対象からは除外せず合計には含めるが、E005(システム異常)として明細エラーログに記録することを推奨する。
6 10章「信用限度額80%以上判定ロジック」 要件文中に処理内容の詳細記載が無いため、業務上一般的な 与信超過注意判定(売掛金残高が信用限度額の80%以上に達した得意先を検出する)と仮定して設計する(詳細は10章参照)。

2. 業務概要

得意先の与信管理・営業戦略立案を目的として、信用限度額の大きい得意先から順に構成比・累積構成比を算出し、重要度をA・B・Cの3ランクに分類する。分類結果はワークファイルに保持し、営業部門・与信管理部門がSQL/QUERYで自由に抽出・集計できるようにする。

ランク 定義 位置付け
A 累積構成比 ≦ 70.00% 重点管理対象(上位得意先)
B 70.00% < 累積構成比 ≦ 90.00% 準重点管理対象
C 90.00% < 累積構成比 一般管理対象

3. 業務フロー


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

RPG IV固定形式での実装を前提とした処理手順を以下に示す。

[開始]
  ①ワークファイル TKMASW の存在チェック
      存在する場合 → CLRPFM 等で内容クリア(前回実行分の残存回避)
      存在しない場合 → TKMASPのDDS定義を元に付加項目を加えたTKMASWを作成
  ②CPYF(または同等ロジック)で TKMASP の全件を TKMASW へコピー
      コピー時、付加項目(JUNI/KOSEI/RUIKEI/KEKKA/YOCHUI)は初期値(ブランク/ゼロ)とする
  ③TKMASPファイルオープン(入力用)
      OPEN失敗 → E002 出力し *ESCAPE で異常終了
  ④件数チェック(%EOF または COUNT)
      0件 → E001 出力し正常終了扱いで終了(後続処理を行わない)
  ⑤信用限度額(TKGEND)降順、同額時は得意先番号(TKBANG)昇順でソート
      OPNQRYF の ORDER (DESCEND)、または配列読込+SORTA で実現
  ⑥信用限度額合計(ZGOKEI)を算出
      ZGOKEI = Σ(TKGEND) (全件加算)
      ZGOKEI が 0 の場合 → E004 出力し *ESCAPE で異常終了(ゼロ除算回避)
  ⑦ソート順に1件ずつ処理(LOOP)
      READ時エラー(%ERROR) → E003 出力し当該件をスキップしログ出力、次件へ継続
      ⑦-1 順位(JUNI)を採番(1から連番)
      ⑦-2 構成比(KOSEI)= TKGEND ÷ ZGOKEI × 100(9章の計算式参照)
      ⑦-3 累積構成比(RUIKEI)= 前件までのRUIKEI + 当件のKOSEI
      ⑦-4 ABCランク(KEKKA)判定(9章の判定基準参照)
      ⑦-5 与信超過注意フラグ(YOCHUI)判定(10章参照)
      ⑦-6 TKMASWをTKBANGでCHAINし、UPDATE(項目書込)
          CHAIN失敗(該当なし) → E005 出力しログに記録、次件へ継続
  ⑧全件処理完了後、処理件数・エラー件数をジョブログへ出力
  ⑨ファイルクローズ
  ⑩正常終了メッセージ送信
[終了]

5. ER図

本処理で使用する実体は「得意先マスタ(TKMASP)」と、その分析結果を保持する「ワークファイル(TKMASW)」の2つであり、1対1(コピー元・コピー先)の関係となる。


6. ファイル関連図


7. 使用ファイル一覧

No ファイル名 種別 用途 装備 キー
1 TKMASP 物理ファイル(既存) 得意先マスタ(分析元データ) 入力専用(INPUT ONLY) TKBANG(UNIQUE)
2 TKMASW 物理ファイル(新規/提案) ABC分析結果ワークファイル。TKMASPの全項目+分析結果項目 更新用(UPDATE) TKBANG(UNIQUE)

8. 項目定義

8.1 TKMASP(得意先マスタ/既存 レコード様式:TKMASR)

DDS上、全角項目は O(DBCS-OPEN)型、半角項目は A型、数値項目は P(パック10進)型で定義されている。

No 項目名 桁数 小数 日本語名 備考
1 TKBANG A 5 - 得意先番号 主キー(UNIQUE)
2 TKNAKN A 20 - 得意先名+カナ 半角カナ想定
3 TKNAKJ O 20 - 得意先名-漢字 全角
4 TKADR1 O 20 - 住所(1) 全角
5 TKADR2 O 20 - 住所(2) 全角
6 TKTIKU A 2 - 地区コード 半角
7 TKPOST A 6 - 郵便番号 半角
8 TKTELE A 13 - 電話番号 半角
9 TKGURI P 9 0 当月売上高 パック10進
10 TKNURI P 9 0 当年売上高 パック10進
11 TKZURI P 9 0 前年売上高 パック10進
12 TKUZAN P 9 0 売掛金残高 パック10進
13 TKGEND P 9 0 信用限度額 ABC分析の基準項目
14 TKNYUK P 6 0※ 最終入金日 ※前提条件No.2参照(YYMMDD想定・本処理未使用)
15 TKSIME A 1 - 締め日コード 半角

8.2 TKMASW(ワークファイル/新規・提案)

TKMASPの全15項目をそのまま引き継ぎ(項目名・型・桁数は8.1と同一)、以下の分析結果項目を追加する。

No 項目名 桁数 小数 日本語名 要否 説明
16 JUNI P 5 0 信用限度額順位 提案 降順ソート後の順位(1~)
17 KOSEI P 7 4 構成比(%) 提案 小数点第4位まで保持し表示は四捨五入して小数第2位とする
18 RUIKEI P 7 4 累積構成比(%) 提案 同上
19 KEKKA A 1 - 結果(ABCランク) 必須 'A' / 'B' / 'C' のいずれか1文字
20 YOCHUI A 1 - 与信超過注意フラグ 提案 'Y'=80%以上/' '(空白)=未該当(10章参照)

初期化ルール:TKMASP→TKMASW コピー時点では JUNI=0、KOSEI=0、RUIKEI=0、KEKKA=' '、YOCHUI=' ' とする。


9. ABC分析ロジック

9.1 分析基準

分析対象項目:信用限度額(TKGEND)

9.2 処理手順と計算式

手順1:整列
TKMASPの全レコードを TKGEND の降順(同額の場合はTKBANG昇順)に整列する。

手順2:信用限度額合計の算出

ZGOKEI = Σ(TKGEND)  ※TKMASP全件分の合計
  • ZGOKEI = 0 の場合はゼロ除算防止のため以降の計算を行わず、エラー処理(13章 E004)へ分岐して処理を中断する。

手順3:得意先ごとの構成比の算出

KOSEI(i) = (TKGEND(i) ÷ ZGOKEI) × 100
  • 演算は小数第4位まで保持(内部は 7P 4)。四捨五入は最終桁(第4位)で行う。

手順4:累積構成比の算出(手順1の整列順に先頭から累積)

RUIKEI(1) = KOSEI(1)
RUIKEI(i) = RUIKEI(i-1) + KOSEI(i)    (i ≧ 2)

手順5:ABCランクの判定(判定は必ずRUIKEI(累積構成比)を用いる。KOSEI単体では判定しない)

判定式 KEKKA
RUIKEI ≦ 70.0000 'A'
70.0000 < RUIKEI ≦ 90.0000 'B'
RUIKEI > 90.0000 'C'

境界値の丸め誤差防止のため、判定は比較演算を 小数第4位(内部保持桁) で行い、四捨五入後の表示値では判定しないこと。

9.3 出力

TKMASWの該当レコードへ JUNI/KOSEI/RUIKEI/KEKKA を CHAIN→UPDATE で書き込む。


10. 信用限度額80%以上判定ロジック(提案仕様/前提条件No.6)

本項目は元要件書に処理内容の明記が無いため、与信管理業務で一般的に必要とされる「与信超過注意判定」として設計する。実装前に業務部門との仕様確認を推奨する。

10.1 目的

売掛金残高(TKUZAN)が信用限度額(TKGEND)に対してどの程度まで達しているかを判定し、80%以上に達している得意先を注意対象として検出する。

10.2 計算式

利用率(RITU) = TKUZAN ÷ TKGEND × 100

10.3 判定基準

条件 YOCHUI
TKGEND = 0 の場合 判定不能のため ' '(空白)とし、エラーログには記録しない(TKGENDゼロは個別に許容)
RITU ≧ 80.00 'Y'(与信超過注意)
RITU < 80.00 ' '(空白)

※ 得意先単位のTKGENDが0の場合と、9章のZGOKEI(全件合計)が0の場合は別事象である点に注意。前者は当該得意先のみ判定対象外とし処理は継続、後者は9章のとおり処理全体を中断する。


11. 抽出条件

No 条件 内容
1 対象範囲 TKMASP全件を対象とする(WHERE条件なし、絞り込みは行わない)
2 論理削除等の除外 TKMASPには削除フラグ等の項目が存在しないため、除外条件は設けない
3 信用限度額マイナス値 集計対象からは除外しない(合計・構成比計算にそのまま含める)。ただし前提条件No.5のとおりログに記録することを推奨
4 信用限度額ゼロの個別得意先 集計対象に含める(KOSEIは0となり、累積構成比にも影響しない)。エラーとはしない
5 ソート順 TKGEND降順、同額時TKBANG昇順(9.2手順1)

12. 集計条件

No 集計項目 集計方法 集計単位
1 信用限度額合計(ZGOKEI) TKMASP全件のTKGENDを合算 全社(全得意先)
2 構成比(KOSEI) 得意先ごとのTKGEND ÷ ZGOKEI × 100 得意先単位
3 累積構成比(RUIKEI) ソート順(TKGEND降順)に構成比を先頭から累積加算 得意先単位(累積)
4 ABC件数集計(参考/ユーザーSQLでの利用を想定) SELECT KEKKA, COUNT(*) FROM TKMASW GROUP BY KEKKA ランク単位
5 与信超過件数集計(参考) SELECT COUNT(*) FROM TKMASW WHERE YOCHUI = 'Y' 全社

13. エラー処理

コード エラー内容 検出タイミング 処理内容 メッセージ例
E001 データなし TKMASPオープン後、件数0件を検知した時点 エラーメッセージ出力後、正常終了(後続処理は行わない) 「E001:得意先マスタ(TKMASP)に対象データが存在しません。処理を終了します。」
E002 ファイルオープンエラー TKMASPまたはTKMASWのOPEN時 エラーメッセージ出力後、*ESCAPEメッセージ送信し異常終了 「E002:ファイルのオープンに失敗しました。ファイル名:TKMASP(または TKMASW)」
E003 レコード読込エラー READ処理時に%ERRORが真となった場合 該当件をスキップし処理継続。エラー件数をカウントしジョブログへ出力 「E003:レコード読込中にエラーが発生しました。得意先番号:&1」
E004 信用限度額ゼロによるゼロ除算 手順2でZGOKEI(信用限度額合計)=0を検知した場合 構成比算出処理を行わず、*ESCAPEメッセージ送信し異常終了 「E004:信用限度額合計がゼロのため、構成比を算出できません。処理を中断します。」
E005 システム異常 上記以外の予期しないエラー(CHAIN失敗、UPDATE失敗、%STATUS異常等) エラー内容(ファイル名・レコード様式・%STATUS)をジョブログへ出力し、*ESCAPEメッセージ送信し異常終了 「E005:システム異常が発生しました。ファイル:&1 状態コード:&2 管理者に連絡してください。」

13.1 実装上の留意事項

  • 各READ/CHAIN/UPDATE命令には必ず MONITOR またはエラー表示指示子(%ERROR)でのエラー捕捉を実装し、無応答(ハング)を防止すること。
  • E001・E004は業務ルール上の正常な分岐であるため、E005(システム異常)とは明確に区別してログ出力すること。
  • すべてのエラーメッセージは得意先番号など識別可能な情報を付与し、原因調査を容易にすること。

当記事の著作権は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?