Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save anhdiepmmk/aa0b93435bc0123b17ccbfd3557f7400 to your computer and use it in GitHub Desktop.

Select an option

Save anhdiepmmk/aa0b93435bc0123b17ccbfd3557f7400 to your computer and use it in GitHub Desktop.
---
skillKey: bang-cuu-chuong-2
grade: grade-2
cluster: multiplication-2
agePreset: primary-early
estimatedMinutes: 35
specVersion: 2
createdDate: 2026-05-16
pedagogyChecklist: PASS
pedagogyMethod: "Singapore CPA + 5E + CV5512"
marketingTags:
- "Singapore Math"
- "CPA Method"
- "Array Model"
- "Adaptive Learning"
- "Multiplication Table"
showcaseElements:
- "CPA progression (Concrete→Pictorial→Abstract)"
- "Interactive array manipulatives"
- "Anchor Task (Singapore 3-part lesson)"
- "Bar Model word problem (equal-parts)"
- "Procedural variation (Marton)"
pipelineMode: create
pipelineStages:
research: completed
collect: completed
fiveE: completed
cpa: completed
teaching: completed
cv5512Mapping: full
assembled: 2026-05-16 19:20
---
# Lesson Spec: Bảng cửu chương 2
> **Nhiệm vụ cho AI consumer.** Bạn (Claude Code / VEO 3 / ChatGPT / Cursor / …) được giao spec này để biến thành sản phẩm tương tác cho HS Tiểu học Việt Nam. **Format gợi ý**: web app tương tác (React/Vue/Vanilla), video minh họa hoạt hình kèm voice-over, hoặc slide deck tương tác — tự chọn theo capability của bạn. Spec **không ép** tech stack.
>
> **Cách đọc spec:**
> - Mỗi `<activity>` = 1 chương/scene/route (4 hoạt động theo thứ tự HĐ1 → HĐ4, tổng 35 phút).
> - Mỗi `<visual-setup>` = mô tả màn hình cần render (kích thước px, color, layout cụ thể).
> - Mỗi `<interaction-flow>` = các bước HS thao tác + phản ứng của app (đánh số Bước 1, Bước 2…).
> - Mỗi `<speech-script>` = lời mascot/giáo viên nói (giữ NGUYÊN tiếng Việt, gắn đúng moment "Trước Bước N / Tại Bước N / Sau Bước N").
> - Mỗi `<animation-cues>` = type + target + duration (ms) cho mỗi hiệu ứng.
> - Mỗi `<success-criteria>` = điều kiện auto-advance sang block kế tiếp.
> - Mỗi `<hint level="1|2|3">` = scaffolding 3 cấp (hiện theo thứ tự, không hiện hết cùng lúc).
>
> **Pedagogy đã bake-in.** Spec dùng vocabulary sư phạm (CPA, 5E, Singapore Math, CV5512). Bạn **không cần** biết các từ này nghĩa gì — chỉ cần execute trung thành nội dung trong các instruction-level block. Spec tự đứng vững, **không tham chiếu file ngoài**.
>
> **Ngôn ngữ**: Tiếng Việt, không dịch sang tiếng Anh. Tone & độ phức tạp đã phù hợp HS Lớp 2 (7-8 tuổi).
<lesson-spec skillKey="bang-cuu-chuong-2" grade="grade-2"
cluster="multiplication-2" agePreset="primary-early"
estimatedMinutes="35">
<lesson-identity
titleVi="Bảng cửu chương 2"
slug="bang-cuu-chuong-2"
mascotName="Rô-bốt Tí"
mascotEmoji="🤖"
narrativeTheme="adventure-quest"
manipulativeEmoji="🧱"
operation="×"
/>
<lesson-objectives>
- Nhận biết ý nghĩa phép nhân: gộp các nhóm bằng nhau (equal groups)
- Thuộc bảng nhân 2 từ 2×1 đến 2×10 qua thao tác xếp nhóm và đếm skip count
- Biểu diễn phép nhân 2 bằng 3 cách: xếp nhóm vật (concrete), lưới chấm array (pictorial), phép tính số (abstract)
- Giải bài toán có lời văn 1 phép nhân 2 sử dụng bar model equal-parts
- Nhận biết 2×0 = 0 và tính giao hoán của phép nhân (2×5 = 5×2)
</lesson-objectives>
<!-- ═══════════════════════════════════════════ -->
<!-- CPA PROGRESSION OVERVIEW -->
<!-- Singapore CPA Method showcase block -->
<!-- ═══════════════════════════════════════════ -->
<cpa-progression grade="grade-2" topic="multiplication-2"
cpa-model="C→P→A" interlaced="true">
<concrete
manipulative="linking-cubes"
manipulative-alt="two-color-counters"
interaction="group"
student-choice="true"
activity-ref="hinhthanhkienthuc">
HS kéo linking-cubes thành từng nhóm 2 (mỗi cặp 1 màu). Xếp N nhóm trên bàn ảo.
Đếm tổng bằng skip count (2, 4, 6...) hoặc count-all. App ghi nhận strategy.
HS có thể chọn thay linking-cubes bằng counters 2 màu (student-choice).
</concrete>
<pictorial
type="array"
representations="array number-bond"
count="2"
interactive="true"
check-structure="false"
activity-ref="hinhthanhkienthuc">
Array: lưới chấm N hàng × 2 cột (hoặc 2 hàng × N cột — HS chọn orientation).
Number bond phụ: 2+2+2+...+2 (N lần) = tổng. Nối nhóm → tổng.
HS click vào hàng/cột → app highlight nhóm + đếm skip count tự động.
</pictorial>
<abstract
notation="number-sentence"
prerequisite="cong-tru-trong-pham-vi-1000"
activity-ref="hinhthanhkienthuc">
2 × 1 = 2 2 × 6 = 12
2 × 2 = 4 2 × 7 = 14
2 × 3 = 6 2 × 8 = 16
2 × 4 = 8 2 × 9 = 18
2 × 5 = 10 2 × 10 = 20
Notation: "thừa số × thừa số = tích"
</abstract>
<anchor-task
floor="low"
ceiling="high"
solution-paths="count-all draw-picture skip-count use-cubes repeated-addition"
duration-minutes="10">
"Trên bàn có 5 đĩa. Mỗi đĩa có 2 quả cam. Có bao nhiêu quả cam tất cả?
Em có thể đếm, vẽ, xếp khối, hoặc làm bất kỳ cách nào em thích."
</anchor-task>
<fallback
trigger="3-errors|user-request"
back-to="concrete"
student-request="true"
auto-trigger="frustration-signal">
Nếu HS sai ≥3 lần liên tiếp ở Pictorial/Abstract → app tự hiện nút "Dùng khối lại nhé?"
→ quay về linking-cubes xếp nhóm. HS cũng tự bật manipulative bất kỳ lúc nào
qua nút "Khối giúp mình" ở góc màn hình.
</fallback>
<variation
type="both"
sequence="2×1 → 2×2 → 2×3 → 2×5 → 2×4 → 2×0 → 2×8 → 2×10"
conceptual-contexts="đĩa cam trên bàn | ghế trong lớp xếp 2 hàng | đôi giày trong kệ | đôi đũa trên bàn ăn">
Procedural: chỉ thay "số nhóm" mỗi bước, giữ "mỗi nhóm = 2" cố định
→ HS thấy invariant: nhân 2 luôn là nhóm 2.
Conceptual: cùng 2×5=10 nhưng qua 4 ngữ cảnh khác nhau → HS transfer.
Trap 2×0: phá misconception "nhân luôn ra lớn hơn".
</variation>
<misconception-targets>
- multiplication-as-repeated-addition-only: HS chỉ hiểu nhân = cộng lặp, không nhận ra equal groups/array
- array-rows-cols-confusion: HS lẫn hàng-cột khi đọc array
- commutative-not-understood: HS biết 2×5 nhưng không tự suy 5×2
- multiply-zero-confusion: 2×0 → HS trả lời 2
- count-all-not-skip-count: HS đếm từng chấm thay vì skip count
</misconception-targets>
</cpa-progression>
<lesson-prerequisites>
- cong-tru-trong-pham-vi-1000
</lesson-prerequisites>
<misconception-catalog>
<misconception id="multiplication-as-repeated-addition-only"
description="HS chỉ hiểu nhân = cộng lặp, không nhận ra ý nghĩa equal groups/array"
detection="HS viết 2+2+2 thay vì 2×3 khi được yêu cầu viết phép nhân. Không thể giải thích nhân nghĩa gì ngoài 'cộng nhiều lần'."
handle="Show animation 2+2+2 → gộp → 2×3. Giải thích: dấu × là cách viết tắt khi có nhiều nhóm bằng nhau." />
<misconception id="array-rows-cols-confusion"
description="HS lẫn hàng (rows) và cột (columns) khi đọc array, đếm sai số nhóm"
detection="HS nhìn array 3 hàng × 2 cột nhưng nói '2 nhóm mỗi nhóm 3' thay vì '3 nhóm mỗi nhóm 2'"
handle="Highlight từng hàng ngang bằng màu khác nhau. Mascot chỉ: 'Đếm hàng ngang trước — 1 hàng, 2 hàng, 3 hàng. Mỗi hàng có 2 chấm.'" />
<misconception id="commutative-not-understood"
description="HS biết 2×5=10 nhưng không tự suy 5×2=10"
detection="HS stuck khi gặp 5×2 dù đã thuộc 2×5=10"
handle="Show 2 arrays cạnh nhau: 2 hàng × 5 cột và 5 hàng × 2 cột. Rotate 90°. Tổng đều = 10. Mascot: 'Đổi chỗ 2 thừa số — tích vẫn vậy!'" />
<misconception id="multiply-zero-confusion"
description="HS nghĩ 2×0=2 vì 'nhân gì cũng ra lớn hơn'"
detection="HS trả lời 2×0 = 2 hoặc 2×0 = 0 nhưng không hiểu lý do"
handle="Show 0 đĩa trên bàn (bàn trống). Mascot: '0 đĩa thì có quả cam nào không? Không có nhóm nào → không có gì → 0!'" />
<misconception id="count-all-not-skip-count"
description="HS đếm từng chấm 1-2-3-4-5-6 thay vì skip count 2-4-6"
detection="HS mất >10 giây đếm array nhỏ (3×2) bằng cách chỉ từng chấm"
handle="Animation highlight từng hàng 2 chấm + hiện số skip count tăng dần: 2... 4... 6. Mascot: 'Đếm theo nhóm 2 nhanh hơn!'" />
</misconception-catalog>
<!-- ═══════════════════════════════════════════ -->
<!-- HĐ1: KHỞI ĐỘNG — 5E Engage -->
<!-- ═══════════════════════════════════════════ -->
<activity id="khoidong" 5e-phase="engage" duration-minutes="5">
<activity-goal>
HS bước vào tâm thế học, kích hoạt kiến thức cộng lặp đã biết, phơi bày misconception (đếm từng cái vs nhóm). Biết mục tiêu bài: học bảng nhân 2.
</activity-goal>
<activity-content>
Mascot Rô-bốt Tí xuất hiện, giới thiệu hòn đảo Nhóm Đôi. HS xem bản đồ 4 zones. Anchor task: "5 đĩa × 2 cam". Confidence check 3 mức.
</activity-content>
<activity-product>
HS nêu dự đoán số cam + chọn mức tự tin (confidence check). App ghi nhận strategy HS dùng.
</activity-product>
<activity-flow>
<task-assign>
<mascot mood="wave">
<speech>
Chào em! Mình là Rô-bốt Tí! Hôm nay mình cùng khám phá Hòn đảo Nhóm Đôi nhé! Trên đảo, mọi thứ đều xếp thành đôi — 2 quả, 2 con, 2 cái. Thú vị lắm!
</speech>
</mascot>
</task-assign>
<task-execute>
<narrative-context>
Hòn đảo Nhóm Đôi: một hòn đảo nhiệt đới nhỏ xinh với 4 khu vực (zones). Mọi thứ trên đảo đều xếp theo nhóm 2. Rô-bốt Tí là hướng dẫn viên, dẫn HS khám phá từng khu vực.
</narrative-context>
<anchor-task floor="low" ceiling="high"
solution-paths="count-all draw-picture skip-count use-cubes repeated-addition"
duration-minutes="3">
<visual-setup>
Màn hình: nền xanh lá nhạt (hòn đảo). Giữa: 5 đĩa tròn (đường kính 80px, viền cam 2px) xếp hàng ngang, cách đều 20px. Trên mỗi đĩa: 2 quả cam tròn (30px, màu #FF8C00). Tổng 10 quả cam trên 5 đĩa. Dưới: ô nhập đáp án (input box 60px × 40px, viền xanh dương 2px, placeholder "?"). Góc phải dưới: nút "Thử xếp khối" (link sang manipulative nếu HS muốn).
</visual-setup>
<interaction-flow>
Bước 1: HS quan sát 5 đĩa × 2 cam. App hiện câu hỏi: "Có bao nhiêu quả cam tất cả?"
Bước 2: HS có thể: (a) gõ số vào ô đáp án, (b) click nút "Thử xếp khối" để mở linking-cubes, (c) click nút "Vẽ" để vẽ tự do
Bước 3: HS gõ đáp án → App ghi nhận (không chấm đúng/sai ở anchor task — chỉ ghi nhận)
Bước 4: App phân loại strategy: count-all (gõ chậm >15s) vs skip-count (gõ nhanh ≤8s) vs cubes (dùng manipulative)
</interaction-flow>
<speech-script>
Trước Bước 1: mascot mood="think" — "Trên bàn có 5 đĩa. Mỗi đĩa có 2 quả cam. Có bao nhiêu quả cam tất cả? Em thử đếm, vẽ, hoặc xếp khối — cách nào cũng được!"
Sau Bước 3: mascot mood="excited" — "Hay lắm! Em đã thử rồi! Mình sẽ học cách nhanh hơn để đếm nhóm đôi nhé!"
</speech-script>
<animation-cues>
- Type "reveal", target "5 đĩa cam", duration 1500ms — hiện từng đĩa từ trái sang phải
- Type "pulse", target "ô nhập đáp án", duration 800ms — nhấp nháy mời HS nhập
</animation-cues>
<success-criteria>
HS gõ bất kỳ số nào vào ô đáp án (không yêu cầu đúng — anchor task là khám phá, không phải test). Auto-advance sau khi HS submit.
</success-criteria>
</anchor-task>
<confidence-check options="3">
🌱 Mình chưa biết nhân là gì
🌿 Mình biết chút chút — đếm nhóm được
🌳 Mình biết rồi — thuộc bảng nhân 2
</confidence-check>
</task-execute>
<task-report>
HS chọn mức tự tin — không đúng/sai, chỉ ghi nhận. App lưu để so sánh với exit ticket cuối bài.
</task-report>
<task-conclude>
<mascot mood="excited">
<speech>
Nhiều bạn đếm khác nhau — có bạn đếm từng quả, có bạn đếm theo nhóm 2! Hôm nay mình học cách siêu nhanh: BẢNG NHÂN 2! Lên đường thôi!
</speech>
</mascot>
</task-conclude>
</activity-flow>
</activity>
<!-- ═══════════════════════════════════════════ -->
<!-- HĐ2: HÌNH THÀNH KIẾN THỨC -->
<!-- 5E: Explore → Explain -->
<!-- CPA: Concrete → Pictorial → Abstract -->
<!-- I-We-You: bên trong Explain phase -->
<!-- ⚠️ ORDER MATTERS: Explore TRƯỚC Explain -->
<!-- ═══════════════════════════════════════════ -->
<activity id="hinhthanhkienthuc" 5e-phase="explore+explain" duration-minutes="18">
<activity-goal>
HS hiểu ý nghĩa phép nhân 2 qua trải nghiệm tự khám phá (Explore: xếp nhóm linking-cubes) → GV formalize bảng nhân 2 qua array + number sentence (Explain: I-We-You).
</activity-goal>
<activity-content>
Explore: HS xếp linking-cubes nhóm 2, đếm tổng. Explain: Mascot formalize array → number sentence 2×N. I-do (2×3), We-do (2×4, 2×6), You-do (2×7, 2×8).
</activity-content>
<activity-product>
HS giải được bài guided (we-do: 2×4, 2×6) + independent (you-do: 2×7, 2×8) với phép nhân 2.
</activity-product>
<activity-flow>
<task-assign>
<mascot mood="think">
<speech>
Khu vực đầu tiên trên đảo có rất nhiều khối màu! Em thử xếp khối thành nhóm 2 xem tổng là bao nhiêu nhé? Đừng lo — cứ thử thoải mái!
</speech>
</mascot>
</task-assign>
<task-execute>
<!-- ⚠️ EXPLORE phải đi TRƯỚC teacher-model — Order Matters -->
<!-- STAGE 1: Explore — CPA Concrete -->
<explore manipulative="linking-cubes"
cpa-stage="concrete"
interaction="group"
fallback-trigger="3-errors|user-request"
cpa-ref="cpa-progression#concrete">
<visual-setup>
Màn hình chia 2 cột. Cột trái (60%): bàn làm việc, nền trắng ngà. 20 linking-cubes lẻ (kích thước 40px × 40px, màu xanh dương #4A90D9, viền 1px #2563EB) nằm rải rác. Cột phải (40%): 5 ô nhóm trống (khung nét đứt 80px × 50px, xếp dọc, label "Nhóm 1" đến "Nhóm 5"). Dưới cùng: counter hiện "Tổng: ?" (font 24px bold). Nút góc phải trên: "Đổi sang counters" (student-choice).
</visual-setup>
<interaction-flow>
Bước 1: HS kéo (drag) 2 cubes vào ô "Nhóm 1" → App auto-snap 2 cubes cạnh nhau, đổi viền xanh lá, counter cập nhật "Tổng: 2"
Bước 2: HS kéo 2 cubes tiếp vào "Nhóm 2" → counter "Tổng: 4". App hiện skip-count animation nhỏ: "2... 4"
Bước 3: HS tiếp tục Nhóm 3 → "Tổng: 6", Nhóm 4 → "Tổng: 8", Nhóm 5 → "Tổng: 10"
Bước 4: Sau khi xếp xong 5 nhóm, app highlight tất cả nhóm lần lượt + đếm "2, 4, 6, 8, 10" bằng animation
Bước 5: App hiện câu hỏi: "Em xếp mấy nhóm? Mỗi nhóm mấy khối?" → HS gõ "5" và "2"
</interaction-flow>
<speech-script>
Trước Bước 1: mascot mood="think" — "Em kéo 2 khối vào mỗi ô nhóm nhé. Mỗi nhóm đúng 2 khối thôi!"
Tại Bước 2 (auto-trigger khi nhóm 2 xong): mascot mood="excited" — "Hay! Nhóm 1 có 2, nhóm 2 thêm 2 nữa là 4. Em thấy quy luật gì không?"
Tại Bước 4 (auto-trigger khi xong 5 nhóm): mascot mood="celebrate" — "5 nhóm, mỗi nhóm 2 khối! Tổng là 10! Em đếm giỏi lắm!"
Sau Bước 5: mascot mood="explain" — "5 nhóm 2 = 10. Giờ mình vẽ lại bằng sơ đồ nhé — nhanh hơn xếp khối!"
</speech-script>
<animation-cues>
- Type "group", target "2 cubes vào ô nhóm", duration 500ms — cubes snap vào ô, đổi viền xanh lá
- Type "count", target "counter tổng", duration 300ms — số tăng dần mỗi khi xếp xong 1 nhóm
- Type "pulse", target "tất cả nhóm lần lượt", duration 2000ms — highlight từng nhóm kèm skip-count "2, 4, 6, 8, 10"
- Type "celebrate", target "counter Tổng: 10", duration 1500ms — confetti nhẹ khi xong
</animation-cues>
<success-criteria>
HS xếp đủ 5 nhóm × 2 cubes (10 cubes) VÀ trả lời đúng "5 nhóm, mỗi nhóm 2 khối". Auto-advance sang CPA transition.
</success-criteria>
<fallback-instruction trigger="3-errors-or-stuck-60s">
Mascot mood="concern" — "Không sao! Mình thử xếp cùng nhé. Kéo 2 khối này vào ô đầu tiên..."
App auto-demo: animation kéo 2 cubes vào Nhóm 1 (ghost hand). Sau đó HS tự làm tiếp.
</fallback-instruction>
</explore>
<!-- TRANSITION: Concrete → Pictorial -->
<cpa-transition from="concrete" to="pictorial" trigger="student-ready">
<mascot mood="explain">
<speech>Em đã xếp nhóm giỏi rồi! Giờ mình vẽ lại bằng lưới chấm — nhanh hơn xếp khối, mà vẫn thấy nhóm rõ ràng!</speech>
</mascot>
<animation-cues>
- Type "transform", target "linking-cubes nhóm → chấm tròn array", duration 1500ms — cubes co nhỏ thành chấm, xếp thành 5 hàng × 2 cột
</animation-cues>
</cpa-transition>
<!-- STAGE 2: Pictorial Bridge — Array -->
<pictorial-bridge type="array"
cpa-stage="pictorial"
interactive="true"
cpa-ref="cpa-progression#pictorial">
<visual-setup>
Màn hình: nền trắng. Giữa: array lưới chấm 5 hàng × 2 cột (chấm tròn 25px, màu xanh dương #4A90D9, gap 15px). Mỗi hàng có viền nhẹ (#E5E7EB) để phân biệt. Bên phải array: cột skip-count trống (5 ô, mỗi ô 40px × 30px, placeholder "?"). Dưới array: dòng "5 hàng × 2 chấm = ?" (font 20px). Nút góc: "Xem lại khối" (manipulative-toggle).
</visual-setup>
<interaction-flow>
Bước 1: HS click vào hàng 1 (2 chấm) → hàng highlight vàng, ô skip-count 1 hiện "2"
Bước 2: HS click hàng 2 → highlight vàng, ô skip-count 2 hiện "4"
Bước 3: HS click hàng 3 → ô hiện "6". Hàng 4 → "8". Hàng 5 → "10"
Bước 4: App auto-hiện: "5 hàng × 2 chấm = 10" ở dòng dưới. Tất cả ô skip-count sáng lên cùng lúc.
Bước 5: HS type "10" vào ô đáp án cuối → confirm
</interaction-flow>
<speech-script>
Trước Bước 1: mascot mood="explain" — "Đây là lưới chấm! Mỗi hàng có 2 chấm — giống nhóm 2 khối em vừa xếp. Click vào từng hàng để đếm nhé!"
Tại Bước 3 (auto-trigger): mascot mood="excited" — "2... 4... 6! Em thấy không — mỗi lần thêm 1 hàng là thêm 2!"
Sau Bước 4: mascot mood="praise" — "5 hàng, mỗi hàng 2 chấm. Tổng 10! Lưới chấm giúp mình nhìn nhanh hơn xếp khối!"
</speech-script>
<animation-cues>
- Type "reveal", target "hàng chấm N", duration 400ms — highlight vàng từng hàng khi click
- Type "count", target "ô skip-count", duration 300ms — số hiện ra tăng dần
- Type "pulse", target "dòng kết quả 5×2=10", duration 1500ms — highlight xanh lá khi hoàn thành
</animation-cues>
<success-criteria>
HS click đủ 5 hàng + type đúng "10" vào ô đáp án. Auto-advance sang CPA transition.
</success-criteria>
</pictorial-bridge>
<!-- TRANSITION: Pictorial → Abstract -->
<cpa-transition from="pictorial" to="abstract" trigger="student-ready">
<mascot mood="explain">
<speech>Em đã nhìn lưới chấm rồi — giờ viết bằng số cho nhanh nhé! Thay vì vẽ 5 hàng 2 chấm, mình viết: 2 × 5 = 10. Dấu × đọc là "nhân"!</speech>
</mascot>
</cpa-transition>
<!-- STAGE 3: Teacher Model — I-do (Explain phase, CPA Abstract) -->
<teacher-model cpa-stage="abstract"
notation="number-sentence"
cpa-ref="cpa-progression#abstract">
<visual-setup>
Màn hình chia: bên trái (40%) array nhỏ 3 hàng × 2 cột (minh họa). Bên phải (60%) "bảng viết" nền trắng. Dòng 1: "3 nhóm, mỗi nhóm 2" (font 18px). Dòng 2: "2 + 2 + 2 = ?" (font 20px, dần dần hiện). Dòng 3: "2 × 3 = 6" (font 24px bold, highlight vàng, hiện sau dòng 2). Label: "thừa số × thừa số = tích" (font 14px italic, dưới dòng 3).
</visual-setup>
<interaction-flow>
Bước 1: Mascot chỉ vào array 3×2, highlight từng hàng → "Hàng 1: 2. Hàng 2: thêm 2 là 4. Hàng 3: thêm 2 là 6."
Bước 2: Dòng "2 + 2 + 2 = 6" hiện ra → Mascot: "Cộng 3 lần số 2."
Bước 3: Dòng "2 × 3 = 6" hiện ra, highlight vàng → Mascot: "Viết tắt: 2 nhân 3 bằng 6!"
Bước 4: HS tap "Hiểu rồi" hoặc auto-advance sau 8 giây
</interaction-flow>
<speech-script>
Bước 1: mascot mood="explain" — "Mình có 3 nhóm, mỗi nhóm 2 khối. Mình đếm: nhóm 1 là 2, nhóm 2 thêm 2 nữa là 4, nhóm 3 thêm 2 nữa là 6. Vậy 3 nhóm 2 = 6!"
Bước 2: mascot mood="explain" — "Viết dài: 2 + 2 + 2 = 6. Cộng 3 lần số 2. Nhưng viết dài quá!"
Bước 3: mascot mood="excited" — "Viết ngắn gọn: 2 × 3 = 6. Dấu × đọc là 'nhân'. 2 và 3 gọi là 'thừa số'. 6 gọi là 'tích'. Nhanh hơn nhiều!"
</speech-script>
<animation-cues>
- Type "reveal", target "array hàng 1 → 2 → 3", duration 600ms — highlight tuần tự
- Type "reveal", target "dòng 2+2+2=6", duration 800ms — hiện dần từ trái sang phải
- Type "reveal", target "dòng 2×3=6", duration 800ms — hiện sau dòng cộng, font bold
- Type "pulse", target "dấu × và từ 'nhân'", duration 2000ms — nhấn mạnh ký hiệu mới
</animation-cues>
<success-criteria>
HS tap "Hiểu rồi" hoặc auto-advance sau 8 giây không tương tác.
</success-criteria>
<think-aloud-step>
Mình có 3 nhóm. Mỗi nhóm 2 khối. Mình đếm: nhóm 1 là 2, thêm nhóm 2 là 4, thêm nhóm 3 là 6. Tổng cộng 6! Vì cộng 3 lần số 2 nên viết 2 × 3 = 6.
</think-aloud-step>
<think-aloud-step>
Dấu × thay cho "cộng lặp". 2 + 2 + 2 dài quá — viết 2 × 3 cho gọn. Số 2 là mỗi nhóm có 2, số 3 là có 3 nhóm.
</think-aloud-step>
<think-aloud-step>
2 gọi là thừa số, 3 cũng là thừa số, 6 là tích. Đọc: "hai nhân ba bằng sáu". Mình nhớ quy luật: mỗi lần thêm 1 nhóm 2 thì tổng tăng thêm 2!
</think-aloud-step>
</teacher-model>
<!-- STAGE 4: Guided Practice — We-do -->
<guided-practice>
<visual-setup>
Màn hình: bên trái array minh họa (auto-fill theo đề bài). Bên phải: phép tính "2 × ? = ?" với ô nhập (50px × 40px). Dưới: 3 nút hint (ẩn, hiện khi HS cần). Nút "Xem lại khối" (manipulative-toggle) góc trên phải.
</visual-setup>
<interaction-flow>
Bước 1: Mascot nêu đề → HS nhìn array → gõ đáp án
Bước 2: App check → đúng: celebrate → sai: hint level 1 (wait 5s) → level 2 → level 3
</interaction-flow>
<speech-script>
Trước problem 1: mascot mood="explain" — "Cùng làm nhé! Có 4 nhóm, mỗi nhóm 2. Nhìn lưới chấm rồi viết phép nhân!"
Trước problem 2: mascot mood="explain" — "Bài tiếp! 6 nhóm, mỗi nhóm 2. Đếm skip count: 2, 4, 6... tiếp theo là gì?"
</speech-script>
<success-criteria>
HS đúng ≥1/2 bài we-do → unlock you-do.
</success-criteria>
<mascot mood="explain">
<speech>Cùng làm nhé! Em xem lưới chấm rồi viết phép nhân!</speech>
</mascot>
<problem id="we-do-1" a="2" b="4" operation="×" answer="8" patterns="basic,skip-count">
<hint level="1">Đếm theo nhóm 2: 2, 4, 6... tiếp theo là gì?</hint>
<hint level="2">Đếm: 2, 4, 6, 8. Vậy 4 nhóm 2 = ?</hint>
<hint level="3">2, 4, 6, 8. Vậy 2 × 4 = 8. Em gõ 8 nhé!</hint>
<feedback>
<on-correct first-attempt="Giỏi lắm! Em đếm nhóm 2 rất nhanh: 2, 4, 6, 8!"
subsequent="Em đã thử lại và đúng rồi! Kiên trì tốt lắm!" />
<on-wrong error-type="off-by-one">Em gần đúng rồi! Đếm lại nhé: 2, 4, 6... nhóm thứ 4 là bao nhiêu?</on-wrong>
<on-wrong error-type="count-all-not-skip-count">Em đếm từng chấm — đúng nhưng chậm! Thử đếm theo nhóm 2: 2... 4... 6... 8!</on-wrong>
<on-wrong error-type="generic">Thử lại nhé! Nhìn lưới chấm: 4 hàng, mỗi hàng 2 chấm. Đếm: 2, 4, 6, 8.</on-wrong>
</feedback>
</problem>
<problem id="we-do-2" a="2" b="6" operation="×" answer="12" patterns="basic,skip-count">
<hint level="1">Đếm theo nhóm 2 từ đầu: 2, 4, 6...</hint>
<hint level="2">Đếm: 2, 4, 6, 8, 10, 12. Tổng 6 nhóm 2 = ?</hint>
<hint level="3">2 × 6 = 12. Em gõ 12 nhé!</hint>
<feedback>
<on-correct first-attempt="Xuất sắc! 2 × 6 = 12. Em skip count nhanh lắm!"
subsequent="Đúng rồi! Em kiên nhẫn đếm lại và tìm được 12!" />
<on-wrong error-type="off-by-one">Gần lắm! Đếm cẩn thận: 2, 4, 6, 8, 10... còn 1 nhóm nữa!</on-wrong>
<on-wrong error-type="generic">Thử lại! 6 hàng, mỗi hàng 2 chấm. Đếm: 2, 4, 6, 8, 10, 12.</on-wrong>
</feedback>
</problem>
<student-choice type="manipulative-toggle">
HS có thể bật/tắt linking-cubes bất kỳ lúc nào — nút "Xem lại khối" ở góc trên phải. CPA interlaced: quay lại Concrete khi cần.
</student-choice>
</guided-practice>
<!-- STAGE 5: Independent Practice — You-do -->
<independent-practice>
<visual-setup>
Giống guided-practice nhưng: array minh họa nhỏ hơn (30%), ô nhập lớn hơn (70%). Hint buttons ẩn sâu hơn (chỉ hiện sau 10s stuck). Manipulative-toggle vẫn có.
</visual-setup>
<interaction-flow>
Bước 1: App nêu đề "2 × 7 = ?" → HS tự gõ đáp án
Bước 2: App check → feedback → tiếp bài 2
</interaction-flow>
<speech-script>
Trước bài: mascot mood="praise" — "Em tự làm nhé! Mình tin em làm được! Nhớ đếm theo nhóm 2!"
</speech-script>
<success-criteria>
HS hoàn thành 2 bài (đúng hoặc sai đều tiếp). Kết quả ghi nhận cho adaptive.
</success-criteria>
<mascot mood="praise">
<speech>Em tự làm nhé! Mình tin em làm được! Cần khối thì bấm nút góc trên!</speech>
</mascot>
<problem id="you-do-1" a="2" b="7" operation="×" answer="14" patterns="basic,skip-count">
<adaptive-rules>
HS mastery > 80% từ we-do: ẩn array minh họa, chỉ hiện số. HS frustration > 60%: auto-show array + hint level 1.
</adaptive-rules>
<hint level="1">Đếm theo nhóm 2: 2, 4, 6, 8, 10, 12... tiếp?</hint>
<hint level="2">Đếm: 2, 4, 6, 8, 10, 12, 14. Nhóm thứ 7!</hint>
<hint level="3">2 × 7 = 14. Em gõ 14!</hint>
<feedback>
<on-correct first-attempt="Tuyệt vời! 2 × 7 = 14. Em tự làm đúng luôn!"
subsequent="Đúng rồi! Em kiên trì thử lại — giỏi lắm!" />
<on-wrong error-type="off-by-one">Gần lắm! Đếm cẩn thận hàng cuối: ...10, 12, 14.</on-wrong>
<on-wrong error-type="generic">Thử lại! 7 nhóm 2: đếm 2, 4, 6, 8, 10, 12, 14.</on-wrong>
</feedback>
</problem>
<problem id="you-do-2" a="2" b="8" operation="×" answer="16" patterns="basic,skip-count">
<adaptive-rules>
HS mastery > 80%: ẩn array, chỉ hiện phép tính. HS frustration > 60%: auto-show array + cubes.
</adaptive-rules>
<hint level="1">Đếm nhóm 2 tiếp nào! 2, 4, 6...</hint>
<hint level="2">2, 4, 6, 8, 10, 12, 14, 16. Nhóm thứ 8!</hint>
<hint level="3">2 × 8 = 16. Em gõ 16!</hint>
<feedback>
<on-correct first-attempt="Xuất sắc! 2 × 8 = 16. Em thuộc bảng nhân 2 nhanh thật!"
subsequent="Đúng! Em đã sửa được — cứ cố gắng thêm nhé!" />
<on-wrong error-type="off-by-one">Gần đúng! Đếm kỹ: ...12, 14, 16. Nhóm thứ 8 là 16.</on-wrong>
<on-wrong error-type="generic">Thử lại! 8 nhóm 2: 2, 4, 6, 8, 10, 12, 14, 16.</on-wrong>
</feedback>
</problem>
</independent-practice>
</task-execute>
<task-report>
App ghi nhận: bao nhiêu bài đúng (we-do + you-do), strategy chủ yếu (skip-count hay count-all), có dùng manipulative-toggle không. Update mastery score.
</task-report>
<task-conclude>
<mascot mood="praise">
<speech>Chúc mừng! Em đã hiểu cách nhân 2: xếp nhóm → lưới chấm → phép tính! Giờ luyện tập trên đảo nhé!</speech>
</mascot>
<check-for-understanding>
Câu hỏi nhanh: "2 × 5 bằng bao nhiêu?" Đáp án: 10. Wait time 5 giây trước khi hiện gợi ý.
</check-for-understanding>
</task-conclude>
</activity-flow>
</activity>
<!-- ═══════════════════════════════════════════ -->
<!-- HĐ3: LUYỆN TẬP — 5E Elaborate intra-topic -->
<!-- Procedural variation (Marton): chỉ thay -->
<!-- 1 yếu tố mỗi lần -->
<!-- ═══════════════════════════════════════════ -->
<activity id="luyentap" 5e-phase="elaborate-intra" duration-minutes="8">
<activity-goal>
HS luyện tập bảng nhân 2 qua 4 zones trên bản đồ hòn đảo, với procedural variation (chỉ thay số nhóm) + conceptual variation (4 ngữ cảnh khác nhau). Bao gồm misconception traps: 2×0 và 2×1.
</activity-goal>
<activity-content>
4 zones × 3 bài mỗi zone = 12 bài. HS chọn zone (autonomy). Adaptive: HS giỏi bỏ hint + tăng khó; HS yếu bật cubes + giảm bài.
</activity-content>
<activity-product>
HS hoàn thành ≥2/4 zones. Đạt mastery threshold ≥60% để mở HĐ4.
</activity-product>
<activity-flow>
<task-assign>
<mascot mood="excited">
<speech>Bản đồ Hòn đảo Nhóm Đôi có 4 khu vực! Em chọn khu nào khám phá trước? Mỗi khu có 3 thử thách nhân 2!</speech>
</mascot>
<student-choice type="zone-pick">
HS click chọn zone trên bản đồ — thứ tự tự do (autonomy — SDT). Bản đồ hiện 4 zones với icon + tên.
</student-choice>
</task-assign>
<task-execute>
<progress-indicator>
Bản đồ hòn đảo: 4 zones hiện icon. Zone hoàn thành → đổi màu xanh lá + dấu ✓. XP bar ở trên: +10 XP mỗi bài đúng lần đầu, +5 XP đúng lần sau. Badge "Nhà thám hiểm Nhóm Đôi" khi hoàn thành 4/4 zones.
</progress-indicator>
<!-- Zone 1: Bãi biển Cam — nhóm nhỏ -->
<zone id="z1" name="Bãi biển Cam" animal="🦀" manipulative="linking-cubes" color="#FF8C00">
<zone-intro>
<narrative-context>Bãi biển Cam có những con cua xếp thành đôi trên cát. Mỗi cặp cua có 2 con!</narrative-context>
<mascot mood="excited">
<speech>Bãi biển Cam! Cua ở đây luôn đi thành đôi. Đếm xem có bao nhiêu con cua nhé!</speech>
</mascot>
</zone-intro>
<adaptive-rules>
HS mastery > 80%: ẩn array minh họa, chỉ hiện phép tính.
HS frustration > 60%: auto-show cubes + hint level 1 ngay.
HS mắc count-all-not-skip-count: highlight skip count animation.
</adaptive-rules>
<default-feedback>
<on-correct first-attempt="Giỏi lắm! Em đếm nhóm 2 nhanh thật!" subsequent="Em thử lại đúng rồi! Kiên nhẫn tốt lắm!" />
<on-wrong error-type="off-by-one">Gần đúng! Đếm lại cẩn thận theo nhóm 2 nhé.</on-wrong>
<on-wrong error-type="count-all-not-skip-count">Em đếm từng con — cũng đúng! Nhưng thử đếm theo cặp nhanh hơn: 2, 4, 6...</on-wrong>
<on-wrong error-type="generic">Thử lại nhé! Đếm theo nhóm 2!</on-wrong>
</default-feedback>
<problem id="z1-p1" a="2" b="1" operation="×" answer="2" patterns="basic,identity">
</problem>
<problem id="z1-p2" a="2" b="2" operation="×" answer="4" patterns="basic,doubles">
</problem>
<problem id="z1-p3" a="2" b="3" operation="×" answer="6" patterns="basic,skip-count">
</problem>
<animation type="celebrate" subject="cua 🦀">
Cua nhảy múa trên cát. Confetti cam. Mascot: "Bãi biển Cam hoàn thành! +30 XP!"
</animation>
</zone>
<!-- Zone 2: Rừng Dừa — nhóm vừa -->
<zone id="z2" name="Rừng Dừa" animal="🦜" manipulative="linking-cubes" color="#228B22">
<zone-intro>
<narrative-context>Rừng Dừa xanh mát. Những chú vẹt đậu thành đôi trên cành. Mỗi cành 2 con vẹt!</narrative-context>
<mascot mood="excited">
<speech>Rừng Dừa! Vẹt ở đây cũng đi thành đôi. Bao nhiêu con vẹt trên cây?</speech>
</mascot>
</zone-intro>
<adaptive-rules>
HS mastery > 80%: tăng tốc, bỏ array.
HS frustration > 60%: bật cubes, chậm lại.
</adaptive-rules>
<default-feedback>
<on-correct first-attempt="Hay lắm! Em nhân 2 giỏi rồi!" subsequent="Đúng! Em kiên trì quá!" />
<on-wrong error-type="off-by-one">Gần rồi! Đếm kỹ nhóm cuối.</on-wrong>
<on-wrong error-type="generic">Thử lại! Đếm cặp vẹt: 2, 4, 6...</on-wrong>
</default-feedback>
<problem id="z2-p1" a="2" b="4" operation="×" answer="8" patterns="basic,skip-count">
</problem>
<problem id="z2-p2" a="2" b="5" operation="×" answer="10" patterns="basic,skip-count,milestone">
</problem>
<problem id="z2-p3" a="2" b="6" operation="×" answer="12" patterns="basic,skip-count">
</problem>
<animation type="celebrate" subject="vẹt 🦜">
Vẹt bay lên cành cao, rải lá xanh. Mascot: "Rừng Dừa hoàn thành! +30 XP!"
</animation>
</zone>
<!-- Zone 3: Hang Đá — nhóm lớn + trap 2×0 -->
<zone id="z3" name="Hang Đá Bí Ẩn" animal="🦇" manipulative="linking-cubes" color="#4B0082">
<zone-intro>
<narrative-context>Hang Đá tối và bí ẩn. Dơi bay thành đôi trong hang. Nhưng có 1 phòng trống không có dơi nào!</narrative-context>
<mascot mood="think">
<speech>Hang Đá Bí Ẩn! Cẩn thận nhé — có phòng không có dơi nào đâu!</speech>
</mascot>
</zone-intro>
<adaptive-rules>
HS mastery > 80%: chỉ hiện phép tính, ẩn minh họa.
HS mắc multiply-zero-confusion: auto-show hang trống + mascot giải thích.
</adaptive-rules>
<default-feedback>
<on-correct first-attempt="Tuyệt! Em xử lý cả bài khó!" subsequent="Đúng rồi! Em sửa được — giỏi!" />
<on-wrong error-type="multiply-zero-confusion">Hang trống trơn — 0 cặp dơi! Không có gì cả → 2 × 0 = 0. Nhớ nhé: nhân với 0 luôn bằng 0!</on-wrong>
<on-wrong error-type="off-by-one">Gần rồi! Đếm kỹ lại.</on-wrong>
<on-wrong error-type="generic">Thử lại! Đếm cặp dơi.</on-wrong>
</default-feedback>
<problem id="z3-p1" a="2" b="7" operation="×" answer="14" patterns="basic,skip-count">
</problem>
<problem id="z3-p2" a="2" b="0" operation="×" answer="0" patterns="zero-trap,misconception-target">
<hint level="1">Nhìn phòng này — có bao nhiêu cặp dơi?</hint>
<hint level="2">0 cặp dơi! Phòng trống trơn. Nhân với 0 thì sao?</hint>
<hint level="3">2 × 0 = 0. Không có nhóm nào → không có gì!</hint>
<feedback>
<on-correct first-attempt="Xuất sắc! Em biết 2 × 0 = 0 — phòng trống thì không có dơi!"
subsequent="Đúng! 0 nhóm = 0. Em hiểu rồi!" />
<on-wrong error-type="multiply-zero-confusion">Em nghĩ 2 × 0 = 2? Nhìn lại — phòng này KHÔNG có cặp dơi nào. 0 nhóm thì tổng = 0!</on-wrong>
</feedback>
</problem>
<problem id="z3-p3" a="2" b="9" operation="×" answer="18" patterns="basic,skip-count">
</problem>
<animation type="celebrate" subject="dơi 🦇">
Dơi bay ra khỏi hang, ánh sáng chiếu vào. Mascot: "Hang Đá hoàn thành! +30 XP! Em dũng cảm lắm!"
</animation>
</zone>
<!-- Zone 4: Đỉnh Núi — nhóm lớn nhất -->
<zone id="z4" name="Đỉnh Núi Mặt Trời" animal="🦅" manipulative="linking-cubes" color="#FFD700">
<zone-intro>
<narrative-context>Đỉnh Núi Mặt Trời — nơi cao nhất đảo! Đại bàng bay thành đôi trên trời. Gió mát, mây trắng, thử thách cuối!</narrative-context>
<mascot mood="excited">
<speech>Đỉnh Núi Mặt Trời! Thử thách cuối — đại bàng bay thành đôi. Em sẵn sàng chưa?</speech>
</mascot>
</zone-intro>
<adaptive-rules>
HS mastery > 80%: thêm bài commutative (5×2 thay vì 2×5) làm extension.
HS frustration > 60%: giảm xuống 2 bài, bật cubes.
</adaptive-rules>
<default-feedback>
<on-correct first-attempt="Tuyệt vời! Em chinh phục đỉnh núi rồi!" subsequent="Đúng! Em thử lại rất kiên trì!" />
<on-wrong error-type="off-by-one">Gần lắm! Đếm lại nhóm cuối.</on-wrong>
<on-wrong error-type="generic">Thử lại! Đếm cặp đại bàng: 2, 4, 6...</on-wrong>
</default-feedback>
<problem id="z4-p1" a="2" b="8" operation="×" answer="16" patterns="basic,skip-count">
</problem>
<problem id="z4-p2" a="2" b="10" operation="×" answer="20" patterns="basic,skip-count,milestone">
</problem>
<problem id="z4-p3" a="2" b="9" operation="×" answer="18" patterns="basic,skip-count,near-max">
</problem>
<animation type="celebrate" subject="đại bàng 🦅">
Đại bàng bay vòng quanh đỉnh núi. Cầu vồng xuất hiện. Mascot: "Đỉnh Núi hoàn thành! +30 XP! Em là nhà thám hiểm thực thụ!"
</animation>
</zone>
<check-for-understanding>
Sau mỗi 2 zones: "Quick check: 2 × 6 = ?" Wait time 5 giây. Đáp án: 12.
</check-for-understanding>
</task-execute>
<task-report>
App tổng kết: bao nhiêu bài đúng (tối đa 12), misconception nào còn vướng (highlight nếu multiply-zero-confusion hoặc count-all-not-skip-count), XP earned, zones hoàn thành.
</task-report>
<task-conclude>
<mascot mood="celebrate">
<speech>Chúc mừng nhà thám hiểm! Em đã khám phá Hòn đảo Nhóm Đôi! Giờ thử bài toán thực tế nhé — dùng bảng nhân 2 vào đời thật!</speech>
</mascot>
</task-conclude>
</activity-flow>
</activity>
<!-- ═══════════════════════════════════════════ -->
<!-- HĐ4: VẬN DỤNG -->
<!-- 5E: Elaborate transfer + Evaluate -->
<!-- ═══════════════════════════════════════════ -->
<activity id="vandung" 5e-phase="elaborate-transfer+evaluate" duration-minutes="4">
<activity-goal>
HS transfer bảng nhân 2 vào bài toán thực tế (word problem + bar model equal-parts) + tự đặt đề bài + tự đánh giá metacognition.
</activity-goal>
<activity-content>
1 bài word problem (bar-model equal-parts) + 1 bài open-ended + exit ticket 3 câu + metacognition prompt.
</activity-content>
<activity-product>
HS giải bài thực tế dùng bar model, tự đặt đề bài nhân 2, hoàn thành exit ticket, phản ánh metacognition.
</activity-product>
<activity-flow>
<task-assign>
<mascot mood="think">
<speech>Thử thách cuối! Dùng bảng nhân 2 vào bài toán đời thật nhé. Mẹ đi chợ mua kẹo — em giúp mẹ tính!</speech>
</mascot>
</task-assign>
<task-execute>
<!-- Elaborate transfer — Word Problem + Bar Model -->
<real-world-scenario>
<illustration>
Cảnh siêu thị nhỏ: kệ hàng có 4 túi kẹo xếp hàng, mỗi túi trong suốt nhìn thấy 2 viên kẹo bên trong. Mẹ đứng cạnh kệ, giỏ hàng phía trước.
</illustration>
<story-text>
Mẹ đi siêu thị mua 4 túi kẹo. Mỗi túi có 2 viên kẹo. Hỏi mẹ mua tất cả bao nhiêu viên kẹo?
</story-text>
<bar-model-design type="equal-parts">
<problem-read-aloud>
Mascot đọc to: "Mẹ đi siêu thị mua 4 túi kẹo." [pause 1.5s, highlight "4 túi"]
"Mỗi túi có 2 viên kẹo." [pause 1.5s, highlight "2 viên"]
"Hỏi mẹ mua tất cả bao nhiêu viên kẹo?" [pause, highlight "tất cả" + "?"]
Font 22px, đọc chậm, từ đang đọc highlight vàng nhạt.
</problem-read-aloud>
<quantity-identification>
App highlight pulse animation: "4" (xanh dương), "2" (cam), "?" (xám).
Mascot mood="think": "Em thấy có những số nào trong đề? Click vào từng số nhé."
HS click "4" → pulse confirm. Click "2" → pulse confirm. Click "?" → mascot: "Đó là cái mình cần tìm!"
</quantity-identification>
<bar-drawing-steps>
Bước 1: Hiển thị 1 thanh ngang (240px × 40px, viền đen 2px, nền trắng)
Bước 2: HS drag slider chia thanh thành 4 phần đều nhau — App auto-snap khi 4 phần đều ±5%
Bước 3: HS gõ "2" vào mỗi ô phần (4 ô, mỗi ô hiện placeholder "?")
Bước 4: Dấu "?" hiện ở dưới thanh (vị trí tổng): "Tổng = ?"
Bước 5: App check structure — 4 phần đều, mỗi phần ghi "2" → unlock nút "Tính kết quả". Sai → hint level 1.
</bar-drawing-steps>
<verification-before-compute>
App KHÔNG cho HS gõ kết quả nếu bar structure sai.
Sai cấu trúc (chia không đều hoặc ghi sai số) → mascot mood="think":
"Em nhìn lại sơ đồ nhé. Mỗi túi có mấy viên kẹo? Ghi vào từng ô nhé!"
</verification-before-compute>
</bar-model-design>
<problem id="rw-1" a="2" b="4" operation="×" answer="8" patterns="real-world,equal-groups">
<visual-setup>Layout: bar model đã vẽ ở trên + ô nhập đáp án tổng (50px × 40px). Minh họa 4 túi kẹo phía trên.</visual-setup>
<interaction-flow>HS dùng bar đã vẽ để tính: 2+2+2+2 = 8 hoặc 2×4 = 8. Gõ "8" vào ô tổng.</interaction-flow>
<success-criteria>HS gõ đúng "8" vào ô tổng.</success-criteria>
<hint level="1">Nhìn sơ đồ — mỗi ô ghi 2. Có 4 ô. Cộng tất cả!</hint>
<hint level="2">2 + 2 + 2 + 2 = ? Đếm: 2, 4, 6, 8!</hint>
<hint level="3">4 túi × 2 viên = 8 viên. Em gõ 8!</hint>
<feedback>
<on-correct first-attempt="Giỏi lắm! Mẹ mua 8 viên kẹo! Em dùng sơ đồ thanh rất đúng!"
subsequent="Đúng! 4 túi × 2 viên = 8 viên. Em kiên nhẫn tính lại!" />
<on-wrong error-type="off-by-one">Gần đúng! Đếm lại từng ô: 2, 4, 6, 8.</on-wrong>
<on-wrong error-type="generic">Nhìn sơ đồ: 4 ô, mỗi ô 2 viên. Tổng = 2+2+2+2 = 8.</on-wrong>
</feedback>
</problem>
</real-world-scenario>
<open-ended-task>
Mascot mood="think": "Giờ em tự đặt đề bài nhân 2 nhé! Nghĩ ra 1 câu chuyện có 'nhóm 2' — ví dụ đôi giày, đôi đũa, cặp bạn..."
HS gõ đề bài tự do (text input, tối đa 100 ký tự). App ghi nhận, không chấm — mục đích là sáng tạo + transfer.
Mascot mood="praise": "Đề bài hay lắm! Em đã biết dùng nhân 2 trong đời thật rồi!"
</open-ended-task>
<!-- Evaluate -->
<exit-ticket>
<ticket-question type="know">
2 × 6 = ? (HS gõ đáp án — kiểm tra recall bảng nhân 2)
</ticket-question>
<ticket-question type="unsure">
Vẽ array cho 2 × 3 (HS chọn: 3 hàng × 2 cột hoặc 2 hàng × 3 cột — cả 2 đúng)
</ticket-question>
<ticket-question type="curious">
2 × 0 bằng mấy? Tại sao? (HS chọn: A. 0 — vì không có nhóm nào / B. 2 — vì nhân gì cũng ra 2 / C. Không biết)
</ticket-question>
</exit-ticket>
<metacognition-prompt>
"Em đã dùng cách nào để nhân 2? Cách nào nhanh nhất?"
Gợi ý trả lời: (A) Đếm từng cái (B) Đếm theo nhóm 2: 2, 4, 6... (C) Thuộc bảng nhân 2 (D) Xếp khối rồi đếm
Mascot mood="explain": "Đếm theo nhóm 2 (skip count) là cách nhanh! Khi em thuộc bảng nhân 2, còn nhanh hơn nữa!"
</metacognition-prompt>
</task-execute>
<task-report>
Tổng kết bài học: mastery score (%), misconception còn lại (nếu có), badges earned ("Nhà thám hiểm Nhóm Đôi" nếu 4/4 zones).
<mascot mood="celebrate">
<speech>Chúc mừng em hoàn thành bài Bảng nhân 2! Em đã biết: xếp nhóm 2 → lưới chấm → phép nhân. Bài tiếp theo: Bảng nhân 3 — nhóm 3! Hẹn gặp lại!</speech>
</mascot>
</task-report>
<task-conclude>
Kết thúc bài giảng. Gợi ý bài tiếp theo: bang-cuu-chuong-3 (Bảng cửu chương 3).
So sánh confidence check đầu bài vs exit ticket cuối bài → hiện progress cho HS thấy.
</task-conclude>
</activity-flow>
</activity>
</lesson-spec>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment