Để sử dụng toàn bộ tiện ích nâng cao của Hệ Thống Pháp Luật vui lòng lựa chọn và đăng ký gói cước.
BỘ TÀI NGUYÊN VÀ MÔI TRƯỜNG | CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM |
Số: 9968/BTNMT-QHPTTNĐ | Hà Nội, ngày 24 tháng 11 năm 2023 |
Kính gửi: Ủy ban nhân dân các tỉnh, thành phố trực thuộc Trung ương
Thực hiện chỉ đạo của Thủ tướng Chính phủ tại Công điện số 1175/CĐ-TTg ngày 22 tháng 11 năm 2023 về tháo gỡ khó khăn về chỉ tiêu sử dụng đất đến năm 2025 của các địa phương, Bộ Tài nguyên và môi trường đề nghị Ủy ban nhân dân các tỉnh, thành phố trực thuộc Trung ương:
1. Về rà soát, cập nhật nhu cầu sử dụng đất làm cơ sở đề xuất điều chỉnh Kế hoạch sử dụng đất quốc gia 5 năm 2021 – 2025.
Ngày 05 tháng 10 năm 2023, Bộ Tài nguyên và Môi trường đã ban hành Công văn số 8523/BTNMT-QHPTTNĐ về việc rà soát nhu cầu điều chỉnh các chỉ tiêu sử dụng đất đã được phân bổ đến năm 2025, trong đó yêu cầu Ủy ban nhân dân các tỉnh, thành phố trực thuộc Trung ương gửi đề xuất nhu cầu điều chỉnh chỉ tiêu sử dụng đất, rà soát, tính toán làm rõ diện tích từng công trình, dự án theo từng chỉ tiêu sử dụng đất đề xuất bổ sung đến năm 2025; các loại đất phải chuyển mục đích để thực hiện các công trình, dự án này; cung cấp đầy đủ các hồ sơ, căn cứ pháp lý về Bộ Tài nguyên và Môi trường trước ngày 20 tháng 10 năm 2023. Tuy nhiên đến nay, Bộ Tài nguyên và Môi trường mới nhận được báo cáo của 36 tỉnh, thành phố trực thuộc Trung ươngCăn cứ tình hình thực hiện Quy hoạch, các chỉ tiêu sử dụng đất giai đoạn 2021 - 2025 và trên cơ sở các tiêu chí quy hoạch, yêu cầu phát triển kinh tế - xã hội của các địa phương, Bộ Tài nguyên và Môi trường sẽ tiếp tục có văn bản phối hợp với các địa phương trong quá trình triển khai thực hiện điều chỉnh kế hoạch sử dụng đất quốc gia 5 năm 2021 – 2025.
2. Về phương phương án phân bổ chỉ tiêu sử dụng đất của Bộ Tài nguyên và Môi trường tại tờ trình số 89/TTr-BTNMT ngày 03 tháng 11 năm 2023, đề nghị Ủy ban nhân dân các tỉnh, thành phố trực thuộc Trung ương có ý kiến bằng văn bản gửi về Bộ Tài nguyên và Môi trường trước ngày 25 tháng 11 năm 2023. Sau thời điểm này Tỉnh không có ý kiến coi như thống nhất; Bộ Tài nguyên và Môi trường sẽ hoàn thiện và báo cáo Thủ tướng Chính phủ xem xét, quyết định trước ngày 30 tháng 11 năm 2023 theo đúng chỉ đạo tại Công điện số 1175/CĐ-TTg nêu trên.
Trân trọng cảm ơn sự phối hợp của Quý Ủy ban./.
| KT. BỘ TRƯỞNG |
lồng nhau (bên trong) hay không
const memberID = 0;
const vbID = '4b0fbd6a1522bcf0a0a5220a41fdc085';
// 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 = `
' + message + '
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, ' ' + para.replace(/\n/g, ' Đang phân tích... Đang phân tích... Đang xóa cache và phân tích lại... Đang phân tích...$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
');
// Lists (ordered)
html = html.replace(/^\d+\. (.*$)/gim, '
') + '' + 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 += '
Vui lòng thử lại sau.
Chi tiết: ${escapeHtml(errorMsg)}
' + 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 += '
Vui lòng thử lại sau.
Chi tiết: ${escapeHtml(errorMsg)}