This commit is contained in:
guanxiangwei
2026-08-27 11:27:47 +09:00
parent 1fead85505
commit 060b7bf1fa
16 changed files with 1321 additions and 22 deletions
@@ -0,0 +1,50 @@
## DJND4001 のカラム構成(コード値テーブル)
### 業務キー(有効期間)
- `ccompkb` varchar(2)
- `dstart` date NOT NULL
- `sstart` varchar(7)
- `dend` date NOT NULL
- `send` varchar(7)
- `start_dte` varchar(7) / `dstart_dte` date / `end_dte` varchar(7) / `dend_dte` date ← 予備の期間フィールド
### コード本体
- `cde_sybt` varchar(3) NOT NULL ← **コード種別**(辞書 ID)
- `cde_val` varchar NOT NULL ← **コード値**
- `name` varchar(160) ← 略称
- `dname` varchar(160) ← 詳細名
- `sname` varchar(160) ← 短縮名
- `rname` varchar(80)
- `kname01` varchar(160) ← カナ 1
- `kname02` varchar(160) ← カナ 2
- `kname03` varchar(160) ← カナ 3
- `dname_comment` varchar(80)
### 付帯データ
- `dta1`..`dta12` varchar(80) each、nullable
- `ctrl_cde1`..`ctrl_cde5` varchar(80) each、nullable ← 連携制御コード(他辞書への参照)
### 監査
- `kosin_usr` varchar(12) NOT NULL
- `kosin_pgm` varchar(12) NOT NULL
- `last_dte` timestamp NOT NULL
- `kosin_kbn` varchar(1) NOT NULL
- `cmnuser` varchar(10)
- `dmndate` timestamp
### システム
- `rowid` bigint NOT NULL DEFAULT nextval('rowid_seq')
### インデックス
- `djnd4001_idx` UNIQUE (cde_sybt, cde_val, dstart)
- `djnd4001_idx2` (ccompkb, dstart, dend, cde_sybt)
- `djnd4001_rowid_key` UNIQUE (rowid)
### サンプル
```
cde_sybt=941 (住宅借入金等特別控除)
cde_val=41 name="住(特家)" dname_comment="一般の住宅借入金等特別控除の場合(増改築等を含む。)で住宅が特例居住用家屋の場合"
cde_val=42 name="認(特家)" dname_comment="認定住宅等の新築等に係る住宅借入金等特別控除の場合で住宅が特例認定住宅等に該当する場合"
cde_val=44 name="震(特家)" dname_comment="震災再取得等の適用を選択した場合で住宅が特例居住用家屋に該当する場合"
dstart=2022-12-31 dend=2222-12-30 ← 長期有効
```
@@ -0,0 +1,135 @@
# DJND4001 / DJND4002 汎用マスタ(通用字典)知识点
> 数据源:updsv7_opho_ci @ 192.168.1.72:5432 (opho profile の Postgres MCP)
> 表コメントは PG `pg_class.obj_description` より
## 1. 位置付け — 汎用マスタとは何か
DJND4001 と DJND4002 はどちらも **汎用マスタ**(generic / common code master)、すなわち「共通辞書」。
業務テーブルにある `cde_*` 系カラムの値は、すべてこの 2 テーブルを参照している。
- **DJND4001** = コードDB (コード値の本体:コード値ごとの表示名・有効期間)
- **DJND4002** = コード一覧DB (cde_sybt ごとの辞書定義:項目名・入力制御・桁数・表示順)
| 項目 | DJND4001 (コードDB) | DJND4002 (コード一覧DB) |
| ----------- | -------------------------- | ----------------------- |
| 行数 | 277,926 | 427 |
| 列数 | 43 | 111 |
| 一意制約 | `(cde_sybt, cde_val, dstart)` | `(cde_sybt)` |
## 2. 4 フィールドで必ず絞り込む(必須)
> 中文导览:查代码必须同时带 `(ccompkb, dstart, dend, cde_sybt)` 这四个字段,缺任何一个都会串到别的字典。
DJND4001 / DJND4002 を問わず、コードを特定するには **次の 4 フィールドを同時に指定** すること:
```
(ccompkb, dstart, dend, cde_sybt)
```
- `ccompkb` (2) — 会社区分
- `dstart` (date, NOT NULL in 4001) — 有効開始日
- `dend` (date, NOT NULL in 4001) — 有効終了日
- `cde_sybt` (3) — コード種別(辞書 ID)
**どれか 1 つでも欠けると、別の辞書に流れる(串数据)。**
ある日付時点で有効なコード値を引く書き方:
```sql
WHERE ccompkb = :ccompkb
AND cde_sybt = :cde_sybt
AND cde_val = :cde_val
AND dstart <= :date
AND dend >= :date
```
## 5. inp シリーズの値ルール(4002 全 inp に共通)
> 中文导览:inp 系列(全部统一)取值规则:`'000'` 表示直接文本输入,其它值表示引用别的 `cde_sybt`。
DJND4002 の **すべての inp 系カラム** — `inp0..inp12`、および `inp_name / inp_dname / inp_sname / inp_rname / inp_kname01/02/03` — は同じルール:
| 値 | 意味 |
| ------- | ----------------------------------------------------- |
| `'000'` | **入力文字列**(直接テキスト入力) |
| その他 | **他 汎用マスタ を参照**(当該 cde_sybt の値を引く) |
つまり:
- `inp0 = '000'` → nme0 はテキストボックス
- `inp0 = '597'` → nme0 はプルダウン、値は cde_sybt='597' (俸給月額) の 4001 から取る
4002 の 1 行で、4001 の項目が「テキスト」なのか「どの辞書を引きに行くのか」が分かる構造になっている。
## 6. 4001 ↔ 4002 の対応関係
```
4002 (cde_sybt ごとに 1 行) ──── 定義 ────► 4001 ((cde_sybt, cde_val) ごとに 1 行)
cde_nme name / dname / sname / rname / kname01..03
nme0..nme12 (項目名) dta1..dta12 (実データ)
use0..use12 (入力制御:必須/任意) — (対応なし、UI 層のバリデーション)
inp0..inp12 ('000' テキスト / 他 cde_sybt) — (形式定義のみ、実値は dta* 側)
ord0..ord12 (桁数) — (対応なし、UI 層の制約)
ctrl_cde1..5 (連携参照の定義) ctrl_cde1..5 (連携参照の実際の値)
disp_hyoji / disp_jun — (UI 表示制御のみ)
```
> 中文导览:`use` 是输入校验(必填/可选),`inp` 是输入形式(文本 vs 字典引用) — 不要混淆。
## 7. よく使うクエリテンプレート
### 7.1 ある cde_sybt の、ある日付時点で有効な全コード値
```sql
SELECT cde_val, name, dname, kname01
FROM djnd4001
WHERE ccompkb = '01'
AND cde_sybt = :cde_sybt
AND :date BETWEEN dstart AND dend
ORDER BY ord0, cde_val; -- 注:4001 自体に ord 列は無し、並び順は 4002 定義に依る
```
### 7.2 ある cde_sybt の項目定義(4002)
```sql
SELECT cde_nme, cde_exp, cde_num_nme,
nme0, use0, inp0, ord0,
nme1, use1, inp1, ord1,
-- ...
disp_hyoji, disp_jun
FROM djnd4002
WHERE ccompkb = '01'
AND cde_sybt = :cde_sybt
AND :date BETWEEN dstart AND dend;
```
### 7.3 ある項目がどの辞書を参照しているか
```sql
-- "cde_sybt=597 の nme5(俸給月額)が参照している辞書は?"
SELECT inp5 FROM djnd4002
WHERE ccompkb = '01' AND cde_sybt = '597';
-- inp5='000' → 直接入力;それ以外 → 参照先の cde_sybt
```
### 7.4 cde_sybt ごとの行数分布
```sql
SELECT cde_sybt, COUNT(*) AS cnt
FROM djnd4001
WHERE ccompkb = '01'
GROUP BY cde_sybt
ORDER BY cnt DESC;
-- 718 / 716 / 714 各 6607 行
-- 710 / 595 / 706 / 708 / 712 / 704 / 597 各 6542 行
-- 「同じ cde_sybt で行数が揃っている」ものは年度/版ごとに履歴を持っている典型例
-- → dstart / dend で世代を切り替えている
```
## 8. 注意点
- 現在の MCP 接続先は `updsv7_opho_ci`(CI 環境)。本ノートのデータ・インデックスはすべてこの DB 基準。
- 4001 の `dstart / dend` は **NOT NULL**。主表には必ず期間が入る。アプリ側で dstart が空に見えるケースは、ビューや作業テーブルを経由しているケースがほとんどで、生の 4001 を直接引いているのではない。
- 4001 の 277k 行のうち、`cde_sybt=718 / 716 / 714` 各 6607 行のように「同 cde_sybt で同数」になる分布 — これは典型的には「年度/版ごとに同じ構造の履歴を積み、`dstart / dend` で世代を分ける」設計のしるし。
- `use0..use12`(必須桁入力 / 必須入力 / 任意入力)は **入力値の検証**。一方、`inp0..inp12`(`'000'` / 他 cde_sybt)は **入力形式**(テキストか辞書参照か)で、別物。混同しないこと。
- `ctrl_cde1..5`(4002 側)と `ctrl_cde1..5`(4001 側)はそれぞれ「連携参照の定義」と「連携参照の実際の値」を担う両端。
@@ -0,0 +1,66 @@
## DJND4002 のカラム構成(辞書定義テーブル)
> 中文导览:一行 = 一个 `cde_sybt` 的字段定义 + 显示控制。
### 業務キー
- `ccompkb` varchar(2)
- `dstart` date
- `sstart` varchar(7)
- `dend` date
- `send` varchar(7)
### コード種別
- `cde_sybt` varchar(3) NOT NULL ← 4001 と紐づく辞書 ID
- `cde_nme` varchar(40) NOT NULL ← 当該 cde_sybt の名称
- `cde_exp` varchar(60)
- `cde_num_nme` varchar(80) ← 採番制御の項目名 (SEQ / SEQNo 等)
### 項目定義 ×13 セット(nme0..nme12)
```
nme0..nme12 varchar(80) ← 項目名
use0..use12 varchar(10) ← 制御区分(必須桁入力 / 必須入力 / 任意入力)
inp0..inp12 varchar(3) ← **入力形式**(§5 参照)
ord0..ord12 varchar(4) ← 桁数
ctrl_cde1..5 varchar(80) ← 連携制御コード(他辞書への参照)
```
### 表示制御 ×6 セット(name / dname / sname / rname / kname01..03)
```
use_name / inp_name / ord_name (name)
use_dname / inp_dname / ord_dname (dname)
use_sname / inp_sname / ord_sname (sname)
use_rname / inp_rname / ord_rname (rname)
use_kname01 / inp_kname01 / ord_kname01
use_kname02 / inp_kname02 / ord_kname02
use_kname03 / inp_kname03 / ord_kname03
```
### 表示
- `disp_hyoji` varchar(1) ← 表示有無
- `disp_jun` numeric(4) ← 表示順
### その他
- `reki_kbn` varchar(1)
- `popup_kbn` varchar(4)
### 監査
- `kosin_usr` (12) NOT NULL / `kosin_pgm` (8) NOT NULL / `last_dte` ts NOT NULL
- `kosin_kbn` (1) NOT NULL / `cmnuser` (10) / `dmndate` ts
### インデックス
- `djnd4002_idx` UNIQUE (cde_sybt)
### サンプル
```
cde_sybt=123 cde_nme="(標準共済)整理番号採番制御"
cde_num_nme=SEQ
nme0=必須桁入力 / use0=必須桁入力 / inp0=000 / ord0=2
nme1=開始番号 / use1=必須入力 / inp1=000 / ord1=4
nme2=終了番号 / use2=必須入力 / inp2=000 / ord2=4
nme3=現在値 / use3=必須入力 / inp3=000 / ord3=4
disp_jun=123
cde_sybt=597 cde_nme="俸給月額(H27人勧)" 6 項目:現新区分/俸給表/級/号俸/俸給月額/義務特手当
cde_sybt=598 cde_nme="定額表・調整基本額表(H27人勧)" 項目:俸給表/級/定額/調整基本額/号俸/調整額
```
@@ -0,0 +1,164 @@
# 画面設計書 QCL00030 退職後一括更新(給与) — 02_一括更新対象職員一覧の取得SQL
## 1. SQL 全景
```
SELECT
CSHAINNO, -- 職員番号
CNAMEKNJ, -- 漢字氏名
BKYK_CDE, -- 部局コード
BKYK_NME, -- 部局名称
DTAISHA, -- 退職年月日
CMNUSER, -- 更新ユーザ
DMNDATE, -- 更新年月日
NJINJIFLG, -- 人事クリア
NQYOCALCFLG -- 給与計算フラグ
FROM (
SELECT
A.CSHAINNO, A.CNAMEKNJ, A.BKYK_CDE, A.BKYK_NME, A.DTAISHA,
L.CMNUSER, L.DMNDATE,
DECODE(J.CSHAINNO, NULL, NULL, '済') NJINJIFLG,
A.NQYOCALCFLG,
ROW_NUMBER() OVER(PARTITION BY A.CSHAINNO ORDER BY L.DMNDATE DESC) RID
FROM XKKIHON A
LEFT JOIN (
SELECT CSHAINNO FROM DJND7500LOG
WHERE CCOMPKB = 入力パラメータ「会社区分」
AND CTEIINKB = 入力パラメータ「定員区分」
GROUP BY CSHAINNO
) J
ON J.CSHAINNO = A.CSHAINNO
LEFT JOIN UCLR1000LOG L
ON L.CCOMPKB = A.CCOMPKB
AND L.CSHAINNO = A.CSHAINNO
AND L.DTAISHA = A.DTAISHA
WHERE
A.CCOMPKB = 入力パラメータ「会社区分」
AND A.CQTAIKEIKB = 入力パラメータ「体系区分」
AND A.DGAITONG = 入力パラメータ「該当年月」
AND A.NQSHOYOKB = 入力パラメータ「給与賞与区分」
AND A.NQSHOYOSEQ = 0
AND A.DTAISHA >= 入力パラメータ「開始退職年月日」
AND A.DTAISHA <= 入力パラメータ「終了退職年月日」
AND (
(入力パラメータ「定員区分」='1' AND A.CTEIINKB = '1')
OR (入力パラメータ「定員区分」<>'1' AND A.CTEIINKB <> '1')
)
)
WHERE RID = 1
```
## 2. 業務位置づけ
- 機能 ID: QCL00030 退職後一括更新(給与)
- 用途: 「退職後一括更新」実行画面の一覧グリッド表示用 SELECT
- 入力: 会社区分 / 体系区分 / 該当年月 / 給与賞与区分 / 定員区分 / 開始退職年月日 / 終了退職年月日
- 出力: 当該会社/処理月の退職者一覧(職員番号/氏名/部局/退職日/更新者/更新日時/人事クリア済フラグ/給与計算フラグ)
- 後続: 一覧確認後にユーザが「一括更新実行」押下 → 03_給与一括更新実行SQL が本一覧の CSHAINNO 群に対して走る
## 3. 結合 3 表の物理構造
| エイリアス | 物理表 | 行粒度 | 主役役割 |
|---|---|---|---|
| A | XKKIHON | 社員×処理月×給与賞与 | 退職者抽出の母集団 |
| J | DJND7500LOG | 社員単位(GROUP BY 済) | 人事クリア済フラグ生成源 |
| L | UCLR1000LOG | 社員×処理月×退職日 | 給与クリア実行の最新履歴(操作者/日時)|
### XKKIHON(情報スキーマ実測 2026-08-20)
- NOT NULL: ccompkb(2), cqtaikeikb(2), dgaitong(date), nqshoyokb, nqshoyoseq, cshainno(10)
- dtaisha(date) は NULLABLE — 同処理月内に同社員の複数 dtaisha 存在を許容
- cteiinkb(varchar 10) — 他表は varchar(1) だが比較上は問題なし
### DJND7500LOG(情報スキーマ実測)
- ヘッダ 3 列 NOT NULL: ccompkb, cteiinkb, cshainno
- cnameknj / bkyk_cde / bkyk_nme は冗長表示用(NULLABLE)
- tsyk_dte / dtsyk_dte 等の他カラムは本 SQL では未参照
- nclearflg01〜40: 人事系クリア対象 40 槽位フラグ
### UCLR1000LOG(情報スキーマ実測)
- ヘッダ 4 列 NOT NULL: ccompkb, cqtaikeikb, cteiinkb, cshainno
- dtaisha(date) NULLABLE
- nclearflg_s01〜s40: 給与支給 40 槽位、nclearflg_k01〜k40: 給与控除 40 槽位(合計 80 槽位五花)
- njinjiflg は存在するが本 SQL では参照しない(L.CMNUSER/L.DMNDATE のみ使用)
## 4. SELECT 各列の意味
| 列 | 物理列 | 業務 semantic |
|---|---|---|
| CSHAINNO | A.CSHAINNO | 一覧キー(後続更新SQL の絞り込みキー)|
| CNAMEKNJ | A.CNAMEKNJ | 表示用氏名 |
| BKYK_CDE | A.BKYK_CDE | 表示用部局コード |
| BKYK_NME | A.BKYK_NME | 表示用部局名称 |
| DTAISHA | A.DTAISHA | 退職年月日 — 期間絞り込み対象 |
| CMNUSER | L.CMNUSER | 給与クリア実行の最終操作者 |
| DMNDATE | L.DMNDATE | 給与クリア実行の最終操作日時 |
| NJINJIFLG | DECODE(J.CSHAINNO, NULL, NULL, '済') | 人事クリア済フラグ(後述)|
| NQYOCALCFLG | A.NQYOCALCFLG | 給与計算フラグ(給与計算実行済か)|
## 5. NJINJIFLG(DECODE)の意味
```sql
DECODE(J.CSHAINNO, NULL, NULL, '済') NJINJIFLG
```
- 副問合せ J は DJND7500LOG の存在チェック専用 — CSHAINNO 列だけを GROUP BY で取る
- J.CSHAINNO = NULL → 人事クリア未実行 → 出力 NULL
- J.CSHAINNO に値あり → 人事クリア実行済 → 出力 '済'
- 一覧画面で「済」表示行はグレーアウト → 二重クリア防止 UI
- DECODE は Oracle 関数。本番 Oracle 想定、CI 検証時は PostgreSQL
## 6. ROW_NUMBER() による一意化
```sql
ROW_NUMBER() OVER(PARTITION BY A.CSHAINNO ORDER BY L.DMNDATE DESC) RID
WHERE RID = 1
```
- UCLR1000LOG は同社員で複数回クリア実行履歴が残り得る(再退職処理/修正実行)
- 1 社員に対して複数行が JOIN されるのを防ぐため、最新 DMNDATE 行のみ採用
- xkkihon.dtaisha が NULLABLE な点とも整合(同処理月内の同社員複数 dtaisha は RID=1 で代表 1 行に集約)
## 7. WHERE 句 9 条件の意味
| # | 条件 | 業務 semantic |
|---|---|---|
| 1 | A.CCOMPKB = 会社区分 | 会社ロック(ログイン所属会社)|
| 2 | A.CQTAIKEIKB = 体系区分 | 給与体系(一般/再任用/特地等)固定絞り込み |
| 3 | A.DGAITONG = 該当年月 | 退職処理を行う処理月(月末日) |
| 4 | A.NQSHOYOKB = 給与賞与区分 | 0=給与、1=賞与 |
| 5 | A.NQSHOYOSEQ = 0 | 通常明細のみ。賞与明細(1〜n)は退職処理対象外 |
| 6 | A.DTAISHA BETWEEN 開始/終了 | 画面で指定した退職日範囲内のみ抽出 |
| 7 | 定員区分 OR 条件 | 一般職/一般以外 の母集団切替(次節)|
## 8. 定員区分 OR 条件 — 設計の核
```sql
AND (
(入力パラメータ「定員区分」='1' AND A.CTEIINKB = '1')
OR (入力パラメータ「定員区分」<>'1' AND A.CTEIINKB <> '1')
)
```
- 定員区分='1' = **一般職員** → cteiinkb='1' のみ抽出
- 定員区分<>'1' = **一般以外**(再任用/特地/嘱託等)→ cteiinkb<>'1' を抽出
- 業務 background: 一般職 と 一般以外で 退職後の社会保険/住民税/共済等の継続/停止が異なるため、一括更新バッチを分けて流す必要がある
- 画面では「一般職一括更新」「一般以外一括更新」を別ボタンで起動する設計
## 9. 全体処理フロー(01〜04 接続)
```
[01_対象項目取得] UCLR1000MST → クリア対象項目マスタ(40 槽位)
↓ ccompkb, cteiinkb 共通
[02_対象職員一覧] XKKIHON + DJND7500LOG + UCLR1000LOG ← 本 SQL
↓ cshainno 群
[03_一括更新実行] UCLR1000LOG に INSERT(実行履歴) + xkkihon の各項目を CLEAR(NULL 化)
↓ 槽位一致
[04_クリア対象項目] UCLR1000MST × UCLR1000LOG × xkkihon → クリア実行
```
## 10. 補足事項
- DECODE / ROW_NUMBER / 副問合せ 等は Oracle 方言。本番は Oracle、CI は PostgreSQL(updsv7_opho_ci)で動作確認
- ORDER BY なし — 一覧表示順は画面/MyBatis 側の default-sort で制御する設計
- LIMIT/OFFSET なし — 一覧表示件数の paging は呼び側責務
- DJND7500LOG 副問合せは CSHAINNO のみ取得 — 槽位フラグ(nclearflg01〜40)は本 SQL では判定材料にしない(「存在するか」だけ)
@@ -0,0 +1,212 @@
# 画面設計書 QYO00070 基準情報登録 — 画面更新 → qinp1020 → xkkijun 業務解析
## Description
- 画面:QYO00070 基準情報登録
- 业务语义:画面から給与計算基準情報(xkkijun 系列)の各项目値を変更した際、qinp1020 を経由して状態 machine で反映する2 段 commit パターン
- 該当 SQL:INSERT 1 本 + UPDATE 1 本 (画面操作 1 回 = 2 クエリ)
- 関連表:
- qinp1020 (入力更新 状態 machine バッファ + 監査)
- xkkijun (本番基準表、qinp1020 経由で更新)
- 所属:UPDS-V7 給与システム
## Key Facts
- 画面 1 回更新で qinp1020 に 2 回アクセス (INSERT + UPDATE)
- INSERT は防重 + 履歴行作成、UPDATE は実 payload 書き込み + 状態 machine 9→3 巻き戻し
- 動的列 SET(「更新項目ID」=「項目値」)= xkkijun 200 槽位五花(ccode/cname/nnumber/ddate/nflag)のうち 1 列だけ書換
## SQL 1: INSERT (防重首行)
```sql
INSERT INTO QINP1020(
CCOMPKB,
CQTAIKEIKB,
DGAITONG,
CSHAINNO,
NMSGSHUB,
CMSG,
NMNFLG,
NMNDATASHUB,
NSTATEFLG,
CCOLUMNID,
DINSDATE,
NINSSEQ
)
SELECT
入力パラメータ「会社区分」,
'00',
入力パラメータ「該当年月」,
入力パラメータ「職員番号」,
0,
NULL,
0,
0,
9,
入力パラメータ「カラムID」,
SYSDATE,
0
FROM DUAL
WHERE
Not Exists(
SELECT 1 FROM QINP1020
WHERE
CCOMPKB = 入力パラメータ「会社区分」
and CQTAIKEIKB = 入力パラメータ「給与体系区分」
and DGAITONG = 入力パラメータ「該当年月」
and CSHAINNO = 入力パラメータ「職員番号」
and NMNFLG = 0
and NMSGSHUB < 9
and NSTATEFLG = 9
and CCOLUMNID = 入力參參名「カラムID」
);
```
### 業務読み取り
**HEAD PK (固定):**
- CCOMPKB = 会社区分(入力)
- CQTAIKEIKB = '00'(給与体系 = 00 固定 ハードコード)
- DGAITONG = 該当年月(入力)
- CSHAINNO = 職員番号(入力)
**初期値:**
- NMSGSHUB = 0 (メッセージ種別 = 正常)
- CMSG = NULL (メッセージなし)
- NMNFLG = 0 (更新フラグ OFF)
- NMNDATASHUB = 0 (データ種別 = INS = 新規)
- NSTATEFLG = 9 (★状態フラグ = 更新終了)
- CCOLUMNID = 対象カラムID
- DINSDATE = SYSDATE (初回登録日時)
- NINSSEQ = 0 (画面登録、取込ではない)
**Not Exists 防重条件:**
```
HEAD PK 一致 AND
NMNFLG = 0 -- 更新フラグ OFF
AND NMSGSHUB < 9 -- メッセージ種別 がエラー(9)以外
AND NSTATEFLG = 9 -- 既に「更新終了」状態
AND CCOLUMNID = 対象カラムID
```
→ 「同項目が既に"更新終了(NSTATEFLG=9)" + 正常(NMSGSHUB<9) で残ってたら INSERT しない」。
## SQL 2: UPDATE (状態巻き戻し + 実 payload)
```sql
UPDATE QINP1020
SET
CCOLUMNID = 入力パラメータ「カラムID」,
CCOLUMNNM = 入力パラメータ「項目名」,
入力パラメータ「更新項目ID」 = 入力パラメータ「項目値」,
CJTOQKB = 入力パラメータ「停止種別」,
CJTOQNM = 入力パラメータ「停止名称」,
NJTOQFLG = 入力パラメータ「停止フラグ」,
NMSGSHUB = 0,
CMSG = NULL,
NMNFLG = 0,
NMNDATASHUB = 1,
NSTATEFLG = 3,
CMNCLIENT = 入力パラメータ「端末ID」,
CMNCOMP = 入力パラメータ「会社区分」,
CMNUSER = 入力パラメータ「ログインユーザID」,
DMNDATE = SYSDATE
WHERE
CCOMPKB = 入力パラメータ「会社区分」
and CQTAIKEIKB = '00'
and DGAITONG = 入力パラメータ「該当年月」
and CSHAINNO = 入力パラメータ「職員番号」
and NMNFLG = 0
and NMSGSHUB < 9
and NSTATEFLG = 9
and CCOLUMNID = 入力パラメータ「カラムID」;
```
### 業務読み取り
**SET 内容分類:**
1. 識別情報 (4 列):
- CCOLUMNID = 対象カラムID (上書き確認)
- CCOLUMNNM = 項目名(冗長表示名)
2. **動的列 SET ★:**
- `入力パラメータ「更新項目ID」 = 入力パラメータ「項目値」`
- 「更新項目ID」が動的に変わる = 5 種(ccode/cname/nnumber/ddate/nflag) × 200 槽のうち 1 列だけ書換
- 例:「更新項目ID=ccode05」 → SET ccode05 = 'XX'
- 例:「更新項目ID=nflag12」 → SET nflag12 = 1
- 例:「更新項目ID=nnumber05」 → SET nnumber05 = 5000
3. 連携停止制御 (3 列、xkkijunctl 同型):
- CJTOQKB = 停止種別 (01:当月のみ / 02:当月以降)
- CJTOQNM = 停止名称
- NJTOQFLG = 停止フラグ (0:非停止 / 1:停止)
4. 状態 machine 遷移 ★:
- NMSGSHUB = 0 (メッセージ種別クリア → 正常化)
- CMSG = NULL (メッセージ内容クリア)
- NMNFLG = 0 (更新フラグ OFF)
- NMNDATASHUB = 1 (データ種別 = UPD = 上書き)
- NSTATEFLG = 3 (★ 9 → 3 巻き戻し = 「更新終了 → エラーチェック前」)
5. ログ列 (4 列):
- CMNCLIENT / CMNCOMP / CMNUSER / DMNDATE = 端末/会社/ユーザ/更新日時
**WHERE = SQL1 の Not Exists と同じ条件:**
```
HEAD PK + NMNFLG=0 + NMSGSHUB<9 + NSTATEFLG=9 + CCOLUMNID 一致
```
## 2 段構成の意図 (qinp1020 状態 machine 連動)
**qinp1020 状態値:**
- 0 = 取込後(取込完了、未チェック)
- 3 = エラーチェック前(これから検証する)
- 6 = エラーチェック後(検証済、反映待ち)
- 9 = 更新終了(xkkijun 反映完了)
**画面操作フロー:**
```
[画面: 项目値変更(例 ccode05='XX')]
↓
[STEP 1: INSERT]
HEAD PK + CCOLUMNID で NSTATEFLG=9 + 正常 の既存レコードが
無ければ 新規 INSERT (NMNDATASHUB=0=INS, NSTATEFLG=9=更新終了)
↓
[STEP 2: UPDATE]
既存 NSTATEFLG=9 レコードを
NSTATEFLG=3 (エラーチェック前) に巻き戻し
NMNDATASHUB=1 (UPD) に上書きモード
動的列(payload)のみ更新
ログ列書換
↓
[バッチ / 別プロセス]
NSTATEFLG=3 → 6 (エラーチェック通過)
NSTATEFLG=6 → xkkijun 本反映
NSTATEFLG=6 → 9 (更新終了)
```
**核心設計意図:**
1. **画面から xkkijun を直接 UPDATE しない。必ず qinp1020 経由**
2. **qinp1020 = 入力更新の監査/履歴 + 一時バッファ + 状態 machine 制御 の3 役同時**
3. **画面操作は 状態 machine を介さず 即「9 (更新終了)」 INSERT し、後で「9 → 3」巻き戻し**
4. **Not Exists で 同項目 重複登録 防止 (HEAD PK + CCOLUMNID + NSTATEFLG=9 + 正常)**
## 不明点 (私が SQL 全体から読めない部分)
1. **Step 1 で NSTATEFLG=9 を直接 INSERT する設計の意味** — 普通 INSERT 直後は 0 か 3。「9 を INSERT」は「画面操作は状態 machine を介さず即完了とみなす」という業務ルール?それとも Step 2 で 9→3 に巻き戻すことで「画面側で扱うには 9 が開始点」というマーカー?
2. **NMNFLG=0 の意味** — "0 で更新しない"という意味?それとも"画面更新モード"のフラグ?NMNFLG 列だけ意味が読み切れない
3. **NMNDATASHUB=0(INS) / 1(UPD) / 2(DEL) / 3(間接DEL)** のうち画面操作は INS(0) と UPD(1) しか使わない — DEL は batch 経由?
4. **NMSGSHUB < 9 の意味** — "メッセージ種別 が 9(エラー) 以外" = 「正常/警告レコードを巻き戻し対象にする、エラー状態のレコードは触らない」
5. **UPDATE の WHERE に NMNDATASHUB の条件が無い** — UPD(1) で前回更新された行でも問答無用で NSTATEFLG=3 巻き戻し。何度も画面更新すると毎回 9→3 に戻る → NMNDATASHUB=0 が永久に増えない。履歴用途なら NMNDATASHUB=0 だけの初期 INSERT が"原本"でその後毎回 1=UPD がカウントされるが、NMNDATASHUB のカウントがどこで使われるか不明。
## Relations
- 上位システム:UPDS-V7 給与システム
- 画面:QYO00070 基準情報登録
- 入力バッファ:qinp1020 (画面 → qinp1020 → xkkijun の中継 + 状態 machine)
- 本番基準:xkkijun (200 槽位五花)
- 連携停止制御:xkkijunctl (qinp1020 に cjtoqkb/cjtoqnm/njtoqflg 3 列 同型組込)
- 同 PK 头部系列:xkkijunhw / xkkihon / xkkijunctl (CCOMPKB/CQTAIKEIKB/DGAITONG/CSHAINNO 同型)
@@ -0,0 +1,114 @@
# XKKIHON [基本]給与基本情報 — xlsx vs DB 対照
- xlsx: /mnt/d/25.テーブル一覧/10.テーブル定義/30.給与/xkkihon.xlsx
- DB: updsv7_opho_ci (192.168.1.72:5432) / public.xkkihon
- 改訂履歴: 7.0.0 新規作成 (2023-10-04 NSC) / 7.0.1 年末調整法改正_2025_例月計算(税扶養情報登録)対応 (2025-10-09 王琳) → 源泉控除対象親族)特親人数追加
## 1. 全体対数
| 区分 | 項目 | 値 |
|---|---|---|
| 列数 | xlsx | 287 |
| 列数 | DB | 288 |
| 列差 | DB のみ | +1 列(ccalcuser)|
| 列差 | xlsx のみ | 0 |
## 2. 主キー(DB 実測 NOT NULL 6 列)
xlsx は F 列「制約」で「N」と書く運用だが、PK 表記はなし。同型 PK 头部 6 列は他表(xkkijun, xkkijunhw 等)と共通。
| # | カラムID | xlsx型 | xlsx桁 | xlsx制約 | DB型 | DB桁 | DB NOT NULL | DB DEFAULT |
|---|---|---|---|---|---|---|---|---|
| 1 | ccompkb | varchar | 2 | N | varchar | 2 | YES | - |
| 2 | cqtaikeikb | varchar | 2 | N | varchar | 2 | YES | - |
| 3 | dgaitong | date | - | N | date | - | YES | - |
| 4 | nqshoyokb | numeric | 1 | N | numeric | 1,0 | YES | 0 |
| 5 | nqshoyoseq | numeric | 1 | N | numeric | 1,0 | YES | 0 |
| 6 | cshainno | varchar | 10 | N | varchar | 10 | YES | - |
## 3. DB のみ存在列(1 件)
| # | カラムID | 型 | 桁 | NOT NULL | DEFAULT | 想定位置 | 改訂履歴記載 |
|---|---|---|---|---|---|---|---|
| 288 | ccalcuser | varchar | 20 | NO | - | xlsx No.286 直後(kyosai_nme の次、ntokuszk の前)| なし |
→ xlsx 7.0.1 改訂(ntokuszk 追加)時に ccalcuser も同時追加されたが、xlsx 側に記載漏れ。軽微な文書不整合。DB 側に存在するため本番動作には影響なし。
## 4. 28 件の「表現差」(データ差ではない)
xlsx が小数桁付き numeric を「全桁,小数桁」と書く表記形式 vs DB の information_schema が全桁のみ返す違い。**データ定義上一致**:
| xlsx No | カラムID | xlsx桁 | DB桁 | DB scale | 判定 |
|---|---|---|---|---|---|
| 48 | nszeiritu | 6,3 | 6 | 3 | 一致 |
| 129 | ntanka | 12,4 | 12 | 4 | 一致 |
| 161 | hkts_tysi_num | 7,2 | 7 | 2 | 一致 |
| 162 | tysi_num_gen | 7,2 | 7 | 2 | 一致 |
| 164 | tysisum_num | 4,2 | 4 | 2 | 一致 |
| 165 | cho_siky_ritu | 8,2 | 8 | 2 | 一致 |
| 188 | tsta_skr | 8,2 | 8 | 2 | 一致 |
| 191 | skyust_tanka | 6 | 8 | 0 | **不一致**(DB全桁 8 / xlsx桁 6)|
| 231 | skyust_tanka2 | 6 | 8 | 0 | **不一致**(DB全桁 8 / xlsx桁 6)|
| 240-244 | nyobi01〜05 | 12,4 | 12 | 4 | 一致 |
| 250 | koiki_ritu | 5,2 | 5 | 2 | 一致 |
| 253 | nikujitanjikan | 7,2 | 7 | 2 | 一致 |
| 254 | nsyoteijikan | 7,2 | 7 | 2 | 一致 |
| 265 | saininyo_kinmu | 7,2 | 7 | 2 | 一致 |
| 266 | saininyo_syotei | 7,2 | 7 | 2 | 一致 |
| 138 | knmei_cde | 1 | (無制限) | - | 一致(xlsx の桁 1 は設計最大長)|
| 140 | syksy_cde | 5 | (無制限) | - | 一致 |
| 142 | yosan_cde | 2 | (無制限) | - | 一致 |
| 147 | kei_cde | 1 | (無制限) | - | 一致 |
| 149 | kkrkoza_cde | 6 | (無制限) | - | 一致 |
| 159 | hktys_yosan_cde | 6 | (無制限) | - | 一致 |
| 179 | hjksyk_misy_cde | 3 | (無制限) | - | 一致 |
| 181 | hjksyk_kih_cde | 2 | (無制限) | - | 一致 |
| 277 | rowid | int8 | bigint | 0 | 表記差(PostgreSQL: int8 ≡ bigint)|
真の不一致:
- **skyust_tanka** (No.191) xlsx桁 6 / DB全桁 8 — データ規模注意
- **skyust_tanka2** (No.231) xlsx桁 6 / DB全桁 8 — 同上
## 5. 業務カテゴリ別 列分布(288 列構成)
| カテゴリ | 列数(代表)| 概要 |
|---|---|---|
| ヘッダ業務識別 | 6 | PK 头部 ccompkb/cqtaikeikb/dgaitong/nqshoyokb/nqshoyoseq/cshainno |
| 更新ログ | 4 | cmnclient/cmncomp/cmnuser/dmndate |
| 個人情報 | 5 | cnamekna/cnameknj/cseibetukb/cseibetunm/dbirth |
| 入退情報 | 11 | 入社/退職/休職関連 |
| 所属・住所 | 15+ | 部局コード/名称、住所、郵便番号 |
| 給与計算制御フラグ | 6+ | nqyocalcflg/nsyocalcflg/nnencalcflg/ngensenflg/nszeicalcflg/ncalckb/ncalckb2 |
| 扶養・配偶者 | 17 | nhonshogip/tk/otto/misei/ronen/kafuf/kafut/kafum/kinro/dead/saig/gaijin, nhaigusha, nkojohaigu/ro |
| 社会保険(労災/雇用/社保/介護)| 40+ | crousai*/ckoyou*/cshaho*/ckenpo*/ckplost*/ckgmenjyo* |
| 年金(厚生年金/国民年金)| 25+ | cknnenkinno/cknseirino/dnenkine/cknlost*/cnknenkinno/dkikine/cnklost*/cksnenkinno/dchokie/ccklost* |
| 税(住民税/所得税)| 30+ | cjzeiadr*/cjzeibnck*/cjzeisitei/cjzeikojin/njzei*/njzeikai*/djzeikaitei/cgensen*/ngensenflg/ckplost*/ctankino/ctklost*/ckkgmenjyo*/cchokino |
| 共済 | 30+ | ckyosai*/nkyosai*/nkyo*/nkyosaibutu*/ckyosai_ktti*/nkyoprevflg/kyosai*/ckyosai_ktti*_nk |
| 雇用保険 | 5 | ckoyou*/dkoyous/dkoyoue |
| 通勤 | 6 | cshurou*/nshurouflg/ntanka |
| 業務・所属項目 | 30+ | nnmn*/kmkbn*/k_skin*/kkn*/knmei*/syksy*/yosan*/bkyk*/sort_jyn/kei*/kkrkoza*/hkyh*/kyu/goho |
| 給与計算基準連携 | 13 | nxt_syky_dte/hktys_siky*/hktys_yosan*/hkts_tysi_num/tysi_num_gen/add/sum/cho_siky_ritu/tysi_num_kei |
| 労働組合 | 8 | kumiai_no/kumi_sositu_dte/dkumi_sositu_dte/kyu_kn_nme/kyu_kj_nme/nme_prt_flg |
| 非常勤関連 | 20+ | hjksyk_* 多数 |
| 育児・介護関連 | 18 | ctankino/dtabkie/dkyokaigos/e/ckkgmenjyokb/ckkgmenjyonm/cksnenkinno/ccklostkb/ccklostnm/cchokino/dchokis/e |
| 予備・拡張 | 15 | cyobi01-05/nyobi01-05/dyobi01-05 |
| 各種制御フラグ | 25+ | cmeisaikb/cszeijgkb/project_cde/csiharaikb/ngakunaih_tanka*/skyust_tanka2/koiki_ritu/nikujitanflg/nsyoteijikan/dikujitans/e/nshastophonflg/cseirino/saininyo*/cnenpo*/dincentive/nincentive*/nhikyojyu |
| 年末調整関連(7.0.1 追加)| 2 | ccalcuser/ntokuszk |
| 代理キー | 1 | rowid bigint (NOT NULL, DEFAULT nextval) |
## 6. 構造的特徴
- **「社員×処理月」スナップショット表** — dtaisha(退職年月日)は PK 外の NULLABLE → 同処理月内に複数 dtaisha の同社員が存在し得る(再入職/異動)
- **200槽位五花拡張は無し** — 個別項目ごとに物理カラム化(nsikyu01, nkojyoXX 等の五花槽ではなく、業務項目ごとに独立カラム: nszeiritu, nfuyoippan, ntanka 等)
- 対比: xkkijun は 200槽位五花(ccode01..200 / cname01..200 / nnumber01..200 / ddate01..200 / nflag01..200 = 1000 業務列)の汎用基準表。xkkihon は項目ごとの物理カラム化の特化型
- **同型 PK 構造**: xkkijun, xkkijunhw, xkkijunhwn, xkkihon 等 UPDS-V7 給与系は PK 头部 6 列 (ccompkb, cqtaikeikb, dgaitong, nqshoyokb, nqshoyoseq, cshainno) で統一
## 7. 結論
- 列定義(列名・型・桁・NOT NULL)は概ね一致(286/287 = 99.7%)
- DB のみ `ccalcuser` 1 列あり(軽微な xlsx 記載漏れ)
- 真の桁数不一致: `skyust_tanka` (No.191) と `skyust_tanka2` (No.231) で xlsx桁 6 / DB桁 8 — 要確認(DB側が大きい=安全側なので本番影響なし)
- 致命的差分なし
- 要確認 2件:
1. `ccalcuser` の用途(改訂履歴 7.0.1 に記載なし、xlsx にも記載なし)
2. `skyust_tanka` / `skyust_tanka2` の桁数設計根拠(DB 8 桁 vs xlsx 6 桁)
@@ -0,0 +1,97 @@
# qinp1020 給与計算基準情報 取込状態フラグ
## Description
- 物理表名:qinp1020
- テーブル名称:[入力]給与計算基準情報 更新)状態フラグについて
- 业务语义:給与計算基準情報 (xkkijun 系) への入力更新処理过程中的状態/メッセージ/更新内容を一時保持する取り込みログ + 状態フラグ表
- 状態フラグ値:
- 0:取込後
- 3:エラーチェック前
- 6:エラチェックック後
- 9:更新終了
- 所属:UPDS-V7 給与システム
- 所在库:updsv7_opho_ci(192.168.1.72:5432,CI 环境)
- 設計書:D:\25.テーブル一覧\10.テーブル定義\30.給与\qinp1020.xlsx
## Key Facts (实测 2026-08-19 information_schema)
- 物理列数:26 (含 rowid)
- 行数(CI):0 (空表) / 表 0 bytes / 索引 24 kB / 总 24 kB
- 主键 UNIQUE:**なし** (DB 仅有 qinp1020_rowid_key UNIQUE(rowid) 1 个)
- 派生表(public schema):qinp1020 のみ(_old/_hw/_hwn/_j 等同名派生未確認)
## 列構造 (DB 26 列, xlsx 26 行, 列名/順序/型/精度 完全一致)
| No. | カラム名称 | 物理名 | データ型 | 桁数 | NotNull | DEFAULT | xlsx 索引 | 備考 |
|-----|-----------|--------|---------|------|---------|---------|----------|------|
| 1 | 会社区分 | ccompkb | varchar | 2 | N | -- | 2 | |
| 2 | 給与体系区分 | cqtaikeikb | varchar | 2 | N | -- | 3 | xlsx:00 固定 |
| 3 | 該当年月 | dgaitong | date | -- | N | -- | 5 | 処理月(月末日) |
| 4 | 社員番号 | cshainno | varchar | 10 | N | -- | 4 | |
| 5 | メッセージ)種別 | nmsgshub | numeric | 1 | -- | 0 | -- | 0:OK, 1:警告, 9:エラー |
| 6 | メッセージ)内容 | cmsg | varchar | 100 | -- | -- | -- | |
| 7 | 更新)フラグ | nmnflg | numeric | 1 | -- | 0 | 6 | |
| 8 | 更新)データ種別 | nmndatashub | numeric | 1 | -- | 0 | -- | 0:INS, 1:UPD, 2:DEL, 3:間接DEL |
| 9 | 更新)状態フラグ | nstateflg | numeric | 1 | -- | 0 | 2 | 0/3/6/9 (上参照) |
| 10 | 初回登録)日時 | dinsdate | timestamp | -- | -- | -- | -- | DB 実 timestamp(0) |
| 11 | 初回登録)取込SEQ | ninsseq | numeric | 8 | -- | 0 | -- | 0:画面登録, 1~99999999:取込 |
| 12 | 更新ユーザ)端末ID | cmnclient | varchar | 10 | -- | -- | -- | |
| 13 | 更新ユーザ)会社区分 | cmncomp | varchar | 2 | -- | -- | -- | |
| 14 | 更新ユーザ)ユーザID | cmnuser | varchar | 10 | -- | -- | -- | |
| 15 | 更新ユーザ)更新日時 | dmndate | timestamp | -- | -- | -- | -- | DB 実 timestamp(0) |
| 16 | 更新先)カラムID | ccolumnid | varchar | 20 | -- | -- | 1 | 連携停止対象 カラムID |
| 17 | 更新先)項目名 | ccolumnnm | varchar | 30 | -- | -- | -- | 冗余表示用 |
| 18 | 更新内容)区分 | ccode | varchar | 10 | -- | -- | -- | |
| 19 | 更新内容)名称 | cname | varchar | 100 | -- | -- | -- | |
| 20 | 更新内容)数値 | nnumber | numeric | 12,4 | -- | 0 | -- | |
| 21 | 更新内容)日付 | ddate | date | -- | -- | -- | -- | |
| 22 | 更新内容)フラグ | nflag | numeric | 1 | -- | 0 | -- | |
| 23 | 連携更新停止)種別 | cjtoqkb | varchar | 2 | -- | -- | -- | 01:当月のみ, 02:当月以降 |
| 24 | 連携更新停止)名称 | cjtoqnm | varchar | 20 | -- | -- | -- | |
| 25 | 連携更新停止)フラグ | njtoqflg | numeric | 1 | -- | 0 | -- | 0:非停止, 1:停止 |
| 26 | (代理鍵) | rowid | int8(bigint) | -- | N | nextval | 1 | seq |
## xlsx 索引序号 → DB 列
- 1 → ccolumnid (行 16) / rowid (行 26) ← xlsx 在 16, 26 行都标 1,疑似序号冲突
- 2 → nstateflg (行 9)
- 3 → cqtaikeikb (行 2)
- 4 → cshainno (行 4)
- 5 → dgaitong (行 3)
- 6 → nmnflg (行 7)
## 業務 semantic(初推断,未确认)
- 給与計算基準(xkkijun) 系列への**画面登録 or 取込処理过程中**の"未確定状態"を保持する一時表
- 処理流程:
```
画面登録 (ninsseq=0):
INSERT INTO qinp1020 (ccompkb, cqtaikeikb, dgaitong, cshainno,
ccolumnid, ccode/cname/nnumber/ddate/nflag,
nstateflg=0 [取込後])
取込 (ninsseq=1~99999999):
外部CSV/IF 取込 → 一旦 nstateflg=0 (取込後)
→ 3 (エラーチェック前) で各種 validation
→ 6 (エラーチェック後) で xkkijun へ本反映準備
→ 9 (更新終了) で xkkijun 反映完了
```
- 4 種 status flag = 給与更新 batch の workflow 状態機械
- 列 18~22 (ccode/cname/nnumber/ddate/nflag) = xkkijun 200 槽位五花形**之一行分**の単項目持値
- 列 23~25 (cjtoqkb/cjtoqnm/njtoqflg) = xkkijunctl 同型 連携停止制御情報
## DB vs xlsx 差异点
| # | DB | xlsx | 差异 |
|---|----|------|------|
| 1 | 没有業務 PK UNIQUE 索引 | 索引序号 1~6 列 | xlsx 序号仅表达"业务检索列",DB 一个 UNIQUE 都没建 |
| 2 | 8 列 DEFAULT 0 (nmsgshub/nmnflg/nmndatashub/nstateflg/ninsseq/nnumber/nflag/njtoqflg) | xlsx 初期値空 | DB 内部默认值补充,空表导入时自动填 0 |
| 3 | dinsdate / dmndate timestamp(0) | timestamp (無精度) | DB 标精度,xlsx 未标 |
| 4 | nnumber numeric(12,4) DEFAULT 0 | numeric(12,4) | 桁数一致,DB 加 DEFAULT |
| 5 | rowid bigint DEFAULT nextval('rowid_seq') | int8 (代理鍵) | ✓ xlsx 写 int8 = PG bigint |
| 6 | 0 行 (空表) | 設計書のみ | 実体空表,数据待投入 |
| 7 | xlsx 第 16, 26 行 索引序号都标 1 | 第 16, 26 行 | 疑似序号冲突,DB 未按此建 UNIQUE 索引 |
## Relations
- 上位システム:UPDS-V7 給与システム
- 関連表: xkkijun (本番基準表, qinp1020 の更新反映先)
- 関連表: xkkijunctl (連携停止制御, qinp1020 に cjtoqkb/cjtoqnm/njtoqflg 3 列 同型存在)
- PK 头部 4 列 (ccompkb, cqtaikeikb, dgaitong, cshainno) は xkkijun / xkkijunhw / xkkihon / xkkijunctl と同型
@@ -0,0 +1,57 @@
# uclr1000mst 退職後一括更新項目マスタ(給与) — xlsx vs DB 対照
- xlsx: /mnt/d/25.テーブル一覧/10.テーブル定義/30.給与/uclr1000mst.xlsx
- DB: updsv7_opho_ci (192.168.1.72:5432) / public.uclr1000mst
- 改訂履歴: 7.0.0 新規作成 (2023-10-04 NSC) / 7.1.0 カラム「退職時クリア予備項目」を追加 (2024-01-06 王琳)
## 1. カラム対照
| No | カラム名称 | カラムID | xlsx型 | xlsx桁 | xlsx制約 | DB型 | DB桁 | DB NOT NULL | 一致 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 会社区分 | ccompkb | varchar | 2 | N | varchar | 2 | YES | ✓ |
| 2 | 定員区分 | cteiinkb | varchar | 1 | N | varchar | 1 | YES | ✓ |
| 3 | 支給控除区分 | nsiqkojokb | numeric | 1 | N | numeric | 1,0 | YES | ✓ |
| 4 | SEQ | nseq | numeric | 2 | N | numeric | 2,0 | YES | ✓ |
| 5 | クリア項目名称 | ckomokunm | varchar | 100 | (空) | varchar | 100 | NO | ✓ |
| 6 | クリアフラグ | nclearflg | numeric | 1 | (空) | numeric | 1,0 | NO | ✓ |
| 7 | プログラム識別 | cpgmid | varchar | 20 | (空) | varchar | 20 | NO | ✓ |
| 8 | 支給控除額カラムID | cgakucol | varchar | 30 | (空) | varchar | 30 | NO | ✓ |
| 9 | 更新ユーザ)端末ID | cmnclient | varchar | 10 | (空) | varchar | 10 | NO | ✓ |
| 10 | 更新ユー�゙)会社区分 | cmncomp | varchar | 2 | (空) | varchar | 2 | NO | ✓ |
| 11 | 更新ユーザ)ユーザID | cmnuser | varchar | 10 | (空) | varchar | 10 | NO | ✓ |
| 12 | 更新ユーザ)更新日時 | dmndate | timestamp | - | (空) | timestamp | - | NO | ✓ |
| 13 | 退職時クリア予備項目 | cclearcol | varchar | 2000 | (空) | varchar | 2000 | NO | ✓ |
- 列数: xlsx 13 / DB 13 — 一致
- 列名: 全列一致(半角カナ `ユーザ` を xlsx も DB も採用、`支給控除額カラムID` は xlsx 全角ID/DB 列ID は cgakucol で問題なし)
- NOT NULL: xlsx 「N」4列 と DB の `is_nullable=NO` 4列 (ccompkb/cteiinkb/nsiqkojokb/nseq) が一致
- NULL 可: xlsx 「制約」空欄 9列 と DB `is_nullable=YES` 9列 が一致
- dmndate: xlsx timestamp(桁数列なし)/DB timestamp without time zone
## 2. キー・索引
- PRIMARY KEY: DB 上は明示的 PK 制約なし、xlsx 上も PK 表記なし
- NOT NULL 4列(ccompkb / cteiinkb / nsiqkojokb / nseq)が事実上の複合主キー
- ⇒ 要確認:xlsx F列で「N」と書く運用が本表の PK 表現なのか、同ディレクトリの他 mst 表の PK 表記ルールと合わせるか
- INDEX: DB に明示的 INDEX なし、xlsx H列「インデックス」全空 — 一致
## 3. 実データ
- 行数: 約70行
- 主キー4項目の現在値のレンジ: ccompkb='01' / cteiinkb='1' / nsiqkojokb='0' / nseq=1..N
- サンプル(先頭5件):
| ccompkb | cteiinkb | nsiqkojokb | nseq | ckomokunm | nclearflg | cpgmid | cgakucol |
|---|---|---|---|---|---|---|---|
| 01 | 1 | 0 | 1 | 基本情報-俸給の調整額 | 1 | UCLR1000_HOKYU | NSIKYU35 |
| 01 | 1 | 0 | 2 | 基本情報-義務教育手当 | 1 | UCLR1000_GIMUTOKU | NSIKYU41 |
| 01 | 1 | 0 | 3 | 基本情報-教職調整額 | 1 | UCLR1000_KYOSHOKU | NSIKYU42 |
| 01 | 1 | 0 | 4 | 基本情報-俸給の特別調整額 | 1 | UCLR1000_TOKUBETU | NSIKYU34 |
| 01 | 1 | 0 | 5 | 基本情報-地域手当 | 1 | UCLR1000_TIIKI | NSIKYU02 |
## 4. 結論
- 列定義(列名・型・桁・NOT NULL)は xlsx と DB で完全一致
- 改訂履歴 7.1.0 で追加された `退職時クリア予備項目` (cclearcol, varchar(2000)) も DB に存在
- 致命的な不一致なし
- 要確認 1件:複合主キーの xlsx 上での表記ルール(同ディレクトリ他 mst 表との整合)
@@ -0,0 +1,78 @@
# xckijun 表
## Description
- 物理表名:xckijun
- 業務名称:[コントロール]給与計算基準項目定義
- 业务语义:給与計算基準項目(xkkijun 系列 200 槽位五花)の**項目定義**を保持する control 表
- xkkijun 系列的"动态列名 + 数据槽"模式(ccode01..ccode200 / cname01..cname200 ...)的元信息
- 1 项目 = 1 行(項目種別 1:区分 / 2:名称 / 3:数値 / 4:日付 / 5:フラグ)
- 項目 No. 1~40(本部用 40 项,扩展槽位从 xkkijun 200 槽里挑)
- 所属项目:UPDS-V7 給与システム
- 所在库:updsv7_opho_ci(192.168.1.72:5432,CI 环境)
- 设计書:D:\\25.テーブル一覧\\10.テーブル定義\\30.給与\xckijun.xlsx(2026-08-19 user 提供)
## Key Facts (实测 2026-08-19 information_schema)
- 物理列数:23
- 主键 UNIQUE 索引:xckijun_idx(ccompkb, cqtaikeikb, nqshoyokb, dstart, nkomokukb, nkomokuno)
- 唯一索引:xckijun_rowid_key UNIQUE(rowid)
- 业务角色:control / 項目メタデータ(不是业务数据本身)
- 与 xkkijun 关系:控制表 → 数据表(定义 xkkijun 动态列的语义)
- 与 xkkijunctl 区别:xkkijunctl = 連携停止控制(15 列扁平);xckijun = 項目定义控制(23 列含动态列语义)
## 列结构(实测已确认)
(A) 头部业务标识 5 列,全部 NOT NULL:
1. ccompkb varchar(2) -- 会社区分
2. cqtaikeikb varchar(2) -- 給与体系区分(00 固定)
3. nqshoyokb numeric(1,0) -- 給与賞与区分
4. dstart date -- 適用開始年月(YYYY/MM/01)
5. dend date -- 適用終了年月(YYYY/MM/末日)
(C) 业务控制列(7 列):
10. nkomokukb numeric(1,0) NOT NULL -- 項目種別(1:区分,2:名称,3:数値,4:日付,5:フラグ)
11. nkomokuno numeric(3,0) NOT NULL -- 項目 No.(1~40)
12. ckomokunm varchar(30) -- 項目名称
13. ccolumnid varchar(20) -- 項目カラム ID(xkkijun 200 槽位对应列名如 ccode05)
14. nseisuu numeric(3,0) -- 最大桁数)整数部
15. nshosuu numeric(3,0) -- 最大桁数)小数部
16. cmtableid varchar(20) -- マスタ参照)テーブル ID(◆ 未使用 ◆)
17. cmtblwhere varchar(999) -- マスタ参照)テーブル表示条件(◆ 未使用 ◆)
(D) 预留标志列(5 列):
18-22. nflag01..nflag05 numeric(1,0) -- ◆ 未使用 ◆
(B) 日志 4 列:
6. cmnclient varchar(10) -- 更新ユーザ)端末ID
7. cmncomp varchar(2) -- 更新ユーザ)会社区分
8. cmnuser varchar(10) -- 更新ユーザ)ユーザID
9. dmndate timestamp(0) without timezone -- 更新日時
(E) 代理键:
23. rowid bigint NOT NULL DEFAULT nextval('rowid_seq'::regclass)
## DB vs xlsx 差异点 (7 处)
1. **PK UNIQUE 索引列顺序** — xlsx 序号 1~6 = `ccompkb, cqtaikeikb, dstart, nkomokukb, nkomokuno, nqshoyokb`;DB 实际 UNIQUE = `ccompkb, cqtaikeikb, nqshoyokb, dstart, nkomokukb, nkomokuno`。第 3 / 6 位 `dstart` 与 `nqshoyokb` 顺序颠倒。UNIQUE 索引不受顺序影响,但 WHERE 优化走索引时列顺序敏感。
3. **dmndate 精度** — xlsx 写 `timestamp`,DB 实际 `timestamp(0) without time zone`。PostgreSQL 默认 `timestamp` 就是 without time zone,所以 DB 类型准确,xlsx 缺精度标注。
4. **rowid 默认值** — xlsx 只写 `int8 N`,DB 实际有 `DEFAULT nextval('rowid_seq'::regclass)` 序列。
5. **cmtblwhere 长度 999** — xlsx 写 999,DB `varchar(999)`(PG 的 varchar(n) 长度限制语义:超长报错而非截断,与别的 DB 不同)。
6. **xckijun_rowid_key UNIQUE(rowid) 索引** — xlsx 完全没标,DB 存在。
7. **索引序号 vs DB ordinal_position** — xlsx 索引 #6 = `nqshoyokb`(注意 xlsx 把 `nqshoyokb` 标 6),DB ordinal_position 也是 3(因为 DB 列顺序是 `ccompkb, cqtaikeikb, nqshoyokb, dstart, dend, cmnclient, ...`)。xlsx 索引序号只是业务约定,不一定对应物理列位。
## Relations
- 上位系统:UPDS-V7 給与システム
- **控制 → 数据**:xckijun(項目定义)→ xkkijun(实际数据,200 槽位) — xckijun.ccolumnid = xkkijun 列名(如 `ccolumnid='ccode05'` 对应 `xkkijun.ccode05`)
- 同型头部 PK:与 xkkijun / xkkijunctl / xkkihon 头部 6 列同型(本表 5 列头部 + nkomokukb/nkomokuno 业务键)
- 同领域:qkijun / xkkijunctl / qinp1020 等同 給与基準 系列
## 同名易混(2026-08-19 实证)
- **xckijun** vs **xkkijun** 字形相近但**不同表**:
- xckijun:23 列 control / 項目定义(本表)
- xkkijun:1011 列 データ / 实际业务值(本日 resource 已独立存在)
- 关键区分点:xckijun 有 `nkomokukb` / `nkomokuno` / `ccolumnid` 三列,xkkijun 没有
- 反之,xkkijun 有 `ccode01..200` / `cname01..200` / `nnumber01..200` / `ddate01..200` / `nflag01..200` 1000 列,xckijun 没有
## 设计書元信息
- シート:改訂履歴(Ver 7.0.0,作成日 45203(=2023-10-01),作成者 NSC)
- シート:xckijun(No.1~23)
- 业务方备注:項目種別 1:区分,2:名称,3:数値,4:日付,5:フラグ(对应 xkkijun 五花)
@@ -0,0 +1,75 @@
# xcsql [�ントロール]SQL文テーブル — xlsx vs DB 対照
- xlsx: /mnt/d/25.テーブル一覧/10.テーブル定義/30.給与/xcsql.xlsx
- DB: updsv7_opho_ci (192.168.1.72:5432) / public.xcsql
- 改訂履歴: 7.0.0 新規作成 (2023-10-04 NSC) — 改訂なし
## 1. 全体対数
| 区分 | 項目 | 値 |
|---|---|---|
| 列数 | xlsx | 13 |
| 列数 | DB | 13 |
| 列差 | DB のみ | 0 |
| 列差 | xlsx のみ | 0 |
| 行数 | DB | 約871行 |
| 表サイズ | DB | 1120 kB |
| インデックス | xcsql_idx UNIQUE | (ccompkb, cqtaikeikb, dstart, cpgmid, nrunseq) |
## 2. 業務身份
- **UPDS-V7 の「SQL 集中管理表」** — 各機能プログラムが必要な SQL(UPDATE/INSERT/DELETE/SELECT)をプログラム内にハードコードせず、本表に格納
- プログラム実行時、cpgmid + nrunseq で該当 SQL を本表から取得 → 即時実行
- 用途:
- SQL の変更時にプログラム再コンパイル不要(表データ更新で対応)
- 業務ロジックを「コードに書く」「DB に書く」のハイブリッドパターン
- クライアントごとのカスタマイズ容易(同じ cpgmid に対し適用期間 dstart〜dend で複数バージョン保持)
## 3. カラム対照(13 列 全一致)
| No | カラム名 | カラムID | xlsx型 | xlsx桁 | xlsx制約 | DB型 | DB桁 | NOT NULL | xlsx idx | 用途 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 会社区分 | ccompkb | varchar | 2 | N | varchar | 2 | YES | 1 | PK候補 |
| 2 | 給与体系区分 | cqtaikeikb | varchar | 2 | N | varchar | 2 | YES | 3 | PK候補 |
| 3 | 適用開始年月 | dstart | date | - | N | date | - | YES | 4 | PK候補 (YYYY/MM/01固定) |
| 4 | 適用終了年月 | dend | date | - | N | date | - | YES | - | 末日固定(無期限は 2222/12/31) |
| 5 | 更新ユーザ)端末ID | cmnclient | varchar | 10 | - | varchar | 10 | NO | - | 更新ログ |
| 6 | 更新ユーザ)会社区分 | cmncomp | varchar | 2 | - | varchar | 2 | NO | - | 更新ログ |
| 7 | 更新ユーザ)ユーザID | cmnuser | varchar | 10 | - | varchar | 10 | NO | - | 更新ログ |
| 8 | 更新�ーザ)更新日時 | dmndate | timestamp | - | - | timestamp | - | NO | - | 更新ログ |
| 9 | プログラム識別 | cpgmid | varchar | 20 | N | varchar | 20 | YES | 2 | PK候補 (例: DJNC1020, UMMN0120, UCLR1000 等) |
| 10 | 実行SEQ | nrunseq | numeric | 4 | N | numeric | 4,0 | YES | 5 | PK候補 (同一プログラム内の実行順序) |
| 11 | SELECT文区分 | nselect | numeric | 1 | N | numeric | 1,0 | YES | - | 1=SELECT文(参照用)、0=それ以外(更新系) |
| 12 | SQL文 | csql | varchar | 4000 | - | varchar | 4000 | NO | - | **SQL本体**(MyBatis 動的バインド可)|
| 13 | 備考 | cbikou | varchar | 40 | - | varchar | 40 | NO | - | コメント用 |
## 4. 主キー
- UNIQUE INDEX: xcsql_idx (ccompkb, cqtaikeikb, dstart, cpgmid, nrunseq) — 5 列複合キー
- xlsx H列「インデックス」記載: ccompkb=1, cqtaikeikb=3, dstart=4, cpgmid=2, nrunseq=5, dend 空欄 → 5 列複合 UNIQUE として存在
- dend は NOT NULL だが PK 表記なし → 業務上 dend は「有効期限終端」で PK 判定に使われない(dstart のみ期間判定)
## 5. データ例(先頭 5 件)
| cpgmid | nrunseq | nselect | csql 抜粋 | cbikou |
|---|---|---|---|---|
| DJNC1020\|1 | 2620 | 0 | UPDATE DKIDO_DUMMY A SET CHECK_FLG = '8' WHERE A.WK_CLIENT_ID = #{XsClnt端末ID} | 異動入力論理チェック 常勤の厚友会加入脱退 |
| DJNC1020\|1 | 2630 | 0 | INSERT INTO DK_RONRI_CHK SELECT ... | 異動入力論理チェック 再任用以外の令和会加入脱退 |
| UMMN0120 | 20 | 0 | DELETE FROM UWLOADBANK WHERE CCOMPKB in ('00',#{Gs会社ID}) | 各種初期化処理 |
| UMMN0120 | 30 | 0 | DELETE FROM UWBANKSAI WHERE ... | 各種初期化処理 |
| UMMN0120 | 40 | 0 | DELETE FROM UWFURIKOMISAI WHERE ... | 各種初期化処理 |
## 6. 観察
- csql に MyBatis 動的バインド `#{Gs会社ID}` `#{XsClnt端末ID}` が含まれる → xcsql から読んだ SQL をさらに MyBatis が評価する二段構えの仕組み
- dstart='1899-12-31' / dend='2222-12-30' は「全期間有効」セマフォック値(UPDS-V7 全体標準)
- cpgmid に `|` 区切りでバージョン管理する場合あり(例: DJNC1020\|1 = DJNC1020 のバージョン 1)
- nrunseq は同一 cpgmid 内で SQL の実行順序を保証(例: 10, 20, 30, ... のように 10 刻み)
- nselect 区分により、参照系 SQL(一覧検索等)と更新系 SQL(INSERT/UPDATE/DELETE)を判別
## 7. 結論
- 列定義(列名・型・桁・NOT NULL)は xlsx と DB で完全一致
- PK 表記ルール: xlsx H列「インデックス」で複合 UNIQUE を 5 列複合と表現
- 致命的な不一致なし
- 要確認: xlsx F列「N」6列のうち dend は PK 表記なし → 業務上 dstart のみが期間判定に使われる設計
@@ -0,0 +1,56 @@
# xkkijun 給与計算基準情報
## Description
- 物理表名:xkkijun
- 業務名称:[基本]給与計算基準情報
- 业务语义:給与計算ための各項目の値を保持する(給与計算各項目的参考值)
- 所属: UPDS-V7 給与システム
- 所在库:updsv7_opho_ci(192.168.1.72:5432,CI 环境)
## Key Facts (实测 2026-08-19 information_schema)
- 物理列数:1011 = 6 头部 + 4 日志 + 1000 业务 + 1 rowid
- 行数(CI):50 / 表 128 kB / 索引 32 kB / 总 192 kB
- 主键 UNIQUE:xkkijun_idx(ccompkb, cqtaikeikb, dgaitong, nqshoyokb, nqshoyoseq, cshainno)
- 唯一索引:xkkijun_rowid_key UNIQUE(rowid)
## 列结构(实测已确认)
(A) 头部业务标识 6 列,全部 NOT NULL:
1. ccompkb varchar(2)
2. cqtaikeikb varchar(2)
3. dgaitong date -- 該当月(処理月),月末日
4. nqshoyokb numeric(1,0) DEFAULT 0
5. nqshoyoseq numeric(1,0) DEFAULT 0
6. cshainno varchar(10)
(B) 日志 4 列,全部 NULLABLE:
7. cmnclient varchar(10)
8. cmncomp varchar(2)
9. cmnuser varchar(10)
10. dmndate timestamp(0) -- 始终 timestamp,区别于 dgaitong 的 date
(C) 业务列 1000 列(5 类型 × 200),全部 NULLABLE:
- ccode01..ccode200 varchar(10) -- 代码
- cname01..cname200 varchar(100) -- 名称
- nnumber01..nnumber200 numeric(12,4) -- 数值
- ddate01..ddate200 date -- 日期
- nflag01..nflag200 numeric(1,0) DEFAULT 0 -- 0/1 标志 (唯一一档有 DEFAULT 0)
(D) 代理键:
- rowid bigint NOT NULL
## 衍生表(public schema,存在未读)
xkkijun / xkkijun_old / xkkijunctl / xkkijunhw / xkkijunhw_old / xkkijunhwj / xkkijunhwn / xkkijunhwn_old / xkkijunhwnj / xkkijunj
## Relations
- 同型 PK 结构:xkkihon(給与基本情報) — 两表头部 6 列 PK 形态相同
- 同期表系:xkkijunhw / xkkijunhwn(估计为履歴派生)
- 200 槽位"五花"特征:給与基準表 類,定义 200 个参数的 代码/名称/数值/日期/标志 槽
## 修正点 (vs 此前"推断型分布"版本)
- 此前 column 类型未标精度;本次已 information_schema 实测确认
- nqshoyokb / nqshoyoseq:numeric(1,0) DEFAULT 0(此前只写 numeric)
- ccode":varchar(10) / cname":varchar(100) / nnumber":numeric(12,4) / nflag":numeric(1,0) DEFAULT 0
- dmndate 是 timestamp(0),不是 date
- rowid 是 bigint NOT NULL(此前记 int8 UNIQUE 未标 NOT NULL)
- 索引大小:32 kB(此前记 64 kB 有出入)
@@ -0,0 +1,78 @@
# xkkijunctl 給与計算基準連携停止情報
## Description
- 物理表名:xkkijunctl
- テーブル名称:[基本]給与計算基準連携停止情報
- 业务语义:xkkijun(給与計算基準)の各項目に対して連携更新を停止する制御情報を保持する
- 所属:UPDS-V7 給与システム
- 所在库:updsv7_opho_ci(192.168.1.72:5432,CI 环境)
## Key Facts (实测 2026-08-19 information_schema)
- 物理列数:15 / 行数(CI):0 / 表 0 bytes / 索引 8 kB / 总 8 kB(空表)
- 主键 UNIQUE:xkkijunctl_idx(ccompkb, cqtaikeikb, dgaitong, cshainno, ctableid, ccolumnid)
- 設計書:D:\25.テーブル一覧\10.テーブル定義\30.給与\xkkijunctl.xlsx
## 列结构
| No. | カラム名称 | 物理名 | データ型 | 桁数 | NotNull | 初期値 | インデックス | 備考 |
|-----|-----------|--------|---------|------|---------|--------|------------|------|
| 1 | 会社区分 | ccompkb | varchar | 2 | N | -- | 2 | |
| 2 | 給与体系区分 | cqtaikeikb | varchar | 2 | N | -- | 3 | 00 固定 |
| 3 | 該当年月 | dgaitong | date | -- | N | -- | 6 | 処理月(月末日) |
| 4 | 社員番号 | cshainno | varchar | 10 | N | -- | 4 | |
| 5 | 更新ユーザ)端末ID | cmnclient | varchar | 10 | -- | -- | -- | ログ |
| 6 | 更新ユーザ)会社区分 | cmncomp | varchar | 2 | -- | -- | -- | ログ |
| 7 | 更新ユーザ)ユーザID | cmnuser | varchar | 10 | -- | -- | -- | ログ |
| 8 | 更新ユーザ)更新日時 | dmndate | timestamp | -- | -- | -- | -- | ログ(DB 実 timestamp(0)) |
| 9 | 更新先)テーブルID | ctableid | varchar | 20 | N | -- | 5 | 連携停止対象 テーブルID |
| 10 | 更新先)テーブル名 | ctablenm | varchar | 30 | -- | -- | -- | 冗余表示用 |
| 11 | 更新先)カラムID | ccolumnid | varchar | 20 | N | -- | 1 | 連携停止対象 カラムID |
| 12 | 更新先)項目名 | ccolumnnm | varchar | 30 | -- | -- | -- | 冗余表示用 |
| 13 | 連携更新停止)種別 | cjtoqkb | varchar | 2 | -- | -- | -- | 01:当月のみ, 02:当月以降 |
| 14 | 連携更新停止)名称 | cjtoqnm | varchar | 20 | -- | -- | -- | |
| 15 | 連携更新停止)フラグ | njtoqflg | numeric | 1 | -- | -- | -- | 0:非停止, 1:停止 (DB 実 numeric(1,0)) |
## 業務シナリオ(2026-08-19 用户明确)
xkkijunctl は **xkkijun の管理用 専用表**。ctableid + ccolumnid は xkkijun 系(xkkijun / xkkijunhw 等同型系列)の対象項目を指す。
```
給与計算ロジック起動 (処理月 X, 社員 Y):
該 xkkijun 行 / 各項目処理:
SELECT FROM xkkijunctl
WHERE ccompkb / cqtaikeikb / dgaitong / cshainno = HEAD PK
AND ctableid = 'xkkijun'
AND ccolumnid = 対象項目ID
IF EXISTS (njtoqflg = 1):
IF cjtoqkb = '01' AND dgaitong = X: SKIP (当月停止)
IF cjtoqkb = '02' AND dgaitong >= X: SKIP (以降停止)
UPDATE xkkijun SET <col> = ...
```
使用パターン:
- 当月のみ停止: 某社員某処理月の例外(休職/出向調整/給与切替) → cjtoqkb='01' + njtoqflg=1
- 永続停止(以後全月): 退職後、項目廃止等 → cjtoqkb='02' + njtoqflg=1
- 解除: njtoqflg=0
- 項目単位停止: xkkijun の特定列だけ連携停止
## 主键と PK 列順序
- DB 実 PK: xkkijunctl_idx UNIQUE (ccompkb, cqtaikeikb, dgaitong, cshainno, ctableid, ccolumnid)
- xlsx 索引序号 1~6 暗示 PK 参与列: ccolumnid(1), ccompkb(2), cqtaikeikb(3), cshainno(4), ctableid(5), dgaitong(6)
## DB vs xlsx 差异点
| # | DB | xlsx | 差异 |
|---|----|------|------|
| 1 | 主键 6 列 UNIQUE idx | 索引序号 1~6 列 | PK 锁列一致,顺序 xlsx 不固定 |
| 2 | dmndate timestamp(0) | timestamp (無精度) | DB 实施 timestamp(0),xlsx 未标 |
| 3 | no rowid 单独 UNIQUE 索引 | xlsx 未提 rowid | xkkijun 有 rowid UNIQUE,xkkijunctl 没建,不影响 schema |
| 4 | njtoqflg numeric(1,0) | numeric 桁数 1 | 桁数一致,DB 实际 precision(1,0) |
| 5 | 0 行 (空表) | 設計書のみ | 実体空表,数据待投入 |
| 6 | xlsx 第 14 行 标 U | 第 14 行附近 | U 未明确含义,仅一行标注,未作为硬约束读取 |
## Relations
- 上位システム:UPDS-V7 給与システム
- 制御対象:xkkijun / xkkijunhw 系列(同型 PK 头部 4 列)
- PK 头部 4 列 (ccompkb, cqtaikeikb, dgaitong, cshainno) は xkkijun / xkkijunhw / xkkihon 等と同型
- xkkijunctl 自体は 15 列フラット,200 槽位"五花"拡張は無し
@@ -0,0 +1,100 @@
# djnd25036m 表
## Description
- 物理表名: `djnd25036m`
- 業務名称: 通勤手当月額DB
- 業務语义: 職員の通勤手当月額認定結果を保持する業務表。cshainno × tukin_seq_num × dkaisei_dte の単位で月額認定スナップショットを保持
- 所属系统: UPDS-V7 諸手当システム
## Key Facts
- xlsx 設計書: 76 列(全和歷列含む)
- DB 物理列数(CI 実測): 70 列
- xlsx vs DB 差: -6 列(和歷 9 列 削除、派生 3 列 追加)
- 主キー UNIQUE: `djnd25036m_idx(cshainno, tukin_seq_num, dkaisei_dte)` 3 列複合
- PK 宣言: なし(UNIQUE インデックスのみ、PRIMARY KEY 制約は未付与)
## 列構造(CI 実測 70 列)
(A) ヘッダ 3 列 NULLABLE:
1. `ccompkb` varchar(2)
2. `dstart` date
3. `dend` date
(B) 業務 NOT NULL 3 列(主キー UNIQUE と一致):
4. `cshainno` varchar(10)
5. `tukin_seq_num` numeric(3,0)
6. `dkaisei_dte` date
(C) 主要業務列(NULLABLE):
- 自動車等支給: `car_shikyu_num` numeric(6,0) / `unchin_tot_num` numeric(10,0) / `unchin_ksn_num` numeric(10,0) / `tkbt_rykn_num` numeric(10,0) / `tkbt_uncn_num` numeric(7,0)
- 支給始期等: `dsikyu_start_dte` date ← **要件書 3.3.1 通勤手当月額DB の表示項目**
- 自至区分: `karamade_kbn` varchar(1)
- 通勤手当月額: `tkntat_tsuki_num` numeric(6,0)
- 認定年月日(西暦): `dnintei_dte` date ← **要件書 3.3.1 通勤手当月額DB の表示項目**
- 備考: `biko` varchar(80)
- 官職/整理/印刷/決裁/起案/給与例月: `kanshoku_cde` varchar(3) / `kanshoku_nme` varchar(80) / `kanshoku_kj_nme` varchar(80) / `seiri_num` numeric(6,0) / `dprint_dte` date / `kessai_cde` varchar(2) / `kessai_nme` varchar(512) / `dkian_dte` date / `kyuyo_tsuki_cde` varchar(2) / `kyuyo_tsuki_nme` varchar(40)
- 所属/部局: `szk_cde` varchar(80) / `szk_nme` varchar(80) / `bkyk_cde` varchar(80) / `bkyk_nme` varchar(80)
- ソート: `sort_jyn` numeric(3,0)
- 給与変更データ作成年月日: `dkyuyo_dte` date
- システム区分: `sys_kbn` varchar(1)(1:定/2:非/3:講)
- 改正フラグ: `kaisei_flg` varchar(1)
- 適用年月日(西暦): `dtekiyo_dte` date
- 旧月額: `old_getugaku` numeric(10,0)
- 給与取込済フラグ: `kyuyo_get_flg` varchar(1) DEFAULT '0'
(D) 月別支給額 24 列(NULLABLE):
- `car_sikyugaku_4`~`car_sikyugaku_12`、`car_sikyugaku_1`~`car_sikyugaku_3` numeric(7,0)(12 ヶ月分、自動車月別支給額)
- `sosikyugaku_4`~`sosikyugaku_12`、`sosikyugaku_1`~`sosikyugaku_3` numeric(7,0)(12 ヶ月分、月別総支給額)
(F) ログ 4 列:
- `kosin_use` varchar(12) NOT NULL
- `last_pgm` varchar(20) NOT NULL
- `last_dte` timestamp NOT NULL
- `kosin_kbn` varchar(1) NOT NULL
- `cmnuser` varchar(10) NULLABLE
- `dmndate` timestamp NULLABLE
(G) 派生 3 列(xlsx 未記載、DB のみ存在、業務意味要確認):
- `ninteiflg` numeric(1,0)
- `napply_num` numeric(10,0)
- `nparking_sq` numeric(12,4)
## Relations
- 上位: UPDS-V7 諸手当システム
- 関連要件: ADIF2601 通勤経路情報連携(人給⇒旅費) の抽出条件ソース
- 関連要件: 要件書 2.4 抽出条件 — 「通勤手当月額 DB で認定年月日 / 支給始期等(西暦) / 最新データ」確認 → 本表で「認定済み + 基準日 最新」の候補を抽出し、`djnd25026m`(順路DB)と JOIN して経路情報を取得する流れ
- 同型 PK 系列: `djnd25026m`(順路DB)とは cshainno + tukin_seq_num + dkaisei_dte の 3 列が重複
## xlsx vs DB 代差
CI 環境 DB と xlsx 設計書の間で代差あり(xlsx が最新設計、DB が反映待ちの状態):
| 種別 | xlsx 76 列 | DB 70 列 |
|---|---|---|
| 和歷表記列 9 列(DB 全廃) | `sstart` / `send` / `kaisei_dte` / `sikyu_start_dte` / `nintei_dte` / `print_dte` / `kian_dte` / `tekiyo_dte` / `kyuyo_dte` | 全削除、西暦 date のみ採用 |
| 派生列 3 列(DB のみ存在、xlsx 未記載) | — | `ninteiflg` numeric(1,0) / `napply_num` numeric(10,0) / `nparking_sq` numeric(12,4) |
| 精度差 1 列 | `tkbt_uncn_num` numeric(6) | `tkbt_uncn_num` numeric(7,0) |
## 要件書 3.3.1 表示項目 引用校对
| 表示項目 | 物理列 | 型 | 一致 |
|---|---|---|---|
| 職員番号 | cshainno | varchar(10) | ✓ |
| 支給始期等(西暦) | dsikyu_start_dte | date | ✓ |
| 認定年月日(西暦) | dnintei_dte | date | ✓ |
全て xlsx/DB 両方に存在、表示項目との突合 ✓
## 改訂履歴
- 7.0.0 新規作成(2023-10-04 NSC)
- DB 派生列 3 列(`ninteiflg`/`napply_num`/`nparking_sq`)の追加経緯は改訂履歴記載なし、業務意味要確認