85 lines
3.5 KiB
Markdown
85 lines
3.5 KiB
Markdown
# Construction Installment Calculator — Design Spec
|
||
|
||
Date: 2026-05-28
|
||
|
||
## Overview
|
||
|
||
Single HTML file tool for calculating construction project payment installments (งวดงาน). Users input contract details and edit installment structure; the page calculates dates, amounts, and cumulative totals, then exports to Excel.
|
||
|
||
## Inputs (top form)
|
||
|
||
| Field | Type | Description |
|
||
|---|---|---|
|
||
| วงเงินสัญญา | Number | Total contract amount (บาท) |
|
||
| วันเริ่มก่อสร้าง | Date | Construction start date |
|
||
| สัดส่วน งปม. (%) | Number | Budget money percentage (default 95) |
|
||
| สัดส่วนเงินนอก (%) | Number | Outside budget percentage (default 5); auto-fills to 100 - งปม% |
|
||
| จำนวนงวด | Number | Number of installments; changing this regenerates table rows |
|
||
|
||
When จำนวนงวด = 27, pre-fill the standard structure from the Excel template (see below).
|
||
|
||
## Installment Structure (fixed template for 27 งวด)
|
||
|
||
| งวดที่ | วัน | ร้อยละ |
|
||
|---|---|---|
|
||
| 1 | 20 | 3.80 |
|
||
| 2–5 | 20 | 3.70 |
|
||
| 6–24 | 30 | 3.70 |
|
||
| 25–27 | 40 | 3.70 |
|
||
|
||
Total: 790 days, 100.00%
|
||
|
||
For other installment counts, rows are generated blank (days=0, %=0) for user to fill in.
|
||
|
||
## Table Columns
|
||
|
||
| Column | Editable? | Calculation |
|
||
|---|---|---|
|
||
| งวดที่ | No | Sequential 1..n |
|
||
| จำนวนวัน | Yes | User input |
|
||
| ร้อยละ (%) | Yes | User input |
|
||
| วันส่งมอบงาน | No | startDate + cumulative days |
|
||
| รวม (บาท) | No | contractAmount × % / 100 |
|
||
| เงิน งปม. (บาท) | No | รวม × งปม% / 100 |
|
||
| เงินนอก (บาท) | No | รวม × เงินนอก% / 100 |
|
||
| รวมสะสม (บาท) | No | Cumulative รวม |
|
||
| งปม. สะสม (บาท) | No | Cumulative เงิน งปม. |
|
||
| เงินนอก สะสม (บาท) | No | Cumulative เงินนอก |
|
||
| ลบ | — | Button to remove row |
|
||
|
||
## Summary Cards (above table)
|
||
|
||
- วงเงินสัญญา
|
||
- เงิน งปม. (งปม%×contract)
|
||
- เงินนอก (เงินนอก%×contract)
|
||
- รวมร้อยละ (sum of all % rows) — shown in red if ≠ 100%, green if = 100%
|
||
- วันสิ้นสุดสัญญา (startDate + sum of all days)
|
||
|
||
## Behavior
|
||
|
||
- **Live recalculation**: every change to วัน, %, or header inputs recalculates all derived columns instantly (no Calculate button needed)
|
||
- **Add row**: "+ เพิ่มงวด" button appends a blank row at the bottom
|
||
- **Delete row**: ✕ button removes that row; remaining rows renumber
|
||
- **จำนวนงวด input**: changing it regenerates rows (27 → template, other → blank rows); warns user before clearing existing data
|
||
- **Validation**: total % card turns red/green; Export button disabled if total % ≠ 100%
|
||
|
||
## Excel Export
|
||
|
||
Uses SheetJS (xlsx CDN). Exported file includes:
|
||
- Sheet name: "งวดงาน"
|
||
- All 10 data columns + header row
|
||
- Summary rows at top (contract amount, dates, totals)
|
||
- Filename: `งวดงาน_YYYYMMDD.xlsx`
|
||
|
||
## Architecture
|
||
|
||
- Single `index.html` file
|
||
- Vanilla JS (no framework)
|
||
- SheetJS loaded from CDN for Excel export
|
||
- Thai date display in Buddhist Era (พ.ศ.)
|
||
- No backend, no build step required
|
||
|
||
## File Location
|
||
|
||
`/Users/nut.looknut/Project/rmutr/construction-installment-calculator/index.html`
|