Để 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Ộ KẾ HOẠCH VÀ ĐẦU TƯ | CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM |
| Số: 8600/BKHĐT-QLQH | Hà Nội, ngày 16 tháng 10 năm 2023 |
Kính gửi:………………………..………….
Ngày 18 tháng 9 năm 2023, Bộ Kế hoạch và Đầu tư có văn bản số 7674/BKHĐT-QLQH gửi Quý cơ quan có ý kiến tham gia bằng văn bản đối với hồ sơ xin ý kiến Quy hoạch vùng Bắc Trung Bộ và duyên hải miền Trung thời kỳ 2021-2030, tầm nhìn đến năm 2050 (Quy hoạch vùng) theo quy định tại Điều 19 Luật Quy hoạch và Điều 31 Nghị định số 37/2019/NĐ-CP ngày 07/5/2019 của Chính phủ quy định chi tiết một số điều của Luật Quy hoạch (hồ sơ được đăng tải theo đường dẫn phía dướiĐể có cơ sở hoàn thiện hồ sơ trình thẩm định Quy hoạch vùng theo quy định của pháp luật về quy hoạch, Bộ Kế hoạch và Đầu tư đề nghị Quý cơ quan có ý kiến tham gia bằng văn bản đối với hồ sơ xin ý kiến Quy hoạch vùng. Văn bản tham gia ý kiến xin gửi về Bộ Kế hoạch và Đầu tư trước ngày 20/10/2023 để tổng hợp, hoàn thiện hồ sơ trình thẩm định Quy hoạch vùng, đáp ứng tiến độ được Thủ tướng Chính phủ giao.
(Hồ sơ xin ý kiến được đăng tải tại đường dẫn https://quyhoachquocgia.mpi.gov.vn/Pages/tinvb.aspx?idTin=327 gồm: (1) Dự thảo Báo cáo Quy hoạch vùng; (2) Dự thảo Báo cáo đánh giá môi trường chiến lược đối với Quy hoạch vùng và (3) Hệ thống sơ đồ, bản đồ Quy hoạch vùng.
Bộ Kế hoạch và Đầu tư rất mong nhận được sự quan tâm, phối hợp chặt chẽ, hiệu quả của Quý cơ quan
|
| KT. BỘ TRƯỞNG |
DANH SÁCH GỬI CÔNG VĂN ĐỀ NGHỊ CHO Ý KIẾN HỒ SƠ QUY HOẠCH VÙNG BẮC TRUNG BỘ VÀ DUYÊN HẢI MIỀN TRUNG
I - Ủy ban Trung ương Mặt trận Tổ quốc Việt Nam
II - Các Bộ, ngành
| 1. Bộ Nội vụ. | 11. Bộ Y tế. |
| 2. Bộ Tài chính. | 12. Bộ Giáo dục và Đào tạo. |
| 3. Bộ Tài nguyên và Môi trường. | 13. Bộ Thông tin và Truyền thông. |
| 4. Bộ Xây dựng. | 14. Bộ Quốc phòng. |
| 5. Bộ Giao thông vận tải. | 15. Bộ Công an. |
| 6. Bộ Công Thương. | 16. Bộ Tư pháp. |
| 7. Bộ Nông nghiệp và Phát triển nông thôn. | 17. Bộ Ngoại giao. |
| 8. Bộ Khoa học và Công nghệ. | 18. Ủy ban Dân tộc. |
| 9. Bộ Văn hóa, Thể thao và Du lịch. | 19. Vụ Môi trường, Bộ Tài nguyên và Môi trường. |
| 10. Bộ Lao động - Thương binh và Xã hội. | 20. Văn phòng Chính phủ. |
III- Ủy ban nhân dân các tỉnh, thành phố vùng BTB và duyên hải miền Trung
| 1. Đà Nẵng | 9. Bình Định |
| 2. Nghệ An | 10. Phú Yên |
| 3. Hà Tĩnh | 11. Khánh Hòa |
| 4. Quảng Bình | 12. Ninh Thuận |
| 5. Quảng Trị | 13. Bình Thuận |
| 6. Thừa Thiên Huế |
|
| 7. Quảng Nam |
|
| 8. Quảng Ngãi |
|
IV- Ủy ban nhân dân các tỉnh liền kề vùng
1. Hòa Bình
2. Ninh Bình
3. Sơn La
4. Kon Tum
5. Gia Lai
6. Đắk Lắk
7. Đồng Nai
8. Bà Rịa - Vũng Tàu
lồng nhau (bên trong) hay không
const memberID = 0;
const vbID = '10dac0098ffe2bdf60f79bd5ce0c8853';
// 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
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) {
}
}
$(window).on('scroll resize', function () {
processVisibleParagraphs();
});
processVisibleParagraphs();
// Chức năng phân tích điều luật (chỉ cho member_id = 4)
if (memberID === 4 || memberID === 3 || memberID === 2) {
// 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)}
