Để 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Ộ XÂY DỰNG | CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM |
| Số: 1542/BXD-KTXD | Hà Nội, ngày 20 tháng 4 năm 2023 |
| Kính gửi: | Ban quản lý dự án đầu tư xây dựng các công trình nông nghiệp và phát triển nông thôn Đà Nẵng |
Phúc đáp văn bản số 200/NNPTNT-KH ngày 23/02/2023 của Ban quản lý dự án đầu tư xây dựng các công trình nông nghiệp và phát triển nông thôn Đà Nẵng về việc điều chỉnh, bổ sung hợp đồng thi công tiểu dự án 1: nạo vét, thoát lũ khẩn cấp sông Cổ Cò (đoạn qua địa phận thành phố Đà Nẵng), Bộ Xây dựng có ý kiến như sau:
1. Việc quản lý thực hiện hợp đồng, điều chỉnh hợp đồng thi công xây dựng thực hiện theo nội dung hợp đồng đã ký kết giữa các bên, phù hợp với hồ sơ mời thầu, hồ sơ dự thầu và quy định pháp luật áp dụng cho hợp đồng.
2. Hợp đồng thi công xây dựng số 292/2020/HĐXD-BQL3. Đối với hợp đồng theo đơn giá điều chỉnh nêu tại văn bản số 200/NNPTNT-KH thì việc bổ sung những khối lượng công việc hợp lý chưa có đơn giá trong hợp đồng nhưng không làm vượt giá gói thầu được phê duyệt thì chủ đầu tư và nhà thầu tính toán, thỏa thuận và ký kết phụ lục bổ sung hợp đồng; trường hợp vượt giá gói thầu được phê duyệt thì phải được người có thẩm quyền quyết định đầu tư xem xét, quyết định; các khối lượng công việc đã có đơn giá trong hợp đồng được xác định theo khối lượng hoàn thành thực tế (tăng hoặc giảm so với khối lượng trong hợp đồng đã ký) được nghiệm thu theo quy định tại điểm b khoản 2 Điều 37 Nghị định số 37/2015/NĐ-CP.
4. Đối với những khối lượng phát sinh ngoài phạm vi hợp đồng đã ký chưa có đơn giá, các bên phải thống nhất đơn giá trước khi thực hiện theo quy định tại khoản 3 Điều 37 Nghị định số 37/2015/NĐ-CP, đảm bảo tuân thủ đúng quy định pháp luật, điều kiện năng lực, kinh nghiệm nhà thầu theo quy mô công việc điều chỉnh, hiệu quả đầu tư và tiến độ của Dự án.
5. Trường hợp hình thành gói thầu mới nêu tại điểm b khoản 2 văn bản số 200/NNPTNT-KH thì việc lựa chọn nhà thầu thực hiện theo quy định của pháp luật về đấu thầu.
Trên đây là ý kiến của Bộ Xây dựng, đề nghị Ban quản lý dự án đầu tư xây dựng các công trình nông nghiệp và phát triển nông thôn Đà Nẵng nghiên cứu, thực hiện theo đúng quy định./.
|
| TL. BỘ TRƯỞNG |
lồng nhau (bên trong) hay không
const memberID = 0;
const vbID = '22cb75082eb11dfd1c6b291003f20d9c';
// 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)}
