app:
  description: 各プロジェクトから提出された進捗報告（進捗率・課題・リスク・次アクション）を全社横断で集約し、ステータス判定（Green/Yellow/Red）、遅延プロジェクト一覧、要エスカレーション案件を生成します。PMO・経営企画によるプロジェクトポートフォリオレビューを支援します。
  icon: 📊
  icon_background: '#FFEAD5'
  mode: workflow
  name: 全社プロジェクト進捗ロールアップ
  use_icon_as_answer_icon: false
kind: app
version: 0.6.0
workflow:
  conversation_variables: []
  environment_variables: []
  features:
    file_upload:
      image:
        enabled: false
    opening_statement: ''
    suggested_questions: []
    suggested_questions_after_answer:
      enabled: false
    text_to_speech:
      enabled: false
  graph:
    edges:
    - data:
        sourceType: start
        targetType: llm
      id: start-to-llm1
      source: start
      target: llm1
    - data:
        sourceType: llm
        targetType: end
      id: llm1-to-end
      source: llm1
      target: end
    nodes:
    - data:
        title: 開始
        type: start
        variables:
        - label: query
          max_length: 2048
          options: []
          required: true
          type: paragraph
          variable: query
      height: 90
      id: start
      position:
        x: 80
        y: 282
      type: custom
      width: 244
    - data:
        title: 全社集約分析 (LLM)
        type: llm
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.2
        prompt_template:
        - role: system
          text: "あなたはPMO／経営企画のアナリストです。以下のユーザー入力（複数のプロジェクトの進捗報告が並んでいる）を解析して、各プロジェクトごとに進捗率、課題、リスク、次アクションを抽出し、ルールに従ってステータス判定（Green/Yellow/Red）、遅延判定、要エスカレーション判定を行ってください。出力は必ずJSON形式で、指定のフォーマットのみを返してください（追加の説明文は返さないでください）。\n\
            判定ルール（必ず適用すること）: - progress_rate が数値の場合:\n  - >= 80 → Green（ただし深刻なリスクや\
            \ \"blocked\"/\"停滞\" 等が明記されている場合は Yellow または Red に引き上げる）\n  - 50〜79 →\
            \ Yellow\n  - < 50 → Red\n- テキストに \"blocked\", \"ブロック\", \"停滞\", \"重大なリスク\"\
            , \"critical\", \"停止\" 等が含まれる場合は Red とする優先ルールを適用する（progress_rate に関わらず）。\
            \ - 遅延判定: レポート本文に「遅延」「behind schedule」「予定より遅れている」「マイルストーン未達」等が含まれる場合は\
            \ delayed=true とする。また日付比較が明確に記載され「期限を過ぎている」等があれば delayed=true とする。明示がなければ\
            \ delayed=false とする。 - 要エスカレーション: Red でかつ「根本原因が未解決」「外部支援が必要」「経営レベルの判断が必要」等の文言が含まれる場合、および重大なリスクがあると判断される場合に\
            \ escalation_required=true とする。\n出力フォーマット（厳密）: {\n  \"projects\": [\n\
            \    {\n      \"project_id\": \"<任意の識別子または名称>\",\n      \"project_name\"\
            : \"<プロジェクト名（可能なら）>\",\n      \"progress_rate\": <数値 0-100 or null>,\n\
            \      \"issues\": \"<抽出した課題テキスト（省略不可、存在しない場合は空文字）>\",\n      \"risks\"\
            : \"<抽出したリスクテキスト（省略不可、存在しない場合は空文字）>\",\n      \"next_actions\": \"<次アクション（省略不可、存在しない場合は空文字）>\"\
            ,\n      \"status\": \"Green|Yellow|Red\",\n      \"delayed\": true|false,\n\
            \      \"escalation_required\": true|false,\n      \"reason\": \"<ステータス/遅延/エスカレーション判定の根拠（短いテキスト）>\"\
            \n    }\n    ...\n  ],\n  \"summary\": {\n    \"total_projects\": <整数>,\n\
            \    \"green_count\": <整数>,\n    \"yellow_count\": <整数>,\n    \"red_count\"\
            : <整数>,\n    \"delayed_projects\": [\"<project_id>\", ...],\n    \"escalations\"\
            : [\"<project_id>\", ...]\n  }\n}\n注意: - JSONでない追加テキストや説明は一切出力しないこと。 -\
            \ フィールドが欠けないように、必ず上記キーを返すこと。数値が不明な場合は null、テキストは空文字とすること。\n\n---\n\n【最終出力フォーマット\
            \ (この指示が最優先)】\n最終出力は **読みやすい日本語の Markdown** で返してください。JSON\n配列・オブジェクトをそのまま出力してはいけません。\n\
            - 見出し (## / ###) でセクションを区切る\n- リスト (- / 1.) や表 (| ... |) で構造化\n- 各項目の意図や根拠が分かるよう短い説明文を添える\n\
            - 営業デモで顧客に直接見せられる体裁にする\n\n(構造化されたデータ項目を内部で扱うのは構いませんが、出力時に Markdown\nに変換してください。)"
        - role: user
          text: '以下がユーザーからの入力（start.query）です。複数プロジェクトの進捗報告がまとまっている想定です。これを上記ルールに従って解析・集約してください。

            {{#start.query#}}'
        vision:
          enabled: false
        memory: null
        context:
          enabled: false
      height: 90
      id: llm1
      position:
        x: 380
        y: 282
      type: custom
      width: 244
    - data:
        title: 終了
        type: end
        outputs:
        - value_selector:
          - llm1
          - text
          variable: result
      height: 90
      id: end
      position:
        x: 680
        y: 282
      type: custom
      width: 244
  hash: null
