Frontend Spreadsheet

仕様ガイド

Google Spreadsheet 拡張の操作フロー、シート構造、バリデーション仕様をまとめた参照ドキュメントです。 長い仕様を読みやすくするため、主要セクションを左側に固定表示しています。

Spec - Extension

extensionのメニューについて

extensionは以下の3つのメニューを提供する。

  • 調整計画のシート作成
  • 調整計画の管理機能表示
  • シートの使い方

sheetの種類について

扱うsheetの種類は以下の3つとする。

  • plan sheet
    • ユーザーが日々計画を更新・提出するシート
    • シート名は 計画: ${サイト名} ${期間開始のYYYY-MM-DD} ${期間終了のYYYY-MM-DD} とする。
    • サイトと期間は変更不可とする。サイトと期間ごとに100シートまで複数作成することができる。サイトと期間の組み合わせでユニークでない場合の動作は保証しない。
  • plan error sheet
    • ユーザーが計画提出時のエラーの詳細を確認するシート
    • シート名は 計画提出エラー: ${サイト名} ${期間開始のYYYY-MM-DD} ${期間終了のYYYY-MM-DD} とする。
    • plan sheet からの提出処理でエラーがあった場合に、このシートが作成される。各plan sheet毎に0から1つ作成される。plan error sheetは必ず対応するplan sheetの右に配置する。
  • template sheet
    • システムが内部でplan sheetの作成に使用するシート
    • シート名は テンプレート とする。
    • 新しいplan sheetを作成するためのテンプレートで、protected状態でかならず後ろに配置し、ユーザーに変更されるリスクを減らす。

シートの順序は以下とする。どんな順序でもバグなく動作することを目指すが以下の順序が望ましい。

順序 種類
middle plan sheet or plan error sheet
last template sheet

今後以下の種類が追加される可能性がある。

  • dashboard sheet
    • サイトもしくはplan sheetをまたいだ集計値やグラフを表示するシート。
    • いくら儲かるか、順調に運用できているかどうかを確認するために使用する。

調整計画のシート作成のフローについて

plan sheetの作成はextensionの新規作成画面から行う。plan sheetを作成するときに設定画面で設定する項目は以下とする。

  • サイト
    • 選択可能なサイトは、ログインユーザーがアクセス権限があるサイトのみとする。
    • 検索可能なセレクトボックスを使用してサイトを選択する。
  • 開始日
    • date pickerを使用して指定する。
  • 終了日
    • date pickerを使用して指定する。
    • (終了日 - 開始日) <= 3ヶ月 とする。

plan sheetの作成フローは以下とする。

  • ユーザーがサイトと開始日と終了日を選択し、「作成」ボタンを押す。
  • templateからコピーして現在のシートの右に新しいシートを作成する。
    • このとき新しいシートがactiveにならない。
  • 該当のサイトと期間でサーバーからデータを取得する。
  • 当日の該当ブロックの行をactiveにする。
  • 新しいシートのシート名を変更する。
  • すべての初期化が終わったあとに新しいシートがactiveになる。

既存のplan sheetをspreadsheetのcopy機能を使ってcopyした場合は、サイトと期間は変更できない。

調整計画の提出について

提出はExtensionから行う。

提出時にエラーがあった場合の挙動は以下とする。

  • エラーがあった最初の行にjumpする。
  • エラーがあった行の状態を要修正にする。
  • 提出ボタンの上に以下を配置する。
    • エラー用のplan error sheetへのリンク
    • 次のエラー行へのリンク

以下の使い方を想定している。

  • 使い方に慣れている場合
    • エラー用のplan error sheetを見ずに、次のエラー行へのリンクを押しながら最速で修正する
  • 使い方に慣れていない場合
    • エラー用のplan error sheetを見て、1つずつエラー内容を吟味して修正する。

調整計画の取り込みについて

ゲートクローズが30分おきに起こるので、シートの内容が30分おきに古くなる可能性がある。そのため、毎朝仕事を始めるときに手動で取り込みしたい。このユースケースで使用する。

調整計画のカラムの仕様について

カラム一覧は以下:

名前 識別子 タイプ 権限
実需給日 block_date A Date 書き込み
ブロック番号 block_code B Text 書き込み
状態 status C Dropdown 読み取り専用
状態 - 入札 market_action_status D Dropdown 読み取り専用
アクション - 入札 market_action E Dropdown 書き込み
アクション - サイト制御 site_action F Dropdown 書き込み
入札(kW or kWh) market_order_quantity G Number 書き込み
入札の単価の下限(円/kWh) market_order_min_price H Number 書き込み
入札の単価の上限(円/kWh) market_order_max_price I Number 書き込み
入札の単価のデルタ(円/kWh) market_order_delta_price J Number 書き込み
サイト制御のSoCの計画(%) site_control_soc_plan K Number 書き込み
入札の約定量 market_exec_quantity L Number 読み取り専用
入札の約定金額 market_exec_price M Number 読み取り専用
サイト制御の結果 site_action_status N Text 読み取り専用
サイト制御のSoCの実績(%) site_control_soc_actual O Number 読み取り専用

各カラムごとの仕様は以下:

実需給日 (A列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
    • Is valid date
  • Backend:
    • ISO 8601形式(YYYY-MM-DD)のチェック
    • 過去日付/未来日付の制限

ブロック番号 (B列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
    • =REGEXMATCH(B2, "^(0[1-9]|[1-3][0-9]|4[0-8]) - ([0-1][0-9]|2[0-3]):[0-5][0-9]$")
    • 形式: ブロック番号 - 開始時刻 (例: 01 - 00:00, 07 - 03:00, 48 - 23:30)
  • Backend:
    • 01-48の範囲チェック

状態 (C列)

validationは以下:

  • Frontend (Spreadsheet):
    • 読み取り専用
  • Backend:
    • ユーザー入力を無視

項目の詳細は以下:

名前 識別子
確定 FIXED close to light green 5
変更あり NOT_SUBMITTED close to light cornflower blue 3
要修正 NEEDS_FIX close to light red 3
提出済み SUBMITTED close to light purple 3

状態 - 入札 (D列)

validationは以下:

  • Frontend (Spreadsheet):
    • 読み取り専用
  • Backend:
    • ユーザー入力を無視

項目の詳細は以下:

名前 識別子
入札前 PRE_BID close to light green 5
入札中 BIDDING close to light cornflower blue 3
約定 - 失敗 EXEC_FAILED close to light red 3
約定 - 一部約定 EXEC_PARTIAL close to light yellow 2
約定 - 全約定 EXEC_FULL close to light purple 3

アクション - 入札 (E列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
    • 許可された選択肢のみ入力可能
  • Backend:
    • ENUM値との照合

項目の詳細は以下:

名前 識別子
アクションなし NO_ACTION close to light green 5
JEPXスポット買注文 JEPX_BUY_ORDER_ON_SPOT close to light red 3
JEPXスポット売注文 JEPX_SELL_ORDER_ON_SPOT close to light orange 14
JEPX時間前買注文 JEPX_BUY_ORDER_ON_INTRADAY close to light yellow 2
JEPX時間前売注文 JEPX_SELL_ORDER_ON_INTRADAY close to light green 3
EPRX三次調整力②注文 EPRX_ORDER_ON_TERTIARY_2 close to light cornflower blue 3
EPRX一次調整力注文 EPRX_ORDER_ON_PRIMARY close to light cyan 3
EPRX一次+二次2注文 EPRX_ORDER_ON_COMPOUND__P_AND_S2 close to light purple 3
EPRX一次+三次1注文 EPRX_ORDER_ON_COMPOUND__P_AND_T1 close to light purple 3
EPRX一次+二次2+三次1注文 EPRX_ORDER_ON_COMPOUND__P_AND_S2_AND_T1 close to light purple 3
EPRX二次2+三次1注文 EPRX_ORDER_ON_COMPOUND__S2_AND_T1 close to light purple 3

アクション - サイト制御 (F列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
    • 許可された選択肢のみ入力可能
  • Backend:
    • ENUM値との照合

項目の詳細は以下:

名前 識別子
アクションなし NO_ACTION close to light green 5
SOC制御 SOC_CONTROL close to light red 3
正方向流量制御 FORWARD_FLOW_QUANT_CONTROL close to light orange 14
逆方向流量制御 REVERSE_FLOW_QUANT_CONTROL close to light yellow 2
入札量による正方向流量制御 FORWARD_FLOW_QUANT_CONTROL_BY_ORDER_QUANTITY close to light orange 14
入札量による逆方向流量制御 REVERSE_FLOW_QUANT_CONTROL_BY_ORDER_QUANTITY close to light yellow 2
系統指令による流量制御 FORWARD_OR_REVERSE_FLOW_CONTROL_BY_TSO_ORDER close to light green 3
周波数変化による流量制御 FORWARD_OR_REVERSE_FLOW_CONTROL_BY_FREQUENCY close to light cornflower blue 3
ESS再起動 ESS_REBOOT (TBD)
PCS起動 PCS_START (TBD)
PCS停止 PCS_STOP (TBD)

入札(kW or kWh) (G列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
    • 範囲制限: >=0
  • Backend:
    • 数値型のパース可能性チェック
    • 非負数チェック
    • 上限値との整合性チェック

入札の単価の下限(円/kWh) (H列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
  • Backend:
    • 数値型のパース可能性チェック
    • 上限値との整合性チェック

入札の単価の上限(円/kWh) (I列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
  • Backend:
    • 数値型のパース可能性チェック
    • 下限値との整合性チェック(上限 >= 下限)

入札の単価のデルタ(円/kWh) (J列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
    • 範囲制限: >=0
  • Backend:
    • 数値型のパース可能性チェック
    • 非負数チェック
    • 上限値との整合性チェック

サイト制御のSoCの計画(%) (K列)

validationは以下:

  • Frontend (Spreadsheet):
    • 書き込み可能
    • 範囲制限: 0<=value<=100
  • Backend:
    • 数値型のパース可能性チェック
    • 0-100の範囲チェック
    • サイト制御可能性の確認

入札の約定量 (L列)

validationは以下:

  • Frontend (Spreadsheet):
    • 読み取り専用
  • Backend:
    • ユーザー入力を無視

入札の約定金額 (M列)

validationは以下:

  • Frontend (Spreadsheet):
    • 読み取り専用
  • Backend:
    • ユーザー入力を無視

サイト制御の結果 (N列)

validationは以下:

  • Frontend (Spreadsheet):
    • 読み取り専用
  • Backend:
    • ユーザー入力を無視

サイト制御のSoCの実績(%) (O列)

validationは以下:

  • Frontend (Spreadsheet):
    • 読み取り専用
  • Backend:
    • ユーザー入力を無視

google spreadsheetの色の対応について

google spreadsheetのpresetの色のコードと名前の対応は以下となっている。

コード 名前
#e6e6e6 close to light green 5
#ffcfc9 close to light red 3
#ffc8aa close to light orange 14
#ffe5a0 close to light yellow 2
#d4edbc close to light green 3
#bfe1f6 close to light cornflower blue 3
#c6dbe1 close to light cyan 3
#e6cff2 close to light purple 3