ken_nogi/ClaudePleasanter/新・稟議申請システム/docs/site-160926_稟議コード管理_spec.md
Kenichiro NOGI 9bbc344137 Pleasanterサイト仕様書パイプラインを再構築
生JSON取得(siteSettingJsons/)と設定分解(configs/)の保存先を分離し、
仕様書・概要書はClaudeが読み解いて執筆する方式に統一(機械生成の
generate-site-documentation.jsは不使用)。10サイト分のspec.md/
overview.mdを刷新し、サイト間連携をまとめたsite-relations_overview.md
を新規追加、全docsをPDF化した。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-11 08:49:24 +09:00

222 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# サイト仕様書稟議コード管理SiteId: 160926
- 取得元データ: [site-160926_latest.json](../siteSettingJsons/site-160926_latest.json)
- 取得日時: 2026-05-15T15:22:14サイト更新日時設定バージョン `Ver: 18`SiteSettings.Version: 1.017
## 1. サイト基本情報
| 項目 | 値 |
|---|---|
| TenantId | 1 |
| Title | 稟議コード管理 |
| ReferenceType | Results |
| ParentId | 63543今回対象の10サイト群には含まれない外部の親サイトフォルダ |
| InheritPermission | 160926自サイトの権限設定を使用 |
| Publish | false外部公開なし |
| DisableCrossSearch | false |
| Creator | 460 |
| Updator | 678 |
| CreatedTime | 2023-01-24T15:56:46 |
| SiteSettings.Version | 1.017 |
## 2. アクセス権限Permissions
| 種別 | 対象ID | 権限レベル |
|---|---|---|
| Dept | 8 | 7 |
| Dept | 56 | 7 |
| Group | 19 | 511 |
| Group | 27 | 7 |
| User | 460 | 511 |
※権限値はビットフラグの加算方式のため、正確な意味閲覧編集削除等の組み合わせは環境のロール定義に依存する。Group 19・User 460 が511管理者相当、その他が7一般的な閲覧作成レベル相当という偏りが見られる。
## 3. 画面構成
### 3.1 一覧画面GridColumns
| 順番 | 列名(内部) | 表示ラベル |
|---|---|---|
| 1 | ResultId | 標準ラベルID |
| 2 | Status | (標準ラベル)状態 |
| 3 | ClassA | エリア |
| 4 | ClassB | 稟議分類 |
| 5 | ClassC | 稟議コード |
| 6 | ClassD | 契約コード |
| 7 | ClassF | 用件・物件名 |
| 8 | Owner | 申請者 |
| 9 | DateA | 申請日 |
| 10 | UpdatedTime | (標準ラベル)更新日時 |
### 3.2 編集画面レイアウトEditorColumnHash / Sections
タブ「General」のみ定義。
| 順番 | 項目名(内部名) | ラベル名 |
|---|---|---|
| 1 | Title | (標準ラベル)タイトル |
| 2 | ResultId | 標準ラベルID |
| 3 | Status | (標準ラベル)状態 |
| 4 | ClassC | 稟議コード |
| 5 | _Section-2 | ―(セクション「稟議コード取得」開始) |
| 6 | ClassA | エリア |
| 7 | ClassB | 稟議分類 |
| 8 | Owner | 申請者 |
| 9 | ClassD | 契約コード |
| 10 | ClassE | 派生コード |
| 11 | ClassF | 用件・物件名 |
| 12 | DateA | 申請日 |
| 13 | Comments | (標準ラベル)コメント |
| 14 | ClassX | ラベル未設定Hide項目。ClassAの選択値を裏で保持 |
| 15 | ClassY | ラベル未設定Hide項目。ClassBの選択値を裏で保持 |
| 16 | _Links-319015 | ―他サイト連携表示SiteId 319015「新・稟議申請書」の関連レコード一覧を編集画面内に表示。詳細は「7. 他サイト連携」参照) |
Sections配列:
| Id | ラベル | AllowExpand | Expand |
|---|---|---|---|
| 2 | 稟議コード取得 | false | true |
### 3.3 タイトル表示TitleColumns / TitleSeparator
TitleColumns: `ClassC`, `Owner`, `DateA` を TitleSeparator `" - "` で連結。
表示式: `[ClassC] - [Owner] - [DateA]`(例: 稟議コード - 申請者 - 申請日)
## 4. 項目定義Columns
| 列名(内部) | 種別 | 表示ラベル | 説明・入力ガイド | 備考 |
|---|---|---|---|---|
| ClassA | 文字列(分類) | エリア | ラジオ選択(東京/愛知/千葉/熊本/静岡/特建事業部/不動産事業部/デザイノ/その他) | NoWrap, ValidateRequired必須, ExtendedHtmlAfterControlあり注意書き、4.1参照), SearchType: PartialMatch |
| ClassB | 文字列(分類) | 稟議分類 | ラジオ選択(白稟議/赤稟議/駐車場稟議/赤稟議(5万以下)/事前稟議/お客様返金稟議/社用車事故報告/自家用車事故報告。選択肢ごとに表示色クラスstatus-white等が設定 | ValidateRequired必須, SearchType: PartialMatch |
| ClassC | 文字列(分類) | 稟議コード | 自動採番。書式 `[ClassX][ClassY]-[yy]-[NNNN]`、年単位でリセット、初期採番値4500 | NoWrap, ExtendedFieldCss/ExtendedControlCss: code-readonly読み取り専用風の見た目, ExtendedHtmlAfterControlあり4.1参照) |
| ClassX | 文字列(拡張分類) | ラベル未設定 | Hide項目。ClassAの選択値数値コードのコピー先。稟議コード自動採番の構成要素として使用 | Hide: true |
| ClassY | 文字列(拡張分類) | ラベル未設定 | Hide項目。ClassBの選択値数値コードのコピー先。稟議コード自動採番の構成要素として使用 | Hide: true |
| Owner | ユーザー選択 | 申請者 | — | NoWrap, EditorReadOnly編集画面では読み取り専用 |
| ClassD | 文字列(分類) | 契約コード | 外部サイトSiteId 61259を検索して選択。表示書式 `[ClassH] - [ClassJ] - [ClassO] - [ClassP]` | UseSearch, NoWrap, GridDesign: `[ClassD][ClassE]`, SearchType: PartialMatch, JsonFormat: true詳細は7章 |
| ClassE | 文字列(分類) | 派生コード | 外部サイトSiteId 64583/74927/72434の3サイトを検索して選択 | UseSearch, Link: true, SearchType: PartialMatch |
| ClassF | 文字列(分類) | 用件・物件名 | 「契約コードまたは派生コードを選択すると自動的に邸名が入力されます」 | ValidateRequired必須, FieldCss: field-wide |
| Status | 状態 | (標準ラベル)状態 | 選択肢: 100=発行, 500=申請, 900=決裁, 910=取消(各ステータスに表示色クラス) | NoWrap, ExtendedControlCss: code-readonly2 |
| DateA | 日付 | 申請日 | DefaultInput: "0"(新規作成時に当日日付が初期値) | EditorReadOnly編集画面では読み取り専用 |
上記のほか、GridColumns/EditorColumnHashに現れる `ResultId`ID, `Title`(タイトル), `Status`のラベル未設定, `Comments`(コメント), `UpdatedTime`更新日時はColumns配列に個別定義がなく標準ラベルのまま。
### 4.1 項目ごとの補足HTMLExtendedHtmlAfterControl
| 列名 | 色style/classから読み取れるもの | 内容 |
|---|---|---|
| ClassA | 赤字class: `commentAdd red` | 「※物件・案件に対応したエリアを選択すること※」 |
| ClassC | 赤字・小フォントstyle: `color:red; font-size:60%;` | 「※自動採番」 |
## 5. 作成・更新権限(フィールド単位)
| 設定 | 対象列 | 権限レベル |
|---|---|---|
| PermissionForCreating | Owner | 5 |
| PermissionForUpdating | Owner | 5 |
加えて `UpdateColumnAccessControls` により、`Status` 列の更新のみ Dept 8・56、Group 19 に限定されている(一般ユーザーはステータスを直接変更できない)。
## 6. 集計設定Aggregations
| Id | GroupBy | Type | Target |
|---|---|---|---|
| 3 | Status | 0 | (空) |
| 1 | ClassA | 0 | (空) |
| 2 | ClassB | 0 | (空) |
Type: 0 は件数集計Countと推定される。
## 7. 他サイト連携Links / ルックアップ)
### 7.1 明示的なLinks設定
| 起点列 | 参照先SiteId | 参照先の値→自コピー先 | JsonFormat |
|---|---|---|---|
| ClassD | 61259 | 参照先サイト61259`[ClassH] - [ClassJ] - [ClassO] - [ClassP]` を検索・選択し、選択レコードの内容をJSON形式でこのサイトの `ClassD` にコピーする | true |
| ClassE | 64583 | 参照先サイト64583を検索し、選択結果をこのサイトの `ClassE` にコピーする | — |
| ClassE | 74927 | 参照先サイト74927を検索し、選択結果をこのサイトの `ClassE` にコピーする | — |
| ClassE | 72434 | 参照先サイト72434を検索し、選択結果をこのサイトの `ClassE` にコピーする | — |
※SiteId 61259・64583・74927・72434 はいずれも今回対象の10サイト稟議承認ワークフロー関連サイト群には含まれない、別系統の「契約コード」「派生コード」マスタと推測される。
### 7.2 編集画面のリンク表示_Links-319015
`EditorColumnHash.General` の末尾に `_Links-319015` が定義されており、編集画面内に **SiteId 319015新・稟議申請書** の関連レコード一覧が表示される。これはPleasanterの「関連リンクLinks」ウィジェットであり、319015側のいずれかの項目がこのサイト160926のレコードを参照していることを示す319015のLinks設定は本仕様書の対象外のため、319015側のspec.mdで裏付けを確認すること。10サイト間の明示的な連携として重要。
### 7.3 暗黙的なテーブル参照ServerScripts/Scriptsのハードコード
クライアントスクリプト `scripts/3_03.更新時の処理.js`Script Id: 3内で、**SiteId 319027事前稟議一覧が直接ハードコードされている**`let targetTable = '319027';` および `url = '.../api/items/' + targetTable + '/upsert'`)。
- 動作: レコード更新後(`after_send`に自身のAPIデータを取得し直し、`Title`・`Status`・`Owner`・`ClassHash`・`DateHash` を、`ClassC`(稟議コード)をキーとして SiteId 319027 へ `upsert`(挿入または更新)で複製送信している。
- これは正式なLinks設定には現れない、稟議コード管理160926→事前稟議一覧319027への一方向の暗黙的なデータ複製である。
- **このスクリプトにはAPIキーとみられる文字列がソースコード中に2箇所ハードコードされている。値そのものは本書に転記しないが、セキュリティ上の懸念として「気になる点」に記載する。**
### 7.4 ParentId
`ParentId: 63543` は今回対象の10サイト319014/319020/319021/319027/335730/319017/319015/319022/319016/160926のいずれにも一致しない。稟議コード管理サイトは、これら10サイトとは別の親フォルダ的な位置づけの外部サイトの配下に置かれている。
## 8. プロセス設定Processes
定義ファイル: [processes.json](../configs/site-160926_稟議コード管理/processes.json)
| Id | Name・DisplayName | 実行条件CurrentStatus→ChangedStatus | 動作 | 成功メッセージ |
|---|---|---|---|---|
| 1 | 取消 / 取消 | 100発行→ 910取消 | 実行可能者: Dept 8・56, Group 19。実行後、通知Type1を送信宛先 `[Owner]`、CC `[Updator], systemadmin@next-hd.co.jp`、件名「発行された稟議コードを取り消しました」 | 発行された稟議コードを取り消しました |
## 9. スタイルStyles
| Id | Title | 適用範囲 | ファイル |
|---|---|---|---|
| 1 | readonly-font130%-bold | New, Edit | [styles/1_readonly-font130%-bold.css](../configs/site-160926_稟議コード管理/styles/1_readonly-font130%25-bold.css) |
| 2 | 取消しグレー表示 | Index | [styles/2_取消しグレー表示.css](../configs/site-160926_稟議コード管理/styles/2_取消しグレー表示.css) |
| 3 | 太字赤文字化 | New, Edit, Index | [styles/3_太字赤文字化.css](../configs/site-160926_稟議コード管理/styles/3_太字赤文字化.css) |
概要:
- Id1: `.code-readonly` を pointer-events無効・フォント130%・太字にする(読み取り専用に見せるための装飾)。`.code-readonly2` も同様にクリック操作を無効化。
- Id2: `.cancelCode` クラスの行背景をグレーにする一覧画面で取消済みレコードを視覚的に区別。ServerScripts Id1と連動
- Id3: マークダウン内の `<strong>` タグを赤字にする(ガイド文の強調表示を目立たせる)。
## 10. スクリプトScriptsサーバースクリプトServerScripts
| Id | Title | 適用画面 | ファイル |
|---|---|---|---|
| 1 | 稟議コード生成 | New | [scripts/1_稟議コード生成.js](../configs/site-160926_稟議コード管理/scripts/1_稟議コード生成.js) |
| 2 | 編集禁止処理 | Edit | [scripts/2_編集禁止処理.js](../configs/site-160926_稟議コード管理/scripts/2_編集禁止処理.js) |
| 3 | 03.更新時の処理 | New, Edit | [scripts/3_03.更新時の処理.js](../configs/site-160926_稟議コード管理/scripts/3_03.更新時の処理.js) |
| Id | Title | 実行タイミング | ファイル |
|---|---|---|---|
| 1 | 取消しグレー表示 | BeforeOpeningRow | [serverscripts/1_取消しグレー表示.js](../configs/site-160926_稟議コード管理/serverscripts/1_取消しグレー表示.js) |
概要:
- **Scripts Id1稟議コード生成**: 新規作成送信直前(`before_send_Create`)に、選択済みの `ClassA`(エリア)・`ClassB`(稟議分類)の値をそれぞれ隠し項目 `ClassX`・`ClassY` にコピーする(`ClassC` の自動採番書式 `[ClassX][ClassY]-[yy]-[NNNN]` の構成要素として使用するため)。また `ClassD`(契約コード)または `ClassE`派生コード変更時に、他方の入力を無効化した上でAPI経由`$p.apiGet`、7.1のLinks設定に基づく参照先サイトを辿るで関連レコードを取得し、`ClassF`(用件・物件名)へ自動反映する。
- **Scripts Id2編集禁止処理**: 編集画面読み込み時(`on_editor_load`)に `ClassA`・`ClassB`(ラジオボタン全選択肢)・`ClassC`・`ClassD`・`ClassE`・`ClassF` の入力を無効化し、実質的に編集不可作成後は内容変更させない状態にする。あわせて外部CDNcdnjs.cloudflare.comから `toastr.js` を読み込み、`ClassC`稟議コードの値をクリップボードにコピーする「Copy」ボタンを追加する。
- **Scripts Id303.更新時の処理)**: レコード送信後(`after_send`に自身のデータをAPIで再取得し、SiteId 319027事前稟議一覧へ複製データを`upsert`送信する。詳細・懸念事項は「7.3 暗黙的なテーブル参照」を参照。**ソースコード中にAPIキーらしき文字列がハードコードされている値は本書に転記しない。**
- **ServerScripts Id1取消しグレー表示**: 一覧行の表示直前(`BeforeOpeningRow`)に、`Status`が`910`(取消)であれば `ExtendedRowCss``cancelCode` を設定し、Styles Id2のCSSと連動して一覧上でグレー表示にする。
## 11. その他設定
| 設定 | 値・状態 |
|---|---|
| NoDisplayIfReadOnly | false |
| HideLink | true |
| AllowCopy | falseレコードのコピー作成を禁止 |
| SectionLatestId | 2 |
| GridGuide | 設定あり(一覧画面上部に稟議コード発行に関する案内文を表示。発行ミス時の取消手順等) |
| EditorGuide | 設定ありGridGuideと同内容を編集画面にも表示 |
| CalendarGuide / CrosstabGuide / GanttGuide / BurnDownGuide / TimeSeriesGuide / AnalyGuide / KambanGuide / ImageLibGuide | いずれも未設定 |
| Comments | EditorColumnHashに含まれており使用されているコメント追記時にNotifications設定により通知が飛ぶ |
| Notificationsレコードレベル | Type1、`Comments`列の変更を監視MonitorChangesColumnsし、コメント追記時に `[Owner]`, `somu@eco-ntk.com`, `k.nogi@next-hd.co.jp`CC: `[Updator]`、BCC: `systemadmin@next-hd.co.jp`)に通知 |
---
## 気になる点(レビュー観点)
- **セキュリティ**: `scripts/3_03.更新時の処理.js`Script Id 3内にAPIキーとみられる長い16進文字列がソースコード直書きで2箇所存在する。クライアントスクリプトは画面のHTML/JSとしてブラウザに配信されるため、この形での秘匿情報埋め込みは第三者に閲覧され得る状態であり、漏えいリスクが高い。サーバースクリプト側での実行への切り替え、または資格情報の外部管理環境変数・シークレットストア等を検討すべき。
- **保守性**: レコードレベルのNotifications設定のCC/宛先に、役職名ではなく個人のメールアドレス(`somu@eco-ntk.com`, `k.nogi@next-hd.co.jp`)が直接ハードコードされている。担当者交代時に通知設定の更新漏れが起きるリスクがある。
- **暗黙的な依存**: SiteId 319027事前稟議一覧への複製送信がクライアントスクリプトの`after_send`イベントに依存しているため、ブラウザ側でJavaScriptの実行が妨げられた場合通信エラー・スクリプトエラー等、319027側にデータが反映されずサイト間の不整合が生じ得る。
- **権限の偏り**: Permissionsにおいて Group 19・User 460 が511管理者相当、他は7と、権限レベルの差が大きい。想定通りの設計か要確認。
- **外部CDN依存**: Script Id2で `cdnjs.cloudflare.com` から `toastr.js` を都度読み込んでおり、外部サービス障害時にはコピー機能のトースト通知が失敗する可能性がある(機能自体(クリップボードコピー)には支障しない)。
- **ClassE用途の紐付け先が3サイトに分散**: `ClassE`派生コードは64583/74927/72434の3サイトを横断検索する設計であり、他の10サイト仕様書と合わせて全体像を確認する際は、この3サイトが「稟議」10サイトの範囲外である点に注意。