#flows#setup
ตั้งบริษัท/ฐานข้อมูลใหม่และข้อมูลหลักขั้นต่ำ (New Company Setup & Minimum Master Data)
ฐานข้อมูลบริษัทใหม่สร้างจาก "โครงสร้างว่าง" ของฐานต้นแบบ แล้ว seed ข้อมูลระบบเพียงเล็กน้อย ข้อมูลหลักที่เอกสารต้องใช้จริง (งวดบัญชี ผังบัญชี รูปแบบเลขที่ คลัง สินค้า ลูกค้า/ผู้จำหน่าย) ไม่ถูก seed ต้องตั้งเองก่อนบันทึกเอกสารใบแรก ดู ข้อมูลหลักแบบหัว-รายการ รหัสอัตโนมัติ และเลย์เอาต์รายการ (Master-detail, code auto-run, DataList)
ภาพรวม
flowchart TD
A["POST /api/v1/admin/workspace/databases"] --> B["ตรวจชื่อ + ผู้สร้าง"]
B --> C["CREATE DATABASE ... ENCODING UTF8"]
C --> D["clone โครงสร้างว่างจากฐานต้นแบบ (คอลัมน์, default, PK/UNIQUE)"]
D --> E["seed: erp_option, erp_company_profile (สาขา 00000), erp_user 2 คน"]
E --> F["ลงทะเบียน sml_database_list + สิทธิ์ + สมาชิก workspace"]
F --> G["เปิด pool ครั้งแรก: erpSchemaSQL + erp_initial"]
G --> H["ตั้งข้อมูลหลักขั้นต่ำ (ไม่ถูก seed)"]
H --> I["ยอดยกมา → เริ่มบันทึกเอกสาร"]
ขั้นตอน
| ขั้น | เอกสาร/หน้าจอ | ตารางที่เขียน | ผล | path:line |
|---|---|---|---|---|
| 1 | สร้างฐานข้อมูล (WorkspaceCreateDatabase) |
— | ตรวจชื่อว่าง/ไม่ซ้ำ และต้องมีผู้สร้าง | backend/internal/adapter/inbound/http/admin/workspace_google.go:343, :533, :587, backend/internal/adapter/inbound/http/router.go:240 |
| 2 | สร้าง database | ฐานใหม่ | CREATE DATABASE "<ชื่อ>" ENCODING 'UTF8' |
backend/internal/adapter/inbound/http/admin/workspace_google.go:597 |
| 3 | clone โครงสร้างว่าง (cloneEmptySchemaFromTemplate) |
ทุกตาราง (ไม่มีข้อมูล) | คอลัมน์ + default และ PRIMARY KEY/UNIQUE จากฐานต้นแบบ | backend/internal/adapter/inbound/http/admin/workspace_google.go:395, :405, :469, :606 |
| 4 | seed ข้อมูลระบบ | erp_option — ตัวเลือกระบบ (สวิตช์ + ทศนิยมของบริษัท) (year_type, ทศนิยม), erp_company_profile — ข้อมูลบริษัท (แถวเดียว) (สาขา 00000 สำนักงานใหญ่), erp_user — ผู้ใช้/พนักงานในฐานบริษัท (SUPERADMIN + เจ้าของ ระดับ 9) | ไม่มีรายการเอกสารเลย · ทุกคำสั่ง seed ไม่สนใจ error (_, _ =) |
backend/internal/adapter/inbound/http/admin/workspace_google.go:503-527 |
| 5 | ลงทะเบียนฐานและสิทธิ์ | sml_database_list — ทะเบียนบริษัท (Company registry), sml_database_list_user_and_group — สิทธิ์เข้าบริษัท (Access Grant), สมาชิก workspace | ผู้สร้างเห็นฐานในรายการ | backend/internal/adapter/inbound/http/admin/workspace_google.go:620, :629-657 |
| 6 | เปิด pool ครั้งแรก | ตารางที่ erpSchemaSQL สร้าง + erp_initial |
สร้างตารางเสริมแบบ IF NOT EXISTS และ seed erp_initial |
backend/internal/application/process/service.go:796, :870-876, :962 |
| 7 | ข้อมูลบริษัทและออปชัน (config/CompanyProfileForm.tsx, config/OptionsForm.tsx) |
erp_company_profile — ข้อมูลบริษัท (แถวเดียว), erp_option — ตัวเลือกระบบ (สวิตช์ + ทศนิยมของบริษัท) | ออปชันคุมการตรวจตอนบันทึก (ภาษี สต็อก วงเงิน) | frontend/account/config/CompanyProfileForm.tsx, frontend/account/config/OptionsForm.tsx, backend/internal/application/process/trans_save_rules.go:30 |
| 8 | งวดบัญชี menu_account_period |
erp_account_period — งวดบัญชี (เปิด/ปิดงวด) | จำเป็น: ไม่มีงวด = บันทึกไม่ได้ทุกเอกสาร | backend/internal/application/process/master_detail_specs.go:473, backend/internal/application/process/period.go:17 |
| 9 | ผังบัญชี | ผังบัญชี (gl_chart_of_account) | GL มาตรฐานหารหัสตามลำดับ (เช่น เงินสด 1111/1110/1100, ธนาคาร 1112, ลูกหนี้ 1121, เจ้าหนี้ 2111, ซื้อ 5111, ขาย 4111, ภาษีซื้อ 1154, ภาษีขาย 2134) · สร้างให้อัตโนมัติแค่ 212015 และ 1122-01 | backend/internal/application/process/service.go:1755-1772, :1785-1792, :1658, :2244-2248 |
| 10 | รูปแบบเลขที่เอกสารและ template GL (master/DocFormatScreen.tsx) |
erp_doc_format — รูปแบบ/ชนิดเอกสารและเลขที่รัน, erp_doc_format_gl — เทมเพลตลงบัญชี GL ต่อรูปแบบเอกสาร | เลขที่ใบใหม่และใบยกเลิกออกจากรูปแบบ · template GL ใช้ก่อนสูตรมาตรฐาน | frontend/account/master/DocFormatScreen.tsx, backend/internal/application/process/doc_cancel.go:391, เครื่องมือลงบัญชีตามรูปแบบ GL (GL Template Engine) |
| 11 | คลัง/ที่เก็บ หน่วยนับ สินค้า (WarehouseScreen.tsx, UnitScreen.tsx, ItemScreen.tsx) |
ic_inventory, ic_unit_use และตารางคลัง/ที่เก็บ |
บรรทัดเอกสารต้องมีรหัสสินค้าและหน่วยนับที่มีจริง ("ไม่พบรหัสสินค้า", "ไม่พบหน่วยนับ") และต้องกรอกคลัง/ที่เก็บ ("ป้อนข้อมูลคลังสินค้าไม่ครบ") | backend/internal/application/process/trans_lines_check.go:169, :188, :257, :260, frontend/account/master/WarehouseScreen.tsx |
| 12 | ลูกค้า/ผู้จำหน่าย (CustomerScreen.tsx, SupplierScreen.tsx) |
ทะเบียนลูกหนี้/ลูกค้า (ar_customer), รายละเอียดเงื่อนไขลูกหนี้ (ar_customer_detail), ทะเบียนเจ้าหนี้/ผู้ขาย (ap_supplier), รายละเอียดเงื่อนไขเจ้าหนี้ (ap_supplier_detail) | เอกสารซื้อ/ขายต้องมีรหัสคู่ค้า | backend/internal/application/process/trans_validate.go:216-232 |
| 13 | ธนาคาร/สมุดบัญชี | erp_bank / erp_bank_branch — ธนาคารและสาขาธนาคาร, erp_pass_book — สมุดเงินฝาก/บัญชีธนาคารของบริษัท | ใช้กับฝาก/ถอน/โอน/เช็ค | backend/internal/application/process/service.go:2064, :2221 |
| 14 | ยอดยกมา: สต็อก 54 สินค้า/วัตถุดิบ คงเหลือยกมา (Stock Beginning Balance), เจ้าหนี้ 81/83/85 ตั้งหนี้/เพิ่มหนี้/ลดหนี้ยกมา เจ้าหนี้ (AP Beginning Balance), ลูกหนี้ 93/95/97 ตั้งหนี้/เพิ่มหนี้/ลดหนี้ยกมา ลูกหนี้ (AR Beginning Balance), เงินสด/ธนาคาร 602/604 ยกมาเงินสด / เงินฝากธนาคารยกมา (Cash & Bank Beginning Balance), เช็คยกมา 405/406 | ic_trans, cb_chq_list | ยอดยกมาเหล่านี้ไม่ลง GL อัตโนมัติ (54/62/64, 81-85/93-97, 90xx) · เจ้าหนี้/ลูกหนี้ยกมาเป็นหนี้ใน apDebtWhere/arDebtWhere |
backend/internal/application/process/service.go:1737-1739, backend/internal/application/process/docs.go:599-608, backend/internal/application/process/cheque_forward.go:10 |
จุดตรวจสอบ/validation
- ต้องระบุผู้สร้างฐานข้อมูล ไม่เช่นนั้นตอบ "กรุณาระบุผู้สร้างฐานข้อมูล" (
workspace_google.go:587) - ชื่อฐานต้องไม่ซ้ำกับใน
sml_database_list(workspace_google.go:343-358) - บันทึกเอกสารใบแรกต้องผ่านทุกด่านของ
checkTransScreenSave(trans_validate.go:43):- งวดบัญชี
- เลขที่เอกสาร
- สาขา
- แผนก
- คู่ค้า
- สินค้า/คลัง
admin/handler.go:467(CreateDatabase) เป็นการลงทะเบียนอย่างเดียว ไม่ได้สร้าง database จริง (ต่างจากเส้นทาง workspace)
ข้อผิดพลาดที่พบบ่อยตามโค้ด
- ลืมสร้างงวดบัญชี → ทุกเอกสารขึ้น "ได้ถูกปิดงวดไปแล้ว หรือยังไม่ได้กำหนดงวดบัญชี" (
period.go:53-61) - ผังบัญชีไม่ครบ →
resolveChartAccountใช้รหัสตัวแรกเป็นทั้งรหัสและชื่อ GL จึงลงรหัสที่ไม่มีในผังโดยไม่ error (service.go:1769-1771) ถ้าไม่ระบุรหัสเลยจะได้ "9999 บัญชีพัก" (service.go:1772) - seed ล้มเงียบ: ทุกคำสั่ง seed ไม่สนใจ error ถ้าโครงสร้างต้นแบบเปลี่ยน ฐานใหม่อาจไม่มีผู้ใช้/ออปชันโดยไม่มีข้อความ (
workspace_google.go:503-527) - ผู้ใช้ที่ seed ได้รหัสผ่านเริ่มต้นที่ฝังในโค้ด ควรเปลี่ยนทันทีหลังสร้าง (ไม่ระบุค่าในโน้ตนี้ตามกฎความลับ) (
workspace_google.go:517-527) - ไม่ seed (ไม่พบในโค้ด):
erp_doc_format,gl_chart_of_account,erp_account_period, คลัง, หน่วยนับ, ลูกค้า, ผู้จำหน่าย - ไม่พบ wizard ตั้งค่าบริษัทแบบทีละขั้น ต้องเปิดจอ master ทีละจอเอง
ที่มาในโค้ด
backend/internal/adapter/inbound/http/admin/workspace_google.go:343,:395-527,:533-657— สร้างฐาน, clone, seed, ลงทะเบียนbackend/internal/adapter/inbound/http/admin/handler.go:113,:467—CreateProvider,CreateDatabase(registry)backend/internal/adapter/inbound/http/router.go:240— route สร้างฐานของ workspacebackend/internal/application/process/service.go:796,:870-876,:962—erpSchemaSQL,erp_initialbackend/internal/application/process/service.go:1658,:1737-1739,:1755-1772,:1785-1792,:2244-2248— ผังบัญชีที่ GL ต้องใช้backend/internal/application/process/period.go:17,:53-61— งวดบัญชีbackend/internal/application/process/trans_validate.go:43,:216-232— ด่านตรวจตอนบันทึกbackend/internal/application/process/trans_lines_check.go:169,:188,:257,:260— สินค้า/หน่วย/คลังbackend/internal/application/process/master_detail_specs.go:473— จองวดบัญชีfrontend/account/config/CompanyProfileForm.tsx,frontend/account/config/OptionsForm.tsx,frontend/account/master/*.tsx— จอข้อมูลหลัก