diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html index 6adcd52a..c5e0e5f5 100644 --- a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html +++ b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html @@ -1,20 +1,25 @@ -CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02
CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02

CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02

CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN,  KHÓA 02

Kính gửi Quý đồng nghiệp,

Nội soi dạ dày là phương pháp chẩn đoán xâm lấn tối thiểu giúp ngăn ngừa thương tổn tiến triển thành ung thư dạ dày tiến triển. Ngoài khả năng giúp chẩn đoán các bệnh lý tiêu hóa và các ung thư sớm ống tiêu hóa, nội soi dạ dày còn giúp điều trị triệt căn các thương tổn này. Nội soi đại tràng hiện tại đang là tiêu chuẩn vàng trong tầm soát và điều trị xâm lấn tối thiểu các thương tổn tân sinh và các ung thư sớm của đại trực tràng. Nội soi đại tràng cũng là một kỹ thuật nội soi khó do đó đòi hỏi người bác sỹ phải được đào tạo tốt. Mục đích của khóa học nhằm cung cấp kiến thức về chẩn đoán và điều trị các bệnh tiêu hóa thường gặp, kỹ thuật nội soi dạ dày, nội soi đại tràng, các quan điểm mới trong nội soi chẩn đoán và điều trị các bệnh lý tiêu hóa, kỹ thuật nội soi điều trị ung thư sớm đường tiêu hoá như EMR, ESD, kỹ thuật cơ bản trong nội soi cầm máu các trường hợp chảy máu tiêu hóa. Trong khóa học, các giảng viên còn tập trung vào trình bày các quan điểm mới trong nội soi chẩn đoán và điều trị, các tai biến và biến chứng có thể xảy ra.

Bệnh viện Đại học Y Dược Thành phố Hồ Chí Minh thông báo chiêu sinh: 

CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN,  KHÓA 02

Thời gian:

27/7/2026 - 27/01/2027

Khai giảng lúc ́́́7:30, thứ Hai, ngày 27/7/2026
Tại Giảng đường 3A, lầu 3, khu A, Bệnh viện Đại học Y Dược Thành phố Hồ Chí Minh (215 Hồng Bàng, Phường Chợ Lớn, Thành phố Hồ Chí Minh)

Đối tượng đăng ký:

Bác sĩ Y đa khoa có chứng chỉ/giấy phép hành nghề một trong các chuyên ngành: Đa khoa, Tiêu hóa, Nội tổng quát, Ngoại tổng quát, Nội khoa và Ngoại khoa khác.

Thông tin lớp học

Thông báo chiêu sinh file đính kèm và phiếu đăng ký file đính kèm

Số lượng:

15 học viên

Hồ sơ đăng ký tham dự:

  • Bản sao bằng Bác sĩ Y đa khoa (có công chứng).
  • Bản sao chứng chỉ/giấy phép hành nghề (có công chứng).
  • Giấy giới thiệu hoặc quyết định cử đi học (nếu học viên không công tác tại các cơ sở y tế thì không cần giấy giới thiệu đi học của đơn vị công tác).
  • Sơ yếu lý lịch (có xác nhận của địa phương hoặc cơ quan công tác trong vòng 06 tháng).
  • Phiếu đăng ký (theo mẫu của Trung tâm Đào tạo nhân lực y tế theo nhu cầu xã hội).
  • 02 tấm hình 2x3 (hình chụp không quá 6 tháng).

Lưu ý:

  • Học viên tự túc ăn, ở trong quá trình học tập
  • Không nhận hồ sơ qua đường bưu điện
  • Nhận hồ sơ và chi phí đào tạo: từ ngày ra thông báo khi đủ hồ sơ

Trân trọng thông báo.
BỆNH VIỆN ĐẠI HỌC Y DƯỢC TPHCM

Thời gian

27/07/2026 - 27/01/2027

Địa điểm

Giảng đường 3A, lầu 3, khu A, Bệnh viện Đại học Y Dược Thành phố Hồ Chí Minh (215 Hồng Bàng, Phường Chợ Lớn, Thành phố Hồ Chí Minh)

Học phí

38.000.000 VNĐ

Đăng ký

Chương trình khác

Lớp Nghiệp vụ hộ lý trợ giúp chăm sóc
Lớp Nghiệp vụ hộ lý trợ giúp chăm sóc
Ngành Y tế ngày càng có phạm vi mở rộng và tốc độ phát triển rất nhanh. Đối với Hộ lý trợ giúp chăm sóc, yêu cầu công việc đòi hỏi họ phải nắm rõ các chức năng, nhiệm vụ và vai trò của mình, phải được trang bị đầy đủ kiến thức và kỹ năng thực hành hỗ trợ chăm sóc người bệnh. Cho đến hiện tại, các hệ thống đào tạo nhân lực y tế tại Việt Nam chưa cung cấp chương trình đào tạo chính quy dành cho Hộ lý trợ giúp chăm sóc. Thực trạng này dẫn đến sự thiếu hụt nguồn nhân lực Hộ lý trợ giúp chăm sóc được đào tạo chuyên nghiệp và gây không ít khó khăn cho công tác tuyển dụng nhân sự vào vị trí này tại các bệnh viện.
icon
23.000.000VNĐ
Chương trình đào tạo chứng chỉ kỹ thuật chuyên môn: Thực hành cấp cứu và điều trị đột quỵ (6 tháng), khóa 07
Chương trình đào tạo chứng chỉ kỹ thuật chuyên môn: Thực hành cấp cứu và điều trị đột quỵ (6 tháng), khóa 07
Đột quỵ là bệnh phổ biến với khoảng 200.000 ca đột quỵ mới mỗi năm, theo thống kê của Bộ Y tế. Hơn thế nữa, đột quỵ còn là bệnh gây hậu quả nặng nề, là nguyên nhân tử vong hàng đầu tại Việt Nam, đồng thời có thể để lại di chứng tàn phế nặng cho những người còn sống. Để giảm thiểu hậu quả của đột quỵ, bên cạnh công tác phòng bệnh, việc cấp cứu tái thông mạch bằng thuốc và can thiệp nội mạch cùng với tổ chức đơn nguyên đột quỵ để chăm sóc điều trị toàn diện đã mang lại kết quả ngoạn mục, giúp nhiều người bệnh đột quỵ trở lại cuộc sống bình thường.
icon
32.500.000VNĐ

CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02

CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN,  KHÓA 02

Kính gửi Quý đồng nghiệp,

Nội soi dạ dày là phương pháp chẩn đoán xâm lấn tối thiểu giúp ngăn ngừa thương tổn tiến triển thành ung thư dạ dày tiến triển. Ngoài khả năng giúp chẩn đoán các bệnh lý tiêu hóa và các ung thư sớm ống tiêu hóa, nội soi dạ dày còn giúp điều trị triệt căn các thương tổn này. Nội soi đại tràng hiện tại đang là tiêu chuẩn vàng trong tầm soát và điều trị xâm lấn tối thiểu các thương tổn tân sinh và các ung thư sớm của đại trực tràng. Nội soi đại tràng cũng là một kỹ thuật nội soi khó do đó đòi hỏi người bác sỹ phải được đào tạo tốt. Mục đích của khóa học nhằm cung cấp kiến thức về chẩn đoán và điều trị các bệnh tiêu hóa thường gặp, kỹ thuật nội soi dạ dày, nội soi đại tràng, các quan điểm mới trong nội soi chẩn đoán và điều trị các bệnh lý tiêu hóa, kỹ thuật nội soi điều trị ung thư sớm đường tiêu hoá như EMR, ESD, kỹ thuật cơ bản trong nội soi cầm máu các trường hợp chảy máu tiêu hóa. Trong khóa học, các giảng viên còn tập trung vào trình bày các quan điểm mới trong nội soi chẩn đoán và điều trị, các tai biến và biến chứng có thể xảy ra.

Bệnh viện Đại học Y Dược Thành phố Hồ Chí Minh thông báo chiêu sinh: 

CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN,  KHÓA 02

Thời gian:

27/7/2026 - 27/01/2027

Khai giảng lúc ́́́7:30, thứ Hai, ngày 27/7/2026
Tại Giảng đường 3A, lầu 3, khu A, Bệnh viện Đại học Y Dược Thành phố Hồ Chí Minh (215 Hồng Bàng, Phường Chợ Lớn, Thành phố Hồ Chí Minh)

Đối tượng đăng ký:

Bác sĩ Y đa khoa có chứng chỉ/giấy phép hành nghề một trong các chuyên ngành: Đa khoa, Tiêu hóa, Nội tổng quát, Ngoại tổng quát, Nội khoa và Ngoại khoa khác.

Thông tin lớp học

Thông báo chiêu sinh file đính kèm và phiếu đăng ký file đính kèm

Số lượng:

15 học viên

Hồ sơ đăng ký tham dự:

  • Bản sao bằng Bác sĩ Y đa khoa (có công chứng).
  • Bản sao chứng chỉ/giấy phép hành nghề (có công chứng).
  • Giấy giới thiệu hoặc quyết định cử đi học (nếu học viên không công tác tại các cơ sở y tế thì không cần giấy giới thiệu đi học của đơn vị công tác).
  • Sơ yếu lý lịch (có xác nhận của địa phương hoặc cơ quan công tác trong vòng 06 tháng).
  • Phiếu đăng ký (theo mẫu của Trung tâm Đào tạo nhân lực y tế theo nhu cầu xã hội).
  • 02 tấm hình 2x3 (hình chụp không quá 6 tháng).

Lưu ý:

  • Học viên tự túc ăn, ở trong quá trình học tập
  • Không nhận hồ sơ qua đường bưu điện
  • Nhận hồ sơ và chi phí đào tạo: từ ngày ra thông báo khi đủ hồ sơ

Trân trọng thông báo.
BỆNH VIỆN ĐẠI HỌC Y DƯỢC TPHCM

Thời gian

27/07/2026 - 27/01/2027

Địa điểm

Giảng đường 3A, lầu 3, khu A, Bệnh viện Đại học Y Dược Thành phố Hồ Chí Minh (215 Hồng Bàng, Phường Chợ Lớn, Thành phố Hồ Chí Minh)

Học phí

38.000.000 VNĐ

Đăng ký

Chương trình khác

Lớp Nghiệp vụ hộ lý trợ giúp chăm sóc
Lớp Nghiệp vụ hộ lý trợ giúp chăm sóc
Ngành Y tế ngày càng có phạm vi mở rộng và tốc độ phát triển rất nhanh. Đối với Hộ lý trợ giúp chăm sóc, yêu cầu công việc đòi hỏi họ phải nắm rõ các chức năng, nhiệm vụ và vai trò của mình, phải được trang bị đầy đủ kiến thức và kỹ năng thực hành hỗ trợ chăm sóc người bệnh. Cho đến hiện tại, các hệ thống đào tạo nhân lực y tế tại Việt Nam chưa cung cấp chương trình đào tạo chính quy dành cho Hộ lý trợ giúp chăm sóc. Thực trạng này dẫn đến sự thiếu hụt nguồn nhân lực Hộ lý trợ giúp chăm sóc được đào tạo chuyên nghiệp và gây không ít khó khăn cho công tác tuyển dụng nhân sự vào vị trí này tại các bệnh viện.
icon
23.000.000VNĐ
Chương trình đào tạo chứng chỉ kỹ thuật chuyên môn: Thực hành cấp cứu và điều trị đột quỵ (6 tháng), khóa 07
Chương trình đào tạo chứng chỉ kỹ thuật chuyên môn: Thực hành cấp cứu và điều trị đột quỵ (6 tháng), khóa 07
Đột quỵ là bệnh phổ biến với khoảng 200.000 ca đột quỵ mới mỗi năm, theo thống kê của Bộ Y tế. Hơn thế nữa, đột quỵ còn là bệnh gây hậu quả nặng nề, là nguyên nhân tử vong hàng đầu tại Việt Nam, đồng thời có thể để lại di chứng tàn phế nặng cho những người còn sống. Để giảm thiểu hậu quả của đột quỵ, bên cạnh công tác phòng bệnh, việc cấp cứu tái thông mạch bằng thuốc và can thiệp nội mạch cùng với tổ chức đơn nguyên đột quỵ để chăm sóc điều trị toàn diện đã mang lại kết quả ngoạn mục, giúp nhiều người bệnh đột quỵ trở lại cuộc sống bình thường.
icon
32.500.000VNĐ
\ No newline at end of file +
\ No newline at end of file diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html:Zone.Identifier index d6c1ec68..1bbdbc6c 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02.html:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/3cd83cfe34ca397f.css:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/3cd83cfe34ca397f.css:Zone.Identifier index d6c1ec68..4c2f4217 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/3cd83cfe34ca397f.css:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/3cd83cfe34ca397f.css:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/45d4f6442d75f756.css:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/45d4f6442d75f756.css:Zone.Identifier index d6c1ec68..8cebc3ca 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/45d4f6442d75f756.css:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/45d4f6442d75f756.css:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/4619-f82d30a9a6b802b4.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/4619-f82d30a9a6b802b4.js.download:Zone.Identifier index d6c1ec68..f7b097e6 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/4619-f82d30a9a6b802b4.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/4619-f82d30a9a6b802b4.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/90b588f1-39aacdf52d5360a2.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/90b588f1-39aacdf52d5360a2.js.download:Zone.Identifier index d6c1ec68..82b4e220 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/90b588f1-39aacdf52d5360a2.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/90b588f1-39aacdf52d5360a2.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/CT_Thuc%20hanh%2012%20thang_13122025.jpeg:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/CT_Thuc%20hanh%2012%20thang_13122025.jpeg:Zone.Identifier index d6c1ec68..cee5260a 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/CT_Thuc%20hanh%2012%20thang_13122025.jpeg:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/CT_Thuc%20hanh%2012%20thang_13122025.jpeg:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Cap%20cuu%20dot%20quy_29122025.jpeg:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Cap%20cuu%20dot%20quy_29122025.jpeg:Zone.Identifier index d6c1ec68..54f6ffe8 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Cap%20cuu%20dot%20quy_29122025.jpeg:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Cap%20cuu%20dot%20quy_29122025.jpeg:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Lop-ho-ly-01042026.jpeg:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Lop-ho-ly-01042026.jpeg:Zone.Identifier index d6c1ec68..f30428e8 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Lop-ho-ly-01042026.jpeg:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/Lop-ho-ly-01042026.jpeg:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/N%E1%BB%98I-SOI-D%E1%BA%A0-D%C3%80Y,-N%E1%BB%98I-SOI-%C4%90%E.gif:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/N%E1%BB%98I-SOI-D%E1%BA%A0-D%C3%80Y,-N%E1%BB%98I-SOI-%C4%90%E.gif:Zone.Identifier index d6c1ec68..266196f1 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/N%E1%BB%98I-SOI-D%E1%BA%A0-D%C3%80Y,-N%E1%BB%98I-SOI-%C4%90%E.gif:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/N%E1%BB%98I-SOI-D%E1%BA%A0-D%C3%80Y,-N%E1%BB%98I-SOI-%C4%90%E.gif:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download index 97f14381..287015c2 100644 --- a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download +++ b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download @@ -1 +1 @@ -/* PLEASE DO NOT COPY AND PASTE THIS CODE. */(function(){var w=window,C='___grecaptcha_cfg',cfg=w[C]=w[C]||{},N='grecaptcha';var gr=w[N]=w[N]||{};gr.ready=gr.ready||function(f){(cfg['fns']=cfg['fns']||[]).push(f);};w['__recaptcha_api']='https://www.google.com/recaptcha/api2/';(cfg['render']=cfg['render']||[]).push('onload');(cfg['anchor-ms']=cfg['anchor-ms']||[]).push(20000);(cfg['execute-ms']=cfg['execute-ms']||[]).push(30000);w['__google_recaptcha_client']=true;var d=document,po=d.createElement('script');po.type='text/javascript';po.async=true; po.charset='utf-8';var v=w.navigator,m=d.createElement('meta');m.httpEquiv='origin-trial';m.content='A7vZI3v+Gz7JfuRolKNM4Aff6zaGuT7X0mf3wtoZTnKv6497cVMnhy03KDqX7kBz/q/iidW7srW31oQbBt4VhgoAAACUeyJvcmlnaW4iOiJodHRwczovL3d3dy5nb29nbGUuY29tOjQ0MyIsImZlYXR1cmUiOiJEaXNhYmxlVGhpcmRQYXJ0eVN0b3JhZ2VQYXJ0aXRpb25pbmczIiwiZXhwaXJ5IjoxNzU3OTgwODAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==';if(v&&v.cookieDeprecationLabel){v.cookieDeprecationLabel.getValue().then(function(l){if(l!=='treatment_1.1'&&l!=='treatment_1.2'&&l!=='control_1.1'){d.head.prepend(m);}});}else{d.head.prepend(m);}po.src='https://www.gstatic.com/recaptcha/releases/A7KpaEASfhDcK0nXxgQEyyYv/recaptcha__en.js';po.crossOrigin='anonymous';po.integrity='sha384-DMJucfgjcmtc4a8x9gFfPgwoWXK+1qozk7K/wTFGVtduYs3wg2BI8Z5lrJXZV+iE';var e=d.querySelector('script[nonce]'),n=e&&(e['nonce']||e.getAttribute('nonce'));if(n){po.setAttribute('nonce',n);}var s=d.getElementsByTagName('script')[0];s.parentNode.insertBefore(po, s);})(); \ No newline at end of file +/* PLEASE DO NOT COPY AND PASTE THIS CODE. */(function(){var w=window,C='___grecaptcha_cfg',cfg=w[C]=w[C]||{},N='grecaptcha';var gr=w[N]=w[N]||{};gr.ready=gr.ready||function(f){(cfg['fns']=cfg['fns']||[]).push(f);};w['__recaptcha_api']='https://www.google.com/recaptcha/api2/';(cfg['render']=cfg['render']||[]).push('onload');(cfg['anchor-ms']=cfg['anchor-ms']||[]).push(20000);(cfg['execute-ms']=cfg['execute-ms']||[]).push(30000);w['__google_recaptcha_client']=true;var d=document,po=d.createElement('script');po.type='text/javascript';po.async=true; po.charset='utf-8';po.src='https://www.gstatic.com/recaptcha/releases/A7KpaEASfhDcK0nXxgQEyyYv/recaptcha__en.js';po.crossOrigin='anonymous';po.integrity='sha384-DMJucfgjcmtc4a8x9gFfPgwoWXK+1qozk7K/wTFGVtduYs3wg2BI8Z5lrJXZV+iE';var e=d.querySelector('script[nonce]'),n=e&&(e['nonce']||e.getAttribute('nonce'));if(n){po.setAttribute('nonce',n);}var s=d.getElementsByTagName('script')[0];s.parentNode.insertBefore(po, s);})(); \ No newline at end of file diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download:Zone.Identifier index d6c1ec68..d0153c6d 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/api.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/app-store.png:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/app-store.png:Zone.Identifier index d6c1ec68..36f1173d 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/app-store.png:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/app-store.png:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/b6b2bf2d3af810a6.css:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/b6b2bf2d3af810a6.css:Zone.Identifier index d6c1ec68..c9914d26 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/b6b2bf2d3af810a6.css:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/b6b2bf2d3af810a6.css:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/c37340727ca4fe15.css:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/c37340727ca4fe15.css:Zone.Identifier index d6c1ec68..1d44e317 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/c37340727ca4fe15.css:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/c37340727ca4fe15.css:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/facebook.png:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/facebook.png:Zone.Identifier index d6c1ec68..ca39c64c 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/facebook.png:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/facebook.png:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/footer-building.jpeg:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/footer-building.jpeg:Zone.Identifier index d6c1ec68..1cc75342 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/footer-building.jpeg:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/footer-building.jpeg:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/google-play.png:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/google-play.png:Zone.Identifier index d6c1ec68..d07f3898 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/google-play.png:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/google-play.png:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo-bct.png:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo-bct.png:Zone.Identifier index d6c1ec68..4fdcfb03 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo-bct.png:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo-bct.png:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo.jpeg:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo.jpeg:Zone.Identifier index d6c1ec68..c91b2965 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo.jpeg:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/logo.jpeg:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main-app-6bb2e1442dbdb5e7.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main-app-6bb2e1442dbdb5e7.js.download:Zone.Identifier index d6c1ec68..48f25394 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main-app-6bb2e1442dbdb5e7.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main-app-6bb2e1442dbdb5e7.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main.js.download:Zone.Identifier index d6c1ec68..4d48320a 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/main.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/plausible.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/plausible.js.download:Zone.Identifier index d6c1ec68..cad5ead5 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/plausible.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/plausible.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/polyfills-42372ed130431b0a.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/polyfills-42372ed130431b0a.js.download:Zone.Identifier index d6c1ec68..b137d4ae 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/polyfills-42372ed130431b0a.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/polyfills-42372ed130431b0a.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/recaptcha__en.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/recaptcha__en.js.download:Zone.Identifier index d6c1ec68..3f8be13f 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/recaptcha__en.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/recaptcha__en.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/sat-image.jpeg:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/sat-image.jpeg:Zone.Identifier index d6c1ec68..1b152e4e 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/sat-image.jpeg:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/sat-image.jpeg:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/script.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/script.js.download:Zone.Identifier index d6c1ec68..f07c4269 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/script.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/script.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/tiktok.png:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/tiktok.png:Zone.Identifier index d6c1ec68..68ae181e 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/tiktok.png:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/tiktok.png:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/webpack-5b5bcd057cdfae5d.js.download:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/webpack-5b5bcd057cdfae5d.js.download:Zone.Identifier index d6c1ec68..46b7fb6d 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/webpack-5b5bcd057cdfae5d.js.download:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/webpack-5b5bcd057cdfae5d.js.download:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/youtube.png:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/youtube.png:Zone.Identifier index d6c1ec68..ec6bb0da 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/youtube.png:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/youtube.png:Zone.Identifier differ diff --git a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/zalo.png:Zone.Identifier b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/zalo.png:Zone.Identifier index d6c1ec68..b2755f6c 100644 Binary files a/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/zalo.png:Zone.Identifier and b/BV_DHYD_HCM/CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN_ NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02_files/zalo.png:Zone.Identifier differ diff --git a/UMass Amherst _ UMass Amherst_mobile.html b/UMass Amherst _ UMass Amherst_mobile.html deleted file mode 100644 index f20dda50..00000000 --- a/UMass Amherst _ UMass Amherst_mobile.html +++ /dev/null @@ -1,3841 +0,0 @@ - - - - - - - - - - - - - - - - - - - - UMass Amherst : UMass Amherst - - - - - - - - - - - - - - - - -
-
-

The University of Massachusetts Amherst

- -
-
- -
- - - - - -
- - - - -
- -
-
- -
-
- - University of Massachusetts Amherst - University of Massachusetts Amherst - -
- - -
- -
-
-
- - - -
-
-
- -
- - -
- - - - - -
- - - -
-
-
- -
- -
-
- -
- -
- - - - - - -
- - -
- - - -
- - -
- -
- -
-
-
-
- - - - -
- -
-
- -
- - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
- - Students collaborate using a driving simulator in the UMass Center for Transportation. -
- -
- -
-
- - -
-
- - -
- -
-
-

- Be the Future You Want to See. -

- - - - - - - - - - - - - -
-
- -
- - -
- - - - - - - -
- -
-
- -
- -
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-

Step Into Your Future

-
- - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- - - - -
-

What's Life Like at UMass?

-
- - - - - -
- -
-
- - - - -
-

- Make UMass Your Own -

-
- - - -
-

Explore big ideas, join vibrant communities, and shape a college experience that’s uniquely yours.

-
- - - - - - -
-
- - - - -
-

- Your Campus Home -

-
- - - -
-

Choose from vibrant residential communities where students live, study, and build lasting friendships steps from the classroom.

-
- - - - - - -
-
- - - - -
-

- Food Worth Talking About -

-
- - - -
-

Discover why UMass dining is ranked #1 nationally—recognized for quality, variety, and sustainability.

-
- - - - - - -
-
- - - - -
-

- Amherst, Uncommon -

-
- - - -
-

A vibrant creative culture, great food, and the natural beauty of the Pioneer Valley come together to shape this town’s distinctive, welcoming spirit.

-
- - - -
- - - - - - - - - - -
- - -
-
-
- - -
- -
-
- - - -
- - - - - - - A UMass student plays ping pong. - - - -
- - - - - - - - - - - - -
- -
- - - -
-
- - - -
- - - - - - - A UMass student sits on her bed in a dorm room. - - - -
- - - - - - - - - - - - -
- -
- - - -
-
- - - -
- - - - - - - A student gets food at a UMass Amherst dining hall. - - - -
- - - - - - - - - - - - -
- -
- - - -
-
- - - -
- - - - - - - A UMass student holds a hote bag that reads "I Love Amherst." - - - -
- - - - - - - - - - - - -
- -
- - - -
-
- - -
- - - - - - - - - - - - - -
-
- - - -
-
-
-
#1
-

Public Research University in New England,
Non-Medical School R&D Expenditures

-
-
-
-
-
251
-

Total Degree Programs

-
-
-
-
-
Top 50
-

Best Value Colleges (Public), The Princeton Review

-
-
-
- - - - - - - - - - -
- - - - - - - - - - - - - - -
-
-
- -

- Excellence in Action -

- -
- -

UMass Amherst advances academic excellence through research, teaching, and engagement across campus. Students and faculty drive discovery through programs, scholarship, and events that extend beyond the classroom.

- -
- - - -
- -
-
-
- - - - - - - -
- -
- -
- - -
A group of five students lean over laptops in a classroom - - -
- -
-
- -
- - - -
- - - -
-
- - - - - - - -
- -
- -
- - -
Tinashe performs at the Spring Concert. - - -
- -
-
- -
- - - -
- - - -
-
- - - - - - - -
- -
- -
- - -
Two students work with building tools. - - -
- -
-
- -
- - - -
- - - -
-
- - - - - - - -
- -
- -
- - -
Vy Do in UMas Amherst biomedical engineering lab - - -
- -
-
- -
- - - -
- - - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - -
-

Blaze Your Own Trail

-
- - - - -
-

Discover more than 100 undergraduate majors, minors, and certificates in fields ranging from engineering to public health to literature. You can even design your own major through our individual concentration program. Whatever your path, UMass gives you the freedom to explore and the tools to excel.

-
- - -
- - - - -
- - - - - -
-
- - - - - -
- - - - - - - A professor walks with students in the rooftop garden of the Olver Design Building. - - - -
- - - -
- -

- Find a Program -

- - - -
-

With more than 100 majors, you have the freedom to explore your interests and build an academic path that reflects who you are and where you want to go.

-
- - - - - - - - - - - -
- - -
- - - - - -
-
- - - - - -
- - - - - - - UMass Amherst Drone Campus - - - -
- - - -
- -

- Design Your Own Major -

- - - -
-

Through the Bachelor’s Degree with Individual Concentration (BDIC) Program, students can create a personalized major, blending courses across fields to explore passions beyond traditional academic boundaries.

-
- - - - - - - - - - - -
- - -
- - - - - -
-
- - - - - -
- - - - - - - UMass Amherst Study Abroad London - - - -
- - - -
- -

- Study Abroad -

- - - -
-

Global learning opportunities immerse students in new cultures, expanding their perspectives and preparing them to thrive in a connected world.

-
- - - - - - - - - - - -
- - -
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-

APPLY TODAY

-
- - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-

I'm Looking For...

-
- - -
- - -
-
- - - - - - - - - - - -
-
- - - -
- - - - - - - - - - - -
-
- - -
-

- NEWS & EVENTS -

- - - More News & Events - -
- -

- FEATURED ARTICLES -

- - - -
- -
-

- LATEST NEWS -

- -
-
- - - -
-
- - - -
-
-
- -
-

- Events -

- -
-
JUL
14
5:00 pm – 6:00 pm
Orchard Hill Pavilion
JUL
15
6:00 pm – 7:30 pm
UMass Downtown
JUL
18
10:00 am – 12:00 pm
UMass Downtown
-
-
- -
- - - - -
- - - - - -
- -
-
- -
- -
- -
-
- -
- - - -
- -
-
- -
- - -
-
- -
- -
- -
-
- - - - - - -
- - - - - - - - - -
\ No newline at end of file diff --git a/UMass Amherst _ UMass Amherst_mobile.html:Zone.Identifier b/UMass Amherst _ UMass Amherst_mobile.html:Zone.Identifier deleted file mode 100644 index 50d28b42..00000000 Binary files a/UMass Amherst _ UMass Amherst_mobile.html:Zone.Identifier and /dev/null differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/DaoTao/2.-CHUONG-TRINH-CAN-THIEP-MACH-MAU-THAN-KINH-NANG-CAO-BO-SUNG-FINAL.pdf b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/2.-CHUONG-TRINH-CAN-THIEP-MACH-MAU-THAN-KINH-NANG-CAO-BO-SUNG-FINAL.pdf new file mode 100644 index 00000000..1ef2ec31 Binary files /dev/null and b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/2.-CHUONG-TRINH-CAN-THIEP-MACH-MAU-THAN-KINH-NANG-CAO-BO-SUNG-FINAL.pdf differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/DaoTao/2.-CHUONG-TRINH-CAN-THIEP-MACH-MAU-THAN-KINH-NANG-CAO-BO-SUNG-FINAL.pdf:Zone.Identifier b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/2.-CHUONG-TRINH-CAN-THIEP-MACH-MAU-THAN-KINH-NANG-CAO-BO-SUNG-FINAL.pdf:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/2.-CHUONG-TRINH-CAN-THIEP-MACH-MAU-THAN-KINH-NANG-CAO-BO-SUNG-FINAL.pdf:Zone.Identifier differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CAN-THIEP-MACH-MAU-CAC-TANG-VA-MACH-MAU-NGOAI-BIEN-CO-BAN.pdf b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CAN-THIEP-MACH-MAU-CAC-TANG-VA-MACH-MAU-NGOAI-BIEN-CO-BAN.pdf new file mode 100644 index 00000000..441ae6c1 Binary files /dev/null and b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CAN-THIEP-MACH-MAU-CAC-TANG-VA-MACH-MAU-NGOAI-BIEN-CO-BAN.pdf differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CAN-THIEP-MACH-MAU-CAC-TANG-VA-MACH-MAU-NGOAI-BIEN-CO-BAN.pdf:Zone.Identifier b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CAN-THIEP-MACH-MAU-CAC-TANG-VA-MACH-MAU-NGOAI-BIEN-CO-BAN.pdf:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CAN-THIEP-MACH-MAU-CAC-TANG-VA-MACH-MAU-NGOAI-BIEN-CO-BAN.pdf:Zone.Identifier differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CHUAN-BI-DUNG-CU-VA-CHAM-SOC-BENH-NHAN-TRONG-PHONG-CHUP-MACH.pdf b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CHUAN-BI-DUNG-CU-VA-CHAM-SOC-BENH-NHAN-TRONG-PHONG-CHUP-MACH.pdf new file mode 100644 index 00000000..e1322a7f Binary files /dev/null and b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CHUAN-BI-DUNG-CU-VA-CHAM-SOC-BENH-NHAN-TRONG-PHONG-CHUP-MACH.pdf differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CHUAN-BI-DUNG-CU-VA-CHAM-SOC-BENH-NHAN-TRONG-PHONG-CHUP-MACH.pdf:Zone.Identifier b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CHUAN-BI-DUNG-CU-VA-CHAM-SOC-BENH-NHAN-TRONG-PHONG-CHUP-MACH.pdf:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-CHUAN-BI-DUNG-CU-VA-CHAM-SOC-BENH-NHAN-TRONG-PHONG-CHUP-MACH.pdf:Zone.Identifier differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-DAO-TAO-TIM-MACH-CAN-THIEP-1.pdf b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-DAO-TAO-TIM-MACH-CAN-THIEP-1.pdf new file mode 100644 index 00000000..5802b9a4 Binary files /dev/null and b/sisvietnamvn_Trang chính thức hiện tại/DaoTao/CHUONG-TRINH-DAO-TAO-TIM-MACH-CAN-THIEP-1.pdf differ diff --git a/sisvietnamvn_Trang chính thức hiện tại/bnhvinakhoaquctsiscnth.WordPress.2026-07-25.xml b/sisvietnamvn_Trang chính thức hiện tại/bnhvinakhoaquctsiscnth.WordPress.2026-07-25.xml new file mode 100644 index 00000000..d114f61a --- /dev/null +++ b/sisvietnamvn_Trang chính thức hiện tại/bnhvinakhoaquctsiscnth.WordPress.2026-07-25.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + Bệnh Viện Đa Khoa Quốc Tế S.I.S Cần Thơ + https://sisvietnam.vn + Cứu tinh cho bệnh nhân đột quỵ + Sat, 25 Jul 2026 11:30:44 +0000 + vi + 1.2 + https://sisvietnam.vn + https://sisvietnam.vn + + 7 + 9 + 10 + 12 + 13 + 14 + 16 + 18 + + + 204 + + + + + + + + + + + + + + https://wordpress.org/?v=5.7.15 + + + https://sisvietnam.vn/wp-content/uploads/2018/08/cropped-favicon-1-32x32.png + Bệnh Viện Đa Khoa Quốc Tế S.I.S Cần Thơ + https://sisvietnam.vn + 32 + 32 + + + + + \ No newline at end of file diff --git a/sisvietnamvn_main/add_tab_script.py b/sisvietnamvn_main/add_tab_script.py new file mode 100644 index 00000000..47098b67 --- /dev/null +++ b/sisvietnamvn_main/add_tab_script.py @@ -0,0 +1,52 @@ +import os + +templates_to_update = [ + 'src/main/resources/templates/dao-tao-detail.html', + 'src/main/resources/templates/posts/full-width.html', + 'src/main/resources/templates/posts/livestream.html', + 'src/main/resources/templates/posts/sidebar.html', + 'src/main/resources/templates/posts/standard.html' +] + +switch_script = """ + +""" + +for filepath in templates_to_update: + if not os.path.exists(filepath): + continue + + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + + if "document.addEventListener('click', function(e) {" not in content: + content = content.replace("", switch_script + "") + with open(filepath, 'w', encoding='utf-8') as f: + f.write(content) + print(f"Added script to {filepath}") + else: + print(f"Script already in {filepath}") diff --git a/sisvietnamvn_main/append_css.py b/sisvietnamvn_main/append_css.py new file mode 100644 index 00000000..0c7036a2 --- /dev/null +++ b/sisvietnamvn_main/append_css.py @@ -0,0 +1,23 @@ +with open('src/main/resources/static/css/custom.css', 'a') as f: + f.write(''' + +/* CSS cho Tab Đa năng */ +.custom-tab-btn { + padding: 10px 20px; + border: 1px solid #ccc; + background-color: #f8f9fa; + color: black; + cursor: pointer; + transition: all 0.2s ease-in-out; +} + +.custom-tab-btn:hover { + background-color: #e9ecef; +} + +.custom-tab-btn.active { + background-color: #0055a5; + color: white; + border-color: #0055a5; +} +''') diff --git a/sisvietnamvn_main/clean_html.py b/sisvietnamvn_main/clean_html.py new file mode 100644 index 00000000..717ef27b --- /dev/null +++ b/sisvietnamvn_main/clean_html.py @@ -0,0 +1,32 @@ +path = '/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/templates/dao-tao-detail.html' +with open(path, 'r', encoding='utf-8') as f: + content = f.read() + +def clean_style(text): + start = 0 + while True: + idx = text.find(' style="', start) + if idx == -1: + idx = text.find(" style='", start) + if idx == -1: + break + + quote = text[idx + 7] + end_idx = text.find(quote, idx + 8) + if end_idx == -1: + break + + style_content = text[idx+8:end_idx] + if "animation-composition" in style_content: + text = text[:idx] + text[end_idx+1:] + else: + start = end_idx + 1 + + return text + +new_content = clean_style(content) + +with open(path, 'w', encoding='utf-8') as f: + f.write(new_content) + +print("Cleaned HTML!") diff --git a/sisvietnamvn_main/extract_styles.py b/sisvietnamvn_main/extract_styles.py new file mode 100644 index 00000000..b1b09ecf --- /dev/null +++ b/sisvietnamvn_main/extract_styles.py @@ -0,0 +1,74 @@ +import re +import os + +html_path = '/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/templates/dao-tao-detail.html' +css_path = '/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/static/css/custom.css' + +with open(html_path, 'r', encoding='utf-8') as f: + content = f.read() + +css_rules = [] +class_counter = 1 + +def process_html(text): + global class_counter + start = 0 + while True: + idx = text.find(' style="', start) + if idx == -1: + idx = text.find(" style='", start) + if idx == -1: + break + + quote = text[idx + 7] + end_idx = text.find(quote, idx + 8) + if end_idx == -1: + break + + style_content = text[idx+8:end_idx] + if "animation-composition" in style_content: + new_class = f"devtools-style-{class_counter}" + class_counter += 1 + + # Format CSS rule + styles = [s.strip() for s in style_content.split(';') if s.strip()] + css_rule = f".{new_class} {{\n" + for s in styles: + css_rule += f" {s};\n" + css_rule += "}\n" + css_rules.append(css_rule) + + # Remove style attribute + text = text[:idx] + text[end_idx+1:] + + # Now we need to inject new_class into the nearest preceding class="..." + # Search backwards for `class="` before `idx` (but only within the current tag, so stop at `<`) + tag_start = text.rfind('<', 0, idx) + class_idx = text.find('class="', tag_start, idx) + if class_idx != -1: + # insert new_class inside the existing class attribute + insert_pos = class_idx + 7 + text = text[:insert_pos] + new_class + " " + text[insert_pos:] + start = idx # adjust start roughly + else: + # element has no class attribute, insert one where style was + text = text[:idx] + f' class="{new_class}"' + text[idx:] + start = idx + + else: + start = end_idx + 1 + + return text + +new_html = process_html(content) + +if css_rules: + with open(css_path, 'a', encoding='utf-8') as f: + f.write("\n/* --- Extracted Inline Styles --- */\n") + f.write("\n".join(css_rules)) + + with open(html_path, 'w', encoding='utf-8') as f: + f.write(new_html) + print(f"Extracted {len(css_rules)} styles to custom.css") +else: + print("No styles found.") diff --git a/sisvietnamvn_main/extract_test.py b/sisvietnamvn_main/extract_test.py new file mode 100644 index 00000000..ae3e6311 --- /dev/null +++ b/sisvietnamvn_main/extract_test.py @@ -0,0 +1,15 @@ +import pdfplumber +import re + +file_path = '/home/x79/sisvietnamvn_01/sisvietnamvn_Trang chính thức hiện tại/DaoTao/2.-CHUONG-TRINH-CAN-THIEP-MACH-MAU-THAN-KINH-NANG-CAO-BO-SUNG-FINAL.pdf' + +with pdfplumber.open(file_path) as pdf: + text = '' + for page in pdf.pages: + text += page.extract_text() + '\n' + +lines = text.split('\n') +for line in lines: + line_lower = line.lower() + if any(k in line_lower for k in ['thời gian', 'đối tượng', 'thông tin lớp học', 'số lượng', 'hồ sơ', 'học phí', 'địa điểm nhận', 'hình thức']): + print(line.strip()) diff --git a/sisvietnamvn_main/fix_script.py b/sisvietnamvn_main/fix_script.py new file mode 100644 index 00000000..48ce40e3 --- /dev/null +++ b/sisvietnamvn_main/fix_script.py @@ -0,0 +1,107 @@ +import os + +templates_to_update = [ + 'src/main/resources/templates/dao-tao-detail.html', + 'src/main/resources/templates/posts/full-width.html', + 'src/main/resources/templates/posts/livestream.html', + 'src/main/resources/templates/posts/sidebar.html', + 'src/main/resources/templates/posts/standard.html' +] + +switch_script = """ + +""" + +for filepath in templates_to_update: + if not os.path.exists(filepath): + continue + + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + + # First, remove the script from wherever it is (at the bottom) + if "document.addEventListener('click', function(e) {" in content: + # Find the script block + start_idx = content.find("document.addEventListener('click', function(e) {") + script_start = content.rfind("", start_idx) + 9 + + # Remove it + content = content[:script_start].rstrip() + "\n" + content[script_end:].lstrip() + + # Now find where layout:fragment="content" ends + # We can just look for the last closing inside the document before + # Wait, the easiest way is to inject it right after the Editor parsing script which is INSIDE the fragment! + # The editor parsing script ends with `});\n \n ` in standard.html. + # Actually, in standard.html, the script is inside `
...
` which is inside `
`. + # Let's just find the last `` that is inside the content. + # A better way: Replace the end of the script block that parses Editor content. + # We know that script ends with `});` and ``. + + # In standard.html, `parseEditorContent` is not there. It uses `h.parentNode.replaceChild(p, h);` + # Let's just put our switch_script right before `` if it's NOT a layout decorated file? No, all 5 are decorated! + # Wait, they are all Thymeleaf files with `layout:decorate`. So they must be put inside the `layout:fragment="content"`. + # Let's just put the switch_script right after `var html = finalHtml; }` or just at the end of the `switch_script` in the parser script! + # Yes! Why add a NEW ` +
+ + + + \ No newline at end of file diff --git a/sisvietnamvn_main/src/main/resources/templates/dao-tao.html b/sisvietnamvn_main/src/main/resources/templates/dao-tao.html index 424a47f0..d3424bf0 100644 --- a/sisvietnamvn_main/src/main/resources/templates/dao-tao.html +++ b/sisvietnamvn_main/src/main/resources/templates/dao-tao.html @@ -109,6 +109,45 @@
+
+
+
+

Khóa học Đào tạo

+
+
+
+ + +
+
+
+ +
@@ -644,6 +683,11 @@ prev: '.btn-navigation-gallery-prev', next: '.btn-navigation-gallery-next', pagination: '.swiper-pagination-training-gallery' + }, { + slug: 'khoa-hoc', + prev: '.btn-navigation-khoa-hoc-prev', + next: '.btn-navigation-khoa-hoc-next', + pagination: '' }, { slug: 'chung-chi', prev: '.btn-navigation-cap-chung-chi-prev', diff --git a/sisvietnamvn_main/src/main/resources/templates/manage/pages/form.html b/sisvietnamvn_main/src/main/resources/templates/manage/pages/form.html index cee81efe..258dbb44 100644 --- a/sisvietnamvn_main/src/main/resources/templates/manage/pages/form.html +++ b/sisvietnamvn_main/src/main/resources/templates/manage/pages/form.html @@ -268,9 +268,16 @@ - + + + + + + @@ -392,6 +399,24 @@ + +
+
+
+
+ +
+

Bệnh viện Đa khoa Quốc tế S.I.S Cần Thơ thông báo chiêu sinh các khóa:

+ +

Lợi ích khi tham gia khóa học:

+
  • Đào tạo chuyên sâu với các chuyên gia đầu ngành.
  • Thực hành trên hệ thống DSA ARTIS Icono 2 bình diện hiện đại bậc nhất.
  • Chứng nhận giá trị toàn quốc, được Bộ Y tế và Bảo hiểm Y tế công nhận.
  • Cơ hội giao lưu và học hỏi cùng các bác sĩ, điều dưỡng từ các bệnh viện lớn trong nước và quốc tế.
+
+

THÔNG TIN KHÓA HỌC

+
  • Thời gian học: từ 3 đến 6 tháng (xem chi tiết ở từng khóa học).
  • Thời gian khai giảng dự kiến: tháng 8/2025.
  • Ban giảng huấn: Tiến sĩ, bác sĩ chuyên khoa nhiều năm kinh nghiệm trong lĩnh vực can thiệp mạch máu thần kinh, tạng ngoại biên và tim mạch.
  • Hình thức học: Trực tiếp tại Bệnh viện Đa khoa Quốc tế S.I.S Cần Thơ
  • Địa chỉ: 397 Nguyễn Văn Cừ, P. An Bình, Q. Ninh Kiều, TP. Cần Thơ
+

CÁCH THỨC ĐĂNG KÝ

+

 Gửi hồ sơ đăng ký qua email: huyh@dotquy.vn
 Liên hệ ThS. DS. Huỳnh Huy (Ban đào tạo/Phòng Quản lý chất lượng), SĐT: 0944.680.681

+

+
+

Tin tức gần đây

+ +
+ +
+
+
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +Lên đầu trang + + \ No newline at end of file diff --git a/sisvietnamvn_main/test_cat.py b/sisvietnamvn_main/test_cat.py new file mode 100644 index 00000000..5019aecb --- /dev/null +++ b/sisvietnamvn_main/test_cat.py @@ -0,0 +1,4 @@ +import sqlite3 +import sys + +# find the db file, usually it's application-dev.yml config, or sisvietnamvn.mv.db? It's H2 or Postgres? diff --git a/sisvietnamvn_main/test_frontend.html b/sisvietnamvn_main/test_frontend.html new file mode 100644 index 00000000..81a68cda --- /dev/null +++ b/sisvietnamvn_main/test_frontend.html @@ -0,0 +1,2118 @@ + + + + + + Tim mạch can thiệp cơ bản | UMass Amherst + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+

Bệnh viện Đa Khoa Quốc Tế S.I.S Cần Thơ

+
+
+
+
+ + Sisvietnamvn + +
+
+ Bệnh viện đa khoa quốc tế
S.I.S Cần thơ +
+
+
+
+
+
+
+ + Sisvietnamvn + +
+
+
+
+ + +
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+
+
+ + + Tim mạch can thiệp cơ bản + + + +
+
+ +
+

Tim mạch can thiệp cơ bản

+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+ +
+
+ + + + +
+ + +
+
+
+
+
+ +
+ + + + + + + + + + + + + + diff --git a/sisvietnamvn_main/umc_main.html b/sisvietnamvn_main/umc_main.html new file mode 100644 index 00000000..5fa282b3 --- /dev/null +++ b/sisvietnamvn_main/umc_main.html @@ -0,0 +1,818 @@ +
+
+
+ banner (1) + banner (1) +
+
+
+
+
+
+
+

+ Đào tạo +

+
+
+
+
+
+
+
+
+
+ Với chức năng là cơ sở giảng dạy thực hành, đào tạo là một trong những hoạt động nòng cốt của Bệnh viện Đại học Y Dược TP. Hồ Chí Minh, nhằm tối ưu công tác đào tạo, Bệnh viện đa dạng hóa các loại hình đào tạo để đáp ứng các yêu cầu về đào tạo của nội bộ, của các cơ sở y tế khác và của học viên nước ngoài.Với nguồn nhân lực dồi dào và trình độ chuyên môn cao, các chuyên khoa lâm sàng và cận lâm sàng lớn mạnh, số lượng người bệnh đến khám và chữa bệnh tăng cao, Bệnh viện Đại học Y Dược TP. Hồ Chí Minh còn là nơi thực hành không những của nhân viên y tế Việt Nam, mà còn là sự lựa chọn của rất nhiều sinh viên các nước như: Nhật Bản, Úc, Hoa Kỳ, Thái Lan, CHLB Đức, Pháp, Bỉ, Áo, Đan Mạch, Ấn Độ, … +
+
+ Ngoài ra, hình thức đào tạo theo hợp đồng/đào tạo theo nhiệm vụ chỉ đạo tuyến/đào tạo chuyển giao kỹ thuật và các khóa đào tạo chuyên môn nghiệp vụ khác của ngành y tế mà không thuộc hệ thống bằng cấp quốc gia cũng là một nhiệm vụ của Bệnh viện Đại học Y Dược TP. Hồ Chí Minh. +
+
+ Sự phát triển liên tục của Bệnh viện Đại học Y Dược TP. Hồ Chí Minh nói chung và công tác đào tạo nói riêng, đã góp phần đáp ứng đáng kể nhu cầu bồi dưỡng kiến thức, giúp các Bệnh viện ứng dụng nhiều phương pháp, kỹ thuật mới trong khám, chữa bệnh, tăng cường chất lượng điều trị và chăm sóc người bệnh. +
+
+ + ĐỊNH HƯỚNG VỀ HOẠT ĐỘNG ĐÀO TẠO TRONG NHỮNG NĂM TỚI + +
+
+ + Về đào tạo chuyên môn, nghiệp vụ cho viên chức của Bệnh viện: + +
+
+ Bệnh viện luôn có chương trình hỗ trợ cho nhân viên trong việc học tập chuyên môn nghiệp vụ và các khóa đào tạo chính quy. Ban Giám đốc định hướng mỗi Đơn vị sẽ tự xây dựng kế hoạch và lập dự toán kinh phí đào tạo cho nhân viên. Lãnh đạo Đơn vị sẽ tự quyết định quy mô và chi phí đào tạo cho nhân viên dựa trên định hướng phát triển chuyên môn. Phần kinh phí này sẽ được trích từ quỹ đào tạo và nghiên cứu khoa học của Bệnh viện. Chủ trương này giúp các Đơn vị chủ động hơn trong việc đào tạo nhân lực, phát triển chuyên môn của Đơn vị mình. +
+
+ Ngoài những chương trình đào tạo trong nước, Bệnh viện tiếp tục tăng cường gửi viên chức đi đào tạo ở nước ngoài. Bên cạnh việc học hỏi nâng cao trình độ chuyên môn, đây cũng là cơ hội để mở rộng kết nối, hợp tác quốc tế tiến đến hội nhập. +
+
+ + Về đào tạo chuyên môn, nghiệp vụ cho nhân sự thuộc các cơ sở y tế khác: + +
+
+ Phòng KHĐT cùng Đơn vị lập kế hoạch, dự trù kinh phí cho các lớp đào tạo với các hình thức như đào tạo y khoa liên tục (CME), hội nghị, hội thảo, lớp học, … Những chương trình này có thể tổ chức tại Bệnh viện hoặc tổ chức tại các địa điểm bên ngoài tùy theo nhu cầu thực tế để đưa hoạt động đào tạo thực sự trở thành một mũi nhọn, một đặc trưng của bệnh viện. +
+
+
+
+
+ +
+
+
+
+ image-6 +
+
+
+
+ image-5 +
+
+
+
+ image-4 +
+
+
+
+ image-3 +
+
+
+
+ image-2 +
+
+
+
+ image-1 +
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+

+ Cấp chứng chỉ +

+
+
+
+ + +
+
+
+
+
+
+
+
+ + CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN,  KHÓA 02 +
+
+
+
+
+ + CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: NỘI SOI DẠ DÀY, NỘI SOI ĐẠI TRÀNG VÀ NỘI SOI ĐIỀU TRỊ CƠ BẢN, KHÓA 02 + +
+ Nội soi dạ dày là phương pháp chẩn đoán xâm lấn tối thiểu giúp ngăn ngừa thương tổn tiến triển thành ung thư dạ dày tiến triển. Ngoài khả năng giúp chẩn đoán các bệnh lý tiêu hóa và các ung thư sớm ống tiêu hóa, nội soi dạ dày còn giúp điều trị triệt căn các thương tổn này. Nội soi đại tràng hiện tại đang là tiêu chuẩn vàng trong tầm soát và điều trị xâm lấn tối thiểu các thương tổn tân sinh và các ung thư sớm của đại trực tràng. Nội soi đại tràng cũng là một kỹ thuật nội soi khó do đó đòi hỏi người bác sỹ phải được đào tạo tốt. Mục đích của khóa học nhằm cung cấp kiến thức về chẩn đoán và điều trị các bệnh tiêu hóa thường gặp, kỹ thuật nội soi dạ dày, nội soi đại tràng, các quan điểm mới trong nội soi chẩn đoán và điều trị các bệnh lý tiêu hóa, kỹ thuật nội soi điều trị ung thư sớm đường tiêu hoá như EMR, ESD, kỹ thuật cơ bản trong nội soi cầm máu các trường hợp chảy máu tiêu hóa. Trong khóa học, các giảng viên còn tập trung vào trình bày các quan điểm mới trong nội soi chẩn đoán và điều trị, các tai biến và biến chứng có thể xảy ra. +
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+ icon +
+
+
+
+ +
+ + 38.000.000 + + + VNĐ + +
+
+
+
+
+
+ + CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: HỒI SỨC NGOẠI THẦN KINH CƠ BẢN, KHÓA 05 +
+
+
+
+
+ + CHƯƠNG TRÌNH CHỨNG CHỈ ĐÀO TẠO KỸ THUẬT CHUYÊN MÔN: HỒI SỨC NGOẠI THẦN KINH CƠ BẢN, KHÓA 05 + +
+ Hồi sức Ngoại thần kinh là một lĩnh vực chuyên sâu, áp dụng các biện pháp chẩn đoán, điều trị nhằm duy trì, ổn định và cải thiện các chức năng sống của người bị các bệnh lý liên quan đến yếu tố thần kinh ở vùng não bộ, cột sống và dây thần kinh ngoại biên. Hồi sức giúp điều chỉnh các rối loạn về các chức năng sống của bệnh nhờ vào các phương tiện theo dõi, hỗ trợ và bằng việc sử dụng các thuốc hồi sức. Hồi sức Ngoại thần kinh đóng vai trò quan trọng toàn bộ các biện pháp chăm sóc tích cực nhằm giải quyết sự mất cân bằng của môi trường bên trong cơ thể và phục hồi các chức năng sinh tồn ở người bị bệnh lý Ngoại thần kinh. +
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+ icon +
+
+
+
+ +
+ + 60.000.000 + + + VNĐ + +
+
+
+
+
+
+
+
+
+
+
+

+ Cấp giấy chứng nhận +

+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+ +
+
+
+ + Lớp: ĐIỀU DƯỠNG, KỸ THUẬT Y TRONG THỰC HÀNH LÂM SÀNG BỆNH LÝ SA SÚT TRÍ TUỆ, KHÓA 01 +
+
+
+
+
+ + Lớp: ĐIỀU DƯỠNG, KỸ THUẬT Y TRONG THỰC HÀNH LÂM SÀNG BỆNH LÝ SA SÚT TRÍ TUỆ, KHÓA 01 + +
+ Sa sút trí tuệ là một lĩnh vực chuyên sâu và đặc thù, thuộc chuyên ngành Thần kinh, sử dụng nhiều phương pháp đánh giá và điều trị như các test đánh giá nhận thức, chăm sóc và theo dõi người bệnh, tập luyện và kích thích nhận thức, kích thích từ trường xuyên sọ, hoạt động trị liệu, tư vấn và hỗ trợ người chăm sóc. Để triển khai hiệu quả mô hình tiếp cận chẩn đoán, quản lý và điều trị toàn diện người bệnh sa sút trí tuệ cần có sự phối hợp của nhiều nhóm nhân sự khác nhau như bác sĩ, điều dưỡng, kỹ thuật viên tâm lý, vật lý trị liệu, hoạt động trị liệu và các nhân sự hỗ trợ khác. +
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+ icon +
+
+
+
+ +
+ + 15.000.000 + + + VNĐ + +
+
+
+
+
+
+
+
+
+
+
+

+ Đào tạo cấp giấy xác nhận quá trình thực hành +

+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+ +
+
+
+ + Chương trình thực hành 06 tháng để cấp giấy phép hành nghề khám bệnh, chữa bệnh đối với chức danh Kỹ thuật y năm 2026 +
+
+
+
+
+ + Chương trình thực hành 06 tháng để cấp giấy phép hành nghề khám bệnh, chữa bệnh đối với chức danh Kỹ thuật y năm 2026 + +
+ Bệnh viện Đại học Y Dược Thành phố Hồ Chí Minh thông báo chiêu sinh Chương trình thực hành 06 tháng để cấp giấy phép hành nghề khám bệnh, chữa bệnh đối với chức danh Kỹ thuật y +
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+ icon +
+
+
+
+ +
+ + 16.400.000 + + + VNĐ + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ Đào tạo thực hành sinh viên, học viên Đại học Y Dược TP. Hồ Chí Minh +
+
+

+ Với chức năng là cơ sở giảng dạy thực hành, đào tạo là một trong những hoạt động nòng cốt của Bệnh viện Đại học Y Dược TP. Hồ Chí Minh, nhằm tối ưu công tác đào tạo, Bệnh viện đa dạng hóa các loại hình đào tạo để đáp ứng các yêu cầu về đào tạo của nội bộ, của các cơ sở y tế khác và của học viên nước ngoài. +

+
+ + Xem chi tiết + +
+
+
+ training +
+
+
+
+
+
+
+
+ Đào tạo - Chuyển giao kỹ thuật +
+
+

+ Bệnh viện Đại học Y Dược TP. Hồ Chí Minh được Bộ Y tế giao nhiệm vụ đào tạo và chuyển giao kỹ thuật cho bệnh viện tuyến dưới theo quyết định số 2636/QĐ-BYT ngày 20/6/2017 về việc phê duyệt + + Dự án Bệnh viện vệ tinh giai đoạn 2016-2020 + +

+

+ Từ năm 2014 đến năm 2022, Bệnh viện đã đào tạo và chuyển giao một số lĩnh vực chuyên môn phục vụ công tác khám, chữa bệnh cho 06 bệnh viện trên địa bàn TP. Hồ Chí Minh và 22 bệnh viện tuyến tỉnh, 37 kỹ thuật chuyên môn đã được chuyển giao. +

+

+ Các kỹ thuật chuyển giao thuộc các chuyên khoa: Mắt, Chẩn đoán Hình ảnh, Chấn thương Chỉnh hình, Lồng ngực Mạch máu, Phẫu thuật Tim mạch, Ngoại Thần kinh, Ngoại Tiêu hóa, Ngoại Gan Mật Tụy, Hậu môn Trực tràng, Tạo hình Thẩm mỹ, Tai Mũi Họng… +

+
+ + Xem chi tiết + +
+
+
+
+
+ training +
+
+
+
+ Đào tạo thực hành + lâm sàng +
+
+

+ Với môi trường y khoa năng động và chuyên nghiệp, được hướng dẫn thực hành trực tiếp từ Giáo sư, Bác sĩ có kinh nghiệm chuyên môn cao, người học thực hành có cơ hội được tiếp cận nhanh chóng và học hỏi các quy trình chuyên môn, giúp người học cập nhật các phương pháp và kỹ thuật mới đã và đang áp dụng trong khám, điều trị tại Bệnh viện Đại học Y Dược TP. Hồ Chí Minh. +

+
+ + Xem chi tiết + +
+
+
+ +
+
+
+
+ training 3 +
+
+
+
+ training 4 +
+
+
+
+ +
+ + + + +
+
+
+
+
+
+ + + + + + + +
diff --git a/sisvietnamvn_main/update_container.py b/sisvietnamvn_main/update_container.py new file mode 100644 index 00000000..3b6489fb --- /dev/null +++ b/sisvietnamvn_main/update_container.py @@ -0,0 +1,26 @@ +import os + +templates_to_update = [ + 'src/main/resources/templates/dao-tao-detail.html', + 'src/main/resources/templates/posts/full-width.html', + 'src/main/resources/templates/posts/livestream.html', + 'src/main/resources/templates/posts/sidebar.html', + 'src/main/resources/templates/posts/standard.html' +] + +old_container = """groupHtml += '
';""" +new_container = """groupHtml += '
';""" + +for filepath in templates_to_update: + if not os.path.exists(filepath): + continue + + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + + content = content.replace(old_container, new_container) + + with open(filepath, 'w', encoding='utf-8') as f: + f.write(content) + print(f"Updated container in {filepath}") + diff --git a/sisvietnamvn_main/update_css_tabs.py b/sisvietnamvn_main/update_css_tabs.py new file mode 100644 index 00000000..ad88c9a2 --- /dev/null +++ b/sisvietnamvn_main/update_css_tabs.py @@ -0,0 +1,90 @@ +import os + +with open('src/main/resources/static/css/custom.css', 'r') as f: + css = f.read() + +old_css_block = """/* CSS cho Tab Đa năng */ +.custom-tab-btn { + padding: 10px 20px; + border: 1px solid #ccc; + background-color: #f8f9fa; + color: black; + cursor: pointer; + transition: all 0.2s ease-in-out; +} + +.custom-tab-btn:hover { + background-color: #e9ecef; +} + +.custom-tab-btn.active { + background-color: var(--color-old-brick); + color: white; + border-color: var(--color-old-brick); +}""" + +# Actually, the user manually changed it to `var(--color-old-brick);` as we see in the diff! +# So I should find the block starting with `/* CSS cho Tab Đa năng */` and ending at the end of file. + +# Let's just find the index of `/* CSS cho Tab Đa năng */` and cut everything from there to the end. +idx = css.find('/* CSS cho Tab Đa năng */') +if idx != -1: + css = css[:idx] + +new_css = """ +/* CSS cho Tab Đa năng - Giao diện Mới (Segmented Control) */ +.custom-tabs-nav-container { + display: flex; + justify-content: center; + margin-bottom: 2rem; + width: 100%; +} + +.tabs-container { + background-color: #0d71ba; /* primary-600 */ + border-radius: 8px; /* rounded-lg */ + padding: 4px; /* p-1 */ + display: flex; + gap: 4px; /* gap-x-1 */ + width: 100%; + max-width: fit-content; +} + +@media (max-width: 768px) { + .tabs-container { + flex-direction: column; + width: 100%; + max-width: 100%; + } +} + +.custom-tab-btn { + padding: 8px 16px; /* px-4 py-2 */ + border: none; + background-color: transparent; + color: white; + cursor: pointer; + border-radius: 6px; /* rounded-md */ + transition: all 0.2s ease-in-out; + font-weight: 600; + font-size: 16px; + flex: 1; + text-align: center; + min-width: 120px; +} + +.custom-tab-btn:hover { + color: rgba(255, 255, 255, 0.8); + background-color: transparent; +} + +.custom-tab-btn.active { + background-color: white !important; + color: #0d71ba !important; /* text-primary-600 */ + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} +""" + +with open('src/main/resources/static/css/custom.css', 'w') as f: + f.write(css + new_css) +print("Updated custom.css") diff --git a/sisvietnamvn_main/update_css_width.py b/sisvietnamvn_main/update_css_width.py new file mode 100644 index 00000000..5070fd64 --- /dev/null +++ b/sisvietnamvn_main/update_css_width.py @@ -0,0 +1,16 @@ +import os + +with open('src/main/resources/static/css/custom.css', 'r') as f: + css = f.read() + +# Replace max-width: fit-content with max-width: 100% or remove it +css = css.replace("max-width: fit-content;", "max-width: 860px;") +# 860px is the width in their snippet, but 100% is better. +# In their snippet they have a parent
+# But the parent's width might not be constrained. +# Let's change max-width: fit-content to width: 100% and max-width: 860px; +css = css.replace("max-width: fit-content;", "max-width: 860px;") + +with open('src/main/resources/static/css/custom.css', 'w') as f: + f.write(css) +print("Updated custom.css for full width") diff --git a/sisvietnamvn_main/update_dao_tao.js b/sisvietnamvn_main/update_dao_tao.js new file mode 100644 index 00000000..4156bdf4 --- /dev/null +++ b/sisvietnamvn_main/update_dao_tao.js @@ -0,0 +1,140 @@ +const fs = require('fs'); + +let fileContent = fs.readFileSync('src/main/resources/templates/dao-tao-detail.html', 'utf8'); + +// 1. Remove the hardcoded tabs from the HTML layout +fileContent = fileContent.replace( +`
+ +
+
+ + +
+
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
`, +`
+ +
+ ` +); + +// 2. Add the trainingCourseInfo block renderer to blocksToHtml function +const newBlockHandler = ` + case "trainingCourseInfo": + var d = block.data; + var introHtml = d.introText ? d.introText.split('\\n').filter(p=>p.trim()!=='').map(p => '

'+p+'

').join('') : ''; + + var hoSoHtml = d.documents ? d.documents.split('\\n').filter(p=>p.trim()!=='').map(p => '
  • '+p+'
  • ').join('') : ''; + if(hoSoHtml) hoSoHtml = '
      ' + hoSoHtml + '
    '; + + var luuYHtml = d.notes ? d.notes.split('\\n').filter(p=>p.trim()!=='').map(p => '
  • '+p+'
  • ').join('') : ''; + if(luuYHtml) luuYHtml = '
      ' + luuYHtml + '
    '; + + var locationHtml = d.location ? d.location.split('\\n').filter(p=>p.trim()!=='').map(p => '

    '+p+'

    ').join('') : ''; + + // Generating the complete Tabs HTML + html += '
    '; + html += '
    '; + html += '
    '; + html += ' '; + html += ' '; + html += '
    '; + html += '
    '; + + // Tab 1 + html += '
    '; + if(introHtml) html += introHtml; + + if(d.bannerText) { + html += '
    ' + d.bannerText + '
    '; + } + + html += '
    '; + html += ''; + + if(d.time) html += ''; + if(d.audience) html += ''; + + var thongTinLopHoc = ''; + if(d.fileChieuSinh) thongTinLopHoc += 'Thông báo chiêu sinh file đính kèm'; + if(d.filePhieuDangKy) thongTinLopHoc += (thongTinLopHoc?' và ':'') + 'phiếu đăng ký file đính kèm'; + if(thongTinLopHoc) html += ''; + + if(d.quantity) html += ''; + if(hoSoHtml) html += ''; + if(luuYHtml) html += ''; + + html += '
    Thời gian:' + d.time.replace(/\\n/g, '
    ') + '
    Đối tượng đăng ký:' + d.audience.replace(/\\n/g, '
    ') + '
    Thông tin lớp học

    ' + thongTinLopHoc + '

    Số lượng:' + d.quantity + '
    Hồ sơ đăng ký tham dự:' + hoSoHtml + '
    Lưu ý:' + luuYHtml + '
    '; + html += '
    '; + + // Tab 2 + html += '
    '; + html += '
    '; + html += ''; + + if(d.tuitionFee) html += ''; + if(locationHtml) html += ''; + + var bankHtml = ''; + if(d.bankAccountName) bankHtml += '
  • Tên tài khoản: ' + d.bankAccountName + '
  • '; + if(d.bankAccountNumber) bankHtml += '
  • Số tài khoản: ' + d.bankAccountNumber + '
  • '; + if(d.bankName) bankHtml += '
  • Tên ngân hàng: ' + d.bankName + '
  • '; + if(d.transferContent) bankHtml += '
  • Nội dung: ' + d.transferContent + '
  • '; + + if(bankHtml) { + html += ''; + html += ''; + } + + html += '
    Học phí:' + d.tuitionFee + '
    Địa điểm nhận hồ sơ và học phí:' + locationHtml + '
    Hình thức nộp học phí: 
    Chuyển khoản:
      ' + bankHtml + '
    '; + html += '
    '; + + html += '
    '; + + break; + case "raw":`; + +fileContent = fileContent.replace('case "raw":', newBlockHandler); + +// 3. Remove the complicated tabSplit logic and leave just normal parsing +const tabSplitLogicRegex = /var isJsonSplit = false;[\s\S]*?if \(!isJsonSplit\) \{[\s\S]*?if \(contentText.indexOf\(''\) !== -1\) \{[\s\S]*?\} else \{[\s\S]*?parseEditorContent\(contentText, 'postContentParsed'\);[\s\S]*?parseEditorContent\(excerptText, 'postGeneralInfoParsed'\);[\s\S]*?\}[\s\S]*?\}/; + +fileContent = fileContent.replace(tabSplitLogicRegex, "parseEditorContent(contentText, 'postContentParsed');"); + +// 4. Add the switchTrainingTab function script +const scriptToAppend = ` + +`; + +if (!fileContent.includes('function switchTrainingTab')) { + fileContent = fileContent.replace('', scriptToAppend + '\n '); +} + +fs.writeFileSync('src/main/resources/templates/dao-tao-detail.html', fileContent); diff --git a/sisvietnamvn_main/update_dao_tao.py b/sisvietnamvn_main/update_dao_tao.py new file mode 100644 index 00000000..c9d6294f --- /dev/null +++ b/sisvietnamvn_main/update_dao_tao.py @@ -0,0 +1,139 @@ +import re + +with open('src/main/resources/templates/dao-tao-detail.html', 'r', encoding='utf-8') as f: + content = f.read() + +# 1. Remove hardcoded tabs +old_html = """
    + +
    +
    + + +
    +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    +
    """ + +new_html = """
    + +
    + """ + +content = content.replace(old_html, new_html) + +# 2. Add handler +handler = """ case "trainingCourseInfo": + var d = block.data; + var introHtml = d.introText ? d.introText.split('\\n').filter(function(p){return p.trim()!==''}).map(function(p){return '

    '+p+'

    '}).join('') : ''; + + var hoSoHtml = d.documents ? d.documents.split('\\n').filter(function(p){return p.trim()!==''}).map(function(p){return '
  • '+p+'
  • '}).join('') : ''; + if(hoSoHtml) hoSoHtml = '
      ' + hoSoHtml + '
    '; + + var luuYHtml = d.notes ? d.notes.split('\\n').filter(function(p){return p.trim()!==''}).map(function(p){return '
  • '+p+'
  • '}).join('') : ''; + if(luuYHtml) luuYHtml = '
      ' + luuYHtml + '
    '; + + var locationHtml = d.location ? d.location.split('\\n').filter(function(p){return p.trim()!==''}).map(function(p){return '

    '+p+'

    '}).join('') : ''; + + html += '
    '; + html += '
    '; + html += '
    '; + html += ' '; + html += ' '; + html += '
    '; + html += '
    '; + + html += '
    '; + if(introHtml) html += introHtml; + + if(d.bannerText) { + html += '
    ' + d.bannerText + '
    '; + } + + html += '
    '; + html += ''; + + if(d.time) html += ''; + if(d.audience) html += ''; + + var thongTinLopHoc = ''; + if(d.fileChieuSinh) thongTinLopHoc += 'Thông báo chiêu sinh file đính kèm'; + if(d.filePhieuDangKy) thongTinLopHoc += (thongTinLopHoc?' và ':'') + 'phiếu đăng ký file đính kèm'; + if(thongTinLopHoc) html += ''; + + if(d.quantity) html += ''; + if(hoSoHtml) html += ''; + if(luuYHtml) html += ''; + + html += '
    Thời gian:' + d.time.replace(/\\n/g, '
    ') + '
    Đối tượng đăng ký:' + d.audience.replace(/\\n/g, '
    ') + '
    Thông tin lớp học

    ' + thongTinLopHoc + '

    Số lượng:' + d.quantity + '
    Hồ sơ đăng ký tham dự:' + hoSoHtml + '
    Lưu ý:' + luuYHtml + '
    '; + html += '
    '; + + html += '
    '; + html += '
    '; + html += ''; + + if(d.tuitionFee) html += ''; + if(locationHtml) html += ''; + + var bankHtml = ''; + if(d.bankAccountName) bankHtml += '
  • Tên tài khoản: ' + d.bankAccountName + '
  • '; + if(d.bankAccountNumber) bankHtml += '
  • Số tài khoản: ' + d.bankAccountNumber + '
  • '; + if(d.bankName) bankHtml += '
  • Tên ngân hàng: ' + d.bankName + '
  • '; + if(d.transferContent) bankHtml += '
  • Nội dung: ' + d.transferContent + '
  • '; + + if(bankHtml) { + html += ''; + html += ''; + } + + html += '
    Học phí:' + d.tuitionFee + '
    Địa điểm nhận hồ sơ và học phí:' + locationHtml + '
    Hình thức nộp học phí: 
    Chuyển khoản:
      ' + bankHtml + '
    '; + html += '
    '; + html += '
    '; + + break; + case "raw":""" + +content = content.replace('case "raw":', handler) + +# 3. Replace complex parseEditorContent tab split logic +regex_pattern = r"var isJsonSplit = false;.*?if \(!isJsonSplit\) \{.*?if \(contentText\.indexOf\(''\) !== -1\) \{.*?\} else \{.*?parseEditorContent\(contentText, 'postContentParsed'\);.*?parseEditorContent\(excerptText, 'postGeneralInfoParsed'\);.*?\}.*?\}" +content = re.sub(regex_pattern, "parseEditorContent(contentText, 'postContentParsed');", content, flags=re.DOTALL) + +# 4. Add switchTrainingTab script +script = """ + +""" + +if 'function switchTrainingTab' not in content: + content = content.replace('', script + '\n ') + +with open('src/main/resources/templates/dao-tao-detail.html', 'w', encoding='utf-8') as f: + f.write(content) + diff --git a/sisvietnamvn_main/update_parsers.py b/sisvietnamvn_main/update_parsers.py new file mode 100644 index 00000000..84b51764 --- /dev/null +++ b/sisvietnamvn_main/update_parsers.py @@ -0,0 +1,189 @@ +import os +import re + +templates_to_update = [ + 'src/main/resources/templates/dao-tao-detail.html', + 'src/main/resources/templates/posts/full-width.html', + 'src/main/resources/templates/posts/livestream.html', + 'src/main/resources/templates/posts/sidebar.html', + 'src/main/resources/templates/posts/standard.html' +] + +# In dao-tao-detail, the loop is `blocks.forEach(function(block) {` +# In others, the loop is `data.blocks.forEach(function(block) {` +# The switch starts with `switch(block.type) {` and ends with `}` before the end of the loop. + +for filepath in templates_to_update: + if not os.path.exists(filepath): + print(f"Skipping {filepath}, does not exist") + continue + + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + + # Find the block loop start + loop_start_match = re.search(r'(data\.blocks|blocks)\.forEach\(function\(block\)\s*\{', content) + if not loop_start_match: + print(f"Loop not found in {filepath}") + continue + + # We want to replace the whole forEach logic with our new state machine logic. + # But we need the existing switch cases! + switch_match = re.search(r'switch\s*\(\s*block\.type\s*\)\s*\{([\s\S]*?)default:', content) + if not switch_match: + print(f"Switch not found in {filepath}") + continue + + cases_content = switch_match.group(1) + + new_parser_code = """ + var inTabs = false; + var tabsGroup = null; + + function renderSingleBlock(block) { + var html = ""; + switch(block.type) { +""" + cases_content + """ + case "tabStart": + case "tabEnd": + break; + default: + console.log("Unknown block type", block.type); + } + return html; + } + + var blockList = data && data.blocks ? data.blocks : (typeof blocks !== 'undefined' ? blocks : []); + var finalHtml = ""; + + blockList.forEach(function(block) { + if (block.type === 'tabStart') { + if (!inTabs) { + inTabs = true; + tabsGroup = { tabs: [] }; + } + tabsGroup.tabs.push({ + title: block.data.title || 'Tab', + contentHtml: '' + }); + return; + } + + if (block.type === 'tabEnd') { + if (inTabs && tabsGroup) { + inTabs = false; + var groupHtml = '
    '; + groupHtml += '
    '; + tabsGroup.tabs.forEach(function(tab, index) { + var activeClass = (index === 0) ? 'active' : ''; + groupHtml += ''; + }); + groupHtml += '
    '; + + tabsGroup.tabs.forEach(function(tab, index) { + var displayStyle = (index === 0) ? 'block' : 'none'; + groupHtml += '
    '; + groupHtml += tab.contentHtml; + groupHtml += '
    '; + }); + groupHtml += '
    '; + finalHtml += groupHtml; + tabsGroup = null; + } + return; + } + + var blockHtml = renderSingleBlock(block); + + if (inTabs && tabsGroup && tabsGroup.tabs.length > 0) { + tabsGroup.tabs[tabsGroup.tabs.length - 1].contentHtml += blockHtml; + } else { + finalHtml += blockHtml; + } + }); + + if (inTabs && tabsGroup) { + // Close unclosed tabs at the end + var groupHtml = '
    '; + groupHtml += '
    '; + tabsGroup.tabs.forEach(function(tab, index) { + var activeClass = (index === 0) ? 'active' : ''; + groupHtml += ''; + }); + groupHtml += '
    '; + + tabsGroup.tabs.forEach(function(tab, index) { + var displayStyle = (index === 0) ? 'block' : 'none'; + groupHtml += '
    '; + groupHtml += tab.contentHtml; + groupHtml += '
    '; + }); + groupHtml += '
    '; + finalHtml += groupHtml; + } + + html = finalHtml; // Assign back to whatever variable the original script used. +""" + + # We need to replace the entire forEach loop. + # We will use regex to find the block from data.blocks.forEach up to the end of the loop. + # It's tricky to balance braces with regex. Let's do string replacement. + + if filepath.endswith('dao-tao-detail.html'): + start_marker = "blocks.forEach(function(block) {" + end_marker = "html += \"\";\n break;" + + start_idx = content.find(start_marker) + # Find the closing brace of the switch statement after end_marker + end_marker_idx = content.find(end_marker, start_idx) + len(end_marker) + + # We need to replace up to the end of the forEach loop. + end_loop_idx = content.find("});", end_marker_idx) + 3 + + content = content[:start_idx] + new_parser_code + content[end_loop_idx:] + else: + start_marker = "data.blocks.forEach(function(block) {" + end_marker = "case \"raw\":\n html += block.data.html;\n break;" + + start_idx = content.find(start_marker) + end_marker_idx = content.find(end_marker, start_idx) + len(end_marker) + end_loop_idx = content.find("});", end_marker_idx) + 3 + + content = content[:start_idx] + new_parser_code + content[end_loop_idx:] + + # Inject tab switching script at the end of the file if not present + switch_script = """ + +""" + if "custom-tab-btn" not in content: + content = content.replace("", switch_script + "") + + with open(filepath, 'w', encoding='utf-8') as f: + f.write(content) + + print(f"Updated {filepath}") + diff --git a/sisvietnamvn_main/update_plugin.py b/sisvietnamvn_main/update_plugin.py new file mode 100644 index 00000000..0d0acbb4 --- /dev/null +++ b/sisvietnamvn_main/update_plugin.py @@ -0,0 +1,7 @@ +import re + +file_path = 'src/main/resources/static/js/manage/editor-plugins/training-course.js' +with open(file_path, 'r') as f: + content = f.read() + +# I will just write a new file instead of regex replacing it because it's safer.