Search papers, labs, and topics across Lattice.
A deterministic Python script, `cad_processor.py`, was developed to process administrative spreadsheet extracts, specifically Casual Academic Database (CAD) exports, to calculate cost-per-student ratios at subject-year and school-year levels. The script aggregates on-costs and student counts, generating a processed workbook with trend analysis, reports, and fuzzy banding for cost interpretation. The fuzzy banding uses per-year minimum, median, and maximum cost-per-student ratios as anchors to assign "Low", "Medium", or "High" labels, with deterministic tie-breaking to ensure reproducibility.
Stop relying on opaque spreadsheet magic: this tool provides a reproducible, auditable pipeline for turning raw academic data into interpretable cost-per-student reports.
Administrative extracts are often exchanged as spreadsheets and may be read as reports in their own right during budgeting, workload review, and governance discussions. When an exported workbook becomes the reference snapshot for such decisions, the transformation can be checked by recomputation against a clearly identified input. A deterministic, rule-governed, file-based workflow is implemented in cad_processor.py. The script ingests a Casual Academic Database (CAD) export workbook and aggregates inclusive on-costs and student counts into subject-year and school-year totals, from which it derives cost-per-student ratios. It writes a processed workbook with four sheets: Processing Summary (run record and counters), Trend Analysis (schoolyear cost-per-student matrix), Report (wide subject-level table), and Fuzzy Bands (per-year anchors, membership weights, and band labels). The run record includes a SHA-256 hash of the input workbook bytes to support snapshot-matched recomputation. For within-year interpretation, the workflow adds a simple fuzzy banding layer that labels finite, positive school-year cost-per-student values as Low, Medium, or High. The per-year anchors are the minimum, median, and maximum of the finite, positive ratios. Membership weights are computed using left-shoulder, triangular, and right-shoulder functions, with deterministic tie-breaking in a fixed priority order (Medium, then Low, then High). These weights are treated as decision-support signals rather than probabilities. A worked example provides a reproducible calculation of a band assignment from the reported anchors and ratios. Supplementary material includes a claim-to-evidence matrix, a reproducibility note, and a short glossary that links selected statements to code and workbook artefacts.