Mô đun:GHS phrases

Bách khoa toàn thư mở Wikipedia
Tài liệu mô đun[xem] [sửa] [lịch sử] [làm mới]

{{Module rating}}

Cách sử dụng[sửa mã nguồn]

{{#invoke:GHS phrases|tên-chức-năng}}

List all H phrases[sửa mã nguồn]

Code Phrase
H200 Chất nổ không ổn định
H201 Chất nổ: nguy cơ nổ mạnh
H202 Chất nổ: nguy cơ phóng mảnh bụn
H203 Chất nổ: nguy cơ cháy nổ hoặc phóng mảnh vụn
H204 Nguy cơ cháy hoặc phóng mảnh vụn
H205 Có thể cháy hoặc nổ mạnh
H206 Fire, blast or projection hazard: increased risk of explosion if desensitizing agent is reduced
H207 Fire or projection hazard; increased risk of explosion if desensitizing agent is reduced
H208 Fire hazard; increased risk of explosion if desensitizing agent is reduced
H209 Explosive
H210 Very explosive
H211 May be sensitive
H220 Khí cực kỳ dễ cháy
H221 Khí dễ cháy
H222 Vật liệu cực kỳ dễ cháy
H223 Vật liệu dễ cháy
H224 Chất lỏng và hơi cực kỳ dễ cháy
H225 Chất lỏng và hơi rất dễ cháy
H226 Chất lỏng và hơi dễ cháy
H227 Chất lỏng dễ đốt
H228 Chất rắn dễ cháy
H230 May react explosively even in the absence of air
H231 May react explosively even in the absence of air at elevated pressure and/or temperature
H240 Làm nóng có thể gây nổ
H241 Làm nóng có thể gây cháy hoặc nổ
H242 Làm nóng có thể gây cháy
H250 Lập tức cháy khi tiếp xúc với không khí
H251 Tự làm nóng: có thể cháy
H252 Tự làm nóng số lượng lớn: có thể cháy
H260 Tạo khí dễ cháy khi tiếp xúc với nước, có thể cháy ngay lập tức
H261 Tạo khí dễ cháy khi tiếp xúc với nước
H270 Có thể gây hoặc tăng cường cháy: chất oxi hóa
H271 Có thể gây cháy hoặc nổ: chất oxi hóa mạnh
H272 Có thể tăng cường cháy: chất oxi hóa
H280 Chứa khí nén: có thể nổ nếu làm nóng
H281 Chứa khí lạnh: có thể gây bỏng lạnh hoặc bị thương
H282 Extremely flammable chemical under pressure: May explode if heated
H283 Flammable chemical under pressure: May explode if heated
H284 Chemical under pressure: May explode if heated
H290 Có thể ăn mòn kim loại
H300 Gây chết người nếu nuốt
H300+H310 Fatal NẾU NUỐT: or in contact with skin
H300+H310+H330 Fatal NẾU NUỐT:, in contact with skin or if inhaled
H300+H330 Fatal NẾU NUỐT: or if inhaled
H301 Gây độc nếu nuốt
H301+H311 Toxic NẾU NUỐT: or in contact with skin
H301+H311+H331 Toxic NẾU NUỐT:, in contact with skin or if inhaled
H301+H331 Toxic NẾU NUỐT: or if inhaled
H302 Gây hại nếu nuốt
H302+H312 Harmful NẾU NUỐT: or in contact with skin
H302+H312+H332 Harmful NẾU NUỐT:, in contact with skin or if inhaled
H302+H332 Harmful NẾU NUỐT: or inhaled
H303 Có thể làm tổn thương nếu nuốt
H303+H313 May be harmful NẾU NUỐT: or in contact with skin
H303+H313+H333 May be harmful NẾU NUỐT:, in contact with skin or if inhaled
H303+H333 May be harmful NẾU NUỐT: or if inhaled
H304 Có thể gây chết người nếu nuốt và vào đường hô hấp
H305 Có thể gây hại nếu nuốt và vào đường hô hấp
H310 Gây chết người nếu tiếp xúc với da
H310+H330 Fatal in contact with skin or if inhaled
H311 Gây độc nếu tiếp xúc với da
H311+H331 Toxic in contact with skin or if inhaled
H312 Gây hại nếu tiếp xúc với da
H312+H332 Harmful in contact with skin or if inhaled
H313 Có thể gây hại nếu tiếp xúc với da
H313+H333 May be harmful in contact with skin or if inhaled
H314 Gây bỏng da và tổn thương mắt nghiêm trọng
H315 Gây ngứa da
H315+H320 Causes skin and eye irritation
H316 Gây ngứa da nhẹ
H317 Có thể gây dị ứng da
H318 Làm tổn thương mắt nghiêm trọng
H319 Làm rát mắt nghiêm trọng
H320 Làm rát mắt
H330 Gây chết người nếu hít vào
H331 Gây độc nếu hít vào
H332 Gây hại nếu hít vào
H333 Có thể gây hại nếu hít vào
H334 Có thể gây dị ứng hoặc triệu chứng khó thở nếu hít vào
H335 Có thể gây rát đường hô hấp
H336 Có thể gây chóng mặt hoặc buồn ngủ
H340 Có thể gây khiếm khuyết di truyền
H341 Nghi ngờ có thể gây khiếm khuyết di truyền
H350 Có thể gây ung thư
H350i Có thể gây ung thư nếu hít vào
H351 Nghi ngờ có thể gây ung thư
H360 Có thể làm tổn thương khả năng sinh sản hoặc trẻ chưa sinh
H360D Có thể làm tổn thương cho trẻ chưa sinh
H360Df Có thể gây hại trẻ chưa sinh. Nghi ngờ tổn thương khả năng sinh sản.
H360F Có thể làm tổn thương khả năng sinh sản
H360FD Có thể làm tổn thương khả năng sinh sản. Có thể làm tổn thương trẻ chưa sinh.
H360Fd Có thể làm tổn thương khả năng sinh sản. Nghi ngờ có thể làm tổn thương trẻ chưa sinh.
H361 Nghi ngờ làm tổn thương khả năng sinh sản hay trẻ chưa sinh
H361d Nghi ngờ làm tổn thương trẻ chưa sinh
H361f Nghi ngờ làm tổn thương khả năng sinh sản
H361fd Nghi ngờ làm tổn thương khả năng sinh sản. Nghi ngờ làm tổn thương trẻ chưa sinh.
H362 Có thể gây hại trẻ bú mẹ
H370 Làm tổn thương nội tạng
H371 Có thể làm tổn thương nội tạng
H372 Làm tổn thương nội tạng nếu tiếp xúc lâu dài hoặc nhiều lần
H373 Có thể làm tổn thương nội tạng nếu tiếp xúc lâu dài hoặc nhiều lần
H400 Rất độc với sinh vật thủy sinh
H401 Độc với sinh vật thủy sinh
H402 Có hại với sinh vật thủy sinh
H410 Rất độc với sinh vật thủy sinh với hậu quả lâu dài
H411 Độc với sinh vật thủy sinh với hậu quả lâu dài
H412 Có hại với sinh vật thủy sinh với hậu quả lâu dài
H413 Có thể gây hậu quả lâu dài cho sinh vật thủy sinh
H420 Gây hại sức khỏa và môi trường do phá hủy tầng ôzôn ở thượng quyển
H441 Rất độc với động vật không xương sống trên cạn

List all P phrases[sửa mã nguồn]

Code Phrase
P102 Tránh xa tầm tay trẻ em.
P103 Đọc nhãn mác trước khi sử dụng.
P201 Coi hướng dẫn đặc biệt trước khi sử dụng.
P202 Không sử dụng cho đến khi đọc và hiểu tất cả chỉ dẫn an toàn.
P210 Tránh xa nhiệt/tia lửa/ngọn lửa/bề mặt nóng – Không hút thuốc.
P211 Không phun lên ngọn lửa hay những nguồn đốt cháy khác.
P212 Tránh làm nóng trong môi trường kín hoặc thiếu tác nhân giảm nhạy.
P220 Giữ/Chứa tránh xa quần áo/.../vật liệu cháy được.
P221 Cẩn thận không để lẫn với chất cháy được.
P222 Không được để tiếp xúc với không khí.
P223 Tránh xa mọi tiếp xúc với nước, do phản ứng dữ dội và có thể gây cháy.
P230 Giữ ướt với ...
P231 Xử lý với khí trơ/...
P231+P232 Xử lý với khí trơ. Tránh xa ẩm.
P232 Bảo quản khỏi độ ẩm.
P233 Giữ kín vật chứa.
P234 Chỉ giữ trong vật chứa gốc.
P235 Giữ mát.
P235+P410 Giữ lạnh. Tránh xa ánh sáng mặt trời.
P240 Nối đất/liên kết vật chứa và thiết bị tiếp nhận.
P241 Dùng thiết bị điện/thông gió/ánh sáng/... chống nổ.
P242 Chỉ dùng dụng cụ không phát tia lửa.
P243 Thực hiện các biện pháp phòng ngừa chống phóng tĩnh điện.
P244 Giữ van giảm áp không có dầu mỡ.
P250 Tránh mài/sốc/.../ma sát.
P251 Vật chứa áp suất cao – Không đục hay đốt, ngay cả sau khi sử dụng.
P260 Không được hít bụi/khói/khí/sương/hơi/phun.
P261 Tránh hít phải bụi/khói/khí/sương/hơi/phun.
P262 Không để tiếp xúc với mắt, da hay quần áo.
P263 Tránh tiếp xúc khi mang thai/chăm sóc trẻ.
P264 Rủa … sạch sau khi sử dụng.
P270 Không được ăn, uống hay hút thuốc khi sử dụng sản phẩm này.
P271 Chỉ dùng ngoài trời hay khu vực thông khí.
P272 Không để quần áo bị nhiễm ra ngoài nơi làm việc.
P273 Tránh thải ra môi trường.
P280 Mặc găng tay bảo hộ/đồ bảo hộ/kính bảo hộ/mặt nạ bảo hộ.
P281 Sử dụng thiết bị bảo hộ cá nhân được yêu cầu.
P282 Đeo găng tay/mặt nạ/kính bảo hộ chịu lạnh.
P283 Mặc quần áo chống/chịu lửa.
P284 Mặc thiết bị bảo hộ hô hấp.
P285 Mặc thiết bị bảo hộ hô hấp trong trường hợp thông khí không đủ.
P301 NẾU NUỐT:
P301+P310 NẾU NUỐT: Lập tức gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P301+P310+P330 NẾU NUỐT: Lập tức gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ. Súc miệng.
P301+P312 NẾU NUỐT: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ nếu cảm thấy không khỏe.
P301+P312+P330 NẾU NUỐT: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ nếu cảm thấy không khỏe. Súc miệng.
P301+P330+P331 NẾU NUỐT: Súc miệng. KHÔNG làm ói mửa.
P302 NẾU VÀO DA:
P302+P312 NẾU VÀO DA: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ nếu cảm thấy không khỏe.
P302+P334 NẾU VÀO DA: Ngâm trong nước lạnh/quấn trong băng ướt.
P302+P335+P334 NẾU VÀO DA: Loại bỏ hạt khỏi da. Ngâm trong nước lạnh/quấn trong băng ướt.
P302+P350 NẾU VÀO DA: Rửa nhẹ nhàng với xà phòng và nước.
P302+P352 NẾU VÀO DA: Rửa với xà phòng và nước.
P302+P352+P312 NẾU VÀO DA: Rửa với xà phòng và nước. Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ nếu cảm thấy không khỏe.
P302+P353 NẾU VÀO DA: Rửa da với nước/vòi sen.
P303 NẾU VÀO DA (hoặc tóc):
P303+P361+P353 NẾU VÀO DA (hoặc tóc): Lập tức loại bỏ/cởi bỏ tất cả quần áo bị nhiễm. Rửa da với nước/vòi sen.
P303+P361+P353+P315 NẾU VÀO DA (hoặc tóc): Lập tức loại bỏ/cởi bỏ tất cả quần áo bị nhiễm. Rửa da với nước/vòi sen. Lập tức nhận tư vấn/chăm sóc y tế.
P304 NẾU HÍT VÀO:
P304+P312 NẾU HÍT VÀO: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ nếu cảm thấy không khỏe.
P304+P340 NẾU HÍT VÀO: Đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị trí thoải mái cho việc thở.
P304+P340+P310 NẾU HÍT VÀO: Đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị trí thoải mái cho việc thở. Lập tức gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P304+P340+P311 NẾU HÍT VÀO: Đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị trí thoải mái cho việc thở. Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P304+P340+P312 NẾU HÍT VÀO: Đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị trí thoải mái cho việc thở. Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ nếu cảm thấy không khỏe.
P304+P340+P315 NẾU HÍT VÀO: Đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị trí thoải mái cho việc thở. Lập tức nhận tư vấn/chăm sóc y tế.
P304+P341 NẾU HÍT VÀO: Nếu hít thở khó khăn, đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị trí thoải mái cho việc thở.
P305 NẾU VÀO MẮT:
P305+P351+P338 NẾU VÀO MẮT: Rửa cẩn thận bằng nước trong vài phút. Loại bỏ kính áp tròng nếu có và dễ thực hiện. Tiếp tục rửa.
P305+P351+P338+P310 NẾU VÀO MẮT: Rửa cẩn thận bằng nước trong vài phút. Loại bỏ kính áp tròng nếu có và dễ thực hiện. Tiếp tục rửa. Lập tức gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P305+P351+P338+P315 NẾU VÀO MẮT: Rửa cẩn thận bằng nước trong vài phút. Loại bỏ kính áp tròng nếu có và dễ thực hiện. Tiếp tục rửa. Lập tức nhận tư vấn/chăm sóc y tế.
P306 NẾU VÀO QUẦN ÁO:
P306+P360 NẾU VÀO QUẦN ÁO: Lập tức rửa quần áo và da bị nhiễm với nhiều nước trước khi cởi đồ.
P307 NẾU phơi nhiễm:
P307+P311 NẾU phơi nhiễm: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P308 NẾU phơi nhiễm hoặc lo ngại:
P308+P310 NẾU phơi nhiễm hoặc lo ngại: Lập tức gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P308+P311 NẾU phơi nhiễm hoặc lo ngại: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P308+P313 NẾU phơi nhiễm hoặc lo ngại: Nhận tư vấn/chăm sóc y tế.
P309 NẾU phơi nhiễm hoặc cảm thấy không khỏe:
P309+P311 NẾU phơi nhiễm hoặc cảm thấy không khỏe: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P310 Lập tức gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P311 Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P312 Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ nếu cảm thấy không khỏe.
P313 Nhận tư vấn/chăm sóc y tế.
P314 Nhận tư vấn/chăm sóc y tế nếu cảm thấy không khỏe.
P315 Lập tức nhận tư vấn/chăm sóc y tế.
P320 Khẩn cấp điều trị cụ thể (xem ... trên nhãn mác).
P321 Điều trị cụ thể (xem … trên nhãn mác).
P322 Biện pháp cụ thể (xem … trên nhãn mác).
P330 Súc miệng.
P331 KHÔNG làm ói mửa.
P332 Nếu ngứa da:
P332+P313 Nếu ngứa da: Nhận tư vấn/chăm sóc y tế.
P333 Nếu ngứa hoặc rát da:
P333+P313 Nếu ngứa hoặc rát da: Nhận tư vấn/chăm sóc y tế.
P334 Ngâm trong nước lạnh/quấn trong băng ướt.
P335 Loại bỏ hạt khỏi da.
P335+P334 Loại bỏ hạt khỏi da. Ngâm trong nước lạnh/quấn trong băng ướt.
P336 Làm tan phần bị đóng băng với nước ấm. Không chà xát phần bị ảnh hưởng.
P336+P315 Làm tan phần bị đóng băng với nước ấm. Không chà xát phần bị ảnh hưởng. Lập tức nhận tư vấn/chăm sóc y tế.
P337 Nếu ngứa mắt kéo dài:
P337+P313 Nhận tư vấn/chăm sóc y tế.
P338 Loại bỏ kính áp tròng nếu có và dễ thực hiện. Tiếp tục rửa.
P340 Đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị trí thoải mái cho việc thở.
P341 Nếu hít thở khó khăn, đưa nạn nhân ra chỗ không khí trong lành và giữ ở vị tri thoải mái cho việc thở.
P342 Nếu có triệu chúng hô hấp:
P342+P311 Nếu có triệu chúng hô hấp: Gọi TRUNG TÂM TRỊ ĐỘC hoặc bác sĩ.
P350 Rửa nhẹ nhàng với xà phòng và nước.
P351 Rửa cẩn thận bằng nước trong vài phút.
P352 Rửa với xà phòng và nước.
P353 Rửa da với nước/vòi sen.
P360 Lập tức rửa quần áo và da bị nhiễm với nhiều nước trước khi cởi đồ.
P361 Lập tức loại bỏ/cởi bỏ tất cả quần áo bị nhiễm.
P361+P364 Lập tức loại bỏ/cởi bỏ tất cả quần áo bị nhiễm và giặt nó trước khi dùng lại.
P362 Cởi bỏ quần áo bị nhiễm và rửa sạch trước khi dùng lại.
P362+P364 Cởi bỏ quần áo bị nhiễm và rửa sạch trước khi dùng lại và giặt nó trước khi dùng lại.
P363 Giặt quần áo bị nhiễm trước khi dùng lại.
P364 Và giặt nó trước khi dùng lại.
P370 Trong trường hợp cháy:
P370+P372+P380+P373 Trong trường hợp cháy: Nguy cơ nổ khi có lửa. Sơ tán khu vực. KHÔNG dập lửa khi lửa lan đến chất nổ.
P370+P376 Trong trường hợp cháy: Dừng rò rỉ nếu có thể thực hiện an toàn.
P370+P378 Trong trường hợp cháy: Dùng ... để dập lửa.
P370+P380 Trong trường hợp cháy: Sơ tán khu vực.
P370+P380+P375 Trong trường hợp cháy: Sơ tán khu vực. Dập lửa từ xa do nguy cơ nổ.
P370+P380+P375+P378 Trong trường hợp cháy: Sơ tán khu vực. Dập lửa từ xa do nguy cơ nổ. Dùng ... để dập lửa.
P371 Trong trường hợp cháy lớn và nhiều:
P371+P380+P375 Trong trường hợp cháy lớn và nhiều: Sơ tán khu vực. Dập lửa từ xa do nguy cơ nổ.
P372 Nguy cơ nổ khi có lửa.
P373 KHÔNG dập lửa khi lửa lan đến chất nổ.
P374 Dập lửa bằng biện pháp thông thường ở khoảng cách an toàn.
P375 Dập lửa từ xa do nguy cơ nổ.
P376 Dừng rò rỉ nếu có thể thực hiện an toàn.
P377 Khí rò rỉ cháy – không dập trừ khi rò rỉ có thể được dừng an toàn.
P378 Dùng ... để dập lửa.
P380 Sơ tán khu vực.
P381 Loại bỏ tất cả nguồn đốt cháy nếu có thể thực hiện an toàn.
P390 Hấp thụ chất lỏng tràn để tránh hư hỏng vật liệu.
P391 Thu gom chất lỏng tràn.
P401 Cất giữ ...
P402 Giữ ở nơi khô ráo.
P402+P404 Giữ ở nơi khô ráo. Giữ trong vật chứa kín.
P403 Giữ ở nơi thông thoáng.
P403+P233 Giữ ở nơi thông thoáng. Giữ kín vật chứa.
P403+P235 Giữ ở nơi thông thoáng. Giữ mát.
P404 Giữ trong vật chứa kín.
P405 Store locked up.
P406 Giữ trong vật chứa chống ăn mòn/... với lớp lót bên trong.
P407 Giữ khoảng không khí giữa các ngăn/pallet.
P410 Tránh ánh sáng mặt trời.
P410+P403 Tránh ánh sáng mặt trời. Giữ ở nơi thông thoáng.
P410+P412 Tránh ánh sáng mặt trời. Tránh nhiệt độ quá 50 ºC/122 ºF..
P411 Giữ ở nhiệt độ không quá ... ºC/... ºF.
P411+P235 Giữ ở nhiệt độ không quá ... ºC/... ºF. Giữ mát.
P412 Tránh nhiệt độ quá 50 ºC/122 ºF..
P413 Cất giữ số lượng lớn hơn ... kg/... lbs tại nhiệt độ không quá ... °C/... °F.
P420 Tránh xa những vật liệu khác.
P422 Cất giữ dưới ...
P501 Loại bỏ chất/vật chứa ...
P502 Liên hệ nhà sản xuất hoặc nhà cung cấp cho thông tin về phục hồi hoặc tái chế.

List formats[sửa mã nguồn]

|listtype=abbr (default)
P201, P302+P334, P502
Listtype options
|format=inline
P201: "Coi hướng dẫn đặc biệt trước khi sử dụng.", P302+P334: "NẾU VÀO DA: Ngâm trong nước lạnh/quấn trong băng ướt.", P502: "Liên hệ nhà sản xuất hoặc nhà cung cấp cho thông tin về phục hồi hoặc tái chế."
|format=bulleted
  • P201: Coi hướng dẫn đặc biệt trước khi sử dụng.
  • P302+P334: NẾU VÀO DA: Ngâm trong nước lạnh/quấn trong băng ướt.
  • P502: Liên hệ nhà sản xuất hoặc nhà cung cấp cho thông tin về phục hồi hoặc tái chế.
|format=unbulleted
  • P201: Coi hướng dẫn đặc biệt trước khi sử dụng.
  • P302+P334: NẾU VÀO DA: Ngâm trong nước lạnh/quấn trong băng ướt.
  • P502: Liên hệ nhà sản xuất hoặc nhà cung cấp cho thông tin về phục hồi hoặc tái chế.
|format=horizontal
  • P201: Coi hướng dẫn đặc biệt trước khi sử dụng.
  • P302+P334: NẾU VÀO DA: Ngâm trong nước lạnh/quấn trong băng ướt.
  • P502: Liên hệ nhà sản xuất hoặc nhà cung cấp cho thông tin về phục hồi hoặc tái chế.
|format=ordered
  1. P201: Coi hướng dẫn đặc biệt trước khi sử dụng.
  2. P302+P334: NẾU VÀO DA: Ngâm trong nước lạnh/quấn trong băng ướt.
  3. P502: Liên hệ nhà sản xuất hoặc nhà cung cấp cho thông tin về phục hồi hoặc tái chế.
|format=horizontal_ordered
  1. P201: Coi hướng dẫn đặc biệt trước khi sử dụng.
  2. P302+P334: NẾU VÀO DA: Ngâm trong nước lạnh/quấn trong băng ướt.
  3. P502: Liên hệ nhà sản xuất hoặc nhà cung cấp cho thông tin về phục hồi hoặc tái chế.

Full abbr list[sửa mã nguồn]

Complete H, P lists (H200, H201, H202, ...)

As of 27 November 2021:

  • GHS H-phrases (110) H200, H201, H202, H203, H204, H205, H206, H207, H208, H209, H210, H211, H220, H221, H222, H223, H224, H225, H226, H227, H228, H230, H231, H240, H241, H242, H250, H251, H252, H260, H261, H270, H271, H272, H280, H281, H282, H283, H284, H290, H300, H300+H310, H300+H310+H330, H300+H330, H301, H301+H311, H301+H311+H331, H301+H331, H302, H302+H312, H302+H312+H332, H302+H332, H303, H303+H313, H303+H313+H333, H303+H333, H304, H305, H310, H310+H330, H311, H311+H331, H312, H312+H332, H313, H313+H333, H314, H315, H315+H320, H316, H317, H318, H319, H320, H330, H331, H332, H333, H334, H335, H336, H340, H341, H350, H350i, H351, H360, H360D, H360Df, H360F, H360FD, H360Fd, H361, H361d, H361f, H361fd, H362, H370, H371, H372, H373, H400, H401, H402, H410, H411, H412, H413, H420, H441
Order entered: |H201|H200| to check sorting.
  • GHS P-phrases (160) P102, P103, P201, P202, P210, P211, P212, P220, P221, P222, P223, P230, P231, P231+P232, P232, P233, P234, P235, P235+P410, P240, P241, P242, P243, P244, P250, P251, P260, P261, P262, P263, P264, P270, P271, P272, P273, P280, P281, P282, P283, P284, P285, P301, P301+P310, P301+P310+P330, P301+P312, P301+P312+P330, P301+P330+P331, P302, P302+P312, P302+P334, P302+P335+P334, P302+P350, P302+P352, P302+P352+P312, P302+P353, P303, P303+P361+P353, P303+P361+P353+P315, P304, P304+P312, P304+P340, P304+P340+P310, P304+P340+P311, P304+P340+P312, P304+P340+P315, P304+P341, P305, P305+P351+P338, P305+P351+P338+P310, P305+P351+P338+P315, P306, P306+P360, P307, P307+P311, P308, P308+P310, P308+P311, P308+P313, P309, P309+P311, P310, P311, P312, P313, P314, P315, P320, P321, P322, P330, P331, P332, P332+P313, P333, P333+P313, P334, P335, P335+P334, P336, P336+P315, P337, P337+P313, P338, P340, P341, P342, P342+P311, P350, P351, P352, P353, P360, P361, P361+P364, P362, P362+P364, P363, P364, P370, P370+P372+P380+P373, P370+P376, P370+P378, P370+P380, P370+P380+P375, P370+P380+P375+P378, P371, P371+P380+P375, P372, P373, P374, P375, P376, P377, P378, P380, P381, P390, P391, P401, P402, P402+P404, P403, P403+P233, P403+P235, P404, P405, P406, P407, P410, P410+P403, P410+P412, P411, P411+P235, P412, P413, P420, P422, P501, P502
Order entered: |P103|P102| to check sorting.

Features[sửa mã nguồn]

Hide Doubles[sửa mã nguồn]

Repeated phrase codes are hidden:

  • {{GHS phrases|H400|H401|H401|H401}}H400, H401

Omit Rules[sửa mã nguồn]

|omit=true (default)
Omit Rules as applied by {{GHS phrases}} ()

Omit Rules: when the keep ID is present, do not show the omit ID phrase
• keep H314, omit H318
• keep P203, omit P103
• keep P413, omit P235
• keep H411, omit H401
• keep P411, omit P235
• keep H412, omit H402
• keep H410, omit H400
• keep P236, omit P234

  • Categorised as Thể loại:GHS warnings (0) under "O"
  • Source: “Globally Harmonized System of Classification and Labelling of Chemicals” (pdf). 2021. Annex 3: Codification of Statements and Pictograms (pp 268–385).
  • {{GHS phrases|H314|H318}}H314

All module functions[sửa mã nguồn]

module function template note
main {{GHS phrases}}
{{H-phrases}} {{P-phrases}}

|setid=H, P preset
listAll {{GHS phrases/inline}} equals main + |listtype=inline
numberOfPhrases {{GHS phrases/number of phrases}}
listAll {{GHS phrases/list all}}
listOmitRules {{GHS phrases/list omit rules}} documentation only; no |setid=

Tracking[sửa mã nguồn]

See also[sửa mã nguồn]

Lists: GHS hazard statements, GHS precautionary statements

  1. ^ a b “Globally Harmonized System of Classification and Labelling of Chemicals” (pdf). 2021. Annex 3: Codification of Statements and Pictograms (pp 268–385).
--------------------------------------------------------------------------------
-- Module:GHS phrases
-- 
-- main: reads GHS parameters (arguments like "H301", "P401")
--		and returns for each (listtype='abbr'):
--		phraseID visible; formal phrase text as <abbr title="...">
-- setID	= "H" or "P"
-- phraseID = e.g. "H201", "P231+P234"
-- phrase text read from array tables in [[Module:GHS phrases/data]]
--
-- Implements: [[Template:GHS phrases]]
-- Helppage: [[Template:GHS phrases]]
-- Error category: [[Category:GHS errors]], [[Thể loại:Lỗi GHS]] (mainspace pages only)
--
-- Also: 
-- listAll(), numberOfPhrases(), listOmitRules(),
-- listtype, omit
--------------------------------------------------------------------------------
require('strict')
local r = {}	-- "r" for return, so no confusion with setID P
local GHSdata	= mw.loadData('Module:GHS phrases/data')
local getArgs	= require('Module:Arguments').getArgs
local tTools	= require('Module:TableTools')
local yesno		= require('Module:Yesno')
local tArgName	= {} -- named parameters (setid, omit, listtype)
local tMessagesToShow = {} -- the tail: Preview, Categories

--------------------------------------------------------------------------------
-- wlHelpPage
--
-- Formats page as [[Helppage#Section|Label]]
-- by default, sLabel == sSection
--------------------------------------------------------------------------------
local function wlHelpPage(sSection, sLabel)
local sHelpPage = 'Template:GHS phrases'
	
	if sLabel == nil then sLabel = sSection end
	
	if (sLabel or '') == '' then
		sLabel = ''
	else
		sLabel = '|' .. sLabel 
	end
	if (sSection or '') == '' then
		sSection = ''
	else
		sSection = '#' .. sSection
	end
	return '[[' .. sHelpPage .. sSection .. sLabel .. ']]'
end

--------------------------------------------------------------------------------
-- addErrorCategory
--
-- Formats as [[Category:GHS errors|catsort]]
-- or '' when in other namespace.
-- sCatsort option using: H, P, _
--------------------------------------------------------------------------------
local function addErrorCategory(sCatsort)
local pagetype = require('Module:Pagetype').main
	
	local wlErrCat = ''
	if pagetype() == 'article' then -- mainspace only
		if sCatsort == nil then sCatsort = tArgName['setID'] end
		
		if sCatsort == '' then
			wlErrCat = '[[Thể loại:Lỗi GHS]]'
		else
			wlErrCat = '[[Thể loại:Lỗi GHS|' .. sCatsort .. ']]'
		end
	else
		return ''
	end

	table.insert(tMessagesToShow, wlErrCat)
	return
end

--------------------------------------------------------------------------------
-- addWarningCategory
--
-- Formats as [[Thể loại:Lỗi GHS|catsort]]
-- mainspace only, or '' when in other namespace.
-- sCatsort option using: H, P, U, ?, D, O
--------------------------------------------------------------------------------
local function addWarningCategory(sCatsort)
local pagetype = require('Module:Pagetype').main
if sCatsort == nil then sCatsort = tArgName['setID'] end
		
	local wlWarnCat = ''
	if pagetype() == 'article' then -- mainspace only
		if sCatsort == '' then
			wlWarnCat = '[[Thể loại:Lỗi GHS]]'
		else
			wlWarnCat = '[[Thể loại:Lỗi GHS|' .. sCatsort .. ']]'
		end
	else
		return 
	end

	table.insert(tMessagesToShow, wlWarnCat)
	return
end

--------------------------------------------------------------------------------
-- addPreviewMsg
--------------------------------------------------------------------------------
local function addPreviewMsg(sMsg)
local previewWarn = require('Module:If preview')._warning
	table.insert(tMessagesToShow, previewWarn({sMsg}))
	return
end

--------------------------------------------------------------------------------
-- showPreviewMsg
--
-- show table tMessagesToShow
-- preview-messages and errorcat
-- all namespaces
--------------------------------------------------------------------------------
local function showPreviewMsg()
	if tTools.size(tMessagesToShow) > 0 then
		return table.concat(tMessagesToShow, '')
	else
		return ''
	end
end

--------------------------------------------------------------------------------
-- applyRemoveDuplicates
--
-- returns edited table, with double Codes removed
-- adds warning with codes.
-- base table tArgs is walked through by a iwalker that reads a singel code,
-- then a ikiller checks the upward part of the same table to delete all copies
-- ikiller starts at end of table, walks towards iwalker; then tArgs is compressed
-- iwalker steps 1 up in the freshly compressed table
-- Used: iArgs is sorted, and order stays same. compress does not change that.
--------------------------------------------------------------------------------
local function applyRemoveDuplicates(tArgs)
local iR, iK -- iR = reader, iK = killer
local hit = false

	iR = 1
	while iR < #tArgs do
		iK = #tArgs -- will be counting downwards
		while iK > iR do
			if tArgs[iK] == tArgs[iR] then
				hit = true
				addPreviewMsg('Duplicate removed: ' .. tArgs[iR])
				table.remove(tArgs, iK)
				tTools.compressSparseArray(tArgs)
			end
			iK = iK - 1
		end
		tTools.compressSparseArray(tArgs)
		iR = iR + 1
	end

	if hit then
		addWarningCategory('D')
	end
	return tArgs
end

--------------------------------------------------------------------------------
-- applyOmitRules
--
-- returns edited table, with Omit phraseID's removed
-- Omit rule is per GHS_Rev9E_0.pdf (2021)
--------------------------------------------------------------------------------
local function applyOmitRules(tArgs)
local tRules = GHSdata['tOmitRules']
	local hit = false
	
	for keep, omit in pairs(tRules) do
		if tTools.inArray(tArgs, omit) then
			if tTools.inArray(tArgs, keep) then
				hit = true
				for i, k in pairs(tArgs) do
					if k == omit then
						table.remove(tArgs, i)		
					end
				end
				addPreviewMsg(wlHelpPage('Omit Rules') .. ': keep ' .. keep .. ', omit ' .. omit)
			end
		end
	end
	if hit then
		tTools.compressSparseArray(tArgs)
		addWarningCategory('O')
	end
	return tArgs
end

--------------------------------------------------------------------------------
-- label H-phrases or P-phrases
--------------------------------------------------------------------------------
local function PHlabel()
	if tArgName['setID'] == 'GHS' then
		return 'GHS phrases'
	else
		return tArgName['setID'] .. '-phrases'
	end
end

--------------------------------------------------------------------------------
-- inMono
--
-- Use mono font-family (from: Template:Mono)
--------------------------------------------------------------------------------
local function inMono(s)
	if s == nil then s = '' end
	return '<span class="monospaced" style="font-family: monospace;">' .. s .. '</span>'
end

--------------------------------------------------------------------------------
-- wlInlineTag
--
-- Returns <sup>[?]</sup> with wikilink to [[helppage#section|errormessage]]
--------------------------------------------------------------------------------
local function wlInlineTag(phraseID)
	local sMsg
	sMsg = '<sup><span class="noprint Inline-Template">&#91;<i>'
				.. wlHelpPage(PHlabel(), '<span title="' 
									.. PHlabel() .. ': '
									.. 'không tìm thấy '
									.. phraseID
									.. '">?</span>')
				.. '</i>&#93;</span></sup>'
	return sMsg
end

--------------------------------------------------------------------------------
-- errorPhraseIDnotFound
--
-- Returns single value when error (not found in list):
-- plain value + inline warning [?] (linked) + error cat (mainsp) + preview warning
--------------------------------------------------------------------------------
local function errorPhraseIDnotFound(phraseID)
	if phraseID == nil then phraseID = '' end
	
	local inlineTag = wlInlineTag(phraseID)
	local previewMsg = wlHelpPage(PHlabel()) .. ': không tìm thấy \"' .. phraseID .. '\"'
	addPreviewMsg(previewMsg)
	addErrorCategory()
	
	return phraseID .. inlineTag
end

--------------------------------------------------------------------------------
-- errorHPsetIDnotFound
--
-- setID H or P could not be found
--------------------------------------------------------------------------------
local function errorHPsetIDnotFound()
	local sMsg
	sMsg = wlHelpPage('', PHlabel())
			.. ': không tìm thấy id "H" hoặc "P"' 
			.. ' (vui lòng sử dụng mẫu như "|H200" hoặc "|P300+P301")'
	addPreviewMsg(sMsg)
	addErrorCategory('?')
	return showPreviewMsg()
end

--------------------------------------------------------------------------------
-- errorHPsetIDmissing
--
-- parameter |setid= to be used
--------------------------------------------------------------------------------
local function errorHPsetIDmissing()
	local sMsg
	sMsg = wlHelpPage( '', PHlabel())
			.. ': không tìm thấy id "H" hoặc "P",' 
			.. ' vui lòng sử dụng |setid=... (H hoặc P)'
	addPreviewMsg(sMsg)
	return
end

--------------------------------------------------------------------------------
-- formatPhraseAbbr
--
-- format phraseID and text, for abbr-form (infobox list form)
--------------------------------------------------------------------------------
local function formatPhraseAbbr(phraseID, sPhrase)
	return '<abbr class="abbr" title=" ' .. phraseID .. ': ' .. sPhrase .. '">'
				.. phraseID 
				.. '</abbr>'
end

--------------------------------------------------------------------------------
-- formatPhraseInline
--
-- format phraseID and text, for inline form (in sentence)
-- adds "quotes"
--------------------------------------------------------------------------------
local function formatPhraseInline(phraseID, sPhrase)
	return inMono(phraseID) .. ': \"' .. sPhrase .. '\"'
end

--------------------------------------------------------------------------------
-- formatPhraseList
--
-- as inline, but no "quotes" added.
--------------------------------------------------------------------------------
local function formatPhraseList(phraseID, sPhrase)
	return inMono(phraseID) .. ': ' .. sPhrase
end

--------------------------------------------------------------------------------
-- getSetID
--
-- Determines setID (expected either 'H' or 'P')
-- First route is: read |setid=
-- When |setid= is not set, 
--		it looks for a first parameter that has an H of P prefix (in |P201|P202|...)
--		when not found, 'GHS' is retured
-- In one call, P and H numbers can *not* be mixed
--		so "|H201|P202|" will cause error "P202 not found" (... in H-list)
--------------------------------------------------------------------------------
local function getSetID(tArgs)
	local setIDfound = 'GHS'
	local paramsetID = tArgs['setid'] or nil
	
	if (paramsetID ~= nil) and (paramsetID == 'P' or paramsetID == 'H') then
		setIDfound = paramsetID
	else
		local initial = nil
		for i, v in ipairs(tArgs) do
			initial = mw.ustring.match(v, '^[PH]')
			if initial ~=nil then
				setIDfound = initial
				break
			end
		end
	end
	return setIDfound
end

--------------------------------------------------------------------------------
-- getListType
--
-- Checks list format, including those from Module:List
--------------------------------------------------------------------------------
local function getListType(tArgs)
	local listTypes = {
	['abbr'] = true,
	['bulleted'] = true,
	['unbulleted'] = true,
	['horizontal'] = true,
	['ordered'] = true,
	['horizontal_ordered'] = true,
	['horizontal ordered'] = true,
	['inline'] = true
	}
	local sListType = tArgs['listtype'] or 'abbr'

	if sListType == '' or sListType == 'abbr' then
		return 'abbr'
	elseif listTypes[sListType] == true then
		if sListType == 'horizontal ordered' then
			sListType = 'horizontal_ordered'
		end
		return sListType
	else 
		sListType = 'abbr'
	end
	return sListType
end

--------------------------------------------------------------------------------
-- getDoOmitRules
--------------------------------------------------------------------------------
local function getDoOmitRules(tArgs)
	local b = yesno(tArgs['omit'], true)
	
	if b == nil then b = true end

	return yesno(b, true)
end

--------------------------------------------------------------------------------
-- prepareArgs
--
-- First: determine setID (from |setID= OR from prefixes in parameters)
-- Then: clean up & format phrase IDs (=unnamed parameters)
--		remove bad characters, create H/P pattern "H201", "P310+P302"
-- straight array, no nil's, sorted
--------------------------------------------------------------------------------
local function prepareArgs(tArgs)

	tArgName['setID'] = getSetID(tArgs)
	tArgName['listtype'] = getListType(tArgs)
	tArgName['omit'] = getDoOmitRules(tArgs)

	tArgs = tTools.compressSparseArray(tArgs) -- removes all named args
	if string.len(tArgName['setID']) == 1 and #tArgs > 0 then
		for i, v in ipairs(tArgs) do
			v = mw.text.decode(v)
			v = mw.ustring.gsub(v, '[^%d%+A-Za-z]', '')
			v = mw.ustring.gsub(v, '^(%d)', tArgName['setID'] .. '%1')
			v = mw.ustring.gsub(v, '%+(%d)', '+' .. tArgName['setID'] .. '%1')
			tArgs[i] = v
		end
		table.sort(tArgs)
	end
	return tArgs
end

--------------------------------------------------------------------------------
-- listAll
--
-- Returns wikitable rows for each phrase id.
-- requires |setID=P/H
-- returns full list, all phrases, for a setID
-- 2-columns wikitable, sorted, sortable, anchor like "H201" for each
--------------------------------------------------------------------------------
function r.listAll(frame)
local newArgs = getArgs(frame)
local tL = {}

	prepareArgs(newArgs)
	
	local tRead
	if tArgName['setID'] == 'H' then
		tRead = GHSdata['Hphrases']
	elseif tArgName['setID'] == 'P' then
		tRead = GHSdata['Pphrases']
	else 
		errorHPsetIDmissing()
		return  showPreviewMsg()
	end

	-- Intermediate table t2 to maintain order; read from original table (/data)
	local t2 = {}
	local iPh
	for s, v in pairs(tRead) do
		iPh = tonumber(mw.ustring.match(s, '[PH](%d%d%d)'))
		if string.len(s) > 4 then
			iPh = tTools.size(t2) + 1
		end
		table.insert(t2, iPh, s)
	end
	t2 = tTools.compressSparseArray(t2)
	table.sort(t2)

	local sTR, v, sAnchor
	-- i = array index, s = phraseID, v = phrase text
	for i, s in ipairs(t2) do
		v = tRead[s]
		sAnchor = '<span class="anchor" id="' .. s .. '"></span>'
		sTR = '|- ' .. sAnchor .. '\n| datasortvalue="' .. i .. '" | <span style="font-family: monospace;">' .. s .. '</span> || ' .. v
		table.insert(tL, sTR)
	end

	return table.concat(tL, '\n')
end

--------------------------------------------------------------------------------
-- numberOfPhrases
--
-- Documentation
-- requires |setID=H/P
-- Returns number of phrases, in format
--	"GHS H-phrases (123)"
--------------------------------------------------------------------------------
function r.numberOfPhrases(frame)
	local newArgs = getArgs(frame)

	prepareArgs(newArgs)

	local iT
	if tArgName['setID'] == 'H' then
		iT = tTools.size(GHSdata['Hphrases'])
	elseif tArgName['setID'] == 'P' then
		iT = tTools.size(GHSdata['Pphrases'])
	else
		errorHPsetIDmissing()
		return showPreviewMsg()
	end

	return 'GHS ' .. PHlabel() .. ' <span style="font-weight: normal;">(' .. tostring(iT) .. ')</span>'
end

--------------------------------------------------------------------------------
-- listOmitRules
--
-- self-documentation
--------------------------------------------------------------------------------
function r.listOmitRules()
local tRules = GHSdata['tOmitRules']
local tL = {}
local s

	s = wlHelpPage('Omit Rules')
		.. ': when the <i>keep</i> ID is present, do not show the <i>omit</i> ID phrase'
	table.insert(tL, s)
	for keep, omit in pairs (tRules) do
		s = '&bull; keep ' .. inMono(keep) .. ', omit ' .. inMono(omit)
		table.insert(tL, s)
	end
	return table.concat(tL, '<br/>')
end

--------------------------------------------------------------------------------
-- _main
--
-- processes setID (H, P) and phrase codes
--		error:	setID not P, H
--				code not found
-- cannot mix H and P phrases
-- reads phrases from /data H or P phrases tables
-- formats phrase (abbreviation, abbr-title, phraseID)
--------------------------------------------------------------------------------
function r._main(tArgs)

	tArgs = prepareArgs(tArgs)
	
	if #tArgs == 0 then
		return showPreviewMsg() -- no content
	elseif tArgName['setID'] == 'GHS' then
		return errorHPsetIDnotFound()
	end

	tArgs = applyRemoveDuplicates(tArgs)
	if tArgName['omit'] then
		tArgs = applyOmitRules(tArgs)
	end

	local formatterF
	if tArgName['listtype'] == 'abbr' then
		formatterF = formatPhraseAbbr
	elseif tArgName['listtype'] == 'inline' then
		formatterF = formatPhraseInline
	else --- Module:List options
		formatterF = formatPhraseList
	end
	
	local tReadD = {}
	if tArgName['setID'] == 'H' then
		tReadD = GHSdata['Hphrases']
	elseif tArgName['setID'] == 'P' then
		tReadD = GHSdata['Pphrases']
	else
		return showPreviewMsg()
	end

	local sPhrase
	local tR = {}
	for i, v in ipairs(tArgs) do
		sPhrase = tReadD[v]
		if sPhrase == nil then
			table.insert(tR, errorPhraseIDnotFound(tostring(v)))
		else
			table.insert(tR, formatterF(v, sPhrase))
		end
	end

	if tArgName['listtype'] == 'abbr' then
		return table.concat(tR, ', ') .. showPreviewMsg()
	elseif tArgName['listtype'] == 'inline' then
		return table.concat(tR, ', ') .. showPreviewMsg()
	else
		local mList = require('Module:List')
		return mList[tArgName['listtype']](tR) .. showPreviewMsg()
	end
end

--------------------------------------------------------------------------------
-- main
--
-- handles template input frame, then calls generic _main() function
-- To be invoked from {{template}}
--------------------------------------------------------------------------------
function r.main(frame)
local newArgs = getArgs(frame)
	return r._main(newArgs) 
end


return r