validador-pedidos-gocase
表形式レコード検証器
レコードの収集とそれを消費するシステムの間の品質フィルターとして機能する自動化です。スプレッドシートを読み取り、不整合なものを拒否して各拒否理由を説明し、緊急度の基準で有効なものを優先し、さらにAIで拒否されたレコードの自動回復を試みます。
元のケースは工場注文(受注生産)ですが、このロジックは、不整合な状態で届き、先に進む前に確認が必要なあらゆる表形式レコードの集合に当てはまります。インポート、登録、システム間の統合などです。ビジネスルールはconfig.yamlにあり、ドメインを変更するにはYAMLを編集するだけで、コードは不要です。
稼働中のサービス: https://validador-pedidos-gocase.onrender.com
問題
複数の送信元からレコードがシステムに入るたびに、各送信元は入力時に異なる方法で検証するか、まったく検証しません。その結果、完全なレコードと、必須フィールドが空、壊れたメール、ゼロの数値、一致しない値、過去の日付、重複などの問題を抱えたレコードが混在するバッチが生まれます。
これを手作業で確認するのは遅く、疲れ、微妙なエラー(数セントの差、数十行離れた重複)を見逃します。さらに悪いことに、有効なレコードが内容ではなく記入ミス(名前の欠落、メールから消えた@)で拒否されることがあります。正しいデータは存在するのに、フォーマットされずに届いただけです。
元のケースでは、各レコードは物理的な生産指示に変わる注文です。壊れたデータの注文は単なる誤ったレコードではなく、無駄になったカスタム材料、失われた機械時間、顧客への未納品です。これは、不良レコードが後で高くつくあらゆるフローと同じパターンです。
Related MCP server: fcp-sheets
仕組み
中核は4段階のパイプラインで、同じ関数を呼び出す3つのインターフェース(ターミナル、HTTP API、MCP)で公開されています。
flowchart LR
A[Planilha .xlsx] --> B[Leitura + schema]
B --> C[Validação<br/>9 regras]
C -->|válidos| D[Priorização<br/>por prazo]
C -->|rejeitados| E[Recuperação por IA]
E -->|corrigido| C
E -->|indeduzível| F[Revisão humana]
D --> G[3 planilhas .xlsx]
C --> G読み取り (
src/leitor.py) — Excelを読み取り、列を型付けし、期待されるスキーマを確認します。列が欠けていると、一般的な失敗ではなく、読みやすいエラーになります。検証 (
src/validador.py) — 各レコードに9つのルールを適用し、有効なものと拒否されたものを分け、レコードごとにすべての理由を蓄積します。優先順位付け (
src/organizador.py) —dias_restantesを計算し、有効なものを緊急度のキューに並べます。レポート (
src/relatorio.py) — フォーマットされた3つのスプレッドシートを生成します。AIによる回復 (
src/assistente_ia.py、オプション) — 拒否されたものを回復しようとします。AIが修正したものは検証に戻りますが、検証は例外を認めません。
オペレーターの使い方
ブラウザでフォームを開きます。
.xlsxスプレッドシートをアップロードします。準備完了の3つのスプレッドシートを含む
.zipを受け取ります。
誰のマシンにも何もインストールされません。処理はサーバーで実行され、結果はブラウザで返されます。フォームは、プロジェクトに付属するn8nフロー(integracoes/)によって公開され、一度だけインポートされます。n8nを使用しない場合は、APIを直接利用します。契約は同じガイドにあります。
データを準備せずに試すには、リポジトリにexemplo/pedidos_exemplo.xlsxが含まれています。50レコードのうち、10件に代表的な欠陥があります。
1日の最初の実行。 このサービスは無料プランでホストされており、数分間使用されないと休止します。最初の呼び出しはサーバーを起動するのに約50秒かかります。以降の呼び出しは1秒未満で応答します。最初の試行でタイムアウトになった場合は、もう一度実行するだけです。
検証ルール
各レコードはすべてのルールに対して評価されます。レコードには複数の理由が蓄積され、motivo_rejeicao列に連結されます。再処理ごとに1つのエラーではなく、問題の完全なリストが一度に表示されます。
# | フィールド | ルール |
1 |
| 空でなく、重複していない。重複の場合、2番目の出現が拒否されます。 |
2 |
| 空でない。 |
3 |
| 形式 |
4 |
| 正の整数。 |
5 |
| 正の値。 |
6 |
|
|
7 |
| 過去であってはならない。 |
8 |
| 空でない。 |
9 |
| 空でない。 |
上記のフィールド名は元のドメイン(注文)のものです。config.yamlのmapa_colunasは、任意のエクスポートのヘッダーをこれらの名前に変換するため、別のシステムのスプレッドシートでも新しいコードは必要ありません。
優先度
承認されたものにはdias_restantesが割り当てられ、緊急度で並べられたキューに入ります。最も差し迫ったものが最初です。範囲(名前、間隔、色)はconfig.yamlにあります。
優先度 | 期限までの日数 | スプレッドシートの色 |
URGENTE | 0〜2 | 薄い赤 |
ALTA | 3〜5 | 薄いオレンジ |
NORMAL | 6〜10 | 薄い緑 |
BAIXA | 11以上 | 色なし |
提供されるもの
スプレッドシート | 内容 |
| 優先順位順の承認済み、範囲ごとに色分け。 |
| 拒否されたもの、それぞれの正確な理由付き。 |
| バッチのメトリクス:合計、パーセンテージ、優先度、チャネル、値。 |
スタック
レイヤー | テクノロジー | 目的 |
スプレッドシート | pandas, openpyxl | Excelの読み取り、列の型付け、フォーマットされたレポートの生成 |
HTTP API | FastAPI, uvicorn, python-multipart | サービスインターフェース;アップロードとダウンロード |
設定 | PyYAML | コード外のビジネスルール( |
AI | httpx + Anthropic Claude | 拒否されたものの支援付き回復 |
AI統合 | MCP | 自然言語で検証に問い合わせる |
オーケストレーション | n8n | ローコードのアップロードフォーム(元のケースのパターン) |
ホスティング | Render | 公開サービス |
Python 3.10以上。
測定された結果
デモバッチ:50レコード、10件の実際の問題。
メトリクス | 値 |
処理されたレコード | 50 |
検証で拒否されたもの | 10 |
AIで回復されたもの | 5 |
最終的な有効数 | 45 (90%) |
処理時間 | 1秒未満 |
上記の数値は、exemplo/pedidos_exemplo.xlsx(合成データ)での実行から得られたもので、ローカルで測定されました。実際の本番ボリュームの予測ではありません。
実際の実行でAIが修正したもの
レコード | 修正 | 推測の根拠 |
PED-00003 |
| メール |
PED-00016 |
| メール |
PED-00034 |
| メール |
PED-00022 |
| 顧客名から |
PED-00008 |
|
|
正しく解決しなかったもの
拒否された10件のうち、5件は残りました。そして、それは正しい姿です:
2件の重複 — どのレコードが有効かの人間の判断が必要です。
1件の期限切れ — データエラーではなく、運用上の問題です。
2件の不整合な値 — AIは数量を調整しましたが、
valor_totalが一致しなかったため、レコードは拒否されたままです。検証はAIに対して例外を認めません。
AIレイヤー — 拒否されたレコードの回復
レコードを拒否することは問題の半分を解決します。残りの半分は、エラーが内容ではなく記入ミスである場合に回復することです。作業の分担は明確です:
機械的エラー(値が一致しない、余分なスペース、正規化が必要なメール)→ AIなしでルールで解決。
意味的エラー(名前の欠落、不完全なメール)→ AIがレコード自体の他のフィールドを照合して推測。
推測できないデータ → 人間のレビュー用にフラグが立てられ、決して発明されません。
監査証跡
自動修正は、監査可能な場合にのみ信頼できます。AIは、提供されたスプレッドシート内で自分の行ったことを署名します:
corrigido_por_ia列は、回復されたレコードをマークします。correcao_ia列は、変更された各フィールドの前→後を記録します。サマリーには「AIで回復されたレコード」という行があります。
メールから名前を推測することは、確認されたデータではなく、もっともらしい推測です。そのため、証跡が存在します。AIは回復を加速し、最終決定は引き続き人間が確認できます。
アーキテクチャ
モジュールごとに単一責任 — 各ファイルは1つのことを行い、単独でテスト可能です。
モジュール | 責任 |
| Excelを読み取り、列を型付けし、期待されるスキーマを確認します。 |
| 9つのルールを適用し、承認済みと拒否済みを分け、理由を蓄積します。 |
|
|
| フォーマットされた3つのスプレッドシートを生成します。 |
| 拒否されたものをAI用に準備し、修正を適用し、著作者をマークします。 |
| 組み込みフォールバック付きで |
|
|
| デモ用スプレッドシートを生成します。テストツールであり、本番用ではありません。 |
| HTTPインターフェース:検証、ダウンロード、AI修正。 |
| MCPインターフェース:AIクライアント向けの5つのツール+1つのプロンプト。 |
| 開発用のターミナル実行。 |
唯一の真実のソース。 フローはexecutar_pipelineにあり、メトリクスは一度構築され、レポート、ログ、APIで再利用されます。優先度範囲の名前、順序、色はconfig.yamlにのみ存在します。
消費方法
1つの検証ロジック、3つのインターフェース — 重複するルールはありません。
表面 | 対象 | 方法 |
n8n | 運用 | アップロードフォーム。ブラウザ上で |
API HTTP | あらゆるシステム | HTTP + 標準JSON。SDK不要。契約は |
MCP | AIツール | 自然言語で呼び出し可能な5つのツール(例:Claude Desktop)。 |
n8nはバッチ処理の自動化を実行し、MCPはそれを自然言語で問い合わせることを可能にします — 「何件のレコードが拒否され、その理由は?」。対応クライアント(例:Claude Desktop)で有効にするには、サーバーを指定します:
{
"mcpServers": {
"validador-gocase": {
"command": "python",
"args": ["mcp_server.py"],
"cwd": "caminho/para/validador-pedidos-gocase"
}
}
}公開されるツール:validar_pedidos、consultar_resumo、
analisar_rejeitados、revalidar_com_correcoes、gerar_dados_exemplo、さらに
ガイド用プロンプト。中央の2つが支援修正サイクルを構成します:クライアント側の
モデル自体が修正を提案し、サーバーが再検証します。
この統合はツールに縛られません。純粋なHTTPのため、Make、Power Automate、または 独自コードでも同じAPIを利用できます。n8nは文書化されテスト済みの経路です。
コード不要の設定
ビジネスルールはコードの外、config.yaml に置きます:値の許容範囲、
メールパターン、必須列、優先度の範囲(名前、間隔、色)。管理者はPythonを開かずに
制限値を調整できます。
mapa_colunas は実際のエクスポートのヘッダーを期待される名前に変換します —
これはドメインの交換ポイントです:別のスプレッドシートでも、同じロジック。
設定が欠落または無効でも何も停止しません:システムは警告を出し、組み込みの デフォルト値を使用します。
テスト
testar.py は外部フレームワークなしで13の検証をエンドツーエンドで実行します —
実際のフローを実行して不変条件を確認するスクリプトです:
サンプルスプレッドシートの生成とパイプラインの実行;
3つのスプレッドシートとログの存在と内容;
整合性(
承認 + 却下 = 合計);すべての却下レコードに理由が存在すること;
API(検証、パッケージのダウンロード、形式外のスプレッドシートを 読みやすいエラーで拒否);
MCPサーバー。実際のプロトコルで動作確認:ハンドシェイク、ツール カタログ、1つのツールをエンドツーエンドで実行。
その他の組み込みの保護策:Excelで開かれたレポートは再試行と明確なメッセージで 処理;AIからの不正な修正はバッチを停止させずに破棄;サーバーの一時ファイルは 1時間で自動的に期限切れ。
python testar.py実行方法
前提条件: Python 3.10以上。
# 1. Dependências
pip install -r requirements.txt
# 2a. Modo terminal — gera dados de exemplo se não houver planilha real
python main.py
# 2b. Modo API HTTP
uvicorn api:app --host 0.0.0.0 --port 8000
# Docs interativas em http://localhost:8000/docs実際のスプレッドシートを使用するには、main.py を実行する前に
data/pedidos_entrada.xlsx に保存します。
環境変数(オプション)
すべてにデフォルト値があり、検証には必須のものはありません。AIによる修正は キーが存在する場合のみ有効になります。
変数 | 役割 |
| サーバーでAI修正を有効化。なし → |
| 修正に使用するClaudeモデル。 |
| AI呼び出しあたりの却下レコード上限(コスト管理)。 |
| 各ジョブの一時ファイルの有効期限。 |
キーはリポジトリには決して置かれません — サーバーの環境のみに存在します。
制限事項と次のステップ
今回の納品範囲。 APIは認証なしで公開されています。これは範囲の決定によるものです。 URLはデモ用スプレッドシート(合成データ)でのみ使用する必要があります。実際のレコードには 個人データが含まれており、公開URLを経由する前にキーによる認証が必要です。これはロードマップの 意識的なステップであり、見落としではありません。
大規模化した場合の課題。 処理は同期式で、スプレッドシート全体をメモリに読み込みます (pandas)— 数千行のバッチには適していますが、数百万行には不適切です。重複検出は 現在のバッチ内のみを対象とし、実行間では行われません。
自然な進化。 スプレッドシートではなくソース(ERP、データベース)から直接レコードを読み取る; ステータスを元のシステムに書き戻す;却下率が上昇したときのアクティブ通知;実行をまたぐ 重複を検出するためのバッチ間履歴。
プロジェクトの起源
このプロジェクトは、GoCase(GoGroup)のRPAインターン選考プロセス用のビジネスケースとして 生まれました。対象領域はオンデマンド生産の注文検証で、壊れたレコードはそれぞれ カスタム材料の浪費と機械時間の損失になります。
ドキュメントは一般化されています。なぜなら、このソリューション — 不整合な状態で届く 表形式レコードの自動チェックと、内容ではなく記入ミスであるエラーの回復 — は 同じタイプのあらゆるフローに適用できるからです。注文の語彙がルールと例に残っているのは、 それが唯一の適用可能なケースだからではなく、実際に測定されたケースだからです。
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for generating rough-draft project plans from natural-language prompts.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Evidence-readiness MCP server: validate, audit, and score briefs, memos, and evidence packs.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to read, create, and modify Google Spreadsheets through actions like editing cells and managing sheets. It features a specialized handoff protocol to synchronize tasks and state between different LLMs using a shared spreadsheet log.568 npmMIT
- AlicenseBqualityCmaintenanceMCP server for semantic spreadsheet operations that lets LLMs create and edit Excel workbooks by describing spreadsheet intent.42MIT
- AlicenseBqualityDmaintenanceMCP server enabling AI agents to trace and resolve order synchronization incidents between an ERP (Odoo) and multiple marketplaces.8MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that turns Excel files into queryable databases, enabling AI agents to filter, aggregate, group, sort data and export results as new Excel files.2MIT