---
name: plantuml
description: Tạo và thiết kế diagram bằng cú pháp PlantUML. Trigger khi user muốn tạo/vẽ/thiết kế diagram UML hoặc hệ thống (sequence, class, use case, component, activity, state, ER...) bằng PlantUML.
license: MIT
allowed-tools: Read, Write, Grep, Glob
metadata:
  author: thehappycode
  version: 1.0.0
  category: diagram
  tags: [diagram, plantuml]
---

# PlantUML Diagram

## Yêu cầu

- Skill này sẽ giúp bạn tạo ra các diagram bằng cú pháp PlantUML. Bạn có thể yêu cầu thiết kế các loại diagram khác nhau như class diagram, sequence diagram, use case diagram, v.v.
- Hiển thị diagram trực tiếp trên chat hoặc lưu diagram dưới dạng file `*.md` hoặc `*.puml`, v.v.

## CRITICAL: Kiểm tra trước khi bắt đầu
Trước tiên cần xác nhận với user:
- Khi user yêu cầu thiết kế diagram, hãy hỏi rõ loại diagram mà họ muốn tạo. Nếu user không chỉ định loại diagram, hãy hỏi lại để đảm bảo bạn hiểu đúng yêu cầu của họ. Điều này sẽ giúp tránh hiểu lầm và đảm bảo rằng bạn đáp ứng đúng nhu cầu của user.
- Bạn sẽ thể hiển thị diagram trực tiếp trên chat theo định dạng `*.md`. Nếu user muốn lưu diagram, hãy cung cấp định dạng file dưới dạng file `*.md` hoặc `*.puml`.

## Hướng dẫn

### Lựa chọn loại diagram

Tùy thuộc vào yêu cầu của user, bạn sẽ cần xác định loại diagram mà họ muốn tạo. Dưới đây là một số loại diagram phổ biến và cú pháp cơ bản của chúng:
- Sequence Diagram: Dùng để mô tả tương tác giữa các đối tượng theo thời gian.
- Use Case Diagram: Dùng để mô tả các chức năng của hệ thống và mối quan hệ giữa các tác nhân và use case.
- Class Diagram: Dùng để mô tả cấu trúc của hệ thống, bao gồm. các lớp, thuộc tính, phương thức và mối quan hệ giữa chúng.
- Object Diagram: Dùng để mô tả các đối tượng và mối quan hệ giữa chúng tại một thời điểm cụ thể.
- Component Diagram: Dùng để mô tả các thành phần của hệ thống và mối quan hệ giữa chúng.
- Deployment Diagram: Dùng để mô tả cách các thành phần của hệ thống được triển khai trên các node khác nhau.

### Format Diagram
Sau khi xác định được loại diagram, bạn sẽ phải tạo nội dụng diagram có format cơ bản phải có các mục như sau:

1. Lựa chọn Theme
  - Nếu user có chỉ định theme thì kiểm tra theme có tồn tại không, nếu theme không tồn tại thì thông báo theme không đúng.
  - Ngược lại nếu user không chỉ định theme thì sử dụng theme bất kỳ.
2. Đặt tên cho header và title
3. Khai báo cá thành phàn, các thành phần này phụ thuộc vào loại diagram yêu cầu
4. Chia bước
  - Nếu loại diagram user yêu cầu có chia bước thì bạn phải chia bước thật rõ ràng.
  - Ngược lại nếu loại diagram user yêu cầu không có chia bước thì bỏ qua.
5. Tạo footer page

### Tempate cơ bản cho diagram
```plantuml
@startuml
' TODO: Chọn theme.
!theme mars

' TODO: Đặt tên cho header, và title.
header "Tên header"
title "Tên title"

' TODO: Khai báo các thành phần ở đây, các thàn phần này phụ thuộc vào loại diagram yêu cầu.
actor user as u
participant sevice as s
...

' TODO: Nội dung chính của diagram sẽ được viết ở đây.
== STEP 1: Đặt mô tả cho bước ==

== STEP 2: Đặt mô tả cho bước ==

== STEP 3: Đặt mô tả cho bước ==
...

footer Page %page% of %lastpage%
@enduml
```


