レビューの流れ

会社の Excel ブックが入ったフォルダから、締め処理を終えてロックされた月に至るまでの流れです。会社が提出するもの、お客様が一度だけ決めること、そしてその後毎月行われることを説明します。

レビューとは

レビューとは月次締めのことで、1 社の 1 か月分について処理パイプラインを 1 回実行することです。ハルノは会社の Excel ブックを読み込み、そこから 1 つの統一元帳を作成し、整合性チェックを実行して、財務諸表パッケージ、残高照合資料、ダッシュボードを書き出します。その後、報告した月をロックします。そのため、報告済みの数値が記録を残さずに後から変わることはありません。

会社とクライアント
ハルノでは各社を client(クライアント)と呼びます。フォルダ名、コマンド、ダッシュボードではこの語が使われます。

現在、レビューは macOS アプリで行います。ダッシュボードとどのレポートも、PDF として書き出せます。

締め処理の段階

段階読み込むもの書き出すもの
読み込みworkbooks/<client>/ 内の各 Excel ブックまたは CSV各ファイルから読み込んだ表(ledger/staging/ 内)。非表示シートは読み込まずに別扱いにします。
元帳の作成それらの表と、会社の承認済みの定義ファイル(spec)統一元帳(ledger/ledger.sqlite)
チェック元帳検出事項と質問事項(締めレポートに記載)
財務諸表元帳と、定義ファイルに定めた財務諸表のレイアウト財務諸表パッケージ
残高照合元帳の照合用明細表残高照合資料
ロックこの締め処理で報告した月と、未解決の検出事項月ごとの締めの記録:「fully reconciled」(すべて照合済み)または「reported with exception」(例外事項ありで報告済み)
ダッシュボード元帳。今回の実行に含まれるすべての会社の締めが終わった後に 1 回、定義ファイルのあるすべての会社について読み込みますポートフォリオダッシュボード

チェックはどのレポートよりも先に実行されます。そして、チェックこそが締め処理の要です。検出事項があっても締め処理は止まりません。検出事項とは、チェックがなければ 3 週目になって見つけていたはずの問題です。

同じ実行で投資家向けレポートと修正履歴も書き出し、元の Excel ブックはすべて写しを保管します。詳しくは「締め処理が書き出すもの」をご覧ください。

会社が提出するもの

会社が提出するのは、記帳担当者がすでに作成している資料です。月を締めるには、財務報告パッケージと残高照合資料があれば足ります。財務報告パッケージの代わりに、QuickBooks から書き出したままの財務諸表エクスポートを使うこともできます。その他の入力はすべて任意で、提出するとそれぞれパネルやチェックが加わります。

入力反映先
月次の財務報告パッケージ:貼り付けたエクスポート、手入力の科目マッピング列、表示用シートを 1 つの Excel ブックにまとめたもの元帳と財務諸表パッケージ。科目マッピングと小計は、ブック自体の数式から読み取ります。
QuickBooks の財務諸表エクスポート:貸借対照表、損益計算書、キャッシュ・フロー計算書同上。科目マッピングは各エクスポートの区分から推定します。3 つすべてを提出してください。キャッシュ・フロー計算書は、計算書自体が示す区分のまま保持されるため、チェックがその区分と食い違う結果を示すことができます。
試算表(任意)残高のある勘定科目で、財務諸表の表示から漏れているものがないかのチェック。試算表だけでは財務諸表に表示するものがないため、単独で提出すると取り込みを拒否します。
残高照合資料残高照合資料とそのチェック。各明細表は自身の明細項目から合計し直し、総勘定元帳(GL)と突合します。
予算(任意)予実比較パネル。差異は検出事項ではありません。
業務指標の入力シート(任意):月別の従業員数と新規顧客数従業員数、従業員 1 人あたり営業費用(OpEx)、従業員 1 人あたり売上高の各タイルと、新規顧客数。これらの数はどの財務諸表にも載っていません
請求データのエクスポート(Stripe の請求書など、CSV)(任意)顧客別の売上高と、MRR(月次リカーリング収益)、ARR、解約率(チャーン)
CRM のエクスポート(HubSpot の取引など、CSV)(任意)ブッキング(受注額)と新規顧客数。いずれも売上高ではありません
顧客別売上高のスプレッドシート(任意)同じく MRR、ARR、解約率。ただし、発行済みの請求書ではなく、認識済みの売上高として読み取ります
Profit and Loss by Class(クラス別損益計算書)のエクスポート。1 か月につき 1 ファイル(任意)部門別営業費用パネルと、各月のクラス別内訳の合計がその月の発生額と一致するかのチェック(class_total_disagrees)。ファイルのない月はゼロではなくダッシュで表示します。
A/R Aging Detail と Transaction List by Vendor(任意の QuickBooks レポート)突出した月が前払いかどうかを見極める根拠となる請求書。また、売掛金の勘定科目を指定すると、未決済の請求書と売掛金残高の突合

エクスポートの要件

  • 発生主義であること。現金主義のエクスポートは取り込みを拒否します。
  • 月次であること。四半期の列を持つ損益計算書は、ファイル名を示して取り込みを拒否します。月別のレポートを依頼してください。
  • 会社の報告通貨であること。1 社につき 1 通貨で、為替換算は行わないため、別の通貨を明記したエクスポートは取り込みを拒否します。
  • 定義ファイルで指定されていること。定義ファイルのどのセクションにも指定されていないファイルは、ファイル名を報告したうえでスキップします。その会社の締め処理は、残りのファイルで通常どおり行われます。

非表示シートは読み込まずに隔離します

非表示シートは名前を記録するだけで、取り込むことはありません。実務では、非表示シートに別の会社のデータが残っていることがよくあります。ハルノが非表示シートの内容を表示するのはお客様が求めたときだけで、ある会社の元帳に取り込むのは、それがその会社のものだとお客様が確認した後だけです。詳しくは、データの取り扱いとセキュリティの「非表示シートは別扱いになります」をご覧ください。

会社のオンボーディング

定義ファイルのない会社は締められません。オンボーディングでは、その定義ファイルを一度だけ作成します。

  1. macOS アプリで[ファイル]▸[フォルダーを開く…](⌘O)を選び、レビュー用ワークスペースを開きます。.haruno フォルダを含むフォルダそのものを選択してください。その一つ上のフォルダではありません。
  2. 会社の Excel ブックを workbooks/<client>/ に置きます(例:workbooks/acme/)。月次の財務報告パッケージ、残高照合資料、予算があれば予算も置きます。
  3. ハルノに会社の設定を依頼します。
    text
    Acme と契約しました。ファイルは workbooks に入っています。設定をお願いします。
  4. ハルノはブックから定義ファイルの案を作成し、いったん止まってお客様に提示します。冒頭には REVIEW リスト、つまりブックからは答えが出ない質問が並びます。この時点では、まだ何も適用されていません。
  5. REVIEW リストを読み、普段の言葉で回答します。ハルノは各回答を記録し、差分を表示します。
  6. 承認すると、締め処理が実行されます。
会話で送信されるもの
アシスタントを通じてオンボーディングを行うと、お客様が入力した内容と、ツールが出力した内容(勘定科目名、表示科目、数値など)が、Inferara のホスティングサービスを経由して、回答するモデル提供事業者に送信されます。締め処理そのものはお客様のコンピュータ上で実行されます。対象会社のデータを会話に含めないようにするには、コマンドをご自身で実行してください。下記の「自分で実行する」をご覧ください。

財務報告パッケージの場合、案は推測ではありません。財務諸表は自らの計算式を示しているため、各科目マッピングは勘定科目を表示科目に載せている SUMIF から、各小計はその上の SUM から読み取ります。QuickBooks から書き出したままの財務諸表エクスポートには、科目マッピングが含まれていません。その場合、案では各エクスポートの区分から科目マッピングを推定します。QuickBooks の表示科目名を、投資家に示している名称に置き換えることが主な REVIEW 項目になります。

定義ファイルとは

定義ファイル(spec)は会社ごとに 1 つの YAML ファイルで、.haruno/skills/QuickBooksCFO/specs/<client>.yaml にあります。その会社の帳簿が財務諸表にどう対応するかは、すべてこのファイルに記録されます。どの勘定科目がどの表示科目に集計されるか、各小計がどう構成されるか、どの行を本来の符号と逆に表示するかに加え、会社名、表示単位、報告通貨、重要性、そしてお客様が定めた後は会計方針も記録します。人が読めるようにプレーンテキストで書かれており、定義ファイルと Excel ブックがあれば締め処理を再現できます。

REVIEW リスト

ブックからは分からないのは、判断を要する事柄です。そうした質問は、案の冒頭に # REVIEW: という見出しのリストとして示されます。必ず読んでください。これがマッピングのすり合わせであり、会社ごとに一度だけ行います。典型的な項目は次のとおりです。

  • 何を重要とみなすか(財務諸表の表示単位である千ドルではなく、ドル単位で)
  • 照合がないことが想定どおりなのはどの勘定科目か(残高照合資料に明細表がない勘定科目の一覧から選びます)
  • 資産計上の方針:資産計上基準額、減価償却方法、耐用年数
  • 空欄になることが想定される表示科目と、勘定科目番号による分類の仕方
  • 確認が必要な読み取り結果:表紙シートから読み取った会社名、表示単位、そして貸借対照表の最下部にあるラベルのない行を CHECK 行(ゼロになるはずの突合用の行)と読み取ったこと

読み取り結果に同意しても、何も書き込まれません。書き込まれるのは修正だけです。表示単位は必ず確認してください。古いまま残っている「('000)」の単位表示を正しいものとして受け入れると、すべての成果物のすべての数値が 1,000 倍ずれます。回答は普段の言葉で書きます。

text
重要性は 1,000 ドルです。現預金の照合は QuickBooks で行っています。

ハルノは両方の回答を記録し、差分を表示します。「現預金の照合は QuickBooks で行っています」は適用除外です。照合漏れのチェックに対して受け入れた例外であり、科目マッピングではありません。その会社に締め済みの月があれば、ハルノはその適用除外の対象となる勘定科目を表示します。最初の締め処理の前は、突き合わせる対象がまだありません。どの勘定科目も対象としない適用除外は、次の締め処理で unused_exemption として報告されます。

最初の締め処理の前に、リストのすべてに回答する
リストの半分しか回答しないまま締めると、本当に対応すべき検出事項が、残高照合資料にもともと明細表を作る予定のなかった勘定科目についての検出事項に埋もれてしまいます。

お客様に代わって決めないこと

数値の中には、事業についての判断を書き留めたものがあり、それを定められるのは会社だけです。帳簿に記載のない値(重要性、定額法、エクスポートに通貨の記載がない場合の USD)を案が書き込んでいる場合は、確認または修正すべき既定値として扱ってください。お客様が定めていない資産計上基準額や耐用年数を、ハルノが記録することはありません。ハルノは会社の明細表をお客様が定めた内容と照らしてチェックします。アシスタントがこれらをお客様に代わって答えることはありません。

方針ハルノが行うこと
重要性案には明示的な既定値が入ります。読み取った値ではなく修正すべき数値として、REVIEW リストで示されます。
資産計上基準額案には記載しません。お客様が書き込むまで、基準額に照らした報告は一切行いません。
耐用年数案には記載しません。固定資産台帳にある耐用年数は、明細表の側で選んだ値です。それを方針として引用し直すと、明細表を明細表自身と照らしてチェックすることになります。
減価償却方法計算できるのは定額法だけのため、案には定額法を記載し、REVIEW リストで示します。その他の方法は、誤った計算でチェックするのではなく、拒否します。
通貨エクスポートが明記する通貨を読み取ります。何も明記されていない場合は USD とし、為替換算は一切行いません。

方針が定められていなくても、schedule_drift は判断を必要としない半分を実行します。固定資産台帳から導かれる明細表と総勘定元帳との比較です。ほかに次の 3 つの判断も、お客様に委ねられます。突出した月が前払いかどうか、残高が別の場所で照合されているかどうか、そしてロック済みの月のロックを解除する理由です。

マッピングのすり合わせ

新しい勘定科目が追加されたり、科目マッピングが少しずつずれたりします。どの表示科目にも対応付けられていない勘定科目は、残高があれば unmapped_active_account(重大度「高」)、これまでずっとゼロであれば unmapped_empty_account(重大度「低」)として締め処理で報告されます。そこからの流れは常に同じです。ハルノが案を示し、お客様が確認します。

  1. ハルノはその検出事項を突合の結果と照らし合わせます。CHECK 行のずれがちょうどその勘定科目の残高と同じなら、原因は対応付けられていない勘定科目です。1 つの科目マッピングで、未対応付けの勘定科目の検出事項と突合の検出事項の両方が解消します。
  2. 勘定科目の名称、番号の範囲、前後の勘定科目から表示科目を提案し、その理由も示します。
  3. お客様が確認すると、ハルノは科目マッピングを記録し、その会社を再度締めます。その会社を以前に締めたことがある場合、お客様が理由を示すまでその締め処理は拒否されます。下記の「締め処理が拒否されるとき」をご覧ください。

判断を変更する

text
1450 Deposits Receivable は Other assets に入れてください。

ハルノはこれを、スプレッドシートの編集としてではなく、確認できる YAML として次のように提案します。

yaml
mappings:
  "1450": "Other assets"

承認済みの科目マッピングは、ブック自体の科目マッピング列が空欄のまま、または誤ったままの状態で再度取り込んでも維持されます。ハルノはファイル側の値に戻すのではなく食い違いを報告し、お客様が承認した科目マッピングを削除することはありません。

適用除外は科目マッピングではありません

適用除外で取り下げられるのは、1 つの問いだけです。この残高はどこで照合されているのか、この行はなぜ空欄なのか、この突出は前払いなのか、といった問いです。照合の適用除外によって、その勘定科目がいずれかの財務諸表に載るわけではありません。そのため、その残高はどこにも表示されないままで、unmapped_active_account は引き続きそれを報告します。また、総勘定元帳と一致しない明細表は、どの科目マッピングでも解決しません。その例外は実在する問題です。

回答はコマンドで記録し、手作業では編集しない
ハルノは REVIEW への回答と科目マッピングの変更を answer コマンド(ingest.py answer。「自分で実行する」に記載)で記録し、定義ファイルを手作業で編集することはありません。手作業で編集すると、REVIEW リストとそのコメントが失われ、定義ファイルが読み込めなくなることがあり、承認した判断を後からたどれなくなります。回答に必要な値を渡す answer のフラグがない場合、ハルノはその旨を伝え、その 1 か所の編集をお客様ご自身で行うよう依頼します。

月を締める

オンボーディングの後は、毎月、定義ファイルについてのやり取りなしで同じパイプラインを実行します。

  1. その月の Excel ブックを workbooks/<client>/ に追加します。
  2. ハルノに月の締めを依頼します。
    text
    Acme の月次締めをお願いします。新しいブックが入っています。
  3. ハルノは 1 つのコマンドで締め処理を実行します。ブックを読み込み、承認済みの定義ファイルを適用し、チェックを実行し、財務諸表パッケージと残高照合資料を書き出し、月をロックして、ダッシュボードを更新します。
  4. 何かが配布される前に、ハルノが検出事項をお客様に伝えます。財務諸表パッケージと残高照合資料は、検出事項の有無にかかわらず書き出されます。検出事項は、それらを送る前に何を解決すべきかを示します。

締めレポート

締め処理は、会社ごとに 1 つのレポートを出力します。

分かること
1 行目会社名、締めが完了したかどうか、読み込んだブック、検出事項と質問事項の件数
read but not appliedどの定義ファイルのセクションにも指定されていない各ファイル(ファイル名で表示)
RESTATED とその他の注記再送されたブックによって修正再表示された数値と、ファイルと定義ファイルの間で食い違う科目マッピング
[high], [medium], [low]1 行に 1 件の検出事項:重大度、チェック、対象、詳細
?1 行に 1 件の質問事項(prepaid_candidate など)。質問はしますが、検出事項には数えません
re-openedお客様が示した理由でロックを解除した月
lockedロックした月と締めステータス。未解決のチェックの名前も示します
restated変動した数値の件数。それぞれが修正履歴の 1 行になります
wrote書き出した各ファイル:財務諸表パッケージ、残高照合資料、投資家向けレポート、修正履歴、ダッシュボード

ロックの行は次のようになります(架空のデモデータ)。

text
locked 2023-02-28 … 2026-06-30 (41 periods) — reported with exception: 3 unresolved finding(s) (presentation_tieout, recon_exceptions, unmapped_active_account); re-opening one needs a reason (`ingest.py reopen`)

検出事項がある締め処理も、成功した締め処理です。「clean」とは、重大度「高」「中」の検出事項がないことを指します。詳しくは「重大度」をご覧ください。

締め処理が拒否されるとき

報告した月はロックされます。ロック済みの月の数値を変更、削除、または追加することになる取り込みは、その会社の締め処理を止めます。その会社の元帳には何も書き込まれず、その会社のレポートも更新されません。同じ実行で締める他の会社の処理は続行します。締め処理が止まる対象には、承認済みの科目マッピングや、表示科目の集計方法の変更も含まれます。どちらも、ブックの数値が変わっていなくても財務諸表の数値を変えるためです。ロック済みの月について修正したエクスポートも同様です。拒否のメッセージには、変動することになる月と数値が変更前後の両方の値とともに示されます。最初の 12 件は個別に示し、残りは件数だけを示します。それらの月のロックを解除するコマンドも出力されます。同じ数値を示す取り込みでは何も表示されないため、変更のない締め処理を再実行しても影響はありません。

text
2023-02-28 … 2026-06-30 are CLOSED, and this import would change what have
been reported for them. Nothing was written.

  2023-02-28  presentation  BS line 'CHECK': -6,600.00 -> 0.00
  2023-02-28  presentation  BS line 'Other assets': 19,500.00 -> 26,100.00
  2023-02-28  presentation  BS line 'TOTAL ASSETS': 5,394,868.29 -> 5,401,468.29

架空のデモデータによるデモの締め処理からの抜粋です。41 か月分がロック済みの会社で、上記の 1450 の科目マッピングを承認した後のものです。

理由を示す

ハルノは拒否の内容を伝えて、そこで止まります。ハルノが自らの判断で月のロックを解除したり、お客様に代わって理由を書いたりすることはありません。理由は、それによって変更された数値と並べて恒久的に保存されるため、お客様ご自身の文章である必要があります。先に進むには、理由を伝えてください。

text
1450 が表示科目に対応付けられていなかったため、Other assets として承認しました。

これにより、拒否のメッセージで示された月だけのロックが解除され、各月に理由が記録されたうえで、再び締められます。拒否のメッセージに表示される角かっこ付きの例のようなプレースホルダーは、拒否されます。理由を示さなければ、何も変わりません。数値が変動した場合、以降のすべての財務諸表パッケージに「Restated periods」(修正再表示された期間)の表が含まれ、変動した各数値は修正履歴の 1 行になります。詳しくは「ロック」をご覧ください。

財務諸表が一致しない月もロックされます

財務諸表が一致しない月でも、拒否はされません。報告済みの他の月と同じようにロックされ、ロックには「fully reconciled」ではなく「reported with exception」として、未解決のチェックの名前とともに記録されます。ロックは、帳簿に対する判定ではありません。詳しくは「締めステータス」をご覧ください。

その他の拒否は質問になります

締め処理は、推測しなければ読み取れない入力も拒否し、その理由を示します。たとえば、目次ページに異なる 2 つの月の日付が記載された残高照合資料です。ハルノはお客様に質問し、その回答を定義ファイルに記録します。エラーを消すために会社の Excel ブックを編集することはありません。

複数の会社

1 つのワークスペースに、レビューするすべての会社をまとめられます。会社ごとに workbooks/ の下のフォルダ 1 つと定義ファイル 1 つがあり、全社を横断するポートフォリオダッシュボードが 1 つあります。複数の会社を一度にオンボーディングするには、次のように依頼します。

text
これらはクライアントのスプレッドシートです。workbooks/ 内のものをすべて取り込んでください。フォルダ 1 つにつきクライアント 1 社です。各社について、ブックを読み込み、科目マッピングを提案し、何かを適用する前に REVIEW の注記を見せてください。その後、月を締めてダッシュボードを更新してください。
  • まずすべての定義ファイルの案を作成し、まとめて提示します。複数の案に共通する REVIEW 項目は、一度だけ質問します。
  • 共通の回答は各定義ファイルに書き込まれます。1 社だけの例外は、その会社の定義ファイルにだけ残ります。
  • すべての会社が 1 回の実行で、それぞれ独立して締められます。そのため、形式に問題のあるブックがあっても、失敗するのはそのブックだけです。
  • ダッシュボードは最後に 1 回だけ更新されます。1 社を締めるだけでも、ポートフォリオ全体が更新されます。
  • ダッシュボードでは、1 社につき定義ファイルは 1 つです。2 つの定義ファイルが同じ会社を指している場合、ダッシュボードはそのうちの一方から作成されます。締め処理は、どちらのファイルを採用したか、その理由、どちらを除外したかを示します。

会社間で為替換算は行いません。ポートフォリオの合計に、異なる通貨で報告している会社を合算することもありません。詳しくは「ポートフォリオビュー」をご覧ください。

自分で実行する

パイプラインはワークスペース内にある通常の Python スクリプトで、お客様のものです。ワークスペースのフォルダで次を実行します。

bash
# Excel ブックを取り込まずに読み取る
python3 .haruno/skills/QuickBooksCFO/scripts/ingest.py inspect "workbooks/acme/financial-package.xlsx"

# クライアント自身のブックから定義ファイルの案を作成し、REVIEW ブロックを読む
python3 .haruno/skills/QuickBooksCFO/scripts/ingest.py propose-spec "workbooks/acme/financial-package.xlsx" --spec-name acme --out .haruno/skills/QuickBooksCFO/specs/acme.yaml

# REVIEW 項目には、ファイルを編集せず answer コマンドで回答する
python3 .haruno/skills/QuickBooksCFO/scripts/ingest.py answer --spec .haruno/skills/QuickBooksCFO/specs/acme.yaml --materiality 1000

# 締め処理:ステージング、元帳、チェック、財務諸表、残高照合資料、ダッシュボード
python3 .haruno/skills/QuickBooksCFO/scripts/close.py --workspace . --client acme

必要なのは標準的な Python 3 だけです。インストールも、アカウントも、ネットワークも必要ありません。読み込むものも書き出すものも、すべてワークスペースのフォルダ内にとどまります。実際のエクスポートのファイル名にはスペースやかっこが含まれるため、ファイルパスはすべて引用符で囲んでください。ロックで拒否されたときに先へ進むには、締め処理のコマンドに --reopen-reason とお客様ご自身の文章で書いた理由を追加します。すべての会社を締めるには、--client の代わりに --all を使います。

自分で実行する理由:締め処理はお客様のコンピュータ上で実行されます。締め処理が対象会社のデータを送信することはありません。アシスタントを使っているかどうかにかかわらず同じです。一方、会話では、お客様が送った内容が送信されます。お客様が入力した内容とツールが出力した内容(勘定科目名、表示科目、数値、検出事項)は、Inferara のホスティングサービスを経由して、回答するモデル提供事業者に送られます。実際の帳簿に使う前に、お客様がクライアントと結んでいる守秘義務の条件に照らして、この点を確認してください。会話による送信を避けながら同じ利点を得るには、これらのコマンドをご自身で実行し、アシスタントは対象会社のデータを含まない作業にだけ使ってください。詳しくは「データの行き先」をご覧ください。

次のステップ

締め処理が検出し、表示し、記録する内容について、さらに詳しく見ていきましょう。