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

17 KiB
Raw Blame History

サイト仕様書稟議コード管理SiteId: 160926

  • 取得元データ: site-160926_latest.json
  • 取得日時: 2026-05-15T15:22:14サイト更新日時設定バージョン Ver: 18SiteSettings.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に現れる ResultIdID, 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.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サイト稟議承認ワークフロー関連サイト群には含まれない、別系統の「契約コード」「派生コード」マスタと推測される。

EditorColumnHash.General の末尾に _Links-319015 が定義されており、編集画面内に SiteId 319015新・稟議申請書 の関連レコード一覧が表示される。これはPleasanterの「関連リンクLinks」ウィジェットであり、319015側のいずれかの項目がこのサイト160926のレコードを参照していることを示す319015のLinks設定は本仕様書の対象外のため、319015側のspec.mdで裏付けを確認すること。10サイト間の明示的な連携として重要。

7.3 暗黙的なテーブル参照ServerScripts/Scriptsのハードコード

クライアントスクリプト scripts/3_03.更新時の処理.jsScript Id: 3内で、SiteId 319027事前稟議一覧が直接ハードコードされているlet targetTable = '319027'; および url = '.../api/items/' + targetTable + '/upsert')。

  • 動作: レコード更新後(after_sendに自身のAPIデータを取得し直し、TitleStatusOwnerClassHashDateHash を、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

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
2 取消しグレー表示 Index styles/2_取消しグレー表示.css
3 太字赤文字化 New, Edit, Index 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
2 編集禁止処理 Edit scripts/2_編集禁止処理.js
3 03.更新時の処理 New, Edit scripts/3_03.更新時の処理.js
Id Title 実行タイミング ファイル
1 取消しグレー表示 BeforeOpeningRow serverscripts/1_取消しグレー表示.js

概要:

  • Scripts Id1稟議コード生成: 新規作成送信直前(before_send_Create)に、選択済みの ClassA(エリア)・ClassB(稟議分類)の値をそれぞれ隠し項目 ClassXClassY にコピーする(ClassC の自動採番書式 [ClassX][ClassY]-[yy]-[NNNN] の構成要素として使用するため)。また ClassD(契約コード)または ClassE派生コード変更時に、他方の入力を無効化した上でAPI経由$p.apiGet、7.1のLinks設定に基づく参照先サイトを辿るで関連レコードを取得し、ClassF(用件・物件名)へ自動反映する。
  • Scripts Id2編集禁止処理: 編集画面読み込み時(on_editor_load)に ClassAClassB(ラジオボタン全選択肢)・ClassCClassDClassEClassF の入力を無効化し、実質的に編集不可作成後は内容変更させない状態にする。あわせて外部CDNcdnjs.cloudflare.comから toastr.js を読み込み、ClassC稟議コードの値をクリップボードにコピーする「Copy」ボタンを追加する。
  • Scripts Id303.更新時の処理): レコード送信後(after_sendに自身のデータをAPIで再取得し、SiteId 319027事前稟議一覧へ複製データをupsert送信する。詳細・懸念事項は「7.3 暗黙的なテーブル参照」を参照。ソースコード中にAPIキーらしき文字列がハードコードされている値は本書に転記しない
  • ServerScripts Id1取消しグレー表示: 一覧行の表示直前(BeforeOpeningRow)に、Status910(取消)であれば ExtendedRowCsscancelCode を設定し、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.jpCC: [Updator]、BCC: systemadmin@next-hd.co.jp)に通知

気になる点(レビュー観点)

  • セキュリティ: scripts/3_03.更新時の処理.jsScript 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サイトの範囲外である点に注意。