Hệ thống pháp luật

BỘ GIÁO DỤC VÀ ĐÀO TẠO
-------

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
---------------

Số: 5636/BGDĐT-GDTrH
V/v xây dựng kế hoạch dạy học các môn học Khoa học tự nhiên, Lịch sử và Địa lí, Hoạt động trải nghiệm, hướng nghiệp

Hà Nội, ngày 10 tháng 10 năm 2023

 

Kính gửi: Các Sở Giáo dục và Đào tạo

Trong quá trình triển khai thực hiện Chương trình giáo dục phổ thông 2018, các cơ sở giáo dục phổ thông đã tích cực, chủ động xây dựng và thực hiện kế hoạch giáo dục nhà trường phù hợp với đội ngũ giáo viên, cơ sở vật chất của nhà trường theo các văn bản hướng dẫn của Bộ Giáo dục và Đào tạo (GDĐT)[1]. Tuy nhiên, từ thực tế triển khai cho thấy việc phân công giáo viên và xếp thời khóa biểu để tổ chức dạy học theo chương trình một số môn học, hoạt động giáo dục còn khó khăn, vướng mắc.

Nhằm khắc phục khó khăn, vướng mắc nêu trên, Bộ GDĐT đề nghị các Sở GDĐT hướng dẫn các cơ sở giáo dục phổ thông tiếp tục xây dựng và thực hiện kế hoạch giáo dục nhà trường theo các văn bản hướng dẫn của Bộ GDĐT bảo đảm chất lượng, hiệu quả. Trong đó lưu ý các nhà trường thực hiện việc phân công giáo viên, xây dựng kế hoạch và tổ chức dạy học các môn học Khoa học tự nhiên, Lịch sử và Địa lí, Hoạt động trải nghiệm, hướng nghiệp, cụ thể như sau:

1. Môn Khoa học tự nhiên

a) Phân công giáo viên: Phân công giáo viên bảo đảm sự phù hợp về chuyên môn được đào tạo của giáo viên với nội dung dạy học được phân công (theo các mạch nội dung Chất và sự biến đổi của chất, Năng lượng và sự biến đổi, Vật sống, Trái Đất và bầu trời). Việc phân công giáo viên đã được đào tạo, bồi dưỡng chuyên môn đảm nhận dạy học từ 02 mạch nội dung hoặc toàn bộ chương trình môn học phải thực hiện từng bước, bảo đảm yêu cầu về chuyên môn của giáo viên để bảo đảm chất lượng dạy học.

b) Xây dựng kế hoạch dạy học: Tiếp tục thực hiện hiệu quả việc xây dựng kế hoạch dạy học phù hợp với các mạch nội dung theo chương trình môn học. Trong trường hợp gặp khó khăn về xếp thời khóa biểu, cần xây dựng kế hoạch dạy học linh hoạt về thời gian, thời điểm thực hiện các mạch nội dung hoặc các chủ đề của chương trình để xếp thời khóa biểu phù hợp với việc phân công giáo viên, đáp ứng yêu cầu về tính khoa học, tính sư phạm (bảo đảm nội dung dạy học trước là cơ sở cho nội dung dạy học sau) và khả năng thực hiện của giáo viên (tham khảo khung kế hoạch dạy học tại Phụ lục 1).

c) Tổ chức dạy học và kiểm tra, đánh giá: Việc kiểm tra, đánh giá thường xuyên được thực hiện trong quá trình dạy học; giáo viên dạy học nội dung nào thực hiện việc kiểm tra, đánh giá đối với nội dung đó. Hiệu trưởng phân công giáo viên chủ trì phụ trách môn học ở mỗi lớp phối hợp với các giáo viên cùng dạy học môn học ở lớp đó để thống nhất điểm đánh giá thường xuyên, bảo đảm số điểm đánh giá theo quy định, tổng hợp điểm, ghi điểm, nhận xét vào sổ theo dõi, đánh giá học sinh và học bạ. Ma trận, nội dung bài kiểm tra định kì được xây dựng phù hợp với nội dung và thời lượng dạy học của chương trình đến thời điểm kiểm tra. Hướng dẫn học sinh làm bài kiểm tra sao cho thuận tiện trong việc phân công giáo viên chấm bài, tổng hợp kết quả.

2. Môn Lịch sử và Địa lí

a) Phân công giáo viên: Phân công giáo viên bảo đảm sự phù hợp giữa chuyên môn được đào tạo của giáo viên với nội dung dạy học được phân công (theo phân môn Lịch sử, phân môn Địa lí và các chủ đề liên môn). Việc phân công giáo viên đã được đào tạo, bồi dưỡng chuyên môn đảm nhận việc dạy học toàn bộ chương trình môn học phải thực hiện từng bước, bảo đảm yêu cầu về chuyên môn của giáo viên để bảo đảm chất lượng dạy học.

b) Xây dựng kế hoạch dạy học: Kế hoạch dạy học môn học được xây dựng theo từng phân môn Lịch sử và phân môn Địa lí, các phân môn được bố trí dạy học đồng thời trong từng học kì phù hợp với điều kiện thực tiễn của nhà trường (tham khảo khung kế hoạch dạy học tại Phụ lục 2).

c) Tổ chức dạy học và kiểm tra, đánh giá: Việc kiểm tra, đánh giá thường xuyên và định kì được thực hiện trong quá trình dạy học theo từng phân môn. Nội dung bài kiểm tra, đánh giá định kì phù hợp với nội dung và thời lượng dạy học theo từng phân môn Lịch sử và phân môn Địa lí tính đến thời điểm kiểm tra, đánh giá. Hiệu trưởng phân công giáo viên chủ trì phụ trách môn học ở mỗi lớp phối hợp các giáo viên cùng dạy học môn học ở lớp đó để tổng hợp điểm, ghi điểm, nhận xét vào sổ theo dõi, đánh giá học sinh và học bạ (tham khảo khung kế hoạch dạy học tại Phụ lục 2).

3. Hoạt động trải nghiệm, hướng nghiệp

a) Phân công giáo viên: Phân công giáo viên bảo đảm sự phù hợp giữa năng lực và chuyên môn của giáo viên với nội dung hoạt động trải nghiệm, hướng nghiệp được đảm nhiệm[2]; ưu tiên phân công giáo viên phụ trách theo từng chủ đề để thuận lợi trong việc xây dựng kế hoạch tổ chức thực hiện, hướng dẫn và đánh giá học sinh trong quá trình trải nghiệm theo yêu cầu cần đạt của chủ đề đó.

b) Xây dựng kế hoạch giáo dục: Kế hoạch tổ chức thực hiện hoạt động trải nghiệm, hướng nghiệp được xây dựng theo từng chủ đề; giáo viên được phân công đảm nhận chủ đề tổ chức cho học sinh tìm hiểu nội dung, phương pháp, hình thức hoạt động, tổ chức cho học sinh luyện tập, thực hành trải nghiệm theo yêu cầu của chương trình và tổ chức cho học sinh báo cáo, thảo luận, đánh giá về kết quả thực hiện (tham khảo kế hoạch tổ chức thực hiện một chủ đề tại Phụ lục 3). Việc xây dựng thời khóa biểu bảo đảm sự linh hoạt (không bắt buộc phải chia đều số tiết/tuần, không bắt buộc thực hiện lần lượt các chủ đề theo trình tự trong sách giáo khoa) sao cho mỗi chủ đề được tổ chức thực hiện trong một khoảng thời gian phù hợp với kế hoạch của giáo viên trong thời gian đó.

c) Tổ chức thực hiện và kiểm tra, đánh giá:

Giáo viên tổ chức cho học sinh tìm hiểu nội dung, phương pháp và hình thức trải nghiệm trước khi thực hiện hoạt động trải nghiệm theo yêu cầu cần đạt của chủ đề. Đối với việc thực hiện hoạt động trải nghiệm, giáo viên tổ chức cho học sinh thực hành, rèn luyện và vận dụng theo nội dung, phương pháp, hình thức hoạt động đã được hướng dẫn với yêu cầu cụ thể về sản phẩm mà học sinh phải hoàn thành. Quá trình trải nghiệm có thể là hoạt động của cá nhân, nhóm nhỏ hoặc nhóm lớn, ở các không gian khác nhau trong và ngoài lớp học, trong và ngoài nhà trường tùy theo nội dung và tính chất của hoạt động. Trong quá trình học sinh thực hành trải nghiệm, giáo viên đóng vai trò tổ chức, hướng dẫn, kiểm tra quá trình thực hiện của học sinh.

Đối với đánh giá thường xuyên, giáo viên được phân công phụ trách chủ đề nào thực hiện đánh giá thường xuyên đối với chủ đề đó. Hiệu trưởng phân công giáo viên chủ trì phụ trách Hoạt động trải nghiệm, hướng nghiệp ở mỗi lớp để phối hợp với các giáo viên được phân công tổ chức Hoạt động trải nghiệm, hướng nghiệp ở lớp đó thống nhất kết quả đánh giá thường xuyên, tổng hợp kết quả, ghi kết quả đánh giá vào sổ theo dõi, đánh giá học sinh và học bạ. Nội dung đánh giá định kì được xây dựng phù hợp với nội dung và thời lượng thực hiện chương trình đến thời điểm đánh giá. Các giáo viên được phân công thống nhất về nội dung và yêu cầu đánh giá định kì, trong đó xác định cụ thể các tiêu chí đánh giá để đáp ứng yêu cầu cần đạt của chương trình; chú trọng đánh giá thông qua sản phẩm hoạt động trải nghiệm của học sinh.

Bộ GDĐT đề nghị các Sở GDĐT triển khai thực hiện kịp thời, bảo đảm chất lượng, hiệu quả. Trong quá trình tổ chức thực hiện nếu có khó khăn, vướng mắc báo cáo kịp thời về Bộ GDĐT (qua Vụ Giáo dục Trung học) để được hướng dẫn, giải quyết./.

 


Nơi nhận:
- Như trên;
- Bộ trưởng (để báo cáo);
- Các Thứ trưởng (để phối hợp chỉ đạo);
- Cục Nhà trường, Bộ Quốc phòng;
- Ủy ban Dân tộc;
- Các trường phổ thông trực thuộc (T78, HN 80);
- Các Cục, Vụ, Viện KHGDVN;
- Lưu: VT, Vụ GDTrH.

KT. BỘ TRƯỞNG
THỨ TRƯỞNG




Phạm Ngọc Thưởng

 

PHỤ LỤC 1

GỢI Ý KẾ HOẠCH DẠY HỌC MÔN KHOA HỌC TỰ NHIÊN
(Kèm theo Công văn số 5636/BGDĐT-GDTrH ngày 10 tháng 10 năm 2023 của Bộ Giáo dục và Đào tạo)

Tiếp tục thực hiện hiệu quả việc xây dựng kế hoạch dạy học linh hoạt các mạch nội dung của chương trình môn Khoa học tự nhiên hoặc các chủ đề trong từng mạch nội dung của chương trình môn học bảo đảm phù hợp với việc phân công giáo viên. Trường hợp gặp khó khăn trong phân công giáo viên dạy học theo thứ tự các mạch nội dung trong chương trình môn học, thì cơ sở giáo dục phổ thông có thể tham khảo gợi ý khung kế hoạch dạy học sau đây để xây dựng kế hoạch giáo dục và thời khóa biểu phù hợp.

LỚP 6

STT

Nội dung

Ghi chú

 

Chất và sự biến đổi của chất

Năng lượng và sự biến đổi

Vật sống

Trái Đất và bầu trời

Học kì 1: 71 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

1

Mở đầu (7 tiết)

 

 

 

 

Có thể phân công giáo viên Vật lí, Hóa học, Sinh học, KHTN đảm nhiệm

2

Các phép đo (10 tiết)

3

 

Các thể của chất (4 tiết)

Lực (15 tiết)

Tế bào-đơn vị cơ sở của sự sống (15 tiết)

Xây dựng kế hoạch dạy học linh hoạt

Oxygen và không khí (3 tiết)

Đa dạng thế giới sống (10 tiết)

Học kì 2: 69 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

4

 

Một số vật liệu, nhiên liệu, nguyên liệu, lương thực, thực phẩm thông dụng (8 tiết)

Năng lượng (10 tiết)

Đa dạng thế giới sống (28 tiết)

Chuyển động nhìn thấy của Mặt Trời, Mặt Trăng; hệ Mặt Trời; Ngân Hà (10 tiết)

Xây dựng kế hoạch dạy học linh hoạt

Dung dịch; Tách chất ra khỏi hỗn hợp (6 tiết)

LỚP 7

STT

Nội dung

Ghi chú

 

Chất và sự biến đổi của chất

Năng lượng và sự biến đổi

Vật sống

Trái Đất và bầu trời

Học kì 1: 71 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

1

Mở đầu (6 tiết)

 

 

 

 

Có thể phân công giáo viên Vật lí, Hóa học, Sinh học, KHTN đảm nhiệm

2

 

Nguyên tử. Nguyên tố hóa học (8 tiết)

Lực (11 tiết)

Trao đổi chất và chuyển hóa năng lượng ở sinh vật (32 tiết)

 

Xây dựng kế hoạch dạy học linh hoạt

3

 

Sơ lược về BTH các nguyên tố hóa học (7 tiết)

Học kì 2: 69 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

4

 

Phân tử (13 tiết)

Âm thanh (10 tiết)

Cảm ứng, Sinh trưởng và phát triển, Sinh sản ở sinh vật; Cơ thể sinh vật là một thể thống nhất (21 tiết)

 

Nội dung “Giới thiệu về liên kết hoá học” cần dạy trước nội dung “Trao đổi nước và các chất dinh dưỡng ở sinh vật”

Ánh sáng (8 tiết)

Từ (10 tiết)

LỚP 8

STT

Nội dung

Ghi chú

 

 

Chất và sự biến đổi của chất

Năng lượng và sự biến đổi

Vật sống

Trái Đất và bầu trời

 

Học kì 1: 72 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

 

1

Mở đầu (3 tiết)

 

 

 

 

Có thể phân công giáo viên Vật lí, Hóa học, Sinh học, KHTN đảm nhiệm

 

2

 

Phản ứng hóa học: Tốc độ phản ứng và chất xúc tác (21 tiết)

Lực (8 tiết)

Sinh học cơ thể người (22 tiết)

Nội dung "Đòn bẩy và mô men lực" cần dạy trước nội dung "Hệ vận động ở người"

 

Khối lượng riêng và áp suất (11 tiết)

 

Học kì 2: 68 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

 

3

 

Acid - Base - pH- Oxide - Muối; Phân bón hóa học (20 tiết)

Năng lượng và cuộc sống (8 tiết)

Sinh học cơ thể người (tiếp): Da và điều hoà thân nhiệt ở người, Sinh sản (6 tiết)

 

Xây dựng kế hoạch dạy học linh hoạt

 

Điện (12 tiết)

 

Môi trường; hệ sinh thái (12 tiết)

 

 

Sinh quyển và các khu sinh học trên Trái Đất (3 tiết)

 

LỚP 9

STT

Nội dung

Ghi chú

 

Chất và sự biến đổi của chất

Năng lượng và sự biến đổi

Vật sống

Trái Đất và bầu trời

 

Học kì 1: 72 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

1

Mở đầu (3 tiết)

 

 

 

 

Có thể phân công giáo viên Vật lí, Hóa học, Sinh học, KHTN đảm nhiệm

2

 

Hóa học hữu cơ (25 tiết)

Năng lượng cơ học (10 tiết)

Di truyền: Mendel và di truyền học Nhiễm sắc thể (15 tiết)

Xây dựng kế hoạch dạy học linh hoạt

Ánh sáng (12 tiết)

Học kì 2: 68 tiết (bao gồm ôn tập, kiểm tra đánh giá định kì)

3

 

Kim loại (12 tiết)

Điện (10 tiết)

Di truyền (tiếp) và Tiến hóa (20 tiết)

 

Xây dựng kế hoạch dạy học linh hoạt

Sự khác nhau giữa phi kim và kim loại (6 tiết)

Điện từ (7 tiết)

4

 

Khai thác tài nguyên từ vỏ Trái Đất; Sơ lược “Hóa học về vỏ Trái Đất” (6 tiết)

 

PHỤ LỤC 2

GỢI Ý KẾ HOẠCH DẠY HỌC MÔN LỊCH SỬ VÀ ĐỊA LÍ
(Kèm theo Công văn số 5636/BGDĐT-GDTrH ngày 10 tháng 10 năm 2023 của Bộ Giáo dục và Đào tạo)

Sự phân chia số tiết cho các nội dung dạy học của phân môn Lịch sử và phân môn Địa lí dưới đây là gợi ý chung, các cơ sở giáo dục phổ thông có thể điều chỉnh linh hoạt để phù hợp với điều kiện tổ chức dạy học và trình độ nhận thức của học sinh ở các cơ sở giáo dục. Đối với bài kiểm tra định kì trên giấy hoặc máy tính thời lượng kiểm tra cho mỗi phân môn Lịch sử và Phân môn Địa lí là 45 phút.

1. PHÂN MÔN LỊCH SỬ

STT

NỘI DUNG

Lớp 6

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết, bao gồm cả ôn tập và kiểm tra)

- Tại sao cần học lịch sử? (3 tiết)

- Thời nguyên thủy (6 tiết)

- Xã hội cổ đại (3 tiết).

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Xã hội cổ đại (tiếp) (6 tiết)

- Đông Nam Á từ những thế kỉ tiếp giáp Công nguyên đến thế kỉ X (5 tiết).

Đầu học kì II

(Tuần 19 đến tuần 27; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Việt Nam từ khoảng thế kỉ VII trước Công nguyên đến đầu thế kỉ X.

- Nước Văn Lang, Âu Lạc (5 tiết)

- Thời Bắc thuộc và chống Bắc thuộc (từ thế kỉ II trước Công nguyên đến năm 938) (6 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Thời Bắc thuộc và chống Bắc thuộc (từ thế kỉ II trước Công nguyên đến năm 938) (6 tiết)

- Vương quốc Chăm-pa và vương quốc Phù Nam (5 tiết)

Lớp 7

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết, bao gồm cả ôn tập và kiểm tra)

- Tây Âu từ thế kỉ V đến nửa đầu thế kỉ XVI (7 tiết)

- Trung Quốc từ thế kỉ VII đến giữa thế kỉ XIX (5 tiết)

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Ấn Độ từ thế kỉ IV đến giữa thế kỉ XIX (4 tiết)

- Đông Nam Á từ nửa sau thế kỉ X đến nửa đầu thế kỉ XVI (4 tiết)

- Chủ đề chung: Đô thị -lịch sử và hiện tại (3 tiết)

Đầu học kì II

(Tuần 19 đến tuần 27; 13 tiết bao gồm cả ôn tập và kiểm tra)

- Việt Nam từ đầu thế kỉ X đến đầu thế kỉ XVI (11 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Việt Nam từ đầu thế kỉ X đến đầu thế kỉ XVI (9 tiết)

- Vùng đất phía nam từ đầu thế kỉ X đến đầu thế kỉ XVI (2 tiết)

Lớp 8

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết bao gồm cả ôn tập và kiểm tra)

- Châu Âu và Bắc Mỹ từ nửa sau thế kỉ XVI đến thế kỉ XVIII (4 tiết)

- Đông Nam Á từ nửa sau thế kỉ XVI đến thế kỉ XIX (2 tiết)

- Việt Nam từ đầu thế kỉ XVI đến thế kỉ XVIII (6 tiết)

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết bao gồm cả ôn tập và kiểm tra)

- Việt Nam từ đầu thế kỉ XVI đến thế kỉ XVIII (5 tiết)

- Châu Âu và nước Mỹ từ cuối thế kỉ XVIII đến đầu thế kỉ XX (6 tiết)

Đầu học kì II

(Tuần 19 đến tuần 27; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Sự phát triển của khoa học, kĩ thuật, văn học, nghệ thuật trong các thế kỉ XVIII - XIX (2 tiết)

- Châu Á từ nửa sau thế kỉ XIX đến đầu thế kỉ XX (5 tiết)

- Việt Nam từ thế kỉ XIX đến đầu thế kỉ XX (4 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Việt Nam từ thế kỉ XIX đến đầu thế kỉ XX (tiếp) (7 tiết)

- Chủ đề chung: văn minh châu thổ sông Hồng và sông Cửu Long (4 tiết)

Lớp 9

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết, bao gồm cả ôn tập và kiểm tra)

- Thế giới từ năm 1918 đến năm 1945 (6 tiết)

- Việt Nam từ năm 1918 đến năm 1945 (6 tiết)

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Thế giới từ năm 1945 đến năm 1991 (11 tiết)

Đầu học kì II

(Tuần 19 đến tuần 27; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Việt Nam từ năm 1945 đến năm 1991 (11 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Thế giới từ năm 1991 đến nay (4 tiết)

- Việt Nam từ năm 1991 đến nay (1 tiết)

- Cách mạng khoa học kĩ thuật và xu thế toàn cầu hoá (1 tiết)

- Chủ đề chung đô thị: Lịch sử và hiện tại (2) (2 tiết).

- Chủ đề chung: Bảo vệ chủ quyền, các quyền và lợi ích hợp pháp của Việt Nam ở biển Đông (3) (3 tiết)

2. PHÂN MÔN ĐỊA LÍ

STT

NỘI DUNG

Lớp 6

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết, bao gồm cả ôn tập và kiểm tra)

- Tại sao cần học địa lí (1 tiết)

- Bản đồ: Phương tiện thể hiện bề mặt Trái Đất (5 tiết)

- Trái đất - Hành tinh của hệ Mặt Trời (6 tiết)

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Cấu tạo của Trái Đất, vỏ Trái Đất (5 tiết)

- Khí hậu và biến đổi khí hậu (6 tiết)

Đầu học kì II

(Tuần 19 đến tuần 27; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Nước trên Trái Đất (5 tiết)

- Đất trên Trái Đất (6 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 12 tiết, bao gồm cả ôn tập và kiểm tra)

- Sinh vật trên Trái Đất (5 tiết)

- Con người và thiên nhiên (5 tiết)

Lớp 7

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết, bao gồm cả ôn tập và kiểm tra)

- Châu Âu (6 tiết)

- Châu Á (6 tiết)

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Châu Phi (7 tiết)

- Chủ đề chung: Các cuộc đại phát kiến địa lí (4 tiết)

Đầu học kì II

(Tuần 19 đến tuần 27; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Châu Mỹ (8 tiết)

- Châu Đại Dương (3 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 12 tiết, bao gồm cả ôn tập và kiểm tra)

- Châu Đại Dương (4 tiết)

- Châu Nam Cực (6 tiết)

Lớp 8

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết, bao gồm cả ôn tập và kiểm tra)

- Đặc điểm vị trí địa lí và phạm vi lãnh thổ Việt Nam (3 tiết)

- Đặc điểm địa hình Việt Nam (6 tiết)

- Đặc điểm khoáng sản Việt Nam (3 tiết)

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Đặc điểm khí hậu Việt Nam (6 tiết)

- Đặc điểm thủy văn Việt Nam (5 tiết)

Đầu học kì II

(Tuần 19 đến tuần 27; 13 tiết, bao gồm cả ôn tập và kiểm tra)

- Đặc điểm Thổ nhưỡng Việt Nam (6 tiết)

- Đặc điểm sinh vật Việt Nam (5 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 12 tiết, bao gồm cả ôn tập và kiểm tra)

- Biển đảo Việt Nam (5 tiết)

- Chủ đề chung: Bảo vệ chủ quyền, các quyền và lợi ích hợp pháp của Việt Nam ở biển đông (1) (5 tiết)

Lớp 9

Đầu học kì I

(Tuần 1 đến tuần 9; 14 tiết bao gồm cả ôn tập và kiểm tra)

- Địa lí dân cư Việt Nam (4 tiết)

- Địa lí các ngành kinh tế

+ Nông nghiệp, lâm nghiệp, thủy sản (4 tiết)

+ Công nghiệp (4 tiết)

Cuối học kì I

(Tuần 10 đến tuần 18; 13 tiết, bao gồm cả ôn tập và kiểm tra)

+ Dịch vụ (4 tiết)

- Sự phân hoá lãnh thổ

+ Vùng Trung du và miền núi Bắc Bộ (3 tiết)

+ Vùng Đồng bằng sông Hồng (4 tiết)

Đầu học kì II

(Tuần 19 đến tuần 27; 12 tiết, bao gồm cả ôn tập và kiểm tra)

+ Bắc Trung Bộ (3 tiết)

+ Duyên hải Nam Trung Bộ (3 tiết)

+ Vùng Tây Nguyên (4 tiết)

Cuối học kì II

(Tuần 28 đến tuần 35; 13 tiết, bao gồm cả ôn tập và kiểm tra)

+ Vùng Đông Nam Bộ (3 tiết)

+ Vùng Đồng bằng sông Cửu Long (3 tiết)

+ Chủ đề chung: Văn minh châu thổ Sông Hồng và Sông Cửu Long (2) (3 tiết)

+ Phát triển tổng hợp kinh tế và bảo vệ tài nguyên, môi trường biển đảo (2 tiết)

 

PHỤ LỤC 3

MINH HỌA VIỆC TỔ CHỨC THỰC HIỆN CHỦ ĐỀ HOẠT ĐỘNG TRẢI NGHIỆM, HƯỚNG NGHIỆP

STT

Nội dung hoạt động

Tổ chức thực hiện

Kết quả/sản phẩm

Ví dụ minh họa

1.

Tổ chức cho học sinh tìm hiểu nội dung, phương pháp và hình thức trải nghiệm của chủ đề

Hoạt động có thể tổ chức trong không gian lớp học sử dụng sách giáo khoa và các phương tiện, tài liệu, học liệu phù hợp đề tổ chức cho học sinh thực hiện.

Học sinh xác định được các nội dung, hình thức, phương pháp chuẩn bị cho việc thực hành, luyện tập, trải nghiệm theo yêu cầu của chủ đề.

Chủ đề “Rèn luyện thói quen” (Lớp 7)

Yêu cầu cần đạt:

- Nhận diện được điểm mạnh, điểm hạn chế của bản thân trong học tập và cuộc sống;

- Nhận ra được khả năng kiểm soát cảm xúc của bản thân;

- Thể hiện được thói quen ngăn nắp, gọn gàng, sạch sẽ ở gia đình cũng như ở trường

1. Tìm hiểu nội dung, phương pháp, hình thức trải nghiệm

- Nội dung: Giáo viên tổ chức cho học sinh tìm hiểu công cụ để nhận biết điểm mạnh, điểm yếu và phát huy các giá trị bản thân; thang đo cảm xúc và cách kiềm chế cảm xúc tiêu cực trong các tình huống khác nhau; cách xây dựng kế hoạch để duy trì thói quen gọn gàng, ngăn nắp...

- Cách thức tổ chức: Tổ chức theo nhóm nhỏ trong lớp học

- Kết quả/sản phẩm: Học sinh xác định cách nhận biết các điểm mạnh, điểm yếu của bản thân; khả năng kiểm soát của bản thân và cách xây dựng thói quen ngăn nắp gọn gàng, sạch sẽ ở gia đình và nhà trường

2. Thực hành trải nghiệm

- Nội dung:

+ Luyện tập: Giáo viên tổ chức cho học sinh đóng kịch tương tác về kiểm soát cảm xúc; làm bài tập nhóm “Cây giá trị” để nhận biết điểm mạnh; tham gia triển lãm ảnh “Góc học tập của em” ...

+ Vận dụng: Giáo viên dành thời gian đưa ra các nội dung trải nghiệm cho học lựa chọn như lập kế hoạch, thực hiện và cam kết duy trì dự án “Lớp học, sạch đẹp”; Kế hoạch duy trì thói quen tích cực của bản thân; Theo dõi khả năng kiểm soát bản thân trong nhiều ngày/nhiều tuần qua bảng phiếu cảm xúc cá nhân...

- Cách thức tổ chức:

+ Luyện tập: Giáo viên tổ chức học sinh trải nghiệm cá nhân và nhóm nhỏ trong lớp học.

+ Vận dụng: Giáo viên yêu cầu học sinh trải nghiệm tại gia đình, phụ huynh hỗ trợ theo dõi duy trì thói quen (sau khi dành thời gian hướng dẫn và giao nhiệm vụ trên lớp).

- Kết quả/sản phẩm:

+ Luyện tập: Học sinh biết cách điều chỉnh điểm yếu, phát huy điểm mạnh qua “Cây giá trị”; biết cách kiểm soát cảm xúc tiêu cực của cá nhân qua đóng vai các nhân vật xử lí tình huống; biết cách sắp xếp góc học tập cá nhân để chụp ảnh cho triển lãm “Góc học tập của em”;

+ Vận dụng: Học sinh thực hiện được cam kết và duy trì dự án “Lớp học, sạch đẹp”; Xây dựng được kế hoạch duy trì thói quen tích cực của bản thân; Theo dõi khả năng kiểm soát bản thân trong nhiều ngày/nhiều tuân qua bảng phiếu cảm xúc cá nhân...

2. Báo cáo, thảo luận, đánh giá

- Nội dung: Giáo viên tổ chức cho học sinh báo cáo các sản phẩm trải nghiệm. Giáo viên sử dụng sản phẩm làm căn cứ để nhận xét, đánh giá các mức độ hoàn thành của học sinh.

- Cách thức tổ chức: Tổ chức sinh hoạt giữa các nhóm trong lớp báo cáo sản phẩm cá nhân; chia sẻ sản phẩm dự án với các lớp khác trong khuôn viên sân trường.

- Kết quả/sản phẩm: Học sinh thảo luận, báo cáo về kết quả duy trì thói quen tích cực của bản thân (tranh ảnh, video...); Học sinh chia sẻ về dự án "Lớp học, sạch đẹp" với các lớp khác trong nhà trường...

2.

Tổ chức cho học sinh thực hành trải nghiệm

Hoạt động rèn luyện có thể tổ chức trong và ngoài không gian lớp học, trong và ngoài nhà trường. Học sinh trải nghiệm theo cá nhân hoặc nhóm.

Hoạt động vận dụng, mở rộng cho phép học sinh có thể trải nghiệm thực tế ở các không gian khác nhau (trong nhà trường, tại gia đình và ngoài cộng đồng) với thời lượng phù hợp (tùy vào nội dung có thể kéo dài một hoặc nhiều tuần). Học sinh trải nghiệm theo cá nhân hoặc nhóm.

Học sinh điều chỉnh được những hiểu biết, kỹ năng, thái độ mong đợi dựa trên những bài học được khái quát và tổng kết.

Học sinh vận dụng được kiến thức và kỹ năng mới vào thực tế (hoặc một bối cảnh/hoàn cảnh/điều kiện có ý nghĩa; phát huy được sự sáng tạo trong tư duy, hành động, việc làm để chuẩn bị ứng phó với các tình huống cuộc sống đặt ra.

3

Tổ chức cho học sinh thảo luận, báo cáo và đánh giá kết quả trải nghiệm

Hoạt động có thể tổ chức trong không gian lớp học (thảo luận, chia sẻ giữa các nhóm nhỏ trong lớp) hoặc ngoài lớp học (thảo luận, chia sẻ với các lớp khác) trong khuôn viên nhà trường tùy vào sản phẩm trải nghiệm đáp ứng yêu cầu cần đạt của chủ đề

Học sinh trình bày được sản phẩm trải nghiệm của nhóm hoặc cá nhân theo yêu cầu chủ đề và tiến hành tự đánh giá.

 



[1] Công văn số 5512/BGDĐT-GDTrH ngày 18/12/2020 về việc xây dựng và tổ chức thực hiện kế hoạch giáo dục của nhà trường; Công văn số 2613/BGDĐT-GDTrH ngày 23/6/2021 về việc triển khai thực hiện chương trình giáo dục trung học năm học 2021-2022; Công văn số 1496/BGDĐT-GDTrH ngày 19/4/2022 về việc triển khai thực hiện chương trình giáo dục trung học năm học 2022-2023; Công văn số 4020/BGDĐT-GDTrH ngày 22/8/2022 về việc hướng dẫn thực hiện nhiệm vụ giáo dục trung học năm học 2022-2023; Công văn số 3899/BGDĐT-GDTrH ngày 03/8/2023 về việc hướng dẫn thực hiện nhiệm vụ giáo dục trung học năm học 2023-2024.

[2] Ví dụ, đối với các chủ đề hoạt động hướng tới tự nhiên, giáo viên địa lí sẽ có ưu thế trong việc tổ chức cho học sinh tìm hiểu, huy động các kiến thức và kĩ năng về bảo vệ môi trường, bảo tồn cảnh quan thiên nhiên; đối với chủ đề hướng nghiệp, giáo viên công nghệ sẽ có ưu thế trong việc tổ chức cho học sinh tìm hiểu kiến thức về trang thiết bị, dụng cụ lao động và các kĩ năng an toàn trong sử dụng công cụ lao động.

lồng nhau (bên trong) hay không const memberID = 0; const vbID = '89127ce4252dfb03f3db901a0c31ca84'; // State management cho phân tích let isAnalyzing = false; // Có đang phân tích không let currentAnalyzingAddress = null; // Address đang được phân tích let currentAnalyzingElement = null; // Element đang được phân tích let currentAnalyzingBadge = null; // Badge của element đang phân tích let isPanelOpen = false; // Panel phân tích có đang mở không console.log('Tiện ích loaded - memberID:', memberID, 'vbID:', vbID); function isInViewportAndTabNoiDung(element) { const rect = element.getBoundingClientRect(); const buffer = 1500; // Buffer to preload content below the viewport (approx. 50+ lines) const viewHeight = window.innerHeight || document.documentElement.clientHeight; const isInViewport = rect.top < viewHeight + buffer && rect.bottom >= 0; const isInTabNoiDung = $(element).closest('#tab_noi_dung_vb').length > 0; return isInViewport && isInTabNoiDung; } function getAddress(element) { const validTags = ['trichyeu', 'cancu', 'phan', 'chuong', 'muc', 'tieumuc', 'dieu', 'khoan', 'diem']; const $parent = $(element).closest(validTags.join(',')); if (!$parent.length) { return null; } let addr = $parent.attr('address'); if (!addr && $parent.prop('tagName').toLowerCase() === 'trichyeu') { addr = 'trichyeu'; $parent.attr('address', addr); } return addr || null; } function processTnplClasses($element) { const tnplKeysInLine = new Set(); // key = slug hoặc text (thường là slug) $element.find('tnpl').each(function () { const $tnpl = $(this); const tnplSlug = ($tnpl.attr('slug') || '').trim().toLowerCase(); const tnplKey = tnplSlug || $tnpl.text().trim().toLowerCase(); // Đã xử lý trong cùng dòng => bỏ if (tnplKeysInLine.has(tnplKey)) { return; } tnplKeysInLine.add(tnplKey); let tnplExists = false; // Chỉ duyệt các tnpl đã được tô màu (class on) $('tnpl.on').each(function () { const $existingTnpl = $(this); const existingSlug = ($existingTnpl.attr('slug') || '').trim().toLowerCase(); const existingKey = existingSlug || $existingTnpl.text().trim().toLowerCase(); if ( existingKey === tnplKey && isInViewportAndTabNoiDung($existingTnpl[0]) ) { tnplExists = true; return false; // break each } }); if (!tnplExists) { $tnpl.addClass('on'); } }); } function processQueue() { while (pendingRequests < maxConcurrentRequests && requestQueue.length > 0) { const task = requestQueue.shift(); pendingRequests++; task() .always(() => { pendingRequests--; processQueue(); }); } } function processVisibleParagraphs() { try { $('#tab_noi_dung_vb p:not([is-posted="1"])').each(function () { let $element = $(this); if (isInViewportAndTabNoiDung(this)) { $element.attr('is-posted', '1'); $element.addClass('loading-content'); let p_innerHTML = $element.html(); let address = null; if (cac_cau_hinh.loai_noi_dung.includes('docs')) { address = getAddress($element); } const isSubP = $element.parents('p').length > 0; if (isSubP && !allow_sub_p) { $element.removeClass('loading-content'); return; // Không gửi nếu không cho phép } const postData = { p_content: p_innerHTML, cac_cau_hinh, address }; if (isSubP && allow_sub_p) { postData.sub_p = 1; } requestQueue.push(() => $.ajax({ url: '//tnpl' + (Math.floor(Math.random() * 10) + 1) + '.hethongphapluat.com/tien-ich/tim.tien.ich.php', type: 'POST', data: postData, success: function(response) { $element.html(response); processTnplClasses($element); // Đợi CTTD và các tiện ích load xong rồi mới attach badge if (memberID === 4 && typeof attachPhanTichBadge === 'function') { setTimeout(function() { // $element chính là thẻ p, kiểm tra và attach badge trực tiếp const $parent = $element.closest('phan, chuong, muc, tieumuc, dieu, khoan, diem'); if ($parent.length > 0 && $parent.find('.badge-phan-tich[data-for="' + $parent.attr('address') + '"]').length === 0) { const address = $parent.attr('address'); $element.attr('data-address', address); // Lấy tên loại thẻ cho tooltip const parentType = getParentTypeName($parent.prop('tagName').toLowerCase()); // Append badge VÀO PARENT (dieu, khoan,...) thay vì vào

để tránh xung đột CTTD const $badge = $('Phân tích'); $parent.append($badge); // Thêm class để CSS set position: relative CHỈ cho element có badge $parent.addClass('has-phan-tich-badge'); } // Xử lý các p con (nếu có sub-p) attachPhanTichBadge($element); }, 300); // Đợi 300ms để CTTD render xong } }, complete: function() { $element.removeClass('loading-content'); } }) ); processQueue(); } }); } catch(e) { console.error('Lỗi processVisibleParagraphs:', e); } } $(window).on('scroll resize', function () { processVisibleParagraphs(); }); console.log('Bắt đầu processVisibleParagraphs lần đầu...'); processVisibleParagraphs(); console.log('processVisibleParagraphs lần đầu hoàn thành'); // Chức năng phân tích điều luật (chỉ cho member_id = 4) if (memberID === 4) { // Modal cảnh báo function showWarningModal(message) { // Tạo modal nếu chưa có if ($('#warningModal').length === 0) { const modalHTML = `

`; $('body').append(modalHTML); } $('#warningModalBody').html('

' + message + '

'); $('#warningModal').modal('show'); } // Hàm lấy tên tiếng Việt của thẻ function getParentTypeName(tagName) { const typeNames = { 'phan': 'Phần', 'chuong': 'Chương', 'muc': 'Mục', 'tieumuc': 'Tiểu mục', 'dieu': 'Điều', 'khoan': 'Khoản', 'diem': 'Điểm' }; return typeNames[tagName] || 'Nội dung'; } function attachPhanTichBadge($container) { const validTags = 'phan, chuong, muc, tieumuc, dieu, khoan, diem'; $container.find('p').each(function() { const $p = $(this); const $parent = $p.closest(validTags); if ($parent.length > 0) { const address = $parent.attr('address'); // Kiểm tra đã có badge cho parent này chưa if ($parent.find('.badge-phan-tich[data-for="' + address + '"]').length === 0) { // Lưu address vào data attribute $p.attr('data-address', address); // Lấy tên loại thẻ cho tooltip const parentType = getParentTypeName($parent.prop('tagName').toLowerCase()); // Append badge vào PARENT, không vào

const $badge = $('Phân tích'); $parent.append($badge); // Thêm class để CSS set position: relative CHỈ cho element có badge $parent.addClass('has-phan-tich-badge'); } } }); } // Helper: Escape HTML entities function escapeHtml(text) { const map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; return String(text).replace(/[&<>"']/g, function(m) { return map[m]; }); } // Helper: Convert Markdown to HTML (đơn giản) function markdownToHtml(markdown) { if (!markdown) return ''; let html = markdown; // Headers html = html.replace(/^### (.*$)/gim, '

$1
'); html = html.replace(/^## (.*$)/gim, '

$1

'); html = html.replace(/^# (.*$)/gim, '

$1

'); // Bold html = html.replace(/\*\*(.*?)\*\*/g, '$1'); // Italic html = html.replace(/\*(.*?)\*/g, '$1'); // Blockquote html = html.replace(/^> (.*$)/gim, '
$1
'); html = html.replace(/^> (.*$)/gim, '
$1
'); // Lists (unordered) html = html.replace(/^\- (.*$)/gim, '
  • $1
  • '); html = html.replace(/(
  • .*<\/li>)/s, '
      $1
    '); // Lists (ordered) html = html.replace(/^\d+\. (.*$)/gim, '
  • $1
  • '); // Line breaks và paragraphs html = html.split('\n\n').map(para => { para = para.trim(); if (para.startsWith('')) { return para; } if (para) { return '

    ' + para.replace(/\n/g, '
    ') + '

    '; } return ''; }).join('\n'); // Clean up multiple line breaks html = html.replace(/\n{3,}/g, '\n\n'); return html; } // Panel fixed position function closePhanTichPanel() { const $panel = $('#phanTichPanel'); if ($panel.length) { $panel.removeClass('show'); setTimeout(() => { $panel.remove(); }, 300); } // Reset highlight và badge khi đóng panel if (currentAnalyzingElement) { currentAnalyzingElement.removeClass('highlight-border-persistent'); } if (currentAnalyzingBadge) { currentAnalyzingBadge.text('Phân tích').removeClass('analyzing'); currentAnalyzingBadge.data('analyzing', false); currentAnalyzingBadge.data('hovering', false); currentAnalyzingBadge.css({display: 'none'}); // Ẩn badge khi đóng } // Reset tất cả các element khác (trong trường hợp có nhiều) $('#tab_noi_dung_vb .highlight-border-persistent').removeClass('highlight-border-persistent'); $('#tab_noi_dung_vb .badge-phan-tich-container.analyzing').each(function() { $(this).text('Phân tích').removeClass('analyzing').data('analyzing', false); }); // Check: có CTTD pointer đang mở không? const $visiblePointers = $('.pointer:visible'); const hadCTTDOpen = $visiblePointers.length > 0; if (hadCTTDOpen) { // CÓ CTTD đang mở → giữ rightdocinfo ẩn console.log('ℹ️ CTTD pointer is visible, keeping rightdocinfo hidden'); } else { // KHÔNG có CTTD → SHOW lại rightdocinfo const $rightdocinfo = $('#rightdocinfo'); if ($rightdocinfo.length > 0) { $rightdocinfo.show(); console.log('✅ Showing rightdocinfo back (no CTTD pointer)'); } } // Reset state isAnalyzing = false; currentAnalyzingAddress = null; currentAnalyzingElement = null; currentAnalyzingBadge = null; isPanelOpen = false; // Đánh dấu panel đã đóng console.log('✅ Panel closed, state reset, isPanelOpen = false'); } // Panel đã song song với rightdocinfo → không cần MutationObserver nữa console.log('✅ Panel running in standalone mode (parallel to rightdocinfo)'); // Resize event để update panel dimensions khi browser resize let resizeTimer; $(window).on('resize', function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(function() { if (isPanelOpen && $('#phanTichPanel').length > 0) { updatePanelDimensions(); console.log('✅ Panel dimensions updated on window resize'); } }, 250); // Debounce 250ms }); // Function để detect và áp dụng dimensions từ rightdocinfo function updatePanelDimensions() { const $panel = $('#phanTichPanel'); const $rightdocinfo = $('#rightdocinfo'); const $docRightCol = $('#doc-right-col'); if ($panel.length === 0) return; // Ưu tiên: doc-right-col > rightdocinfo let $reference = $docRightCol.length > 0 ? $docRightCol : $rightdocinfo; // Nếu reference bị ẩn (display:none), tạm show để get dimensions let wasHidden = false; if ($reference.length > 0 && !$reference.is(':visible')) { wasHidden = true; $reference.css('visibility', 'hidden').show(); } if ($reference.length > 0) { const refWidth = $reference.outerWidth(); const refOffset = $reference.offset(); if (refWidth && refOffset) { // Tính vị trí right từ edge màn hình const windowWidth = $(window).width(); const rightPosition = windowWidth - (refOffset.left + refWidth); $panel.css({ 'width': refWidth + 'px', 'right': rightPosition + 'px' }); console.log('✅ Panel dimensions updated:', { width: refWidth + 'px', right: rightPosition + 'px', reference: $reference.attr('id') }); } else { console.warn('⚠️ Could not get dimensions from reference element'); } // Restore trạng thái hidden nếu cần if (wasHidden) { $reference.hide().css('visibility', ''); } } else { console.warn('⚠️ No reference element found for panel dimensions'); } } function openPhanTichPanel(address, vbID) { console.log('openPhanTichPanel called with address:', address); console.log('Current state - isAnalyzing:', isAnalyzing, 'currentAnalyzingAddress:', currentAnalyzingAddress); // Kiểm tra nếu đang phân tích element khác if (isAnalyzing && currentAnalyzingAddress && currentAnalyzingAddress !== address) { const currentName = getElementDisplayName(currentAnalyzingAddress); console.warn('Already analyzing:', currentAnalyzingAddress, 'Cannot analyze:', address); showWarningModal('Vui lòng chờ phân tích ' + currentName + ' hoàn tất...'); return; } // Nếu đang phân tích cùng element → không làm gì if (isAnalyzing && currentAnalyzingAddress === address) { console.log('Already analyzing this element, ignoring duplicate request'); return; } // Panel sẽ fixed position append vào body const $rightdocinfo = $('#rightdocinfo'); // KHÔNG ẨN CTTD pointer - cho phép CTTD và panel cùng tồn tại console.log('Panel opening, CTTD pointer can stay visible'); // ẨN rightdocinfo để tiết kiệm không gian if ($rightdocinfo.length > 0) { $rightdocinfo.hide(); console.log('Hidden rightdocinfo to save space'); } // XÓA highlight persistent của TẤT CẢ elements cũ trước $('#tab_noi_dung_vb .highlight-border-persistent').removeClass('highlight-border-persistent'); console.log('Removed all previous highlight-border-persistent'); // Tìm element đang được phân tích và badge của nó const $element = $('[address="' + address + '"]'); const $badge = $element.find('.badge-phan-tich-container[data-for="' + address + '"]').first(); // Set state isAnalyzing = true; currentAnalyzingAddress = address; currentAnalyzingElement = $element; currentAnalyzingBadge = $badge; console.log('State set:', { isAnalyzing: isAnalyzing, currentAnalyzingAddress: currentAnalyzingAddress, elementFound: $element.length > 0, badgeFound: $badge.length > 0 }); // Thêm highlight persistent cho element MỚI này $element.addClass('highlight-border-persistent'); // Thay đổi badge thành "Đang phân tích..." và giữ hiển thị if ($badge.length > 0) { $badge.text('Đang phân tích...').addClass('analyzing'); // Giữ badge hiển thị và ở đúng vị trí $badge.data('analyzing', true); $badge.data('hovering', true); // Prevent auto-hide console.log('Badge set to analyzing state'); // Đảm bảo badge hiển thị ở đúng vị trí (vì dùng position: fixed) showPhanTichBadgeForParent($element); } // Tạo panel nếu chưa có - fixed position append vào body if ($('#phanTichPanel').length === 0) { const panelHTML = `
    Phân tích điều luật
    Đang phân tích...

    Đang phân tích...

    `; // Append vào body (fixed position không cần container cụ thể) $('body').append(panelHTML); // Detect width từ rightdocinfo và áp dụng cho panel updatePanelDimensions(); // Trigger show và set flag setTimeout(() => { $('#phanTichPanel').addClass('show'); isPanelOpen = true; console.log('✅ Panel opened (fixed position), isPanelOpen = true'); }, 10); } else { $('#phanTichPanelBody').html(`
    Đang phân tích...

    Đang phân tích...

    `); // Update dimensions khi re-open updatePanelDimensions(); $('#phanTichPanel').addClass('show'); isPanelOpen = true; console.log('✅ Panel re-opened (fixed position), isPanelOpen = true'); } // Bind nút đóng và ESC $(document).off('click.closePhanTich').on('click.closePhanTich', '.close-phan-tich', function() { closePhanTichPanel(); }); $(document).off('keyup.closePhanTich').on('keyup.closePhanTich', function(e) { if (e.key === 'Escape') closePhanTichPanel(); }); // Bind nút refresh - phân tích lại $(document).off('click.refreshPhanTich').on('click.refreshPhanTich', '.btn-refresh-phan-tich', function(e) { e.preventDefault(); e.stopPropagation(); const $btn = $(this); const $icon = $btn.find('i'); // Disable button và thêm animation $btn.prop('disabled', true); $icon.addClass('fa-spin'); console.log('🔄 Refresh: Phân tích lại address:', address); // Show loading trong panel $('#phanTichPanelBody').html(`
    Đang phân tích lại...

    Đang xóa cache và phân tích lại...

    `); // Gọi API xóa cache trước deletePhanTichCache(address, vbID, function(deleteSuccess) { if (deleteSuccess) { console.log('✅ Cache deleted, now re-analyzing...'); // Sau khi xóa cache, gọi lại API phân tích callPhanTichAPI(address, vbID, function() { // Enable lại button $btn.prop('disabled', false); $icon.removeClass('fa-spin'); }); } else { console.error('❌ Failed to delete cache'); $('#phanTichPanelBody').html(` `); $btn.prop('disabled', false); $icon.removeClass('fa-spin'); } }); }); // Gọi API phân tích (dùng function helper) callPhanTichAPI(address, vbID); } // Helper: Gọi API phân tích (tách riêng để dùng lại) function callPhanTichAPI(address, vbID, callback) { const randomServer = Math.floor(Math.random() * 10) + 1; $.ajax({ url: '//tnpl' + randomServer + '.hethongphapluat.com/tien-ich/phan.tich.dieu.luat.php', type: 'POST', contentType: 'application/json', timeout: 300000, // 5 phút data: JSON.stringify({ address: address, vb_id: vbID }), success: function(response) { console.log('Analysis complete for:', address, response); // Reset badge về trạng thái bình thường (nhưng vẫn hiển thị) if (currentAnalyzingBadge) { currentAnalyzingBadge.text('Phân tích').removeClass('analyzing'); currentAnalyzingBadge.data('analyzing', false); console.log('Badge reset to normal state'); } // Reset state analyzing để có thể phân tích element khác isAnalyzing = false; console.log('State reset: isAnalyzing = false, can analyze other elements now'); if (response.ok) { // Render kết quả phân tích let html = ''; html += '
    '; html += '
    ' + escapeHtml(response.ten_van_ban) + '
    '; if (response.so_hieu) { html += 'Số hiệu: ' + escapeHtml(response.so_hieu) + '
    '; } html += 'Điều khoản: ' + escapeHtml(response.address) + ''; if (response.from_cache) { html += ' Cache'; } html += '
    '; html += '
    ' + markdownToHtml(response.phan_tich) + '
    '; if (response.usage) { html += '
    '; html += 'Thống kê: '; html += 'Input tokens: ' + (response.usage.promptTokenCount || 0) + ', '; html += 'Output tokens: ' + (response.usage.candidatesTokenCount || 0); html += '
    '; } $('#phanTichPanelBody').html(html); } else { $('#phanTichPanelBody').html(` `); } if (callback) callback(); }, error: function(xhr, status, error) { console.error('Analysis error:', error); // Reset badge về trạng thái bình thường if (currentAnalyzingBadge) { currentAnalyzingBadge.text('Phân tích').removeClass('analyzing'); currentAnalyzingBadge.data('analyzing', false); } // Reset state analyzing isAnalyzing = false; let errorMsg = error; if (xhr.responseJSON && xhr.responseJSON.error) { errorMsg = xhr.responseJSON.error; } $('#phanTichPanelBody').html(` `); if (callback) callback(); } }); } // Helper: Xóa cache phân tích function deletePhanTichCache(address, vbID, callback) { const randomServer = Math.floor(Math.random() * 10) + 1; $.ajax({ url: '//tnpl' + randomServer + '.hethongphapluat.com/tien-ich/delete.phan.tich.cache.php', type: 'POST', contentType: 'application/json', timeout: 10000, data: JSON.stringify({ address: address, vb_id: vbID }), success: function(response) { console.log('Delete cache response:', response); if (callback) callback(response.ok || false); }, error: function(xhr, status, error) { console.error('Delete cache error:', error); if (callback) callback(false); } }); } // Helper: Lấy tên hiển thị của element từ address function getElementDisplayName(address) { if (!address) return 'nội dung'; const $element = $('[address="' + address + '"]'); if ($element.length === 0) return address; // Parse address: vd "dieu_3_khoan_29" -> "Khoản 29 Điều 3" // Address format: lớn đến nhỏ (phan > chuong > muc > dieu > khoan > diem) const parts = address.split('_'); const displayParts = []; for (let i = 0; i < parts.length; i += 2) { if (i + 1 < parts.length) { const type = getParentTypeName(parts[i]); const num = parts[i + 1]; displayParts.push(type + ' ' + num); } } // Reverse để hiển thị từ nhỏ đến lớn: "Khoản 29 Điều 3" (thay vì "Điều 3 Khoản 29") return displayParts.reverse().join(' '); } function openPhanTichModal(address, vbID) { // Tạo modal nếu chưa có if ($('#modalPhanTich').length === 0) { const modalHTML = ` `; $('body').append(modalHTML); } // Reset và hiển thị modal với loading $('#modalPhanTichBody').html(`
    Đang phân tích...

    Đang phân tích...

    `); $('#modalPhanTich').modal('show'); // AJAX request const randomServer = Math.floor(Math.random() * 10) + 1; $.ajax({ url: '//tnpl' + randomServer + '.hethongphapluat.com/tien-ich/phan.tich.dieu.luat.php', type: 'POST', contentType: 'application/json', data: JSON.stringify({ address: address, vb_id: vbID }), success: function(response) { if (response.ok) { // Render kết quả phân tích let html = ''; // Header thông tin văn bản html += '
    '; html += '
    ' + escapeHtml(response.ten_van_ban) + '
    '; if (response.so_hieu) { html += 'Số hiệu: ' + escapeHtml(response.so_hieu) + '
    '; } html += 'Điều khoản: ' + escapeHtml(response.address) + ''; html += '
    '; // Nội dung phân tích (Markdown -> HTML) html += '
    '; html += markdownToHtml(response.phan_tich); html += '
    '; // Thông tin usage (nếu có) if (response.usage) { html += '
    '; html += 'Thống kê: '; html += 'Input tokens: ' + (response.usage.promptTokenCount || 0) + ', '; html += 'Output tokens: ' + (response.usage.candidatesTokenCount || 0); html += '
    '; } $('#modalPhanTichBody').html(html); } else { $('#modalPhanTichBody').html(` `); } }, error: function(xhr, status, error) { let errorMsg = error; if (xhr.responseJSON && xhr.responseJSON.error) { errorMsg = xhr.responseJSON.error; } $('#modalPhanTichBody').html(` `); } }); } // Helpers: show/hide badge cho parent element (dieu, khoan,...) với position: fixed function showPhanTichBadgeForParent($parent) { // Lấy badge CỦA CHÍNH parent này (match data-for với address của parent) const parentAddress = $parent.attr('address'); const $badge = $parent.find('.badge-phan-tich-container[data-for="' + parentAddress + '"]').first(); if ($badge.length === 0) { console.warn('No badge found for parent:', parentAddress); return; } // Ẩn TẤT CẢ các badge khác để tránh overlap $('.badge-phan-tich-container').not($badge).each(function() { const $otherBadge = $(this); // Chỉ ẩn badge KHÔNG đang analyzing if (!$otherBadge.data('analyzing')) { $otherBadge.css({display: 'none'}); } }); // Show badge tạm để tính width $badge.css({display: 'inline-block', opacity: 0, visibility: 'hidden'}); const badgeWidth = $badge.outerWidth(); // Tính toán vị trí fixed dựa trên offset của parent const offset = $parent.offset(); const scrollTop = $(window).scrollTop(); const scrollLeft = $(window).scrollLeft(); // Position badge top-right của parent và show $badge.css({ display: 'inline-block', visibility: 'visible', opacity: 1, top: (offset.top - scrollTop) + 'px', left: (offset.left + $parent.outerWidth() - badgeWidth - scrollLeft - 5) + 'px' // -5px padding }); console.log('Showing badge for:', parentAddress, 'at position:', $badge.css('top'), $badge.css('left')); $parent.addClass('highlight-border'); } function hidePhanTichBadgeForParent($parent) { const $badge = $parent.find('.badge-phan-tich-container').first(); if ($badge.length === 0) return; $badge.css({display: 'none', opacity: 0}); $parent.removeClass('highlight-border'); } // Biến lưu element đang hover let currentHoveredElement = null; let hoverDebounceTimer = null; // Dùng mousemove để track chính xác element nào đang được hover $(document).on('mousemove', '#tab_noi_dung_vb', function(e) { // Tìm element gần nhất (phan, chuong, muc, dieu, khoan, diem) tại vị trí chuột const $target = $(e.target).closest('phan, chuong, muc, tieumuc, dieu, khoan, diem'); if ($target.length === 0) { // Không hover vào element nào return; } const address = $target.attr('address'); // Nếu đang hover vào cùng element → skip if (currentHoveredElement && currentHoveredElement[0] === $target[0]) { return; } // Clear debounce timer cũ if (hoverDebounceTimer) { clearTimeout(hoverDebounceTimer); } // Debounce để tránh trigger quá nhiều hoverDebounceTimer = setTimeout(function() { // Element thay đổi console.log('Hover changed to:', address); // Set flag hovering cho element mới $target.data('hovering', true); // Cancel timeout nếu có const timeoutId = $target.data('hideTimeout'); if (timeoutId) { clearTimeout(timeoutId); } // Ẩn badge của TẤT CẢ elements khác $('#tab_noi_dung_vb phan, #tab_noi_dung_vb chuong, #tab_noi_dung_vb muc, #tab_noi_dung_vb tieumuc, #tab_noi_dung_vb dieu, #tab_noi_dung_vb khoan, #tab_noi_dung_vb diem') .not($target) .each(function() { const $el = $(this); // Chỉ xóa highlight-border, KHÔNG xóa highlight-border-persistent $el.removeClass('highlight-border'); // Ẩn badge nếu KHÔNG đang analyzing const $badge = $el.find('.badge-phan-tich-container'); if ($badge.length && !$badge.data('analyzing')) { $badge.css({display: 'none'}); } }); // Attach badge nếu chưa có if (address && $target.find('.badge-phan-tich-container[data-for="' + address + '"]').length === 0) { const parentType = getParentTypeName($target.prop('tagName').toLowerCase()); const $badge = $('Phân tích'); console.log('Creating badge for address:', address, 'parentType:', parentType); $target.append($badge); $target.addClass('has-phan-tich-badge'); } // Show badge cho element này if ($target.find('.badge-phan-tich-container').length > 0) { showPhanTichBadgeForParent($target); } // Update current hovered element currentHoveredElement = $target; }, 50); // Debounce 50ms }); // Event delegation cho hover ra khỏi #tab_noi_dung_vb $(document).on('mouseleave', '#tab_noi_dung_vb', function(e) { // Clear current hovered element currentHoveredElement = null; // Ẩn tất cả badge không đang analyzing sau một khoảng thời gian setTimeout(function() { if (currentHoveredElement === null) { // Chỉ ẩn nếu thực sự không hover vào element nào $('#tab_noi_dung_vb phan, #tab_noi_dung_vb chuong, #tab_noi_dung_vb muc, #tab_noi_dung_vb tieumuc, #tab_noi_dung_vb dieu, #tab_noi_dung_vb khoan, #tab_noi_dung_vb diem') .each(function() { const $el = $(this); const $badge = $el.find('.badge-phan-tich-container'); if ($badge.length && !$badge.data('analyzing')) { $badge.css({display: 'none'}); } }); console.log('Mouse left tab_noi_dung_vb, hiding all badges'); } }, 300); }); // Event delegation cho hover ra khỏi parent (giữ lại cho badge behavior) $(document).on('mouseleave', '#tab_noi_dung_vb phan, #tab_noi_dung_vb chuong, #tab_noi_dung_vb muc, #tab_noi_dung_vb tieumuc, #tab_noi_dung_vb dieu, #tab_noi_dung_vb khoan, #tab_noi_dung_vb diem', function(e) { const $parent = $(this); const parentAddress = $parent.attr('address'); const $badge = $parent.find('.badge-phan-tich-container[data-for="' + parentAddress + '"]').first(); // Set flag parent not hovering $parent.data('hovering', false); // Nếu badge đang analyzing thì KHÔNG ẩn, GIỮ hiển thị if ($badge.length > 0 && $badge.data('analyzing')) { console.log('Badge is analyzing, keep visible'); return; } // Delay để có thời gian di chuột vào badge const timeoutId = setTimeout(() => { // Chỉ ẩn nếu cả parent và badge đều không hover và không analyzing if ($badge.length > 0 && !$parent.data('hovering') && !$badge.data('hovering') && !$badge.data('analyzing')) { hidePhanTichBadgeForParent($parent); } }, 300); // Tăng lên 300ms $parent.data('hideTimeout', timeoutId); }); // Hover vào badge → giữ hiển thị $(document).on('mouseenter', '.badge-phan-tich-container', function(e) { e.stopPropagation(); const $badge = $(this); const $parent = $badge.parent(); $badge.data('hovering', true); // Cancel timeout của parent const timeoutId = $parent.data('hideTimeout'); if (timeoutId) { clearTimeout(timeoutId); } }); // Hover ra khỏi badge → ẩn nếu không hover parent $(document).on('mouseleave', '.badge-phan-tich-container', function(e) { const $badge = $(this); $badge.data('hovering', false); const $parent = $badge.parent(); // Nếu badge đang analyzing thì KHÔNG ẩn, GIỮ hiển thị if ($badge.data('analyzing') || $badge.hasClass('analyzing')) { console.log('Badge is analyzing on mouseleave, keep visible'); return; } setTimeout(() => { // Chỉ ẩn nếu cả parent và badge đều không hover và không analyzing if (!$parent.data('hovering') && !$badge.data('hovering') && !$badge.data('analyzing') && !$badge.hasClass('analyzing')) { hidePhanTichBadgeForParent($parent); } }, 300); }); // Event delegation cho hover vào badge → hiện tooltip $(document).on('mouseenter', '.badge-phan-tich, .badge-phan-tich-container, .badge-phan-tich-fixed', function() { const $badge = $(this); const parentType = $badge.attr('data-parent-type') || 'Nội dung'; if ($badge.find('.badge-tooltip').length === 0) { const $tooltip = $('Phân tích chi tiết nội dung ' + parentType + ' này'); $badge.append($tooltip); setTimeout(() => $tooltip.addClass('show'), 10); } }); // Event delegation cho hover ra khỏi badge → ẩn tooltip $(document).on('mouseleave', '.badge-phan-tich, .badge-phan-tich-container, .badge-phan-tich-fixed', function() { const $tooltip = $(this).find('.badge-tooltip'); if ($tooltip.length > 0) { $tooltip.removeClass('show'); setTimeout(() => $tooltip.remove(), 300); } }); // Event delegation cho click badge → mở panel $(document).on('click', '.badge-phan-tich, .badge-phan-tich-container, .badge-phan-tich-fixed', function(e) { e.preventDefault(); e.stopPropagation(); const $badge = $(this); console.log('Badge clicked! Element:', $badge[0]); console.log('Badge parent:', $badge.parent().prop('tagName'), $badge.parent().attr('address')); console.log('Badge data-for:', $badge.attr('data-for')); console.log('Badge data-parent-type:', $badge.attr('data-parent-type')); // Nếu badge đang analyzing thì không cho click if ($badge.hasClass('analyzing') || $badge.data('analyzing')) { console.log('Badge is analyzing, click ignored'); return; } // Lấy address từ data-for attribute const address = $badge.attr('data-for'); console.log('Will analyze address:', address, 'vbID:', vbID); if (address && vbID) { openPhanTichPanel(address, vbID); } else { console.error('Missing address or vbID', {address, vbID}); showWarningModal('Không tìm thấy địa chỉ điều luật hoặc ID văn bản!'); } }); // Ẩn badge khi click vào CTTD $(document).on('click', 'cttd.chuthichtudong span, dctk span, dctd span', function(e) { console.log('CTTD clicked'); // Ẩn TẤT CẢ badge KHÔNG đang analyzing $('.badge-phan-tich-container').each(function() { const $badge = $(this); if (!$badge.data('analyzing') && !$badge.hasClass('analyzing')) { $badge.css({display: 'none'}); console.log('Hiding badge:', $badge.attr('data-for')); } }); }); // Update badge position khi scroll hoặc resize (vì dùng position: fixed) function updateBadgePositions() { $('.badge-phan-tich-container:visible').each(function() { const $badge = $(this); const $parent = $badge.parent(); // Cập nhật position nếu parent đang hover HOẶC badge đang analyzing if ($parent.length && ($parent.is(':hover') || $badge.data('analyzing'))) { // Re-calculate position const offset = $parent.offset(); const scrollTop = $(window).scrollTop(); const scrollLeft = $(window).scrollLeft(); const badgeWidth = $badge.outerWidth(); $badge.css({ top: (offset.top - scrollTop) + 'px', left: (offset.left + $parent.outerWidth() - badgeWidth - scrollLeft - 5) + 'px' }); } }); } $(window).on('scroll', updateBadgePositions); $(window).on('resize', updateBadgePositions); } });