#!/usr/bin/env python3
"""the school Heads of Department Framework Course - master document.
Section and row serials are generated, not typed, so renumbering cannot drift.
"""
import os
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import mm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import (BaseDocTemplate, PageTemplate, Frame, Paragraph,
Spacer, Table, TableStyle, PageBreak, CondPageBreak,
NextPageTemplate)
LIB = "/usr/share/fonts/truetype/liberation/"
for n, f in [("Head", "LiberationSerif-Regular.ttf"), ("Head-B", "LiberationSerif-Bold.ttf"),
("Head-I", "LiberationSerif-Italic.ttf"), ("Body", "LiberationSans-Regular.ttf"),
("Body-B", "LiberationSans-Bold.ttf"), ("Body-I", "LiberationSans-Italic.ttf")]:
pdfmetrics.registerFont(TTFont(n, LIB + f))
pdfmetrics.registerFontFamily("Body", normal="Body", bold="Body-B",
italic="Body-I", boldItalic="Body-B")
pdfmetrics.registerFontFamily("Head", normal="Head", bold="Head-B",
italic="Head-I", boldItalic="Head-B")
FOREST, DEEP = colors.HexColor("#1B4332"), colors.HexColor("#0B2A1C")
GOLD, CREAM = colors.HexColor("#B08425"), colors.HexColor("#F4F7F4")
RULE, INK = colors.HexColor("#C8D5CC"), colors.HexColor("#1A1A1A")
S = {
"h1": ParagraphStyle("h1", fontName="Head-B", fontSize=15.5, leading=19.5,
textColor=DEEP, spaceBefore=13, spaceAfter=7),
"h2": ParagraphStyle("h2", fontName="Head-B", fontSize=11.5, leading=15,
textColor=FOREST, spaceBefore=10, spaceAfter=4),
"p": ParagraphStyle("p", fontName="Body", fontSize=9.6, leading=14.4,
textColor=INK, spaceAfter=6),
"bul": ParagraphStyle("bul", fontName="Body", fontSize=9.6, leading=14.4,
textColor=INK, spaceAfter=3, leftIndent=11, bulletIndent=2),
"cell": ParagraphStyle("cell", fontName="Body", fontSize=8.4, leading=11.6,
textColor=INK),
"cellh": ParagraphStyle("cellh", fontName="Body-B", fontSize=8.4, leading=11.6,
textColor=colors.white),
"callout": ParagraphStyle("callout", fontName="Body", fontSize=9.2, leading=13.6,
textColor=DEEP),
"calloutt": ParagraphStyle("calloutt", fontName="Body-B", fontSize=9.2, leading=13.6,
textColor=FOREST, spaceAfter=3),
"quote": ParagraphStyle("quote", fontName="Body-I", fontSize=9.2, leading=13.6,
textColor=DEEP, leftIndent=10, rightIndent=6),
"meta": ParagraphStyle("meta", fontName="Body", fontSize=9.4, leading=14,
textColor=colors.HexColor("#4A5A50")),
}
C, MD = [], []
N = {"sec": 0, "sub": 0}
def _md(t):
return (t.replace("<b>", "**").replace("</b>", "**")
.replace("<i>", "_").replace("</i>", "_"))
def h1(t):
N["sec"] += 1; N["sub"] = 0
s = f"{N['sec']}. {t}"
C.append(("h1", s)); MD.append("\n## " + s + "\n")
def h2(t):
N["sub"] += 1
s = f"{N['sec']}.{N['sub']} {t}"
C.append(("h2", s)); MD.append("\n### " + s + "\n")
def p(t):
C.append(("p", t)); MD.append(_md(t) + "\n")
def bullets(items):
C.append(("bul", items))
for i in items:
MD.append("- " + _md(i))
MD.append("")
def quote(t):
C.append(("quote", t)); MD.append("\n> " + t + "\n")
def callout(a, b):
C.append(("callout", a, b)); MD.append("\n> **" + a + "** " + _md(b) + "\n")
def cond():
C.append(("cond",))
def table(header, rows, widths, scope="sec"):
"""Row serials are generated from the current section/subsection."""
base = f"{N['sec']}" if scope == "sec" else f"{N['sec']}.{N['sub']}"
numbered = [[f"{base}.{i}"] + list(r) for i, r in enumerate(rows, 1)]
hdr = ["#"] + list(header)
C.append(("table", hdr, numbered, [widths[0]] + list(widths[1:])))
MD.append("| " + " | ".join(hdr) + " |")
MD.append("|" + "---|" * len(hdr))
for r in numbered:
MD.append("| " + " | ".join(_md(str(c)) for c in r) + " |")
MD.append("")
==================================================================== CONTENT
h1("Why this course exists")
p("Page 114 of the UAE School Inspection Framework sets out how an overall school "
"judgement is reached. It names four judgements that must themselves be Good or better "
"before a school can be Good or better overall.")
table(["Gate judgement", "Course indicator that feeds it"],
[["Students' progress", "1.2 Progress"],
["Teaching for effective learning", "3.1 Teaching for effective learning"],
["The effectiveness of leadership", "6.1 The effectiveness of leadership"],
["Self-evaluation and improvement planning",
"6.2 Self-evaluation and improvement planning"]],
[15 * mm, 70 * mm, 75 * mm])
p("Twelve of the fifteen elements in this course sit inside those four judgements. The "
"remaining three are the assessment indicator, 3.2, and they supply the information the "
"judgements are made from. The descriptor at 1.2.1 opens with the words <i>internal and "
"external assessment information indicates</i>. A department cannot evidence progress "
"without assessment information, and 6.2.2 cannot be met without it either.")
p("A Head of Department stands at the junction of all of it. The department is where "
"teaching is watched, where progress is produced, where assessment information is read, "
"and where last year's recommendations either move or do not.")
callout("The chain in one line",
"What you watch is 3.1. What tells you whether it worked is 3.2. What it must "
"produce is 1.2. How your reading of all three is judged is 6.2.2. Whether it "
"moved is 6.2.4. The leadership it demonstrates is 6.1.2 and 6.1.4.")
h1("The fifteen elements")
table(["Element", "Indicator", "Lesson"],
[["6.1.2 Educational leadership", "6.1", "1"],
["3.1.1 Teachers' knowledge of their subjects and how students learn them", "3.1", "2"],
["3.1.2 Lesson planning, the learning environment and the use of time and resources",
"3.1", "2"],
["3.1.3 Teacher–student interactions including the use of questioning and dialogue",
"3.1", "2"],
["3.1.4 Teaching strategies to meet the needs of individuals and groups of students",
"3.1", "3"],
["3.1.5 Teaching to develop critical thinking, problem-solving, innovation and "
"independent learning skills", "3.1", "3"],
["1.2.1 Progress against starting points and over time", "1.2", "4"],
["1.2.2 Progress in lessons", "1.2", "4"],
["1.2.3 Progress of different groups of students", "1.2", "4"],
["3.2.3 Analysis of assessment data to monitor students' progress", "3.2", "5"],
["3.2.4 Use of assessment information to influence teaching, the curriculum and "
"students' progress", "3.2", "5"],
["3.2.5 Teachers' knowledge of, and support for, students' learning", "3.2", "5"],
["6.2.2 Monitoring and evaluation of teaching and learning in relation to students' "
"achievements", "6.2", "6"],
["6.2.4 Improvement over time", "6.2", "7"],
["6.1.4 Capacity to innovate and improve", "6.1", "7"]],
[13 * mm, 106 * mm, 21 * mm, 20 * mm])
cond()
h1("How the course works")
table(["Component", "What it is"],
[["Seven lessons",
"Each opens with the framework element in its own words, isolates the line that "
"separates Good from Acceptable, and ends with one task carrying a named "
"instrument and a stated target."],
["Checkpoints",
"Short questions inside each lesson. They test recognition of the descriptor "
"language, not recall of a definition."],
["Paired descriptor check",
"Two Heads of Department mark the same lesson, or the same portfolio, against the "
"same element and compare the word each chose. Where the words differ, the "
"descriptor settles it rather than seniority."],
["Department Evidence File",
"The seven task artefacts assemble into one file, closing with a change the "
"department made and its measured effect on students."],
["Final Check",
"A mock inspection dialogue. Four exchanges, each carrying one failure mode: the "
"overclaim, the quantifier slip, the data ornament, the misfiled element."],
["Certificate",
"Issued on completion of the Final Check, countersigned by the Principal, carrying "
"a verification identifier."]],
[14 * mm, 42 * mm, 104 * mm])
p("The course is a sequence, not a schedule. A Head of Department who completes it in a "
"fortnight and one who takes a term arrive at the same place.")
h1("The shared vocabulary")
h2("The six-point scale")
p("Every element is described at six levels: Outstanding, Very Good, Good, Acceptable, "
"Weak, Very Weak. Good is the expected level. Acceptable is not a pass mark; it is the "
"level below the expectation.")
h2("The quantifiers")
p("The framework fixes what its quantity words mean. They are not adjustable.")
table(["Word", "Range"],
[["Almost all", "Greater than 90%"], ["Most", "75% – 90%"],
["Large majority", "61% – 74%"], ["Majority", "50% – 60%"],
["Large minority", "31% – 49%"], ["Minority", "16% – 30%"],
["Few", "Up to 15%"]],
[20 * mm, 50 * mm, 50 * mm], scope="sub")
callout("The trap that costs departments a grade",
"A larger quantifier does not mean a higher judgement. In 1.2.1, Acceptable says "
"<b>most</b> students make the <b>expected</b> progress, while Good says the "
"<b>majority</b> make <b>better than expected</b> progress. Most is the bigger "
"number. The quality word carries the judgement, not the quantifier.")
h2("The groups")
p("Where the framework refers to groups of students, it means these:")
bullets(["boys and girls", "Emirati students", "lower and higher attaining students",
"students with special educational needs",
"students with particular gifts or talents",
"students for whom the language of instruction is an additional language",
"students whose first language is Arabic, including children in the early years"])
h2("Which standard owns which claim")
p("Standard 1 describes what students do. Standard 3 describes what teachers do. When a "
"piece of professional development, or a piece of departmental evidence, is filed "
"against an element, the standard has to match the actor. Filing a teacher behaviour "
"against a student element produces a claim that cannot be evidenced by the thing that "
"was actually done.")
table(["If the claim is about", "The element lives at", "The slip it prevents"],
[["A teacher's questioning and dialogue", "3.1.3",
"Filing a questioning session at 1.3.3, which is students applying learning to "
"the world and connecting areas of learning."],
["A teacher developing thinking and independent learning", "3.1.5",
"Filing teacher action research at 1.3.4, which describes students doing enquiry "
"and research for themselves."],
["How a lesson is planned and structured", "3.1.2",
"Filing lesson structure at 1.1.3, which is students' knowledge, skills and "
"understanding in the key subjects."],
["What students achieved as a result", "Standard 1",
"Claiming a student outcome from a record of teacher activity, with no student "
"evidence attached."]],
[14 * mm, 44 * mm, 26 * mm, 76 * mm], scope="sub")
p("The fix is usually a citation change rather than a content change. A session on "
"questioning is good practice whichever number is written beside it; filed at 3.1.3 it "
"also becomes evidence for a gate judgement. Where a claim on a Standard 1 element is "
"wanted, the design has to put the students in the active role, and then both elements "
"can be evidenced from the same work.")
cond()
h1("Lesson 1 — The department as a unit of leadership")
h2("Element")
p("<b>6.1.2 Educational leadership</b>")
h2("The line between Good and Acceptable")
table(["Good", "Acceptable"],
[["Most leaders demonstrate <b>secure</b> knowledge of the curriculum and best "
"practices in teaching, learning and assessment. They are <b>effective in "
"establishing</b> a positive learning culture and in achieving high standards of "
"students' learning and personal development.",
"Most leaders demonstrate <b>basic</b> knowledge of the curriculum and best "
"practices in teaching, learning and assessment. The school culture <b>generally "
"focuses</b> on being inclusive and on students' learning and personal "
"development."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
p("Two words do the work: <b>secure</b> against <b>basic</b>, and <b>effective in "
"establishing</b> against <b>generally focuses</b>. The second pair is the sharper. "
"Acceptable describes a culture that tends in the right direction. Good describes a "
"leader who built it.")
h2("Why this element belongs to Heads of Department")
p("The framework defines the role before it judges it. Its glossary describes a subject "
"leader as part of the middle leadership of a school, holding management and leadership "
"responsibilities for an academic subject.")
p("Standard 6 is written to match. The descriptors at 6.1.1, 6.1.2 and 6.1.4 open with "
"<i>leaders at all levels</i>. At 6.1.4 that phrasing runs from Outstanding down through "
"Acceptable. The judgement is not the Principal's alone to earn or to lose.")
h2("Checkpoints")
table(["Question", "What the framework says"],
[["A Head of Department says: my teachers know their subject well. Which element "
"has been described?",
"3.1.1, which is about the teachers. 6.1.2 judges the Head of Department's own "
"knowledge, across curriculum, teaching, learning and assessment."],
["Which is nearer Good: <i>we review the scheme of work every July</i>, or <i>we "
"changed the Year 9 sequence because the January data showed the algebra unit was "
"not holding</i>?",
"The second. Good is written in terms of effectiveness in achieving standards, "
"not the existence of a process."],
["Good or Acceptable: <i>the department has a positive atmosphere and the students "
"seem happy</i>.",
"Acceptable at best. A culture that generally focuses in the right direction, with "
"no claim of a leader establishing it or of high standards achieved."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
h2("Task")
table(["Artefact", "Instrument", "Target"],
[["A one-page department statement answering three questions: what the curriculum "
"requires at each stage, what good teaching of this subject looks like, and what "
"the department's assessment says right now.",
"Scheme of work and the current department assessment record.",
"Three questions answered without reference to a folder."]],
[14 * mm, 76 * mm, 40 * mm, 30 * mm], scope="sub")
cond()
h1("Lesson 2 — Reading a lesson: knowledge, planning, dialogue")
h2("Elements")
bullets(["<b>3.1.1</b> Teachers' knowledge of their subjects and how students learn them",
"<b>3.1.2</b> Lesson planning, the learning environment and the use of time and "
"resources",
"<b>3.1.3</b> Teacher–student interactions including the use of questioning and "
"dialogue"])
h2("The line between Good and Acceptable")
table(["Element", "Good", "Acceptable"],
[["3.1.1",
"Most teachers <b>consistently apply</b> their knowledge of their subjects and how "
"students learn them.",
"Most teachers <b>demonstrate secure</b> knowledge of their subjects and how "
"students learn them."],
["3.1.2",
"Teachers plan <b>purposeful</b> lessons, provide <b>interesting</b> learning "
"environments and use time and resources <b>effectively</b> to enable students to "
"be <b>successful learners</b>.",
"Teachers plan lessons, manage time and use resources <b>appropriately</b> to "
"provide environments where students can <b>meet learning expectations</b>."],
["3.1.3",
"Interactions ensure students are <b>engaged</b> learners. Questioning promotes "
"<b>thought and considered responses</b>. Dialogue engages students in meaningful "
"discussions <b>and reflection</b>.",
"Interactions ensure students are <b>willing</b> learners. Questioning and dialogue "
"engages students in meaningful discussions."]],
[13 * mm, 19 * mm, 64 * mm, 64 * mm], scope="sub")
h2("What to listen for")
p("In 3.1.1 the shift is from possessing knowledge to applying it consistently. A teacher "
"who knows the subject and teaches it well on the days you visit has not yet met the "
"descriptor; the word is consistently.")
p("In 3.1.2 every Acceptable word is procedural — plan, manage, appropriately — and every "
"Good word is about effect: purposeful, interesting, effectively, successful. The "
"question is not whether the lesson was organised but whether the organisation was for "
"something.")
p("In 3.1.3 the single missing word in the Acceptable descriptor is <b>reflection</b>. "
"Acceptable stops at meaningful discussion. Good requires that students are also asked "
"to think about their own thinking. The second word to hear is <b>engaged</b> against "
"<b>willing</b>: a willing class complies, an engaged class is doing the work of "
"learning.")
h2("Checkpoints")
table(["Question", "What the framework says"],
[["A class answers every question the teacher asks, politely and accurately, and "
"moves on. Which descriptor fits?",
"Willing learners — 3.1.3 Acceptable. Compliance is not engagement, and no "
"reflection has been asked for."],
["The teacher's subject knowledge is excellent but the explanation assumed a step "
"the students had not met. Which element is in question?",
"3.1.1, which pairs subject knowledge with knowledge of how students learn it. "
"Both halves are named in the element."],
["The lesson ran to time, resources were ready, students completed the worksheet. "
"Good or Acceptable on 3.1.2?",
"Acceptable. Every term used is procedural. Nothing is claimed about purpose or "
"about students becoming successful learners."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
h2("Task")
table(["Artefact", "Instrument", "Target"],
[["Six descriptor words — one per element, per lesson — recorded honestly and "
"unsoftened.",
"Two lesson observations in the department.",
"Two lessons, three elements each, six words recorded."]],
[14 * mm, 76 * mm, 40 * mm, 30 * mm], scope="sub")
cond()
h1("Lesson 3 — Reading a lesson: strategy and thinking")
h2("Elements")
bullets(["<b>3.1.4</b> Teaching strategies to meet the needs of individuals and groups of "
"students",
"<b>3.1.5</b> Teaching to develop critical thinking, problem-solving, innovation "
"and independent learning skills"])
h2("The line between Good and Acceptable")
table(["Element", "Good", "Acceptable"],
[["3.1.4",
"Teachers use strategies that are effective in meeting the <b>individual</b> needs "
"of the students. They provide <b>appropriate levels</b> of challenge and support.",
"Teachers use strategies that adequately meet the needs of <b>groups</b> of "
"students. They provide challenge and support generally but this is <b>not always "
"sufficiently personalised</b>."],
["3.1.5",
"Teachers <b>systematically</b> develop students' critical thinking, "
"problem-solving, innovation and independent learning skills.",
"Teachers <b>sometimes</b> develop students' critical thinking, problem-solving, "
"innovation and independent learning skills."]],
[13 * mm, 19 * mm, 64 * mm, 64 * mm], scope="sub")
h2("The narrowest gap in the framework")
p("3.1.5 is decided by one adverb. The wording of the two descriptors is otherwise "
"identical: systematically against sometimes. Nothing about quality separates them. A "
"department can produce a genuinely excellent problem-solving lesson once a term and "
"still sit at Acceptable, because once a term is sometimes.")
p("This makes 3.1.5 the most recoverable element on the list. It does not require better "
"teaching. It requires the thinking task to be built into the scheme of work rather than "
"left to the day a teacher feels inspired.")
h2("Individuals, not groups")
p("3.1.4 moves the unit from the group to the individual. Acceptable already covers "
"differentiated worksheets for three ability bands; that is meeting the needs of groups. "
"Good asks whether the challenge and support reached the student. The word the "
"Acceptable descriptor uses against itself is <b>personalised</b>.")
h2("Checkpoints")
table(["Question", "What the framework says"],
[["Three worksheets, one per ability band, every lesson. Which level?",
"Acceptable on 3.1.4. Groups have been met; individuals have not been named."],
["A brilliant open-ended investigation, once each half term. Which level on 3.1.5?",
"Acceptable. Sometimes. Quality does not substitute for frequency in this element."],
["What would move 3.1.5 to Good without changing the quality of any single lesson?",
"Placing a task that requires students to reason toward an answer not given to "
"them into the scheme of work at a stated interval, so that it happens by design "
"rather than by inclination."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
h2("Task")
table(["Artefact", "Instrument", "Target"],
[["A frequency count: lessons containing a task that requires students to reason "
"toward an answer not given to them, against total lessons.",
"One teacher's lesson plans across a fortnight.",
"A count expressed as a proportion, not an impression."]],
[14 * mm, 76 * mm, 40 * mm, 30 * mm], scope="sub")
cond()
h1("Lesson 4 — Progress")
h2("Elements")
bullets(["<b>1.2.1</b> Progress of students, including those with special educational "
"needs, against their starting points and over time",
"<b>1.2.2</b> Progress in lessons",
"<b>1.2.3</b> Progress of different groups of students"])
h2("The line between Good and Acceptable")
table(["Element", "Good", "Acceptable"],
[["1.2.1",
"Internal and external assessment information indicates that the <b>majority</b> "
"of students make <b>better than expected</b> progress in relation to their "
"individual starting points and the curriculum standards.",
"Internal and external assessment information indicates that <b>most</b> students "
"make the <b>expected</b> progress in relation to individual starting points and "
"the curriculum standards."],
["1.2.2",
"In lessons, the <b>majority</b> of students make <b>better than expected</b> "
"progress in relation to appropriate learning objectives aligned with the expected "
"curriculum standards.",
"In lessons, <b>most</b> students make <b>expected</b> progress in relation to "
"appropriate learning objectives aligned with the expected curriculum standards "
"and a <b>few</b> make better progress."],
["1.2.3",
"The <b>majority of groups</b> of students make <b>better than expected</b> "
"progress.",
"<b>All groups</b> make at least <b>expected</b> progress, although there may be "
"some <b>unevenness</b> in progress between groups."]],
[13 * mm, 19 * mm, 64 * mm, 64 * mm], scope="sub")
h2("Read the columns again")
p("In all three elements the Acceptable descriptor carries the larger quantifier. Most is "
"75 to 90 per cent; majority is 50 to 60 per cent. A department reporting that most of "
"its students made expected progress has read out the Acceptable descriptor word for "
"word while believing it has made a strong claim.")
p("The judgement lives in <b>better than expected</b>. Everything else is arithmetic.")
h2("Against what")
p("1.2.1 measures against two things at once: the student's individual starting point and "
"the curriculum standards. A cohort that arrived low and moved a long way still has to "
"be read against the standard. A cohort that arrived high and stayed high has not yet "
"demonstrated progress.")
p("1.2.2 measures against learning objectives <i>aligned with the expected curriculum "
"standards</i>. An objective pitched below the standard cannot generate better than "
"expected progress, however completely the class meets it. This is where a department's "
"objective-setting practice becomes an achievement question rather than a planning one.")
callout("Insertion point — the school's lesson-objective instrument",
"The paragraph joining 1.2.2 to the school's own lesson-objective tracker is to be "
"written against that instrument. It is not in this session and nothing about its "
"contents has been assumed.")
h2("The cap in 1.2.3")
p("1.2.3 is the only element in this course with a floor written into its Weak descriptor: "
"at least one significant group of students does not make the expected progress. One "
"group is enough. A department strong across the cohort but weak for, say, students for "
"whom the language of instruction is an additional language has a 1.2.3 problem that no "
"overall average will cover.")
h2("Checkpoints")
table(["Question", "What the framework says"],
[["<i>Most of our students made the progress we expected.</i> Which descriptor has "
"been read out?", "1.2.1 Acceptable, verbatim."],
["A class meets every learning objective set for it, but the objectives sit below "
"the curriculum standard. What can be claimed on 1.2.2?",
"Very little. The element measures against objectives aligned with the expected "
"standards. Alignment is part of the descriptor, not a preliminary to it."],
["Department average progress is strong; boys are half a grade behind girls "
"throughout. Which element carries this?",
"1.2.3. Unevenness between groups is named in the Acceptable descriptor, and a "
"significant group falling below expected progress appears in the Weak one."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
h2("Task")
table(["Artefact", "Instrument", "Target"],
[["A group evidence audit: the seven groups as they exist in the department, each "
"marked evidenced separately or not.",
"The department assessment record.",
"All seven groups listed; every unevidenced group named rather than estimated."]],
[14 * mm, 76 * mm, 40 * mm, 30 * mm], scope="sub")
cond()
h1("Lesson 5 — Assessment information and what it is for")
h2("Elements")
bullets(["<b>3.2.3</b> Analysis of assessment data to monitor students' progress",
"<b>3.2.4</b> Use of assessment information to influence teaching, the curriculum "
"and students' progress",
"<b>3.2.5</b> Teachers' knowledge of, and support for, students' learning"])
h2("The line between Good and Acceptable")
table(["Element", "Good", "Acceptable"],
[["3.2.3",
"Assessment data are analysed <b>in some depth</b>. Information about students' "
"progress, as individuals and as groups, is <b>accurate and detailed</b>. It is "
"<b>tracked over time</b>.",
"Assessment data are analysed <b>but</b> information about students' progress, as "
"individuals and as groups, <b>may be superficial or underdeveloped</b>."],
["3.2.4",
"Assessment information is used <b>effectively to influence</b> teaching and the "
"curriculum in order to meet the learning needs of <b>all groups</b> of students "
"and <b>enhance their progress</b>.",
"Assessment information is used <b>adequately to inform</b> teaching and curriculum "
"planning in order to meet the needs of <b>groups</b> of students."],
["3.2.5",
"Teachers have <b>good</b> knowledge of the strengths and weaknesses of individual "
"students. They provide <b>well-focused</b> challenge, support, feedback and "
"follow-up. Students are <b>usually involved</b> in assessing their own learning.",
"Teachers have <b>reasonable</b> knowledge of the strengths and weaknesses of "
"individual students. They provide <b>some</b> challenge, support, feedback and "
"follow-up. Students are <b>sometimes involved</b> in assessing their own "
"learning."]],
[13 * mm, 19 * mm, 64 * mm, 64 * mm], scope="sub")
h2("Influence against inform")
p("3.2.4 turns on two words that sound almost the same and are not. Acceptable data "
"<b>informs</b> planning: it is present when the planning is done. Good data "
"<b>influences</b> teaching and the curriculum: something is different because of it, "
"and the difference reaches all groups and enhances their progress.")
p("This is the same distinction 6.2.2 makes about monitoring, one indicator earlier. A "
"department that can answer <i>what changed because of this data</i> is answering both "
"elements at once.")
h2("Tracked over time")
p("The phrase <b>tracked over time</b> appears in 3.2.3 at Good and above and is absent "
"from Acceptable. A single accurate snapshot, however well presented, meets the "
"Acceptable wording. Tracking requires the same students measured at more than one point "
"and the two readings compared.")
p("3.2.3 also names the unit twice: <i>as individuals and as groups</i>. Group-level "
"analysis alone is not the element, and neither is a list of individuals. Both are "
"required, which is the same demand 1.2.3 makes from the achievement side.")
h2("The clause most often missing")
p("3.2.5 has three clauses: knowledge of individual strengths and weaknesses; well-focused "
"challenge, support, feedback and follow-up; and students usually involved in assessing "
"their own learning. The third is the one departments most often cannot evidence. It is "
"also the cheapest to build, because it asks for a routine rather than a resource.")
h2("Checkpoints")
table(["Question", "What the framework says"],
[["The department produces an accurate, well-presented analysis of the November "
"assessment. Which level on 3.2.3?",
"Acceptable to Good depending on depth, but not Good on the strength of one "
"sitting. Tracked over time requires a second reading of the same students, "
"compared."],
["<i>We use CAT4 data when we write our schemes of work.</i> Good or Acceptable on "
"3.2.4?",
"Acceptable as stated. The data has informed planning. Good requires something to "
"have been influenced — a named change reaching all groups."],
["A department gives detailed written feedback on every assessment. Which clause of "
"3.2.5 is still open?",
"The third. Feedback is provided to students; the descriptor also asks that "
"students are usually involved in assessing their own learning."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
h2("Task")
table(["Artefact", "Instrument", "Target"],
[["A one-page assessment note stating what the department's data influenced, naming "
"the change and the group it reached.",
"Department assessment data at two or more points in time.",
"One named change, traceable to a reading of the data, not a general intention."]],
[14 * mm, 76 * mm, 40 * mm, 30 * mm], scope="sub")
cond()
h1("Lesson 6 — Joining observation to achievement")
h2("Element")
p("<b>6.2.2 Monitoring and evaluation of teaching and learning in relation to students' "
"achievements</b>")
h2("The line between Good and Acceptable")
table(["Good", "Acceptable"],
[["<b>Effective monitoring</b> ensures that there is <b>appropriate evaluation</b> "
"of teaching and learning <b>and their effect on students' achievement</b>.",
"Monitoring of teaching and learning <b>takes place</b> but it is <b>not "
"sufficiently focused on their effect</b> on students' achievement."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
p("This is the hinge of the course, and its Acceptable descriptor is the most useful "
"sentence in the framework for a Head of Department. It describes a department that is "
"working hard. Observations happen. Records exist. The descriptor grants all of that and "
"then withholds the grade, for one reason: the monitoring never landed on achievement.")
h2("What a Good monitoring cycle contains")
table(["Part", "What it produces"],
[["Observation",
"A record of what was seen, written in the language of 3.1's five elements rather "
"than in general praise."],
["Achievement",
"The assessment information for the same students over the same period, read as "
"Lesson 5 requires."],
["The join",
"The two placed side by side, deliberately, as one document or one conversation."],
["The conclusion",
"A statement of whether the teaching seen produced the progress recorded, and what "
"follows from it."]],
[14 * mm, 30 * mm, 116 * mm], scope="sub")
p("A department that performs the first part thoroughly and stops there is at Acceptable, "
"and the volume of observation makes no difference. Twelve observations never read "
"against results are twelve pieces of evidence for the Acceptable descriptor.")
h2("Receiving a teacher's action research portfolio")
p("Where teachers carry out classroom action research, the portfolio they produce — a "
"problem statement, a data collection tool, an analysis, an action plan and a reflection "
"— is 6.2.2 evidence in raw form. It already contains the observation and the "
"achievement. What it does not contain is the join.")
p("A portfolio that is collected, acknowledged and filed leaves the department at "
"Acceptable. It becomes evaluation at the moment a Head of Department reads it against "
"the descriptor, states whether the intervention produced the progress claimed, and "
"records what follows for the rest of the department. That reading takes minutes. Its "
"absence is the difference between two grades.")
callout("The question behind the question",
"An inspector who asks how often you monitor is not collecting a number. The "
"number opens a two-part question whose second half is <i>and what changed as a "
"result</i>. Volume answers the first half only.")
h2("Checkpoints")
table(["Question", "What the framework says"],
[["<i>Every teacher is observed once a term and receives written feedback.</i> Which "
"level?",
"Acceptable. Monitoring takes place. Nothing in the statement reaches the effect "
"on achievement."],
["What single addition moves that statement toward Good?",
"Reading the observation against the same students' assessment information, and "
"recording the conclusion drawn."],
["Thirty teacher portfolios are submitted and filed. What has been evidenced?",
"That monitoring takes place. The evaluation begins when a portfolio is read "
"against the descriptor and a conclusion is recorded."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
h2("Task")
table(["Artefact", "Instrument", "Target"],
[["Three sentences: what the teaching looked like, what the students achieved, and "
"what the first tells you about the second.",
"One observation record and the results for the same class — or one teacher "
"action research portfolio.",
"The third sentence written. If it is hard to write, that difficulty is the "
"finding."]],
[14 * mm, 76 * mm, 40 * mm, 30 * mm], scope="sub")
cond()
h1("Lesson 7 — Improvement over time and the capacity to improve")
h2("Elements")
bullets(["<b>6.2.4</b> Improvement over time",
"<b>6.1.4</b> Capacity to innovate and improve"])
h2("The line between Good and Acceptable")
table(["Element", "Good", "Acceptable"],
[["6.2.4",
"There has been <b>significant progress</b> in addressing <b>almost all</b> of the "
"recommendations in the previous inspection report. The school has shown "
"<b>sustained</b> improvements over time in most key areas.",
"There has been <b>progress</b> in addressing <b>most</b> of the recommendations "
"from the previous inspection report. The school has shown improvements over time "
"in most key areas but these <b>may be inconsistent or not sustained</b>."],
["6.1.4",
"Leaders at all levels demonstrate <b>clear understanding</b> of what needs to be "
"done to innovate and to improve the school. They are <b>effective in addressing "
"potential barriers</b> in order to sustain improvement.",
"Leaders at all levels demonstrate <b>awareness</b> that further improvements can "
"be made. They may be <b>inconsistent in addressing potential barriers</b> but "
"they demonstrate sufficient capacity to make required improvements."]],
[13 * mm, 19 * mm, 64 * mm, 64 * mm], scope="sub")
h2("Almost all")
p("Almost all is defined in the framework as greater than 90 per cent. Most is 75 to 90. "
"Applied to a short list of recommendations the difference is not statistical: there is "
"no room to leave one of them untouched. A department that has addressed two "
"recommendations well and set the third aside has produced the Acceptable descriptor.")
p("The second half of 6.2.4 is quieter and harder. <b>Sustained</b> against <b>may be "
"inconsistent or not sustained</b>. One strong year does not satisfy it. The element is "
"named improvement <i>over time</i>, and time is the evidence.")
callout("Insertion point — previous recommendations",
"The recommendations from the school's most recent published inspection report are "
"to be inserted here verbatim, as issued. They are not in this session and have "
"not been characterised from memory.")
h2("Awareness is not understanding")
p("6.1.4 separates two postures. Acceptable is retrospective: leaders are aware that "
"further improvement can be made, and address barriers when the barriers arrive. Good is "
"prospective: leaders know what needs to be done, and are effective in addressing "
"potential barriers — potential, before they bite — in order to sustain improvement.")
h2("Checkpoints")
table(["Question", "What the framework says"],
[["Two of three recommendations addressed strongly, one not begun. Which level on "
"6.2.4?",
"Acceptable. Good requires significant progress on almost all of them."],
["Results rose sharply last year after two flat years. Does this satisfy 6.2.4 at "
"Good?",
"Not on its own. Good requires sustained improvement over time; a single year sits "
"inside the Acceptable wording about improvements that may be inconsistent."],
["<i>We deal with problems as they come up and we always find a way.</i> Which "
"descriptor?",
"6.1.4 Acceptable. Sufficient capacity is granted; anticipation of potential "
"barriers is not claimed."]],
[14 * mm, 73 * mm, 73 * mm], scope="sub")
h2("Task")
table(["Artefact", "Instrument", "Target"],
[["One sentence naming the barrier most likely to stop the department improving next "
"term, and one sentence stating what has already been done about it.",
"The previous inspection recommendations and the department improvement record.",
"Both sentences written. An empty second sentence is itself the 6.1.4 finding."]],
[14 * mm, 76 * mm, 40 * mm, 30 * mm], scope="sub")
cond()
h1("Final Check")
p("Four exchanges with an inspector. Each carries one failure mode. The Final Check is "
"passed by recognising the mode, not by producing a longer answer.")
h2("Exchange one — the overclaim")
quote("Inspector: Tell me about critical thinking in your department.")
quote("Head of Department: All my teachers develop critical thinking. It runs through "
"everything we do.")
p("<b>The mode:</b> a claim that cannot be checked, offered in place of one that can. "
"3.1.5 is decided by frequency. <i>Runs through everything</i> is not a frequency.")
p("<b>What meets the element:</b> the count from the fortnight of lesson plans, the "
"interval at which the task appears in the scheme of work, and the name of the person "
"who checks that it did.")
h2("Exchange two — the quantifier slip")
quote("Inspector: How is progress in your department?")
quote("Head of Department: Strong. Most of our students made the progress we expected of "
"them.")
p("<b>The mode:</b> reading out the Acceptable descriptor in the belief that it is a "
"strong claim. 1.2.1 Acceptable is most students making expected progress. Good is the "
"majority making better than expected progress.")
p("<b>What meets the element:</b> the proportion exceeding expected progress, against "
"starting points and the curriculum standard, with the 1.2.3 group breakdown alongside.")
h2("Exchange three — the data ornament")
quote("Inspector: How do you know your monitoring is working?")
quote("Head of Department: We have a full tracking sheet for every class, colour-coded by "
"term.")
p("<b>The mode:</b> displaying data as though display were evaluation. It meets 6.2.2 "
"Acceptable and 3.2.4 Acceptable at once: monitoring takes place, and information is "
"present at planning.")
p("<b>What meets the element:</b> one decision the sheet caused. What was seen, what the "
"students achieved, what was concluded, what changed.")
h2("Exchange four — the misfiled element")
quote("Inspector: Your plan says this term's work evidences students' enquiry and research "
"skills.")
quote("Head of Department: Yes — all our teachers completed an action research cycle.")
p("<b>The mode:</b> the actor and the standard do not match. 1.3.4 describes students "
"doing enquiry and research for themselves. Teacher action research is teaching "
"practice, and its element is 3.1.5.")
p("<b>What meets the element:</b> file the work at 3.1.5, where it is strong evidence — or "
"design the intervention so that the students carry out the enquiry, and then both "
"elements are evidenced from the same work. The claim fails only where the number and "
"the actor disagree.")
h2("Passing")
p("The Final Check is passed when all four modes are named and, for each, the "
"corresponding element is identified correctly. A Head of Department who can hear these "
"four answers coming out of their own mouth and stop has learned what the course "
"teaches.")
h1("The Department Evidence File")
p("The seven task artefacts assemble into a single file. Each carries the instrument it "
"was drawn from, so that every claim in it can be traced without a conversation.")
table(["From", "The file holds"],
[["Lesson 1", "The department statement — curriculum, good teaching, current picture."],
["Lesson 2", "Six descriptor words from two observed lessons."],
["Lesson 3", "The frequency count for reasoning tasks."],
["Lesson 4", "The group evidence audit across the seven named groups."],
["Lesson 5", "The assessment note: what the data influenced, and for whom."],
["Lesson 6", "The three-sentence join between teaching seen and progress recorded."],
["Lesson 7", "The barrier statement and the action already taken."]],
[16 * mm, 24 * mm, 120 * mm])
p("The file closes with one further entry: a change the department made during the course "
"and the measured effect of that change on students. Without it the file records "
"activity. With it the file records improvement, which is what 6.2.4 and 6.2.2 are both "
"asking to see.")
h1("Certificate")
p("Issued on completion of the Final Check.")
table(["Field", "Content"],
[["Awarded to", "[Head of Department name]"],
["Course", "Heads of Department Framework Course"],
["School", "English Language Private School"],
["Scope", "Fifteen elements across five performance indicators: 1.2, 3.1, 3.2, 6.1 "
"and 6.2"],
["Countersigned", "Principal"],
["Verification", "Certificate identifier, verifiable against the platform"]],
[14 * mm, 34 * mm, 112 * mm])
p("The name field carries a placeholder in every specimen and in every document about the "
"course. No real name appears on an unissued certificate.")
h1("Source note")
table(["Item", "Status"],
[["All element titles, descriptors and quantifiers",
"Taken from the UAE School Inspection Framework supplied for this session. "
"Descriptor wording is quoted or closely followed so the ladder words are exact."],
["The four gate judgements",
"The overall-judgement statements on page 114 of the same document."],
["The definition of a subject leader",
"The framework's glossary of terms."],
["The seven student groups",
"The framework's section on judging students' attainment, progress and learning "
"skills."],
["The school's lesson-objective instrument",
"Not supplied in this session. Lesson 4 carries a marked insertion point."],
["Previous inspection recommendations",
"Not supplied in this session. Lesson 7 carries a marked insertion point."],
["School ratings and results",
"No figure for the school's performance appears anywhere in this document."]],
[14 * mm, 46 * mm, 100 * mm])
==================================================================== RENDER
def cover(cv, doc):
cv.saveState()
cv.setFillColor(DEEP); cv.rect(0, A4[1] - 118 * mm, A4[0], 118 * mm, stroke=0, fill=1)
cv.setFillColor(GOLD); cv.rect(0, A4[1] - 121 * mm, A4[0], 3 * mm, stroke=0, fill=1)
cv.setFillColor(colors.white); cv.setFont("Head-B", 30)
cv.drawString(25 * mm, A4[1] - 62 * mm, "Heads of Department")
cv.setFont("Head", 24)
cv.drawString(25 * mm, A4[1] - 76 * mm, "Framework Course")
cv.setFillColor(GOLD); cv.setFont("Body-B", 11)
cv.drawString(25 * mm, A4[1] - 92 * mm, "ENGLISH LANGUAGE PRIVATE SCHOOL")
cv.setFillColor(colors.HexColor("#9FB3A6")); cv.setFont("Body", 9.5)
cv.drawString(25 * mm, A4[1] - 101 * mm,
"Fifteen elements \u00b7 Seven lessons \u00b7 "
"Five performance indicators")
cv.setFillColor(FOREST); cv.setFont("Body", 9)
cv.drawString(25 * mm, 22 * mm, "Aligned to the UAE School Inspection Framework")
cv.restoreState()
def later(cv, doc):
cv.saveState()
cv.setFillColor(FOREST); cv.setFont("Body", 7.6)
cv.drawString(25 * mm, A4[1] - 14 * mm,
"Heads of Department Framework Course \u00b7 "
"English Language Private School")
cv.setStrokeColor(RULE); cv.setLineWidth(0.5)
cv.line(25 * mm, A4[1] - 17 * mm, A4[0] - 25 * mm, A4[1] - 17 * mm)
cv.setFillColor(colors.HexColor("#6B7A70"))
cv.drawRightString(A4[0] - 25 * mm, 13 * mm, str(doc.page - 1))
cv.restoreState()
OUT = "/mnt/user-data/outputs/the school-HOD-Framework-Course.pdf"
os.makedirs("/mnt/user-data/outputs", exist_ok=True)
doc = BaseDocTemplate(OUT, pagesize=A4, leftMargin=25 * mm, rightMargin=25 * mm,
topMargin=22 * mm, bottomMargin=20 * mm,
title="Heads of Department Framework Course - the school",
author="English Language Private School")
doc.addPageTemplates([
PageTemplate(id="cover", frames=[Frame(25 * mm, 20 * mm, A4[0] - 50 * mm,
A4[1] - 145 * mm, id="c")], onPage=cover),
PageTemplate(id="body", frames=[Frame(25 * mm, 20 * mm, A4[0] - 50 * mm,
A4[1] - 42 * mm, id="b")], onPage=later),
])
flow = [Spacer(1, 2),
Paragraph("This document is the master content source for the course. It carries "
"every framework element the course teaches, the descriptor line that "
"separates Good from Acceptable in each, the checkpoints, the tasks with "
"their instruments and targets, and the Final Check.", S["meta"]),
Spacer(1, 6),
Paragraph("Contents: 1 Why this course exists \u00b7 2 The fifteen elements \u00b7 "
"3 How the course works \u00b7 4 The shared vocabulary \u00b7 "
"5\u201311 Lessons one to seven \u00b7 12 Final Check \u00b7 "
"13 The Department Evidence File \u00b7 14 Certificate \u00b7 "
"15 Source note", S["meta"]),
NextPageTemplate("body"), PageBreak()] + render()
doc.build(flow)
print("PDF:", OUT)
open("/mnt/user-data/outputs/the school-HOD-Framework-Course.md", "w").write("\n".join(MD))
print("MD written")
print("Sections generated:", N["sec"])