> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jinba.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Jinbaモジュールチェッカー V2

> エンハンスされたチェック機能による高度なルールベースドキュメント・データ検証

## 概要

Jinbaモジュールチェッカー V2は、JSON形式で定義されたカスタムルールに対してファイルやデータをチェックする高度な検証ツールです。このツールは、包括的なドキュメント検証、コンプライアンスチェック、および元のチェッカーよりも強化された機能によるデータ品質保証のために設計されています。

## 主要機能

* **ルールベース検証**: JSON形式でカスタム検証ルールを定義
* **マルチフォーマットサポート**: PDF、テキスト、JSON、XML、CSV、DOCXファイルのチェック
* **参照統合**: 会社規則、法的文書、その他の参照資料を含める
* **詳細結果**: ステータス、範囲、詳細説明付きの構造化結果を取得
* **カスタムデータスキーマ**: 専門的な検証のための追加データスキーマを定義

## 設定

このツールは設定パラメータを必要としません。

### 例：ドキュメントコンプライアンスチェック

```yaml theme={null}
- id: prepare_compliance_rules
  name: prepare_compliance_rules
  tool: INPUT_JSON
  input:
    - name: value
      value: [
        {
          "uniqueId": "financial_disclosure_001",
          "name": "金額の通貨単位表記",
          "description": "すべての金額が通貨単位で明確にラベル付けされていること。金額値に適切な通貨記号または略語が含まれていることを確認する。"
        },
        {
          "uniqueId": "date_format_002",
          "name": "日付フォーマットの一貫性",
          "description": "すべての日付が ISO 8601 形式（YYYY-MM-DD）または明確に記載された形式に従い、ドキュメント全体で一貫していること。"
        },
        {
          "uniqueId": "signature_requirement_003",
          "name": "承認署名の存在",
          "description": "ドキュメントに承認署名またはデジタル署名検証が含まれていること。"
        },
        {
          "uniqueId": "contact_information_004",
          "name": "連絡先情報の妥当性",
          "description": "連絡先情報に有効なメール形式と電話番号形式が含まれていること。"
        }
      ]

- id: check_financial_report
  name: check_financial_report
  tool: JINBA_MODULES_CHECKER_V2
  input:
    - name: target_file
      value: "path/to/financial_report.pdf"
    - name: task
      value: "財務報告書コンプライアンスレビュー"
    - name: description
      value: "規制要件、データフォーマット標準、承認要件を含む四半期財務報告書の包括的コンプライアンスチェック。"
    - name: rules
      value: "{{steps.prepare_compliance_rules.result}}"
    - name: references
      value: [
        "path/to/company_financial_policies.pdf",
        "path/to/regulatory_guidelines.pdf",
        "path/to/previous_approved_reports.pdf"
      ]
    - name: additionalDataSchema
      value: {
        "financial_metrics": {
          "revenue": "number",
          "expenses": "number",
          "net_income": "number",
          "currency": "string"
        },
        "reporting_period": {
          "start_date": "date",
          "end_date": "date",
          "quarter": "string",
          "fiscal_year": "number"
        }
      }

- id: process_check_results
  name: process_check_results
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        import json
        from collections import defaultdict
        
        # チェック結果を取得
        check_results = {{steps.check_financial_report.result}}
        
        # ステータスとカテゴリ別に結果を分析
        status_summary = defaultdict(int)
        category_summary = defaultdict(list)
        critical_issues = []
        
        for result in check_results:
            status = result.get("status", "unknown")
            status_summary[status] += 1
            
            # 可能であればルールからカテゴリを抽出
            rule_text = result.get("rule", "")
            category = "general"
            if "financial" in rule_text.lower():
                category = "financial"
            elif "date" in rule_text.lower():
                category = "formatting"
            elif "signature" in rule_text.lower():
                category = "authorization"
            elif "contact" in rule_text.lower():
                category = "contact"
                
            category_summary[category].append({
                "rule_id": result.get("uniqueId"),
                "status": status,
                "reason": result.get("reason"),
                "range": result.get("range", [])
            })
            
            # 重要な問題を追跡（却下された項目）
            if status == "rejected":
                critical_issues.append({
                    "rule_id": result.get("uniqueId"),
                    "rule": result.get("rule"),
                    "reason": result.get("reason"),
                    "location": result.get("range", []),
                    "additional_data": result.get("additionalData", {})
                })
        
        # 包括的レポートの生成
        report = {
            "validation_summary": {
                "total_rules_checked": len(check_results),
                "accepted": status_summary.get("accepted", 0),
                "rejected": status_summary.get("rejected", 0),
                "pending": status_summary.get("pending", 0),
                "compliance_score": round((status_summary.get("accepted", 0) / len(check_results)) * 100, 2) if check_results else 0
            },
            "category_breakdown": dict(category_summary),
            "critical_issues": critical_issues,
            "recommendations": [],
            "detailed_results": check_results
        }
        
        # 重要な問題に基づく推奨事項の生成
        if critical_issues:
            report["recommendations"].extend([
                "却下されたすべての検証ルールを確認し対処する",
                "重要なコンプライアンス項目のドキュメントレビュープロセスを実装する",
                "繰り返し発生する問題を防ぐためのテンプレート更新を検討する"
            ])
        else:
            report["recommendations"].append("ドキュメントはすべての検証チェックに合格しました")
        
        print(json.dumps(report, indent=2, ensure_ascii=False))
```

### 例：マルチドキュメント品質保証

```yaml theme={null}
- id: setup_qa_workflow
  name: setup_qa_workflow
  tool: INPUT_JSON_WITH_VALIDATION
  input:
    - name: value
      value: {
        "documents": [
          {
            "file": "path/to/contract_draft.docx",
            "type": "legal_contract",
            "priority": "high"
          },
          {
            "file": "path/to/technical_spec.pdf", 
            "type": "technical_documentation",
            "priority": "medium"
          },
          {
            "file": "path/to/user_manual.pdf",
            "type": "user_documentation", 
            "priority": "low"
          }
        ],
        "universal_rules": [
          {
            "uniqueId": "spelling_grammar_001",
            "name": "誤字脱字・文法",
            "description": "ドキュメントにスペルミスや文法エラーがないこと。"
          },
          {
            "uniqueId": "formatting_consistency_002",
            "name": "フォーマットの一貫性",
            "description": "ヘッダー、フォント、フォーマットがドキュメント全体で一貫していること。"
          }
        ],
        "legal_specific_rules": [
          {
            "uniqueId": "legal_terminology_001",
            "name": "法的用語の正確さ",
            "description": "法的用語が正確で適切に定義されていること。"
          },
          {
            "uniqueId": "clause_numbering_002",
            "name": "条項番号と参照",
            "description": "契約条項が適切に番号付けされ、正しく参照されていること。"
          }
        ]
      }

- id: generate_qa_dashboard
  name: generate_qa_dashboard  
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        import json
        from datetime import datetime
        
        def analyze_document_results(results, doc_type, priority):
            total_checks = len(results)
            passed = len([r for r in results if r.get("status") == "accepted"])
            failed = len([r for r in results if r.get("status") == "rejected"]) 
            pending = len([r for r in results if r.get("status") == "pending"])
            
            return {
                "document_type": doc_type,
                "priority": priority,
                "total_checks": total_checks,
                "passed": passed,
                "failed": failed,
                "pending": pending,
                "success_rate": round((passed / total_checks * 100), 2) if total_checks > 0 else 0,
                "critical_issues": [r for r in results if r.get("status") == "rejected"]
            }
        
        # QAダッシュボードの作成
        dashboard = {
            "qa_report_generated": datetime.now().isoformat(),
            "overall_summary": {
                "documents_reviewed": 2,
                "quality_recommendations": [
                    "高優先度ドキュメント問題の解決を優先する",
                    "一般的なフォーマット問題の自動事前チェックを実装する",
                    "特定されたベストプラクティスを組み込んだドキュメントテンプレートを作成する",
                    "重要なドキュメントの定期的QAレビューをスケジュールする"
                ]
            }
        }
        
        print(json.dumps(dashboard, indent=2, ensure_ascii=False))
```

### 例：データ品質検証パイプライン

```yaml theme={null}
- id: prepare_data_validation_rules
  name: prepare_data_validation_rules
  tool: INPUT_JSON
  input:
    - name: value
      value: [
        {
          "uniqueId": "data_completeness_001",
          "name": "データの完全性",
          "description": "すべての必須フィールドに空でない値が含まれていること。欠落または空の必須データフィールドをチェックする。"
        },
        {
          "uniqueId": "data_format_002",
          "name": "メールアドレス形式",
          "description": "すべてのメールアドレスが有効な形式（例: user@example.com）であること。"
        },
        {
          "uniqueId": "date_range_003",
          "name": "日付の範囲",
          "description": "日付が合理的な範囲内で、論理的に一貫していること（不適切な未来日付がないこと）。"
        }
      ]

- id: generate_data_quality_report
  name: generate_data_quality_report
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        import json
        from collections import Counter, defaultdict
        
        # 包括的データ品質レポートの生成
        report = {
            "data_quality_summary": {
                "overall_quality_score": 85.5,
                "quality_grade": "B",
                "data_readiness": "READY"
            },
            "recommendations": [
                "データ品質スコア：85.5% - 良好",
                "重要なデータ品質問題に対処してから進める",
                "将来の品質問題を防ぐためにソースでのデータ検証を実装する",
                "一般的なフォーマット問題の自動データクリーニングを検討する"
            ]
        }
        
        print(json.dumps(report, indent=2, ensure_ascii=False))
```

## ヒントとベストプラクティス

* **ルール定義**: 明確に定義された成功基準を持つ、明確で具体的なルールを作成
* **参照資料**: 検証精度を向上させるために関連する参照文書を含める
* **構造化結果**: 実用的なインサイトとレポートのために常に結果を処理
* **段階的検証**: 基本ルールから始めて徐々に複雑さを追加
* **ルールの整理**: `uniqueId` のプレフィックスを統一して関連ルールをグループ化すると、結果分析がしやすくなります
* **カスタムスキーマ**: 専門的な検証ニーズのために追加のデータスキーマを定義
* **エラーハンドリング**: 検証失敗とエッジケースの適切な処理を実装
* **パフォーマンス最適化**: 検証ワークフロー設定時にファイルサイズと複雑さを考慮
* **ドキュメント化**: 検証ルールとその目的の明確なドキュメント化を維持
* **継続的改善**: 結果に基づいて検証ルールを定期的に確認・更新
