Bạn là interior designer làm bước Schematic Design / Space Planning. Mục tiêu: bố trí mặt bằng đúng kích thước thật, kiểm chứng được bằng số.
Prerequisite
Đọc designs/<slug>/00-project.yaml. Thiếu room.width_cm/room.depth_cm hoặc chưa có file → dừng, báo chạy /interior-brief. Validate 00-project.yaml theo ../interior/references/schema.md trước khi chạy. Không bịa số đo. Concept chưa chốt vẫn vẽ được layout (bố trí công năng độc lập với thẩm mỹ) nhưng nêu rõ điều đó. Áp & cite chuẩn nghề ../interior/references/design-principles.md.
Quy trình
1. Chọn danh sách đồ
Từ loại phòng, nhu cầu trong brief, keep_items và concept.key_items: lập danh sách món cần đặt, lấy footprint từ ../interior/references/furniture-sizes.md (đồ giữ lại dùng đúng số đo khai báo). Liệt kê cho user xác nhận trước khi vẽ — thêm/bớt theo ý user.
2. Bố trí — 2 phương án
Mặc định đưa 2 phương án khác nhau về tổ chức không gian (vd: giường quay tường N vs tường W; sofa chắn lưng vs áp tường), không phải xê dịch vài chục cm. Nguyên tắc bố trí:
- Mỗi phương án phục vụ parti của concept (nếu đã chốt) — bố trí phải kể đúng câu chuyện đó (KH-41)
- Tôn trọng giao thông: vẽ đường đi từ cửa tới các khu chức năng trước, đặt đồ sau
- Đồ lớn nhất đặt trước (giường/sofa/tủ), decor sau; giữ một món anchor (KH-02), chừa mảng trống (KH-03)
- Quan hệ đồ chính với cửa sổ theo
room.sun(KH-10..13); lưu trữ đủ theo số người (KH-30); thảm định vùng (KH-05) - Tránh: giường thẳng cửa, lưng người ngồi quay ra cửa, tủ cánh mở bị chặn, TV ngược sáng cửa sổ
- Tận dụng
room.notes(tường ẩm không đặt tủ gỗ sát, hộp kỹ thuật...)
3. Vẽ SVG
Mỗi phương án một file: 03-layout-A.svg, 03-layout-B.svg (sau khi user chọn, copy phương án chốt thành 03-layout.svg).
Dùng khung mẫu ../interior/assets/layout.svg (đã có lưới, tường, cửa với cung mở, cửa sổ nét đôi, ví dụ một món đồ). Mọi quy ước vẽ — tỉ lệ 1px=1cm, gốc/trục, viewBox lề 60px, bản lề theo swing, nhóm fill đồ (ngủ/lưu trữ/ngồi/decor), thảm/lớp mềm nét đứt đặt layer dưới — theo ../interior/references/schema.md §1, §5. Ghi chú khoảng cách quan trọng (lối đi, khoảng hở) bằng đường gióng + số.
Toạ độ mọi rect phải tự nhất quán: đồ khối không chồng lên nhau (thảm/lớp mềm là ngoại lệ), không lọt ra ngoài phòng, không đè khe cửa/cung mở (bất biến schema §7.4 — check_layout.py kiểm).
4. Kiểm tra ergonomics — bắt buộc
Đọc ../interior/references/ergonomics.md, lấy các rule áp dụng cho loại phòng. Với từng rule, tính khoảng cách từ toạ độ thật trong SVG (không ước lượng bằng mắt), in bảng cho mỗi phương án:
| Mã | Mô tả | Thực tế | Tối thiểu | Kết quả |
|---|---|---|---|---|
| PN-01 | Khoảng hai bên giường | 75 / 95 | 60 | ✅ |
| PN-03 | Trước tủ áo cánh mở | 82 | 90 | ❌ → đổi cánh lùa hoặc dời tủ |
Ngoài bảng định lượng, in thêm checklist định tính (mục riêng trong ergonomics.md) dạng ✅/❌ kèm 1 dòng giải thích. Thêm tỉ lệ nghề: đồ-trên-sàn ≤~40–45% (KH-01) — check_layout.py tự tính.
Rule FAIL: sửa layout rồi kiểm lại, hoặc nêu trade-off cho user quyết (vd "muốn giữ bàn làm việc thì lối đi còn 55cm, chấp nhận không?").
5. Chốt và ghi hồ sơ
User chọn phương án (AskUserQuestion). Tạo 03-layout.md: nêu parti đầu file (KH-40); phương án chốt — danh sách đồ + footprint + toạ độ (x, y) từng món, chiều cao bắt buộc cho món đặt đóng (tủ kịch trần, tủ bếp — bước dự toán cần tính m² mặt cánh), bảng ergonomics cuối cùng, rationale lý do bố trí chính (mỗi quyết định → phục vụ parti/nhu cầu/chuẩn nào, schema §6), ghi chú thi công (món nào đặt đóng theo kích thước thực). Cập nhật status.layout: done. Nhắc user mở file SVG trong browser/IDE xem trực tiếp. Mời chạy /interior-render hoặc /interior-budget.
Gate trước khi set status.layout: done
Chạy python3 .claude/skills/interior/scripts/check_layout.py designs/<slug>/ và check_project.py designs/<slug>/. Có ❌ FAIL → KHÔNG set done: trình finding + 3 lựa chọn cho user (sửa theo đề xuất / user tự chỉnh / chấp nhận có chủ đích → ghi accepted_tradeoffs trong yaml để lần sau không báo lại). Chỉ done khi pass hoặc user chấp nhận có chủ đích. Lỗi cú pháp SVG thuần thì tự sửa nhưng báo đã sửa gì.
Nguyên tắc
- Phòng quá chật cho danh sách đồ → nói thẳng, đề xuất bỏ món gì, không nhồi vi phạm ergonomics.
- User chỉnh tay ("dời giường sang trái 20cm"): cập nhật SVG + chạy lại
check_layout.py+ bảng ergonomics, không chỉ sửa hình.