最近Google Workspaceに関する情報を集めているのですが、とあるベンダーから届いたメールに電子帳簿保存法の対策をGoogle Workspaceを活用して行うという主旨のセミナーの案内が届きました。
電子帳簿保存法は、データで届いた請求書や契約書はデータで保管すべしという法律で、データの保管場所や方法を定めた上で検索できるようにファイルの命名規則や索引簿を作成する必要があります。
このセミナーの内容はどのようなものかはこれから受けるのでわかりませんが、GWSを使うというのを見て「あ~、その手があったか……!」と思った次第です。
データの保管はドライブでできますし、索引簿はスプレッドシートで可能です。そして作業をGASで効率化できてしまいます。
というわけで、電子帳簿保存法対策を想定して、ドライブに入れたファイルの情報を自動でスプレッドシートに転記するスクリプトを作成しました。
スクリプトの内容
まず索引簿となるスプレッドシートです。テーブルというシート名で設定します。
ID | 各レコードのID |
登録日時 | この索引簿に登録された日時を記録 |
ファイルID | 処理したファイルのID。URLをリンクする |
ファイル名 | 処理したファイルの名前 |
取引年月日 | 電帳法の要件。手動で入力 |
取引先 | 電帳法の要件。手動で入力 |
取引金額 | 電帳法の要件。手動で入力 |
電帳法では「取引年月日」「取引先」「取引金額」の3つを記録して検索できることが要件らしいので、とりあえずこれだけ列を用意。他に必要そうなものがあれば随時追加します。
検索はもちろん、フィルタ機能で絞り込みできるのでたぶん要件を満たしていると思います。ファイルへのアクセスもリンクから開けるので容易です。
作業手順としては、ドライブにある「未処理フォルダ」に書類データを入れます。
スクリプトの実行方法にもよりますが、時間でトリガー設定しておくのであればこれだけでOK。
テーブルシートにファイルの情報が記録されます。
取引年月日などはOCRのライブラリを使えば取れそうではありますが、書類によってフォーマットは異なりますし正確ではなさそうなので、ここはまぁ手入力で。
入力規則を設定しておけば取引年月日はカレンダーから選択する方式にできたり、マスタを作っておけば取引先も選択すればOKになりますので、入力をより簡易にすることも可能です。
処理を行ったあとのデータは「未処理フォルダ」から「保管フォルダ」へ移動されます。つまり二重で処理することはありません。
GAS
function RecordFileInfo() {
const START_TIME = new Date(); // 実行時刻 (タイムアウト判定用)
const RECORD_DATE = Utilities.formatDate(START_TIME, "Asia/Tokyo", "yyyy-MM-dd hh:mm:ss"); // 入力用時刻
const UNPROCESSED_FOLDER = DriveApp.getFolderById('未処理フォルダのID');
const STRAGE_FOLDER = DriveApp.getFolderById('保管フォルダのID');
const THIS_SPREADSHEET = SpreadsheetApp.openById('このスプレッドシートのID');
const TABLE_SHEET = THIS_SPREADSHEET.getSheetByName('テーブル'); // シート名
// フィルタを解除
if(TABLE_SHEET.getFilter()!==null){
TABLE_SHEET.getFilter().remove();
}
// 未処理フォルダ内のファイルを取得して1つずつ処理
let files = UNPROCESSED_FOLDER.getFiles();
while(files.hasNext()){
let file = files.next();
let file_name = file.getName(); // ファイル名
let file_id = file.getId(); // ファイルID
let file_url = file.getUrl(); // ファイルURL
file.moveTo(STRAGE_FOLDER); // 保管フォルダへ移動
// テーブルシートに入力
let target_row = TABLE_SHEET.getLastRow() + 1;
let record_id = target_row - 1; // IDは最終行-1
TABLE_SHEET.getRange(target_row, 1).setValue(record_id);
TABLE_SHEET.getRange(target_row, 2).setValue(RECORD_DATE);
TABLE_SHEET.getRange(target_row, 3).setValue('=HYPERLINK("' + file_url + '","' + file_id + '")'); // 表示する値はファイルIDで、ファイルURLをリンク
TABLE_SHEET.getRange(target_row, 4).setValue(file_name);
// 実行時間が5分を過ぎていれば中止
if (isTimeout(START_TIME)) {
return;
}
}
}
function isTimeout(START_TIME) {
let diff = parseInt((new Date() - START_TIME) / (1000 * 60));
if (diff >= 5) {
return true;
}
return false;
}
データの真実性については要検討
あとはデータの真実性が担保されるよう、変更や改ざんが行われないようにする必要があります。
保管フォルダ内のデータについては権限設定で変更できないようにするなどといった対応になりますかね。
その辺はセミナーを受けて勉強してこようと思います。
追記: データの真実性はVaultを使用するため、Business Standard以上が必要
セミナーを受けまして、データの真実性については「Vault」を使用してデータの編集履歴を残すことで対応するようです。
このVaultを使用するには、Google WorkspaceのBusiness Standard以上のプランが必要です。
ただ、電帳法対策のサービスを契約するよりも、GWSのBusiness Standardを契約した方がコスパは良いのではないかと思います。
コメント