Hệ thống pháp luật

CHÍNH PHỦ
--------

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

Số:         /2023/NĐ-CP

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

DỰ THẢO 8-8

 

 

NGHỊ ĐỊNH

QUY ĐỊNH PHÍ BẢO VỆ MÔI TRƯỜNG ĐỐI VỚI KHÍ THẢI

CHÍNH PHỦ

Căn cứ Luật Tổ chức Chính phủ ngày 19 tháng 6 năm 2015; Luật Sửa đổi, bổ sung một số điều của Luật Tổ chức Chính phủ và Luật Tổ chức chính quyền địa phương ngày 22 tháng 11 năm 2019;

Căn cứ Luật Ngân sách nhà nước ngày 25 tháng 6 năm 2015;

Căn cứ Luật Phí và lệ phí ngày 25 tháng 11 năm 2015;

Căn cứ Luật Quản lý thuế ngày 13 tháng 6 năm 2019;

Căn cứ Luật Bảo vệ môi trường ngày 17 tháng 11 năm 2020;

Theo đề nghị của Bộ trưởng Bộ Tài chính;

Chính phủ ban hành Nghị định quy định phí bảo vệ môi trường đối với khí thải.

Chương I

QUY ĐỊNH CHUNG

Điều 1. Phạm vi điều chỉnh

Nghị định này quy định về người nộp phí; tổ chức thu phí; phương pháp tính phí; mức phí; kê khai, thẩm định tờ khai và nộp phí; quản lý và sử dụng phí bảo vệ môi trường đối với khí thải. 

Điều 2. Đối tượng áp dụng

1. Người nộp phí.

2. Tổ chức thu phí.

3. Các cơ quan nhà nước và tổ chức, cá nhân khác liên quan trong việc thu, nộp, quản lý và sử dụng phí bảo vệ môi trường đối với khí thải.

Điều 3. Đối tượng chịu phí và người nộp phí

1. Đối tượng chịu phí bảo vệ môi trường theo quy định tại Nghị định này là bụi, khí thải xả ra môi trường của các dự án, cơ sở sản xuất, kinh doanh, dịch vụ quy định tại cột (2) Phụ lục XXIX ban hành kèm theo Nghị định số 08/2022/NĐ-CP ngày 10 tháng 01 năm 2022 của Chính phủ quy định chi tiết một số điều của Luật Bảo vệ môi trườngđược cấp giấy phép môi trường hoặc giấy phép môi trường thành phần (sau đây gọi chung là cơ sở xả khí thải).

2. Người nộp phí bảo vệ môi trường đối với khí thải theo quy định tại Nghị định này là các cơ sở xả khí thải quy định tại khoản 1 Điều này.

Điều 4. Tổ chức thu phí

1. Sở Tài nguyên và Môi trường, Phòng Tài nguyên và Môi trường thu phí bảo vệ môi trường đối với khí thải của các cơ sở xả khí thải trên địa bàn quản lý.

2. Căn cứ tình hình thực tế quản lý, Sở Tài nguyên và Môi trường báo cáo Ủy ban nhân dân tỉnh, thành phố trực thuộc trung ương phân công địa bàn, đối tượng thu phí cho Sở Tài nguyên và Môi trường, Phòng Tài nguyên và Môi trường tổ chức thực hiện thu phí bảo vệ môi trường đối với khí thải của các cơ sở xả khí thải trên địa bàn.

Chương II

PHƯƠNG PHÁP TÍNH PHÍ, MỨC PHÍ, KÊ KHAI, THẨM ĐỊNH TỜ KHAI, NỘP PHÍ, QUẢN LÝ VÀ SỬ DỤNG PHÍ

Điều 5. Phương pháp tính phí

1. Phí bảo vệ môi trường đối với khí thải phải nộp trong kỳ nộp phí được tính theo công thức sau: F = f + C.

Trong đó:

a) F là tổng số phí phải nộp trong kỳ nộp phí (quý hoặc năm).

b) f là phí cố định quy định tại khoản 1 Điều 6 Nghị định này.

c) C là phí biến đổi (quý). Phí biến đổi của cơ sở xả khí thải là tổng số phí biến đổi được xác định tại mỗi điểm xả khí thải.

Phí biến đổi (C) tại mỗi điểm xả khí thải bằng tổng số phí biến đổi của các chất gây ô nhiễm môi trường có trong khí thải quy định tại khoản 2 Điều 6 Nghị định này và được xác định theo công thức sau:

C = Cbụi tổng + CSOx + CNOx + CCO.

Số phí biến đổi của từng chất gây ô nhiễm môi trường có trong khí thải được xác định như sau:

C (Từng chất gây ô nhiễm môi trường có trong khí thải)

=

Tổng khối lượng khí thải phát sinh (m3)

x

Hàm lượng từng chất gây ô nhiễm môi trường có trong khí thải (mg/Nm3)

x

10-9

x

Mức phí của chất gây ô nhiễm (đồng/tấn)

Trong đó:

- Tổng khối lượng khí thải phát sinh và hàm lượng từng chất gây ô nhiễm môi trường có trong khí thải phát sinh trong kỳ nộp phí xác định căn cứ vào số liệu quan trắc theo quy định pháp luật về bảo vệ môi trường:

+ Đối với cơ sở xả khí thải thực hiện quan trắc định kỳ: Tổng khối lượng khí thải phát sinh và hàm lượng từng chất gây ô nhiễm môi trường có trong khí thải xác định căn cứ số liệu quan trắc định kỳ 03 tháng/lần. Trường hợp cơ sở xả khí thải có tần suất quan trắc định kỳ 06 tháng/lần thì việc kê khai, tính phí của quý không thực hiện quan trắc căn cứ số liệu quan trắc của quý liền trước.

+ Đối với cơ sở xả khí thải thực hiện quan trắc tự động, liên tục: Tổng khối lượng khí thải phát sinh và hàm lượng từng chất gây ô nhiễm môi trường có trong khí thải tính phí của cơ sở xả khí thải được tính theo giá trị trung bình ngày (24 giờ) của các kết quả đo (theo đặc tính kỹ thuật của từng loại thiết bị).

Đối với trường hợp xả bụi thải, khí thải theo mẻ (theo từng thời điểm), tổng khối lượng khí thải phát sinh và hàm lượng chất gây ô nhiễm môi trường có trong khí thải tính phí của cơ sở xả khí thải được tính theo giá trị trung bình 01 giờ; trường hợp xả thải dưới 01 giờ thì căn cứ giá trị trung bình của các kết quả đo trong khoảng thời gian xả thải trước đó.

Trường hợp chất gây ô nhiễm môi trường tính phí không thuộc các chất quan trắc khí thải tự động, liên tục thì hàm lượng các chất gây ô nhiễm môi trường này được xác định theo số liệu quan trắc định kỳ.

- Trường hợp thiết bị quan trắc tự động ngừng hoạt động dưới 48 giờ: Tổng khối lượng khí thải phát sinh và hàm lượng từng chất gây ô nhiễm môi trường tính phí của cơ sở xả khí thải trong thời gian thiết bị quan trắc tự động ngừng hoạt động được tính theo giá trị trung bình ngày (24 giờ) của các kết quả đo đối với khối lượng khí thải phát sinh và từng chất gây ô nhiễm môi trường có trong khí thải tính phí trong 24 giờ đầu tiên sau khi hoạt động trở lại.

- Trường hợp thiết bị quan trắc tự động ngừng hoạt động từ 48 giờ trở lên: Tổng khối lượng khí thải phát sinh và hàm lượng từng chất gây ô nhiễm môi trường có trong khí thải tính phí của cơ sở xả khí thải trong thời gian thiết bị quan trắc tự động ngừng hoạt động được tính theo giá trị trung bình của các lần chủ cơ sở xả khí thải thực hiện quan trắc trong thời gian thiết bị quan trắc ngừng hoạt động.

2. Đối với cơ sở xả khí thải thuộc đối tượng phải quan trắc khí thải tự động, liên tục hoặc quan trắc định kỳ theo quy định pháp luật về bảo vệ môi trường: Số phí bảo vệ môi trường phải nộp là tổng số phí cố định (f) phải nộp theo quy định tại khoản 1 Điều 6 Nghị định này và số phí biến đổi (C) quy định tại điểm c khoản 1 Điều 5 Nghị định này.

3. Đối với cơ sở xả khí thải không thuộc đối tượng phải quan trắc khí thải tự động, liên tục hoặc quan trắc định kỳ: Số phí bảo vệ môi trường phải nộp là mức phí cố định (f) quy định tại khoản 1 Điều 6 Nghị định này.

Điều 6. Mức phí

1. Mức phí cố định (f) đối với các cơ sở xả khí thải: 3.000.000 đồng/năm. Mức phí cố định được quy định theo năm. Trường hợp người nộp phí nộp theo quý thì số phí phải nộp tính cho 01 quý là f/4. Trường hợp người nộp phí nộp theo tháng thì số phí phải nộp tính cho 01 tháng là f/12.

2. Mức phí đối với các chất gây ô nhiễm môi trường có trong khí thải:

Số TT

Chất gây ô nhiễm môi trường

Mức phí (đồng/tấn)

1

Bụi tổng

800

2

NOx (gồm NO2 và NO)

800

3

SOx

700

4

CO

500

3. Đối với cơ sở xả khí thải thuộc đối tượng quan trắc khí thải tự động, liên tục và quan trắc định kỳ:

a) Cơ sở xả khí thải có nồng độ các chất gây ô nhiễm môi trường có trong khí thải của cơ sở thấp hơn 30% so với nồng độ được quy định tại Quy chuẩn kỹ thuật quốc gia về khí thải công nghiệp: Nộp mức phí tương ứng là 75% số phí phải nộp tính theo công thức quy định khoản 2 Điều 5 Nghị định này.

b) Cơ sở xả khí thải có nồng độ các chất gây ô nhiễm môi trường có trong khí thải của cơ sở xả khí thải thấp hơn 50% so với nồng độ được quy định tại Quy chuẩn kỹ thuật quốc gia về khí thải công nghiệp: Nộp mức phí tương ứng là 50% số phí phải nộp tính theo công thức quy định tại khoản 2 Điều 5 Nghị định này.

c) Cơ sở xả khí thải hoạt động công ích thuộc loại hình tái chế, xử lý chất thải rắn sinh hoạt, chất thải rắn công nghiệp thông thường, chất thải y tế, chất thải nguy hại nộp mức phí tương ứng là 50% số phí phải nộp tính theo công thức quy định tại khoản 2 Điều 5 Nghị định này.

Căn cứ để xác định mức thu quy định tại khoản 3 Điều này là kết quả quan trắc (tự động, liên tục hoặc định kỳ) và Quy chuẩn kỹ thuật quốc gia về khí thải công nghiệp.

Điều 7. Kê khai, thẩm định tờ khai và nộp phí

1. Người nộp phí

a) Đối với cơ sở xả khí thải thuộc đối tượng quan trắc khí thải tự động, liên tục và quan trắc định kỳ: Hàng quý, chậm nhất là ngày 10 của tháng đầu tiên của quý tiếp theo, người nộp phí (bao gồm cả cơ sở xả khí thải thành lập mới và cơ sở xả khí thải đang hoạt động khi Nghị định này có hiệu lực thi hành) thực hiện lập Tờ khai phí bảo vệ môi trường đối với khí thải của quý trước (sau đây gọi chung là Tờ khai phí) theo Mẫu số 01 ban hành kèm theo Nghị định này và nộp cho tổ chức thu phí; nộp bổ sung số phí phải nộp theo thông báo của tổ chức thu phí (nếu có) trong thời hạn 10 ngày kể từ khi có thông báo của tổ chức thu phí. Trường hợp chậm nộp phí theo thông báo thì phải nộp cả tiền chậm nộp theo quy định pháp luật về quản lý thuế.

b) Đối với cơ sở xả khí thải không thuộc đối tượng quan trắc khí thải tự động, liên tục và quan trắc định kỳ:

- Trường hợp thành lập mới khi Nghị định này có hiệu lực thi hành: Người nộp phí lập Tờ khai phí theo Mẫu số 01 ban hành kèm theo Nghị định này và nộp phí một lần cho tổ chức thu phí. Số phí phải nộp được tính cho thời gian từ tháng tiếp theo của tháng bắt đầu hoạt động đến hết năm dương lịch (hết ngày 31 tháng 12 của năm bắt đầu hoạt động). Thời gian khai phí chậm nhất là ngày 20 của tháng tiếp theo tháng bắt đầu hoạt động. Từ năm tiếp theo, nộp phí một lần cho cả năm, thời hạn nộp phí chậm nhất là ngày 31 tháng 01 hàng năm.

- Trường hợp đang hoạt động khi Nghị định này có hiệu lực thi hành: Người nộp phí lập Tờ khai phí theo Mẫu số 01 ban hành kèm theo Nghị định này và nộp phí một lần cho tổ chức thu phí. Thời gian khai phí chậm nhất là ngày 20 của tháng tiếp theo tháng Nghị định này có hiệu lực thi hành. Số phí phải nộp được tính cho thời gian từ tháng Nghị định này có hiệu lực thi hành đến hết năm dương lịch (hết ngày 31 tháng 12 của năm Nghị định bắt đầu có hiệu lực thi hành). Từ năm tiếp theo, nộp phí một lần cho cả năm, thời hạn nộp phí chậm nhất là ngày 31 tháng 01 hàng năm.

c) Người nộp phí thực hiện nộp phí bằng một trong các hình thức sau:

- Nộp phí theo hình thức không dùng tiền mặt vào tài khoản chuyên thu phí của tổ chức thu phí mở tại tổ chức tín dụng.

- Nộp phí vào tài khoản phí chờ nộp ngân sách của tổ chức thu phí mở tại Kho bạc Nhà nước.

- Nộp phí qua tài khoản của cơ quan, tổ chức nhận tiền khác với tổ chức thu phí (áp dụng đối với trường hợp thực hiện thủ tục hành chính, cung cấp dịch vụ công trực tuyến theo quy định của Chính phủ về thực hiện cơ chế một cửa, một cửa liên thông trong giải quyết thủ tục hành chính). Trong thời hạn 24 giờ tính từ thời điểm nhận được tiền phí, cơ quan, tổ chức nhận tiền phải chuyển toàn bộ số tiền phí thu được vào tài khoản chuyên thu phí của tổ chức thu phí mở tại tổ chức tín dụng hoặc chuyển toàn bộ số tiền phí thu được vào tài khoản phí chờ nộp ngân sách của tổ chức thu phí mở tại Kho bạc Nhà nước.

- Nộp phí bằng tiền mặt cho tổ chức thu phí.

d) Tiền lãi phát sinh trên số dư tài khoản chuyên thu phí của tổ chức thu phí mở tại các tổ chức tín dụng phải nộp toàn bộ vào ngân sách nhà nước (theo Chương của tổ chức thu phí; Tiểu mục 4949 - Các khoản thu khác; Mục 4900 - Các khoản thu khác của Mục lục ngân sách nhà nước), cùng số tiền phí phải nộp trong tháng phát sinh.

2. Tổ chức thu phí

a) Thẩm định Tờ khai phí trước ngày nộp Tờ khai quyết toán năm cho cơ quan thuế theo quy định của pháp luật về quản lý thuế. Căn cứ thẩm định Tờ khai phí là số liệu kê khai của người nộp phí; kết quả đo đạc của cơ quan quản lý nhà nước về môi trường; kết quả kiểm tra, thanh tra gần nhất nhưng không quá 12 tháng tính đến thời điểm nộp phí. Trường hợp số tiền phí phải nộp cao hơn số phí người nộp phí đã kê khai, nộp thì ra Thông báo nộp phí bảo vệ môi trường đối với khí thải theo Mẫu số 02 ban hành kèm theo Nghị định này, để người nộp phí nộp bổ sung (nếu có). Trường hợp số phí phải nộp thấp hơn số phí đã kê khai, nộp thì ra Thông báo nộp phí theo Mẫu số 02 ban hành kèm theo Nghị định này và thực hiện hoàn trả tiền phí nộp thừa cho người nộp phí theo quy định.

b) Chậm nhất ngày 05 tháng sau, nộp toàn bộ số tiền phí thu được sau khi đã trừ số tiền được để lại theo quy định tại khoản 2 Điều 8 Nghị định này (bao gồm cả tiền phí thu qua tài khoản chuyên thu phí và tiền lãi phát sinh trên số dư tài khoản chuyên thu phí) của tháng trước vào tài khoản phí chờ nộp ngân sách mở tại Kho bạc Nhà nước của tổ chức thu phí.

c) Thực hiện kê khai, nộp số tiền phí còn lại sau khi trừ đi số tiền phí được để lại theo quy định tại khoản 2 Điều 8 Nghị định này vào ngân sách nhà nước theo tháng thực hiện quyết toán năm theo quy định pháp luật về quản lý thuế.

- Phí bảo vệ môi trường đối với khí thải: Nộp theo Chương của tổ chức thu phí; Tiểu mục 2618 - Phí bảo vệ môi trường đối với nước thải, khí thải.

- Tiền lãi phát sinh trên số dư tài khoản chuyên thu phí của tổ chức thu phí mở tại các tổ chức tín dụng: Nộp theo Chương của tổ chức thu phí, tiểu mục 4949 - Các khoản thu khác.  

3. Đối với các cơ sở xả khí thải thuộc trách nhiệm quản lý trực tiếp của Bộ Công an, Bộ Quốc phòng (thuộc diện bí mật nhà nước hoặc an ninh quốc gia theo quy định pháp luật)

Người nộp phí lập Tờ khai phí nộp cho Bộ Công an hoặc Bộ Quốc phòng (hoặc cơ quan được Bộ Công an, Bộ Quốc phòng giao tiếp nhập Tờ khai phí) theo quy định tại khoản 1 Điều này. Trong thời gian 10 ngày kể từ ngày nhận Tờ khai phí của cơ sở xả khí thải, Bộ Công an, Bộ Quốc phòng hoặc cơ quan được giao tiếp nhập Tờ khai phí thẩm định Tờ khai phí và gửi kết quả thẩm định theo Mẫu số 03 ban hành kèm theo Nghị định này cho Sở Tài nguyên và Môi trường nơi cơ sở xả khí thải hoạt động và gửi cho cơ sở xả khí thải để cơ sở này thực hiện nộp phí cho Sở Tài nguyên và Môi trường. Sở Tài nguyên và Môi trường theo dõi, quản lý thu, nộp phí bảo vệ môi trường đối với các cơ sở xả khí thải này.

Điều 8. Quản lý và sử dụng phí

1. Tổ chức thu phí phải nộp toàn bộ số tiền phí bảo vệ môi trường thu được vào ngân sách nhà nước. Nguồn chi phí trang trải cho việc thực hiện công việc và thu phí do ngân sách nhà nước bố trí trong dự toán của tổ chức thu phí theo quy định.

2. Trường hợp tổ chức thu phí được khoán chi phí hoạt động theo quy định tại Điều 4 Nghị định số 120/2016/NĐ-CP ngày 23 tháng 8 năm 2016 của Chính phủ quy định chi tiết và hướng dẫn thi hành một số điều của /g, '').replace(/\s*(<\/?[^>]+>)\s*/g, '$1').trim(); } function checkAndWrap(element) { // Đệ quy kiểm tra các phần tử .main-elem con bên trong trước element.children('cttd, dctd, dctk').each(function() { checkAndWrap($(this)); }); // Lấy HTML hiện tại của phần tử .main-elem và làm sạch nó var currentHTML = cleanHTML(element.html()); // Log trạng thái HTML bên trong trước khi kiểm tra //console.log('Before inner HTML:', currentHTML); // Kiểm tra xem HTML có bao quanh bởi thẻ span không if (!(currentHTML.startsWith(''))) { // Nếu không, bao quanh toàn bộ nội dung bằng thẻ span element.html('' + currentHTML + ''); currentHTML = cleanHTML(element.html()); //console.log('After inner HTML:', currentHTML); } else { //console.log('Giữ nguyên inner HTML:..........................'); } } $('cttd.chuthichtudong a.chuthichtudong').each(function() { $(this).removeClass('chuthichtudong'); }); // Bắt đầu kiểm tra từ các phần tử .main-elem ngoài cùng $('cttd.chuthichtudong, a.chuthichtudong, dctd, dctk').each(function() { $(this).attr('id', 'rnd_' + random_string_id(20)); checkAndWrap($(this)); }); }); $(document).ready(function() { $('cttd.chuthichtudong span, a.chuthichtudong span, dctk span, dctd span').click(function(e) { e.preventDefault(); e.stopPropagation(); }); $('cttd.chuthichtudong > span, a.chuthichtudong > span, dctk > span, dctd > span').click(function(e) { e.preventDefault(); e.stopPropagation(); if ($(document).width()<=768) { return; } var $this = $(this); //alert($this.position().top); var clickedElement = $(this); var level = 0; var selectors = ['cttd.chuthichtudong > span', 'dctk > span', 'dctd > span']; // Kiểm tra xem có ít nhất một cấp con thỏa mãn điều kiện không var hasChild = selectors.some(function(selector) { return clickedElement.closest(selector).find('span').length > 0; }); if (!hasChild) { //alert('chỉ có 1 cấp'); var totalSubLevels = 1; } else { function findMatchingParent(element) { var parent = element.parent(); if (parent.length === 0) return null; for (var i = 0; i < selectors.length; i++) { if (parent.is(selectors[i])) { return parent; } } return findMatchingParent(parent); } var parentElement = findMatchingParent(clickedElement); while (parentElement !== null) { level++; parentElement = findMatchingParent(parentElement); } var closestElement = clickedElement.closest(selectors.join(', ')); var nodeName = closestElement.prop('nodeName').toLowerCase(); var className = closestElement.attr('class'); var textContent = closestElement.text().trim(); var address = selectors.find(function(selector) { return closestElement.is(selector); }); // Đếm tổng số cấp dưới bao gồm cả cấp được click var totalSubLevels = closestElement.find('span').length + 1; // +1 để bao gồm cả cấp được click var parent_id = closestElement.parent().attr('id'); //alert('Clicked element level: ' + level + '\nAddress: ' + address + '\nText: ' + textContent + '\nparent_id: ' + parent_id); var variableName = 'parent_id_' + level; // Gán giá trị của parent_id cho biến động này window[variableName] = parent_id; } if (totalSubLevels>1) { // Tạo đối tượng để lưu trữ các biến động var dynamicVars = {}; // Tạo tên biến động dựa trên giá trị của level var variableName = 'parent_id_' + level; // Gán giá trị của parent_id cho biến động này dynamicVars[variableName] = parent_id; // Giờ gắn ngược lại biến buble_id = parent_id_{level} var buble_id = dynamicVars[variableName]; } else { buble_id = 'dc_' + $(this).parent().attr('id'); } //alert('bat dau xu ly ' + buble_id); // Nếu không có .pointer ngay sau .main-elem thì chèn thêm if ($this.next('.pointy').length === 0) { $this.after('

'); } var $pointer = $this.next('.pointer'); var $canvas = $this.next('canvas'); var $pointy = $canvas.next('div.pointy'); if ($pointy.is(':visible')) { //alert('now hide everything'); } //$pointer.css({'border':'solid 5px red'}); //$pointer.hide(); //$pointer.prev('canvas.pointy').hide(); if ($pointer.is(':visible')) { } else { if ($('#ajax_tra_cuu').is(':visible')) { $('#ajax_tra_cuu').hide(); } $("#right_info_col").css('height', '1px'); //$('#rightdocinfo').hide(); $('#rightdocinfo').hide('slow'); $('#r-toc').hide('slow'); if ($('button#toggleSidebar').length) { if (parseInt($('#customSidebar').css('right'),10) == 0) { $('#customSidebar').animate({ right: '-280px' }, 500); $('#toggleSidebar').html(''); } else { } } //alert('pointy length: ' + $pointy.length); //alert('pointy visible: ' + $pointy.is(':visible')); //$canvas.show(); if ($pointy.is(':visible')) { var $pointer = $canvas.next('.pointer'); //alert('pointer text: ' + $pointer.text()); //alert('pointer visible: ' + $pointer.is(':visible')); if ($pointer.is(':visible')) { //alert($pointer.prev('canvas.pointy').length); $pointer.hide(); $canvas.hide(); } else { } } else { if ($canvas.length==1) { var $canvas = $this.next('canvas'); var $pointer = $canvas.next('.pointer'); //$pointy.show(); if ($pointer.length>0) { $pointer.show(); $canvas.show(); } //$canvas.show(); $('.pointer').removeClass('pointy-active'); $('.pointer').css({'z-index':1}); $('canvas.pointy').removeClass('pointy-active'); $('canvas.pointy').css({'z-index':1}); $pointer.css({'z-index':9999}); $canvas.css({'z-index':9999}); if (level==0) { if (totalSubLevels==1) { scrollTop_offset = $pointer.offset().top - $(window).height() / 4; } else { scrollTop_offset = $pointer.offset().top - $('#nav-tab-vb').height()-10; } $('html,body').animate({ scrollTop: scrollTop_offset }, 'slow'); } } else { $pointer.show(); //$canvas.show(); if ($pointy.length==0) { var elementOffset = $(this).position().top; var windowHeight = $(window).height()-20 - $('#nav-tab-vb').height(); var pointerHeight = Math.max(250, Math.min(windowHeight * 0.8, 450)); var newTop = elementOffset - (pointerHeight / 2); // Đảm bảo pointer không ra khỏi màn hình var maxTop = $(document).height() - pointerHeight; newTop = Math.max(0, Math.min(newTop, maxTop)); if (totalSubLevels=1) { if (level>0) { newTop = newTop+pointerHeight+30; } } // Positioning the pointer var position = $this.position(); $pointer.css({ left: $('#doc-left-col').width() + 50 + "px", width: $('#doc-right-col').width()-30, height: pointerHeight, 'z-index': 9999, top: newTop + "px" }); // Initialize pointy $this.pointy({ pointer: $pointer, defaultClass: 'zindex', activeClass: 'pointy-active', arrowWidth: 20 }); var initialTop = $pointer.position().top; $pointer.draggable({ containment: 'document', drag: function() { if (screen.width<1280) { var cap_nhat_pointy_top = setInterval(function(){ if ($this.position().top-$this.parent().height()+10!=$pointer.prev('canvas.pointy').position().top) { $pointer.prev('canvas.pointy').css({'top': $this.position().top-$this.parent().height()+10+'px'}); clearInterval(cap_nhat_pointy_top); } else { clearInterval(cap_nhat_pointy_top); } },50); } $this.trigger('pointy-update'); } }); // Thêm sự kiện click cho .close_pointy $pointer.on('click', '.close_pointy', function(e) { $pointer.hide(); $pointer.prev('canvas.pointy').hide(); }); // Handle touch events for mobile devices var isDragging = false, startX, startY, offsetX, offsetY; var startDragging = function(e) { if (checkIfScrollingContent(e)) return; if ($(e.target).is('.close_pointy')) { // Nếu đúng thì không chạy các hàm drag return; } isDragging = true; var touch = e.originalEvent.touches[0]; var pos = $pointer.position(); startX = touch.pageX; startY = touch.pageY; offsetX = startX - pos.left; offsetY = startY - pos.top-$pointer.height()-$pointer.height()/1.365; var cap_nhat_pointy_top = setInterval(function(){ if ($this.position().top-$this.parent().height()+10!=$pointer.prev('canvas.pointy').position().top) { $pointer.prev('canvas.pointy').css({'top': $this.position().top-$this.parent().height()+10+'px'}); clearInterval(cap_nhat_pointy_top); } else { clearInterval(cap_nhat_pointy_top); } },50); e.preventDefault(); }; var duringDragging = function(e) { if (checkIfScrollingContent(e)) return; if (isDragging) { var touch = e.originalEvent.touches[0]; var moveX = touch.pageX; var moveY = touch.pageY; if (screen.width<1280) { var newLeft = moveX - offsetX; var newTop = moveY - offsetY-$pointer.height()-$pointer.height()/1.365; // Giới hạn không cho kéo vượt quá chiều ngang của màn hình if (newLeft < 0) { newLeft = 0; } else if (newLeft + $pointer.outerWidth() > $(window).width()) { newLeft = $(window).width() - $pointer.outerWidth(); } // Giới hạn không cho kéo lên trên vượt quá position.top ban đầu if (newTop < initialTop) { newTop = initialTop; } $pointer.css({ left: newLeft, top: newTop }); } else { var newLeft = moveX - offsetX; var newTop = moveY - offsetY-$pointer.height()-$pointer.height()/1.365; // Giới hạn không cho kéo vượt quá chiều ngang của màn hình if (newLeft < 0) { newLeft = 0; } else if (newLeft + $pointer.outerWidth() > $(window).width()) { newLeft = $(window).width() - $pointer.outerWidth(); } $pointer.css({ left: newLeft, top: newTop }); } $pointer.prev('canvas.pointy').hide(); e.preventDefault(); } }; var stopDragging = function(e) { $pointer.prev('canvas.pointy').show(); if (checkIfScrollingContent(e)) return; if (screen.width<1280) { var cap_nhat_pointy_top = setInterval(function(){ if ($this.position().top-$this.parent().height()+10!=$pointer.prev('canvas.pointy').position().top) { $pointer.prev('canvas.pointy').css({'top': $this.position().top-$this.parent().height()+10+'px'}); clearInterval(cap_nhat_pointy_top); } else { clearInterval(cap_nhat_pointy_top); } },50); } $this.trigger('pointy-update'); }; function checkIfScrollingContent(e) { // Kiểm tra đối tượng mà người dùng đang chạm có phải là nội dung bên trong $pointer // Ví dụ, nếu nó là một phần tử
hoặc

bên trong $pointer if ($(e.target).closest('.list_tds').length > 0) { // Người dùng đang chạm vào nội dung bên trong .scroll_2 // Cho phép hành vi cuộn và ngăn chặn di chuyển $pointer e.stopPropagation(); return true; } // Người dùng không chạm vào nội dung bên trong $pointer // Cho phép di chuyển $pointer return false; } $pointer.on('touchstart', startDragging); $pointer.on('touchmove', duringDragging); $pointer.on('touchend', stopDragging); // Hàm để cập nhật vị trí của pointer var updatePointerPosition = function() { var offset = $this.position(); //alert($this.position().top); var windowHeight = $(window).height() - $('#nav-tab-vb').height()-20; var pointerHeight = Math.max(250, Math.min(windowHeight * 0.8, 450)); var elementOffset = $this.position().top; var newTop = elementOffset - (pointerHeight / 2); // Đảm bảo pointer không ra khỏi màn hình var maxTop = $(document).height() - pointerHeight; newTop = Math.max(0, Math.min(newTop, maxTop)); $pointer.css({ left: $('#doc-left-col').width() + 50 + "px", width: $('#doc-right-col').width() - 30, height: pointerHeight, top: newTop + "px" }); //alert($pointer.position().top); }; /* */ // Cập nhật vị trí pointer khi thay đổi kích thước hoặc xoay màn hình $(window).on('resize orientationchange', function() { updatePointerPosition(); //$canvas.css('top', $this.position().top+'px'); var cap_nhat_pointy_top = setInterval(function(){ if ($this.position().top-$this.parent().height()+10!=$pointer.prev('canvas.pointy').position().top) { $pointer.prev('canvas.pointy').css({'top': $this.position().top-$this.parent().height()+10+'px'}); $this.trigger('pointy-update'); clearInterval(cap_nhat_pointy_top); } else { clearInterval(cap_nhat_pointy_top); } },50); }); } } } if ($pointer.is(':visible')) { if (level==0) { if (totalSubLevels==1) { scrollTop_offset = $pointer.offset().top - $(window).height() / 4; } else { scrollTop_offset = $pointer.offset().top - $('#nav-tab-vb').height()-10; } $('html,body').animate({ scrollTop: scrollTop_offset }, 'slow'); } } } $pointer.css('opacity', '1'); $('.pointy').click(function(e) { e.preventDefault(); e.stopPropagation(); }); var parent = $(this).parent(); var dataCT = parent.attr('data-ct'); var dataDC = parent.attr('data-dc'); var dataTN = parent.attr('data-tn'); //if (dataCT) loai_buble = 'chuthich'; //if (dataDC) loai_buble = 'danchieu';; //if (dataTN) loai_buble = 'thuatngu'; var loai_buble = parent.prop('nodeName').toLowerCase(); var text_html = $(this).text(); if (loai_buble=='cttd' || loai_buble=='a') { pointer_html = '

'; } else if(loai_buble=='dctd') { if (this.hasAttribute('o-title')) { tieu_de_dan_chieu = $(this).attr('o-title'); } else { tieu_de_dan_chieu = text_html; } pointer_html = ''; } else if(loai_buble=='dctk') { pointer_html = ''; } if ($pointer.find('#noi_dung_buble_'+buble_id).length) { } else { $pointer.html(pointer_html); } if (loai_buble=='cttd' || loai_buble=='a') { var load_cttd = setInterval(function(){ if ($pointer.find('#noi_dung_buble_'+buble_id + ' .dc_loading').length) { $.ajax({ type: 'POST', url: '/ajax/vanban/chu-thich/', data: { 'ndct': dataCT, 'id_ct': buble_id, 'dc_text': text_html }, success: function(response) { $("#noi_dung_buble_" + buble_id).html(response); if ($(document).width()>=1280){$this.trigger('pointy-update');} clearInterval(load_cttd); } }); } },500); } else if(loai_buble=='dctd') { var load_cttd = setInterval(function(){ if ($pointer.find('#noi_dung_buble_'+buble_id + ' .dc_loading').length){ if (dataDC.length == 32) { $.ajax({ type: 'POST', url: '/ajax/public/dan-chieu/' + dataDC, data: { 'text_dan_chieu': text_html }, success: function(response) { $("#noi_dung_buble_" + buble_id).html(response); if ($(document).width()>=1280){$this.trigger('pointy-update');} clearInterval(load_cttd); } }); } else { $("#noi_dung_buble_" + buble_id).load('/ajax/public/dan-chieu/' + dataDC + '/'); if ($(document).width()>=1280){$this.trigger('pointy-update');} clearInterval(load_cttd); } } else { clearInterval(load_cttd); } },500); } else if(loai_buble=='dctk') { if ($('#noi_dung_buble_'+buble_id + ' .dc_loading').length){ $.ajax({ type: 'POST', url: '/ajax/vanban/chu-thich/', data: { 'ndct': dataCT, 'id_ct': buble_id, 'loai_hd': 'noi_dung_tham_khao', 'dc_text': text_html }, success: function(response) { $("#noi_dung_buble_" + buble_id).html(response); if ($(document).width()>=1280){$this.trigger('pointy-update');} } }); } } /* var tim_buble_id = setInterval(function(){ if ($('#noi_dung_buble_'+buble_id).length) { alert('bay gio moi tim thay '+buble_id); clearInterval(tim_buble_id); } },1000); */ $('.pointer').removeClass('pointy-active'); $('.pointer').css({'z-index':1}); $('canvas.pointy').removeClass('pointy-active'); $('canvas.pointy').css({'z-index':1}); $pointer.css({'z-index':9999}); $canvas.css({'z-index':9999}); $('.pointer').on('mouseenter mouseleave click touchstart', function() { // Khi di chuột vào $('.pointer').removeClass('pointy-active'); $('.pointer').css({'z-index':1}); $(this).css({'z-index':9999}); $('canvas.pointy').removeClass('pointy-active'); $('canvas.pointy').css({'z-index':1}); $(this).prev('canvas.pointy').addClass('pointy-active'); $(this).prev('canvas.pointy').css({'z-index':9999}); } ); var list_tds_max_height_interval = setInterval(function(){ if ($pointer.find('.list_tds').length) { var windowHeight = $(window).height()-20 - $('#nav-tab-vb').height(); var pointerHeight = Math.max(250, Math.min(windowHeight * 0.8, 450)); $pointer.find('.list_tds').css('max-height', pointerHeight + 'px'); clearInterval(list_tds_max_height_interval); } },50); $(window).resize(function() { if ($(document).width()<=768) { $pointer.hide(); $pointer.prev('canvas.pointy').hide(); } var cap_nhat_pointy_top = setInterval(function(){ if ($this.position().top-$this.parent().height()+10!=$pointer.prev('canvas.pointy').position().top) { $pointer.prev('canvas.pointy').css({'top': $this.position().top-$this.parent().height()+10+'px'}); clearInterval(cap_nhat_pointy_top); } else { clearInterval(cap_nhat_pointy_top); } },50); var list_tds_max_height_interval = setInterval(function(){ if ($pointer.find('.list_tds').length) { var windowHeight = $(window).height()-20 - $('#nav-tab-vb').height(); var pointerHeight = Math.max(250, Math.min(windowHeight * 0.8, 450)); $pointer.find('.list_tds').css('max-height', pointerHeight + 'px'); clearInterval(list_tds_max_height_interval); } },50); }); var parentElement = $(this).parent(); // Define the selectors for the target elements var selectors = 'cttd.chuthichtudong > span, a.chuthichtudong > span, dctk > span, dctd > span'; // Find and click all matching child elements parentElement.find(selectors).each(function() { $(this).click(); }); var cap_nhat_pointy_top = setInterval(function(){ if ($this.position().top-$this.parent().height()+10!=$pointer.prev('canvas.pointy').position().top) { $pointer.prev('canvas.pointy').css({'top': $this.position().top-$this.parent().height()+10+'px'}); clearInterval(cap_nhat_pointy_top); } else { clearInterval(cap_nhat_pointy_top); } },50); }); }); function random_string_id(numstr) { var text = ""; var possible = "abcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < numstr; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; } $(document).ready(function() { function setPointerHeight() { var windowHeight = $(window).height() - $('#nav-tab-vb').height()-20; var pointerHeight = Math.max(250, Math.min(windowHeight * 0.8, 450)); $('.pointer').css('height', pointerHeight + 'px'); } // Đặt chiều cao khi tải trang setPointerHeight(); // Đặt lại chiều cao khi thay đổi kích thước cửa sổ (nếu cần) $(window).resize(function() { setPointerHeight(); }); }); // Lưu dấu chọn lựa cuối cùng let lastChosen = null; let lastChosentr = null; function scroll_den_hd(ndsh_dich_address) { if (lastChosen) { $(lastChosen).css('background-color', ''); // Xóa mọi bôi mờ trước } if (lastChosentr) { $(lastChosentr).css('background-color', ''); // Xóa mọi bôi mờ trước } lastChosen = $('[href="javascript:scroll_den_hd(\'' + ndsh_dich_address + '\')"]'); lastChosentr = $('[data-ct="' + ndsh_dich_address + '"]'); $(lastChosen).css('background-color', 'yellow'); // Thay bôi mờ $(lastChosentr).css('background-color', 'yellow'); // Thay bôi mờ var targetElement = $('[address="' + ndsh_dich_address + '"]'); $('.selected_dchd').removeClass('selected_dchd'); targetElement.addClass('selected_dchd'); targetElement.children('p').children('cttd').click(); targetElement.children('cttd').click(); targetElement.children('p').children('dctk').click(); targetElement.children('dctk').click(); // Tính toán vị trí để cuộn đến và đẩy vị trí xuống một chút cho dễ nhìn /* var position = targetElement.offset().top - $(window).height()/2; // Sử dụng animate để cuộn đến vị trí, sau đó không cần bôi màu như trước $('html, body').animate({ scrollTop: position }, 800, function() { // Không cần thực hiện thêm hành động nào sau khi cuộn, vì việc đánh dấu đã được xử lý ở trên }); */ }