# -*- coding: utf-8 -*-
"""Lập phiếu công thức NGHIỀN MÀU với bột oxid sắt nâu đất (Umber, P.Br7) → DOCX.
Phân lớp số liệu: (1) theo tài liệu/TDS + CSDL, (2) phép tính quy đổi, (3) đề nghị thử."""
import os
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH

RA = r'C:\Claw\nghiên-cứu\04-Mau-sac-Dye-Pigment\Cong-thuc-nghien-mau_Oxit-sat-nau-dat_Umber645_2026-10-09.docx'
d = Document()
st = d.styles['Normal']; st.font.name = 'Times New Roman'; st.font.size = Pt(11)


def H(t, lv=1):
    p = d.add_heading(t, level=lv)
    for r in p.runs:
        r.font.name = 'Times New Roman'
        r.font.color.rgb = None
    return p


def P(t=''):
    return d.add_paragraph(t)


def BANG(tieu_de, cot, dong, rong=None):
    if tieu_de:
        P(tieu_de).runs[0].bold = True
    t = d.add_table(rows=1, cols=len(cot))
    t.style = 'Table Grid'
    for i, c in enumerate(cot):
        o = t.rows[0].cells[i]; o.text = ''
        r = o.paragraphs[0].add_run(c); r.bold = True
    for dong_i in dong:
        cells = t.add_row().cells
        for i, v in enumerate(dong_i):
            cells[i].text = str(v)
    if rong:
        for i, w in enumerate(rong):
            for row in t.rows:
                row.cells[i].width = Cm(w)
    return t


p = H('PHIẾU CÔNG THỨC NGHIỀN MÀU — BỘT MÀU OXID SẮT NÂU ĐẤT (UMBER)', 0)
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
P('Ngày lập: 09/10/2026 · Người lập: Phòng Kỹ thuật (Hermes tổng hợp) · Người nhận: Ban Giám đốc / Lab')
P('Trạng thái: CÔNG THỨC MẪU THỬ — không phải định mức sản xuất. Phải kéo ô thử và đo lại trước khi áp dụng.')
P()

H('A. Mã nguyên liệu dùng làm màu (đang có trong kho)', 1)
BANG('', ['Mã / tên nguyên liệu', 'Bản chất & căn cứ', 'Giá mới nhất', 'Ghi chú'],
     [['Umber Pigment 645\n(VENATOR – ROCKWOOD – BRENNTAG)', 'Pigment Brown 7 (C.I. 77491) — oxid sắt Fe\u2082O\u2083 + MnO\u2082 + khoáng đất sét; nâu đậm ấm ngả đỏ; bán trong suốt; hạt 0,1–1 µm; bền UV/nhiệt/hoá chất; dạng BỘT  \u2014 (1) theo chuyên luận bột màu của phòng',
       '92.000 đ/kg\n(giá báo 10/09/2026 — (1) từ CSDL giá btchem.db)', 'CHỌN LÀM MÃ CHÍNH'],
      ['Pigment Brown TB 1008 (GENKY)', 'Bột màu nâu hữu cơ/vô cơ của Genky — cần TDS để chốt C.I.', '208.380 đ/kg (tồn kho 19/05/2021 — giá CŨ)', 'Phương án thay thế'],
      ['Brown 400 — nhóm MÀU NÂU', 'Chưa rõ C.I. (cần TDS)', '352.827 đ/kg (tồn kho, không rõ ngày)', 'Phương án thay thế'],
      ['Brown SP 1008 W (GENKY)', 'Phân tán sẵn trong MÔI TRƯỜNG NƯỚC ("W")', '240.000 (tồn 26/03) / 287.000 đ/kg (đặt hàng)', 'Dùng nếu làm HỆ NƯỚC']],
     [4.6, 6.4, 3.6, 3.0])
P()

H('B. CÔNG THỨC NGHIỀN MÀU (mill base) — HỆ DUNG MÔI (dùng cho NC / PU / alkyd)', 1)
P('Nguyên tắc: nghiền bột màu vào phần dung môi + trợ phân tán trước, nhựa nạp sau/giai đoạn cuối để khối nghiền không bị quá nhớt. Tổng đúng 100,0 phần khối lượng. (2)')
BANG('', ['#', 'Thành phần', 'Phần KL', 'Mẻ 100 kg', 'Vai trò / lưu ý'],
     [['1', 'Umber Pigment 645 (bột oxid sắt nâu đất)', '45,0', '45,0 kg', 'Bột màu. Tải cao được vì oxid sắt có dầu hấp thụ thấp (~20–25 g/100 g) — (3) đề nghị thử'],
      ['2', 'Nhựa alkyd ngắn dầu 60 % (hoặc polyol PU tương đương)', '30,0', '30,0 kg', 'Nhựa mang — chọn cùng hệ với sơn đích'],
      ['3', 'Dung môi hỗn hợp: Xylene : Butyl acetate : MEK = 5 : 3 : 2', '22,6', '22,6 kg', 'Phân tán + chỉnh nhớt. Bay vừa để không khô quá nhanh khi nghiền'],
      ['4', 'Trợ phân tán ướt (polymeric dispersant — ví dụ BYK-163 / Efka 4010)', '1,2', '1,2 kg', '≈ 2,7 % trên khối lượng bột màu — (3)'],
      ['5', 'Chống lắng / chống sệ (gel organo-clay đã hoạt hoá, hoặc fumed silica đã phân tán)', '1,0', '1,0 kg', 'Oxid sắt tỷ trọng 4,7–5,25 g/cm³ ⇒ lắng nhanh, bắt buộc có'],
      ['6', 'Chất chống bọt (silicone/ khoáng)', '0,2', '0,2 kg', 'Tránh bọt khi nghiền tốc độ cao'],
      ['', 'TỔNG', '100,0', '100,0 kg', 'Kiểm tổng = 100,0 ± 0,05']],
     [0.9, 6.2, 1.7, 1.9, 6.9])
P('Mục tiêu sau nghiền: độ mịn Hegman ≥ 6–7 (hạt lớn nhất còn lại ~15–25 µm) — (1) đúng quy định nghiền trong chuyên luận bột màu của phòng.', )
P()

H('C. BIẾN THỂ NGHIỀN KHÔ (paste màu nồng độ cao — cho STAIN / GLAZE lau làm già gỗ)', 1)
P('Dùng khi mục đích là nhuộm/lau tông nâu đậm, làm già hoá gỗ (aging/antique) — đúng ứng dụng tiêu biểu của Umber (1).')
BANG('', ['#', 'Thành phần', 'Phần KL', 'Mẻ 50 kg', 'Vai trò'],
     [['1', 'Umber Pigment 645', '60,0', '30,0 kg', 'Nồng độ cao để tồn trữ gọn'],
      ['2', 'Dung môi bay vừa: White spirit (Pegasol) hoặc Xylene : Butyl acetate = 1:1', '37,0', '18,5 kg', 'Giữ được thời gian lau trên gỗ'],
      ['3', 'Trợ phân tán ướt', '2,0', '1,0 kg', '≈ 3,3 % trên bột màu — (3)'],
      ['4', 'Fumed silica R972 (đã phân tán sẵn vào dung môi)', '1,0', '0,5 kg', 'Chống lắng + tạo độ treo khi lau'],
      ['', 'TỔNG', '100,0', '50,0 kg', 'Kiểm tổng = 100,0 ± 0,05']],
     [0.9, 6.4, 1.7, 1.8, 6.8])
P('⚠ Lưu ý: umber BÁN TRONG SUỐT nên khi lau giữ vân gỗ tốt, nhưng KHÔNG che được vân lẫn nền phôi — muốn nâu đục hơn phải phối thêm oxid sắt đỏ (Iron Oxide RB 4097 / Bột màu đỏ Oxit R 250 — (1) có trong kho) và TiO₂ (R-996 / CR-718).')
P()

H('D. QUY TRÌNH NGHIỀN (đề nghị thử — (3))', 1)
for i, t in enumerate([
    'Nạp dung môi + trợ phân tán vào thùng nghiền, khuấy 300–500 v/p trong 5 phút cho tan đều.',
    'Rắc bột màu TỪ TỪ vào xoáy dung môi (không đổ ồ ạt), nâng dần 800–1.200 v/p, khuấy 15–20 phút đến khi bột ướt đều, không còn vón.',
    'Nạp nhựa ở giai đoạn cuối (hoặc chia 2 lần) để khối nghiền không bị quá nhớt trong lúc nghiền.',
    'Nghiền bi / nghiền cát 30–60 phút. Kiểm độ mịn mỗi 15 phút; đạt Hegman ≥ 6–7 thì dừng.',
    'Khống chế nhiệt khối nghiền ≤ 50–55 °C (làm mát thùng nếu cần).',
    'Cho chống lắng vào sau cùng, khuấy 10 phút ở tốc độ thấp.',
    'Lọc qua lưới 60–100 µm trước khi đóng thùng. Ghi mã mẻ, ngày, người nghiền lên nhãn.']):
    P('%d. %s' % (i + 1, t))
P()

H('E. TỶ LỆ PHA VÀO ỨNG DỤNG (let-down)', 1)
BANG('', ['Ứng dụng', 'Tỷ lệ mill base', 'Nguồn'],
     [['Stain / glaze lau làm già gỗ, giữ vân', '3–8 % + nhựa/varnish 40–60 % + dung môi còn lại', '(1) chuyên luận bột màu của phòng'],
      ['Lót màu / bóng màu (lên tông nâu, còn thấy vân)', '8–15 % vào base trong suốt', '(3) đề nghị thử'],
      ['Dặm màu, sửa lỗi lệch tông', '20–40 % pha loãng thêm dung môi để lau', '(3) đề nghị thử — lau rất nhanh'],
      ['Tạo tông nâu đục (kín vân)', 'Phối thêm oxid đỏ P.R101 + TiO₂, không tăng umber quá 15 %', '(2)/(3) — tăng umber chỉ làm tối, umber bán trong']],
     [6.0, 7.6, 4.0])
P()

H('F. KIỂM TRA SAU NGHIỀN VÀ SAU PHA', 1)
for t in ['Độ mịn: Hegman ≥ 6–7 (đo 3 điểm trong thùng).',
          'Độ nhớt: cốc NK2 hoặc cốc 4 mm — ghi lại để lần sau tái lập.',
          'Độ lắng: để 24 giờ và 7 ngày, đo chiều cao lớp lắng + xem có sệ cứng không.',
          'Cường độ màu (color strength): pha 5 % mill base vào base trắng, kéo drawdown, đo bằng máy X-Rite, so ΔE với mẻ chuẩn — cần ΔE ≤ 1,0 giữa các mẻ.',
          'Tương thích: trộn mill base với hệ sơn đích (NC / PU), để 24 giờ xem tách lớp, vón, đổi màu.',
          'Trên gỗ thật: kéo 3 ô theo 3 tông (3 % / 5 % / 8 %) trên cùng loại gỗ mộc, chụp cùng điều kiện + đo L*a*b*, so với mẫu khách hàng.']:
    P('• ' + t, )
P()

H('G. PHIẾU THEO DÕI THỬ NGHIỆM (in ra điền tay)', 1)
BANG('', ['Mã mẻ', 'Ngày', 'Umber 645 (kg)', 'Dung môi (kg)', 'Nhựa (kg)', 'Nhờn/ Bột (kg)', 'Độ mịn Hegman', 'Nhớt (cốc/NK2)', 'Lắng 24h / 7 ngày', 'Người làm'],
     [['', '', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '', '']],
     [1.7, 1.6, 1.9, 1.9, 1.7, 1.9, 1.9, 1.9, 2.4, 1.9])
P()

H('H. PHÂN LỚP SỐ LIỆU & NGUỒN', 1)
for t in ['(1) Theo tài liệu / CSDL: bản chất Umber = P.Br7 (C.I. 77491) oxit sắt + MnO₂, bán trong, dạng bột, hạt 0,1–1 µm, bền UV/nhiệt — chuyên luận bột màu cho sơn gỗ của phòng; giá 92.000 đ/kg (giá báo 10/09/2026) — CSDL btchem.db bảng giá nguyên liệu; yêu cầu độ mịn Hegman ≥ 6–7; tỷ lệ stain 3–8 %.',
          '(2) Phép tính quy đổi: cộng phần khối lượng, đổi sang mẻ 100 kg / 50 kg; trợ phân tán tính theo % trên khối lượng bột màu.',
          '(3) Đề nghị thử: tỷ lệ bột màu 45 % trong mill base, liều trợ phân tán, tỷ lệ let-down cho lót/bóng và dặm màu, quy trình nạp liệu — phải kéo ô thử trước khi chốt định mức.',
          'Khoảng trống cần bù: chưa có TDS của Umber Pigment 645 và TB 1008 trong tay (độ hấp thụ dầu, D50, solid) ⇒ liều bột màu/trợ phân tán có thể chỉnh sau mẻ thử đầu; chưa có giá mới của nhựa alkyd và dung môi nên chưa tính giá vốn.']:
    P('• ' + t)
d.save(RA)
print('ĐÃ LƯU:', RA, os.path.getsize(RA), 'B')
