Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗แอปบันทึกข้อมูลแบบ บอ.1 สำหรับคำขอปรับปรุงการกำหนดตำแหน่ง สร้างด้วย Flask กับ SQLite และเปิดเป็นหน้าต่างเดสก์ท็อปผ่าน pywebview ได้ หรือ build เป็นไฟล์ .exe ไฟล์เดียวสำหรับ Windows
กรอกข้อมูลแบบ บอ.1 ครบ 5 ส่วน
ส่วนที่ 1 ถึง 3 เพิ่มได้หลายตำแหน่งต่อคำขอ
แนบเอกสารประกอบได้หนึ่งไฟล์ต่อคำขอ รองรับ PDF, Word และ Excel ขนาดไม่เกิน 10 MB
แท็บคำขอทั้งหมด สำหรับแก้ไขและลบคำขอ
แท็บสรุปภาพรวม แสดงกราฟด้วย Chart.js
ส่งออกเป็น CSV, JSON และพิมพ์หรือบันทึกเป็น PDF ทีละคำขอ
หน้าตาตาม DESIGN.md และใช้คำตาม GLOSSARY.md
static/vendor ทั้งหมดcd pos_restructure
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
pyinstaller ใน requirements.txt ใช้เฉพาะตอน build .exe ถ้าแค่รันแอปไม่ต้องติดตั้งก็ได้
มีไฟล์ .bat ให้ดับเบิลคลิก 3 แบบ ทุกไฟล์ใช้ Python ใน .venv ก่อน ถ้าไม่มีจึงใช้ python ของเครื่อง
| ไฟล์ | โหมด | เข้าถึงจาก |
|---|---|---|
run.bat | เดสก์ท็อป เปิดหน้าต่าง pywebview | เครื่องนี้เท่านั้น |
run_browser.bat | เปิดในเว็บเบราว์เซอร์ปกติ | http://127.0.0.1:5050 เครื่องนี้เท่านั้น |
run_server.bat | เซิร์ฟเวอร์ในวง LAN | http://<IP เครื่องนี้>:5050 ทุกเครื่องในเครือข่าย |
ถ้าไม่ได้ติดตั้ง pywebview คำสั่ง python app.py จะรันเป็นเว็บเซิร์ฟเวอร์ที่ http://127.0.0.1:5050 แทน
ข้อควรระวังของโหมด LAN: แอปไม่มีระบบล็อกอิน ทุกคนที่เข้าถึงพอร์ต 5050 ได้จะอ่าน แก้ไข และลบข้อมูลได้ทั้งหมด ใช้เฉพาะในเครือข่ายที่ไว้ใจได้
.venv\Scripts\pyinstaller.exe --noconfirm --onefile --windowed ^
--add-data "templates;templates" ^
--add-data "static;static" ^
--hidden-import webview ^
--name "PosRestructure" app.py
--add-data "static;static" คือไลบรารีหน้าเว็บ ถ้าไม่ใส่บรรทัดนี้ .exe จะไม่มี Bootstrap, Chart.js, Font Awesome และฟอนต์ Noto Sans Thai กับ Sarabun ติดไปด้วย และแท็บสรุปภาพรวมจะใช้งานไม่ได้
ไฟล์ที่ได้อยู่ใน dist\PosRestructure.exe ตอนรัน แอปจะสร้างฐานข้อมูล ไฟล์ log และโฟลเดอร์ uploads ไว้ข้างไฟล์ .exe
pos_restructure/
├── app.py Flask app, API และตัวเปิดหน้าต่าง pywebview
├── templates/index.html หน้าเว็บทั้งหมด (HTML, CSS, JavaScript ในไฟล์เดียว)
├── DESIGN.md ระบบออกแบบของหน้าเว็บ (DESIGN-sap.md, DESIGN-ibm.md คือต้นทาง)
├── GLOSSARY.md ความหมายของคำในโดเมน เช่น คำขอ มติที่ประชุม สถานะคำขอ
├── static/vendor/ Bootstrap, Chart.js, Font Awesome, ฟอนต์ Noto Sans Thai และ Sarabun ในเครื่อง
├── test_api.py เทส regression ของ API และฟังก์ชันในหน้าเว็บ
├── verify_offline.py เปิดหน้าเว็บในเบราว์เซอร์ที่ตัดเน็ต แล้ววัดว่าไลบรารีมาครบ
├── vendor_assets.py ดาวน์โหลดไลบรารีหน้าเว็บมาไว้ใน static/vendor
├── migrate_schema.py ลบคอลัมน์ที่โค้ดไม่ใช้แล้วออกจากฐานข้อมูล
├── cleanup_orphans.py ลบไฟล์ใน uploads/ ที่ไม่มีรายการไหนอ้างถึง
├── run.bat / run_browser.bat / run_server.bat
├── requirements.txt
├── CODE_REVIEW.md ผลรีวิวโค้ดและสถานะการแก้ไขแต่ละข้อ
│
├── pos_restructure.db สร้างอัตโนมัติ (ไม่อยู่ใน git)
├── pos_restructure.log สร้างอัตโนมัติ เก็บ error ที่ไม่คาดคิด (ไม่อยู่ใน git)
└── uploads/ สร้างอัตโนมัติ เก็บไฟล์แนบ (ไม่อยู่ใน git)
ฐานข้อมูล ไฟล์สำรอง log และไฟล์แนบเป็นข้อมูลจริงของหน่วยงาน จึงถูกกันไว้ใน .gitignore ทั้งหมด
ข้อมูลทั้งหมดอยู่ในตาราง positions ตารางเดียวใน pos_restructure.db
sec1_rows, sec2_rows, sec3_rowsp4_ และ p5_file_name และชื่อเดิมใน file_orig_namecreated และ updated เก็บเป็น ISO 8601 ค.ศ. หน้าเว็บแปลงเป็นรูปแบบไทยตอนแสดงผลตอนเริ่มแอป init_db() สร้างตารางและเพิ่มคอลัมน์ที่ขาดให้อัตโนมัติ และแปลง timestamp รูปแบบเก่า DD/MM/YYYY HH:MM เป็น ISO ให้ ไม่ต้องรัน migration เอง
สำรองข้อมูล: ปิดแอปก่อน แล้วคัดลอก pos_restructure.db กับโฟลเดอร์ uploads/ ไปเก็บไว้ด้วยกัน
ทุก endpoint ตอบเป็น JSON ข้อความ error เป็นภาษาไทยในรูป {"ok": false, "error": "..."}
| Method | Path | ใช้ทำอะไร |
|---|---|---|
| GET | /api/positions | ดึงรายการทั้งหมด เรียงจากใหม่ไปเก่า |
| POST | /api/positions | เพิ่มรายการ |
| PUT | /api/positions/<id> | แก้ไขรายการ ตอบ 404 ถ้าไม่มี id นี้ |
| DELETE | /api/positions/<id> | ลบรายการพร้อมไฟล์แนบ |
| DELETE | /api/positions | ลบทุกรายการพร้อมไฟล์แนบทั้งหมด |
| POST | /api/upload | อัปโหลดไฟล์แนบ (multipart field ชื่อ file) |
| GET | /uploads/<ชื่อไฟล์> | เปิดไฟล์แนบ |
| GET | /api/ping | เช็กว่าเซิร์ฟเวอร์ทำงานอยู่ |
คำขอที่เปลี่ยนข้อมูลและส่ง header Origin มาจากเว็บไซต์อื่นจะถูกปฏิเสธด้วย 403 เพื่อกัน CSRF
.venv\Scripts\python.exe test_api.py
เทสใช้ฐานข้อมูลและโฟลเดอร์อัปโหลดชั่วคราว ไม่แตะข้อมูลจริง และจบด้วยสรุปจำนวนเทสที่ผ่าน คืนค่า exit code 1 ถ้ามีเทสไม่ผ่าน
เคสที่ต้องใช้ Node เพื่อรัน JavaScript จากหน้าเว็บจะขึ้น SKIP ถ้าเครื่องไม่มี Node สั่ง --no-skip เพื่อให้เคสที่ข้ามนับเป็นตก ซึ่งเป็นแบบที่ CI ใช้
.venv\Scripts\python.exe test_api.py --no-skip
GitHub Actions รัน test_api.py --no-skip กับ verify_offline.py บน windows-latest ทุก pull request ตั้งค่าอยู่ใน .github/workflows/tests.yml
.venv\Scripts\python.exe verify_offline.py
สคริปต์เปิดแอปบนพอร์ตว่าง แล้วสั่ง Edge หรือ Chrome แบบ headless ให้เปิดหน้านั้นโดยทุกโฮสต์นอกจาก 127.0.0.1 หาที่อยู่ไม่เจอ ซึ่งเป็นสภาพเดียวกับเครื่องที่ไม่มีเน็ต แล้ววัดจากในเบราว์เซอร์ว่า Chart.js, Bootstrap, ไอคอน และฟอนต์ไทยมาครบ ภาพหน้าจอที่ได้อยู่ในโฟลเดอร์ temp สั่งที่อื่นได้ด้วย --shot
ทั้งสองสคริปต์เป็น dry-run โดยค่าเริ่มต้น แสดงแค่สิ่งที่จะทำ ต้องใส่ --apply จึงจะทำจริง
REM ลบไฟล์แนบที่ไม่มีรายการไหนอ้างถึง
.venv\Scripts\python.exe cleanup_orphans.py
.venv\Scripts\python.exe cleanup_orphans.py --apply
REM ลบคอลัมน์ที่โค้ดไม่ใช้แล้ว (สำรองฐานข้อมูลเป็น .bak ให้ก่อนเสมอ)
.venv\Scripts\python.exe migrate_schema.py
.venv\Scripts\python.exe migrate_schema.py --apply
ส่วน vendor_assets.py ดาวน์โหลดไลบรารีหน้าเว็บลง static/vendor ใหม่ทั้งโฟลเดอร์ ต้องต่อเน็ตตอนรัน ใช้เมื่อขึ้นเวอร์ชัน Bootstrap, Chart.js, Font Awesome หรือฟอนต์ Noto Sans Thai และ Sarabun โดยแก้ตาราง ASSETS ในสคริปต์ก่อน แล้วรัน verify_offline.py ซ้ำ
.venv\Scripts\python.exe vendor_assets.py
รายละเอียดทั้งหมดอยู่ใน CODE_REVIEW.md ทั้ง 25 ข้อจากการรีวิวปิดครบแล้ว
ที่ยังเป็นข้อจำกัดของตัวระบบเอง ไม่ใช่ข้อค้างจากการรีวิว คือแอปไม่มีระบบผู้ใช้หรือสิทธิ์การเข้าถึง ไฟล์แนบแต่ละรายการมีได้ไฟล์เดียว และชุดตรวจยังไม่ครอบการวาดกราฟใน Dashboard กับการกรองในตาราง เพราะสองอย่างนี้ต้องขับเบราว์เซอร์จริง ไม่ใช่รันด้วย Node