Hệ thống pháp luật

ỦY BAN NHÂN DÂN
TỈNH VĨNH PHÚC
-------

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

Số: 220/KH-UBND

Vĩnh Phúc, ngày 16 tháng 8 năm 2023

 

KẾ HOẠCH

TRIỂN KHAI THỰC HIỆN CHỈ THỊ SỐ 21-CT/TW NGÀY 04/5/2023 CỦA BAN BÍ THƯ VỀ TIẾP TỤC ĐỔI MỚI, PHÁT TRIỂN VÀ NÂNG CAO CHẤT LƯỢNG GIÁO DỤC NGHỀ NGHIỆP ĐẾN NĂM 2030, TẦM NHÌN ĐẾN NĂM 2045

Thực hiện Chỉ thị số 21-CT/TW ngày 04/5/2023 của Ban chấp hành Trung ương về tiếp tục đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp đến năm 2030, tầm nhìn đến năm 2045 (sau đây gọi tắt là Chỉ thị 21) và Kế hoạch số 155-KH/TU ngày 28/6/2023 của Tỉnh ủy Vĩnh Phúc (sau đây gọi tắt là Kế hoạch số 155), UBND tỉnh Vĩnh Phúc ban hành Kế hoạch triển khai thực hiện Chỉ thị 21, cụ thể như sau:

I. MỤC ĐÍCH, YÊU CẦU

1. Mục đích

- Triển khai kịp thời, đồng bộ, có hiệu quả Chỉ thị số 21-CT/TW ngày 04/5/2023 của Ban Bí thư “về tiếp tục đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp đến năm 2030, tầm nhìn đến năm 2045”. Nâng cao nhận thức của cấp ủy, tổ chức đảng, chính quyền, cán bộ, đảng viên, người lao động và toàn xã hội về vai trò, tầm quan trọng của công tác đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp đến năm 2030, tầm nhìn đến năm 2045;

- Tăng cường sự lãnh đạo, chỉ đạo thống nhất, toàn diện của Đảng, sự quản lý của Nhà nước, tăng cường sự phối hợp chặt chẽ giữa Nhà nước - nhà trường - doanh nghiệp để tăng quy mô đào tạo giáo dục nghề nghiệp; cơ cấu ngành, nghề, trình độ đào tạo; chất lượng, hiệu quả đào tạo, nhất là đào tạo nguồn nhân lực chất lượng cao, ngành, nghề mới, kỹ năng tiên tiến;

- Tiếp tục đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp đến năm 2030, tầm nhìn đến năm 2045, về hình thức, phương pháp tổ chức đào tạo; chú trọng đào tạo lại, đào tạo thường xuyên cho người lao động; tạo đột phá về phát triển nguồn nhân lực, nhất là nguồn nhân lực chất lượng cao, có kỹ năng nghề đáp ứng yêu cầu đẩy mạnh công nghiệp hóa, hiện đại hóa đất nước và hội nhập quốc tế theo tinh thần Nghị quyết Đại hội XIII của Đảng và Nghị Quyết Đại hội Đảng bộ tỉnh Vĩnh Phúc lần thứ XVII.

2. Yêu cầu

- Tập trung quán triệt, tạo chuyển biến về nhận thức của các cấp ủy đảng, chính quyền, các ban ngành, đoàn thể cùng cán bộ đảng viên và nhân dân trong tỉnh nắm vững quan điểm của Đảng về giáo dục nghề nghiệp trong giai đoạn hiện nay về vị trí, vai trò, tầm quan trọng của việc phát triển và nâng cao chất lượng giáo dục nghề nghiệp;

- Các sở, ban ngành, đoàn thể, UBND các huyện, thành phố, các cơ sở giáo dục nghề nghiệp, doanh nghiệp trên địa bàn tỉnh nghiêm túc triển khai thực hiện Kế hoạch này.

II. MỤC TIÊU PHẤN ĐẤU

1. Mục tiêu tổng quát

Tăng cường đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp trên địa bàn tỉnh Vĩnh Phúc đến năm 2030, tầm nhìn đến năm 2045, tạo đột phá về phát triển nguồn nhân lực, nhất là nguồn nhân lực chất lượng cao, có kỹ năng nghề phục vụ phát triển kinh tế - xã hội trên địa bàn tỉnh, đáp ứng yêu cầu đẩy mạnh công nghiệp hóa, hiện đại hóa đất nước và hội nhập quốc tế.

2. Mục tiêu chung

- Phấn đấu đến năm 2030 Vĩnh Phúc tối thiểu có 40% học sinh sau trung học cơ sở tiếp tục học tập tại các cơ sở giáo dục nghề nghiệp; đào tạo lại, đào tạo thường xuyên cho khoảng 50% lực lượng lao động; có 01 cơ sở giáo dục nghề nghiệp chất lượng cao, tiếp cận trình độ các nước ASEAN-4, G20; có khoảng 10 ngành, nghề trọng điểm- Đến năm 2045, đáp ứng nhu cầu nhân lực có kỹ năng nghề cao của nước phát triển, đạt trình độ tiên tiến của thế giới.

III. NỘI DUNG TRIỂN KHAI

1. Tăng cường sự lãnh đạo đối với công tác đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp; Tổ chức tuyên truyền, quán triệt Chỉ thị 21, nâng cao nhận thức, trách nhiệm về đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp

- Tăng cường lãnh đạo, chỉ đạo của các cấp, các ngành, nâng cao nhận thức của người dân và xã hội về tầm quan trọng giáo dục nghề nghiệp; đẩy mạnh công tác hướng nghiệp, phân luồng học sinh sau trung học cơ sở và trung học phổ thông; chú trọng đầu tư xây dựng cơ sở giáo dục nghề nghiệp thuộc tỉnh đạt trình độ khu vực ASEAN và quốc tế; tạo cơ chế khuyến khích doanh nghiệp tham gia đào tạo nghề, gắn hoạt động của doanh nghiệp với cơ sở giáo dục nghề nghiệp. Đẩy mạnh công tác phát triển Đảng trong các cơ sở giáo dục nghề nghiệp; đưa nội dung phát triển giáo dục nghề nghiệp vào trong kế hoạch phát triển kinh tế - xã hội của tỉnh.

- Đẩy mạnh công tác tuyên truyền, giáo dục, nâng cao nhận thức, trách nhiệm trong cán bộ, đảng viên, nhất là cán bộ lãnh đạo, quản lý, người đứng đầu các cơ quan, tổ chức, doanh nghiệp về đổi mới, phát triển giáo dục nghề nghiệp là chủ trương lớn, nhất quán của Đảng, Nhà nước; là nhiệm vụ quan trọng, thường xuyên, lâu dài; khẳng định vị trí, vai trò, tầm quan trọng của giáo dục nghề nghiệp trong phát triển kinh tế - xã hội, góp phần tạo việc làm bền vững cho người lao động và thế hệ trẻ. Đồng thời, tạo sự chuyển biến mạnh mẽ trong nhận thức của người học, gia đình và xã hội về ý nghĩa của việc học nghề, kỹ năng nghề trong tiếp cận việc làm, nâng cao thu nhập và cơ hội học tập suốt đời. Huy động sự tham gia của xã hội trong thực hiện các mục tiêu, nhiệm vụ, giải pháp giáo dục nghề nghiệp, góp phần thực hiện thành công đột phá chiến lược về phát triển nguồn nhân lực, nhất là nguồn nhân lực chất lượng cao.

2. Tăng cường công tác hướng nghiệp trong giáo dục phổ thông

- Thực hiện tốt việc phân luồng, tăng tỷ lệ học sinh sau trung học cơ sở vào giáo dục nghề nghiệp;

- Thực hiện vừa đào tạo nghề vừa dạy văn hóa tại các cơ sở giáo dục nghề nghiệp theo các hình thức học trung cấp kết hợp với học chương trình giáo dục thường xuyên cấp trung học phổ thông để học sinh tốt nghiệp vừa có bằng trung học phổ thông vừa có bằng nghề bảo đảm chất lượng, có điều kiện tham gia thị trường lao động và cơ hội tiếp tục học tập, nâng cao trình độ; có chính sách khuyến khích học sinh khá, giỏi vào hệ thống giáo dục nghề nghiệp;

- Đẩy mạnh hướng nghiệp trước, trong và sau đào tạo nghề nghiệp; thúc đẩy tinh thần khởi nghiệp, đổi mới sáng tạo cho người học và các hoạt động hỗ trợ người học khởi nghiệp, tự tạo việc làm; xây dựng không gian khởi nghiệp, đổi mới sáng tạo trong các cơ sở giáo dục nghề nghiệp và hệ sinh thái khởi nghiệp giáo dục nghề nghiệp tại các cơ sở giáo dục nghề nghiệp.

3. Đẩy nhanh lộ trình phổ cập nghề cho thanh niên, công nhân, nông dân và người lao động

- Phổ cập nghề cho thanh niên, công nhân, nông dân và người lao động thông qua các hình thức hỗ trợ phù hợp; ưu tiên đào tạo nghề cho thanh niên hoàn thành nghĩa vụ quân sự, nghĩa vụ công an, thanh niên xung phong, người khuyết tật và các đối tượng yếu thế;

- Phát triển giáo dục nghề nghiệp ở vùng nông thôn, vùng khó khăn, vùng đồng bào dân tộc, miền núi; trong đó, đào tạo nghề cho nông dân, đồng bào dân tộc và tạo việc làm cho lao động nông thôn phải xuất phát từ nhu cầu sử dụng lao động thực sự của các cơ sở sản xuất, kinh doanh-dịch vụ trên địa bàn và từ nhu cầu phát triển kinh tế- xã hội của từng địa phương; đồng thời dựa trên nhu cầu thực tế về nghề nghiệp của người dân, không chạy theo chỉ tiêu, hình thức, phong trào;

- Đa dạng hoá các đối tượng học nghề, quan tâm đến các đối tượng chính sách, đặc thù, tôn vinh người học nghề có thành tích xuất sắc, người lao động có kỹ năng, tay nghề cao.

4. Rà soát, sắp xếp các cơ sở giáo dục nghề nghiệp thuộc tỉnh

- Rà soát, sắp xếp các cơ sở giáo dục nghề nghiệp thuộc tỉnh theo tinh thần Nghị quyết Trung ương 6 khoá XII về tiếp tục đổi mới hệ thống tổ chức và quản lý, nâng cao chất lượng và hiệu quả hoạt động của các đơn vị sự nghiệp công lập và Đề án số 16-ĐA/TU ngày 22/12/2022 của Tỉnh ủy sắp xếp tổ chức bộ máy một số đầu mối cấp tỉnh, cấp huyện giai đoạn 2022-2025 bảo đảm quy mô, cơ cấu và hợp lý về ngành, nghề, trình độ đào tạo, chuẩn hoá, hiện đại hoá, có phân tầng chất lượng, gắn với yêu cầu và xu hướng phát triển của thị trường lao động. Chú trọng đào tạo các ngành, nghề, lĩnh vực có thể mạnh gắn với nhu cầu thị trường lao động;

- Ưu tiên quỹ đất sạch dành cho giáo dục nghề nghiệp; khuyến khích phát triển cơ sở giáo dục nghề nghiệp của tư nhân, các đơn vị có vốn đầu tư nước ngoài cùng tham gia. Thu hút đầu tư thành lập các Trường cao đẳng chất lượng cao, đào tạo các ngành nghề trọng điểm của tỉnh;

- Tăng cường công tác giám sát, thanh tra, kiểm tra; định kỳ đánh giá, xếp loại chất lượng các cơ sở giáo dục nghề nghiệp.

5. Đổi mới nội dung, chương trình, phương thức đào tạo; đánh giá, kiểm định chất lượng giáo dục nghề nghiệp

- Đổi mới nội dung, chương trình, phương thức đào tạo, bảo đảm "học đi đối với hành", kết hợp giữa lý thuyết và thực hành, đào tạo tại nhà trường kết hợp với đào tạo tại doanh nghiệp;

- Nâng cấp và chuẩn hoá cơ sở vật chất, trang thiết bị, phương tiện đào tạo của các cơ sở giáo dục nghề nghiệp thuộc tỉnh theo hướng đồng bộ, hiện đại, tiếp cận với thiết bị đào tạo của các nước trong khu vực ASEAN và thế giới;

- Quan tâm đào tạo, bồi dưỡng nhà giáo, người dạy nghề, chuyên gia cho các ngành, nghề trọng điểm; nâng cao năng lực đội ngũ nhà giáo, cán bộ quản lý giáo dục nghề nghiệp theo hướng hiện đại, chất lượng cao, tiếp cận chuẩn của các nước tiên tiến;

- Chú trọng đào tạo kỹ năng nghề gắn với giáo dục đạo đức, lối sống, ý thức kỷ luật, kỹ năng mềm, tác phong công nghiệp, nâng cao trình độ ngoại ngữ, kỹ năng số cho người học; thường xuyên cập nhật, đào tạo lại cho lực lượng lao động nhằm nâng cao khả năng thích ứng với yêu cầu đổi mới công nghệ, phát triển kinh tế số, kinh tế xanh, kinh tế tuần hoàn;

- Đổi mới việc đánh giá kiến thức, kỹ năng của người học, người lao động; phát triển hệ thống đánh giá, kiểm định chất lượng giáo dục nghề nghiệp; rà soát, đánh giá thực trạng chuyển đổi số trong quản lý, quản trị, hoạt động đào tạo nghề nghiệp so với các chỉ tiêu cơ bản của phát triển năng lực số cho đội ngũ nhà giáo và cán bộ giáo dục nghề nghiệp, đổi mới phương pháp dạy và học; xây dựng thư viện điện tử trong nhà trường.

6. Nâng cao hiệu quả liên kết, hợp tác về giáo dục nghề nghiệp

- Nâng cao hiệu quả liên kết, hợp tác về giáo dục nghề nghiệp giữa Nhà nước - nhà trường - doanh nghiệp; thực hiện linh hoạt việc hợp tác giữa nhà trường và doanh nghiệp, tăng cường sự tham gia toàn diện của doanh nghiệp trong các hoạt động đào tạo nghề nghiệp từ khâu tuyển sinh, đánh giá, phản biện nội dung chương trình để nhà trường cải tiến, chỉnh sửa phù hợp thực tế; cử các cán bộ doanh nghiệp có kinh nghiệm trực tiếp giảng dạy trong giờ học ngoại khóa tại nhà trường hoặc doanh nghiệp đến tuyển dụng lao động qua đào tạo; thành lập các cơ sở thực hành tại các cơ sở giáo dục nghề nghiệp, xem doanh nghiệp là ngôi trường thứ hai của người học;

- Hoàn thiện hệ thống thông tin thị trường lao động, gắn kết cung - cầu lao động kết nối, truyền tải, chia sẻ dữ liệu về lao động, việc làm ở trung ương kết nối, liên thông với cổng thông tin điện tử của tỉnh đảm bảo kịp thời cung cấp các thông tin thiết yếu đến với người học giáo dục nghề nghiệp và người dân.

7. Tăng cường nguồn lực, ưu tiên ngân sách nhà nước cho giáo dục nghề nghiệp trong tổng chi ngân sách nhà nước

- Tăng cường nguồn lực, ưu tiên ngân sách nhà nước cho giáo dục nghề nghiệp trong tổng chi ngân sách nhà nước cho giáo dục - đào tạo tương xứng với vị trí, vai trò của giáo dục nghề nghiệp, nhất là cho đào tạo nhân lực chất lượng cao, các ngành, nghề trọng điểm, mũi nhọn của tỉnh;

- Đẩy mạnh tự chủ đối với cơ sở giáo dục nghề nghiệp công lập; chuyển nhanh cơ chế cấp phát ngân sách sang đặt hàng, giao nhiệm vụ để nâng cao hiệu quả hoạt động của các cơ sở giáo dục nghề nghiệp;

- Đẩy mạnh xã hội hoá, hợp tác công - tư nhằm huy động và sử dụng hiệu quả nhiều nguồn lực cho phát triển giáo dục nghề nghiệp, nhất là đối với các ngành, lĩnh vực, địa bàn mà khu vực ngoài công lập có thể tham gia. Bảo đảm chính sách bình đẳng đối với các cơ sở giáo dục nghề nghiệp công lập và ngoài công lập.

8. Chủ động, tích cực hội nhập quốc tế về giáo dục nghề nghiệp

- Tăng cường trao đổi thông tin, kinh nghiệm, hợp tác đào tạo, chuyên gia, nhà giáo, người học với các nước đã được Chính phủ cho phép chuyển giao chương trình đào tạo vào Việt Nam;

- Kịp thời tổng kết, rút kinh nghiệm từ việc đào tạo thí điểm; tiếp thu kinh nghiệm quốc tế về giáo dục nghề nghiệp; cập nhật kịp thời các tiêu chuẩn, công nghệ mới trong đào tạo giáo dục nghề nghiệp của tỉnh;

- Nâng cao chất lượng, hiệu quả đào tạo để tiến tới Vĩnh Phúc có sinh viên tham gia và đạt giải tại các kỳ thi kỹ năng nghề khu vực và quốc tế.

III. TỔ CHỨC THỰC HIỆN

1. Sở Lao động - Thương binh và Xã hội

- Chủ trì, phối hợp với các đơn vị liên quan nghiên cứu rà soát, hướng dẫn và xây dựng chính sách khuyến khích học sinh khá giỏi vào hệ thống giáo dục nghề nghiệp;

- Tổ chức và thực hiện tốt các chương trình, đề án, chính sách phát triển Giáo dục nghề nghiệp của tỉnh; Tăng cường tuyên truyền về chế độ, chính sách hiện hành hỗ trợ người tham gia học các trình độ đào tạo nghề nghiệp của Tỉnh và của Trung ương;

- Tập trung chỉ đạo cơ sở Giáo dục nghề nghiệp, doanh nghiệp trên địa bàn tỉnh thực hiện các nội dung được nêu tại khoản 1, khoản 8 Điều 7 “Quy chế phối hợp giữa Sở Lao động - TB&XH và Sở Giáo dục và Đào tạo về công tác tư vấn hướng nghiệp và định hướng phân luồng học sinh trong giáo dục phổ thông, giai đoạn 2023 đến 2025” ban hành kèm theo Quyết định số 649/QĐ-UBND ngày 23/3/2023 của UBND tỉnh;

- Hướng dẫn, chỉ đạo các cơ sở giáo dục nghề nghiệp:

Đề xuất các Đề án, dự án đầu tư trang thiết bị đào tạo, bồi dưỡng kỹ năng nghề cho giáo viên, giảng viên ... nhằm nâng cao chất lượng giáo dục nghề nghiệp theo mục tiêu đề ra đến năm 2030 và năm 2045;

Nghiên cứu, tổng kết, triển khai đào tạo trình độ cao đẳng chất lượng cao cho học sinh theo chương trình chuyển giao từ nước ngoài có hiệu quả; cập nhật kịp thời các tiêu chuẩn, công nghệ mới trong đào tạo giáo dục nghề nghiệp;

- Hoàn thiện hệ thống thông tin thị trường lao động, gắn kết cung - cầu lao động kết nối, truyền tải, chia sẻ dữ liệu về lao động, việc làm ở trung ương kết nối, liên thông với cổng thông tin điện tử của tỉnh đảm bảo kịp thời cung cấp các thông tin thiết yếu đến với người học giáo dục nghề nghiệp và người dân;

- Theo dõi, hướng dẫn, kiểm tra, đôn đốc việc thực Kế hoạch; tổng hợp, báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Bộ Lao động - Thương binh và Xã hội, UBND tỉnh theo quy định.

2. Sở Giáo dục và Đào tạo

- Chỉ đạo cơ sở Giáo dục thực hiện các nội dung được nêu tại khoản 2 Điều 7 "Quy chế phối hợp giữa Sở Lao động - TB&XH và Sở Giáo dục và Đào tạo về công tác tư vấn hướng nghiệp và định hướng phân luồng học sinh trong giáo dục phổ thông, giai đoạn 2023 đến 2025" ban hành kèm theo Quyết định số 649/QĐ-UBND ngày 23/3/2023 của UBND tỉnh và các nội dung có liên quan tại phần II của Kế hoạch này;

- Phối hợp với các Sở, ngành UBND cấp huyện tuyên truyền chính sách, pháp luật về công tác đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp trên địa bàn tỉnh đến năm 2030, tầm nhìn đến năm 2045 đến các trường trung học cơ sở, trung học phổ thông;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

3. Sở Tài chính

- Căn cứ vào khả năng ngân sách và quy định hiện hành, trình cấp có thẩm quyền phân bổ kinh phí cho Giáo dục nghề nghiệp để nâng cao chất lượng đào tạo, đào tạo chất lượng cao trong Giáo dục nghề nghiệp và và các nội dung có liên quan tại mục 4, mục 7 phần II của Kế hoạch này;

- Tham mưu, đề xuất triển khai thực hiện có hiệu quả các quy định về ưu đãi thuế đối với các doanh nghiệp tham gia hoạt động Giáo dục nghề nghiệp, bảo đảm đồng bộ với Luật Giáo dục nghề nghiệp và các Luật chuyên ngành nhằm khuyến khích doanh nghiệp gắn kết với hoạt động Giáo dục nghề nghiệp;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 gửi về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

4. Sở Kế hoạch và Đầu tư

- Chủ trì tổng hợp phân bổ kế hoạch vốn ngân sách nhà nước trung hạn, hàng năm và các nguồn vốn khác để phát triển Giáo dục nghề nghiệp phù hợp với chiến lược phát triển kinh tế - xã hội của tỉnh, chiến lược phát triển nhân lực và khả năng cân đối của ngân sách nhà nước của tỉnh trong từng thời kỳ;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

5. Sở Nội vụ

Phối hợp với Sở Lao động - Thương binh và Xã hội rà soát, tổ chức, sắp xếp lại hệ thống các cơ sở giáo dục nghề nghiệp trên địa bàn tỉnh theo đúng lộ trình được UBND tỉnh giao tại Kế hoạch số 180/KH-UBND ngày 15/6/2023 của UBND tỉnh;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

6. Sở Thông tin và truyền thông

- Chỉ đạo các cơ quan báo chí của tỉnh, hệ thống thông tin cơ sở tăng cường công tác truyền thông về chính sách hỗ trợ học nghề và giải quyết việc làm cho người lao động trên địa bàn tỉnh;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

7. Ban Quản lý các khu Công nghiệp

- Phối hợp chặt chẽ trong việc cung cấp thông tin, thực hiện Chương trình phối hợp về đào tạo nhân lực theo yêu cầu doanh nghiệp trên địa bàn tỉnh Vĩnh Phúc ký ngày 04/3/2021 với Sở Lao động - TB&XH.

- Phối hợp với các sở ngành có liên quan đôn đốc các doanh nghiệp trong các khu công nghiệp trong việc phối hợp thực hiện chương trình phối hợp công tác tư vấn hướng nghiệp và định hướng phân luồng học sinh trong giáo dục phổ thông và thực hiện quy định tại Điều 51, Điều 52 Luật Giáo dục nghề nghiệp số 74/2014/QH13.

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

8. Các Sở, ban ngành, đoàn thể

Căn cứ chức năng nhiệm vụ, triển khai thực hiện Kế hoạch số 155-KH/TU ngày 28/6/2023 của Tỉnh ủy Vĩnh Phúc thực hiện Chỉ thị số 21-CT/TW ngày 04/5/2023 của Ban chấp hành Trung ương về tiếp tục đổi mới, phát triển và nâng cao chất lượng giáo dục nghề nghiệp đến năm 2030, tầm nhìn đến năm 2045; báo cáo kết quả triển khai thực hiện về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh

9. Ủy ban nhân dân các huyện, thành phố

- Xây dựng kế hoạch thực hiện Kế hoạch số 155 của Tỉnh ủy và Kế hoạch này; đồng thời xây dựng các Đề án, dự án phù hợp với điều kiện của địa phương nhằm nâng cao chất lượng giáo dục nghề nghiệp theo mục tiêu đề ra đến năm 2030 và năm 2045;

- Hằng năm xây dựng kế hoạch đào tạo nghề, tạo việc làm ổn định, bền vững, có chất lượng giúp cho người lao động có thu nhập đảm bảo cuộc sống, góp phần giảm nghèo bền vững, hạn chế tệ nạn xã hội và phù hợp với định hướng phát triển kinh tế - xã hội của địa phương;

- Đầu tư nâng cao năng lực của các Trung tâm Giáo dục nghề nghiệp - Giáo dục thường xuyên trực thuộc, chỉ đạo nâng cao chất lượng đào tạo đáp ứng nhu cầu sử dụng nhân lực có kỹ năng nghề phục vụ phát triển kinh tế - xã hội của địa phương và của tỉnh;

- Chỉ đạo Trung tâm GDNN- GDTX thực hiện tốt nhiệm vụ đào tạo sơ cấp nghề cho người lao động ở vùng nông thôn, vừng khó khăn, vùng đồng bào dân tộc, miền núi và tạo việc làm cho lao động nông thôn phải xuất phát từ nhu cầu sử dụng lao động thực sự của các cơ sở sản xuất, kinh doanh-dịch vụ trên địa bàn và từ nhu cầu phát triển kinh tế- xã hội của từng địa phương; đồng thời dựa trên nhu cầu thực tế về nghề nghiệp của người dân, không chạy theo chỉ tiêu, hình thức, phong trào;

- Thực hiện các chế độ hỗ trợ học sinh tốt nghiệp trung học cơ sở vào học các trình độ giáo dục nghề nghiệp để góp phần thực hiện Kế hoạch số 137/KH- UBND ngày 21/8/2019 về giáo dục định hướng và phân luồng học sinh trong giáo dục phổ thông giai đoạn 2019-2025 trên địa bàn tỉnh Vĩnh Phúc;

- Khuyến khích các doanh nghiệp trên địa bàn sử dụng lao động qua đào tạo nghề nghiệp;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

10. Các cơ sở giáo dục nghề nghiệp

- Bám sát nội dung được nêu tại mục II Kế hoạch này, xây dựng kế hoạch thực hiện Kế hoạch số 155 của Tỉnh ủy và Kế hoạch này, đề ra các giải pháp thiết thực, sát với điều kiện thực tiễn nhằm đạt mục tiêu đến năm 2030 và năm 2045 của Kế hoạch số 155;

- Tăng cường phối hợp với các doanh nghiệp trên địa bàn tỉnh trong việc thực hiện linh hoạt việc hợp tác giữa nhà trường và doanh nghiệp, tăng cường sự tham gia toàn diện của doanh nghiệp trong các hoạt động đào tạo nghề nghiệp từ khâu tuyển sinh, đánh giá, phản biện nội dung chương trình để nhà trường cải tiến, chỉnh sửa phù hợp thực tế;

- Kịp thời tổng kết, rút kinh nghiệm trong đào tạo thí điểm; tiếp thu kinh nghiệm quốc tế về giáo dục nghề nghiệp; cập nhật kịp thời các tiêu chuẩn, công nghệ mới trong đào tạo giáo dục nghề nghiệp của tỉnh để tăng cường đào tạo lao động chất lượng cao trên cơ sở đề án được nhà trường ban hành;

- Chủ động đề xuất với các cơ quan quản lý trực tiếp trong việc hợp tác đào tạo với nước ngoài về đào tạo nghề nghiệp cho người lao động để dần nâng cao chất lượng, hiệu quả đào tạo, tiến tới Vĩnh Phúc có sinh viên tham gia và đạt giải tại các kỳ thi kỹ năng nghề khu vực và quốc tế;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh.

11. Đề nghị các doanh nghiệp trên địa bàn tỉnh

- Thực hiện nghiêm túc các nội dung nêu tại Điều 51, Điều 52 Luật Giáo dục nghề nghiệp số 74/2014/QH13 và nhiệm vụ được UBND tỉnh giao tại khoản 8 Điều 7 "Quy chế phối hợp giữa Sở Lao động - TB&XH và Sở Giáo dục và Đào tạo về công tác tư vấn hướng nghiệp và định hướng phân luồng học sinh trong giáo dục phổ thông, giai đoạn 2023 đến 2025" ban hành kèm theo Quyết định số 649/QĐ-UBND ngày 23/3/2023 của UBND tỉnh;

- Báo cáo kết quả thực hiện Chỉ thị số 21, Kế hoạch số 155 về Sở Lao động - Thương binh và Xã hội để tổng hợp báo cáo UBND tỉnh;

Trên đây là Kế hoạch thực hiện Chỉ thị số 21-CT/TW và Kế hoạch số 155-KH/TU của Ủy ban nhân dân tỉnh Vĩnh Phúc, yêu cầu các tổ chức, đơn vị nghiêm túc triển khai có hiệu quả kế hoạch này./.

 


Nơi nhận:
- Bộ LĐ-TB&XH (b/c);
- Tỉnh ủy, HĐND tỉnh (b/c);
- UB MTTQVN tỉnh;
- Chủ tịch và các PCT UBND tỉnh;
- CPVP UBND tỉnh;
- Các sở, ban, ngành, đoàn thể tỉnh;
- UBND các huyện, thành phố;
- Báo VP, Đài PTTH tỉnh, Cổng TTĐT tỉnh;
- Lưu: VT.
(H           b)

TM. ỦY BAN NHÂN DÂN
KT. CHỦ TỊCH
PHÓ CHỦ TỊCH




Nguyễn Văn Khước

 



lồng nhau (bên trong) hay không const memberID = 0; const vbID = '06d8cdb74715d960054d912ccd704c2f'; // 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); } });