| name | cicsic-reviewer |
| description | Review Chinese college student innovation and entrepreneurship competition project reports, especially PDF reports that may contain embedded text or scanned page images. Use when Codex is asked to evaluate 大学生创新创业训练计划/中国国际大学生创新大赛-style project reports, identify 项目类型 such as 创新训练、创业训练、创业实践, score the dimensions 个人成长、项目创新、产业价值、团队协作, write concise Chinese review comments, and produce an Excel spreadsheet. |
CICSIC Reviewer
Python Interpreter
Before running any Python command for this skill, read .vscode/settings.json and use the absolute path in python.defaultInterpreterPath.
Run scripts with that explicit executable path, for example:
& '<python.defaultInterpreterPath>' scripts\extract_pdf_report.py reports_to_process\example.pdf --ocr-engine paddle -o extracted_reports\example.txt
Do not rely on bare python, VS Code terminal activation, or the currently active shell environment. If the configured interpreter path is missing or cannot import paddleocr, stop and report that environment issue before extracting or reviewing reports.
Workflow
- Run
scripts/check_review_environment.py with the configured interpreter from .vscode/settings.json. If it fails, stop and report the missing dependency, folder, model cache, or unexpected leftover. Do not install packages, download models, create folders, or delete files during the review unless the user explicitly asks for that separate maintenance step.
- Locate the input reports. By default, read PDFs from
reports_to_process/. If the user provides another folder, review every PDF in it unless they specify a subset.
- Before extracting or scoring, confirm the review setup to the user:
- Total score range: default
60-100, using the monotonic batch curve in the Scoring Rules section.
- Number of PDF reports to review: count the matching PDF files in the selected input folder or explicit subset, and state that number.
Ask the user to confirm this setup before continuing. If the user requests a different score range or subset, restate that exact range or subset count before proceeding.
- Extract report content. For batch work, run
scripts/batch_extract_reports.py --overwrite with the configured interpreter instead of looping over individual PDFs. The batch wrapper calls scripts/extract_pdf_report.py, writes each result to a temporary file first, retries with forced OCR if required target headings are missing or output is weak, promotes only usable extracted text, and writes review_spreadsheets/extraction-manifest.json with every success and failure. Use scripts/extract_pdf_report.py directly only for one-off diagnostics. The default filtered output keeps a 项目基本信息与类型线索(仅用于识别项目类型,不作为评分依据) block before the target result sections so 项目类型 can be identified from the report front matter. For scanned-image PDFs, the script tries PaddleOCR before Tesseract when --ocr-engine auto is used. The third target section 项目取得的成果或收获 must use section four 经费使用情况/项目经费使用情况/财务执行情况 as its preferred end boundary. If OCR dependencies are unavailable or extraction is weak, tell the user which files need OCR, section-heading review, or clearer source files.
- Identify 项目类型. Search near labels such as
项目类型, 项目类别, 项目组别, and the first pages of the report.
- Map 项目类型 to the correct grading standard:
创新训练 -> 创意组
创业训练 -> 创业组
创业实践 -> 创业组
- If multiple labels conflict, prefer the explicit value under
项目类型; otherwise mark the type as 待确认 and explain the assumption in the comment.
- Read
references/grading-standards.md before scoring.
- Before scoring, run
scripts/create_review_records.py to create review_spreadsheets/cicsic-review-records.json. Any file that does not contain both exact headings 项目执行情况概述和项目执行结果 and 项目取得的成果或收获 must not be scored; it must be recorded in review_spreadsheets/review-skip-log.json.
- Score each dimension independently as raw evidence-based scores, then apply the curve strategy below so the displayed dimension scores sum to a final grade from 60 to 100. Use only the
评分依据正文(仅以下目标章节用于评分) block and the target sections listed in TARGET_SECTIONS in scripts/extract_pdf_report.py as grading evidence. Do not use the cover page, 一、基本情况, or the 项目基本信息与类型线索 block to justify dimension scores; that material is only for identifying project type and metadata.
- Write one professional, concise Chinese comment per report. Keep each comment under 200 words unless the user requests another language or length.
- Produce a single consolidated
.xlsx workbook in review_spreadsheets/. For batch requests such as "review all reports in reports_to_process/", run scripts/write_review_workbook.py once on review_spreadsheets/cicsic-review-records.json so all scored reports appear in the same spreadsheet. The workbook script defaults to --score-min 60 --score-max 100; if the user confirmed another range, pass that range explicitly. Keep the JSON scoring record next to the workbook in review_spreadsheets/; the file should remain local and ignored by Git. Create separate workbooks only if the user explicitly asks.
Workspace Folders
reports_to_process/: Put PDF project reports here before review. Treat this as the default input folder.
extracted_reports/: Save extracted text here. Treat this as the only extracted-text folder; do not create parallel folders such as extracted_reports_full/.
review_spreadsheets/: Save generated Excel review workbooks and the corresponding JSON scoring records here. Treat this as the default output folder.
ocr_work/: Stable OCR page-rendering work folder used by scripts/extract_pdf_report.py.
.paddle-home/, .paddlex-cache/, .paddle-temp/: Stable PaddleOCR cache/temp folders used by scripts/extract_pdf_report.py.
These folders are tracked in Git with .gitkeep, while their contents are ignored so private reports, extracted text, OCR page images, cache files, and generated spreadsheets are not pushed. Do not create or delete mid-product folders during a review run; if a new working folder is genuinely necessary, add it as an empty .gitkeep folder first and update .gitignore.
Do not install Python packages, download OCR models, or create previously undeclared files/folders as part of review. requirements.txt, .vscode/settings.json, .gitignore, this skill file, and README.md are the source of truth for dependencies and expected outputs. If something is missing, stop before reviewing.
Scoring Rules
Use the maximum points from the mapped standard:
| 标准 | 个人成长 | 项目创新 | 产业价值 | 团队协作 | 总分 |
|---|
| 创意组 | 30 | 30 | 25 | 15 | 100 |
| 创业组 | 25 | 30 | 30 | 15 | 100 |
Assign dimension scores using evidence from the report. Do not reward unsupported claims as if they were demonstrated results.
Because the workbook applies a generous curve after raw scoring, raw dimension scores must be deliberately strict. Treat the raw scores as evidence-strength scores, not as final display scores:
- Reserve 90% or higher of a dimension's maximum for unusually complete evidence with concrete data, validation, outcomes, and limitations.
- Use roughly 80-89% only when the report is strong but still has ordinary gaps such as limited sample size, incomplete validation, preliminary IP/paper status, or thin market evidence.
- Use roughly 70-79% when the project is coherent and credible but evidence is mostly descriptive, lab-stage, or missing key implementation/market/team details.
- Use below 70% when claims are broad, weakly evidenced, internally inconsistent, or not tied to the target grading dimension.
Use this general calibration:
| Level | Guidance |
|---|
| Excellent | Evidence is specific, complete, and aligned with the standard; project has clear originality, feasibility, team fit, and demonstrated or credible value. |
| Good | Most required evidence is present, with some gaps in depth, data, validation, implementation, or financial/market logic. |
| Fair | Basic idea and structure are present, but evidence is thin, generic, internally inconsistent, or weakly tied to the grading standard. |
| Weak | Core evidence is missing, project type is unclear, feasibility is poor, or the report mostly uses slogans without support. |
Use a monotonic batch curve to preserve the original ranking while keeping final grades in the confirmed score range and making score differences visible. The default range is 60-100:
curved_total = score_min + (score_max - score_min) * (raw_total - batch_min_raw_total) / (batch_max_raw_total - batch_min_raw_total)
If all raw totals in a batch are identical, use the confirmed range midpoint as the fallback final grade. Otherwise, the lowest raw total in the batch maps to score_min, the highest maps to score_max, and all other projects are linearly placed between them. Distribute any upward curve adjustment back into the four dimensions according to each dimension's remaining headroom; when the curved total is below the raw total, scale the four dimensions down proportionally so that:
- no dimension exceeds its maximum;
- the four displayed dimension scores sum to
最终得分;
- the final ranking follows the raw total ranking.
Output Workbook
Create one workbook per review batch, with one row per report. When reviewing all PDFs in reports_to_process/, all reports must appear in the same worksheet of the same Excel file.
Use these columns:
文件名
项目类型
评审标准
个人成长
项目创新
产业价值
团队协作
最终得分
评语
The comment should mention the main strengths and the most important improvement points. Avoid long lists, vague praise, and repeated boilerplate. Write in Chinese unless the user explicitly requests another language.
Bundled Resources
scripts/check_review_environment.py: Read-only preflight for interpreter, folders, dependencies, Poppler commands, PaddleOCR cache, and runtime leftovers.
scripts/extract_pdf_report.py: Extract text from text PDFs and attempt OCR for scanned PDFs. It supports PaddleOCR (--ocr-engine paddle) and Tesseract (--ocr-engine tesseract), with PaddleOCR tried first in auto mode.
scripts/batch_extract_reports.py: Batch extraction driver that calls extract_pdf_report.py, retries with forced OCR when target headings are missing, writes review_spreadsheets/extraction-manifest.json, and only promotes valid extracted text.
scripts/create_review_records.py: Compare PDFs in reports_to_process/ with text files in extracted_reports/, convert valid extracted reports into review_spreadsheets/cicsic-review-records.json, and skip/log missing or heading-incomplete files.
scripts/write_review_workbook.py: Convert structured JSON review records into the required Excel workbook, defaulting to review_spreadsheets/cicsic-review-results.xlsx and a 60-100 final score range. Use --score-min and --score-max for a user-confirmed alternate range.
references/grading-standards.md: Working Markdown transcription of the grading standards.
references/中国国际大学生创新大赛(2025)评审规则.pdf: Original source PDF for the grading standards.
Script execution order: check_review_environment.py -> batch_extract_reports.py --overwrite -> create_review_records.py -> write_review_workbook.py.