Flow: ตั้งค่าระบบหลังบ้าน — Super Admin → กิจการ → พนักงาน

กระบวนการก่อนร้าน/ลูกค้าจะใช้งานได้ : Super Admin สร้างกิจการ(บ้าน) + นายทุน, ตั้ง LINE OA (นอกระบบ), สร้างพนักงาน + กำหนดสิทธิ์/บ้าน อ้างอิงตาราง: 01-org-access.md วันที่: 16 มิ.ย. 2026


Actors & ลำดับชั้น

flowchart TD
  SA[SUPER_ADMIN<br/>สร้างบ้าน+พนักงาน · เข้าทุกบ้าน] -->|สร้าง| BIZ[กิจการ/บ้าน<br/>org.businesses]
  SA -->|สร้าง| ST[พนักงาน<br/>staff.users role=ADMIN]
  BIZ -->|มี| INV[นายทุน<br/>org.investors]
  ST -.กำหนดบ้าน.-> BIZ
  ADM[ADMIN<br/>ผู้ดูแลกิจการ] -->|ดูแล| BIZ
  ST -.role.-> ADM
Actorloginบทบาท
SUPER_ADMINเบอร์+รหัสสร้างกิจการ, สร้างพนักงาน, เข้าได้ทุกบ้าน (seed/พิเศษ)
ADMINเบอร์+รหัสผู้ดูแลกิจการ — ต้องถูกกำหนดบ้าน + สิทธิ์ก่อน
INVESTOR (นายทุน)เบอร์+รหัส+OTPดู dashboard ผลตอบแทน (AF)

⚠️ Prerequisite นอกระบบ — สร้าง LINE OA (ผู้ดูแลทำเอง)

ก่อน/ระหว่างสร้างกิจการ ผู้ดูแลต้องไปตั้งค่าที่ LINE (นอกระบบ) แล้วนำค่ามากรอก:

LINE OAใช้ทำอะไรค่าที่ต้องเอามากรอก (org.businesses)
OA ฝั่งร้านค้าสื่อสาร/แจ้งเตือนร้านshop_line_messaging_token + facebook_link/facebook_qr_file_id
OA ฝั่งลูกค้าLINE Login + แจ้งเตือนลูกค้าline_oa_link, line_oa_qr_file_id, line_login_channel_id, line_login_channel_secret, customer_line_messaging_token

ระบบไม่ได้สร้าง LINE OA ให้ — เก็บแค่ config (token/channel id/secret) ที่กรอกเข้ามา


ตั้งค่ารูปภาพ Portal หลัก (ระดับระบบ)

Super Admin ตั้งรูป หน้าปก + โลโก้ ของ Portal เข้าสู่ระบบ (หน้าก่อนเลือกบ้าน) — node 2442:426800

  • หน้าปก 1440×1024 + โลโก้ 720×720 → sys.portal_settings (singleton 1 row) · cover_file_id / logo_file_idsys.r2_file (public)
  • ต่างจากโลโก้/หน้าปก “ของกิจการ” (ระดับบ้าน) ที่อยู่ใน org.businesses

Flow A — สร้างกิจการ (บ้าน) + นายทุน

flowchart TD
  A([Super Admin login]) --> B[หน้าเลือก/จัดการกิจการ]
  B --> C[กดเพิ่มกิจการใหม่]
  C --> D[กรอกข้อมูลกิจการ<br/>ชื่อ·โลโก้·VAT·ที่อยู่คืนเครื่อง]
  D --> E[กรอก config LINE/Facebook<br/>token·channel id·secret·QR]
  E --> F[เพิ่มนายทุน 0..n<br/>ชื่อ·อีเมล·เบอร์·เงินลงทุน·รหัสผ่าน]
  F --> G{ยืนยัน}
  G --> H[ระบบสร้าง:<br/>org.businesses + org.investors]
  H --> I([กิจการพร้อมใช้งาน])
Stepตาราง/คอลัมน์หมายเหตุ
ข้อมูลกิจการ + LINE configorg.businesses (node 2957:413689)ชื่อบ้าน unique · ไม่ลบ/ไม่ปิด
นายทุนorg.investors (node 1858:309897)ผูก 1 บ้าน · ลบถาวรได้
โลโก้/QR*_file_id → sys.r2_file (is_public=true)

Flow B — สร้างพนักงาน + สิทธิ์ + เข้าบ้าน + เปิด/ปิด + login ครั้งแรก

flowchart TD
  A([Super Admin]) --> B[สร้างพนักงาน<br/>รูป·เบอร์·ชื่อ·รหัสผ่าน]
  B --> C[ระบบสร้าง staff.users<br/>role=ADMIN · must_change_password=true<br/>ยังไม่ผูกบ้าน/ไม่มีสิทธิ์]
  C --> D[กำหนดบ้านที่เข้าถึง]
  D --> E[(staff.user_businesses M:N)]
  C --> F[กำหนดสิทธิ์ feature]
  F --> G[(staff.user_permissions M:N)]
  C --> H[เปิด/ปิดใช้งาน → is_active]
  C --> I[ลบ soft → is_deleted]
  E --> J([พนักงานพร้อมใช้งาน])
  G --> J
  J --> K[พนักงาน login ครั้งแรก]
  K --> L{must_change_password?}
  L -- true --> M[บังคับตั้งรหัสใหม่ → set false]
  L -- false --> N([เข้าใช้งานปกติ])
  M --> N
Stepตาราง/คอลัมน์หมายเหตุ
สร้างพนักงานstaff.users (node 1855:237840)display_name, ไม่มี email, profile optional, must_change_password=true
กำหนดบ้าน (เข้าบ้าน)staff.user_businesses (node 2581:364525)เข้าได้หลายบ้าน · SUPER_ADMIN ทุกบ้าน
กำหนดสิทธิ์staff.user_permissions (node 592:115505)per-user ทั้งระบบ
เปิด/ปิดใช้งานstaff.users.is_active
ลบ (เก็บข้อมูล)staff.users.is_deletedsoft delete
ตั้งรหัสครั้งแรกstaff.users.must_change_passwordtrue ตอนสร้าง → false หลังเปลี่ยน

Flow — นายทุน (Investor) login & เปลี่ยนเบอร์/รหัส

flowchart TD
  A([นายทุน: กรอกเบอร์+รหัส]) --> B{is_phone_verified?}
  B -- false ครั้งแรก --> C[ยืนยัน OTP]
  C --> D[set is_phone_verified=true]
  D --> E([เข้าระบบ - dashboard])
  B -- true --> E
  E --> F[เปลี่ยนเบอร์] --> G[OTP ยืนยันเบอร์ใหม่] --> H[เปลี่ยน + re-login]
  E --> I[เปลี่ยนรหัส] --> J[re-login]
  • login ครั้งแรก → OTP (set org.investors.is_phone_verified=true) · ครั้งถัดไปใช้ เบอร์+รหัส (ไม่ต้อง OTP) — node 1969:237499
  • เปลี่ยนเบอร์ → OTP ยืนยันเบอร์ใหม่ → สำเร็จจึงเปลี่ยน → re-login · เปลี่ยนรหัส → re-login
  • OTP = Redis (ephemeral) · re-login = invalidate session (app layer)

หมายเหตุสำคัญ (business logic)

  • พนักงานสร้างเสร็จยังใช้ไม่ได้ทันที — ต้องกำหนด “บ้านที่เข้าถึง” + “สิทธิ์” แยกขั้นตอน (2 ฟอร์ม)
  • login ครั้งแรกmust_change_password=true บังคับตั้งรหัสใหม่ก่อนใช้งาน
  • SUPER_ADMIN มาจาก seed/พิเศษ (ฟอร์มสร้างพนักงานไม่เลือก role → default ADMIN) [?]
  • LINE OA สร้างนอกระบบ — ระบบเก็บแค่ token/channel config
  • เปลี่ยนข้อมูล login (SH10-style) → บังคับ logout เข้าใหม่ (ฝั่ง staff/shop)