署名(Sign)

無料で使っているクラウドサイン・GMOサイン・freeeサインの契約も、Odooの連絡先に反映してみた

前回、DocuSignに残っていた過去の契約書をOdooの連絡先へ移行しました。ただ、契約書が入っている電子契約サービスはDocuSignだけではありませんでした。

  • クラウドサイン
  • GMOサイン
  • freeeサイン(旧NINJA SIGN)

この3つにも、過去に締結した契約があちらこちらに残っています。
全部無料プランのまま利用。自社から送るときはDocuSignを使っていたので、この3つは主に「先方から送られてきた契約書に署名する」ために使っていました。無料プランでも受信・署名は無制限にできるため、そのまま溜まっていた形です。

方針は前回と同様。締結済みの過去契約はOdoo Signには入れず、取引の記録として連絡先に紐づけます。PDFも移行せず、持つのは契約書タイトル・契約日・元システムへのリンク・元システムでの文書IDの4つだけです。

前回との決定的な違い:APIもCSVも使えない

DocuSignにはAPIがあり、解約後も一定期間はアクセスできたため、169件をコードで一気に処理できました。今回の勝手が違います。
3ツールとも無料プランなので、APIもCSVエクスポートも使えません。

ツール CSVエクスポート 一覧の閲覧
クラウドサイン Free ✗ エンタープライズプラン限定 ○ 過去データは残り続ける
freeeサイン 無料 ✗ Standardプラン以上
GMOサイン お試しフリー △ 一覧画面にボタンがあった

有料プランならCSVで一発ですが、この移行のためだけで、大した量ではないので、プランを上げるわけにはいきません。

そこで今回はClaude in Chromeを使いました。
ブラウザでログインした状態のまま、AIに画面を読ませて一覧を作らせる方法です。普段、人がWebブラウザ上で行っている作業を、そのままAIブラウザエージェントに実行させます。

AIに渡した指示

ツールごとにプロンプトを書きました。共通で入れたルールはこれです。

絶対に守らせること

  • 読み取り専用。送信・再送・取消・削除・編集・設定変更は一切しない
  • 「削除」「取消」など確認ダイアログが出るボタンには絶対に触れない
  • 推測で埋めない。画面に無い項目は空欄にする
  • 迷ったら止めて報告する。同じ操作を3回試して駄目なら諦める

手順

  • まず一覧の総件数とステータス別の内訳を数えて報告し、そこで一度止まる
  • 確認後、「締結済み」だけに絞り、一覧を1ページずつ最後まで送る
  • 20件ごとに、それまでの結果をCSVで途中出力する

この「まず件数を数えて止まれ」と「20件ごとに途中出力しろ」の2つが、実際にかなり効きました。全部やらせてから件数が合わないのが一番困りますし、最後にまとめて出力させると、セッションが切れたときに全部消えます。

削除ボタンに触らせない

一番気をつけたのはこれです。ブラウザ操作で確認ダイアログが出ると、AIの操作がそこで固まって続行不能になります。しかも契約管理ツールの「その他のメニュー」には、CSVダウンロードのすぐ隣に「文書を削除」が並んでいたりします。そこで「クリック前に必ずボタン名を読み上げて確認してから押すこと」というルールを追加しました。

Read Onlyで作業させるというのは、単に「変更するな」と言うだけでは足りません。触ったら戻れない場所を、具体的に名指しで避けさせる必要があります。

つまずいた点:日付フィルタの初期値

一覧系のツールで一番取りこぼしが起きるのが、日付フィルタです。初期状態で「過去30日」などになっていると、大半が見えません。そのため「日付フィルタが勝手に絞り込まれていないか必ず確認しろ」と明示的に指示しました。

結果は、クラウドサインは無料プランでは日付絞り込み機能自体がロックされており(=絞られようがない)、freeeサインとGMOサインは絞り込みなし。いずれも問題ありませんでしたが、これは確認して初めて分かることです。

予想外の収穫:こちらのほうが情報が多かった

やってみると、DocuSignより情報が取れました。前回は会社名がAPIから一切取れず、46社ぶんを1社ずつ公式サイトで調べる羽目になりましたが、今回はそれが要りませんでした。

クラウドサインは、書類の「関係者」欄に会社名が入っていました。freeeサインは、書類がフォルダで整理されていて、フォルダ名がそのまま会社名になっていました。

ホーム
├ クライアント
│  ├ A印刷工業株式会社
│  ├ 株式会社B
│  └ 有限会社C商店
├ パートナー
└ 社員
   ├ 012 Dさん
   └ 011 Eさん

この「クライアント / パートナー / 社員」という分け方が、そのまま「会社に紐づけるか、個人に紐づけるか」の判断に使えました。人間が普段の運用で作ったフォルダ構造が、そのまま移行のメタデータになっていたわけです。

GMOサインは、そもそも自社からの送信がゼロ件でした。つまり全件が受信文書なので、差出人がそのまま契約相手です。

過去の自分にびっくり:DocuSignと重複していた

3ツールぶんのCSVが揃い、Odooへ登録しようとしたところで気づきました。freeeサインの契約が、前回移行したDocuSignの契約と重複が発覚。

前回、DocuSign側に「2021年6月10日」付の契約が21件かたまっていました。署名者が自社の人間だけで、複数の書類が1件にまとめられている、少し不自然なレコード群です。これはfreee(当時のNINJA SIGN)にあった書類を、DocuSignへ一括で取り込んだコピーで、2021年6月10日は取り込みを実行した日でした。

DocuSign側(取り込みコピー) freeeサイン側(オリジナル)
契約日 全部2021-06-10(取込日) 2019〜2021の実際の締結日
粒度 複数書類が1レコードに束ねられている 1書類=1レコード
相手先 PDF本文を読まないと分からない フォルダ名に会社名がある

これは以前NINJA SIGNを使っていて、DocuSignに移行した際に全部移動させてた模様。ただ、DocuSignの内容は手移動だったかどうかわすれましたが、正確性が乏しく明らかにfreee側のほうが正確っぽかったので、。DocuSign側の重複を削除して、freee側に置き換えました。契約日が2021年6月10日に固まっていた古い契約が、2019年〜2021年の正しい締結日に散らばりました。

表記ゆれの寄せ込み

4つのツールから集めると、同じ会社が別々の表記で出てきます。実際にあったものです。

  • 有限会社 C商店有限会社C商店(スペースの有無)
  • B株式会社B(法人格の有無)
  • 同じ社員の氏名が、ひらがな表記と漢字表記で分かれている
  • example.jpexample.co.jp(同じ会社でドメインが2つ)

これらを寄せずに登録すると、同じ会社の連絡先が2つできてしまいます。ここは自動判定に任せきらず、既存の連絡先名に寄せる対応表を作って処理しました。

会社名の確定では、Web検索と契約書PDFの内容が食い違うケースもありました。ある取引先は、Web検索では同名の別会社が先に出てきますが、実際の発注書PDFを見ると法人格が違う別の会社でした。契約書に書かれていた住所から、現在は本社を移転していた会社もありました。会社名は契約書の実物が正、住所は現在の公式サイトが正、と項目によって信頼する情報源を変えるのが良さそうです。

実際どこまで移行できたか

ツール 移行した契約
DocuSign 百数十件
クラウドサイン 数十件
freeeサイン 数十件
GMOサイン 十数件

除外したものもあります。2015年のテスト送信1件、退職した社員2名の雇用契約9件、freeeと重複していたDocuSign 16件です。

契約日・相手先・リンクは全件埋まっており、空欄はゼロです。会社の住所も、契約書PDFと公式サイトから確認できたぶんを入れました。

契約の一覧画面は作っていません。契約は会社ごとに紐づいているので、確認するときは会社を開きます。業務委託でよくやり取りしている会社を開けば、どのサービスで締結したかに関係なく、その会社との契約が日付の新しい順に並びます。

まとめ:APIがあるかどうかで手段は変わる

前回と今回で、やっていることは同じです。契約を読んで、相手先を判断して、Odooの会社と照合して、紐づける。違うのは入口だけでした。

  • APIがある(DocuSign)→ コードで一気に処理
  • APIが無い(無料プランの3ツール)→ ブラウザAIに画面を読ませる

無料プランのSaaSには、データはあるのに取り出す手段が用意されていない、ということがよくあります。これまでは「手で写すしかない」で終わっていた領域が、ブラウザAIで現実的に扱えるようになってきました。

ただし、AIに任せる範囲は絞ったほうがうまくいきました。今回AIにやらせたのは「画面を読んで一覧を作る」ところまでで、会社名の名寄せ・表記ゆれの統一・重複判定・Odooへの登録はこちらで処理しています。ブラウザ操作は脆いので、判断を持たせるほど失敗します。AIには読ませる。判断のルールは人が決める。この切り分けが、今回いちばんうまくいったポイントでした。

これで、DocuSign・クラウドサイン・GMOサイン・freeeサインに散らばっていた過去の契約が、Odooの連絡先1か所に集まりました。契約先を開けば、どのサービスで締結したかに関係なく、過去の契約が時系列で並びます。

よくある質問

無料プランでCSVエクスポートができない場合、どうやって移行しましたか?

ブラウザでログインした状態のまま、Claude in Chrome(ブラウザAI)に画面を読ませて締結済み一覧をCSV化しました。読み取り専用・削除等の操作禁止・20件ごとの途中出力といったルールを先に決めてから実行しています。

ブラウザAIに操作を任せるときの注意点は何ですか?

「変更するな」と言うだけでは足りません。削除・取消など戻れない操作を具体的に名指しで禁止し、クリック前にボタン名を確認させました。また、一覧の日付フィルタの初期値による取りこぼしがないかも明示的に確認させています。

複数の電子契約サービスから集めると、契約の重複はどう扱いますか?

今回は、freeeサインの契約が過去にDocuSignへ一括取込されたコピーと重複していました。契約日が取込日に固まっているなどの特徴から判別し、実際の締結日を持つオリジナル側を残して置き換えています。

当社はOdooの公式パートナーとして、Signを含むOdooの導入設計・カスタマイズ・外部システムからの移行を支援しています。本記事のような移行の設計段階からのご相談はOdoo導入・開発・業務統合支援をご覧ください。

maeyama