Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

tear-sheet

Kensho LLM-ready API MCPサーバーを通じてS&P Capital IQデータを活用し、プロフェッショナルなカンパニーティアシートを生成します。ティアシート、会社概要、ファクトシート、企業スナップショットなどの作成依頼や、特定の企業名・ティッカーシンボルが言及された際にトリガーされるほか、株式リサーチサマリー、M&A企業プロファイル、営業・BD向けミーティング準備資料など、企業の財務情報を簡潔にまとめたドキュメントの作成にも対応します。エクイティリサーチ、投資銀行/M&A、コーポレートディベロップメント、セールス/BDの4つのオーディエンスタイプをサポートし、上場・未上場企業の両方に対応しています。

description の原文を見る

Generate professional company tear sheets using S&P Capital IQ data via the Kensho LLM-ready API MCP server. Use this skill whenever the user asks for a tear sheet, company one-pager, company profile, fact sheet, company snapshot, or company overview document — especially when they mention a specific company name or ticker. Also trigger when users ask for equity research summaries, M&A company profiles, corporate development target profiles, sales/BD meeting prep documents, or any concise single-company financial summary. This skill supports four audience types: equity research, investment banking/M&A, corporate development, and sales/business development. If the user doesn't specify an audience, ask. Works for both public and private companies.

SKILL.md 本文

ファイナンシャルティアシートジェネレータ

S&P Global MCP ツール経由で S&P Capital IQ からライブデータを取得し、結果をプロフェッショナルな Word ドキュメントとしてフォーマットすることで、オーディエンス固有の企業ティアシートを生成します。

スタイル設定

以下は妥当なデフォルトです。貴社のブランドに合わせてカスタマイズするには、このセクションを変更してください。一般的な変更には、カラーパレットの置き換え、フォント変更(Calibri は多くの銀行の標準)、免責事項テキストの更新が含まれます。

色:

  • プライマリ(ヘッダーバナーの背景、セクションヘッダーのテキスト): #1F3864
  • アクセント(署名セクションのハイライト): #2E75B6
  • テーブルヘッダー行の塗りつぶし: #D6E4F0
  • テーブル交互行の塗りつぶし: #F2F2F2
  • テーブルの境界線: #CCCCCC
  • ヘッダーバナーのテキスト: #FFFFFF

タイポグラフィ(サイズはハーフポイント単位で docx-js 用):

  • フォントファミリー: Arial
  • 企業名: 18pt 太字 (size: 36)
  • セクションヘッダー: 11pt 太字 (size: 22)、プライマリ色
  • 本文: 9pt (size: 18)
  • テーブルのテキスト: 8.5pt (size: 17)
  • フッター/免責事項: 7pt イタリック (size: 14)
  • テンプレート固有のオーバーライドは各リファレンスファイルの「フォーマッティングノート」で指定されています。

企業ヘッダーバナー:

  • ヘッダーは紺色(#1F3864)のバナーで、ページ全幅に及び、企業名は白で表示されます。
  • バナーの下に、キーバリューペアはページ全幅に及ぶ 2 列のボーダーレステーブルにレンダリングされる必要があります。 左列:企業識別子(ティッカー、本社、設立年、従業員数、セクター)。右列:財務識別子(時価総額、EV、株価、発行済み株式数)。各セルには太字のラベルと通常の太さの値が同じ行に含まれます(例:「Market Cap $124.7B」)。すべてのフィールドを単一の列に左寄せしないでください。これはスペースを浪費し、不適切に見えます。2 列配置は、プロフェッショナルなティアシートをデフォルトドキュメントから区別する最も重要な視覚信号です。
    • 実装: borders: none および shading: none ですべてのセルに 2 列のテーブルを作成します。列の幅を 50% ずつ設定します。左列フィールド(ティッカー、本社、設立年、従業員数)を左セルの別々の段落として配置します。右列フィールド(時価総額、EV、株価、発行済み株式数)を右セルに配置します。各フィールドは単一の段落です:ラベル用の太字の実行、値用の通常の実行。
    • 各列の特定のフィールドはオーディエンスによって異なります。リファレンスファイルのヘッダー仕様を参照してください。原則は常に:ページ全体に広げる、左に集めない。
  • ヘッダーキーバリューブロックにはボーダー付きテーブルを使用しないでください。 ボーダー付きテーブルは財務データ専用に予約されています。
  • ヘッダー内のキーメトリクス(時価総額、EV、株価)は、別のボーダー付きテーブルではなく、インラインキーバリューペアとして表示される必要があります。

セクションヘッダー:

  • 各セクションヘッダーの直下には、水平線(細線、#CCCCCC、0.5pt)が付き、セクション間のクリーンな視覚的分離を作成します。
  • ルールをヘッダー段落自体の下の境界線としてレンダリング — ルール用の別の段落要素を挿入しないでください。別の段落は独自の前後のスペーシングを持ち、セクションタイトルの下に過度な空白を引き起こします。
  • 実装: docx-js で、セクションヘッダー段落に下の境界線を適用します(paragraph.borders.bottom = { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" })。doc.addParagraph() を使用した別の水平線要素を使用しないでください。thematicBreak を使用しないでください。ボーダーはヘッダー段落自体に 0pt の後のスペーシングで配置される必要があるため、ルールはヘッダーテキストに密着します。
  • スペーシング:ヘッダー段落の前 12pt、後 0pt、次のコンテンツ要素の前 4pt。

箇条書きフォーマッティング:

  • すべてのティアシートタイプ全体で、すべての箇条書きコンテンツに単一の箇条書き文字(•)を使用します。•、-、▸、または番号付きリストを混在させないでください。
  • シンテーシス/分析箇条書き(Earnings Highlights、Strategic Fit、Integration Considerations、Conversation Starters):左インデント 360 DXA(0.25")と箇条書き文字用のハンギングインデント付きのインデントブロックスタイルフォーマット。これらは本文からビジュアル的にオフセットされる必要があります。解釈的なコンテンツであり、データテーブルと散文段落と異なるように見える必要があります。
  • リレーションシップセクション内の情報箇条書き: 標準本文インデント(180 DXA)、ハンギングインデントなし。
  • 任意の箆書きセクションに左ボーダーアクセントを適用しないでください。 左ボーダースタイリングは docx-js で一貫性なくレンダリングされ、視覚的な人工物を作成します。インデント付きとテキストサイズの差別化を使用して、署名セクションの代わりに区別してください。

テーブル(財務データのみ):

  • ヘッダー行:テーブルヘッダー塗りつぶし(#D6E4F0)と太字の濃いテキスト
  • 本文行:交互の白/テーブル交互塗りつぶし(#F2F2F2)
  • 境界線:テーブル境界色(#CCCCCC)、細い(BorderStyle.SINGLE、サイズ 1)
  • セルのパディング:上下 40 DXA、左右 80 DXA
  • すべての数値列を右寄せ
  • 常に ShadingType.CLEAR を使用(SOLID は使用しないでください。SOLID は黒い背景を引き起こします)

レイアウト:

  • US Letter 縦向き、0.75 インチマージン(全側 1080 DXA)

数値フォーマッティング:

  • 通貨:USD。会社の売上が $50B を超えない限り、百万で表示(それ以上の場合は十億、小数点第1位)。単位をラベル列ヘッダー内に付与(例:「Revenue ($M)」)、個々のセル内ではなく。
  • テーブルセル:カンマ付きのプレーン数値、ドル記号なし。 例:収益セルは「4,916」ではなく「$4,916」と表示されます。列ヘッダーが単位を示します。
  • 会計年度:実際の年(FY2022、FY2023、FY2024)、相対ラベルは決してない(FY-2、FY-1)。
  • 負の数:括弧、例:(2.3%)
  • パーセンテージ:小数点第1位
  • 大きな数字:千の区切りとしてカンマを使用

フッター(インライン本文の下ではなく、ドキュメントフッター): ソース属性と免責事項をインライン本文の下ではなく、実際のドキュメントフッター(すべてのページで繰り返される)に配置します。フッターはすべてのページで正確に 2 行、中央揃えです:

  • 1 行目:「Data: S&P Capital IQ via Kensho | Analysis: AI-generated | [Month Day, Year]」
  • 2 行目:「For informational purposes only. Not investment advice.」
  • スタイル:7pt イタリック、中央揃え、#666666 テキスト色
  • このフッターテキストは同じ企業のすべてのティアシートタイプで同一である必要があります。オーディエンスによって単語を変えないでください。
  • このフッターはすべてのティアシート、すべてのオーディエンスタイプ、すべてのページで必須です。 省略しないでください。

コンポーネント関数

これらの正確な関数を使用してドキュメント要素を作成する必要があります。カスタム docx-js スタイリングコードを書かないでください。 これらの関数を生成された Node スクリプトにコピーして呼び出してください。上記のスタイル設定散文はドキュメントとして残ります。これらの関数は実装メカニズムです。

const docx = require("docx");
const {
  Document, Paragraph, TextRun, Table, TableRow, TableCell,
  WidthType, AlignmentType, BorderStyle, ShadingType,
  Header, Footer, PageNumber, HeadingLevel, TableLayoutType,
  convertInchesToTwip
} = docx;

// ── Color constants ──
const COLORS = {
  PRIMARY: "1F3864",
  ACCENT: "2E75B6",
  TABLE_HEADER_FILL: "D6E4F0",
  TABLE_ALT_ROW: "F2F2F2",
  TABLE_BORDER: "CCCCCC",
  HEADER_TEXT: "FFFFFF",
  FOOTER_TEXT: "666666",
};

const FONT = "Arial";

// ── 1. createHeaderBanner ──
// Returns an array of docx elements: [banner paragraph, key-value table]
function createHeaderBanner(companyName, leftFields, rightFields) {
  // leftFields / rightFields: arrays of { label: string, value: string }
  const banner = new Paragraph({
    children: [
      new TextRun({
        text: companyName,
        bold: true,
        size: 36, // 18pt
        color: COLORS.HEADER_TEXT,
        font: FONT,
      }),
    ],
    shading: { type: ShadingType.CLEAR, color: "auto", fill: COLORS.PRIMARY },
    spacing: { after: 0 },
    alignment: AlignmentType.LEFT,
  });

  function buildCellParagraphs(fields) {
    return fields.map(
      (f) =>
        new Paragraph({
          children: [
            new TextRun({ text: f.label + "  ", bold: true, size: 18, font: FONT }),
            new TextRun({ text: f.value, size: 18, font: FONT }),
          ],
          spacing: { after: 40 },
        })
    );
  }

  const noBorder = { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
  const noBorders = { top: noBorder, bottom: noBorder, left: noBorder, right: noBorder };
  const noShading = { type: ShadingType.CLEAR, color: "auto", fill: "FFFFFF" };

  const kvTable = new Table({
    rows: [
      new TableRow({
        children: [
          new TableCell({
            children: buildCellParagraphs(leftFields),
            width: { size: 50, type: WidthType.PERCENTAGE },
            borders: noBorders,
            shading: noShading,
          }),
          new TableCell({
            children: buildCellParagraphs(rightFields),
            width: { size: 50, type: WidthType.PERCENTAGE },
            borders: noBorders,
            shading: noShading,
          }),
        ],
      }),
    ],
    width: { size: 100, type: WidthType.PERCENTAGE },
  });

  return [banner, kvTable];
}

// ── 2. createSectionHeader ──
// Returns a single Paragraph with bottom border rule
function createSectionHeader(text) {
  return new Paragraph({
    children: [
      new TextRun({
        text: text,
        bold: true,
        size: 22, // 11pt
        color: COLORS.PRIMARY,
        font: FONT,
      }),
    ],
    spacing: { before: 240, after: 0 }, // 12pt before, 0pt after
    border: {
      bottom: { style: BorderStyle.SINGLE, size: 1, color: COLORS.TABLE_BORDER },
    },
  });
}

// ── 3. createTable ──
// headers: string[], rows: string[][], options: { accentHeader?, fontSize? }
function createTable(headers, rows, options = {}) {
  const fontSize = options.fontSize || 17; // 8.5pt default
  const headerFill = options.accentHeader ? COLORS.ACCENT : COLORS.TABLE_HEADER_FILL;
  const headerTextColor = options.accentHeader ? COLORS.HEADER_TEXT : "000000";

  const cellBorders = {
    top: { style: BorderStyle.SINGLE, size: 1, color: COLORS.TABLE_BORDER },
    bottom: { style: BorderStyle.SINGLE, size: 1, color: COLORS.TABLE_BORDER },
    left: { style: BorderStyle.SINGLE, size: 1, color: COLORS.TABLE_BORDER },
    right: { style: BorderStyle.SINGLE, size: 1, color: COLORS.TABLE_BORDER },
  };

  const cellMargins = { top: 40, bottom: 40, left: 80, right: 80 };

  function isNumeric(val) {
    if (typeof val !== "string") return false;
    const cleaned = val.replace(/[,$%()]/g, "").trim();
    return cleaned !== "" && !isNaN(cleaned);
  }

  // Header row
  const headerRow = new TableRow({
    children: headers.map(
      (h) =>
        new TableCell({
          children: [
            new Paragraph({
              children: [
                new TextRun({
                  text: h,
                  bold: true,
                  size: fontSize,
                  color: headerTextColor,
                  font: FONT,
                }),
              ],
            }),
          ],
          shading: { type: ShadingType.CLEAR, color: "auto", fill: headerFill },
          borders: cellBorders,
          margins: cellMargins,
        })
    ),
  });

  // Data rows with alternating shading
  const dataRows = rows.map((row, rowIdx) => {
    const fill = rowIdx % 2 === 1 ? COLORS.TABLE_ALT_ROW : "FFFFFF";
    return new TableRow({
      children: row.map((cell, colIdx) => {
        const align = colIdx > 0 && isNumeric(cell)
          ? AlignmentType.RIGHT
          : AlignmentType.LEFT;
        return new TableCell({
          children: [
            new Paragraph({
              children: [
                new TextRun({ text: cell, size: fontSize, font: FONT }),
              ],
              alignment: align,
            }),
          ],
          shading: { type: ShadingType.CLEAR, color: "auto", fill: fill },
          borders: cellBorders,
          margins: cellMargins,
        });
      }),
    });
  });

  return new Table({
    rows: [headerRow, ...dataRows],
    width: { size: 100, type: WidthType.PERCENTAGE },
  });
}

// ── 4. createBulletList ──
// items: string[], style: "synthesis" | "informational"
function createBulletList(items, style = "synthesis") {
  const indent =
    style === "synthesis"
      ? { left: 360, hanging: 180 }   // 360 DXA left, hanging indent for bullet
      : { left: 180 };                 // 180 DXA, no hanging

  return items.map(
    (item) =>
      new Paragraph({
        children: [
          new TextRun({ text: "•  ", font: FONT, size: 18 }),
          new TextRun({ text: item, font: FONT, size: 18 }),
        ],
        indent: indent,
        spacing: { after: 60 },
      })
  );
}

// ── 5. createFooter ──
// date: string (e.g., "February 23, 2026")
function createFooter(date) {
  return new Footer({
    children: [
      new Paragraph({
        children: [
          new TextRun({
            text: `Data: S&P Capital IQ via Kensho | Analysis: AI-generated | ${date}`,
            italics: true,
            size: 14, // 7pt
            color: COLORS.FOOTER_TEXT,
            font: FONT,
          }),
        ],
        alignment: AlignmentType.CENTER,
      }),
      new Paragraph({
        children: [
          new TextRun({
            text: "For informational purposes only. Not investment advice.",
            italics: true,
            size: 14,
            color: COLORS.FOOTER_TEXT,
            font: FONT,
          }),
        ],
        alignment: AlignmentType.CENTER,
      }),
    ],
  });
}

生成されたスクリプトでの使用:

  1. 上記のすべての関数と定数を生成された Node.js スクリプトにコピー
  2. バナー段落とテーブルを手動で構築する代わりに、createHeaderBanner(...) を呼び出し
  3. すべてのセクションタイトルに対して createSectionHeader(...) を呼び出し。段落ボーダーを手動で設定しないでください
  4. すべてのテーブルデータに対して createTable(...) を呼び出し — 財務サマリー、取引コンプ、M&A アクティビティ、リレーションシップテーブル、資金調達履歴など。M&A アクティビティテーブル(IB/M&A テンプレート)に対して { accentHeader: true } を渡します。非数値テーブル(例:リレーションシップ、所有権)の場合、関数は正しく機能します。数値値を含むセルのみを右寄せします。
  5. 決算ハイライト、戦略的適合、統合上の考慮事項、会話スターターに対して createBulletList(items, "synthesis") を呼び出し
  6. リレーションシップエントリに対して createBulletList(items, "informational") を呼び出し
  7. createFooter(date) を Document コンストラクタの footers.default プロパティに渡す

これらの関数が排除するもの:

  • 黒い背景テーブル(すべての場所で ShadingType.CLEAR を実装)
  • セクションヘッダーの下の別の水平線段落(段落自体の border.bottom を実装)
  • ヘッダーのボーダー付きキーバリューテーブル(borders: none を実装)
  • 一貫性のない箆書きスタイル(• 文字のみを実装)
  • 不足しているフッター(正確なフッター構造を提供)

ワークフロー

ステップ 1:入力の識別

進む前に、最大 4 つのことを収集します:

  1. 企業 — 名前またはティッカー。ティッカーのみの場合、初期クエリで完全な企業名を解決します(例:企業情報ツールを使用)。
  2. オーディエンス — 4 つのタイプのいずれか:
    • Equity Research — 投資を評価する買い側/売り側アナリスト向け
    • IB / M&A — トランザクション背景で企業をプロファイリングするバンカー向け
    • Corp Dev — 買収対象を評価する内部戦略チーム向け
    • Sales / BD — クライアントミーティングの準備をする商業チーム向け
  3. 比較企業(オプション)— ユーザーが特定のコンプを念頭に置いている場合は、それらをメモします。それ以外の場合、スキルは S&P Global データから同業他社を識別します。これは Equity Research、IB/M&A、および Corp Dev ティアシートの場合に重要です。
  4. ページ長プリファレンス(オプション)— デフォルトはオーディエンスによって異なります(以下を参照)が、ユーザーはオーバーライドできます。

ユーザーがオーディエンスを指定しない場合は、確認してください。

ステップ 2:オーディエンス固有のリファレンスを読む

このスキルのディレクトリから対応するリファレンスファイルを読みます:

  • Equity Research → references/equity-research.md
  • IB / M&A → references/ib-ma.md
  • Corp Dev → references/corp-dev.md
  • Sales / BD → references/sales-bd.md

各リファレンスはセクション、クエリプラン、フォーマットガイダンス、およびページ長デフォルトを定義します。

ステップ 3:S&P Global MCP 経由でデータを取得

最初に: 中間ファイルディレクトリを作成します:

mkdir -p /tmp/tear-sheet/

S&P Global MCP ツール(Kensho LLM-ready API とも呼ばれる)を使用します。Claude は、財務データ、企業情報、市場データ、コンセンサス予想、決算トランスクリプト、M&A トランザクション、およびビジネスリレーションシップの構造化ツールにアクセスできます。各リファレンスファイルのクエリプランは、各セクションに対して取得するデータを説明します。これらを、会話で利用可能な適切な S&P Global ツールにマップします。

各クエリステップの後、すぐに取得したデータをリファレンスファイルのクエリプランで指定された中間ファイルに書き込みます。 書き込みを延期しないでください。ディスクに書き込まれたデータは、長い会話でのコンテキスト低下から保護されます。

クエリ戦略: 各リファレンスファイルには、4~6 のデータ取得ステップを備えたクエリプランが含まれています。これらは開始点であり、厳密な制約ではありません。最小呼び出し数よりもデータの完全性を優先します:

  • 常に 4 会計年度の財務データを取得します。3 年のみが表示されている場合でも。4 番目(最も早い)年は、表示されている最初の年の YoY 収益成長を計算するために必要です。これがないと、最初の年の成長率は「N/A」を示します。これは設計選択ではなく、データの欠落のように見えます。
  • クエリプランを記述どおりに実行し、必要なデータに一致する S&P Global ツールを使用します。
  • ツール呼び出しが不完全な結果を返す場合、代替ツールまたはより狭いクエリを試してください。例えば、企業サマリーにセグメント詳細が含まれていない場合、セグメントツールを直接試してください。
  • ターゲットを絞ったリトライ後もデータポイントが返されない場合は、先に進みます。「N/A」または「Not disclosed」でラベル付けします。
  • データを捏造しないでください。ツールが番号を返さない場合、トレーニング知識から推定しないでください。

ユーザー指定のコンプ: ユーザーが比較企業を提供した場合、各コンプの財務とマルチプルを明示的にクエリします。コンプが提供されていない場合は、ツールが返すピアデータを使用するか、セクターツールを使用して同業他社を識別します。

オプションのユーザーコンテキスト: ユーザーが自然に提供するその他のコンテキストに耳を傾けてください。彼らが買収者が誰であるかを言及した場合(「私たちのプラットフォームのためにこれを見ています」)、彼らが何を販売しているか(「私たちは銀行にデータ分析を販売します」)、または起こりそうな買い手(「これは Salesforce または Microsoft にとって興味深いでしょう」)を取り入れます。このコンテキストを関連する合成セクション(戦略的適合、会話スターター、取引の角度)に組み込みます。この情報を促さないでください。提供されている場合は使用してください。

非公開企業の処理: CIQ には非公開企業データが含まれるため、同じようにクエリします。ただし、より疎な結果を期待してください。非公開企業向けに生成する場合:

  • スキップ:株価、52 週レンジ、ベータ、株式パフォーマンス、コンセンサス予想、取引コンプ
  • 活用:ビジネス概要、リレーションシップ、所有構造、利用可能な財務
  • 「Private Company」をヘッダーに目立つように表示

ステップ 3b:導出メトリクスを計算

すべてのデータ収集が完了し、中間ファイルが書き込まれた後、単一の専用パスですべての導出メトリクスを計算します。これは計算のみのステップです。新しい MCP クエリはありません。

すべての中間ファイルをコンテキストに読み戻し、次のように計算します:

  • マージン: Gross Margin %、EBITDA Margin %、FCF Margin %、Operating Margin %
  • 成長率: YoY 収益成長、YoY セグメント収益成長、YoY EPS 成長
  • 効率比率: FCF 転換(FCF/EBITDA)、R&D を Revenue の % として、Capex を Revenue の % として
  • 資本構造: Net Debt(Total Debt − Cash & Equivalents)、Net Debt / EBITDA
  • セグメント構成: 各セグメントの収益を統合総収益の % として(Data Integrity Rule 8 に従い、統合収益を分母として使用)

検証(算術検証から移行): この計算パス中に、すべての算術チェックを実施します:

  • マージン計算: EBITDA Margin = EBITDA / Revenue、Gross Margin = Gross Profit / Revenue などを確認します。計算されたマージンが生の数値と一致しない場合、生の成分から計算を使用します。
  • 成長率: YoY growth = (Current − Prior) / Prior を確認します。基礎となる値がある場合は、事前計算された成長率に依存しないでください。
  • セグメント合計: セグメント別の収益を表示している場合、セグメントが総収益に合計することを確認します(丸め許容範囲内)。合計しない場合、不整合な数学を公開するのではなく、総行を省略します。
  • パーセンテージ列: 「% of Total」列が~100% に合計することを確認します。
  • バリュエーション相互チェック: EV と EV/Revenue の両方を表示している場合、EV / Revenue ≈ 記載されているマルチプルを確認します。

検証が失敗した場合:生の データから再計算してみてください。まだ矛盾している場合は、不正な数値を公開するのではなく、メトリクスを「N/A」としてフラグ付けします。ティアシートの静かな数学エラーは信頼性を破壊します。

結果を /tmp/tear-sheet/calculations.csv に書き込み、列は:metric,value,formula,components

例の行:

metric,value,formula,components
gross_margin_fy2024,72.4%,gross_profit/revenue,"9524/13159"
revenue_growth_fy2024,12.3%,(current-prior)/prior,"13159/11716"
net_debt_fy2024,2150,total_debt-cash,"4200-2050"

ステップ 3c:データファイルの確認

ドキュメントを生成する前に、すべての中間ファイルが存在し、設定されていることを確認します。

各中間ファイルを読み、確認サマリーを出力します:

=== Tear Sheet Data Verification ===
company-profile.txt: ✓ (12 fields)
financials.csv:      ✓ (36 rows)
segments.csv:        ✓ (8 rows)
valuation.csv:       ✓ (5 rows)
calculations.csv:    ✓ (18 rows)
earnings.txt:        ✓ (populated)
relationships.txt:   ⚠ MISSING
peer-comps.csv:      ✓ (12 rows)
================================

ソフトゲート: 現在のオーディエンスタイプに必要なファイルが欠落しているか空の場合、警告を出力しますが、続行します。ティアシートは「N/A」とセクションスキップで欠落データを適切に処理します。ただし、警告により、どのデータが失われたかの可視性が確保されます。

重大なルール:ファイル(会話コンテキストではなく)が、ドキュメント内のすべての数値の単一の情報源です。 ステップ 4 で DOCX を生成する場合、中間ファイルから値を読み込みます。財務データについて会話コンテキストに依存しないでください。

ステップ 4:DOCX としてフォーマット

/mnt/skills/public/docx/SKILL.md を読んで、docx 作成メカニクス(docx-js via Node)を確認します。上記のスタイル設定プラス、リファレンスファイルのセクション固有のフォーマットガイダンスを適用します。

ページ長デフォルト(ユーザーはオーバーライドできます):

  • Equity Research:1 ページ(密度は慣例)
  • IB / M&A:1~2 ページ
  • Corp Dev:1~2 ページ
  • Sales / BD:1~2 ページ

コンテンツがターゲットを超える場合、各リファレンスファイルは最初にカットするセクションを指定します。

出力ファイル名: [CompanyName]_TearSheet_[Audience]_[YYYYMMDD].docx 例:Nvidia_TearSheet_CorpDev_20260220.docx

/mnt/user-data/outputs/ に保存して、ユーザーに提示します。

データ整合性ルール

これらはすべてをオーバーライドします:

  1. S&P Global ツールは財務データの唯一のソースです。 トレーニング知識でギャップを埋めないでください。古い、または間違っている可能性があります。
  2. 見つからないものはラベル付けします。 行を静かに省略するのではなく、「N/A」または「Not disclosed」を使用します。
  3. 日付は重要です。 会計年度末またはレポート期間をメモします。暦年 = 会計年度と想定しないでください。市場データ(株価、時価総額)には「as of」日付が含まれている必要があります。
  4. レポート期間を混在させません。 FY2023 収益と LTM EBITDA がある場合、明確にラベル付けします。
  5. 手動計算よりも MCP で返されたフィールドを優先します。 S&P Global ツールが事前計算されたフィールド(例:正味債務、EBITDA、FCF)を返す場合、成分から計算するのではなく、その値を直接使用します。矛盾を減らすため、ツールが返さない場合にのみ導出メトリクスを手動で計算します。
  6. ティアシートタイプ全体で一貫性を確保します。 同じセッションで同じ企業の複数のティアシートを生成する場合(例えば、エクイティリサーチと IB/M&A)、同じ基礎となるデータポイントはすべての出力で同一の値を生成する必要があります。正味債務、収益、EBITDA、マージン、および成長率は正確に一致する必要があります。レポートごとに独立して再クエリまたは再計算しないでください。同じ取得値を再利用します。
  7. 既知のトランザクション値をダウングレードしません。 M&A ツールがトランザクションの取引価値を返す場合、その値は出力に表示される必要があります。既知の取引価値を「Undisclosed」に置き換えないでください。ツールが本当にトランザクションの値を返さない場合は、「Undisclosed」を使用します。
  8. セグメント割合の分母として統合収益を使用します。 セグメントテーブルの「% of Total」を計算する場合、セグメント収益の合計ではなく、統合総収益(損益計算書に記載)で各セグメントの収益を除算します。セグメントの合計は、セグメント間の排除により、統合収益を超えることが多いあります。統合収益を使用すると、パーセンテージはドキュメントの他の場所に表示される総収益数字と一致します。
  9. 利用可能な場合、常にフォワード(NTM)マルチプルを含めます。 ツールがトレーリングマルチプルとフォワードバリュエーションマルチプルの両方を返す場合、両方が出力に表示される必要があります。フォワードマルチプルは、エクイティリサーチ、IB/M&A、および corp dev オーディエンスの主なバリュエーション参照です。フォワードデータが利用可能な場合は、トレーリングマルチプルのみを表示しません。
  10. S&P Global ツールは経営陣またはマネジメントデータを返しません。 トレーニングデータから経営陣名、役職、またはバイオグラフィの詳細を入力しないでください。これはルール 1 に違反し、古い情報を生成します。テンプレートに管理セクションが表示される場合は、完全に省略します。所有権構造(制度的保有者、インサイダー%、PE スポンサー)は、ツールで返された場合にのみ含まれます。「データ許可」で取得したゲート。

中間ファイルルール

MCP ツールから取得したすべてのデータは、ドキュメント生成前に構造化された中間ファイルに保持される必要があります。これらのファイル(会話コンテキストではなく)がドキュメント内のすべての数値の単一の情報源です。

セットアップ: ステップ 3 の開始時に、作業ディレクトリを作成します:

mkdir -p /tmp/tear-sheet/

クエリ後の書き込みマンデート: 各 MCP クエリステップが完了した後、すぐに取得したデータを適切な中間ファイルに書き込みます。すべてのクエリが終了するまで待たないでください。各リファレンスファイルのクエリプランは、各ステップの後にどのファイルに書き込むかを指定します。

ファイルスキーマ:

ファイルフォーマット列/構造使用者
/tmp/tear-sheet/company-profile.txtキーバリューテキストname、ticker、exchange、HQ、sector、industry、founded、employees、market_cap、enterprise_value、stock_price、52wk_high、52wk_low、shares_outstanding、beta、ownershipすべて
/tmp/tear-sheet/financials.csvCSVperiod,line_item,value,sourceすべて
/tmp/tear-sheet/segments.csvCSVperiod,segment_name,revenue,sourceER、IB、CD
/tmp/tear-sheet/valuation.csvCSVmetric,trailing,forward,sourceER、IB、CD
/tmp/tear-sheet/consensus.csvCSVmetric,fy_year,value,sourceER
/tmp/tear-sheet/earnings.txt構造化テキスト四半期、日付、主要引用、ガイダンス、主要ドライバーER、IB、Sales
/tmp/tear-sheet/relationships.txt構造化テキスト顧客、サプライヤー、パートナー、競合企業(各々が説明説で)IB、CD、Sales
/tmp/tear-sheet/peer-comps.csvCSVticker,metric,value,sourceER、IB、CD
/tmp/tear-sheet/ma-activity.csvCSVdate,target,deal_value,type,rationale,sourceIB、CD
/tmp/tear-sheet/calculations.csvCSVmetric,value,formula,componentsすべて(ステップ 3b で書き込み)

省略形: ER = Equity Research、IB = IB/M&A、CD = Corp Dev、Sales = Sales/BD。

すべてのオーディエンスタイプがすべてのファイルを使用するわけではありません。リファレンスファイルがどのクエリステップが適用されるかを定義します。現在のオーディエンスタイプに関連しないファイルは作成する必要がありません。

生の値のみ。 中間ファイルはツールで返された生の値を保存します。マージン、成長率、またはこれらのファイル内の他の導出メトリクスを事前計算しないでください。ステップ 3b で発生します。

ページ予算実装: 各リファレンスファイルはデフォルトページ長と番号付きカット順序を指定します。レンダリングされたドキュメントがターゲットを超える場合、指定された順序でカットを適用します。テンプレート最小値より下のフォントサイズやマージンを縮小しようとしないでください。カット順序は厳密な優先スタックです:セクション 1 を完全にカットしてから、セクション 2 に触れます。

コンテンツ品質ルール

  1. 各オーディエンスのすべてのナラティブセクションを書き直します。 CIQ 企業サマリーは入力であり、出力ではありません。各オーディエンスタイプには異なる説明が必要です:エクイティリサーチの場合は簡潔で論文指向、IB の場合はピッチブック散文、Corp Dev の場合は製品中心、Sales/BD の場合は平易な言語。どのティアシートタイプにおいても、CIQ サマリーを逐語的に貼り付けないでください。
  2. オーディエンスごとに決算ハイライトを差別化します。 同じ決算コールは異なる読者に異なるテイクアウトを生成します。エクイティリサーチはセグメント level パフォーマンスとコンセンサスビート/ミスを求めています。IB はマージン軌跡と戦略的コメンタリーを求めています。Sales/BD は会話角度を作成する戦略的テーマを求めています。ティアシートタイプ全体で同じ箆書きを再利用しないでください。
  3. シンテーシスセクションが差別化要因です。 Strategic Fit Analysis、Integration Considerations、Conversation Starters、および Business Overview 段落は、ティアシートが価値を獲得する場所です。これらのセクションでは、データポイントを物語に接続する分析推論が必要です。コンテキストなしで企業名をリストすることはシンテーシスではありません。
  4. セグメントテーブルの保留中の売却にフラグを付けます。 企業がセグメントまたはビジネスユニットの保留中の売却を発表した場合、セグメント売却の保留中トランザクション(例:「Mobility* — *Pending divestiture, expected mid-2026」)をメモするセグメント表にフットノートまたは括弧内注釈を追加します。Corp Dev および IB/M&A ティアシートの場合、セグメントテーブルの下に、売却されたセグメントを除いた pro-forma 売上と売上構成を示す 1 行のメモを含めます。これにより、読者は自分で計算することなく、「今後」のビジネスを評価できます。

算術検証

→ 算術検証は現在ステップ 3b(導出メトリクスを計算)で実施されます。 すべてのマージン計算、成長率、セグメント合計、パーセンテージ列、およびバリュエーション相互チェックは、ドキュメント生成開始前の専用計算パス中に検証されます。ステップ 3b の完全な検証チェックリストを参照してください。

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
anthropics
リポジトリ
anthropics/financial-services-plugins
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/anthropics/financial-services-plugins / ライセンス: Apache-2.0

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: anthropics · anthropics/financial-services-plugins · ライセンス: Apache-2.0