Created
May 16, 2026 12:13
-
-
Save anhdiepmmk/aa0b93435bc0123b17ccbfd3557f7400 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| 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