From 5957636b077c6e4c3344f2a8ab1e86a2a0a1dfab Mon Sep 17 00:00:00 2001 From: silverpro89 Date: Mon, 9 Feb 2026 23:17:03 +0700 Subject: [PATCH] update new API --- VOCAB_CONTEXT_IMPORT_GUIDE.md | 300 ++++++++++++++++++++++++++++++++ check-context-table.js | 48 +++++ check-familynfriend-import.js | 53 ++++++ check-grades.js | 55 ++++++ data/family/g1/unit4.json | 136 --------------- data/family/g1/unit5.json | 139 --------------- data/family/g1/unit6.json | 140 --------------- data/familynfriend/g1/F11.json | 136 +++++++++++++++ data/familynfriend/g1/F12.json | 92 ++++++++++ data/familynfriend/g1/F13.json | 109 ++++++++++++ data/familynfriend/g1/F14.json | 135 ++++++++++++++ data/familynfriend/g1/F15.json | 109 ++++++++++++ data/familynfriend/g1/F16.json | 96 ++++++++++ data/familynfriend/g1/F1S.json | 136 +++++++++++++++ data/familynfriend/g2/F21.json | 131 ++++++++++++++ data/familynfriend/g2/F22.json | 121 +++++++++++++ data/familynfriend/g2/F23.json | 124 +++++++++++++ data/familynfriend/g2/F24.json | 153 ++++++++++++++++ data/familynfriend/g2/F25.json | 112 ++++++++++++ data/familynfriend/g2/F26.json | 140 +++++++++++++++ data/familynfriend/g2/F2S.json | 123 +++++++++++++ data/familynfriend/g3/F31.json | 74 ++++++++ data/familynfriend/g3/F310.json | 73 ++++++++ data/familynfriend/g3/F311.json | 115 ++++++++++++ data/familynfriend/g3/F312.json | 94 ++++++++++ data/familynfriend/g3/F32.json | 100 +++++++++++ data/familynfriend/g3/F33.json | 104 +++++++++++ data/familynfriend/g3/F34.json | 110 ++++++++++++ data/familynfriend/g3/F35.json | 106 +++++++++++ data/familynfriend/g3/F36.json | 77 ++++++++ data/familynfriend/g3/F37.json | 88 ++++++++++ data/familynfriend/g3/F38.json | 135 ++++++++++++++ data/familynfriend/g3/F39.json | 86 +++++++++ data/familynfriend/g3/F3S.json | 89 ++++++++++ data/familynfriend/g4/F40.json | 44 +++++ data/familynfriend/g4/F41.json | 51 ++++++ data/familynfriend/g4/F410.json | 44 +++++ data/familynfriend/g4/F411.json | 51 ++++++ data/familynfriend/g4/F412.json | 58 ++++++ data/familynfriend/g4/F42.json | 58 ++++++ data/familynfriend/g4/F43.json | 51 ++++++ data/familynfriend/g4/F44.json | 51 ++++++ data/familynfriend/g4/F45.json | 51 ++++++ data/familynfriend/g4/F46.json | 65 +++++++ data/familynfriend/g4/F47.json | 58 ++++++ data/familynfriend/g4/F48.json | 58 ++++++ data/familynfriend/g4/F49.json | 58 ++++++ data/familynfriend/g5/F50.json | 30 ++++ data/familynfriend/g5/F51.json | 58 ++++++ data/familynfriend/g5/F510.json | 58 ++++++ data/familynfriend/g5/F511.json | 44 +++++ data/familynfriend/g5/F512.json | 98 +++++++++++ data/familynfriend/g5/F52.json | 51 ++++++ data/familynfriend/g5/F53.json | 58 ++++++ data/familynfriend/g5/F54.json | 51 ++++++ data/familynfriend/g5/F55.json | 51 ++++++ data/familynfriend/g5/F56.json | 58 ++++++ data/familynfriend/g5/F57.json | 58 ++++++ data/familynfriend/g5/F58.json | 51 ++++++ data/familynfriend/g5/F59.json | 58 ++++++ data/moveup/g1/M11.json | 152 ++++++++++++++++ data/moveup/g1/M12.json | 205 ++++++++++++++++++++++ data/moveup/g1/M13.json | 205 ++++++++++++++++++++++ data/moveup/g1/M14.json | 166 ++++++++++++++++++ data/moveup/g1/M15.json | 164 +++++++++++++++++ data/moveup/g1/M16.json | 144 +++++++++++++++ data/moveup/g1/M1S.json | 97 +++++++++++ data/moveup/g1/unit4.json | 108 ------------ data/moveup/g1/unit5.json | 116 ------------ data/moveup/g1/unit6.json | 106 ----------- data/moveup/g2/unit4.json | 105 ----------- data/moveup/g2/unit5.json | 100 ----------- data/moveup/g2/unit6.json | 101 ----------- data/moveup/g3/unit10.json | 39 ----- data/moveup/g3/unit11.json | 41 ----- data/moveup/g3/unit12.json | 42 ----- data/moveup/g3/unit7.json | 42 ----- data/moveup/g3/unit8.json | 42 ----- data/moveup/g3/unit9.json | 42 ----- data/moveup/g4/unit10.json | 50 ------ data/moveup/g4/unit11.json | 49 ------ data/moveup/g4/unit12.json | 49 ------ data/moveup/g4/unit7.json | 49 ------ data/moveup/g4/unit8.json | 50 ------ data/moveup/g4/unit9.json | 49 ------ data/moveup/g5/unit10.json | 64 ------- data/moveup/g5/unit11.json | 64 ------- data/moveup/g5/unit12.json | 64 ------- data/moveup/g5/unit7.json | 66 ------- data/moveup/g5/unit8.json | 64 ------- data/moveup/g5/unit9.json | 64 ------- data/template.md | 33 ++++ delete-all-context.js | 165 ++++++++++++++++++ import-vocab-to-context.js | 119 +++++++++++++ import-vocab-to-vocab.js | 128 ++++++++++++++ models/Context.js | 15 +- models/Vocab.js | 50 ++++-- truncate-and-sync-context.js | 90 ++++++++++ truncate-and-sync-vocab.js | 90 ++++++++++ update-grade-code-format.js | 144 +++++++++++++++ update-vocab-context.js | 200 +++++++++++++++++++++ 101 files changed, 6998 insertions(+), 1996 deletions(-) create mode 100644 VOCAB_CONTEXT_IMPORT_GUIDE.md create mode 100644 check-context-table.js create mode 100644 check-familynfriend-import.js create mode 100644 check-grades.js delete mode 100644 data/family/g1/unit4.json delete mode 100644 data/family/g1/unit5.json delete mode 100644 data/family/g1/unit6.json create mode 100644 data/familynfriend/g1/F11.json create mode 100644 data/familynfriend/g1/F12.json create mode 100644 data/familynfriend/g1/F13.json create mode 100644 data/familynfriend/g1/F14.json create mode 100644 data/familynfriend/g1/F15.json create mode 100644 data/familynfriend/g1/F16.json create mode 100644 data/familynfriend/g1/F1S.json create mode 100644 data/familynfriend/g2/F21.json create mode 100644 data/familynfriend/g2/F22.json create mode 100644 data/familynfriend/g2/F23.json create mode 100644 data/familynfriend/g2/F24.json create mode 100644 data/familynfriend/g2/F25.json create mode 100644 data/familynfriend/g2/F26.json create mode 100644 data/familynfriend/g2/F2S.json create mode 100644 data/familynfriend/g3/F31.json create mode 100644 data/familynfriend/g3/F310.json create mode 100644 data/familynfriend/g3/F311.json create mode 100644 data/familynfriend/g3/F312.json create mode 100644 data/familynfriend/g3/F32.json create mode 100644 data/familynfriend/g3/F33.json create mode 100644 data/familynfriend/g3/F34.json create mode 100644 data/familynfriend/g3/F35.json create mode 100644 data/familynfriend/g3/F36.json create mode 100644 data/familynfriend/g3/F37.json create mode 100644 data/familynfriend/g3/F38.json create mode 100644 data/familynfriend/g3/F39.json create mode 100644 data/familynfriend/g3/F3S.json create mode 100644 data/familynfriend/g4/F40.json create mode 100644 data/familynfriend/g4/F41.json create mode 100644 data/familynfriend/g4/F410.json create mode 100644 data/familynfriend/g4/F411.json create mode 100644 data/familynfriend/g4/F412.json create mode 100644 data/familynfriend/g4/F42.json create mode 100644 data/familynfriend/g4/F43.json create mode 100644 data/familynfriend/g4/F44.json create mode 100644 data/familynfriend/g4/F45.json create mode 100644 data/familynfriend/g4/F46.json create mode 100644 data/familynfriend/g4/F47.json create mode 100644 data/familynfriend/g4/F48.json create mode 100644 data/familynfriend/g4/F49.json create mode 100644 data/familynfriend/g5/F50.json create mode 100644 data/familynfriend/g5/F51.json create mode 100644 data/familynfriend/g5/F510.json create mode 100644 data/familynfriend/g5/F511.json create mode 100644 data/familynfriend/g5/F512.json create mode 100644 data/familynfriend/g5/F52.json create mode 100644 data/familynfriend/g5/F53.json create mode 100644 data/familynfriend/g5/F54.json create mode 100644 data/familynfriend/g5/F55.json create mode 100644 data/familynfriend/g5/F56.json create mode 100644 data/familynfriend/g5/F57.json create mode 100644 data/familynfriend/g5/F58.json create mode 100644 data/familynfriend/g5/F59.json create mode 100644 data/moveup/g1/M11.json create mode 100644 data/moveup/g1/M12.json create mode 100644 data/moveup/g1/M13.json create mode 100644 data/moveup/g1/M14.json create mode 100644 data/moveup/g1/M15.json create mode 100644 data/moveup/g1/M16.json create mode 100644 data/moveup/g1/M1S.json delete mode 100644 data/moveup/g1/unit4.json delete mode 100644 data/moveup/g1/unit5.json delete mode 100644 data/moveup/g1/unit6.json delete mode 100644 data/moveup/g2/unit4.json delete mode 100644 data/moveup/g2/unit5.json delete mode 100644 data/moveup/g2/unit6.json delete mode 100644 data/moveup/g3/unit10.json delete mode 100644 data/moveup/g3/unit11.json delete mode 100644 data/moveup/g3/unit12.json delete mode 100644 data/moveup/g3/unit7.json delete mode 100644 data/moveup/g3/unit8.json delete mode 100644 data/moveup/g3/unit9.json delete mode 100644 data/moveup/g4/unit10.json delete mode 100644 data/moveup/g4/unit11.json delete mode 100644 data/moveup/g4/unit12.json delete mode 100644 data/moveup/g4/unit7.json delete mode 100644 data/moveup/g4/unit8.json delete mode 100644 data/moveup/g4/unit9.json delete mode 100644 data/moveup/g5/unit10.json delete mode 100644 data/moveup/g5/unit11.json delete mode 100644 data/moveup/g5/unit12.json delete mode 100644 data/moveup/g5/unit7.json delete mode 100644 data/moveup/g5/unit8.json delete mode 100644 data/moveup/g5/unit9.json create mode 100644 data/template.md create mode 100644 delete-all-context.js create mode 100644 import-vocab-to-context.js create mode 100644 import-vocab-to-vocab.js create mode 100644 truncate-and-sync-context.js create mode 100644 truncate-and-sync-vocab.js create mode 100644 update-grade-code-format.js create mode 100644 update-vocab-context.js diff --git a/VOCAB_CONTEXT_IMPORT_GUIDE.md b/VOCAB_CONTEXT_IMPORT_GUIDE.md new file mode 100644 index 0000000..b2caf9c --- /dev/null +++ b/VOCAB_CONTEXT_IMPORT_GUIDE.md @@ -0,0 +1,300 @@ +# Hướng Dẫn Sử Dụng Script Vocab Context + +## 📋 Tổng Quan + +Có 2 script để quản lý vocabulary trong bảng Context: + +1. **`import-vocab-to-context.js`** - Nhập vocabulary từ file JSON vào database +2. **`update-vocab-context.js`** - Cập nhật/thay đổi thông tin vocabulary đã nhập + +--- + +## 🚀 Script 1: Import Vocabulary + +### Mô tả +Script này đọc tất cả file JSON trong thư mục `data/moveup/` (g1, g2, g3, g4, g5) và tạo record trong bảng Context cho mỗi từ vựng. + +### Chạy Script + +```bash +node import-vocab-to-context.js +``` + +### Dữ liệu được tạo + +Mỗi vocabulary word sẽ tạo một record với: +- **title**: từ vựng (vd: "dad", "mom", "hello") +- **grade**: mã grade (vd: 101, 102, 103) +- **type**: "vocabulary" +- **context**: "Vocabulary word for grade {grade}" + +### Ví dụ Output + +``` +🔄 Starting vocab import to Context table... +✅ Database connection OK + +📂 Processing G1 (1 files)... + 📄 Reading M1S.json... + 📚 Grade 101: 4 vocab words + 📚 Grade 102: 7 vocab words + 📚 Grade 103: 4 vocab words + +✅ Import complete! +📊 Total imported: 150 +⏭️ Total skipped (duplicates): 25 +``` + +### Tính năng +- ✅ Tự động bỏ qua duplicates (cùng title + grade) +- ✅ Xử lý nhiều file JSON trong mỗi grade folder +- ✅ Hiển thị progress chi tiết +- ✅ Error handling cho từng record + +--- + +## 🔧 Script 2: Update Vocabulary Context + +### Mô tả +Script này cho phép cập nhật, xóa hoặc xem danh sách vocabulary đã nhập. + +### Chạy Script + +```bash +node update-vocab-context.js +``` + +### Các Chế Độ (UPDATE_MODE) + +#### 1. Cập nhật 1 từ cụ thể (`'single'`) + +```javascript +const UPDATE_MODE = 'single'; + +const SINGLE_UPDATE = { + oldTitle: 'dad', + grade: 101, + updates: { + title: 'dad', + context: 'Family member - father', + knowledge: 'Common family vocabulary for beginners', + desc: 'Từ chỉ bố/cha trong tiếng Anh' + } +}; +``` + +**Chạy:** +```bash +node update-vocab-context.js +``` + +**Output:** +``` +🔍 Looking for vocab: "dad" in grade 101... +✅ Found vocab: dad +📝 Updating... +✅ Updated successfully! +``` + +--- + +#### 2. Cập nhật hàng loạt theo grade (`'bulk_by_grade'`) + +```javascript +const UPDATE_MODE = 'bulk_by_grade'; + +const BULK_UPDATE = { + grade: 101, + updates: { + context: 'Grade 1 Unit 1 Lesson 1 vocabulary', + knowledge: 'Basic greeting and family vocabulary' + } +}; +``` + +**Chạy:** +```bash +node update-vocab-context.js +``` + +**Output:** +``` +🔍 Looking for all vocab in grade 101... +✅ Found 15 vocab words +📝 Updating... +✅ Updated 15 vocab words successfully! +``` + +--- + +#### 3. Xóa vocabulary (`'delete'`) + +```javascript +const UPDATE_MODE = 'delete'; + +const DELETE_CONFIG = { + title: 'test_word', + grade: 101 +}; +``` + +**Chạy:** +```bash +node update-vocab-context.js +``` + +**Output:** +``` +🔍 Looking for vocab: "test_word" in grade 101... +✅ Deleted 1 vocab entry! +``` + +--- + +#### 4. Xem danh sách vocabulary (`'list'`) + +```javascript +const UPDATE_MODE = 'list'; + +// Trong function main(), thay đổi grade number: +result = await listVocabByGrade(101); // Change 101 to your grade +``` + +**Chạy:** +```bash +node update-vocab-context.js +``` + +**Output:** +``` +📚 Listing all vocab in grade 101... + +✅ Found 15 vocab words: + +1. dad + Context: Family member - father + Knowledge: Common family vocabulary + +2. mom + Context: Family member - mother + Knowledge: Common family vocabulary + +... +``` + +--- + +## 📝 Các Trường Có Thể Cập Nhật + +Trong phần `updates`, bạn có thể thay đổi: + +- **title**: Tên từ vựng +- **context**: Mô tả ngữ cảnh sử dụng +- **knowledge**: Kiến thức bổ sung +- **desc**: Mô tả chi tiết (có thể dùng tiếng Việt) +- **grade**: Mã grade (không khuyến khích thay đổi) +- **type**: Loại (mặc định là 'vocabulary') + +--- + +## 💡 Ví Dụ Sử Dụng Thực Tế + +### Ví dụ 1: Import tất cả vocab từ file JSON + +```bash +node import-vocab-to-context.js +``` + +### Ví dụ 2: Thêm mô tả tiếng Việt cho các từ ở grade 101 + +1. Mở `update-vocab-context.js` +2. Đổi thành mode `'bulk_by_grade'` +3. Cấu hình: + +```javascript +const UPDATE_MODE = 'bulk_by_grade'; + +const BULK_UPDATE = { + grade: 101, + updates: { + context: 'Từ vựng Unit 1 - Gia đình và chào hỏi', + knowledge: 'Các từ cơ bản về gia đình và cách chào hỏi lần đầu gặp mặt' + } +}; +``` + +4. Chạy: `node update-vocab-context.js` + +### Ví dụ 3: Cập nhật thông tin chi tiết cho 1 từ + +1. Mở `update-vocab-context.js` +2. Đổi thành mode `'single'` +3. Cấu hình: + +```javascript +const UPDATE_MODE = 'single'; + +const SINGLE_UPDATE = { + oldTitle: 'Hello', + grade: 101, + updates: { + title: 'Hello', + context: 'Greeting word used when meeting someone', + knowledge: 'Most common English greeting. Used in formal and informal contexts.', + desc: 'Lời chào phổ biến nhất trong tiếng Anh. "Hello" là cách chào hỏi trang trọng và lịch sự.' + } +}; +``` + +4. Chạy: `node update-vocab-context.js` + +### Ví dụ 4: Xem tất cả vocab trong grade 102 + +1. Mở `update-vocab-context.js` +2. Đổi thành mode `'list'` +3. Tìm dòng `result = await listVocabByGrade(101);` và đổi thành `102` +4. Chạy: `node update-vocab-context.js` + +--- + +## ⚠️ Lưu Ý + +1. **Backup Database**: Luôn backup database trước khi chạy script +2. **Kiểm tra kết nối**: Đảm bảo `config/database.js` được cấu hình đúng +3. **Duplicate handling**: Script import tự động bỏ qua duplicates +4. **Grade format**: Grade phải là số nguyên (vd: 101, 201, 305) +5. **Type field**: Luôn giữ `type: 'vocabulary'` để phân biệt với các loại context khác + +--- + +## 🔍 Troubleshooting + +### Lỗi: "Database connection failed" +```bash +# Kiểm tra config database +cat config/database.js +# Kiểm tra MySQL có chạy không +``` + +### Lỗi: "Cannot find module" +```bash +# Cài đặt dependencies +npm install +``` + +### Không import được từ nào +- Kiểm tra format file JSON +- Đảm bảo field `vocab` là một array +- Kiểm tra đường dẫn file JSON + +### Xem log chi tiết +Script sẽ tự động hiển thị progress và errors trong console. + +--- + +## 📞 Hỗ Trợ + +Nếu gặp vấn đề, kiểm tra: +1. Console output để xem lỗi chi tiết +2. Database logs +3. Format của file JSON input diff --git a/check-context-table.js b/check-context-table.js new file mode 100644 index 0000000..83d3778 --- /dev/null +++ b/check-context-table.js @@ -0,0 +1,48 @@ +/** + * Check and create Context table if not exists + */ + +const { sequelize } = require('./config/database'); +const { Context } = require('./models'); + +async function checkAndCreateTable() { + try { + console.log('🔍 Checking Context table...\n'); + + await sequelize.authenticate(); + console.log('✅ Database connection OK\n'); + + // Check if table exists + const [results] = await sequelize.query( + "SHOW TABLES LIKE 'context'" + ); + + if (results.length === 0) { + console.log('⚠️ Table "context" does not exist'); + console.log('📊 Creating table...\n'); + + await Context.sync({ force: false }); + + console.log('✅ Table "context" created successfully!'); + } else { + console.log('✅ Table "context" already exists'); + + // Show table info + const [tableInfo] = await sequelize.query('DESCRIBE context'); + console.log('\n📋 Table structure:'); + console.log(tableInfo); + + // Count records + const count = await Context.count(); + console.log(`\n📊 Current records: ${count}`); + } + + process.exit(0); + } catch (error) { + console.error('❌ Error:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +checkAndCreateTable(); diff --git a/check-familynfriend-import.js b/check-familynfriend-import.js new file mode 100644 index 0000000..f78e05c --- /dev/null +++ b/check-familynfriend-import.js @@ -0,0 +1,53 @@ +const { sequelize } = require('./config/database'); +const { Vocab } = require('./models'); + +async function checkImport() { + try { + await sequelize.authenticate(); + console.log('✅ Database connection OK\n'); + + // Count all familynfriend vocabs + const totalCount = await Vocab.count({ + where: { etc: 'familynfriend' } + }); + + console.log(`📊 Total familynfriend vocabulary: ${totalCount}`); + + // Get some sample records + const samples = await Vocab.findAll({ + where: { etc: 'familynfriend' }, + limit: 10, + order: [['grade', 'ASC']] + }); + + console.log('\n📋 Sample records:'); + samples.forEach(v => { + console.log(` - ${v.text} (grade: ${v.grade}, etc: ${v.etc})`); + }); + + // Count by grade prefix + const gradeCount = await sequelize.query( + `SELECT + FLOOR(grade / 100000) as grade_num, + COUNT(*) as count + FROM vocab + WHERE etc = 'familynfriend' + GROUP BY grade_num + ORDER BY grade_num`, + { type: sequelize.QueryTypes.SELECT } + ); + + console.log('\n📊 Count by grade:'); + gradeCount.forEach(g => { + const gradeName = `Grade ${g.grade_num}`; + console.log(` ${gradeName}: ${g.count} words`); + }); + + process.exit(0); + } catch (error) { + console.error('❌ Error:', error.message); + process.exit(1); + } +} + +checkImport(); diff --git a/check-grades.js b/check-grades.js new file mode 100644 index 0000000..a780285 --- /dev/null +++ b/check-grades.js @@ -0,0 +1,55 @@ +const { sequelize } = require('./config/database'); +const { Vocab } = require('./models'); + +async function checkGrades() { + try { + await sequelize.authenticate(); + + // Get unique grades + const grades = await sequelize.query( + `SELECT DISTINCT grade, COUNT(*) as count + FROM vocab + WHERE etc = 'familynfriend' + GROUP BY grade + ORDER BY grade + LIMIT 20`, + { type: sequelize.QueryTypes.SELECT } + ); + + console.log('📊 Grade distribution (first 20):'); + grades.forEach(g => { + console.log(` Grade ${g.grade}: ${g.count} words`); + }); + + // Count by major grade (first digit after removing leading zeros) + const majorGrades = await sequelize.query( + `SELECT + CASE + WHEN grade >= 10000 AND grade < 20000 THEN 'Grade 1' + WHEN grade >= 20000 AND grade < 30000 THEN 'Grade 2' + WHEN grade >= 30000 AND grade < 40000 THEN 'Grade 3' + WHEN grade >= 40000 AND grade < 50000 THEN 'Grade 4' + WHEN grade >= 50000 AND grade < 60000 THEN 'Grade 5' + ELSE 'Other' + END as grade_level, + COUNT(*) as count + FROM vocab + WHERE etc = 'familynfriend' + GROUP BY grade_level + ORDER BY grade_level`, + { type: sequelize.QueryTypes.SELECT } + ); + + console.log('\n📊 Count by grade level:'); + majorGrades.forEach(g => { + console.log(` ${g.grade_level}: ${g.count} words`); + }); + + process.exit(0); + } catch (error) { + console.error('❌ Error:', error.message); + process.exit(1); + } +} + +checkGrades(); diff --git a/data/family/g1/unit4.json b/data/family/g1/unit4.json deleted file mode 100644 index 0da6624..0000000 --- a/data/family/g1/unit4.json +++ /dev/null @@ -1,136 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 1, - "lesson_title": "Lesson 1: Animals", - "lesson_type": "json_content", - "lesson_description": "Learn animal words and use them in a chant", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to learn animal words", - "to use animal words in the form of a chant" - ], - "vocabulary": ["bird", "bear", "hippo", "crocodile", "tiger"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 2, - "lesson_title": "Lesson 2: What are they?", - "lesson_type": "json_content", - "lesson_description": "Ask and answer about animals", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "to ask and answer 'What are they? They're (bears)'", - "to recognize plurals with 's'", - "to sing a song" - ], - "grammar": "What are they? They're bears." - } - }, - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters J & K", - "lesson_type": "json_content", - "lesson_description": "Recognize letters J and K and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "to recognize the upper- and lowercase forms of the letters j and k", - "to associate them with the sounds /dʒ/ and /k/", - "to pronounce the sounds /dʒ/ and /k/", - "to be familiar with the names of the letters j and k" - ], - "letters": ["J", "K"], - "sounds": ["/dʒ/", "/k/"], - "vocabulary": ["jug", "juice", "kangaroo", "key"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 4, - "lesson_title": "Lesson 4: Numbers 9 and 10", - "lesson_type": "json_content", - "lesson_description": "Learn and use numbers 9 and 10", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to recognize and say the numbers 9 and 10", - "to use the numbers 9 and 10 in the context of a song" - ], - "vocabulary": ["nine", "ten"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 5, - "lesson_title": "Lesson 5: Letters L & M", - "lesson_type": "json_content", - "lesson_description": "Recognize letters L and M and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "to recognize the upper- and lowercase forms of the letters l and m", - "to associate them with the sounds /l/ and /m/", - "to pronounce the sounds /l/ and /m/", - "to be familiar with the names of the letters l and m" - ], - "letters": ["L", "M"], - "sounds": ["/l/", "/m/"], - "vocabulary": ["lion", "lollipop", "man", "mango"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 6, - "lesson_title": "Lesson 6: Story and Values", - "lesson_type": "json_content", - "lesson_description": "Understand a short story and learn values", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "to recognize and identify words", - "to understand a short story", - "to review and consolidate language introduced in the unit" - ], - "values": ["Be kind to animals"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 7, - "lesson_title": "Culture: Children's Day", - "lesson_type": "json_content", - "lesson_description": "Learn about Children's Day in Japan", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": ["to learn about Children's Day in Japan"], - "vocabulary": ["fish", "bird", "flower", "frog"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade1", - "lesson_number": 8, - "lesson_title": "Consolidation", - "lesson_type": "json_content", - "lesson_description": "Review and test Unit 4", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "to review and consolidate language introduced in the unit", - "to do Unit Test" - ] - } - } -] \ No newline at end of file diff --git a/data/family/g1/unit5.json b/data/family/g1/unit5.json deleted file mode 100644 index e924020..0000000 --- a/data/family/g1/unit5.json +++ /dev/null @@ -1,139 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 1, - "lesson_title": "Lesson 1: Body Parts", - "lesson_type": "json_content", - "lesson_description": "Identify different parts of the body", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to identify different parts of the body", - "to use the words in the context of a chant" - ], - "vocabulary": ["arms", "nose", "face", "legs", "fingers", "hands"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 2, - "lesson_title": "Lesson 2: This and These", - "lesson_type": "json_content", - "lesson_description": "Use this and these in sentences", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "to say sentences with 'this' and 'these'", - "to complete sentences with 'this' and 'these'", - "to recognize the difference between singular and plural forms of nouns" - ], - "grammar": "This is.... These are...." - } - }, - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters A, B, C, D", - "lesson_type": "json_content", - "lesson_description": "Learn letters A, B, C, D and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "to learn the names of the letters a, b, c, d", - "to review the upper- and lowercase forms of a, b, c, d", - "to associate them with their corresponding sounds", - "to pronounce the sounds /b/ and /d/ at the ends of words" - ], - "letters": ["A", "B", "C", "D"], - "sounds": ["/b/", "/d/"], - "vocabulary": ["a", "b", "c", "d", "e", "f", "g", "h"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 4, - "lesson_title": "Lesson 4: Numbers 1-5", - "lesson_type": "json_content", - "lesson_description": "Review numbers 1-5", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to review the numbers 1-5", - "to associate the numbers 1-5 with the words one to five" - ], - "vocabulary": ["one", "two", "three", "four", "five"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 5, - "lesson_title": "Lesson 5: Letters E, F, G, H", - "lesson_type": "json_content", - "lesson_description": "Learn letters E, F, G, H and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "to learn the names of the letters Ee, Ff, Gg, and Hh", - "to review the upper- and lowercase forms of e, f, g, and h", - "to associate them with their corresponding sounds", - "to pronounce the sounds /f/ and /g/ at the ends of words" - ], - "letters": ["E", "F", "G", "H"], - "sounds": ["/f/", "/g/"], - "vocabulary": ["b", "d", "f", "g"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 6, - "lesson_title": "Lesson 6: Story and Values", - "lesson_type": "json_content", - "lesson_description": "Understand a short story and learn values", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "to recognize and identify words", - "to understand a short story", - "to review and consolidate language introduced in the unit" - ], - "values": ["Take care in the sun"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 7, - "lesson_title": "Culture: Fruits in Cambodia", - "lesson_type": "json_content", - "lesson_description": "Learn about fruits found in Cambodia", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to learn some fruit found in Cambodia", - "to design a menu" - ], - "vocabulary": ["mango", "papaya", "pineapple", "watermelon"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade1", - "lesson_number": 8, - "lesson_title": "Consolidation", - "lesson_type": "json_content", - "lesson_description": "Review and test Unit 5", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "to review and consolidate language introduced in the unit", - "to do Unit Test" - ] - } - } -] \ No newline at end of file diff --git a/data/family/g1/unit6.json b/data/family/g1/unit6.json deleted file mode 100644 index 9b5e0a4..0000000 --- a/data/family/g1/unit6.json +++ /dev/null @@ -1,140 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 1, - "lesson_title": "Lesson 1: My Lunchbox", - "lesson_type": "json_content", - "lesson_description": "Identify different foods in a lunchbox", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to identify different foods in a lunchbox", - "to use the words in the context of a chant" - ], - "vocabulary": ["lunchbox", "sandwich", "drink", "banana", "cookie", "pear"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 2, - "lesson_title": "Lesson 2: I have...", - "lesson_type": "json_content", - "lesson_description": "Make sentences with have", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "to make sentences with 'have'", - "to recognize difference between 'a' and 'an'" - ], - "grammar": "I have a pear. I have my lunchbox." - } - }, - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters I, J, K, L, M", - "lesson_type": "json_content", - "lesson_description": "Learn letters I, J, K, L, M and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "to learn the names of the letters i, j, k, l, m", - "to review the upper- and lowercase forms of the letters", - "to associate them with their corresponding sounds", - "to pronounce the sounds /ɪ/, /ʤ/, /k/, /l/, /m/ at the beginning of words", - "to pronounce the sounds /k/, /l/, /m/ at the end of words" - ], - "letters": ["I", "J", "K", "L", "M"], - "sounds": ["/ɪ/", "/ʤ/", "/k/", "/l/", "/m/"], - "vocabulary": ["b", "d", "f", "g", "I", "j", "k", "l", "m"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 4, - "lesson_title": "Lesson 4: Numbers 6-10", - "lesson_type": "json_content", - "lesson_description": "Review numbers 6-10", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to review the numbers 6-10", - "to associate the numbers 6-10 with the words six to ten" - ], - "vocabulary": ["six", "seven", "eight", "nine", "ten"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 5, - "lesson_title": "Lesson 5: Review Letters A-M", - "lesson_type": "json_content", - "lesson_description": "Review letters A to M", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "to review the names of the letters learned so far (a to m)", - "to review the upper- and lowercase forms of the letters (a to m)", - "to associate them with their corresponding sounds", - "to recognize letters at the ends/beginnings of words", - "to pronounce their sounds appropriately (/b/, /d/, /f/, /g/, /k/, /l/, /m/)" - ], - "letters": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"], - "sounds": ["/b/", "/d/", "/f/", "/g/", "/k/", "/l/", "/m/"], - "vocabulary": ["b", "d", "f", "g", "k", "l", "m"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 6, - "lesson_title": "Lesson 6: Story and Values", - "lesson_type": "json_content", - "lesson_description": "Understand a short story and learn values", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "to recognize and identify words", - "to understand a short story", - "to review and consolidate language introduced in the unit" - ], - "values": ["Share with others"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 7, - "lesson_title": "Culture: Bondi Beach in Australia", - "lesson_type": "json_content", - "lesson_description": "Learn about Bondi Beach in Australia", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "to learn some words about a beach in Australia", - "to read a postcard" - ], - "vocabulary": ["sand", "sea", "shell", "sun"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade1", - "lesson_number": 8, - "lesson_title": "Consolidation", - "lesson_type": "json_content", - "lesson_description": "Review and test Unit 6", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "to review and consolidate language introduced in the unit", - "to do Unit Test" - ] - } - } -] \ No newline at end of file diff --git a/data/familynfriend/g1/F11.json b/data/familynfriend/g1/F11.json new file mode 100644 index 0000000..72ddc1f --- /dev/null +++ b/data/familynfriend/g1/F11.json @@ -0,0 +1,136 @@ +[ + { + "grade": "010101", + "vocab": [ + "red", + "green", + "blue", + "black", + "yellow" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010102", + "vocab": [ + "red", + "green", + "blue", + "black", + "yellow", + "leaf", + "apple", + "sky", + "paint pot" + ], + "phonics": null, + "grammar": [ + "What color is it?", + "It's + color" + ] + }, + { + "grade": "010103", + "vocab": [ + "cat", + "car" + ], + "phonics": [ + "C", + "c", + "/k/" + ], + "grammar": [] + }, + { + "grade": "010104", + "vocab": [ + "three", + "four", + "apple", + "cat", + "car", + "bat" + ], + "phonics": null, + "grammar": [ + "How many ...?" + ] + }, + { + "grade": "010105", + "vocab": [ + "dog", + "duck" + ], + "phonics": [ + "D", + "d", + "/d/" + ], + "grammar": [] + }, + { + "grade": "010106", + "vocab": [ + "Rosy", + "Tim", + "Billy", + "Mom", + "clean", + "tidy", + "dirty", + "messy" + ], + "phonics": null, + "grammar": [ + "It's good to be clean and tidy." + ] + }, + { + "grade": "010107", + "vocab": [ + "cake", + "candle", + "gift", + "party", + "Happy Birthday" + ], + "phonics": null, + "grammar": [ + "Happy birthday, (name)!" + ] + }, + { + "grade": "010108", + "vocab": [ + "red", + "green", + "blue", + "black", + "yellow", + "three", + "four", + "cat", + "car", + "dog", + "duck" + ], + "phonics": [ + "A", + "a", + "B", + "b", + "C", + "c", + "D", + "d" + ], + "grammar": [ + "What color is it?", + "It's + color", + "How many ...?" + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g1/F12.json b/data/familynfriend/g1/F12.json new file mode 100644 index 0000000..34f43e7 --- /dev/null +++ b/data/familynfriend/g1/F12.json @@ -0,0 +1,92 @@ +[ + { + "grade": "010201", + "vocab": [ + "desk", + "chair", + "crayon", + "pencil", + "notebook" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010202", + "vocab": [ + "desk", + "chair", + "crayon", + "pencil", + "notebook" + ], + "phonics": null, + "grammar": [ + "What's this?", + "It's a (desk)." + ] + }, + { + "grade": "010203", + "vocab": [ + "egg", + "elephant" + ], + "phonics": [ + "/e/" + ], + "grammar": [] + }, + { + "grade": "010204", + "vocab": [ + "five", + "six" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010205", + "vocab": [ + "fish", + "farm" + ], + "phonics": [ + "/f/" + ], + "grammar": [] + }, + { + "grade": "010206", + "vocab": [ + "train", + "desk", + "book" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010207", + "vocab": [ + "dancer", + "fan", + "ao dai" + ], + "phonics": null, + "grammar": [ + "They are dancers from Viet Nam.", + "They have fans." + ] + }, + { + "grade": "010208", + "vocab": null, + "phonics": [ + "/e/", + "/f/" + ], + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g1/F13.json b/data/familynfriend/g1/F13.json new file mode 100644 index 0000000..c733601 --- /dev/null +++ b/data/familynfriend/g1/F13.json @@ -0,0 +1,109 @@ +[ + { + "grade": "010301", + "vocab": [ + "plane", + "robot", + "puppet", + "balloon", + "teddy bear" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010302", + "vocab": [ + "plane", + "robot", + "puppet", + "balloon", + "teddy bear" + ], + "phonics": null, + "grammar": [ + "Is it a ...?", + "Yes, it is.", + "No, it isn't." + ] + }, + { + "grade": "010303", + "vocab": [ + "girl", + "guitar" + ], + "phonics": [ + "/g/" + ], + "grammar": [] + }, + { + "grade": "010304", + "vocab": [], + "phonics": null, + "grammar": [] + }, + { + "grade": "010305", + "vocab": [ + "horse", + "hat", + "insect", + "ill" + ], + "phonics": [ + "/h/", + "/ɪ/" + ], + "grammar": [] + }, + { + "grade": "010306", + "vocab": [ + "plane", + "robot", + "puppet", + "balloon", + "teddy bear" + ], + "phonics": null, + "grammar": [ + "Is it a ...?", + "Yes, it is.", + "No, it isn't." + ] + }, + { + "grade": "010307", + "vocab": [ + "ball", + "T-shirt", + "kick", + "score a goal" + ], + "phonics": null, + "grammar": [ + "What's your favorite sport?", + "Basketball." + ] + }, + { + "grade": "010308", + "vocab": [ + "plane", + "robot", + "puppet", + "balloon", + "teddy bear" + ], + "phonics": [ + "/g/", + "/h/", + "/ɪ/" + ], + "grammar": [ + "Is it a ...?" + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g1/F14.json b/data/familynfriend/g1/F14.json new file mode 100644 index 0000000..9ced5b7 --- /dev/null +++ b/data/familynfriend/g1/F14.json @@ -0,0 +1,135 @@ +[ + { + "grade": "010401", + "vocab": [ + "bird", + "bear", + "hippo", + "crocodile", + "tiger" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010402", + "vocab": [ + "bird", + "bear", + "hippo", + "crocodile", + "tiger" + ], + "phonics": null, + "grammar": [ + "What are they?", + "They're (hippos/tigers/...)." + ] + }, + { + "grade": "010403", + "vocab": [ + "jug", + "juice", + "kangaroo", + "key" + ], + "phonics": [ + "/dʒ/", + "/k/" + ], + "grammar": [] + }, + { + "grade": "010404", + "vocab": [ + "pandas", + "bears", + "lions", + "hippos" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010405", + "vocab": [ + "lion", + "lollipop", + "man", + "mango" + ], + "phonics": [ + "/l/", + "/m/" + ], + "grammar": [] + }, + { + "grade": "010406", + "vocab": [ + "tiger", + "bird", + "hippo", + "crocodile", + "bear" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010407", + "vocab": [ + "fish", + "bird", + "flower", + "frog", + "ball", + "T-shirt", + "kick" + ], + "phonics": null, + "grammar": [ + "A flower!", + "A frog!", + "It's a bird.", + "score a goal" + ] + }, + { + "grade": "010408", + "vocab": [ + "fish", + "bird", + "flower", + "frog", + "pandas", + "bears", + "lions", + "hippos", + "tiger", + "crocodile", + "jug", + "juice", + "kangaroo", + "key", + "lion", + "lollipop", + "man", + "mango" + ], + "phonics": [ + "/dʒ/", + "/k/", + "/l/", + "/m/" + ], + "grammar": [ + "What are they?", + "They're (hippos/tigers/...).", + "A flower!", + "A frog!", + "It's a bird." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g1/F15.json b/data/familynfriend/g1/F15.json new file mode 100644 index 0000000..cb46a89 --- /dev/null +++ b/data/familynfriend/g1/F15.json @@ -0,0 +1,109 @@ +[ + { + "grade": "010501", + "vocab": [ + "arms", + "nose", + "face", + "legs", + "fingers", + "hands" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010502", + "vocab": [ + "arms", + "nose", + "face", + "legs", + "fingers", + "hands" + ], + "phonics": null, + "grammar": [ + "This is my...", + "These are my..." + ] + }, + { + "grade": "010503", + "vocab": [], + "phonics": [ + "a", + "b", + "c", + "d", + "/b/", + "/d/" + ], + "grammar": [] + }, + { + "grade": "010504", + "vocab": [ + "one", + "two", + "three", + "four", + "five" + ], + "phonics": null, + "grammar": [ + "How many...?" + ] + }, + { + "grade": "010505", + "vocab": [], + "phonics": [ + "Ee", + "Ff", + "Gg", + "Hh", + "/f/", + "/g/" + ], + "grammar": [] + }, + { + "grade": "010506", + "vocab": [ + "nose", + "arms", + "legs", + "face" + ], + "phonics": null, + "grammar": [ + "This is...", + "These are...", + "Let's take care in the sun." + ] + }, + { + "grade": "010507", + "vocab": [ + "mango", + "papaya", + "pineapple", + "watermelon" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010508", + "vocab": null, + "phonics": [ + "letters and sounds from unit" + ], + "grammar": [ + "This is...", + "These are...", + "How many...?" + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g1/F16.json b/data/familynfriend/g1/F16.json new file mode 100644 index 0000000..0ba1acd --- /dev/null +++ b/data/familynfriend/g1/F16.json @@ -0,0 +1,96 @@ +[ + { + "grade": "010601", + "vocab": [ + "lunchbox", + "sandwich", + "drink", + "banana", + "cookie", + "pear" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "010602", + "vocab": [], + "phonics": null, + "grammar": [ + "I have ...", + "I have an apple.", + "I have two sandwiches." + ] + }, + { + "grade": "010603", + "vocab": [], + "phonics": [ + "/ɪ/", + "/ʤ/", + "/k/", + "/l/", + "/m/" + ], + "grammar": [] + }, + { + "grade": "010604", + "vocab": [ + "six", + "seven", + "eight", + "nine", + "ten" + ], + "phonics": null, + "grammar": [ + "Six birds.", + "Eight lions.", + "What's this number?" + ] + }, + { + "grade": "010605", + "vocab": [], + "phonics": [ + "/b/", + "/d/", + "/f/", + "/g/", + "/k/", + "/l/", + "/m/" + ], + "grammar": [] + }, + { + "grade": "010606", + "vocab": [], + "phonics": null, + "grammar": [ + "I have ...", + "Share with others." + ] + }, + { + "grade": "010607", + "vocab": [ + "sand", + "sea", + "shell", + "sun" + ], + "phonics": null, + "grammar": [ + "The sun is big.", + "The sea is blue." + ] + }, + { + "grade": "010608", + "vocab": [], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g1/F1S.json b/data/familynfriend/g1/F1S.json new file mode 100644 index 0000000..a372b0c --- /dev/null +++ b/data/familynfriend/g1/F1S.json @@ -0,0 +1,136 @@ +[ + { + "grade": "010001", + "vocab": [ + "hello", + "goodbye", + "Rosy", + "Tim", + "Billy" + ], + "phonics": null, + "grammar": [ + "Hello!", + "Goodbye!", + "What's your name?", + "I'm ..." + ] + }, + { + "grade": "010002", + "vocab": [ + "hello", + "goodbye", + "Rosy", + "Tim", + "Billy" + ], + "phonics": null, + "grammar": [ + "What's your name?", + "I'm ...", + "Stand up", + "Sit down", + "Line up", + "Raise your hand" + ] + }, + { + "grade": "010003", + "vocab": [ + "apple", + "Annie" + ], + "phonics": [ + "/æ/" + ], + "grammar": [ + "A is for apple", + "Annie has an apple." + ] + }, + { + "grade": "010004", + "vocab": [ + "one", + "two", + "apple", + "apples" + ], + "phonics": null, + "grammar": [ + "One apple", + "Two apples", + "Count and say." + ] + }, + { + "grade": "010005", + "vocab": [ + "boy", + "bag", + "bat", + "Billy" + ], + "phonics": [ + "/b/" + ], + "grammar": [ + "B is for boy", + "A boy with a bat." + ] + }, + { + "grade": "010006", + "vocab": [ + "hello", + "goodbye", + "Rosy", + "Tim", + "Billy", + "Mom", + "Miss Bell" + ], + "phonics": null, + "grammar": [ + "It is good to say Hello and Goodbye." + ] + }, + { + "grade": "010007", + "vocab": [ + "Viet Nam", + "Canada", + "Australia", + "Japan", + "the U.K.", + "Cambodia" + ], + "phonics": null, + "grammar": [ + "I'm from ...", + "It's red and white." + ] + }, + { + "grade": "010008", + "vocab": [ + "hello", + "goodbye", + "one", + "two", + "apple", + "A", + "B" + ], + "phonics": [ + "/æ/", + "/b/" + ], + "grammar": [ + "Review greetings", + "Numbers 1-2", + "Classroom commands" + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g2/F21.json b/data/familynfriend/g2/F21.json new file mode 100644 index 0000000..8f4e4ac --- /dev/null +++ b/data/familynfriend/g2/F21.json @@ -0,0 +1,131 @@ +[ + { + "grade": "020101", + "vocab": [ + "mom", + "dad", + "brother", + "sister", + "grandpa", + "grandma" + ], + "phonics": null, + "grammar": [ + "This is my (mom)." + ] + }, + { + "grade": "020102", + "vocab": [ + "mom", + "dad", + "brother", + "sister", + "grandpa", + "grandma" + ], + "phonics": null, + "grammar": [ + "Is this your (mom)?", + "Yes, it is.", + "No, it isn't." + ] + }, + { + "grade": "020103", + "vocab": [ + "nose", + "neck", + "orange", + "octopus" + ], + "phonics": [ + "Nn", + "Oo" + ], + "grammar": [ + "This is my (nose).", + "This is my (orange and octopus)." + ] + }, + { + "grade": "020104", + "vocab": [ + "eleven", + "twelve" + ], + "phonics": null, + "grammar": [ + "How many?", + "Twelve moms.", + "Eleven dads." + ] + }, + { + "grade": "020105", + "vocab": [ + "panda", + "pen", + "Polly" + ], + "phonics": [ + "Pp" + ], + "grammar": [ + "She has a pen." + ] + }, + { + "grade": "020106", + "vocab": [ + "mom", + "dad", + "brother", + "sister", + "grandpa", + "grandma" + ], + "phonics": null, + "grammar": [ + "Is this your (mom)?", + "Yes, it is.", + "No, it isn't." + ] + }, + { + "grade": "020107", + "vocab": [ + "dog", + "cat", + "hamster", + "fish" + ], + "phonics": null, + "grammar": [ + "It's a cat.", + "My pet is brown.", + "My pet has a black nose.", + "What a good dog!" + ] + }, + { + "grade": "020108", + "vocab": [ + "mom", + "dad", + "brother", + "sister", + "grandpa", + "grandma", + "eleven", + "twelve" + ], + "phonics": null, + "grammar": [ + "Is this your (mom)?", + "Yes, it is.", + "No, it isn't.", + "How many?" + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g2/F22.json b/data/familynfriend/g2/F22.json new file mode 100644 index 0000000..e28618e --- /dev/null +++ b/data/familynfriend/g2/F22.json @@ -0,0 +1,121 @@ +[ + { + "grade": "020201", + "vocab": [ + "happy", + "sad", + "hungry", + "thirsty", + "hot", + "cold" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020202", + "vocab": [ + "happy", + "sad", + "hungry", + "thirsty", + "hot", + "cold" + ], + "phonics": null, + "grammar": [ + "He's happy.", + "She's hungry." + ] + }, + { + "grade": "020203", + "vocab": [ + "queen", + "quiet", + "river", + "rainbow" + ], + "phonics": [ + "Qq", + "Rr", + "/kw/", + "/r/" + ], + "grammar": [] + }, + { + "grade": "020204", + "vocab": [ + "thirteen", + "fourteen" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020205", + "vocab": [ + "sock", + "sofa" + ], + "phonics": [ + "Ss", + "/s/" + ], + "grammar": [] + }, + { + "grade": "020206", + "vocab": [ + "happy", + "sad", + "hungry", + "thirsty", + "hot", + "cold" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020207", + "vocab": [ + "card", + "bánh chưng", + "lucky money", + "flowers" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020208", + "vocab": [ + "happy", + "sad", + "hungry", + "thirsty", + "hot", + "cold", + "queen", + "quiet", + "river", + "rainbow", + "sock", + "sofa" + ], + "phonics": [ + "Qq", + "Rr", + "Ss", + "/kw/", + "/r/", + "/s/" + ], + "grammar": [ + "He's happy.", + "She's cold." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g2/F23.json b/data/familynfriend/g2/F23.json new file mode 100644 index 0000000..1337090 --- /dev/null +++ b/data/familynfriend/g2/F23.json @@ -0,0 +1,124 @@ +[ + { + "grade": "020301", + "vocab": [ + "dress", + "socks", + "T-shirt", + "pants", + "shorts", + "shoes" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020302", + "vocab": [ + "pants", + "socks", + "T-shirt", + "shorts", + "shoes", + "dress" + ], + "phonics": null, + "grammar": [ + "Are these his (pants)?", + "Yes, they are.", + "No, they aren't." + ] + }, + { + "grade": "020303", + "vocab": [ + "towel", + "turtle", + "umbrella", + "up" + ], + "phonics": [ + "/t/", + "/ʌ/", + "Tt", + "Uu" + ], + "grammar": [] + }, + { + "grade": "020304", + "vocab": [ + "fifteen", + "sixteen" + ], + "phonics": null, + "grammar": [ + "Fifteen T-shirts.", + "Sixteen pants." + ] + }, + { + "grade": "020305", + "vocab": [ + "violin", + "vase" + ], + "phonics": [ + "/v/", + "Vv" + ], + "grammar": [] + }, + { + "grade": "020306", + "vocab": [ + "pants", + "socks", + "T-shirt", + "shorts", + "shoes", + "dress", + "umbrella", + "turtle" + ], + "phonics": null, + "grammar": [ + "Are these her socks?", + "Yes, they are./No, they aren't.", + "Is this his T-shirt?", + "Yes, it is./No, it isn't." + ] + }, + { + "grade": "020307", + "vocab": [ + "baseball", + "basketball", + "hockey", + "badminton" + ], + "phonics": null, + "grammar": [ + "What's your favorite sport?", + "My favorite sport is (hockey)." + ] + }, + { + "grade": "020308", + "vocab": [ + "pants", + "socks", + "T-shirt", + "shorts", + "shoes", + "dress", + "15", + "16" + ], + "phonics": null, + "grammar": [ + "Are these his pants?", + "Yes, they are./No, they aren't." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g2/F24.json b/data/familynfriend/g2/F24.json new file mode 100644 index 0000000..b984329 --- /dev/null +++ b/data/familynfriend/g2/F24.json @@ -0,0 +1,153 @@ +[ + { + "grade": "020401", + "vocab": [ + "bus", + "bike", + "boat", + "car", + "truck", + "motorbike" + ], + "phonics": null, + "grammar": [ + "What's this? - It's a ..." + ] + }, + { + "grade": "020402", + "vocab": [ + "bus", + "bike", + "boat", + "car", + "truck", + "motorbike" + ], + "phonics": null, + "grammar": [ + "I go to school by ...", + "I walk to school.", + "I go by ..." + ] + }, + { + "grade": "020403", + "vocab": [ + "woman", + "wall", + "box", + "fox" + ], + "phonics": [ + "Ww /w/", + "Xx /ks/" + ], + "grammar": [ + "She's a woman.", + "It's a wall.", + "It's a box.", + "It's a fox." + ] + }, + { + "grade": "020404", + "vocab": [ + "seventeen", + "eighteen" + ], + "phonics": null, + "grammar": [ + "How many ...? - Seventeen / Eighteen.", + "Seventeen bikes.", + "Eighteen boats.", + "He has seventeen buses." + ] + }, + { + "grade": "020405", + "vocab": [ + "yogurt", + "yo-yo", + "zebra", + "zoo" + ], + "phonics": [ + "Yy /j/", + "Zz /z/" + ], + "grammar": [ + "It's a yo-yo.", + "It's a zebra.", + "I like yogurt.", + "I like yo-yo.", + "Zebras at the zoo." + ] + }, + { + "grade": "020406", + "vocab": [ + "bus", + "bike", + "car", + "motorbike", + "truck", + "boat" + ], + "phonics": null, + "grammar": [ + "I go by bus.", + "I go to grandma and grandpa's house by bus.", + "Be careful on the road!" + ] + }, + { + "grade": "020407", + "vocab": [ + "to he", + "kite", + "board game", + "doll" + ], + "phonics": null, + "grammar": [ + "What is it? - It's a ...", + "I like ...", + "I have ..." + ] + }, + { + "grade": "020408", + "vocab": [ + "bus", + "bike", + "car", + "motorbike", + "boat", + "truck", + "woman", + "wall", + "box", + "fox", + "yogurt", + "yo-yo", + "zebra", + "zoo", + "seventeen", + "eighteen" + ], + "phonics": [ + "Ww /w/", + "Xx /ks/", + "Yy /j/", + "Zz /z/" + ], + "grammar": [ + "I go to school by ...", + "What's this? - It's a ...", + "How many ...?", + "It's a ...", + "I like ..." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g2/F25.json b/data/familynfriend/g2/F25.json new file mode 100644 index 0000000..3016013 --- /dev/null +++ b/data/familynfriend/g2/F25.json @@ -0,0 +1,112 @@ +[ + { + "grade": "020501", + "vocab": [ + "seesaw", + "slide", + "goal", + "tree", + "pool", + "frisbee" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020502", + "vocab": [ + "goal", + "slide", + "seesaw", + "tree", + "ball", + "frisbee" + ], + "phonics": null, + "grammar": [ + "Where's the ball? - It's in/on/under ..." + ] + }, + { + "grade": "020503", + "vocab": [ + "nurse", + "orange", + "pen", + "queen", + "lion", + "lollipop" + ], + "phonics": [ + "/n/", + "/o/", + "/p/", + "/q/" + ], + "grammar": [] + }, + { + "grade": "020504", + "vocab": [ + "nineteen", + "twenty" + ], + "phonics": null, + "grammar": [ + "How many ...? - Nineteen / Twenty." + ] + }, + { + "grade": "020505", + "vocab": [ + "rabbit", + "sofa", + "tiger", + "umbrella", + "car", + "octopus", + "hat" + ], + "phonics": [ + "/r/", + "/s/", + "/t/", + "/ʌ/" + ], + "grammar": [ + "Where's the rabbit? / The octopus has a hat." + ] + }, + { + "grade": "020506", + "vocab": [], + "phonics": null, + "grammar": [] + }, + { + "grade": "020507", + "vocab": [ + "mountains", + "jacket", + "boots", + "backpack" + ], + "phonics": null, + "grammar": [ + "I wear a jacket. I have a backpack." + ] + }, + { + "grade": "020508", + "vocab": [ + "ball", + "goal", + "slide", + "seesaw", + "tree", + "Frisbee" + ], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g2/F26.json b/data/familynfriend/g2/F26.json new file mode 100644 index 0000000..8d34f25 --- /dev/null +++ b/data/familynfriend/g2/F26.json @@ -0,0 +1,140 @@ +[ + { + "grade": "020601", + "vocab": [ + "kitchen", + "living room", + "dining room", + "bedroom", + "bathroom" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020602", + "vocab": [ + "kitchen", + "living room", + "dining room", + "bedroom", + "bathroom", + "grandma" + ], + "phonics": null, + "grammar": [ + "Where's Grandma? She's in the dining room.", + "Is she in the kitchen? No, she isn't." + ] + }, + { + "grade": "020603", + "vocab": [ + "van", + "window", + "box", + "yo-yo", + "zebra", + "buzz" + ], + "phonics": [ + "/v/", + "/w/", + "/ks/", + "/j/", + "/z/" + ], + "grammar": [] + }, + { + "grade": "020604", + "vocab": [ + "eleven", + "twelve", + "thirteen", + "fourteen", + "fifteen", + "sixteen", + "seventeen", + "eighteen", + "nineteen", + "twenty" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020605", + "vocab": [ + "nurse", + "pen", + "rabbit", + "sofa", + "tiger", + "van", + "box", + "zebra", + "lion", + "yogurt" + ], + "phonics": [ + "Nn", + "Pp", + "Rr", + "Ss", + "Tt", + "Vv", + "Xx", + "Zz" + ], + "grammar": [] + }, + { + "grade": "020606", + "vocab": [ + "kitchen", + "living room", + "dining room", + "bedroom", + "bathroom", + "grandma", + "grandpa", + "mom", + "dad" + ], + "phonics": null, + "grammar": [ + "Where's Grandma?", + "Is she in the kitchen? Yes, she is./No, she isn't." + ] + }, + { + "grade": "020607", + "vocab": [ + "egg", + "rice", + "soup", + "meat" + ], + "phonics": null, + "grammar": [ + "I eat rice and eggs.", + "I like rice." + ] + }, + { + "grade": "020608", + "vocab": [ + "kitchen", + "living room", + "dining room", + "bedroom", + "bathroom" + ], + "phonics": null, + "grammar": [ + "Where's Grandma? She's in the dining room.", + "Is she in the kitchen? No, she isn't." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g2/F2S.json b/data/familynfriend/g2/F2S.json new file mode 100644 index 0000000..4a6b7ac --- /dev/null +++ b/data/familynfriend/g2/F2S.json @@ -0,0 +1,123 @@ +[ + { + "grade": "020001", + "vocab": [ + "orange", + "pink", + "brown", + "purple" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020002", + "vocab": [ + "six", + "seven", + "eight" + ], + "phonics": null, + "grammar": [ + "How old are you? - I'm six/seven...", + "I like (color)." + ] + }, + { + "grade": "020003", + "vocab": [ + "apple", + "bird", + "cat", + "dog", + "egg", + "fig" + ], + "phonics": [ + "a", + "b", + "c", + "d", + "e", + "f" + ], + "grammar": [] + }, + { + "grade": "020004", + "vocab": [ + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "ten" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "020005", + "vocab": [ + "goat", + "hat", + "igloo", + "juice", + "kite", + "leaf", + "monkey" + ], + "phonics": [ + "g", + "h", + "i", + "j", + "k", + "l", + "m" + ], + "grammar": [] + }, + { + "grade": "020006", + "vocab": [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday", + "big", + "little" + ], + "phonics": null, + "grammar": [ + "It's a big/little (object)." + ] + }, + { + "grade": "020007", + "vocab": [ + "Vietnam", + "Korea", + "the U.S.A.", + "Thailand", + "Switzerland" + ], + "phonics": null, + "grammar": [ + "I'm from (country/city)." + ] + }, + { + "grade": "020008", + "vocab": [], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F31.json b/data/familynfriend/g3/F31.json new file mode 100644 index 0000000..1b1bf72 --- /dev/null +++ b/data/familynfriend/g3/F31.json @@ -0,0 +1,74 @@ +[ + { + "grade": "030101", + "vocab": [ + "doll", + "ball", + "teddy bear", + "car", + "bag" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030102", + "vocab": [ + "doll", + "ball", + "teddy bear", + "car" + ], + "phonics": null, + "grammar": [ + "This is my [noun].", + "This is your [noun]." + ] + }, + { + "grade": "030103", + "vocab": [ + "bike", + "kite", + "train", + "big", + "love (v)", + "toys" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030104", + "vocab": [ + "apple", + "Annie", + "bat", + "ball" + ], + "phonics": [ + "/æ/", + "/b/" + ], + "grammar": [] + }, + { + "grade": "030105", + "vocab": [ + "favorite" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030106", + "vocab": [], + "phonics": null, + "grammar": [ + "What's your favorite toy?", + "It's my [toy].", + "My favorite toy is [toy].", + "My favorite color is [color]." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F310.json b/data/familynfriend/g3/F310.json new file mode 100644 index 0000000..20a1cdd --- /dev/null +++ b/data/familynfriend/g3/F310.json @@ -0,0 +1,73 @@ +[ + { + "grade": "031001", + "vocab": [ + "listen to an audio guide", + "take a photo", + "draw a picture", + "visit the gift shop", + "welcome", + "museum", + "pass" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "031002", + "vocab": [ + "listen to an audio guide", + "take a photo", + "draw a picture", + "visit the gift shop" + ], + "phonics": null, + "grammar": [ + "May I ...?", + "Yes, you may.", + "No, you may not." + ] + }, + { + "grade": "031003", + "vocab": [ + "old", + "new", + "great" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "031004", + "vocab": [ + "boat", + "goat", + "toy", + "boy" + ], + "phonics": [ + "/oʊ/ (oa)", + "/ɔɪ/ (oy)" + ], + "grammar": [] + }, + { + "grade": "031005", + "vocab": [ + "beach" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "031006", + "vocab": [], + "phonics": null, + "grammar": [ + "May I ...?", + "Yes, you may.", + "No, you may not." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F311.json b/data/familynfriend/g3/F311.json new file mode 100644 index 0000000..548add6 --- /dev/null +++ b/data/familynfriend/g3/F311.json @@ -0,0 +1,115 @@ +[ + { + "grade": "031101", + "vocab": [ + "rug", + "cabinet", + "shelf", + "pillow", + "blanket", + "clean up", + "clean (adj)", + "room" + ], + "phonics": [ + "/p/ vs /b/", + "/ʃ/" + ], + "grammar": [] + }, + { + "grade": "031102", + "vocab": [ + "rug", + "cabinet", + "shelf", + "pillow", + "blanket" + ], + "phonics": null, + "grammar": [ + "There's a doll on the rug.", + "There are some toys in the cabinet.", + "There are a lot of books under the bed." + ] + }, + { + "grade": "031103", + "vocab": [ + "rug", + "cabinet", + "shelf", + "pillow", + "blanket" + ], + "phonics": null, + "grammar": [ + "There's a doll on the rug.", + "There are some toys in the cabinet.", + "There are a lot of books under the bed." + ] + }, + { + "grade": "031104", + "vocab": [ + "eleven", + "twelve", + "thirteen", + "fourteen", + "fifteen", + "sixteen", + "seventeen", + "eighteen", + "nineteen", + "twenty", + "more", + "get in" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "031105", + "vocab": [ + "ear", + "near", + "hear", + "scared", + "share", + "square" + ], + "phonics": [ + "/ɪə/ (ear)", + "/eə/ (are)", + "/ɪr/ (AmE)", + "/ɛr/ (AmE)" + ], + "grammar": [] + }, + { + "grade": "031106", + "vocab": [ + "beach" + ], + "phonics": null, + "grammar": [ + "There is/are..." + ] + }, + { + "grade": "031107", + "vocab": [], + "phonics": null, + "grammar": [ + "Where is the bag? - It's under the table." + ] + }, + { + "grade": "031108", + "vocab": [], + "phonics": null, + "grammar": [ + "How many tables are there?" + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F312.json b/data/familynfriend/g3/F312.json new file mode 100644 index 0000000..e367b27 --- /dev/null +++ b/data/familynfriend/g3/F312.json @@ -0,0 +1,94 @@ +[ + { + "grade": "031201", + "vocab": [ + "table", + "computer", + "chair", + "board" + ], + "phonics": null, + "grammar": [ + "These are...", + "Those are..." + ], + "target": "Identify common school things. Understand a short story." + }, + { + "grade": "031202", + "vocab": [ + "table", + "computer", + "chair", + "board" + ], + "phonics": null, + "grammar": [ + "These are...", + "Those are..." + ], + "target": "Act out a story. Say and write sentences with These are, and Those are." + }, + { + "grade": "031203", + "vocab": [ + "table", + "computer", + "chair", + "board" + ], + "phonics": null, + "grammar": [ + "These are...", + "Those are..." + ], + "target": "Review making sentences with There's and There are and making sentences with some and a lot of." + }, + { + "grade": "031204", + "vocab": [ + "poster", + "picture", + "drawers" + ], + "phonics": null, + "grammar": [], + "target": "Identify more school objects and use words in the context of a song. Help children develop their listening and singing skills." + }, + { + "grade": "031205", + "vocab": [ + "poor", + "tour", + "mouse", + "house" + ], + "phonics": [ + "/ʊə/ (oor, our)", + "/aʊ/ (ou)" + ], + "grammar": [], + "target": "Pronounce the sounds /ʊə/ and /aʊ/ on their own and in words. Identify the letters oor, our, and ou in the middle and at the end of words and associate them with the sounds /ʊə/ and /aʊ/. Differentiate between the sounds /ʊə/ and /aʊ/." + }, + { + "grade": "031206", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Read a text describing pictures; read for specific words." + }, + { + "grade": "031207", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Identify people and objects from their descriptions. Ask and answer questions about a picture." + }, + { + "grade": "031208", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Write about your own classroom." + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F32.json b/data/familynfriend/g3/F32.json new file mode 100644 index 0000000..79f62ed --- /dev/null +++ b/data/familynfriend/g3/F32.json @@ -0,0 +1,100 @@ +[ + { + "grade": "030201", + "vocab": [ + "pen", + "eraser", + "pencil", + "pencil case", + "book", + "picture", + "Good job!" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030202", + "vocab": [ + "pen", + "eraser", + "pencil", + "pencil case", + "book" + ], + "phonics": null, + "grammar": [ + "That is his [pen].", + "That is her [book]." + ] + }, + { + "grade": "030203", + "vocab": [ + "pen", + "eraser", + "pencil", + "pencil case", + "book" + ], + "phonics": null, + "grammar": [ + "That is his [pen].", + "That is her [book]." + ] + }, + { + "grade": "030204", + "vocab": [ + "bag", + "door", + "window", + "clean up", + "close", + "open" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030205", + "vocab": [ + "cat", + "cookie", + "dog", + "desk" + ], + "phonics": [ + "Cc", + "Dd", + "/k/", + "/d/" + ], + "grammar": [] + }, + { + "grade": "030206", + "vocab": [ + "Look!" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030207", + "vocab": [], + "phonics": null, + "grammar": [ + "That is his / her ..." + ] + }, + { + "grade": "030208", + "vocab": [], + "phonics": null, + "grammar": [ + "That is her pen.", + "This is his book." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F33.json b/data/familynfriend/g3/F33.json new file mode 100644 index 0000000..56d8e68 --- /dev/null +++ b/data/familynfriend/g3/F33.json @@ -0,0 +1,104 @@ +[ + { + "grade": "030301", + "vocab": [ + "mom", + "dad", + "sister", + "brother", + "find", + "they" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030302", + "vocab": [ + "mom", + "dad", + "sister", + "brother" + ], + "phonics": null, + "grammar": [ + "The ice cream is on its face.", + "Their bags are under the slide.", + "Our toys are in the kitchen." + ] + }, + { + "grade": "030303", + "vocab": [ + "aunt", + "uncle", + "cousin", + "more", + "people" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030304", + "vocab": [ + "egg", + "elephant", + "fan", + "fig" + ], + "phonics": [ + "/e/", + "/f/" + ], + "grammar": [] + }, + { + "grade": "030305", + "vocab": [ + "at" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030306", + "vocab": [ + "chair", + "hooray", + "table" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030307", + "vocab": [ + "mom", + "dad", + "sister", + "brother" + ], + "phonics": null, + "grammar": [ + "This is my aunt.", + "This is their house.", + "This is our family." + ] + }, + { + "grade": "030308", + "vocab": [ + "chair", + "hooray", + "table" + ], + "phonics": null, + "grammar": [ + "This is my...", + "This is its...", + "This is our...", + "This is their..." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F34.json b/data/familynfriend/g3/F34.json new file mode 100644 index 0000000..0f8b8c0 --- /dev/null +++ b/data/familynfriend/g3/F34.json @@ -0,0 +1,110 @@ +[ + { + "grade": "030401", + "vocab": [ + "elephant", + "giraffe", + "monkey", + "big", + "tall", + "little", + "zoo", + "funny", + "over there" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030402", + "vocab": [ + "elephant", + "giraffe", + "monkey", + "big", + "tall", + "little", + "lion" + ], + "phonics": null, + "grammar": [ + "I like lions.", + "I don't like elephants.", + "They're big.", + "I'm little." + ] + }, + { + "grade": "030403", + "vocab": [ + "elephant", + "giraffe", + "monkey", + "big", + "tall", + "little" + ], + "phonics": null, + "grammar": [ + "I like lions.", + "I don't like elephants.", + "They're big.", + "I'm little." + ] + }, + { + "grade": "030404", + "vocab": [ + "bird", + "cat", + "dog", + "fish", + "hip, hip hooray", + "miaow", + "woof", + "tweet", + "splash" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030405", + "vocab": [ + "gift", + "goat", + "hamster", + "hat" + ], + "phonics": [ + "g", + "h" + ], + "grammar": [] + }, + { + "grade": "030406", + "vocab": [ + "big", + "gray", + "ears", + "nose", + "here", + "hello" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030407", + "vocab": [], + "phonics": null, + "grammar": [] + }, + { + "grade": "030408", + "vocab": [], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F35.json b/data/familynfriend/g3/F35.json new file mode 100644 index 0000000..2cee6e1 --- /dev/null +++ b/data/familynfriend/g3/F35.json @@ -0,0 +1,106 @@ +[ + { + "grade": "030501", + "vocab": [ + "rice", + "meat", + "carrots", + "yogurt", + "bread", + "dinner time", + "first", + "finished" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030502", + "vocab": [ + "rice", + "meat", + "carrots", + "yogurt", + "bread" + ], + "phonics": null, + "grammar": [ + "Do you like [yogurt]?", + "Yes, I do.", + "No, I don't." + ] + }, + { + "grade": "030503", + "vocab": [ + "rice", + "meat", + "carrots", + "yogurt", + "bread" + ], + "phonics": null, + "grammar": [ + "Do you like [yogurt]?", + "Yes, I do.", + "No, I don't." + ] + }, + { + "grade": "030504", + "vocab": [ + "milk", + "juice", + "water", + "drink (v)", + "late", + "school", + "lunchbox" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030505", + "vocab": [ + "ill", + "ink", + "jacket", + "jelly" + ], + "phonics": [ + "/ɪ/ (i)", + "/dʒ/ (j)" + ], + "grammar": [] + }, + { + "grade": "030506", + "vocab": [ + "menu", + "hungry", + "dessert", + "café" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030507", + "vocab": [ + "because" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030508", + "vocab": [ + "because" + ], + "phonics": null, + "grammar": [ + "I like ___ and ___, but I don't like ___." + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F36.json b/data/familynfriend/g3/F36.json new file mode 100644 index 0000000..ff69eb4 --- /dev/null +++ b/data/familynfriend/g3/F36.json @@ -0,0 +1,77 @@ +[ + { + "grade": "030601", + "vocab": [ + "long", + "short", + "black", + "curly", + "straight", + "over there", + "hair", + "new", + "friend" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030602", + "vocab": [ + "long", + "short", + "black", + "curly", + "straight" + ], + "phonics": null, + "grammar": [ + "He/She/It has blue eyes.", + "I have/don't have curly hair.", + "They have short hair.", + "They don't have long hair." + ] + }, + { + "grade": "030603", + "vocab": [ + "tall", + "short", + "thin" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030604", + "vocab": [ + "kite", + "lion", + "mom" + ], + "phonics": [ + "/k/", + "/l/", + "/m/" + ], + "grammar": [] + }, + { + "grade": "030605", + "vocab": [ + "dear", + "picture", + "from" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030606", + "vocab": [ + "because" + ], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F37.json b/data/familynfriend/g3/F37.json new file mode 100644 index 0000000..44f4c85 --- /dev/null +++ b/data/familynfriend/g3/F37.json @@ -0,0 +1,88 @@ +[ + { + "grade": "030701", + "vocab": [ + "skirt", + "scarf", + "jeans", + "boots", + "shirt" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030702", + "vocab": [ + "skirt", + "scarf", + "jeans", + "boots", + "shirt" + ], + "phonics": null, + "grammar": [ + "I'm wearing a blue skirt.", + "He/ She's wearing red pants." + ] + }, + { + "grade": "030703", + "vocab": [ + "skirt", + "scarf", + "jeans", + "boots", + "shirt" + ], + "phonics": null, + "grammar": [ + "I'm wearing a blue skirt.", + "He/ She's wearing red pants." + ] + }, + { + "grade": "030704", + "vocab": [ + "T-shirt", + "dress", + "hat" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030705", + "vocab": [ + "shoes", + "chair", + "three" + ], + "phonics": [ + "/ʃ/ (sh)", + "/tʃ/ (ch)", + "/θ/ (th)" + ], + "grammar": [] + }, + { + "grade": "030706", + "vocab": [], + "phonics": null, + "grammar": [] + }, + { + "grade": "030707", + "vocab": [], + "phonics": null, + "grammar": [] + }, + { + "grade": "030708", + "vocab": [ + "because" + ], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F38.json b/data/familynfriend/g3/F38.json new file mode 100644 index 0000000..8dce1df --- /dev/null +++ b/data/familynfriend/g3/F38.json @@ -0,0 +1,135 @@ +[ + { + "grade": "030801", + "vocab": [ + "play", + "dance", + "sing", + "eat", + "talk", + "watch", + "sleep" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030802", + "vocab": [ + "play", + "dance", + "sing", + "eat", + "talk", + "watch" + ], + "phonics": null, + "grammar": [ + "What are you doing?", + "I'm talking.", + "What's he / she doing?", + "He / She's eating." + ] + }, + { + "grade": "030803", + "vocab": [ + "play", + "dance", + "sing", + "eat", + "talk", + "watch" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030804", + "vocab": [ + "drum", + "dress", + "truck", + "tree", + "crayon", + "crab" + ], + "phonics": [ + "dr", + "tr", + "cr" + ], + "grammar": [] + }, + { + "grade": "030805", + "vocab": null, + "phonics": null, + "grammar": [ + "What are you doing?", + "I'm (V-ing).", + "wash the car", + "brush my hair", + "take photos", + "get ready", + "making cakes", + "excited", + "choosing" + ] + }, + { + "grade": "030806", + "vocab": [ + "play", + "dance", + "sing", + "eat", + "talk", + "watch" + ], + "phonics": null, + "grammar": [ + "What is he/she doing?", + "He/She is (V-ing).", + "wash the car", + "brush my hair", + "take photos", + "get ready", + "making cakes", + "excited", + "choosing" + ] + }, + { + "grade": "030807", + "vocab": null, + "phonics": null, + "grammar": [ + "What is he/she doing?", + "He/She is (V-ing).", + "wash the car", + "brush my hair", + "take photos", + "get ready", + "making cakes", + "excited", + "choosing" + ] + }, + { + "grade": "030808", + "vocab": null, + "phonics": null, + "grammar": [ + "I'm (V-ing).", + "My dad/mom/sister/brother is (V-ing).", + "wash the car", + "brush my hair", + "take photos", + "get ready", + "making cakes", + "excited", + "choosing" + ] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F39.json b/data/familynfriend/g3/F39.json new file mode 100644 index 0000000..d1ee1a0 --- /dev/null +++ b/data/familynfriend/g3/F39.json @@ -0,0 +1,86 @@ +[ + { + "grade": "030901", + "vocab": null, + "phonics": null, + "grammar": [ + "play soccer", + "ride a bike", + "run", + "catch", + "fly", + "baby (bird)", + "good job" + ] + }, + { + "grade": "030902", + "vocab": [ + "play soccer", + "ride a bike", + "run", + "catch", + "fly" + ], + "phonics": null, + "grammar": [ + "I can / can't catch.", + "He / She / It can / can't fly." + ] + }, + { + "grade": "030903", + "vocab": [ + "jump", + "read", + "write", + "run", + "play soccer", + "fly", + "but", + "Wow!" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030904", + "vocab": [ + "rain", + "train", + "fly", + "sky" + ], + "phonics": [ + "/eɪ/ (ai)", + "/aɪ/ (y)" + ], + "grammar": [] + }, + { + "grade": "030905", + "vocab": [ + "beach" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030906", + "vocab": [], + "phonics": null, + "grammar": [] + }, + { + "grade": "030907", + "vocab": [], + "phonics": null, + "grammar": [] + }, + { + "grade": "030908", + "vocab": [], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g3/F3S.json b/data/familynfriend/g3/F3S.json new file mode 100644 index 0000000..6836ea0 --- /dev/null +++ b/data/familynfriend/g3/F3S.json @@ -0,0 +1,89 @@ +[ + { + "grade": "030001", + "vocab": [ + "Rosy", + "Tim", + "Billy", + "Miss Jones", + "hello", + "hi", + "my", + "name", + "class" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030002", + "vocab": [ + "greetings", + "goodbye" + ], + "phonics": null, + "grammar": [ + "What's your name? - My name's ___.", + "How are you? - I'm fine, thank you." + ] + }, + { + "grade": "030003", + "vocab": [ + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "ten" + ], + "phonics": null, + "grammar": [ + "How old are you? - I'm ___ (years old)." + ] + }, + { + "grade": "030004", + "vocab": [ + "English alphabet letters" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030005", + "vocab": [ + "red", + "brown", + "pink", + "green", + "black", + "yellow", + "orange", + "blue", + "belt", + "paint", + "coat", + "vase", + "apple" + ], + "phonics": null, + "grammar": [] + }, + { + "grade": "030006", + "vocab": [ + "stand up", + "sit down", + "open your book", + "close your book", + "don't talk" + ], + "phonics": null, + "grammar": [] + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F40.json b/data/familynfriend/g4/F40.json new file mode 100644 index 0000000..ee44c7e --- /dev/null +++ b/data/familynfriend/g4/F40.json @@ -0,0 +1,44 @@ +[ + { + "grade": "040001", + "vocab": ["hair", "eyes", "cousin", "brother", "teddy bears"], + "phonics": null, + "grammar": ["Hello. My name's Rosy.", "I have brown hair.", "This is my cousin Tim.", "He has green eyes.", "I have curly hair."], + "target": "Recall the main course characters and understand a short story." + }, + { + "grade": "040002", + "vocab": ["mom", "dad", "brother", "sister", "grandma", "grandpa", "aunt", "uncle", "cousin", "long", "short", "curly", "straight", "brown", "black", "gray"], + "phonics": null, + "grammar": ["This is Rosy's mom.", "She has curly hair.", "He has straight brown hair.", "Tim is Rosy's cousin.", "True or False?"], + "target": "Identify family members and describe their appearance using possessive 's and 'He/She has...' structures." + }, + { + "grade": "040003", + "vocab": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], + "phonics": null, + "grammar": ["How do you spell Monday?", "M-O-N-D-A-Y.", "My favorite day is Saturday because I can play football."], + "target": "Say and spell the days of the week in English and sing a song including them." + }, + { + "grade": "040004", + "vocab": ["red", "green", "blue", "yellow", "pink", "black", "brown", "orange", "animal", "toy", "food"], + "phonics": null, + "grammar": ["What's your favorite color?", "My favorite color is red.", "What color is number 8?", "It's orange.", "favorite animal", "favorite toy", "favorite food"], + "target": "Ask and answer about favorite things and the colors of numbered cars." + }, + { + "grade": "040005", + "vocab": ["hair", "eyes", "sister", "cousin", "green"], + "phonics": null, + "grammar": ["I'm Max. I'm twelve.", "I have short hair and brown eyes.", "My sister is Holly.", "We have two cousins, Amy and Leo.", "Leo's favorite color is green.", "Max and Holly are Amy's cousins."], + "target": "Describe people using simple adjectives and personal information, and talk about relationships." + }, + { + "grade": "040006", + "vocab": ["name", "age", "hair", "eyes", "toy", "animal", "color", "food", "sister", "brother"], + "phonics": null, + "grammar": ["My name's Vy. I'm eight.", "I have long hair and black eyes.", "I have two brothers.", "My favorite toy is a kite.", "His favorite color is blue.", "Brothers and Sisters"], + "target": "Read and understand a personal-information form and talk/write about their own personal details." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F41.json b/data/familynfriend/g4/F41.json new file mode 100644 index 0000000..273147f --- /dev/null +++ b/data/familynfriend/g4/F41.json @@ -0,0 +1,51 @@ +[ + { + "grade": "040101", + "vocab": ["doctor", "pilot", "firefighter", "student", "teacher", "hero", "heroes"], + "phonics": null, + "grammar": [], + "target": "Identify five words for different jobs and understand a short story using the target vocabulary." + }, + { + "grade": "040102", + "vocab": [], + "phonics": null, + "grammar": ["We're students.", "We study.", "They're firefighters.", "They fight fires."], + "target": "Say what people's jobs are and what they do using the new sentence patterns (we're, they're)." + }, + { + "grade": "040103", + "vocab": ["police officer", "farmer"], + "phonics": null, + "grammar": ["help everyone", "grow food"], + "target": "Identify more words for jobs (police officer, farmer) and use them in the context of a song." + }, + { + "grade": "040104", + "vocab": ["doctor", "teacher", "firefighter", "office worker"], + "phonics": ["schwa /ə/"], + "grammar": [], + "target": "Identify stressed syllables and recognize the schwa sound /ə/ in unstressed syllables of job words." + }, + { + "grade": "040105", + "vocab": ["family", "happy"], + "phonics": null, + "grammar": ["This is my dad.", "He's a doctor.", "My brother's name is Minh."], + "target": "Read and understand a description of a family, and find specific information in a text." + }, + { + "grade": "040106", + "vocab": [], + "phonics": null, + "grammar": ["My name's...", "I'm a...", "My mom is..."], + "target": "Listen to identify people by their jobs and listen for specific information to put pictures in order; ask and answer questions about jobs." + }, + { + "grade": "040107", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Talk about their family members' jobs and write a short personal profile about themselves and their family, using correct capitalization and periods." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F410.json b/data/familynfriend/g4/F410.json new file mode 100644 index 0000000..cc47e47 --- /dev/null +++ b/data/familynfriend/g4/F410.json @@ -0,0 +1,44 @@ +[ + { + "grade": "041001", + "vocab": ["comics", "chess", "fish", "basketball", "volleyball", "badminton"], + "phonics": null, + "grammar": ["read comics", "play chess", "play basketball", "play volleyball", "play badminton", "a lot of", "Wow!", "Help!", "great"], + "target": "Identify, pronounce, and understand 6 hobby-related vocabulary items within the context of a story." + }, + { + "grade": "041002", + "vocab": ["reading", "fishing", "playing"], + "phonics": null, + "grammar": ["He/She likes [verb-ing].", "He/She doesn't like [verb-ing].", "They/We like [verb-ing].", "They/We don't like [verb-ing].", "Listen to the story and repeat.", "Listen and say.", "Look, read, and write T (True) or F (False)."], + "target": "Use the simple present tense to talk about likes and dislikes using the structure 'like + verb-ing' for different subjects (He/She, They/We)." + }, + { + "grade": "041003", + "vocab": ["tennis", "photos", "pictures", "weekend"], + "phonics": null, + "grammar": ["Do you like [verb-ing]?", "Does he like [verb-ing]?", "Yes, I do / No, I don't.", "Yes, he does. / No, he doesn't.", "We like [verb-ing], but we don't like [verb-ing].", "playing tennis", "taking photos", "drawing pictures", "Hip, hurray!", "have fun", "all day", "I'm happy it's the weekend!"], + "target": "Use Do/Does to ask and answer questions about hobbies in a song context, and use 'but' to link contrasting ideas about likes and dislikes." + }, + { + "grade": "041004", + "vocab": ["car", "farm", "star", "park", "shark", "scarf", "horn", "corn", "storm", "short"], + "phonics": ["ar (/ɑː/)", "or (/ɔː/)"], + "grammar": ["Listen, point, and repeat.", "Listen and chant.", "Read the chant again.", "Listen and write the missing letters."], + "target": "Recognize, pronounce, and distinguish between the phonics sounds /ɑː/ (spelled 'ar') and /ɔː/ (spelled 'or')." + }, + { + "grade": "041005", + "vocab": ["guitar", "family", "soccer", "pal"], + "phonics": null, + "grammar": ["play the guitar", "visit family", "play soccer", "pen pal", "Listen and read.", "Read again and write Yes or No.", "Look at the profiles. Where are the children from?"], + "target": "Read and comprehend a web page about children's hobbies in different countries, and learn key vocabulary for online profiles." + }, + { + "grade": "041006", + "vocab": ["name", "age", "hobby"], + "phonics": null, + "grammar": ["My name's...", "I'm [age]...", "I like...", "I don't like...", "Write to me at...", "Complete the sentences.", "Write your online pen pal profile.", "Ask and answer.", "What do you like doing?", "Your pen pal is...", "Listen and match."], + "target": "Listen for specific information to match people with hobbies, ask/answer questions about likes, and write/present a short personal profile for a pen pal." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F411.json b/data/familynfriend/g4/F411.json new file mode 100644 index 0000000..65b69ee --- /dev/null +++ b/data/familynfriend/g4/F411.json @@ -0,0 +1,51 @@ +[ + { + "grade": "041101", + "vocab": ["left", "right", "straight", "traffic", "lights", "walk", "fast"], + "phonics": null, + "grammar": ["turn left", "turn right", "go straight", "next to", "opposite", "between", "How do we get to the hospital?", "Go straight at the traffic lights."], + "target": "Identify and give directions using core phrases like 'turn left/right', 'go straight', and prepositions 'next to', 'opposite', 'between'. Understand a story about finding a way." + }, + { + "grade": "041102", + "vocab": [], + "phonics": null, + "grammar": ["Turn left.", "Turn right here.", "Go straight at the traffic lights.", "How do we get to the...?", "It's opposite the school.", "It's between the bookstore and the library."], + "target": "Use imperative sentences to give directions (Turn left, Go straight). Use prepositions of place (next to, opposite, between) to describe locations and ask/answer questions about directions." + }, + { + "grade": "041103", + "vocab": ["station", "train", "bus", "supermarket"], + "phonics": null, + "grammar": ["train station", "bus station", "How do we get to...?", "Where is...?", "It's opposite/next to..."], + "target": "Identify new places (train station, bus station, supermarket). Sing a song asking for and giving directions." + }, + { + "grade": "041104", + "vocab": ["germs", "fern", "girl", "bird", "shirt", "nurse", "hurt", "curtain"], + "phonics": ["/ɜː/ spelled er", "/ɜː/ spelled ir", "/ɜː/ spelled ur"], + "grammar": [], + "target": "Recognize and pronounce the /ɜː/ sound spelled as 'er', 'ir', and 'ur' in words like germs, girl, nurse. Identify these spellings in a text." + }, + { + "grade": "041105", + "vocab": ["invite", "party", "reply", "start"], + "phonics": null, + "grammar": ["turn left", "go straight", "next to", "opposite", "True or False?", "Read and understand a birthday invitation.", "Listen and read."], + "target": "Read and understand a birthday invitation with directions. Identify specific details: sender, receiver, time, date, and route." + }, + { + "grade": "041106", + "vocab": ["upstairs", "downstairs", "schoolyard", "front"], + "phonics": null, + "grammar": ["go upstairs", "go downstairs", "in front of", "Start at... Go...", "How do we get to the hospital?"], + "target": "Listen and understand directions involving multiple steps and levels (go upstairs, go downstairs). Give directions to a visitor within a school setting." + }, + { + "grade": "041107", + "vocab": ["party", "invite", "start", "end", "directions"], + "phonics": null, + "grammar": ["Go straight", "Turn left", "Cross the street", "To: ... Date: ... Time: ... Address: ... Directions: ...", "Write a complete party invitation."], + "target": "Recognize and write imperative sentences for directions. Write a complete party invitation including: name, occasion, date, time, address, and directions." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F412.json b/data/familynfriend/g4/F412.json new file mode 100644 index 0000000..44e008c --- /dev/null +++ b/data/familynfriend/g4/F412.json @@ -0,0 +1,58 @@ +[ + { + "grade": "041201", + "vocab": ["old", "young", "handsome", "pretty", "cute", "smart", "baby", "different", "still"], + "phonics": null, + "grammar": ["I was cute.", "I was small.", "Photo Album", "He's cute!", "Is he smart?"], + "target": "Identify and use adjectives to describe people (old, young, handsome, pretty, cute, smart) and understand a story about family photos." + }, + { + "grade": "041202", + "vocab": ["yesterday", "last night", "last weekend"], + "phonics": null, + "grammar": ["I/He/She/It was...", "He/She/It wasn't...", "He was handsome then.", "His hair wasn't white.", "I was very cute.", "Is he old now?", "He is old.", "He was handsome.", "His hair is white.", "His hair wasn't white.", "The boy / hungry?", "He was hungry.", "The girl / sad?", "She wasn't sad. She was happy.", "She was happy yesterday."], + "target": "Identify and use the affirmative and negative past simple forms of 'be' for singular subjects (I, He, She, It) with time expressions." + }, + { + "grade": "041203", + "vocab": [], + "phonics": null, + "grammar": ["You/We/They were...", "You/We/They weren't...", "They were very young.", "We weren't all different.", "You were a baby.", "He was cute.", "They were smart.", "The cakes were good.", "The lions were big.", "They were happy.", "We were at the park."], + "target": "Identify and use the affirmative and negative past simple forms of 'be' for plural subjects (You, We, They)." + }, + { + "grade": "041204", + "vocab": ["neat", "messy", "floor", "kitchen"], + "phonics": null, + "grammar": ["The room was messy.", "Now it is neat.", "Is the floor nice?", "No!", "Messy.", "Neat.", "Party time.", "Clean up.", "It was messy. Now it is neat.", "My room is [neat/messy].", "take a seat"], + "target": "Use vocabulary (neat, messy, floor) to describe rooms and understand a song about cleaning up after a party." + }, + { + "grade": "041205", + "vocab": ["eat", "dream", "green", "queen", "tree", "sleep", "spoon"], + "phonics": ["/iː/ (ea, ee)", "sl", "sp"], + "grammar": ["I see a queen.", "I see a spoon.", "I spy with my little eye... something green.", "The green queen eats ice cream with a spoon."], + "target": "Recognize and pronounce the sound /iː/ spelled as 'ea' and 'ee', and consonant blends 'sl' and 'sp'." + }, + { + "grade": "041206", + "vocab": ["school play", "wolf", "costume", "hood", "scary", "fun", "red", "great"], + "phonics": null, + "grammar": ["Little Red Riding Hood", "Three Little Pigs", "The Little Mermaid", "He is wearing a grey costume.", "The play was on Tuesday.", "I want to be the Wolf because I have a scary costume.", "I want to be Red because I have a red hood.", "I am a...", "True or False?"], + "target": "Read and understand a school newspaper article about a school play, identify key vocabulary, and scan for details." + }, + { + "grade": "041207", + "vocab": ["lion", "giraffe", "bird", "monkey", "costume", "play"], + "phonics": null, + "grammar": ["They were...", "Their costumes were...", "It was a costume!", "True or False?", "They were giraffes. Their costumes were brown and yellow.", "I was at...", "Home, Park, Zoo, Cinema, School", "Where were you yesterday?", "Where was Lan?", "She was at the zoo.", "I was a [Dinosaur]. My costume was [Green]."], + "target": "Listen to identify True/False statements about a play, and describe people's costumes and past locations using 'was/were'." + }, + { + "grade": "041208", + "vocab": ["park", "zoo", "beach", "school", "playground", "fun", "great", "sunny"], + "phonics": null, + "grammar": ["Past Simple of be (I was at..., It was...)", "Where -> When -> Who -> Weather -> Feeling", "I was at the park / zoo / beach.", "last weekend / Saturday.", "with my mom / family.", "It was sunny / hot.", "It was fun / great.", "Last weekend, I was at the park. I was with my sister. It was sunny. It was fun.", "Friends Only", "Post After You Leave", "He was a lion. His costume was brown.", "We were at... It was...", "I wasn't cold.", "True or False?"], + "target": "Write a short text about where they were last weekend using the past simple of 'be', and review describing costumes." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F42.json b/data/familynfriend/g4/F42.json new file mode 100644 index 0000000..b5b9d3c --- /dev/null +++ b/data/familynfriend/g4/F42.json @@ -0,0 +1,58 @@ +[ + { + "grade": "040201", + "vocab": ["hospital", "airport", "police station", "fire station", "store", "work", "cakes", "delicious", "parents", "look", "love", "know"], + "phonics": null, + "grammar": ["Who works in a cake store?"], + "target": "Identify five different places of work. Understand a short story using the new vocabulary." + }, + { + "grade": "040202", + "vocab": ["works"], + "phonics": null, + "grammar": ["He works in a police station.", "She doesn't work in a police station.", "He/She works (affirmative)", "He/She doesn't work (negative)", "doesn't"], + "target": "Say where people work and don't work using 'He works...' and 'She doesn't work...'. Act out the story." + }, + { + "grade": "040203", + "vocab": [], + "phonics": null, + "grammar": ["Does he work in a police station?", "Yes, he does.", "No, he doesn't.", "Does she work in an airport?", "Yes, she does.", "No, she doesn't.", "Does he/she work in a/an...?", "does", "doesn't"], + "target": "Ask and answer questions about where people work using 'Does he/she work in...?' with correct short answers." + }, + { + "grade": "040204", + "vocab": ["office", "farm", "bank"], + "phonics": null, + "grammar": ["We go to the ____.", "Before it ____.", "Places to go"], + "target": "Identify three more words for places of work (office, farm, bank). Use them in the context of a song." + }, + { + "grade": "040205", + "vocab": ["nest", "octopus", "parrot", "plum", "purple", "net", "orange"], + "phonics": ["/n/", "/ɒ/", "/p/"], + "grammar": ["Letter 'n', sound /n/, word 'nest'.", "I see a nest!"], + "target": "Recognize the letters n, o, p and associate them with their sounds /n/, /ɒ/, /p/. Pronounce these sounds in words." + }, + { + "grade": "040206", + "vocab": ["feed"], + "phonics": null, + "grammar": ["Does she work in an office?", "True or False?", "Digital Animal Fact Card", "Name: Lion. Fact: Lions eat meat.", "take care of"], + "target": "Understand an article about a zookeeper's job. Read for specific details to answer True/False questions." + }, + { + "grade": "040207", + "vocab": [], + "phonics": null, + "grammar": ["Does Nam work in an office?", "No, he doesn't. He works in the zoo.", "My dad is a zookeeper. He takes care of giraffes."], + "target": "Listen for specific information about a zookeeper's job. Ask and answer questions about someone's job using 'Does he...?'." + }, + { + "grade": "040208", + "vocab": [], + "phonics": null, + "grammar": ["Name, Job, Place of work, What does he/she do?", "Digital Gallery Walk", "Be a Job Detective!", "What is the most fun part of your job?", "What is a special tool you use?"], + "target": "Talk about a family member's job. Write a short job profile for a family member, including their name, job, place of work, and what they do." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F43.json b/data/familynfriend/g4/F43.json new file mode 100644 index 0000000..945c9a5 --- /dev/null +++ b/data/familynfriend/g4/F43.json @@ -0,0 +1,51 @@ +[ + { + "grade": "040301", + "vocab": ["fries", "noodles", "pizza", "chicken", "tea"], + "phonics": null, + "grammar": ["Bubble tea", "It's OK", "bad", "I would like some pizza, please.", "Describing people!"], + "target": "Identify five types of food and drink. Understand a short story using the new vocabulary." + }, + { + "grade": "040302", + "vocab": [], + "phonics": null, + "grammar": ["Would you like ...?", "Yes, please.", "No, thanks.", "My party!", "Welcome to my party!"], + "target": "Offer food and drink using 'Would you like...?'. Respond politely using 'Yes, please.' or 'No, thanks.'. Act out the story." + }, + { + "grade": "040303", + "vocab": ["ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "one hundred"], + "phonics": null, + "grammar": ["Bubble tea!", "wait for", "arrive", "thousand", "Twenty-three thousand dong", "Price Detective!"], + "target": "Identify numbers from 10 to 100. Use numbers in the context of a song about prices." + }, + { + "grade": "040304", + "vocab": ["queen", "rabbit", "sofa"], + "phonics": ["/kw/", "/r/", "/s/"], + "grammar": ["question", "socks", "rocks", "The rabbit has some socks.", "Phonics Photographer!", "Starts with n", "Starts with o", "Starts with p"], + "target": "Recognize the letters q, r, s and associate them with their sounds /kw/, /r/, /s/. Pronounce these sounds in words like queen, rabbit, sofa." + }, + { + "grade": "040305", + "vocab": [], + "phonics": null, + "grammar": ["Read and understand a caption story.", "Find specific information in a text.", "much", "late", "Our Class Food Survey", "Food Explorer!", "What food does your friend like?", "True or False?"], + "target": "Read and understand a caption story. Find specific information in a text to determine what is available." + }, + { + "grade": "040306", + "vocab": [], + "phonics": null, + "grammar": ["Listen for specific information about a zookeeper's job.", "Ask and answer questions about buying fruits.", "I spy with my little eye", "Fruit Stall Price List", "Digital Shopping List", "My Shopping List", "My Family's Shopping List", "Kitchen Color Hunt!", "I found an apple. It is red.", "I found a carrot. It is orange."], + "target": "Listen for specific information about a conversation about buying fruit. Ask and answer questions about buying fruits." + }, + { + "grade": "040307", + "vocab": [], + "phonics": null, + "grammar": ["Ask and answer questions about fruit preferences.", "Write a simple menu with six items and their prices.", "What fruit does your mom or dad like?", "They like plums and apples.", "Minh's School Canteen", "Table 1 Order: One chicken rice, two bubble tea.", "Menu Designer!", "Super Power Pizza", "Digital Price Tag Match!"], + "target": "Ask and answer questions about fruit preferences. Write a simple menu with six items and their prices." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F44.json b/data/familynfriend/g4/F44.json new file mode 100644 index 0000000..013acc4 --- /dev/null +++ b/data/familynfriend/g4/F44.json @@ -0,0 +1,51 @@ +[ + { + "grade": "040401", + "vocab": ["art", "math", "English", "P.E.", "Vietnamese"], + "phonics": null, + "grammar": ["What do we have on Mondays?", "We have English on Mondays.", "our, time, wear"], + "target": "Identify five school subjects and understand a short story about school subjects and schedules." + }, + { + "grade": "040402", + "vocab": [], + "phonics": null, + "grammar": ["What do we have on Mondays?", "We have English.", "What do we have on...?", "We have..."], + "target": "Ask and answer questions about school schedules using 'What do we have on...?'; Act out the story." + }, + { + "grade": "040403", + "vocab": [], + "phonics": null, + "grammar": ["Can we take these bags?", "Yes, you can.", "No, you can't.", "Can I/we + [verb]...?"], + "target": "Ask for and give permission using 'Can I/we...?'; Respond appropriately with 'Yes, you can.' / 'No, you can't.'." + }, + { + "grade": "040404", + "vocab": ["schoolyard", "art room", "computer room"], + "phonics": null, + "grammar": ["At our school", "What do we have on [Day]?", "We have [Subject].", "We go to the [Place].", "It's fun for you and me!"], + "target": "Identify rooms and areas in a school (schoolyard, art room, computer room); use numbers in the context of a song about their school schedule." + }, + { + "grade": "040405", + "vocab": ["tiger", "umbrella", "van", "tall", "vet", "under", "twenty"], + "phonics": ["/t/", "/ʌ/", "/v/"], + "grammar": ["Listen, point, and repeat.", "Listen and chant.", "Listen and complete the words.", "The tiger is in the van."], + "target": "Recognize the letters t, u, v and associate them with their sounds /t/, /ʌ/, /v/; pronounce these sounds in words like tiger, umbrella, van." + }, + { + "grade": "040506", + "vocab": [], + "phonics": null, + "grammar": ["We like the schoolyard because we can play soccer.", "Why is it your favorite day?", "My favorite day is Monday because I have art."], + "target": "Read and understand a webpage about a school's computer room; find specific details in a text to answer questions; create a presentation slide about a favorite school room." + }, + { + "grade": "040607", + "vocab": [], + "phonics": null, + "grammar": ["Listen and write the numbers.", "Point, ask, and answer about your school.", "I have Vietnamese and English on Tuesdays.", "We have P.E. on Fridays."], + "target": "Identify places at school from their descriptions and listen for specific information (numbers); ask and answer questions about different places in a school; organize information about their week onto a collaborative mind map." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F45.json b/data/familynfriend/g4/F45.json new file mode 100644 index 0000000..e9c501f --- /dev/null +++ b/data/familynfriend/g4/F45.json @@ -0,0 +1,51 @@ +[ + { + "grade": "040501", + "vocab": ["read", "surf", "ball", "boat", "snorkel", "shells", "water", "fall", "swim"], + "phonics": null, + "grammar": ["play with a ball", "go on a boat", "collect shells", "stand on his hands", "We're having fun at the beach!", "We are at the beach.", "We are collecting shells and surfing."], + "target": "Identify six different beach activities and understand a short story using the new vocabulary. Create a simple digital postcard." + }, + { + "grade": "040502", + "vocab": [], + "phonics": null, + "grammar": ["I'm surfing.", "He's going on a boat.", "We're playing with a ball.", "They're collecting shells.", "Subject + am/is/are + verb-ing", "What are they doing?", "They're snorkeling!"], + "target": "Identify and use the present progressive affirmative (e.g., I'm surfing, He's going on a boat). Complete sentences and describe actions in a kinesthetic way." + }, + { + "grade": "040503", + "vocab": ["swimming", "sitting", "running", "sun", "dog"], + "phonics": null, + "grammar": ["present progressive sentences", "Look at the picture. Write.", "The dog is swimming.", "My sister is running very fast."], + "target": "Identify more beach activities (swimming, sitting, running). Write present progressive sentences to describe a picture and use words in the context of a song." + }, + { + "grade": "040504", + "vocab": ["web", "window", "walk", "box", "fox", "six"], + "phonics": ["/w/", "/ks/"], + "grammar": ["Listen, point, and repeat.", "Listen and chant.", "Read the chant again.", "Listen and complete the words.", "Digital Phonics Storyboard", "From my window, I can see a..."], + "target": "Recognize the letters w and x and associate them with their sounds /w/ and /ks/. Pronounce these sounds in words like web, box, walk. Create a short digital storyboard." + }, + { + "grade": "040505", + "vocab": ["sitting", "shells", "swimming", "snorkeling", "playing", "sand", "seafood", "restaurants", "postcard"], + "phonics": null, + "grammar": ["collecting shells", "I'm collecting shells.", "Where do you go on vacation?", "I go to Da Nang on vacation. I like it because I can swim in the sea."], + "target": "Read and understand a vacation postcard. Find specific details in a text to complete sentences. Talk about personal vacation experiences." + }, + { + "grade": "040506", + "vocab": [], + "phonics": null, + "grammar": ["Listen and write the numbers.", "What are you doing?", "We're snorkeling.", "Draw a picture of you and your family at the beach. What are they doing?", "My brother is swimming.", "On my vacation, I want to swim and play with a ball."], + "target": "Listen for information to put pictures in the correct order. Ask and answer questions to describe what people in a picture are doing. Co-create a digital mural collaboratively." + }, + { + "grade": "040507", + "vocab": [], + "phonics": null, + "grammar": ["Number the sentences in order.", "Write a postcard to a friend.", "Peer Feedback", "Nice picture!", "Your postcard is great!", "Thank You!"], + "target": "Ask and answer questions to describe actions. Number sentences to form a logical postcard and write a simple postcard. Practice giving positive peer feedback on a digital platform." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F46.json b/data/familynfriend/g4/F46.json new file mode 100644 index 0000000..0f7443f --- /dev/null +++ b/data/familynfriend/g4/F46.json @@ -0,0 +1,65 @@ +[ + { + "grade": "040601", + "vocab": ["penguin", "zebra", "kangaroo", "camel", "lizard", "crocodile"], + "phonics": null, + "grammar": ["funny monkeys", "Guess the Animal"], + "target": "Identify six zoo animals and understand a short story about them." + }, + { + "grade": "040602", + "vocab": [], + "phonics": null, + "grammar": ["Are you reading?", "Yes, I am.", "No, I'm not.", "Is he sleeping?", "Yes, he is.", "No, he isn't."], + "target": "Ask and answer Yes/No questions using the present progressive with correct short answers." + }, + { + "grade": "040603", + "vocab": [], + "phonics": null, + "grammar": ["What is she eating?", "She's eating a sandwich.", "What are they doing?", "They're watching the monkeys."], + "target": "Ask WH-questions using the present progressive and provide full-sentence answers." + }, + { + "grade": "040604", + "vocab": ["wear", "write", "eat", "take"], + "phonics": null, + "grammar": ["wear a hat", "write in a notebook", "eat a sandwich", "take a photo", "What is she doing?", "Are the monkeys climbing?"], + "target": "Ask and answer 'Wh-' and Yes/No questions, and write sentences using the present progressive." + }, + { + "grade": "040605", + "vocab": ["yo-yo", "yogurt", "yellow", "zebra", "zoo", "zero"], + "phonics": ["y", "z"], + "grammar": [], + "target": "Recognize and pronounce the letters y and z with their sounds /j/ and /z/ in words." + }, + { + "grade": "040606", + "vocab": ["lunchbox", "drink", "sun hat", "bring"], + "phonics": null, + "grammar": ["don't touch", "don't open", "be quiet", "Bring...", "Don't touch...", "Be quiet..."], + "target": "Read and understand information and rules about a school trip using imperatives." + }, + { + "grade": "040607", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Listen to understand picture descriptions for sequencing and use present progressive to ask/answer about pictures." + }, + { + "grade": "040608", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Ask and answer questions about pictures and posters." + }, + { + "grade": "040609", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Identify short, clear sentences for a poster and write a simple poster about a school trip." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F47.json b/data/familynfriend/g4/F47.json new file mode 100644 index 0000000..887fd7f --- /dev/null +++ b/data/familynfriend/g4/F47.json @@ -0,0 +1,58 @@ +[ + { + "grade": "040701", + "vocab": ["rainy", "windy", "hot", "cold", "snowy", "sunny", "weather", "hat", "key", "wet", "quick"], + "phonics": null, + "grammar": ["What's the weather like?", "It's [weather].", "It's [weather] today!", "Stay warm!", "Wear a hat!", "sun hat"], + "target": "Identify and pronounce six types of weather (rainy, windy, hot, cold, snowy, sunny). Understand a story about weather and forgetting a key." + }, + { + "grade": "040702", + "vocab": [], + "phonics": null, + "grammar": ["What's the weather like?", "It's [weather].", "Put on your [clothing item].", "Why?", "Because it's [weather].", "Put on your sun hat.", "Because it's windy."], + "target": "Ask and answer about the weather. Give commands and reasons using 'Put on...', 'Why?', and 'Because...'." + }, + { + "grade": "040703", + "vocab": [], + "phonics": null, + "grammar": ["Don't put on your [clothing item].", "Why?", "Because it's [weather].", "Don't open the window.", "Open the window because it's hot."], + "target": "Give negative commands regarding clothing/actions and ask for/give reasons using 'Don't...' and 'Because...'." + }, + { + "grade": "040704", + "vocab": ["fly", "kite", "snowman", "outside"], + "phonics": null, + "grammar": ["fly a kite", "make a snowman", "go outside", "What's the weather like?", "Can we go outside?", "We [activity] because it's [weather]."], + "target": "Identify weather activities (fly a kite, make a snowman, go outside) and use them in the context of a song." + }, + { + "grade": "040705", + "vocab": ["ring", "bang", "long", "treasure", "measure", "explosion", "swing", "strong", "sing", "song"], + "phonics": ["/ŋ/ (ng)", "/ʒ/ (sure, sion)"], + "grammar": ["-ng", "-sure", "-sion", "Spot the Sound"], + "target": "Recognize and pronounce the sounds /ŋ/ (in ring, bang, long) and /ʒ/ (in treasure, measure, explosion) and their spelling patterns." + }, + { + "grade": "040706", + "vocab": ["morning", "afternoon", "evening", "outside", "warm", "report", "coat", "umbrella"], + "phonics": null, + "grammar": ["weather report", "It's [time].", "It's [weather].", "It's 6 o'clock.", "It's cold.", "Good morning.", "Breaking News: Weather Report!"], + "target": "Read and understand a weather report with times of day and weather conditions. Match descriptions with images." + }, + { + "grade": "040707", + "vocab": ["water", "gloves", "kite"], + "phonics": null, + "grammar": ["Don't put on...", "Because...", "It is [day].", "It is [weather].", "Put on / Don't put on...", "Because...", "Travel Guide Postcard"], + "target": "Present a weather report clearly. Write a simple weather report including time, conditions, and advice (commands/reasons)." + }, + { + "grade": "040708", + "vocab": [], + "phonics": null, + "grammar": ["It's Monday.", "It's rainy.", "Don't put on your sun hat.", "Why? Because it's rainy.", "Weather Forecast Video", "Live Weather Advisors"], + "target": "Listen to a weather report and identify weather for different days. Give commands and reasons using 'Don't put on...' and 'Because...'." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F48.json b/data/familynfriend/g4/F48.json new file mode 100644 index 0000000..bf4bd1f --- /dev/null +++ b/data/familynfriend/g4/F48.json @@ -0,0 +1,58 @@ +[ + { + "grade": "040801", + "vocab": ["candy", "balloon", "present", "candle", "birthday", "tomorrow", "asleep", "someone"], + "phonics": null, + "grammar": ["Let's buy presents!", "Happy birthday!"], + "target": "Identify party objects (candy, balloon, present, candle) and understand a story about buying presents." + }, + { + "grade": "040802", + "vocab": ["like", "don't like", "because", "red"], + "phonics": null, + "grammar": ["We like balloons.", "We don't like candy.", "He likes this candy because it's red.", "She doesn't like that present."], + "target": "Express preferences using like/don't like for self and others (I/we/they/he/she) and give simple reasons with because." + }, + { + "grade": "040803", + "vocab": ["like", "don't like", "they"], + "phonics": null, + "grammar": ["What do they like?", "They like...", "Do they like...?", "Yes, they do.", "No, they don't."], + "target": "Ask and answer questions about others' likes and dislikes using 'What do they like?' and 'Do they like...?'." + }, + { + "grade": "040804", + "vocab": ["neighbor", "invite", "gift card", "chocolate", "cake", "balloons", "flowers", "music"], + "phonics": null, + "grammar": ["Our neighbors are very kind.", "What present can we take?"], + "target": "Learn vocabulary for special occasions/gifts (neighbor, invite, gift card, chocolate) and use them in a song context." + }, + { + "grade": "040805", + "vocab": ["this", "that", "three", "throw", "thanks", "thumb", "father", "mother", "brother", "these", "those"], + "phonics": ["/ð/ (voiced)", "/θ/ (unvoiced)"], + "grammar": [], + "target": "Recognize the spelling 'th' and distinguish/pronounce its two sounds: /ð/ (voiced, as in this) and /θ/ (unvoiced, as in three)." + }, + { + "grade": "040806", + "vocab": ["in half", "think about", "front", "give", "draw", "write", "color"], + "phonics": null, + "grammar": ["Fold the card in half.", "Think about your friend.", "Draw a picture on the front.", "Write 'Thank you!' inside.", "Give the card to your friend."], + "target": "Read and follow instructions to make a card; sequence steps of a process." + }, + { + "grade": "040807", + "vocab": [], + "phonics": null, + "grammar": ["What do you like?", "I like... because...", "I like animals because they're cute."], + "target": "Listen for specific information to match children with things they like; ask and answer questions about likes/dislikes and give reasons using because." + }, + { + "grade": "040808", + "vocab": [], + "phonics": null, + "grammar": ["Dear [Name],", "Thank you for...", "I like...", "Here is a picture of...", "From, [Name]."], + "target": "Write a structured thank-you card (greeting, reason for thanks, description, closing) and present it digitally." + } +] \ No newline at end of file diff --git a/data/familynfriend/g4/F49.json b/data/familynfriend/g4/F49.json new file mode 100644 index 0000000..2ee951c --- /dev/null +++ b/data/familynfriend/g4/F49.json @@ -0,0 +1,58 @@ +[ + { + "grade": "040901", + "vocab": ["get up", "have breakfast", "go to school", "go home", "have dinner", "go to bed", "o'clock", "asleep"], + "phonics": null, + "grammar": ["It's [number] o'clock.", "At night.", "My day."], + "target": "Identify and say daily routine phrases; understand a story about daily routines and time differences." + }, + { + "grade": "040902", + "vocab": [], + "phonics": null, + "grammar": ["What time is it?", "It's [number] o'clock.", "What time do you [action]?", "I [action] at [time] o'clock.", "At [time], I [action].", "My Perfect Sunday!"], + "target": "Ask and answer about the time and one's own daily routine; create a simple schedule." + }, + { + "grade": "040903", + "vocab": [], + "phonics": null, + "grammar": ["What time do they [action]?", "They [action] at [time].", "What time does he/she [action]?", "He/She [action]s at [time].", "He/She + Verb(s/es) vs. They + Verb.", "Family Spy!"], + "target": "Ask and answer questions about daily routines using third person singular and plural." + }, + { + "grade": "040904", + "vocab": ["two fifteen", "two thirty", "two forty-five", "platform", "train", "station"], + "phonics": null, + "grammar": ["What time is it?", "It's [time].", "The train is on [Platform].", "Hurry up!", "Digital Time Hunter!", "It is [time]."], + "target": "Identify specific digital times; understand travel-related vocabulary; perform a song about time and travel." + }, + { + "grade": "040905", + "vocab": ["flute", "June", "tube", "cube", "you", "soup", "new", "few", "foot", "look", "book", "would"], + "phonics": ["/uː/ (u_e, ou, ew)", "/ʊ/ (oo, ould)"], + "grammar": ["Mirror Practice!"], + "target": "Recognize, pronounce, and distinguish between the long /uː/ and short /ʊ/ sounds and their spelling patterns." + }, + { + "grade": "040906", + "vocab": ["take my school bag", "walk to school", "cook dinner", "together"], + "phonics": null, + "grammar": ["True or False?", "Linh vs. Me.", "Same and Different.", "My Daily Timeline"], + "target": "Read and understand a text about a character's typical day; identify specific details; compare routines." + }, + { + "grade": "040907", + "vocab": [], + "phonics": null, + "grammar": ["What time does he...?", "He ... at ... o'clock.", "Dad/Mom's Day Log"], + "target": "Listen and identify times associated with daily activities; ask and answer questions about someone's routine." + }, + { + "grade": "040908", + "vocab": [], + "phonics": null, + "grammar": ["I [action] at [time].", "My day is busy.", "Remember, we don't write the name or address of the school.", "Dream Day V-Log Script"], + "target": "Write a short paragraph describing one's daily routine; talk about daily activities in sequence; understand safe sharing online." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F50.json b/data/familynfriend/g5/F50.json new file mode 100644 index 0000000..4a9e407 --- /dev/null +++ b/data/familynfriend/g5/F50.json @@ -0,0 +1,30 @@ +[ + { + "grade": "050001", + "vocab": ["awful", "math", "calculator", "hungry", "lunch box", "art", "art apron"], + "phonics": null, + "grammar": ["We're All Back Together!", "What do you like about being back at school?"], + "target": "Sing a song about school, understand a story, recall school experiences, and develop digital citizenship skills." + }, + { + "grade": "050002", + "vocab": ["math", "art", "reading", "playing basketball", "fishing", "swimming", "running", "painting"], + "phonics": null, + "grammar": ["favorite subject", "like + V-ing", "What's your favorite subject?", "My favorite subject is English.", "What's Max doing?", "Is he playing basketball?", "No, he isn't. He's painting."], + "target": "Sing a song, understand a story, talk about school subjects and hobbies using 'like + V-ing', and develop digital skills." + }, + { + "grade": "050003", + "vocab": ["ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "one hundred"], + "phonics": null, + "grammar": ["Where do you live?", "I live at [address]."], + "target": "Review numbers 10-100, ask and answer about address, and develop responsible online participation skills." + }, + { + "grade": "050004", + "vocab": ["doctor", "pilot", "firefighter", "teacher", "police officer", "farmer"], + "phonics": null, + "grammar": ["name, address, school and class, teacher's name", "favorite subject", "free time", "dream job", "I live at...", "My teacher's name is...", "My favorite subject is... because...", "I want to be a...", "I like... in my free time.", "I'm... now.", "What job do you want to do?"], + "target": "Read and write a personal introduction, use vocabulary for favorite subject/free-time activity/dream job, ask and answer about dream jobs, use present continuous, and develop digital citizenship." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F51.json b/data/familynfriend/g5/F51.json new file mode 100644 index 0000000..23543b9 --- /dev/null +++ b/data/familynfriend/g5/F51.json @@ -0,0 +1,58 @@ +[ + { + "grade": "050101", + "vocab": ["shower", "teeth", "bus", "school", "snack", "homework", "bike", "jackaroo", "work", "morning", "early", "sheep", "lucky", "dangerous", "job"], + "phonics": null, + "grammar": ["take a shower", "brush my teeth", "get dressed", "catch the bus", "walk to school", "have a snack", "do my homework", "ride my bike", "take care of"], + "target": "Identify daily routines; understand a short story; develop digital citizenship skills." + }, + { + "grade": "050102", + "vocab": ["shower", "teeth", "bus", "school", "snack", "homework", "bike", "jackaroo", "work", "morning", "early", "sheep", "lucky", "dangerous", "job"], + "phonics": null, + "grammar": ["I walk to school.", "He catches the bus.", "She doesn't walk to school.", "Does he catch the bus to school? -- Yes, he does. / No, he doesn't.", "What does Jim do first?", "He takes a shower."], + "target": "Use the present simple (affirmative, negative, questions) to talk about daily routines; act out a story with correct intonation." + }, + { + "grade": "050103", + "vocab": ["shower", "teeth", "bus", "school", "snack", "homework", "bike", "jackaroo", "work", "morning", "early", "sheep", "lucky", "dangerous", "job"], + "phonics": null, + "grammar": ["I walk to school. / He catches the bus.", "She doesn't walk to school.", "Does he catch the bus to school? -- Yes, he does. / No, he doesn't."], + "target": "Identify and use third-person present simple forms; complete and transform sentences." + }, + { + "grade": "050104", + "vocab": ["up", "breakfast", "lessons", "friends", "outside"], + "phonics": null, + "grammar": ["get up", "have breakfast", "have lessons", "see friends", "play outside", "What time does Minh get up?", "He gets up at five-thirty.", "She gets up early every day."], + "target": "Ask and answer questions about times and routines in the simple present (third-person); use routines in the context of a song." + }, + { + "grade": "050105", + "vocab": ["walks", "sits", "loves", "rides", "brushes", "catches"], + "phonics": ["final --s /s/", "final --s /z/", "final --es /ɪz/"], + "grammar": [], + "target": "Pronounce final --s and --es (/s/, /z/, /ɪz/); differentiate sounds in a chant and fill-in exercise." + }, + { + "grade": "050106", + "vocab": ["first", "then", "next", "day", "mountain", "town", "north", "home", "busy"], + "phonics": null, + "grammar": ["every day", "mountain school", "a long way from", "Brothers and Sisters", "True or False?"], + "target": "Identify new words; read and understand a webpage about a school; read for specific information." + }, + { + "grade": "050107", + "vocab": ["school"], + "phonics": null, + "grammar": ["start school", "finish school", "What time do you get up?", "I get up at six-thirty.", "She/He ... every day.", "She doesn't ... every day."], + "target": "Understand sequence of events; ask and answer about daily routines and times." + }, + { + "grade": "050108", + "vocab": [], + "phonics": null, + "grammar": ["What time do you ...?", "I get up at six-thirty.", "She/He ... every day.", "She doesn't ... every day.", "Write a description of your school day."], + "target": "Write a short description of their own school day using sequence words; recognize nouns and proper nouns." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F510.json b/data/familynfriend/g5/F510.json new file mode 100644 index 0000000..39544e1 --- /dev/null +++ b/data/familynfriend/g5/F510.json @@ -0,0 +1,58 @@ +[ + { + "grade": "051001", + "vocab": ["headache", "fever", "toothache", "cold", "cough", "earache", "stomachache", "sore", "throat"], + "phonics": null, + "grammar": ["What's the matter?", "I have a ...", "He has a ...", "She has a ..."], + "target": "Identify words for illness, understand a short story about feeling unwell." + }, + { + "grade": "051002", + "vocab": [], + "phonics": null, + "grammar": ["What's the matter?", "He/She has a ...", "You should...", "You shouldn't..."], + "target": "Act out a story, identify words for illness, give advice using 'should/shouldn't'." + }, + { + "grade": "051003", + "vocab": [], + "phonics": null, + "grammar": ["You should drink some water.", "You shouldn't eat lots of cupcakes when you have a stomachache.", "Should I eat fruit and vegetables?", "Yes, you should.", "Should I eat a lot of candy?", "No, you shouldn't."], + "target": "Learn 'should/shouldn't' and how to give advice when someone is ill." + }, + { + "grade": "051004", + "vocab": [], + "phonics": null, + "grammar": ["You should rest.", "too many", "too much"], + "target": "Ask for and give advice with 'should' and 'shouldn't' in the context of a song." + }, + { + "grade": "051005", + "vocab": ["should", "shouldn't", "must", "mustn't", "stay", "wear", "mask", "lie"], + "phonics": null, + "grammar": ["You should stay in bed.", "You mustn't go to school.", "You must wear a mask.", "You shouldn't go outside."], + "target": "Identify stress in sentences with should, shouldn't, must, and mustn't. Practice correct intonation." + }, + { + "grade": "051006", + "vocab": ["shout", "follow", "chase", "catch", "cross"], + "phonics": null, + "grammar": ["How to stay healthy", "Be active", "Eat smart", "Drink well"], + "target": "Read and understand an information leaflet on how to stay healthy." + }, + { + "grade": "051007", + "vocab": [], + "phonics": null, + "grammar": ["What do you do to be healthy?", "I ... every day/sometimes.", "I should/shouldn't ... because ...", "My healthy routine"], + "target": "Identify details about children's healthy lifestyles and describe what you do to be healthy." + }, + { + "grade": "051008", + "vocab": [], + "phonics": null, + "grammar": ["What should/shouldn't we do to be healthy?", "We should/shouldn't + base verb (+ because ...).", "Describe how to live a healthy life.", "Write about your healthy habits."], + "target": "Ask/answer about healthy routines, describe how to live a healthy life, and write a short paragraph about personal healthy habits." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F511.json b/data/familynfriend/g5/F511.json new file mode 100644 index 0000000..6d6d273 --- /dev/null +++ b/data/familynfriend/g5/F511.json @@ -0,0 +1,44 @@ +[ + { + "grade": "051101", + "vocab": ["future", "travel", "Earth", "moon", "rocket", "astronaut", "supersonic plane", "spaceship"], + "phonics": null, + "grammar": ["Will it really happen?", "In less than five hours", "Where will they be in the future?"], + "target": "Identify words for space and space travel; Understand a short story; Develop digital citizenship skills." + }, + { + "grade": "051102", + "vocab": [], + "phonics": null, + "grammar": ["Act out a story with correct intonation", "Make the funniest or most creative 3-sentence story"], + "target": "Act out a story; Identify and use words about space and the future; Practice collaborative storytelling." + }, + { + "grade": "051103", + "vocab": [], + "phonics": null, + "grammar": ["People will travel in supersonic planes.", "There won't be any more long plane trips.", "Will they go back to Viet Nam? Yes, they will.", "Will they miss our vacation? No, they won't.", "In the future, soon, later"], + "target": "Learn the future with will and won't; Learn future time expressions." + }, + { + "grade": "051104", + "vocab": ["thirsty"], + "phonics": ["eat‿an orange", "peel‿an apple", "take‿an umbrella"], + "grammar": ["Take a tour of", "Get in the rocket.", "Today is a happy day!"], + "target": "Notice and practice connected speech in short phrases; Identify connected speech in chants and sentences." + }, + { + "grade": "051105", + "vocab": ["robot", "traffic", "crowded", "road", "storm"], + "phonics": null, + "grammar": ["dangerous", "live longer", "polar bear", "serious", "What do you think life will be like in 50 years?"], + "target": "Read and understand magazine-style interviews about life in the future; Answer comprehension questions; Express opinions and predictions." + }, + { + "grade": "051106", + "vocab": [], + "phonics": null, + "grammar": ["What will life be like when we are 50?", "I think ..., We will ..., We won't ...", "Write an opinion paragraph. Use the example to help you."], + "target": "Understand future predictions about children; Offer opinions about the future; Write an opinion paragraph about future life." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F512.json b/data/familynfriend/g5/F512.json new file mode 100644 index 0000000..33a7017 --- /dev/null +++ b/data/familynfriend/g5/F512.json @@ -0,0 +1,98 @@ +[ + { + "grade": "051201", + "vocab": ["video game", "tablet", "singer", "movie star", "DVD", "smartphone", "argue", "boring"], + "phonics": null, + "grammar": ["remote control", "TV show", "What did they watch?", "My Weekend Screen Plan"], + "target": "Identify and pronounce entertainment/technology words; understand and retell a story about watching something together." + }, + { + "grade": "051202", + "vocab": [], + "phonics": null, + "grammar": ["Act out a story.", "Remix the Story"], + "target": "Act out a story and identify words for entertainment and technology." + }, + { + "grade": "051203", + "vocab": ["go on vacation", "visit a museum", "take a photo"], + "phonics": null, + "grammar": [ + "What are you/they going to do?", + "I'm/They're going to watch a TV show.", + "What is he going to do?", + "He's going to play a video game.", + "Are you/they going to help me?", + "Yes, I am/they are.", + "No, I'm not/they aren't.", + "Is she going to use her tablet?", + "Yes, she is.", + "No, she isn't.", + "be going to + verb" + ], + "target": "Use 'be going to + verb' to talk about future plans and ask/answer Yes/No and Wh- questions." + }, + { + "grade": "051204", + "vocab": [], + "phonics": null, + "grammar": [ + "I'm / We're (not) going to ...", + "What are you going to do (this summer)?", + "He / She isn't going to ... He's / She's going to ...", + "Read. Check the true sentences for you.", + "Talk to a friend.", + "Write three sentences about your friends' answers.", + "Listen and sing." + ], + "target": "Ask and talk about future plans; write sentences with 'be going to'; use it in the context of a song." + }, + { + "grade": "051205", + "vocab": ["play soccer", "play in the sun", "fun for everyone"], + "phonics": null, + "grammar": [ + "What are you going to do? (falling intonation)", + "Are you going to play? (rising intonation)", + "Listen, point, and repeat.", + "Listen and chant.", + "Read the chant again. Then say.", + "Say the sentences. Draw arrows.", + "Let's talk!" + ], + "target": "Identify sentence stress and intonation in wh- and yes/no questions with 'be going to'; practice through repetition, chanting, and dialogues." + }, + { + "grade": "051206", + "vocab": ["stadium", "cartoon", "team", "quiz program", "channel", "meet", "change", "clever", "vs. (versus)"], + "phonics": null, + "grammar": [ + "What's on Channel 1?", + "What time does the quiz program start?", + "I like watching ...", + "Tonight's TV", + "Listen and read.", + "Read again and write T (true) or F (false).", + "What TV shows do you like watching?" + ], + "target": "Identify and pronounce vocabulary for TV shows; read and understand a TV guide; talk about favorite TV shows." + }, + { + "grade": "051207", + "vocab": [], + "phonics": null, + "grammar": [ + "Listen and write T (Thanh), H (Huy), A (Anh), or K (Khoa).", + "Listen again and write T (true) or F (false).", + "Ask and answer.", + "Write about a TV show. Use the example to help you.", + "My Family TV Guide", + "What show are you going to watch on TV tonight?", + "I'm going to watch ...", + "It has ...", + "It's about ...", + "It's on at ..." + ], + "target": "Use sentence frames to describe a TV show; ask and answer questions about TV shows; write a short description." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F52.json b/data/familynfriend/g5/F52.json new file mode 100644 index 0000000..7b4f851 --- /dev/null +++ b/data/familynfriend/g5/F52.json @@ -0,0 +1,51 @@ +[ + { + "grade": "050201", + "vocab": ["café", "sports center", "market", "playground", "shopping mall", "swimming pool", "movie theater", "skatepark"], + "phonics": null, + "grammar": ["always", "surprise", "ticket", "the same thing", "Where do you want to go?", "I want to go to the...", "Can we go to the...?", "But we always go to the..."], + "target": "Identify and pronounce places in a town; understand a short story and answer comprehension questions." + }, + { + "grade": "050202", + "vocab": ["always", "usually", "often", "sometimes", "never"], + "phonics": null, + "grammar": ["My birthday is in May.", "He plays basketball on Fridays.", "We get up at eight o'clock.", "Bao always rides his bike.", "They sometimes watch TV.", "Nam often takes photos.", "Mom never listens to music.", "Does he catch the bus to school?", "Yes, he does. / No, he doesn't."], + "target": "Recognize and use adverbs of frequency and prepositions of time (in, on, at)." + }, + { + "grade": "050203", + "vocab": ["soccer", "TV", "dog", "bike", "DVD", "book", "guitar", "Internet", "kite"], + "phonics": null, + "grammar": ["play soccer", "watch TV", "walk the dog", "ride my bike", "watch a DVD", "read a book", "play a guitar", "surf the Internet", "snorkel in the sea", "fly my kite", "I sometimes play computer games.", "I always ride my bike.", "She often plays soccer.", "She never walks the dog.", "Does she watch TV?", "Yes, she does. / No, she doesn't.", "Come and play with me!"], + "target": "Talk about activities using adverbs of frequency; use them in the context of a song." + }, + { + "grade": "050204", + "vocab": ["cats", "vets", "hats", "cast", "vest", "last"], + "phonics": ["/ts/", "/st/"], + "grammar": ["it's time", "fell", "sad", "kind", "go home", "at last"], + "target": "Pronounce the sounds /ts/ and /st/; identify these consonant clusters in a chant." + }, + { + "grade": "050205", + "vocab": ["concert", "actor", "movie", "character"], + "phonics": null, + "grammar": ["go into", "room", "friendly", "adventure", "sing", "movie review", "Who do Hana and Reiku visit?", "What do they find?", "What's in the room?", "Are they scared?", "Is the movie sad?", "What kinds of movies do you like watching?"], + "target": "Identify new words; read and understand a movie review; read for specific information." + }, + { + "grade": "050206", + "vocab": [], + "phonics": null, + "grammar": ["Do you like watching movies?", "Yes, I do.", "Do you ever go to the movie theater?", "Yes, I sometimes go.", "I always/usually/often/sometimes/never...", "emergency vehicles", "police car", "fire truck", "concert stage", "library", "shopping mall"], + "target": "Listen for specific words; ask and answer about activities and their frequency." + }, + { + "grade": "050207", + "vocab": [], + "phonics": null, + "grammar": ["My favorite movie is...", "The main character is...", "He/She is...", "He/She lives with...", "It's a great movie!", "Write a review."], + "target": "Ask and answer about activities and their frequency; write a review." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F53.json b/data/familynfriend/g5/F53.json new file mode 100644 index 0000000..ecf41b4 --- /dev/null +++ b/data/familynfriend/g5/F53.json @@ -0,0 +1,58 @@ +[ + { + "grade": "050301", + "vocab": ["lemonade", "mushrooms", "meat", "melon", "cucumber", "onion", "soda", "ice tea", "supermarket", "week", "need", "sure", "get"], + "phonics": null, + "grammar": ["over there", "the top", "Could you give me a melon, please?"], + "target": "Identify food and drink items, understand a short story, and develop digital citizenship skills." + }, + { + "grade": "050302", + "vocab": ["onion", "onions", "meat", "ice-tea", "bananas", "sandwich", "noodles", "milk", "melon", "cucumber", "lemonade", "mushrooms", "soda"], + "phonics": null, + "grammar": ["Could you help me, please?", "Could I have ..., please?", "Could we have ..., please?"], + "target": "Use polite requests with Could/Could you...? appropriately, and distinguish countable vs uncountable nouns with a/an / some." + }, + { + "grade": "050303", + "vocab": ["onion", "melon", "meat", "ice-tea", "ice-cream", "juice", "noodles", "banana", "bananas"], + "phonics": null, + "grammar": ["Could you ... please?", "Could I/we have ... please?", "Sure.", "Of course.", "No, sorry.", "one/two/three + countable", "some + uncountable"], + "target": "Distinguish countable vs. uncountable nouns, formulate polite requests with 'Could ... please?', and use determiners a / an / some / one / two / three accurately." + }, + { + "grade": "050304", + "vocab": ["melon", "cucumber", "onion", "apple", "cookie", "meat", "rice", "bread", "noodles", "soda"], + "phonics": null, + "grammar": ["He's/She's buying some meat.", "Could we have some onions?", "At the Supermarket"], + "target": "Describe people's shopping using the present continuous, write sentences with countable or uncountable nouns, and use structures in the context of a song." + }, + { + "grade": "050305", + "vocab": ["balloons", "cookies", "hats", "masks", "sandwiches", "boxes", "cakes", "share", "party", "afternoon"], + "phonics": ["/s/", "/z/", "/ɪz/"], + "grammar": ["What's in the boxes?", "What's in there?", "I have some ___ (plural)."], + "target": "Pronounce the final s and es in plural forms, differentiate between the sounds /z/, /s/, and /ɪz/, and use these sounds in the context of a chant." + }, + { + "grade": "050306", + "vocab": ["fish sauce", "rice paper", "garlic", "bean sprouts", "pot", "add"], + "phonics": null, + "grammar": ["made from", "My Favorite Dish", "Read again and write T(True) or F(False).", "What is your favorite dish from another country?"], + "target": "Identify new words, read and understand a recipe, and read for specific information about ingredients and instructions." + }, + { + "grade": "050307", + "vocab": ["rice", "meat", "melon", "noodles", "onions", "bean sprouts"], + "phonics": null, + "grammar": ["She's shopping.", "Could I have a cucumber and some rice, please?", "Sure.", "Describe what you like eating for lunch or dinner."], + "target": "Listen for and understand specific words, and perform a shopping dialogue." + }, + { + "grade": "050308", + "vocab": ["rice paper", "minced meat", "carrot", "bean sprouts", "sauce", "onion", "salt", "pepper", "sugar", "cucumber", "rice", "fish sauce"], + "phonics": null, + "grammar": ["Could I have ..., please?", "You need ...", "First, Then, Next, Finally", "Be the Chef!"], + "target": "Write a recipe using imperative verbs and sequence words." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F54.json b/data/familynfriend/g5/F54.json new file mode 100644 index 0000000..caa4e41 --- /dev/null +++ b/data/familynfriend/g5/F54.json @@ -0,0 +1,51 @@ +[ + { + "grade": "050401", + "vocab": ["bus", "electric bike", "motorcycle", "plane", "taxi", "train", "trolley", "scooter", "horse bus", "hundred", "skateboard", "cool"], + "phonics": null, + "grammar": [], + "target": "Identify different types of transportation and understand a short story." + }, + { + "grade": "050402", + "vocab": ["bus", "electric bike", "motorcycle", "plane", "taxi", "train", "trolley", "scooter", "horse bus", "hundred", "skateboard", "cool"], + "phonics": null, + "grammar": [], + "target": "Act out a story and identify different types of transportation." + }, + { + "grade": "050403", + "vocab": ["park", "bus station", "train", "plane", "singer", "children", "flowers", "sandwiches", "balloons", "TV"], + "phonics": null, + "grammar": ["there was / there were", "there wasn't / there weren't", "lots of", "some", "any"], + "target": "Understand and use 'there was / were' and 'there wasn't / weren't' for talking about things in the past, including quantifiers 'lots of', 'some', and 'any'." + }, + { + "grade": "050404", + "vocab": ["child", "shield", "field", "belt", "salt", "adult", "gray", "wear", "have", "sit down"], + "phonics": ["/ld/", "/lt/"], + "grammar": [], + "target": "Identify and pronounce the consonant clusters /ld/ and /lt/ in a chant." + }, + { + "grade": "050405", + "vocab": ["on foot", "in the middle", "by bike", "inside", "easy", "catch a (bus)", "gifts", "visitors"], + "phonics": null, + "grammar": ["I see...", "Before... Now..."], + "target": "Read and understand a text about Ben Thanh market and identify key information." + }, + { + "grade": "050406", + "vocab": ["bike", "bus", "horse", "electric bike", "car", "motorcycle"], + "phonics": null, + "grammar": ["There was / There were", "There weren't any ... a long time ago."], + "target": "Listen for and understand a conversation, and make statements about the past using 'there was / were'." + }, + { + "grade": "050407", + "vocab": ["bike", "bus", "horse", "electric bike", "car", "motorcycle"], + "phonics": null, + "grammar": ["There was / There were", "One hundred years ago ... Now ..."], + "target": "Write a description of a place, comparing its past and present." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F55.json b/data/familynfriend/g5/F55.json new file mode 100644 index 0000000..6dd129d --- /dev/null +++ b/data/familynfriend/g5/F55.json @@ -0,0 +1,51 @@ +[ + { + "grade": "050501", + "vocab": ["Australia", "Vietnam", "U.S.A.", "Thailand", "Cambodia", "Singapore", "France", "Germany"], + "phonics": null, + "grammar": ["They had a long trip.", "Were we late? No, we weren't.", "Did they have a great vacation?"], + "target": "Identify country names and understand a short story using digital tools." + }, + { + "grade": "050502", + "vocab": ["travel", "arrive", "greet", "visit"], + "phonics": null, + "grammar": ["Act out a story.", "Which countries appear in the story?"], + "target": "Act out the story and identify country names with digital collaboration." + }, + { + "grade": "050503", + "vocab": ["humid", "stormy", "cloudy", "foggy"], + "phonics": null, + "grammar": ["The plane was early.", "They weren't in Viet Nam.", "Were Max and Holly late? No, they weren't.", "Was Amy's vacation fun? Yes, it was.", "They had a long trip.", "She didn't have an umbrella.", "Did they have a good vacation? Yes, they did. / No, they didn't."], + "target": "Understand and use the simple past of 'be' and 'have' in sentences." + }, + { + "grade": "050504", + "vocab": ["pond", "tent", "lamp", "plant", "camp", "hand", "gray"], + "phonics": ["/nd/", "/nt/", "/mp/"], + "grammar": ["I have a plant in my hand.", "Sit down."], + "target": "Pronounce the sounds /nd/, /nt/, and /mp/ and use them in a chant." + }, + { + "grade": "050505", + "vocab": ["picnic", "beach", "ghost", "witch"], + "phonics": null, + "grammar": ["Trick or Treat", "It was humid and stormy.", "What's your favorite festival?"], + "target": "Read and understand an email and a postcard about festivals (Halloween and Christmas)." + }, + { + "grade": "050506", + "vocab": [], + "phonics": null, + "grammar": ["Listen and write the numbers.", "Say what the weather was like last weekend / yesterday."], + "target": "Understand a sequence of past events and describe past situations from pictures." + }, + { + "grade": "050507", + "vocab": [], + "phonics": null, + "grammar": ["Write an email to a friend. Use the example to help you.", "My birthday", "It was ...", "We had ...", "In the end ..."], + "target": "Write a description of a special day in an email format." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F56.json b/data/familynfriend/g5/F56.json new file mode 100644 index 0000000..697bc54 --- /dev/null +++ b/data/familynfriend/g5/F56.json @@ -0,0 +1,58 @@ +[ + { + "grade": "050601", + "vocab": ["start", "finish", "love", "hate", "want", "use", "live", "cook"], + "phonics": null, + "grammar": ["ancient", "Mayan", "look", "writing (n)", "secret message", "word", "alphabet", "bring", "dish (meal)"], + "target": "Identify new and recycled verbs; understand a short story; develop digital citizenship skills." + }, + { + "grade": "050602", + "vocab": ["start", "finish", "love", "hate", "want", "use", "live", "cook"], + "phonics": null, + "grammar": ["ancient", "Mayan", "look", "writing (n)", "secret message", "word", "alphabet", "bring", "dish (meal)"], + "target": "Act out a story; identify different verbs; develop digital citizenship skills." + }, + { + "grade": "050603", + "vocab": [], + "phonics": null, + "grammar": ["They lived 4,000 years ago.", "They didn't live in apartments.", "Did they cook good food?", "Yes, they did. / No, they didn't.", "apartment", "dinner", "cake"], + "target": "Recognize and form simple past of regular verbs (affirmative, negative, question); use 'did/didn't' in short answers." + }, + { + "grade": "050604", + "vocab": [], + "phonics": null, + "grammar": ["watch TV", "cook", "play the guitar", "listen to music", "play soccer", "invite", "end (v)", "present"], + "target": "Use the simple past of be and have to talk and write about a vacation; use the simple past in the context of a song." + }, + { + "grade": "050605", + "vocab": ["receive", "lucky money", "fireworks", "enjoy"], + "phonics": null, + "grammar": ["visit", "near", "gift", "end (v)"], + "target": "Identify new words; read and understand a factual text about a vacation; read and understand key information in the text." + }, + { + "grade": "050606", + "vocab": ["clean", "play", "paint", "fold", "kick", "watch"], + "phonics": ["/d/", "/ɪd/", "/t/"], + "grammar": ["for hours", "busy", "all day long"], + "target": "Identify and pronounce the ending -ed in regular simple past verbs; differentiate the three sounds /d/, /ɪd/, and /t/; identify the simple past verbs ending with -ed sounds in a chant." + }, + { + "grade": "050607", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Understand a sequence of events; ask and answer questions about the events in pictures; develop digital citizenship skills." + }, + { + "grade": "050608", + "vocab": [], + "phonics": null, + "grammar": [], + "target": "Understand a sequence of events; ask and answer questions about the events in pictures; write a description of a vacation." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F57.json b/data/familynfriend/g5/F57.json new file mode 100644 index 0000000..5d7ce7f --- /dev/null +++ b/data/familynfriend/g5/F57.json @@ -0,0 +1,58 @@ +[ + { + "grade": "050701", + "vocab": ["dinosaur", "bones", "model", "scary", "scream", "roar", "alive", "dead", "interesting", "loudly"], + "phonics": null, + "grammar": [], + "target": "Identify dinosaur museum vocabulary, understand a short story, and develop digital citizenship skills." + }, + { + "grade": "050702", + "vocab": ["buy", "eat", "find", "go", "know", "make", "see", "think", "wear", "write"], + "phonics": null, + "grammar": ["bought", "ate", "found", "went", "knew", "made", "saw", "thought", "wore", "wrote", "We went to the dinosaur museum.", "We didn't go to school."], + "target": "Understand the simple past of irregular verbs (affirmative and negative) and act out the story." + }, + { + "grade": "050703", + "vocab": [], + "phonics": null, + "grammar": ["Did they go to the museum?", "Yes, they did.", "No, they didn't.", "Did Amy buy a postcard?", "Yes, she did.", "No, she didn't. She bought a model."], + "target": "Form questions and short answers with the simple past of irregular verbs and act out the story." + }, + { + "grade": "050704", + "vocab": ["school trip", "skeleton", "dinosaur model", "glad"], + "phonics": null, + "grammar": ["Did you go...?", "Yes, I did.", "No, I didn't.", "Did you see...?", "Yes, they did.", "No, they didn't.", "Last Saturday I went to the park, and Anh went to the movies."], + "target": "Ask and answer questions in the simple past, use simple past irregular verbs to talk and write about past activities, and use the simple past in the context of a song." + }, + { + "grade": "050705", + "vocab": ["zebra", "crocodile", "movie"], + "phonics": ["/t/", "/d/", "/ɪd/"], + "grammar": ["Did they go to the museum?", "Yes, they did.", "No, they didn't.", "Did you see the zebra?", "Yes, I did.", "No, I didn't.", "Did they see...?"], + "target": "Identify stressed words in questions with did and short answers, copy the rhythm, and practice in a chant." + }, + { + "grade": "050706", + "vocab": ["scientist", "tourist", "jungle", "cave", "river", "province", "forgot", "true"], + "phonics": null, + "grammar": ["Son Doong cave", "amazed", "surprised", "huge", "very big", "vast jungle"], + "target": "Read and understand a non-fiction text from an information book and identify details in a text." + }, + { + "grade": "050707", + "vocab": [], + "phonics": null, + "grammar": ["favorite", "going on the boat", "the elephants and lions", "the water slide", "going swimming", "Did Long go to the zoo?", "Yes, he did."], + "target": "Identify details of favorite things on a day trip and ask and answer questions about day trips." + }, + { + "grade": "050708", + "vocab": [], + "phonics": null, + "grammar": ["I went to ___ yesterday. I saw ___.", "Where did you go yesterday?", "What did you see?", "What did you like?", "tourist leaflet", "Location", "Why it's Special", "Best Time to Visit", "Top Activities"], + "target": "Ask and answer questions about day trips and write a description of a place (tourist leaflet)." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F58.json b/data/familynfriend/g5/F58.json new file mode 100644 index 0000000..c200e09 --- /dev/null +++ b/data/familynfriend/g5/F58.json @@ -0,0 +1,51 @@ +[ + { + "grade": "050801", + "vocab": ["lake", "mountain", "waterfall", "ocean", "island", "wide", "deep", "high", "quiz", "correct", "cheetah"], + "phonics": null, + "grammar": ["Which is higher, mountain or island?", "The Pacific Ocean is wider than the Atlantic Ocean.", "Sound Detective game"], + "target": "Identify and describe different places. Understand a short story. Develop digital citizenship skills, including responsible use of digital resources and collaborative online learning." + }, + { + "grade": "050802", + "vocab": ["lake", "mountain", "waterfall", "ocean", "wide", "deep", "high", "island", "quiz", "correct", "cheetah"], + "phonics": null, + "grammar": ["Where are Max and Amy at the start?", "What does the teacher bring out for them?", "What surprising thing does Amy see?", "Why does Amy run fast?"], + "target": "Identify and use place-words. Act out a short story about natural places. Develop digital citizenship skills, including responsible use of digital resources and collaborative online learning." + }, + { + "grade": "050803", + "vocab": ["taller", "larger", "smaller", "shorter", "wider", "deeper", "higher", "faster", "slower"], + "phonics": null, + "grammar": ["Is X taller than Y?", "Yes, it is. / No, it isn't.", "Are trees taller than flowers?", "Yes, they are. / No, they aren't.", "giraffe – taller – elephant", "Nam is taller than Thanh.", "Australia is larger than Singapore."], + "target": "Identify comparative forms of short adjectives. Notice changes to spelling in the formation of comparative adjectives. Develop digital citizenship skills, including responsible use of digital resources and collaborative online learning." + }, + { + "grade": "050804", + "vocab": ["larger", "smaller", "wider", "longer", "slower", "deeper", "swimming pool", "river", "scarf", "road"], + "phonics": null, + "grammar": ["larger than", "smaller than", "wider than", "longer than", "slower than", "deeper than", "This scarf is longer than my arm.", "Our school yard is bigger than the library."], + "target": "Identify sentence stress with comparative adjectives. Practice sentence stress in comparative structures in a chant. Develop digital citizenship skills, including responsible use of digital resources and collaborative online learning." + }, + { + "grade": "050805", + "vocab": ["world", "dark", "restaurant", "floor", "building", "fact", "meter", "kilometer"], + "phonics": null, + "grammar": ["Interesting places around the world", "I'd like to visit... because...", "It is... (height/length/floors) in...", "I notice... / I wonder..."], + "target": "Identify new words. Read and understand a website about amazing places in the world. Read for specific information. Develop digital citizenship skills, including responsible use of digital resources and collaborative online learning." + }, + { + "grade": "050806", + "vocab": ["higher", "deeper", "wider", "bigger", "longer"], + "phonics": null, + "grammar": ["A mountain is higher than a hill.", "Is Pusilung higher than Fansipan?", "No, it isn't.", "HCMC is larger than Cần Thơ, but smaller than Hà Nội.", "Write a fact file."], + "target": "Listen for specific words and match them to information in a chart. Ask and answer questions about places. Develop digital citizenship skills, including responsible use of digital resources and collaborative online learning." + }, + { + "grade": "050807", + "vocab": [], + "phonics": null, + "grammar": ["City Size Mystery", "km² = square kilometers", "Which do you think is larger in area---Hà Nội or HCMC?", "Read the facts and say.", "Your favorite writing - Digital Gallery & Vote"], + "target": "Read a city-size table and make comparative statements. Plan and write a short fact file about places. Develop digital citizenship skills, including responsible use of digital resources and collaborative online learning." + } +] \ No newline at end of file diff --git a/data/familynfriend/g5/F59.json b/data/familynfriend/g5/F59.json new file mode 100644 index 0000000..2c19092 --- /dev/null +++ b/data/familynfriend/g5/F59.json @@ -0,0 +1,58 @@ +[ + { + "grade": "050901", + "vocab": ["path", "grass", "flowers", "garbage can", "trees", "fountain", "litter", "bushes"], + "phonics": null, + "grammar": ["You mustn't ...", "Walk on the path.", "pick", "catch", "playground", "Listen, point, and repeat.", "Listen and chant.", "Listen and read."], + "target": "Identify different things in a park, understand a short story, and develop digital citizenship skills." + }, + { + "grade": "050902", + "vocab": ["path", "grass", "flowers", "garbage can", "trees", "fountain", "litter", "bushes"], + "phonics": null, + "grammar": ["pick", "catch", "playground", "Listen to the story and repeat."], + "target": "Act out a short story about things in the park, identify different things, and develop digital citizenship skills." + }, + { + "grade": "050903", + "vocab": ["slowly", "loudly", "politely", "neatly", "quietly", "quickly", "well", "hard", "fast"], + "phonics": null, + "grammar": ["Don't shout loudly.", "Max can't catch well.", "Walk slowly on the path.", "You must speak politely.", "be quiet", "Listen and say.", "Write.", "Look, read and write."], + "target": "Identify and form adverbs ending in -ly and irregular adverbs (well, hard, fast), use adverbs in sentences, understand sentence patterns, and develop digital citizenship skills." + }, + { + "grade": "050904", + "vocab": ["run", "sing", "write", "read", "swim", "ride a bike"], + "phonics": null, + "grammar": ["adverbs", "You mustn't walk on the grass / pick the flowers.", "Walk slowly on the path.", "play ball", "end (v)", "pick the flowers", "Look and say.", "Write four sentences.", "Listen and sing.", "Sing and do."], + "target": "Describe actions using the present continuous with adverbs, understand and sing the song 'Fun at the park', and develop digital citizenship skills." + }, + { + "grade": "050905", + "vocab": ["slowly", "loudly", "politely", "quietly", "quickly", "neatly"], + "phonics": ["Stress in phrases with adverbs ending -ly"], + "grammar": ["walk", "move", "surprised", "roar", "Listen, point, and repeat.", "Listen and chant.", "Read the chant again. Underline the stronger sounds. Then say.", "Say the sentences. Underline the stronger sound.", "Let's talk!"], + "target": "Identify the stress in phrases with adverbs ending -ly, practice the stress in adverbs in the context of a chant, and develop digital citizenship skills." + }, + { + "grade": "050906", + "vocab": [], + "phonics": null, + "grammar": ["Recycled vocabulary and structures", "shout", "follow", "chase", "catch", "cross", "gingerbread cookie", "cross (v)", "Listen, point, and repeat.", "Look at the text. What can you see in the pictures?", "Listen and read.", "Read again and write T (true) or F (false).", "What's your favorite story?"], + "target": "Read and understand a traditional children's story, read and understand key information about the story, and develop digital citizenship skills." + }, + { + "grade": "050907", + "vocab": [], + "phonics": null, + "grammar": ["Recycled vocabulary and structures", "Listen and write the numbers.", "Look at the pictures and say."], + "target": "Listen to and understand descriptions of actions, talk about rules and identify pictures, and develop digital citizenship skills." + }, + { + "grade": "050908", + "vocab": [], + "phonics": null, + "grammar": ["Revision sentence patterns.", "Say some things your friend can do well.", "Write a story. Use the examples to help you."], + "target": "Identify past-tense verbs and adverbs of manner, plan and write a short traditional story, and develop digital citizenship skills." + } +] \ No newline at end of file diff --git a/data/moveup/g1/M11.json b/data/moveup/g1/M11.json new file mode 100644 index 0000000..dd7a5b1 --- /dev/null +++ b/data/moveup/g1/M11.json @@ -0,0 +1,152 @@ +[ + { + "grade": "010101", + "vocab": [ + "pink", + "brown", + "white", + "Hello", + "Nice to meet you" + ], + "phonics": null, + "grammar": [ + "Hello.", + "Nice to meet you.", + "This is...", + "What color is it?", + "It's..." + ] + }, + { + "grade": "010102", + "vocab": [ + "pink", + "brown", + "white", + "red", + "black", + "green", + "blue" + ], + "phonics": null, + "grammar": [ + "What color is it?", + "It's..." + ] + }, + { + "grade": "010103", + "vocab": [ + "cake", + "cow", + "C", + "c" + ], + "phonics": "/k/ (âm của chữ C)", + "grammar": null + }, + { + "grade": "010104", + "vocab": [ + "doll", + "door", + "D", + "d" + ], + "phonics": "/d/ (âm của chữ D)", + "grammar": null + }, + { + "grade": "010105", + "vocab": [ + "pink", + "brown", + "white", + "red", + "black", + "green", + "blue", + "yellow", + "orange", + "purple", + "gray" + ], + "phonics": null, + "grammar": null + }, + { + "grade": "010106", + "vocab": [ + "pink", + "brown", + "white", + "red", + "black", + "green", + "blue", + "yellow", + "orange", + "purple", + "gray", + "cake", + "cow", + "doll", + "door", + "C", + "c", + "D", + "d" + ], + "phonics": "/k/, /d/", + "grammar": null + }, + { + "grade": "010107", + "vocab": [ + "pink", + "brown", + "white", + "red", + "black", + "green", + "blue", + "yellow", + "orange", + "purple", + "gray", + "cake", + "cow", + "doll", + "door", + "C", + "c", + "D", + "d" + ], + "phonics": "/k/, /d/", + "grammar": null + }, + { + "grade": "010108", + "vocab": [ + "pink", + "brown", + "white", + "red", + "black", + "green", + "blue", + "yellow", + "orange", + "purple", + "gray", + "I have a...", + "It's..." + ], + "phonics": null, + "grammar": [ + "I have a...", + "It's..." + ] + } +] \ No newline at end of file diff --git a/data/moveup/g1/M12.json b/data/moveup/g1/M12.json new file mode 100644 index 0000000..4e37444 --- /dev/null +++ b/data/moveup/g1/M12.json @@ -0,0 +1,205 @@ +[ + { + "grade": "010201", + "vocab": [ + "pen", + "book", + "bag", + "pencil case", + "ruler", + "chair", + "crayon", + "desk", + "pencil", + "notebook" + ], + "phonics": null, + "grammar": [ + "What's this?", + "It's a..." + ] + }, + { + "grade": "010202", + "vocab": [ + "pen", + "book", + "bag", + "pencil case", + "ruler", + "chair", + "crayon", + "desk", + "pencil", + "notebook", + "blue", + "red", + "green", + "white", + "pink", + "brown", + "black" + ], + "phonics": null, + "grammar": [ + "What's this?", + "It's a...", + "What color is it?", + "It's...", + "It's a blue pen." + ] + }, + { + "grade": "010203", + "vocab": [ + "elf", + "envelope", + "E", + "e" + ], + "phonics": "/e/", + "grammar": [ + "Nhận diện và viết chữ Ee.", + "Phát âm /e/." + ] + }, + { + "grade": "010204", + "vocab": [ + "fox", + "feet", + "F", + "f" + ], + "phonics": "/f/", + "grammar": [ + "Nhận diện và viết chữ Ff.", + "Phát âm /f/." + ] + }, + { + "grade": "010205", + "vocab": [ + "pen", + "book", + "bag", + "pencil case", + "ruler", + "chair", + "crayon", + "desk", + "pencil", + "notebook", + "one", + "two", + "three", + "four", + "five" + ], + "phonics": null, + "grammar": [ + "What's this?", + "It's a...", + "Counting 1–5.", + "Count and write the number." + ] + }, + { + "grade": "010206", + "vocab": [ + "pen", + "book", + "bag", + "pencil case", + "ruler", + "chair", + "crayon", + "desk", + "pencil", + "notebook", + "blue", + "red", + "green", + "white", + "pink", + "brown", + "black", + "elf", + "envelope", + "fox", + "feet", + "E", + "e", + "F", + "f" + ], + "phonics": "/e/, /f/", + "grammar": [ + "What's this?", + "It's a...", + "What color is it?", + "It's..." + ] + }, + { + "grade": "010207", + "vocab": [ + "pen", + "book", + "bag", + "pencil case", + "ruler", + "chair", + "crayon", + "desk", + "pencil", + "notebook", + "blue", + "red", + "green", + "white", + "pink", + "brown", + "black", + "elf", + "envelope", + "fox", + "feet", + "E", + "e", + "F", + "f" + ], + "phonics": "/e/, /f/", + "grammar": [ + "What's this?", + "It's a...", + "What color is it?", + "It's..." + ] + }, + { + "grade": "010208", + "vocab": [ + "pen", + "book", + "bag", + "pencil case", + "ruler", + "chair", + "crayon", + "desk", + "pencil", + "notebook", + "I have...", + "in my bag", + "2 pens", + "3 pencils" + ], + "phonics": null, + "grammar": [ + "I have... in my bag.", + "Số nhiều (plural form): pens, pencils, etc." + ] + } +] \ No newline at end of file diff --git a/data/moveup/g1/M13.json b/data/moveup/g1/M13.json new file mode 100644 index 0000000..fb0098d --- /dev/null +++ b/data/moveup/g1/M13.json @@ -0,0 +1,205 @@ +[ + { + "grade": "010301", + "vocab": [ + "kite", + "train", + "helicopter", + "ship", + "ball", + "plane", + "car", + "robot", + "balloon" + ], + "phonics": null, + "grammar": [ + "What's this?", + "It's a..." + ] + }, + { + "grade": "010302", + "vocab": [ + "ship", + "train", + "ball", + "plane", + "car", + "robot", + "balloon", + "blue", + "red", + "green", + "white", + "pink", + "brown", + "black", + "yellow", + "orange", + "purple", + "gray" + ], + "phonics": null, + "grammar": [ + "Is it a...?", + "Yes, it is.", + "No, it isn't.", + "It's a blue train." + ] + }, + { + "grade": "010303", + "vocab": [ + "gorilla", + "goat", + "G", + "g" + ], + "phonics": "/g/", + "grammar": null + }, + { + "grade": "010304", + "vocab": [ + "hat", + "horse", + "ill", + "insect", + "H", + "h", + "I", + "i" + ], + "phonics": [ + "/h/", + "/i/" + ], + "grammar": null + }, + { + "grade": "010305", + "vocab": [ + "kite", + "train", + "helicopter", + "ship", + "ball", + "plane", + "car", + "robot", + "balloon", + "gorilla", + "goat", + "hat", + "horse", + "ill", + "insect" + ], + "phonics": "/g/, /h/, /i/", + "grammar": [ + "What's this?", + "It's a...", + "Is it a...?", + "Yes, it is.", + "No, it isn't." + ] + }, + { + "grade": "010306", + "vocab": [ + "kite", + "train", + "helicopter", + "ship", + "ball", + "plane", + "car", + "robot", + "balloon", + "gorilla", + "goat", + "hat", + "horse", + "ill", + "insect", + "blue", + "red", + "green", + "white", + "pink", + "brown", + "black", + "yellow", + "orange", + "purple", + "gray" + ], + "phonics": "/g/, /h/, /i/", + "grammar": [ + "What's this?", + "It's a...", + "Is it a...?", + "Yes, it is.", + "No, it isn't." + ] + }, + { + "grade": "010307", + "vocab": [ + "kite", + "train", + "helicopter", + "ship", + "ball", + "plane", + "car", + "robot", + "balloon", + "gorilla", + "goat", + "hat", + "horse", + "ill", + "insect", + "blue", + "red", + "green", + "white", + "pink", + "brown", + "black", + "yellow", + "orange", + "purple", + "gray" + ], + "phonics": "/g/, /h/, /i/", + "grammar": [ + "What's this?", + "It's a...", + "Is it a...?", + "Yes, it is.", + "No, it isn't." + ] + }, + { + "grade": "010308", + "vocab": [ + "kite", + "train", + "helicopter", + "ship", + "ball", + "plane", + "car", + "robot", + "balloon" + ], + "phonics": null, + "grammar": [ + "What's your favorite toy?", + "My favorite toy is..." + ] + } +] \ No newline at end of file diff --git a/data/moveup/g1/M14.json b/data/moveup/g1/M14.json new file mode 100644 index 0000000..6d41609 --- /dev/null +++ b/data/moveup/g1/M14.json @@ -0,0 +1,166 @@ +[ + { + "grade": "010401", + "vocab": [ + "monkey", + "lion", + "elephant" + ], + "phonics": null, + "grammar": [ + "What's this?", + "Point and say." + ] + }, + { + "grade": "010402", + "vocab": [ + "bird", + "bear", + "hippo", + "crocodile", + "tiger" + ], + "phonics": null, + "grammar": [ + "Are they elephants?", + "Yes, they are.", + "No, they aren't." + ] + }, + { + "grade": "010403", + "vocab": [ + "jellyfish", + "kite", + "juice", + "kangaroo" + ], + "phonics": [ + "/dʒ/", + "/k/" + ], + "grammar": [ + "J is for jellyfish.", + "K is for kite." + ] + }, + { + "grade": "010404", + "vocab": [ + "lion", + "lollipop", + "man", + "mango", + "love", + "music" + ], + "phonics": [ + "/l/", + "/m/" + ], + "grammar": [ + "L is for lollipop.", + "M is for man." + ] + }, + { + "grade": "010405", + "vocab": [ + "monkey", + "lion", + "elephant", + "bird", + "bear", + "hippo", + "crocodile", + "tiger", + "jellyfish", + "kite", + "juice", + "kangaroo", + "lollipop", + "man", + "mango", + "love", + "music" + ], + "phonics": [ + "/dʒ/", + "/k/", + "/l/", + "/m/" + ], + "grammar": [ + "What are they?", + "They're...", + "Are they...?", + "Yes, they are.", + "No, they aren't." + ] + }, + { + "grade": "010406", + "vocab": [ + "monkey", + "lion", + "elephant", + "bird", + "bear", + "hippo", + "crocodile", + "tiger", + "jellyfish", + "kite", + "juice", + "kangaroo", + "lollipop", + "man", + "mango", + "love", + "music" + ], + "phonics": [ + "/dʒ/", + "/k/", + "/l/", + "/m/" + ], + "grammar": [ + "What are they?", + "They're...", + "Are they...?", + "Yes, they are.", + "No, they aren't.", + "Look and write.", + "Write Yes or No." + ] + }, + { + "grade": "010407", + "vocab": [ + "monkey", + "lion", + "elephant", + "bird", + "bear", + "hippo", + "crocodile", + "tiger", + "jellyfish", + "kite", + "juice", + "kangaroo", + "lollipop", + "man", + "mango", + "love", + "music" + ], + "phonics": null, + "grammar": [ + "Hello, I'm... the lion.", + "Nice to meet you." + ] + } +] \ No newline at end of file diff --git a/data/moveup/g1/M15.json b/data/moveup/g1/M15.json new file mode 100644 index 0000000..6933c3c --- /dev/null +++ b/data/moveup/g1/M15.json @@ -0,0 +1,164 @@ +[ + { + "grade": "010501", + "vocab": [ + "arms", + "nose", + "face", + "legs", + "fingers", + "hands" + ], + "phonics": null, + "grammar": [ + "What's this?", + "Point and say." + ] + }, + { + "grade": "010502", + "vocab": [ + "hands", + "arms", + "eyes", + "legs" + ], + "phonics": null, + "grammar": [ + "Are these your legs?", + "Yes, they are.", + "No, they aren't.", + "This/These" + ] + }, + { + "grade": "010503", + "vocab": [ + "ant", + "bus", + "cake", + "doll" + ], + "phonics": [ + "/b/", + "/d/" + ], + "grammar": [ + "This is an ant.", + "This is a bus.", + "This is a cake.", + "This is a doll." + ] + }, + { + "grade": "010504", + "vocab": [ + "eraser", + "fan", + "gift", + "hamster", + "shelf", + "bag" + ], + "phonics": [ + "/f/", + "/g/" + ], + "grammar": [ + "This is an eraser.", + "This is a fan.", + "This is a gift.", + "This is a hamster." + ] + }, + { + "grade": "010505", + "vocab": [ + "arms", + "nose", + "face", + "legs", + "fingers", + "hands", + "eyes", + "ant", + "bus", + "cake", + "doll", + "eraser", + "fan", + "gift", + "hamster", + "shelf", + "bag" + ], + "phonics": [ + "/b/", + "/d/", + "/f/", + "/g/" + ], + "grammar": [ + "What are these?", + "They're...", + "Are these...?", + "Yes, they are.", + "No, they aren't." + ] + }, + { + "grade": "010506", + "vocab": [ + "arms", + "nose", + "face", + "legs", + "fingers", + "hands", + "eyes", + "ant", + "bus", + "cake", + "doll", + "eraser", + "fan", + "gift", + "hamster", + "shelf", + "bag" + ], + "phonics": [ + "/b/", + "/d/", + "/f/", + "/g/" + ], + "grammar": [ + "What are these?", + "They're...", + "Are these...?", + "Yes, they are.", + "No, they aren't.", + "Look and write.", + "Write: Yes, they are. / No, they aren't." + ] + }, + { + "grade": "010507", + "vocab": [ + "head", + "eyes", + "nose", + "face", + "arms", + "legs", + "fingers", + "hands" + ], + "phonics": null, + "grammar": [ + "My name is...", + "I have one head and two green eyes." + ] + } +] \ No newline at end of file diff --git a/data/moveup/g1/M16.json b/data/moveup/g1/M16.json new file mode 100644 index 0000000..d301c04 --- /dev/null +++ b/data/moveup/g1/M16.json @@ -0,0 +1,144 @@ +[ + { + "grade": "010601", + "vocab": [ + "salad", + "milk", + "pizza", + "lunchbox", + "sandwich", + "drink", + "banana", + "cookie", + "pear" + ], + "phonics": null, + "grammar": [ + "What's this?", + "What do you have?", + "I have salad." + ] + }, + { + "grade": "010602", + "vocab": [ + "apple", + "salad", + "milk", + "pizza" + ], + "phonics": null, + "grammar": [ + "Do you have an apple?", + "Yes, I do.", + "No, I don't.", + "a/an" + ] + }, + { + "grade": "010603", + "vocab": [ + "insect", + "jellyfish", + "kangaroo", + "lollipop", + "man" + ], + "phonics": [ + "/ɪ/", + "/ʤ/", + "/k/", + "/l/", + "/m/" + ], + "grammar": [ + "This is a...", + "The jellyfish looks at the insect." + ] + }, + { + "grade": "010604", + "vocab": [ + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "ten" + ], + "phonics": null, + "grammar": null + }, + { + "grade": "010605", + "vocab": [ + "salad", + "milk", + "pizza", + "apple", + "banana", + "cookie", + "pear", + "sandwich", + "lunchbox", + "drink" + ], + "phonics": null, + "grammar": [ + "What do you have?", + "I have...", + "Do you have...?", + "Yes, I do.", + "No, I don't." + ] + }, + { + "grade": "010606", + "vocab": [ + "salad", + "milk", + "pizza", + "apple", + "banana", + "cookie", + "pear", + "sandwich", + "lunchbox", + "drink", + "kite", + "pear", + "two" + ], + "phonics": null, + "grammar": [ + "What is this?", + "It's a...", + "What do you have?", + "I have two pears." + ] + }, + { + "grade": "010607", + "vocab": [ + "salad", + "milk", + "pizza", + "apple", + "banana", + "cookie", + "pear", + "sandwich", + "lunchbox", + "drink" + ], + "phonics": null, + "grammar": [ + "I have... and...", + "What do you have for lunch?" + ] + } +] \ No newline at end of file diff --git a/data/moveup/g1/M1S.json b/data/moveup/g1/M1S.json new file mode 100644 index 0000000..c854b6a --- /dev/null +++ b/data/moveup/g1/M1S.json @@ -0,0 +1,97 @@ +[ + { + "grade": "010001", + "vocab": [ + "dad", + "mom", + "Hello" + ], + "phonics": null, + "grammar": [ + "Hello ...", + "Nice to meet you ...", + "This is ..." + ] + }, + { + "grade": "010002", + "vocab": null, + "phonics": null, + "grammar": [ + "Open your book", + "Close your book", + "Put your book away", + "Stand up", + "Sit down", + "Line up", + "Raise your hand" + ] + }, + { + "grade": "010003", + "vocab": [ + "ant" + ], + "phonics": "short_a", + "grammar": null + }, + { + "grade": "010004", + "vocab": [ + "bus", + "boat" + ], + "phonics": "b", + "grammar": null + }, + { + "grade": "010005", + "vocab": [ + "dad", + "mom", + "ant", + "bus", + "boat", + "one", + "two" + ], + "phonics": null, + "grammar": [ + "Hello ...", + "Nice to meet you ...", + "This is..." + ] + }, + { + "grade": "010006", + "vocab": null, + "phonics": null, + "grammar": [ + "Hello ...", + "Nice to meet you ...", + "This is..." + ] + }, + { + "grade": "010007", + "vocab": null, + "phonics": null, + "grammar": [ + "Hello ...", + "Nice to meet you ...", + "This is..." + ] + }, + { + "grade": "010008", + "vocab": null, + "phonics": null, + "grammar": [ + "Hi", + "My name is…", + "Nice to meet you", + "What's your name?", + "I'm…" + ] + } +] \ No newline at end of file diff --git a/data/moveup/g1/unit4.json b/data/moveup/g1/unit4.json deleted file mode 100644 index 330645b..0000000 --- a/data/moveup/g1/unit4.json +++ /dev/null @@ -1,108 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_4", - "lesson_number": 1, - "lesson_title": "Lesson 1: Animals", - "lesson_type": "json_content", - "lesson_description": "Identify 3 animals", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": ["identify 3 animals"], - "vocabulary": ["monkey", "lion", "elephant"] - } - }, - { - "chapter_id": "uuid_chapter_4", - "lesson_number": 2, - "lesson_title": "Lesson 2: Animal Questions", - "lesson_type": "json_content", - "lesson_description": "Ask and answer questions about animals", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "ask question: 'Are they elephants?'", - "answer: 'Yes, they are. / No, they aren't.'" - ], - "grammar": "Are they elephants? Yes, they are. / No, they aren't." - } - }, - { - "chapter_id": "uuid_chapter_4", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters J & K", - "lesson_type": "json_content", - "lesson_description": "Recognize letters J, K and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize the upper- and lowercase forms of the letters J, K", - "associate them with the sounds /dʒ/ and /k/" - ], - "letters": ["J", "K"], - "sounds": ["/dʒ/", "/k/"], - "vocabulary": ["jellyfish", "juice", "kite", "kangaroo"] - } - }, - { - "chapter_id": "uuid_chapter_4", - "lesson_number": 4, - "lesson_title": "Lesson 4: Letters L & M", - "lesson_type": "json_content", - "lesson_description": "Recognize letters L, M and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize the upper- and lowercase forms of the letters L, M", - "associate them with the sounds /l/ and /m/" - ], - "letters": ["L", "M"], - "sounds": ["/l/", "/m/"], - "vocabulary": ["lion", "lollipop", "man", "mango", "love", "music"] - } - }, - { - "chapter_id": "uuid_chapter_4", - "lesson_number": 5, - "lesson_title": "Lesson 5: Review Animals", - "lesson_type": "json_content", - "lesson_description": "Review animals and questions", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review animals", - "review question and answer: What are they? They're...", - "review question and answer: Are they...? Yes/No" - ] - } - }, - { - "chapter_id": "uuid_chapter_4", - "lesson_number": 6, - "lesson_title": "Lesson 6: Challenge", - "lesson_type": "json_content", - "lesson_description": "Review unit 4", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": ["review the animals", "review unit 4"] - } - }, - { - "chapter_id": "uuid_chapter_4", - "lesson_number": 7, - "lesson_title": "Lesson 7: My Own Work", - "lesson_type": "url_content", - "lesson_description": "Review animals, make a paper lion", - "content_url": "/activities/paper-lion-tutorial", - "content_type": "video_tutorial", - "content_json": { - "type": "activity", - "learning_objectives": ["review animals", "make a paper lion craft"] - } - } -] \ No newline at end of file diff --git a/data/moveup/g1/unit5.json b/data/moveup/g1/unit5.json deleted file mode 100644 index 58410c0..0000000 --- a/data/moveup/g1/unit5.json +++ /dev/null @@ -1,116 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_5", - "lesson_number": 1, - "lesson_title": "Lesson 1: Body Parts", - "lesson_type": "json_content", - "lesson_description": "Identify body parts and use in dialogue", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify body parts", - "use the words in the content of a dialogue" - ], - "vocabulary": ["arms", "nose", "face", "legs", "fingers", "hands"] - } - }, - { - "chapter_id": "uuid_chapter_5", - "lesson_number": 2, - "lesson_title": "Lesson 2: Body Parts Questions", - "lesson_type": "json_content", - "lesson_description": "Ask and answer about body parts", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "say sentences with these", - "complete sentences with these", - "recognize plural forms of nouns" - ], - "grammar": "Are these your legs? Yes, they are./ No, they aren't" - } - }, - { - "chapter_id": "uuid_chapter_5", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters A, B, C, D", - "lesson_type": "json_content", - "lesson_description": "Recognize letters A, B, C, D and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize and say the names of the letters a, b, c, d", - "review the upper and lower forms of a, b, c, d", - "pronounce /b/ and /d/ at the ends of words" - ], - "letters": ["A", "B", "C", "D"], - "sounds": ["/æ/", "/b/", "/k/", "/d/"], - "vocabulary": ["ant", "bus", "cake", "doll"] - } - }, - { - "chapter_id": "uuid_chapter_5", - "lesson_number": 4, - "lesson_title": "Lesson 4: Letters E, F, G, H", - "lesson_type": "json_content", - "lesson_description": "Recognize letters E, F, G, H and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "review the upper- and lowercase forms of the letter e, f, g, and h", - "associate them with their corresponding sounds", - "pronounce the sound /f/ and /g/ at the ends of words", - "recognize the names of the letters Ee, Ff, Gg, and H" - ], - "letters": ["E", "F", "G", "H"], - "sounds": ["/e/", "/f/", "/g/", "/h/"], - "vocabulary": ["eraser", "fan", "gift", "hamster", "shelf", "bag"] - } - }, - { - "chapter_id": "uuid_chapter_5", - "lesson_number": 5, - "lesson_title": "Lesson 5: Review Body Parts", - "lesson_type": "json_content", - "lesson_description": "Review body parts and unit 5", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": ["review the body parts", "review unit 5"] - } - }, - { - "chapter_id": "uuid_chapter_5", - "lesson_number": 6, - "lesson_title": "Lesson 6: Challenge", - "lesson_type": "json_content", - "lesson_description": "Review unit 5 and check understanding", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review unit 5", - "check their understanding about body parts" - ] - } - }, - { - "chapter_id": "uuid_chapter_5", - "lesson_number": 7, - "lesson_title": "Lesson 7: My Own Work", - "lesson_type": "json_content", - "lesson_description": "Review body parts, draw and write parts of body", - "lesson_content_type": "review", - "content_json": { - "type": "activity", - "learning_objectives": [ - "review body parts", - "draw and write parts of body" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g1/unit6.json b/data/moveup/g1/unit6.json deleted file mode 100644 index 8b17dd4..0000000 --- a/data/moveup/g1/unit6.json +++ /dev/null @@ -1,106 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_6", - "lesson_number": 1, - "lesson_title": "Lesson 1: Food and Drinks", - "lesson_type": "json_content", - "lesson_description": "Identify some food and drink", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": ["identify some food and drink"], - "vocabulary": ["salad", "milk", "pizza"] - } - }, - { - "chapter_id": "uuid_chapter_6", - "lesson_number": 2, - "lesson_title": "Lesson 2: Food Questions", - "lesson_type": "json_content", - "lesson_description": "Ask questions with HAVE, recognize A vs AN", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "make Yes/No questions with HAVE", - "recognize the difference between A and AN" - ], - "grammar": "Do you have an apple? Yes, I do./ No, I don't." - } - }, - { - "chapter_id": "uuid_chapter_6", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters I, J, K, L, M", - "lesson_type": "json_content", - "lesson_description": "Recognize letters I, J, K, L, M and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize and say the names of the letters I, j, k, l, m", - "review the upper and lower forms of the letters", - "associate them with their corresponding sounds", - "pronounce the sounds /ɪ/, /ʤ/, /k/, /l/, /m/ at the beginning of words", - "pronounce the sounds /k/, /l/, /m/ at the end of words" - ], - "letters": ["I", "J", "K", "L", "M"], - "sounds": ["/ɪ/", "/ʤ/", "/k/", "/l/", "/m/"], - "vocabulary": ["insect", "jellyfish", "kangaroo", "lollipop", "man"] - } - }, - { - "chapter_id": "uuid_chapter_6", - "lesson_number": 4, - "lesson_title": "Lesson 4: Review Numbers and Colors", - "lesson_type": "json_content", - "lesson_description": "Review numbers 1-10 and colors", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": ["review numbers 1-10", "review colors"] - } - }, - { - "chapter_id": "uuid_chapter_6", - "lesson_number": 5, - "lesson_title": "Lesson 5: Review Food and Drinks", - "lesson_type": "json_content", - "lesson_description": "Review numbers 1-10 and colors", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": ["review numbers 1-10", "review colors"] - } - }, - { - "chapter_id": "uuid_chapter_6", - "lesson_number": 6, - "lesson_title": "Lesson 6: Challenge", - "lesson_type": "json_content", - "lesson_description": "Review unit 6 and check understanding", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review unit 6", - "check their understanding about food and drinks" - ] - } - }, - { - "chapter_id": "uuid_chapter_6", - "lesson_number": 7, - "lesson_title": "Lesson 7: Fun Time", - "lesson_type": "json_content", - "lesson_description": "Review food and drinks, draw and write", - "lesson_content_type": "review", - "content_json": { - "type": "activity", - "learning_objectives": [ - "review food and drinks", - "draw and write food and drinks" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g2/unit4.json b/data/moveup/g2/unit4.json deleted file mode 100644 index e64afe3..0000000 --- a/data/moveup/g2/unit4.json +++ /dev/null @@ -1,105 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_4_grade2", - "lesson_number": 1, - "lesson_title": "Lesson 1: Transportation Words", - "lesson_type": "json_content", - "lesson_description": "Review transportation words and identify 4 more", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "review transportation words", - "identify 4 more transportation words" - ], - "vocabulary": ["ambulance", "tricycle", "subway", "helicopter"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade2", - "lesson_number": 2, - "lesson_title": "Lesson 2: Describing Transportation", - "lesson_type": "json_content", - "lesson_description": "Describe transportation and improve integrated skills", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "review how to describe their means of transportation for going to school", - "describe how they move", - "improve integrated skills" - ], - "grammar": "I go to the park with my family by tricycle." - } - }, - { - "chapter_id": "uuid_chapter_4_grade2", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters W & X", - "lesson_type": "json_content", - "lesson_description": "Recognize letters W, X and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize and trace the uppercase and lowercase forms of the letter W and X", - "pronounce the sound /w/ and /s/ on its own and at the beginning of words", - "be familiar with the letter name for W and X" - ], - "letters": ["W", "X"], - "sounds": ["/w/", "/s/"], - "vocabulary": ["water", "watch", "fox", "six"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade2", - "lesson_number": 4, - "lesson_title": "Lesson 4: Letters Y & Z", - "lesson_type": "json_content", - "lesson_description": "Recognize letters Y, Z and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize and trace the uppercase and lowercase forms of the letter Y and Z", - "pronounce these sounds on its own and at the beginning of words", - "be familiar with the letter name for Y and Z" - ], - "letters": ["Y", "Z"], - "sounds": ["/j/", "/z/"], - "vocabulary": ["yacht", "yak", "zoo", "zipper"] - } - }, - { - "chapter_id": "uuid_chapter_4_grade2", - "lesson_number": 5, - "lesson_title": "Lesson 5: Review Unit 4", - "lesson_type": "json_content", - "lesson_description": "Review transportation words and letters", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review Unit 4", - "review transportation words", - "review letters and sounds Ww, Xx, Yy, Zz" - ] - } - }, - { - "chapter_id": "uuid_chapter_4_grade2", - "lesson_number": 6, - "lesson_title": "Lesson 6: Challenge", - "lesson_type": "json_content", - "lesson_description": "Review Unit 4 content", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review Unit 4", - "review transportation words", - "review letters and sounds Ww, Xx, Yy, Zz" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g2/unit5.json b/data/moveup/g2/unit5.json deleted file mode 100644 index 30a91d0..0000000 --- a/data/moveup/g2/unit5.json +++ /dev/null @@ -1,100 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_5_grade2", - "lesson_number": 1, - "lesson_title": "Lesson 1: Things in the Park", - "lesson_type": "json_content", - "lesson_description": "Review park things and identify 4 more", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "review things in the park words", - "identify 4 more things in the park words" - ], - "vocabulary": ["picnic table", "bench", "swing", "bin"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade2", - "lesson_number": 2, - "lesson_title": "Lesson 2: Park Questions", - "lesson_type": "json_content", - "lesson_description": "Ask and answer questions about locations", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "review how to ask and answer Where's the...? It's on the...", - "ask and answer Yes/No questions", - "improve integrated skills" - ], - "grammar": "Is the Frisbee in the tree? Yes, it is/ No, it isn't." - } - }, - { - "chapter_id": "uuid_chapter_5_grade2", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters N to U", - "lesson_type": "json_content", - "lesson_description": "Recognize letters N to U and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize and trace the uppercase and lowercase forms of the letters N to U", - "pronounce the sounds on their own and at the beginning of words", - "be familiar with the letter name for N, O, P, Q, R, S, T and U" - ], - "letters": ["N", "O", "P", "Q", "R", "S", "T", "U"], - "sounds": ["/n/", "/ɒ/", "/p/", "/kw/", "/r/", "/s/", "/t/", "/ʌ/"], - "vocabulary": ["nest", "ostrich", "panda", "quick", "river", "sun", "ten", "umpire"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade2", - "lesson_number": 4, - "lesson_title": "Lesson 4: Final Sounds", - "lesson_type": "json_content", - "lesson_description": "Recognize final sounds /n/, /p/, /r/, /s/, /t/", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": ["recognize the final sounds /n/, /p/, /r/, /s/, and /t/"], - "sounds": ["/n/", "/p/", "/r/", "/s/", "/t/"], - "vocabulary": ["fan", "cup", "bear", "grass", "bat"] - } - }, - { - "chapter_id": "uuid_chapter_5_grade2", - "lesson_number": 5, - "lesson_title": "Lesson 5: Review Unit 5", - "lesson_type": "json_content", - "lesson_description": "Review park things and letters", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review Unit 5", - "review thing words in the park", - "review letters and sounds" - ] - } - }, - { - "chapter_id": "uuid_chapter_5_grade2", - "lesson_number": 6, - "lesson_title": "Lesson 6: Challenge", - "lesson_type": "json_content", - "lesson_description": "Review Unit 5 content", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review Unit 5", - "review transportation words", - "review letters and sounds Nn – Uu" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g2/unit6.json b/data/moveup/g2/unit6.json deleted file mode 100644 index c57377b..0000000 --- a/data/moveup/g2/unit6.json +++ /dev/null @@ -1,101 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_6_grade2", - "lesson_number": 1, - "lesson_title": "Lesson 1: Places in a Home", - "lesson_type": "json_content", - "lesson_description": "Review home places and identify 4 more", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "review different places in a home", - "identify 4 more different places in a home" - ], - "vocabulary": ["laundry room", "basement", "garage", "balcony"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade2", - "lesson_number": 2, - "lesson_title": "Lesson 2: Home Questions and Prepositions", - "lesson_type": "json_content", - "lesson_description": "Ask about locations and identify prepositions", - "lesson_content_type": "mixed", - "content_json": { - "type": "mixed", - "learning_objectives": [ - "review how to ask and answer Where's the...? It's on the...", - "identify preposition of places", - "improve integrated skills" - ], - "vocabulary": ["in front of", "behind", "next to", "between"], - "grammar": "Where is the juice? It's on the table.\nIs the bat between the duck and the cat? Yes, it is./ No, it isn't." - } - }, - { - "chapter_id": "uuid_chapter_6_grade2", - "lesson_number": 3, - "lesson_title": "Lesson 3: Letters V, W, Y, Z", - "lesson_type": "json_content", - "lesson_description": "Recognize letters V, W, Y, Z and their sounds", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": [ - "recognize and trace the uppercase and lowercase forms of the letters Vv, Ww, Yy and Zz", - "pronounce the sounds on their own and at the beginning of words", - "be familiar with the letter name for V, W, Y and Z" - ], - "letters": ["V", "W", "Y", "Z"], - "sounds": ["/v/", "/w/", "/j/", "/z/"], - "vocabulary": ["violin", "wand", "yoghurt", "zebrafish"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade2", - "lesson_number": 4, - "lesson_title": "Lesson 4: Final Sounds /ks/, /z/", - "lesson_type": "json_content", - "lesson_description": "Recognize final sounds /ks/ and /z/", - "lesson_content_type": "phonics", - "content_json": { - "type": "phonics", - "learning_objectives": ["recognize the final sounds /ks/, /z/"], - "sounds": ["/ks/", "/z/"], - "vocabulary": ["mailbox", "sax", "quiz", "topaz"] - } - }, - { - "chapter_id": "uuid_chapter_6_grade2", - "lesson_number": 5, - "lesson_title": "Lesson 5: Review Unit 6", - "lesson_type": "json_content", - "lesson_description": "Review home places and letters", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review Unit 6", - "review different places in a home", - "review letters and sounds" - ] - } - }, - { - "chapter_id": "uuid_chapter_6_grade2", - "lesson_number": 6, - "lesson_title": "Lesson 6: Challenge", - "lesson_type": "json_content", - "lesson_description": "Review Unit 6 content", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review Unit 6", - "review different places in a home", - "review letters and sounds Vv – Zz" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g3/unit10.json b/data/moveup/g3/unit10.json deleted file mode 100644 index 8083afd..0000000 --- a/data/moveup/g3/unit10.json +++ /dev/null @@ -1,39 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_10_grade3", - "lesson_number": 1, - "lesson_title": "Lesson 1: Outdoor Activities", - "lesson_type": "json_content", - "lesson_description": "Identify phrases about outdoor activities and understand a story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify the phrases about outdoor activities", - "understand a story" - ], - "vocabulary": ["play on the swing", "ride a bike", "have a picnic", "fly a kite"] - } - }, - { - "chapter_id": "uuid_chapter_10_grade3", - "lesson_number": 2, - "lesson_title": "Lesson 2: Asking for Permission", - "lesson_type": "json_content", - "lesson_description": "Ask for and give permission", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": ["ask for and give permission"], - "grammar": "Can I play on the swing? Yes, you can.\nCan I ride a bike? No, you can't." - } - }, - { - "chapter_id": "uuid_chapter_10_grade3", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Exam preparation for Unit 10", - "lesson_content_type": "review" - } -] \ No newline at end of file diff --git a/data/moveup/g3/unit11.json b/data/moveup/g3/unit11.json deleted file mode 100644 index 45fb451..0000000 --- a/data/moveup/g3/unit11.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_11_grade3", - "lesson_number": 1, - "lesson_title": "Lesson 1: Things in the House", - "lesson_type": "json_content", - "lesson_description": "Identify things in the house and understand a story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify things in the house", - "understand a story" - ], - "vocabulary": ["clock", "mirror", "picture", "lamp", "cupboard"] - } - }, - { - "chapter_id": "uuid_chapter_11_grade3", - "lesson_number": 2, - "lesson_title": "Lesson 2: Questions About Quantity", - "lesson_type": "json_content", - "lesson_description": "Ask and answer questions about the quantity of things", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "ask and answer questions about the quantity of things" - ], - "grammar": "How many clocks are there? There is one clock.\nHow many pictures are there? There are three pictures." - } - }, - { - "chapter_id": "uuid_chapter_11_grade3", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Exam preparation for Unit 11", - "lesson_content_type": "review" - } -] \ No newline at end of file diff --git a/data/moveup/g3/unit12.json b/data/moveup/g3/unit12.json deleted file mode 100644 index 5f9b2df..0000000 --- a/data/moveup/g3/unit12.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_12_grade3", - "lesson_number": 1, - "lesson_title": "Lesson 1: Action Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary about actions and understand a story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify the vocabulary about the actions", - "understand a story" - ], - "vocabulary": ["learn", "read", "write", "spell", "draw"] - } - }, - { - "chapter_id": "uuid_chapter_12_grade3", - "lesson_number": 2, - "lesson_title": "Lesson 2: Questions About Abilities", - "lesson_type": "json_content", - "lesson_description": "Ask and answer questions about someone's abilities", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "ask and answer questions about someone's abilities", - "match the words with the correct pictures" - ], - "grammar": "Can you spell your name? Yes, I can.\nCan you draw a picture? No, I can't." - } - }, - { - "chapter_id": "uuid_chapter_12_grade3", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Exam preparation for Unit 12", - "lesson_content_type": "review" - } -] \ No newline at end of file diff --git a/data/moveup/g3/unit7.json b/data/moveup/g3/unit7.json deleted file mode 100644 index 4bfd694..0000000 --- a/data/moveup/g3/unit7.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_7_grade3", - "lesson_number": 1, - "lesson_title": "Lesson 1: Clothing Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify different types of clothing and understand a story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify different types of clothing", - "understand a story" - ], - "vocabulary": ["baseball caps", "jackets", "trousers", "glasses"] - } - }, - { - "chapter_id": "uuid_chapter_7_grade3", - "lesson_number": 2, - "lesson_title": "Lesson 2: Talking About Clothing", - "lesson_type": "json_content", - "lesson_description": "Talk about what people are wearing and match sentences with pictures", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "talk about what people are wearing", - "read and match the sentences with the correct pictures" - ], - "grammar": "What are they wearing? They're wearing baseball caps." - } - }, - { - "chapter_id": "uuid_chapter_7_grade3", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Exam preparation for Unit 7", - "lesson_content_type": "review" - } -] \ No newline at end of file diff --git a/data/moveup/g3/unit8.json b/data/moveup/g3/unit8.json deleted file mode 100644 index 35bc75e..0000000 --- a/data/moveup/g3/unit8.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_8_grade3", - "lesson_number": 1, - "lesson_title": "Lesson 1: Activities Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify different activities people are doing and understand a story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify different activities people are doing", - "understand a story" - ], - "vocabulary": ["drink milk", "make a cake", "listen to music", "play drums"] - } - }, - { - "chapter_id": "uuid_chapter_8_grade3", - "lesson_number": 2, - "lesson_title": "Lesson 2: Questions About Activities", - "lesson_type": "json_content", - "lesson_description": "Ask and answer questions about what people are doing", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "ask and answer questions about what people are doing", - "read and number the sentences with suitable pictures" - ], - "grammar": "What are they doing? They are making a cake." - } - }, - { - "chapter_id": "uuid_chapter_8_grade3", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Exam preparation for Unit 8", - "lesson_content_type": "review" - } -] \ No newline at end of file diff --git a/data/moveup/g3/unit9.json b/data/moveup/g3/unit9.json deleted file mode 100644 index 1ed6003..0000000 --- a/data/moveup/g3/unit9.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_9_grade3", - "lesson_number": 1, - "lesson_title": "Lesson 1: Abilities Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary about animal's ability or someone's ability", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify the vocabulary about animal's ability or someone's ability", - "understand a story" - ], - "vocabulary": ["swim", "climb a tree", "draw a picture", "bounce a ball"] - } - }, - { - "chapter_id": "uuid_chapter_9_grade3", - "lesson_number": 2, - "lesson_title": "Lesson 2: Questions About Abilities", - "lesson_type": "json_content", - "lesson_description": "Ask and answer questions about animal's ability or someone's ability", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "ask and answer questions about an animal's ability or someone's ability", - "read and tick the correct answers about animal's ability or someone's ability" - ], - "grammar": "Can the duck swim? Yes, it can.\nCan it climb the tree? No, it can't." - } - }, - { - "chapter_id": "uuid_chapter_9_grade3", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Exam preparation for Unit 9", - "lesson_content_type": "review" - } -] \ No newline at end of file diff --git a/data/moveup/g4/unit10.json b/data/moveup/g4/unit10.json deleted file mode 100644 index a9dc8a5..0000000 --- a/data/moveup/g4/unit10.json +++ /dev/null @@ -1,50 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_10_grade4", - "lesson_number": 1, - "lesson_title": "Lesson 1: Frog Life Cycle", - "lesson_type": "json_content", - "lesson_description": "Identify frog life cycle and understand a short story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify frog life cycle", - "understand a short story" - ], - "vocabulary": ["egg", "tadpole", "tadpole with legs", "froglet", "mature frog"] - } - }, - { - "chapter_id": "uuid_chapter_10_grade4", - "lesson_number": 2, - "lesson_title": "Lesson 2: Using Is/Was", - "lesson_type": "json_content", - "lesson_description": "Use is/was in sentences about life cycles", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify frog life cycle", - "review adjectives", - "use is/was in sentences" - ], - "grammar": "A frog was a tadpole before." - } - }, - { - "chapter_id": "uuid_chapter_10_grade4", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Review previous lessons", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review previous lessons", - "listen for specific information" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g4/unit11.json b/data/moveup/g4/unit11.json deleted file mode 100644 index 27140db..0000000 --- a/data/moveup/g4/unit11.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_11_grade4", - "lesson_number": 1, - "lesson_title": "Lesson 1: Past Tense Verbs", - "lesson_type": "json_content", - "lesson_description": "Identify action verbs and understand a short story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify action verbs", - "understand a short story" - ], - "vocabulary": ["cast/ cast", "lose/ lost", "tell/ told", "think/ thought", "break/ broke"] - } - }, - { - "chapter_id": "uuid_chapter_11_grade4", - "lesson_number": 2, - "lesson_title": "Lesson 2: Simple Past Tense", - "lesson_type": "json_content", - "lesson_description": "Use verbs in simple past tense", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "review action verbs", - "use verbs in simple past tense" - ], - "grammar": "What did she do yesterday? She told a story to her daughter" - } - }, - { - "chapter_id": "uuid_chapter_11_grade4", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Review previous lessons", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review previous lessons", - "listen for specific information" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g4/unit12.json b/data/moveup/g4/unit12.json deleted file mode 100644 index 63a7efe..0000000 --- a/data/moveup/g4/unit12.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_12_grade4", - "lesson_number": 1, - "lesson_title": "Lesson 1: Descriptive Adjectives", - "lesson_type": "json_content", - "lesson_description": "Identify adjectives to describe people and understand a short story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify different adjectives to describe people", - "understand a short story" - ], - "vocabulary": ["fast", "slow", "big", "small", "cute"] - } - }, - { - "chapter_id": "uuid_chapter_12_grade4", - "lesson_number": 2, - "lesson_title": "Lesson 2: Comparative Adjectives", - "lesson_type": "json_content", - "lesson_description": "Use comparative adjectives in sentences", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "review adjectives", - "use comparative adjectives in sentences" - ], - "grammar": "I was faster than my friends." - } - }, - { - "chapter_id": "uuid_chapter_12_grade4", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Review previous lessons", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review previous lessons", - "listen for specific information" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g4/unit7.json b/data/moveup/g4/unit7.json deleted file mode 100644 index 4f5a0d2..0000000 --- a/data/moveup/g4/unit7.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_7_grade4", - "lesson_number": 1, - "lesson_title": "Lesson 1: Activities Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify different activities and understand a short story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify different activities", - "understand a short story" - ], - "vocabulary": ["singing karaoke", "taking photos", "inviting friends", "having some fun"] - } - }, - { - "chapter_id": "uuid_chapter_7_grade4", - "lesson_number": 2, - "lesson_title": "Lesson 2: Present Progressive Tense", - "lesson_type": "json_content", - "lesson_description": "Use present progressive tense in sentences", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify different activities", - "use present progressive tense in sentences" - ], - "grammar": "I'm singing karaoke next week." - } - }, - { - "chapter_id": "uuid_chapter_7_grade4", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Review different activities and things about birthdays", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review different activities and things about birthdays", - "find the correct answers" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g4/unit8.json b/data/moveup/g4/unit8.json deleted file mode 100644 index 6fe37eb..0000000 --- a/data/moveup/g4/unit8.json +++ /dev/null @@ -1,50 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_8_grade4", - "lesson_number": 1, - "lesson_title": "Lesson 1: Cultural Activities", - "lesson_type": "json_content", - "lesson_description": "Identify different activities and understand a short story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify different activities", - "understand a short story" - ], - "vocabulary": ["dance in traditional dresses", "pour water on the Buddha statue", "clean Buddha statue", "water fight"] - } - }, - { - "chapter_id": "uuid_chapter_8_grade4", - "lesson_number": 2, - "lesson_title": "Lesson 2: Talking About Likes", - "lesson_type": "json_content", - "lesson_description": "Talk about likes", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify different activities", - "talk about likes" - ], - "grammar": "He likes water fights." - } - }, - { - "chapter_id": "uuid_chapter_8_grade4", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Review different activities and understand the invitation", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review different activities", - "answer questions", - "understand the invitation" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g4/unit9.json b/data/moveup/g4/unit9.json deleted file mode 100644 index bd029c5..0000000 --- a/data/moveup/g4/unit9.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_9_grade4", - "lesson_number": 1, - "lesson_title": "Lesson 1: Daily Routines and Time", - "lesson_type": "json_content", - "lesson_description": "Identify everyday actions and understand a short story", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify everyday actions", - "understand a short story" - ], - "vocabulary": ["quarter past", "half past", "quarter to", "have a shower", "set the table", "wash the dishes", "take out the trash"] - } - }, - { - "chapter_id": "uuid_chapter_9_grade4", - "lesson_number": 2, - "lesson_title": "Lesson 2: Daily Routine Questions", - "lesson_type": "json_content", - "lesson_description": "Ask and answer about daily routines", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify everyday actions", - "ask and answer what they do at different times of the day" - ], - "grammar": "Do you have a shower at half past seven every day? Yes, I do. / No, I don't. I wash the dishes at half past seven." - } - }, - { - "chapter_id": "uuid_chapter_9_grade4", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation", - "lesson_type": "json_content", - "lesson_description": "Review everyday actions", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review everyday actions", - "listen and tick the correct answers" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g5/unit10.json b/data/moveup/g5/unit10.json deleted file mode 100644 index 813f367..0000000 --- a/data/moveup/g5/unit10.json +++ /dev/null @@ -1,64 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_10_grade5", - "lesson_number": 1, - "lesson_title": "Lesson 1: Illness Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary related to illness", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify vocabulary related to illness", - "understand a story" - ], - "vocabulary": ["see a doctor", "go to the dentist's", "have a runny nose", "have a flu", "take medicine", "take a rest"] - } - }, - { - "chapter_id": "uuid_chapter_10_grade5", - "lesson_number": 2, - "lesson_title": "Lesson 2: Asking for and Giving Advice", - "lesson_type": "json_content", - "lesson_description": "Ask for and give advice using should", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify how to ask for and give advice", - "use the patterns in actual communication" - ], - "grammar": "You should … / What should I do?" - } - }, - { - "chapter_id": "uuid_chapter_10_grade5", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation - Illness and Advice", - "lesson_type": "json_content", - "lesson_description": "Review language items and improve skills", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review the language items learnt", - "improve listening and speaking skills" - ] - } - }, - { - "chapter_id": "uuid_chapter_10_grade5", - "lesson_number": 4, - "lesson_title": "Lesson 4: Review and Practice", - "lesson_type": "json_content", - "lesson_description": "Review language items and improve skills", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review the language items learnt", - "improve reading and writing skills" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g5/unit11.json b/data/moveup/g5/unit11.json deleted file mode 100644 index aa18990..0000000 --- a/data/moveup/g5/unit11.json +++ /dev/null @@ -1,64 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_11_grade5", - "lesson_number": 1, - "lesson_title": "Lesson 1: Housework Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary related to daily routines and housework", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify vocabulary related to daily routines and housework", - "understand a story" - ], - "vocabulary": ["have a meeting", "arrive home", "clean the house", "dust the furniture", "do the laundry", "iron the clothes"] - } - }, - { - "chapter_id": "uuid_chapter_11_grade5", - "lesson_number": 2, - "lesson_title": "Lesson 2: Simple Future Tense", - "lesson_type": "json_content", - "lesson_description": "Use simple future tense with will", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify simple future of regular verbs", - "use the patterns in actual communication" - ], - "grammar": "What will he do? He'll … / Will you …? Yes/No, …" - } - }, - { - "chapter_id": "uuid_chapter_11_grade5", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation - Future Tense", - "lesson_type": "json_content", - "lesson_description": "Review language items and improve skills", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review the language items learnt", - "improve listening, reading and speaking skills" - ] - } - }, - { - "chapter_id": "uuid_chapter_11_grade5", - "lesson_number": 4, - "lesson_title": "Lesson 4: Skills Practice", - "lesson_type": "json_content", - "lesson_description": "Review language items and improve skills", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review the language items learnt", - "improve reading and speaking skills" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g5/unit12.json b/data/moveup/g5/unit12.json deleted file mode 100644 index cc01c4e..0000000 --- a/data/moveup/g5/unit12.json +++ /dev/null @@ -1,64 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_12_grade5", - "lesson_number": 1, - "lesson_title": "Lesson 1: Entertainment Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary related to entertainment and technology", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify vocabulary related to entertainment and technology", - "understand a story" - ], - "vocabulary": ["game show", "documentary", "comedy", "concert", "art gallery", "circus"] - } - }, - { - "chapter_id": "uuid_chapter_12_grade5", - "lesson_number": 2, - "lesson_title": "Lesson 2: Be Going To Future", - "lesson_type": "json_content", - "lesson_description": "Use be going to for future plans", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify simple future 'be going to'", - "use the patterns in actual communication" - ], - "grammar": "What is he going to do next weekend? He's going to …." - } - }, - { - "chapter_id": "uuid_chapter_12_grade5", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation - Future Plans", - "lesson_type": "json_content", - "lesson_description": "Review language items and improve skills", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review the language items learnt", - "improve listening, reading and speaking skills" - ] - } - }, - { - "chapter_id": "uuid_chapter_12_grade5", - "lesson_number": 4, - "lesson_title": "Lesson 4: Review and Writing Practice", - "lesson_type": "json_content", - "lesson_description": "Review language items and improve skills", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review the language items learnt", - "improve reading and writing skills" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g5/unit7.json b/data/moveup/g5/unit7.json deleted file mode 100644 index 85618d5..0000000 --- a/data/moveup/g5/unit7.json +++ /dev/null @@ -1,66 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_7_grade5", - "lesson_number": 1, - "lesson_title": "Lesson 1: Travel and Vacation Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary related to travel and vacation", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify and pronounce new vocabulary related to travel and vacation", - "understand a short dialogue about vacation experiences" - ], - "vocabulary": ["postcard", "gift shop", "suitcase", "forget", "bring", "send"] - } - }, - { - "chapter_id": "uuid_chapter_7_grade5", - "lesson_number": 2, - "lesson_title": "Lesson 2: Simple Past Tense - Irregular Verbs", - "lesson_type": "json_content", - "lesson_description": "Use simple past tense with irregular verbs", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify the simple past tense of common irregular verbs", - "use irregular verbs correctly in simple sentences" - ], - "grammar": "S + Irregular Verb (Past form) + O. Example: She sent some postcards to her friends when she was on vacation" - } - }, - { - "chapter_id": "uuid_chapter_7_grade5", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation - Past Tense", - "lesson_type": "json_content", - "lesson_description": "Review simple past tense and listening skills", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review vocabulary and simple past grammar structures", - "improve listening skills", - "identify key information in dialogues" - ] - } - }, - { - "chapter_id": "uuid_chapter_7_grade5", - "lesson_number": 4, - "lesson_title": "Lesson 4: Travel Questions Practice", - "lesson_type": "json_content", - "lesson_description": "Review travel vocabulary and WH-questions in past tense", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review vocabulary and simple past grammar structures", - "improve reading skills", - "apply simple past tense in conversational context" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g5/unit8.json b/data/moveup/g5/unit8.json deleted file mode 100644 index 5433213..0000000 --- a/data/moveup/g5/unit8.json +++ /dev/null @@ -1,64 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_8_grade5", - "lesson_number": 1, - "lesson_title": "Lesson 1: Structures Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary related to natural and man-made structures", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify and pronounce new vocabulary related to structures", - "understand a short dialogue discussing superlatives" - ], - "vocabulary": ["bridge", "castle", "cave", "desert", "pond"] - } - }, - { - "chapter_id": "uuid_chapter_8_grade5", - "lesson_number": 2, - "lesson_title": "Lesson 2: Superlative Adjectives", - "lesson_type": "json_content", - "lesson_description": "Use superlative forms to ask and answer questions", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify and formulate the superlative form of adjectives", - "use superlative structures to ask and answer questions" - ], - "grammar": "What's the + Superlative + Noun + in the world/family/country? It's + Proper Noun / It's + Adjective + Noun." - } - }, - { - "chapter_id": "uuid_chapter_8_grade5", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation - Superlatives", - "lesson_type": "json_content", - "lesson_description": "Review superlative grammar structures", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review vocabulary and superlative grammar structures", - "improve listening and reading skills" - ] - } - }, - { - "chapter_id": "uuid_chapter_8_grade5", - "lesson_number": 4, - "lesson_title": "Lesson 4: Reading Comprehension with Superlatives", - "lesson_type": "json_content", - "lesson_description": "Apply superlative structures in extended reading contexts", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review superlative structures in reading contexts", - "improve reading comprehension skills" - ] - } - } -] \ No newline at end of file diff --git a/data/moveup/g5/unit9.json b/data/moveup/g5/unit9.json deleted file mode 100644 index 799deea..0000000 --- a/data/moveup/g5/unit9.json +++ /dev/null @@ -1,64 +0,0 @@ -[ - { - "chapter_id": "uuid_chapter_9_grade5", - "lesson_number": 1, - "lesson_title": "Lesson 1: Public Place Rules Vocabulary", - "lesson_type": "json_content", - "lesson_description": "Identify vocabulary related to rules in public places", - "lesson_content_type": "vocabulary", - "content_json": { - "type": "vocabulary", - "learning_objectives": [ - "identify and pronounce vocabulary phrases related to rules", - "understand a dialogue about movie theater rules" - ], - "vocabulary": ["throw garbage", "have a seat", "bring food", "stand in line", "talk on the phone", "record a movie"] - } - }, - { - "chapter_id": "uuid_chapter_9_grade5", - "lesson_number": 2, - "lesson_title": "Lesson 2: Adverbs of Manner", - "lesson_type": "json_content", - "lesson_description": "Use adverbs of manner to describe actions", - "lesson_content_type": "grammar", - "content_json": { - "type": "grammar", - "learning_objectives": [ - "identify and formulate adverbs of manner", - "use adverbs of manner correctly to describe actions" - ], - "grammar": "Adverbs of Manner: carefully, quietly, quickly, loudly, neatly, fast" - } - }, - { - "chapter_id": "uuid_chapter_9_grade5", - "lesson_number": 3, - "lesson_title": "Lesson 3: Exam Preparation - Rules and Adverbs", - "lesson_type": "json_content", - "lesson_description": "Review vocabulary and grammar from Unit 9", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review vocabulary and grammar structures", - "improve listening skills" - ] - } - }, - { - "chapter_id": "uuid_chapter_9_grade5", - "lesson_number": 4, - "lesson_title": "Lesson 4: Vocabulary and Sentence Completion", - "lesson_type": "json_content", - "lesson_description": "Review vocabulary and phrases for sentence completion", - "lesson_content_type": "review", - "content_json": { - "type": "review", - "learning_objectives": [ - "review vocabulary and phrases", - "improve reading and vocabulary skills" - ] - } - } -] \ No newline at end of file diff --git a/data/template.md b/data/template.md new file mode 100644 index 0000000..55f69ca --- /dev/null +++ b/data/template.md @@ -0,0 +1,33 @@ +Hãy phân tích các tài liệu giáo án Tiếng Anh mà tôi cung cấp và tổng hợp thành JSON với các thông tin sau: + +Định dạng mã bài học (grade): "GGUULL" +- GG: mã lớp học (ví dụ: 01, 04) +- UU: số unit (ví dụ: 01, 00 cho Starter Unit) +- LL: số lesson tịnh tiến liên tục từ 01 (bao gồm tất cả các bài học, culture, review trong unit) + +Nội dung mỗi entry trong mảng JSON: +- grade: (string) mã bài học theo định dạng trên. +- vocab: (array) danh sách từ vựng cốt lõi, đơn lẻ cần học. ++ LOẠI TRỪ: Không bao gồm tên riêng của người (ví dụ: Rosy, Nam, Vy). ++ LOẠI TRỪ: Nếu là một cụm từ (ví dụ: "brown hair", "green eyes"), hãy chuyển nội dung đó xuống mục grammar. ++ CHỈ BAO GỒM: Danh từ chung, tính từ, động từ cơ bản, số đếm. +- phonics: (array) danh sách phát âm/phiên âm hoặc null nếu không có. +- grammar: (array) danh sách cấu trúc ngữ pháp, mẫu câu, cụm từ ví dụ. ++ BAO GỒM: Các cụm từ/từ ghép đã loại khỏi vocab. ++ BAO GỒM: Các câu mẫu hoàn chỉnh hoặc cấu trúc có chỗ trống. ++ BAO GỒM: Các tiêu đề/cụm từ cố định trong bài (ví dụ: "Brothers and Sisters", "True or False?"). +- target: (string) mục tiêu học tập chính, được tóm tắt từ giáo án. Target nên là tiếng anh + +Nguyên tắc sắp xếp: +Sắp xếp các lesson theo thứ tự xuất hiện trong giáo án (từ 1 đến n). + +Đây là JSON mẫu: +[ + { + "grade": "010101", + "vocab": ["red", "green", "blue", "black", "yellow"], + "phonics": null, + "grammar": [], + "target" : "" + } +] \ No newline at end of file diff --git a/delete-all-context.js b/delete-all-context.js new file mode 100644 index 0000000..411ac34 --- /dev/null +++ b/delete-all-context.js @@ -0,0 +1,165 @@ +/** + * Delete all or specific Context records from database + * WARNING: This will permanently delete data! + */ + +const { sequelize } = require('./config/database'); +const { Context } = require('./models'); + +// ============================================ +// CONFIGURATION +// ============================================ + +const DELETE_MODE = 'all'; // Options: 'all', 'vocabulary_only', 'by_type' + +// For 'by_type' mode - specify which type to delete +const TYPE_TO_DELETE = 'vocabulary'; // e.g., 'vocabulary', 'grammar', etc. + +// For safety confirmation +const CONFIRM_DELETE = true; // Set to true to actually delete + +// ============================================ +// MAIN FUNCTIONS +// ============================================ + +async function deleteAllContext() { + console.log('🗑️ Deleting ALL context records...'); + + const count = await Context.count(); + console.log(`📊 Found ${count} records to delete`); + + if (!CONFIRM_DELETE) { + console.log('⚠️ CONFIRM_DELETE is false. Set it to true to proceed.'); + return 0; + } + + const result = await Context.destroy({ + where: {}, + truncate: true + }); + + console.log(`✅ Deleted all context records`); + return count; +} + +async function deleteVocabularyOnly() { + console.log('🗑️ Deleting vocabulary context records only...'); + + const count = await Context.count({ + where: { type: 'vocabulary' } + }); + console.log(`📊 Found ${count} vocabulary records to delete`); + + if (!CONFIRM_DELETE) { + console.log('⚠️ CONFIRM_DELETE is false. Set it to true to proceed.'); + return 0; + } + + const result = await Context.destroy({ + where: { type: 'vocabulary' } + }); + + console.log(`✅ Deleted ${result} vocabulary records`); + return result; +} + +async function deleteByType(type) { + console.log(`🗑️ Deleting context records with type: ${type}...`); + + const count = await Context.count({ + where: { type: type } + }); + console.log(`📊 Found ${count} records to delete`); + + if (!CONFIRM_DELETE) { + console.log('⚠️ CONFIRM_DELETE is false. Set it to true to proceed.'); + return 0; + } + + const result = await Context.destroy({ + where: { type: type } + }); + + console.log(`✅ Deleted ${result} records with type '${type}'`); + return result; +} + +async function showStats() { + console.log('\n📊 Current Context Statistics:'); + + const total = await Context.count(); + console.log(`Total records: ${total}`); + + // Count by type + const types = await sequelize.query( + 'SELECT type, COUNT(*) as count FROM context GROUP BY type', + { type: sequelize.QueryTypes.SELECT } + ); + + console.log('\nBy Type:'); + types.forEach(t => { + console.log(` - ${t.type}: ${t.count}`); + }); + + return total; +} + +// ============================================ +// MAIN EXECUTION +// ============================================ + +async function main() { + try { + console.log('🔄 Starting Context deletion script...\n'); + + await sequelize.authenticate(); + console.log('✅ Database connection OK\n'); + + // Show current stats + await showStats(); + console.log('\n---\n'); + + let result = 0; + + switch (DELETE_MODE) { + case 'all': + result = await deleteAllContext(); + break; + + case 'vocabulary_only': + result = await deleteVocabularyOnly(); + break; + + case 'by_type': + result = await deleteByType(TYPE_TO_DELETE); + break; + + default: + console.log('❌ Invalid DELETE_MODE'); + } + + console.log('\n---\n'); + + // Show stats after deletion + await showStats(); + + console.log('\n✅ Operation complete!'); + console.log(`📊 Records deleted: ${result}`); + + process.exit(0); + } catch (error) { + console.error('❌ Error during deletion:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +// Safety check +if (!CONFIRM_DELETE) { + console.log('\n⚠️ WARNING: CONFIRM_DELETE is set to false'); + console.log('This is a DRY RUN. No data will be deleted.'); + console.log('Set CONFIRM_DELETE = true to actually delete data.\n'); +} + +// Run the script +main(); diff --git a/import-vocab-to-context.js b/import-vocab-to-context.js new file mode 100644 index 0000000..d5f6bdb --- /dev/null +++ b/import-vocab-to-context.js @@ -0,0 +1,119 @@ +/** + * Import vocabulary from JSON files into Context table + * Each vocab word will become a Context record with: + * - title: the vocabulary word + * - grade: the grade/unit/lesson code (e.g., 101, 102, etc.) + * - type: 'vocabulary' + */ + +const { sequelize } = require('./config/database'); +const { Context } = require('./models'); +const fs = require('fs'); +const path = require('path'); + +// Configuration +const DATA_DIR = path.join(__dirname, 'data', 'moveup'); +const GRADES = ['g1', 'g2', 'g3', 'g4', 'g5']; + +async function importVocabToContext() { + try { + console.log('🔄 Starting vocab import to Context table...'); + + await sequelize.authenticate(); + console.log('✅ Database connection OK'); + + let totalImported = 0; + let totalSkipped = 0; + + // Process each grade folder + for (const gradeFolder of GRADES) { + const gradeDir = path.join(DATA_DIR, gradeFolder); + + if (!fs.existsSync(gradeDir)) { + console.log(`⚠️ Directory not found: ${gradeDir}`); + continue; + } + + // Get all JSON files in the grade directory + const jsonFiles = fs.readdirSync(gradeDir).filter(f => f.endsWith('.json')); + + console.log(`\n📂 Processing ${gradeFolder.toUpperCase()} (${jsonFiles.length} files)...`); + + for (const jsonFile of jsonFiles) { + const filePath = path.join(gradeDir, jsonFile); + console.log(` 📄 Reading ${jsonFile}...`); + + try { + const data = JSON.parse(fs.readFileSync(filePath, 'utf8')); + + if (!Array.isArray(data)) { + console.log(` ⚠️ Skipping ${jsonFile}: not an array`); + continue; + } + + // Process each lesson/unit entry + for (const entry of data) { + const { grade, vocab } = entry; + + if (!grade || !vocab || !Array.isArray(vocab)) { + continue; + } + + console.log(` 📚 Grade ${grade}: ${vocab.length} vocab words`); + + // Import each vocabulary word + for (const word of vocab) { + if (!word || word.trim() === '') { + continue; + } + + try { + // Check if this vocab already exists for this grade + const existing = await Context.findOne({ + where: { + title: word.trim(), + type: 'vocabulary' + } + }); + + if (existing) { + totalSkipped++; + continue; + } + + // Create new context entry for this vocab + await Context.create({ + title: word.trim(), + grade: parseInt(grade), + type: 'vocabulary', + context: `Vocabulary word for grade ${grade}`, + knowledge: null, + desc: null + }); + + totalImported++; + } catch (err) { + console.error(` ❌ Error importing "${word}": ${err.message}`); + } + } + } + } catch (err) { + console.error(` ❌ Error reading ${jsonFile}: ${err.message}`); + } + } + } + + console.log('\n✅ Import complete!'); + console.log(`📊 Total imported: ${totalImported}`); + console.log(`⏭️ Total skipped (duplicates): ${totalSkipped}`); + + process.exit(0); + } catch (error) { + console.error('❌ Error during import:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +// Run the import +importVocabToContext(); diff --git a/import-vocab-to-vocab.js b/import-vocab-to-vocab.js new file mode 100644 index 0000000..5c17779 --- /dev/null +++ b/import-vocab-to-vocab.js @@ -0,0 +1,128 @@ +/** + * Import vocabulary from JSON files into Vocab table + * Each vocab word will become a Vocab record with: + * - text: the vocabulary word + * - base_word: same as text (can be updated later) + * - grade: the grade/unit/lesson code (e.g., 101, 102, etc.) + * - form_key: 'base' by default + */ + +const { sequelize } = require('./config/database'); +const { Vocab } = require('./models'); +const fs = require('fs'); +const path = require('path'); + +// Configuration +const DATA_DIR = path.join(__dirname, 'data', 'familynfriend'); +const GRADES = ['g1', 'g2', 'g3', 'g4', 'g5']; + +async function importVocabToVocabTable() { + try { + console.log('🔄 Starting vocab import to Vocab table...'); + + await sequelize.authenticate(); + console.log('✅ Database connection OK'); + + let totalImported = 0; + let totalSkipped = 0; + + // Process each grade folder + for (const gradeFolder of GRADES) { + const gradeDir = path.join(DATA_DIR, gradeFolder); + + if (!fs.existsSync(gradeDir)) { + console.log(`⚠️ Directory not found: ${gradeDir}`); + continue; + } + + // Get all JSON files in the grade directory + const jsonFiles = fs.readdirSync(gradeDir).filter(f => f.endsWith('.json')); + + console.log(`\n📂 Processing ${gradeFolder.toUpperCase()} (${jsonFiles.length} files)...`); + + for (const jsonFile of jsonFiles) { + const filePath = path.join(gradeDir, jsonFile); + console.log(` 📄 Reading ${jsonFile}...`); + + try { + const data = JSON.parse(fs.readFileSync(filePath, 'utf8')); + + if (!Array.isArray(data)) { + console.log(` ⚠️ Skipping ${jsonFile}: not an array`); + continue; + } + + // Process each lesson/unit entry + for (const entry of data) { + const { grade, vocab } = entry; + + if (!grade || !vocab || !Array.isArray(vocab)) { + continue; + } + + console.log(` 📚 Grade ${grade}: ${vocab.length} vocab words`); + + // Import each vocabulary word + for (const word of vocab) { + if (!word || word.trim() === '') { + continue; + } + + try { + const trimmedWord = word.trim(); + + // Check if this vocab already exists (same text and grade) + const existing = await Vocab.findOne({ + where: { + text: trimmedWord + } + }); + + if (existing) { + totalSkipped++; + continue; + } + + // Create new vocab entry + await Vocab.create({ + text: trimmedWord, + base_word: trimmedWord, // Default to same as text, can be updated later + grade: parseInt(grade), + form_key: 'base', + vi: '', // Can be filled later + category: null, + topic: null, + etc: 'familynfriend', + is_active: true + }); + + totalImported++; + } catch (err) { + console.error(` ❌ Error importing "${word}": ${err.message}`); + } + } + } + } catch (err) { + console.error(` ❌ Error reading ${jsonFile}: ${err.message}`); + } + } + } + + console.log('\n✅ Import complete!'); + console.log(`📊 Total imported: ${totalImported}`); + console.log(`⏭️ Total skipped (duplicates): ${totalSkipped}`); + + // Show final stats + const totalCount = await Vocab.count(); + console.log(`📊 Total vocab in database: ${totalCount}`); + + process.exit(0); + } catch (error) { + console.error('❌ Error during import:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +// Run the import +importVocabToVocabTable(); diff --git a/models/Context.js b/models/Context.js index 75aa618..48d3b12 100644 --- a/models/Context.js +++ b/models/Context.js @@ -1,5 +1,6 @@ const { DataTypes } = require('sequelize'); const { sequelize } = require('../config/database'); +const { ref } = require('joi'); const Context = sequelize.define('Context', { uuid: { @@ -43,9 +44,17 @@ const Context = sequelize.define('Context', { comment: 'Prompt configuration object' }, image: { - type: DataTypes.JSON, + type: DataTypes.TEXT, comment: 'Array of image URLs' }, + type_context: { + type: DataTypes.STRING(50), + comment: 'Type of context (e.g., example_sentence, dialogue)' + }, + type_image: { + type: DataTypes.STRING(50), + comment: 'Type of image (e.g., small, square, normal)' + }, max: { type: DataTypes.INTEGER, defaultValue: 1, @@ -56,6 +65,10 @@ const Context = sequelize.define('Context', { defaultValue: 0, comment: '0: Draft, 1: Enriched, 2: Prompt_Ready, 3: Generating, 4: Image_Ready, 5: Approved' }, + reference_id: { + type: DataTypes.UUID, + comment: 'Reference to another entity if applicable' + }, created_at: { type: DataTypes.DATE, defaultValue: DataTypes.NOW diff --git a/models/Vocab.js b/models/Vocab.js index 7d1a3b2..4532864 100644 --- a/models/Vocab.js +++ b/models/Vocab.js @@ -14,6 +14,10 @@ const Vocab = sequelize.define('Vocab', { allowNull: false, index: true }, + ipa : { + type: DataTypes.STRING(100), + comment: 'International Phonetic Alphabet representation' + }, // Từ gốc để nhóm lại (wash, eat...) base_word: { type: DataTypes.STRING(100), @@ -22,37 +26,55 @@ const Vocab = sequelize.define('Vocab', { }, // Đã xuất hiện trong khối nào, bài học nào, lesson nào // Ví dụ 111 là grade 1, unit 1, lesson 1 - location: { + grade: { type: DataTypes.INTEGER, - defaultValue: 100, + defaultValue: 0, comment: 'It is number of gradeX100 + unitX10 + lesson (e.g., Grade 1 Unit 2 Lesson 3 = 123)' }, // Loại biến thể (V1, V2, V3, V_ing, Noun_Form...) form_key: { - type: DataTypes.STRING(20), - defaultValue: 'base' + type: DataTypes.JSON, + defaultValue: 'base', + comment: 'Form key indicating the type of word form (e.g., base, V1, V2, V3, V_ing, Noun_Form)' }, // Nội dung dùng chung (có thể lưu JSON để dễ quản lý hoặc dùng chung cho cả group) - translation: { - type: DataTypes.STRING(200) - }, - difficulty_score: { - type: DataTypes.INTEGER, - defaultValue: 1, - comment: 'Difficulty level (1-10)' + vi: { + type: DataTypes.TEXT, + defaultValue: '', + comment: 'Vietnamese meaning' }, category: { type: DataTypes.STRING(100), comment: 'Category of the word (e.g., Action Verbs, Nouns)' }, + etc : { + type: DataTypes.TEXT, + comment: 'Book or additional reference' + }, topic: { type: DataTypes.STRING(100), comment: 'Topic of the word (e.g., Food, Travel, Education)' }, - images: { + image_small: { type: DataTypes.JSON, comment: 'Array of image URLs' }, + image_square: { + type: DataTypes.JSON, + comment: 'Array of image URLs' + }, + image_normal: { + type: DataTypes.JSON, + comment: 'Array of image URLs' + }, + audio : { + type: DataTypes.JSON, + comment: 'Array of audio URLs' + }, + example_sentences: { + type: DataTypes.JSON, + comment: 'Array of example sentences' + }, tags: { type: DataTypes.JSON, comment: 'Array of tags for categorization' @@ -101,8 +123,8 @@ const Vocab = sequelize.define('Vocab', { fields: ['category'] }, { - name: 'idx_location', - fields: ['location'] + name: 'idx_grade', + fields: ['grade'] } ] }); diff --git a/truncate-and-sync-context.js b/truncate-and-sync-context.js new file mode 100644 index 0000000..e4e1b4f --- /dev/null +++ b/truncate-and-sync-context.js @@ -0,0 +1,90 @@ +/** + * Truncate Context table and sync model with database + * This will: + * 1. Delete all data in Context table + * 2. Sync model schema with database (update structure if needed) + */ + +const { sequelize } = require('./config/database'); +const { Context } = require('./models'); + +// Configuration +const CONFIRM_TRUNCATE = true; // Set to true to actually truncate +const FORCE_SYNC = false; // Set to true to drop and recreate table + +async function truncateAndSyncContext() { + try { + console.log('🔄 Starting Context truncate and sync...\n'); + + await sequelize.authenticate(); + console.log('✅ Database connection OK\n'); + + // Show current stats before truncate + try { + const count = await Context.count(); + console.log(`📊 Current Context records: ${count}\n`); + } catch (error) { + console.log('⚠️ Table may not exist yet\n'); + } + + // Step 1: Truncate table + if (CONFIRM_TRUNCATE) { + console.log('🗑️ Truncating Context table...'); + + try { + await sequelize.query('SET FOREIGN_KEY_CHECKS = 0'); + await Context.destroy({ + where: {}, + truncate: true + }); + await sequelize.query('SET FOREIGN_KEY_CHECKS = 1'); + console.log('✅ Context table truncated successfully\n'); + } catch (error) { + console.log(`⚠️ Truncate warning: ${error.message}\n`); + } + } else { + console.log('⏭️ Skipping truncate (CONFIRM_TRUNCATE is false)\n'); + } + + // Step 2: Sync model with database + console.log('🔄 Syncing Context model with database...'); + console.log(` Force mode: ${FORCE_SYNC ? 'ON (will drop table)' : 'OFF (will alter)'}\n`); + + await Context.sync({ force: FORCE_SYNC, alter: !FORCE_SYNC }); + console.log('✅ Context model synced successfully\n'); + + // Show table structure + const [tableInfo] = await sequelize.query('DESCRIBE context'); + console.log('📋 Current Context table structure:'); + console.log('---'); + tableInfo.forEach(field => { + console.log(` ${field.Field}: ${field.Type}${field.Null === 'NO' ? ' NOT NULL' : ''}`); + }); + console.log('---\n'); + + // Final count + const finalCount = await Context.count(); + console.log(`📊 Final Context records: ${finalCount}\n`); + + console.log('✅ Operation complete!'); + process.exit(0); + } catch (error) { + console.error('❌ Error:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +// Safety warning +if (!CONFIRM_TRUNCATE) { + console.log('⚠️ WARNING: CONFIRM_TRUNCATE is set to false'); + console.log('Only sync will be performed. No data will be deleted.\n'); +} + +if (FORCE_SYNC) { + console.log('⚠️ WARNING: FORCE_SYNC is set to true'); + console.log('This will DROP and RECREATE the table!\n'); +} + +// Run the script +truncateAndSyncContext(); diff --git a/truncate-and-sync-vocab.js b/truncate-and-sync-vocab.js new file mode 100644 index 0000000..af31b16 --- /dev/null +++ b/truncate-and-sync-vocab.js @@ -0,0 +1,90 @@ +/** + * Truncate Vocab table and sync model with database + * This will: + * 1. Delete all data in Vocab table + * 2. Sync model schema with database (update structure if needed) + */ + +const { sequelize } = require('./config/database'); +const { Vocab } = require('./models'); + +// Configuration +const CONFIRM_TRUNCATE = true; // Set to true to actually truncate +const FORCE_SYNC = false; // Set to true to drop and recreate table + +async function truncateAndSyncVocab() { + try { + console.log('🔄 Starting Vocab truncate and sync...\n'); + + await sequelize.authenticate(); + console.log('✅ Database connection OK\n'); + + // Show current stats before truncate + try { + const count = await Vocab.count(); + console.log(`📊 Current Vocab records: ${count}\n`); + } catch (error) { + console.log('⚠️ Table may not exist yet\n'); + } + + // Step 1: Truncate table + if (CONFIRM_TRUNCATE) { + console.log('🗑️ Truncating Vocab table...'); + + try { + await sequelize.query('SET FOREIGN_KEY_CHECKS = 0'); + await Vocab.destroy({ + where: {}, + truncate: true + }); + await sequelize.query('SET FOREIGN_KEY_CHECKS = 1'); + console.log('✅ Vocab table truncated successfully\n'); + } catch (error) { + console.log(`⚠️ Truncate warning: ${error.message}\n`); + } + } else { + console.log('⏭️ Skipping truncate (CONFIRM_TRUNCATE is false)\n'); + } + + // Step 2: Sync model with database + console.log('🔄 Syncing Vocab model with database...'); + console.log(` Force mode: ${FORCE_SYNC ? 'ON (will drop table)' : 'OFF (will alter)'}\n`); + + await Vocab.sync({ force: FORCE_SYNC, alter: !FORCE_SYNC }); + console.log('✅ Vocab model synced successfully\n'); + + // Show table structure + const [tableInfo] = await sequelize.query('DESCRIBE vocab'); + console.log('📋 Current Vocab table structure:'); + console.log('---'); + tableInfo.forEach(field => { + console.log(` ${field.Field}: ${field.Type}${field.Null === 'NO' ? ' NOT NULL' : ''}`); + }); + console.log('---\n'); + + // Final count + const finalCount = await Vocab.count(); + console.log(`📊 Final Vocab records: ${finalCount}\n`); + + console.log('✅ Operation complete!'); + process.exit(0); + } catch (error) { + console.error('❌ Error:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +// Safety warning +if (!CONFIRM_TRUNCATE) { + console.log('⚠️ WARNING: CONFIRM_TRUNCATE is set to false'); + console.log('Only sync will be performed. No data will be deleted.\n'); +} + +if (FORCE_SYNC) { + console.log('⚠️ WARNING: FORCE_SYNC is set to true'); + console.log('This will DROP and RECREATE the table!\n'); +} + +// Run the script +truncateAndSyncVocab(); diff --git a/update-grade-code-format.js b/update-grade-code-format.js new file mode 100644 index 0000000..315aad5 --- /dev/null +++ b/update-grade-code-format.js @@ -0,0 +1,144 @@ +/** + * Update grade code format in all JSON files + * Old format: GUUL (4 digits) - e.g., 1011 = Grade 1, Unit 01, Lesson 1 + * New format: GGUULL (6 digits) - e.g., 010101 = Grade 01, Unit 01, Lesson 01 + */ + +const fs = require('fs'); +const path = require('path'); + +// Configuration +const DATA_DIR = path.join(__dirname, 'data'); +const DRY_RUN = false; // Set to true to preview changes without updating files + +function convertGradeCode(oldCode) { + const codeStr = oldCode.toString(); + + if (codeStr.length === 4) { + // Format: GUUL -> GGUULL + const grade = codeStr[0]; // G + const unit = codeStr.substring(1, 3); // UU + const lesson = codeStr[3]; // L + + return `0${grade}${unit}0${lesson}`; + } else if (codeStr.length === 3) { + // Format: GUL -> GGUULL + const grade = codeStr[0]; // G + const unit = codeStr[1]; // U + const lesson = codeStr[2]; // L + + return `0${grade}0${unit}0${lesson}`; + } else if (codeStr.length === 6) { + // Already in new format + return codeStr; + } + + // Unknown format, return as is + console.log(` ⚠️ Unknown format: ${codeStr}`); + return codeStr; +} + +function processJsonFile(filePath) { + try { + const data = JSON.parse(fs.readFileSync(filePath, 'utf8')); + + if (!Array.isArray(data)) { + return { updated: 0, changes: [] }; + } + + let updated = 0; + const changes = []; + + // Update grade codes + data.forEach(entry => { + if (entry.grade) { + const oldGrade = entry.grade; + const newGrade = convertGradeCode(oldGrade); + + if (oldGrade !== newGrade) { + changes.push({ old: oldGrade, new: newGrade }); + entry.grade = newGrade; + updated++; + } + } + }); + + // Write updated data back to file + if (!DRY_RUN && updated > 0) { + fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf8'); + } + + return { updated, changes }; + } catch (error) { + console.error(` ❌ Error processing ${filePath}: ${error.message}`); + return { updated: 0, changes: [] }; + } +} + +function processDirectory(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + let totalUpdated = 0; + const allChanges = []; + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + + if (entry.isDirectory()) { + const result = processDirectory(fullPath); + totalUpdated += result.updated; + allChanges.push(...result.changes); + } else if (entry.isFile() && entry.name.endsWith('.json')) { + console.log(` 📄 Processing ${entry.name}...`); + const { updated, changes } = processJsonFile(fullPath); + + if (updated > 0) { + console.log(` ✅ Updated ${updated} grade codes`); + changes.forEach(c => { + console.log(` ${c.old} → ${c.new}`); + }); + totalUpdated += updated; + allChanges.push(...changes); + } else { + console.log(` ⏭️ No changes needed`); + } + } + } + + return { updated: totalUpdated, changes: allChanges }; +} + +async function main() { + try { + console.log('🔄 Starting grade code format update...\n'); + + if (DRY_RUN) { + console.log('⚠️ DRY RUN MODE - No files will be modified\n'); + } + + // Check if data directory exists + if (!fs.existsSync(DATA_DIR)) { + console.error('❌ Data directory not found:', DATA_DIR); + process.exit(1); + } + + // Process all JSON files in data directory + console.log('📂 Processing JSON files...\n'); + const { updated, changes } = processDirectory(DATA_DIR); + + console.log('\n✅ Processing complete!'); + console.log(`📊 Total grade codes updated: ${updated}`); + + if (DRY_RUN) { + console.log('\n⚠️ This was a DRY RUN. Set DRY_RUN = false to apply changes.'); + } + + process.exit(0); + } catch (error) { + console.error('❌ Error:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +// Run the script +main(); diff --git a/update-vocab-context.js b/update-vocab-context.js new file mode 100644 index 0000000..849c09d --- /dev/null +++ b/update-vocab-context.js @@ -0,0 +1,200 @@ +/** + * Update vocabulary context entries + * This script allows you to modify vocabulary records in Context table + * You can: + * - Update specific vocab words + * - Bulk update by grade + * - Update fields like title, context, knowledge, desc + * - Delete vocab entries + */ + +const { sequelize } = require('./config/database'); +const { Context } = require('./models'); + +// ============================================ +// CONFIGURATION: Customize your updates here +// ============================================ + +const UPDATE_MODE = 'single'; // Options: 'single', 'bulk_by_grade', 'delete' + +// FOR SINGLE WORD UPDATE +const SINGLE_UPDATE = { + oldTitle: 'dad', // Current title to search for + grade: 101, // Grade to search in + updates: { + title: 'dad', // New title (if you want to change it) + context: 'Family member - father', // Updated context + knowledge: 'Common family vocabulary for beginners', + desc: 'Từ chỉ bố/cha trong tiếng Anh' + } +}; + +// FOR BULK UPDATE BY GRADE +const BULK_UPDATE = { + grade: 101, // Which grade to update + updates: { + context: 'Grade 1 Unit 1 Lesson 1 vocabulary', + knowledge: 'Basic greeting and family vocabulary' + } +}; + +// FOR DELETION +const DELETE_CONFIG = { + title: 'test_word', // Word to delete + grade: 101 // Grade to delete from +}; + +// ============================================ +// MAIN FUNCTIONS +// ============================================ + +async function updateSingleVocab() { + const { oldTitle, grade, updates } = SINGLE_UPDATE; + + console.log(`🔍 Looking for vocab: "${oldTitle}" in grade ${grade}...`); + + const vocab = await Context.findOne({ + where: { + title: oldTitle, + grade: grade, + type: 'vocabulary' + } + }); + + if (!vocab) { + console.log('❌ Vocab not found!'); + return 0; + } + + console.log(`✅ Found vocab: ${vocab.title}`); + console.log(`📝 Updating...`); + + await vocab.update(updates); + console.log(`✅ Updated successfully!`); + console.log(`New data:`, { + title: vocab.title, + grade: vocab.grade, + context: vocab.context, + knowledge: vocab.knowledge, + desc: vocab.desc + }); + + return 1; +} + +async function bulkUpdateByGrade() { + const { grade, updates } = BULK_UPDATE; + + console.log(`🔍 Looking for all vocab in grade ${grade}...`); + + const vocabs = await Context.findAll({ + where: { + grade: grade, + type: 'vocabulary' + } + }); + + console.log(`✅ Found ${vocabs.length} vocab words`); + console.log(`📝 Updating...`); + + for (const vocab of vocabs) { + await vocab.update(updates); + } + + console.log(`✅ Updated ${vocabs.length} vocab words successfully!`); + return vocabs.length; +} + +async function deleteVocab() { + const { title, grade } = DELETE_CONFIG; + + console.log(`🔍 Looking for vocab: "${title}" in grade ${grade}...`); + + const result = await Context.destroy({ + where: { + title: title, + grade: grade, + type: 'vocabulary' + } + }); + + if (result === 0) { + console.log('❌ Vocab not found or already deleted!'); + } else { + console.log(`✅ Deleted ${result} vocab entry!`); + } + + return result; +} + +async function listVocabByGrade(grade) { + console.log(`\n📚 Listing all vocab in grade ${grade}...`); + + const vocabs = await Context.findAll({ + where: { + grade: grade, + type: 'vocabulary' + }, + order: [['title', 'ASC']] + }); + + console.log(`\n✅ Found ${vocabs.length} vocab words:\n`); + vocabs.forEach((v, idx) => { + console.log(`${idx + 1}. ${v.title}`); + if (v.context) console.log(` Context: ${v.context}`); + if (v.knowledge) console.log(` Knowledge: ${v.knowledge}`); + if (v.desc) console.log(` Desc: ${v.desc}`); + console.log(''); + }); + + return vocabs.length; +} + +// ============================================ +// MAIN EXECUTION +// ============================================ + +async function main() { + try { + console.log('🔄 Starting vocab context update...\n'); + + await sequelize.authenticate(); + console.log('✅ Database connection OK\n'); + + let result = 0; + + switch (UPDATE_MODE) { + case 'single': + result = await updateSingleVocab(); + break; + + case 'bulk_by_grade': + result = await bulkUpdateByGrade(); + break; + + case 'delete': + result = await deleteVocab(); + break; + + case 'list': + // Change grade here to list different grades + result = await listVocabByGrade(101); + break; + + default: + console.log('❌ Invalid UPDATE_MODE'); + } + + console.log('\n✅ Operation complete!'); + console.log(`📊 Records affected: ${result}`); + + process.exit(0); + } catch (error) { + console.error('❌ Error during update:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +// Run the script +main();