{"id":"workflow.pdf_tables","version":"1.0.0","label":{"ko":"PDF 표를 엑셀로 통합 (머리글로 묶기·행별 출처·확인 목록)","en":"Merge PDF tables into one workbook"},"description":{"ko":"PDF 1~100개(또는 PDF를 담은 ZIP)에서 표를 찾아 엑셀 하나로 모읍니다. 실행 엔진(P00)이 파일 수집(P01: 형식 판별, ZIP 안전 해제) -> 파일마다 pdf.extract_tables -> 머리글이 같은 표끼리 한 시트로 묶기 -> 쓰기 -> 다시 읽어 칸마다 대조를 합니다. 통합 시트의 행마다 원본 파일·쪽·표 번호·원본 행이 붙어 칸마다 출처를 찾을 수 있습니다. 선 없는 표(추정)와 신뢰도가 낮은 표는 통합하지 않고 보류 시트에 그대로 둡니다. 글자층이 없는 쪽(스캔)은 OCR 필요로 목록에 남기고(이 워크플로는 OCR 하지 않음), PDF가 아니거나 암호가 걸린 파일도 이유와 함께 남깁니다. 표 데이터 행 = 통합 행 + 보류 행을 매번 검산합니다. 칸 글자는 추출한 그대로이며 숫자·단위를 바꾸지 않습니다. 파일은 기기 밖으로 나가지 않습니다.","en":"Finds tables in 1 to 100 PDFs (or ZIPs of PDFs) and merges them into one workbook: one sheet per header group with file, page, table and source row on every row, held sheet for estimated or low-confidence tables, a source sheet and a check list (scans needing OCR, files not used). The written workbook is read back and compared cell by cell. Cell text is kept as extracted. Files never leave the device."},"input_schema":{"type":"object","additionalProperties":false,"required":["files"],"properties":{"files":{"type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#/$defs/file"}},"options":{"type":"object","additionalProperties":false,"properties":{"mode":{"enum":["auto","lattice","stream"]},"header":{"type":"boolean"},"min_confidence":{"type":"number","minimum":0,"maximum":1},"include_estimates":{"type":"boolean"},"unzip":{"type":"boolean"},"file_name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^\\\\/:*?\"<>|\\u0000-\\u001f.][^\\\\/:*?\"<>|\\u0000-\\u001f]*$"}}}},"$defs":{"file":{"type":"object","additionalProperties":false,"required":["size"],"properties":{"name":{"type":"string","maxLength":1024},"mime":{"type":"string","maxLength":255},"size":{"type":"integer","minimum":0,"maximum":268435456}}}}},"output_schema":{"type":"object","additionalProperties":false,"required":["state","recipe","engine","summary","checks","sources","ocr_pages","verified","file_name","steps","warnings"],"properties":{"state":{"enum":["completed","completed_with_exceptions"]},"recipe":{"type":"object","additionalProperties":false,"required":["id","version"],"properties":{"id":{"const":"pdf.tables_merge"},"version":{"type":"string"}}},"engine":{"type":"string"},"summary":{"type":"object","additionalProperties":false,"required":["files","tables","merged_tables","held_tables","data_rows","merged_rows","held_rows","sheets","ocr_pages","rejected_files","files_without_tables"],"properties":{"files":{"type":"integer"},"tables":{"type":"integer"},"merged_tables":{"type":"integer"},"held_tables":{"type":"integer"},"data_rows":{"type":"integer"},"merged_rows":{"type":"integer"},"held_rows":{"type":"integer"},"sheets":{"type":"integer"},"ocr_pages":{"type":"integer"},"rejected_files":{"type":"integer"},"files_without_tables":{"type":"integer"}}},"checks":{"type":"array","uniqueItems":true,"items":{"enum":["pages_need_ocr","estimated_tables_held","low_confidence_tables_held","estimated_tables_included","files_rejected","files_without_tables","no_tables"]}},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","page","table","method","sheet","held"],"properties":{"file":{"type":"string"},"page":{"type":"integer"},"table":{"type":"integer"},"method":{"type":"string"},"sheet":{"type":["string","null"]},"held":{"type":["string","null"]}}}},"ocr_pages":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","page","reason"],"properties":{"file":{"type":"string"},"page":{"type":"integer"},"reason":{"type":"string"}}}},"verified":{"type":"object","additionalProperties":false,"required":["sheets","cells"],"properties":{"sheets":{"type":"integer"},"cells":{"type":"integer"}}},"file_name":{"type":"string"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","kind","state","items","warnings","input_digest","output_digest"],"properties":{"id":{"type":"string"},"kind":{"enum":["tool","fn"]},"tool":{"type":"string"},"tool_version":{"type":"string"},"fn":{"type":"string"},"state":{"enum":["completed","skipped","failed","not_run"]},"items":{"type":["integer","null"]},"warnings":{"type":"array","items":{"type":"string"}},"input_digest":{"type":["string","null"],"pattern":"^[0-9a-f]{64}$"},"output_digest":{"type":["string","null"],"pattern":"^[0-9a-f]{64}$"}}}},"warnings":{"type":"array","uniqueItems":true,"items":{"enum":["needs_review"]}}}},"modes":["browser_local","local"],"egress":[],"side_effect":"none","approval":"none","limits":{"max_input_bytes":268435456,"max_files":100,"max_items":10000,"timeout_ms":300000,"max_memory_mb":2048},"deterministic":true,"errors":["invalid_input","unsupported","resource_limit","needs_input","permission_denied","timeout","failed"],"dod":{"passed":true,"gates":{"G1":"pass","G2":"pass","G3":"pass","G4":"pass","G5":"pass","G6":"pass","G7":"pass","G8":"pass","G9":"pass","G10":"pass","G11":"pass","G12":"na"},"report":"reports/workflow.pdf_tables/DOD.md","evidence":{"node":"reports/workflow.pdf_tables/20261019-120911-node.json","browser":"reports/workflow.pdf_tables/20261020-105231-browser.json","crosscheck":"reports/workflow.pdf_tables/20261017-232951-crosscheck.json","license":"reports/license-20261020-164840.json","screenshot":"reports/workflow.pdf_tables/20261020-105231-browser.png","provenance":"reports/provenance/20261020-165515-tools.json","g12":"reports/bench/g12-status.json"},"checked_at":"2026-10-20T07:56:27.955Z"}}