A shared Drive folder "Tổng kết năm học 25-26" (from the Fund
Director's personal Drive — the same one-way read-in lane used before;
workspace-ethics.md §1) holds the end-of-year ceremony package for
all six partner schools. It is a single bundle that touches
all four Foundation areas at once: media & stories, beneficiary
care, and donor/finance + stewardship.
This plan: inventory the corpus, list every action it supports (grouped by area), recommend a wave-by-wave sequencing with a low-risk pilot, name the real tool entry points to reuse, flag the constraints, and surface the four decisions only the administrator can make.
Root → 6 school sub-folders. Per school: a photographer photo set, raw video clips, a year-end summary report, speeches, an SE-assessment sheet (Đánh giá cảm xúc), and an awards sheet (Thưởng / Giải thưởng). Approx. 1,500 photos, ~320 videos, ~25 documents. All six are existing partner schools.
| Trường | Ảnh sự kiện | Ảnh thợ ảnh | Video | Tài liệu chính |
|---|---|---|---|---|
| THCS Tam Thanh | 21 | 167 | 13 + 191 clip thô | BC tổng kết; BC HMT; Đánh giá cảm xúc; Thưởng |
| THCS Tân Khánh | 67 | 168 | 14 | BC tổng kết; BC GVCN; phát biểu Hiệu trưởng; Giải thưởng |
| THCS Vĩnh Hào | 179 + 22 | 244 | 33 + 5 | BC tổng kết; phát biểu lớp; Danh sách thưởng |
| THCS Đại An | 76 | 196 | 16 | BC tổng kết; phát biểu GVCV; phát biểu HT (PDF); Đánh giá cảm xúc; Giải thưởng |
| THPT Lương Thế Vinh | 51 | 197 | 30 | BC tổng kết; 2 phát biểu; Danh sách thưởng |
| THPT Nguyễn Bính | 29 | 132 | 13 + 2 | BC cuối năm (×2 trùng); BC tổng kết; Các giải thưởng |
.docx is effectively a pre-written
coordinator brief. It narrates the ceremony beat-by-beat — opening
song/dance, screening of the Foundation's year clip, homeroom-teacher summary,
principal & Fund-Director speeches, a student's speech, the prize-giving
(sport / writing / academics), the class gift, the summer-English pledge — and
includes the event date (Tam Thanh = 19/5/2026), named winners with
cash amounts, and a verbatim parent thank-you letter.se doc type (petal 3).giay-khen note, a cash
benefit, and a school register milestone.brief.yaml (one per school ceremony). The year-end report is
the brief: pre-fill activity type, school, date, program, participants, event summary,
quote_1..7 (parent letter + student/principal lines, verbatim), the
outcome-for-child beat, petal anchor, and claim sources.awaiting-approval. Six dignified posts, each with a real quote and a
concrete outcome.2_Hoc-sinh/Tai-lieu-tong-hop/2025-2026/<trường>/
(intact) + machine-bucket .md/.txt extraction; catalog each in
source_doc (kind=consolidated). Filed by ownership, not by method.se school_report + a Block-3 profile note (petal 3) per matched student;
capture class rank.giay-khen profile note + a school register_entry
(kind=prize) + a cash benefit row (funding source = HMT year-end awards).milestone ("Lễ tổng kết 2025-2026"), headcount,
funding total, plus note rows; notable-student facts → profile notes.note
(reused for M5 / stewardship)._needs-review.md) for every
unmatched / ambiguous student — never silently filed.The corpus is large and spans live beneficiary data — do it in waves, not one shot.
| Wave | Nội dung | Rủi ro |
|---|---|---|
| 0 | Publish this plan to the review hub (you are reading it) → pick scope | — |
| 1 | Provenance + filing (G1, C1): copy corpus into Foundation Drive, file docs in the two spaces + catalog source_doc. --dry-run first | low |
| 2 | Pilot one school end-to-end (recommend Tam Thanh): M1→M2 (folder + brief + one drafted post) + C2/C3/C4 (SE + awards + report → registers, validated in place) | medium |
| 3 | Batch the other five through the proven Wave-2 path | medium |
| 4 | Aggregate + stewardship: M3 impact post, M4 journey story, C8 reports, F1/F2, M6 video — each its own gated step | varies |
tools/event_folder_core.py; brief schema
_system/forms/coordinator-brief-form-v1.yaml. For a bulk run, write
brief.yaml straight into each event folder rather than submitting the form 6×.tools/ingest_watch.py →
tools/pipeline_run.py --once (sanitise/EXIF-strip) →
tools/pipeline_run.py --bundle <dir> [--select …] [--milestone]
(cull → chrome → Opus caption → QC).tools/school_doc_extract.py (se,
giay-khen), tools/care_intake_convert.py,
tools/beneficiary_promote.py (the /record path),
tools/roster_match.py (dual name matcher),
tools/beneficiary_registry_migrate.py (schema:
source_doc, register_entry). Reports:
report_school.py / report_cohort.py / report_child.py.school_doc_extract's engine takes PDF
document input; the SE/awards data here is .xlsx/.docx. The proven path for
sheet data is the existing backfill_kq_drive.py pattern (openpyxl parse +
roster_match → school_report / register_entry / benefit). Wave 2 adapts
that, not the PDF path.source_doc / register_entry
are code-complete but uncommitted, and the catalog/register writers are only
partly built. Wave 1/2 commits the schema and adds thin writers — not a from-scratch build._needs-review.md, never force-matched.awaiting-approval; no
/approve, no post.--dry-run first,
backup + gcsfuse quiesce of the hub before any so-dang-ky.sqlite bucket
upload, verify after. The care bucket is the sole copy.