Bỏ qua menu, tới nội dung
Thành viên The MONA Group
Thành viên The MONA Group
Sản phẩm và viết theo yêu cầu
1900 636 648Tư vấn miễn phí, 8h–22h
MONA OS 2.0Hệ thống quản trị MONA tự phát triển, nối 7 phần mềm nội bộ về một dữ liệu, có Gấu Quản Trị trả lời câu hỏi điều hành.7 phần mềm1 trục dữ liệu8 AI AgentXem MONA OS hoạt động
Dự án giáo dụcThe IELTS WorkshopPhần mềm quản lý chuỗi 11 cơ sở luyện thi, kèm app cho học viên20238 tháng12 ngườiXem hồ sơ dự án Xem thêm dự án Khoa Y
Dự án bán lẻHình minh hoạ gấu MONA bán trang sức tại quầy kính, cạnh màn hình bán hàng và tồn khoNgọc Thành JewelryPhần mềm quản lý chuỗi cửa hàng trang sức, tích hợp xuất hoá đơn20246 tháng7 ngườiXem hồ sơ dự án
Dự án sản xuấtHình minh hoạ gấu MONA hướng dẫn công nhân học bài trên phần mềm đào tạo trong phòng họp nhà máyPolytex Far Eastern Việt NamPhần mềm đào tạo công nhân viên chạy trong mạng nội bộ nhà máy20234 tháng8 ngườiXem hồ sơ dự án
Dự án nhân sựHình minh hoạ gấu MONA đứng lớp đào tạo cho bác sĩ, điều dưỡng bằng phần mềm học trực tuyếnBệnh viện Hoàn Mỹ Sài GònViệc đào tạo nhân sự chuyển từ Excel sang phần mềm MONA viết riêng20247 tuần13 moduleXem hồ sơ dự án
Sản phẩm có sẵnHình minh hoạ gấu MONA phục vụ bàn, khách quét mã QR trên bàn để gọi mónnhahang.aiGọi món tại bàn bằng mã QR, kết nối bếp, quản lý bàn, định lượng nguyên liệuNhà hàngQuán ănChuỗi ăn uốngXem nhahang.ai
Sản phẩm có sẵnMONA HouseTự lập hoá đơn tiền phòng, gửi mã QR qua Zalo, báo có khi khách chuyển khoảnNhà trọCăn hộ cho thuêXem MONA House
Sản phẩm có sẵnMONA NHTQĐặt hàng Taobao, 1688, Tmall, ví khách hàng và theo dõi vận đơn cho công ty nhập hàngTaobao1688TmallXem MONA NHTQ
Tư vấn miễn phí, 8h–22h mỗi ngày
Kiến thức phần mềm

Tính tiền điện nước nhà trọ trong phần mềm: bậc thang, chốt số công tơ và đồng hồ quay vòng

Lê Minh NhựtCập nhật · Đăng · 15 phút đọc

Tính tiền điện nước nhà trọ trong phần mềm: bậc thang, chốt số công tơ và đồng hồ quay vòng

Tiền điện của một dãy trọ ra đúng khi phần mềm làm bốn việc theo thứ tự: tính số kWh từ hai lần chốt công tơ có xử lý đồng hồ quay vòng, nhân định mức từng bậc với số hộ rồi chia bậc, tách kỳ chốt tại ngày đổi giá, và chia hóa đơn về từng phòng bằng số nguyên đồng. Tổng thu của các phòng không được vượt hóa đơn của Tập đoàn Điện lực Việt Nam (EVN). Từ 01/11/2026 biểu giá điện sinh hoạt có 5 bậc theo Quyết định 2892/QĐ-BCT, từ 1.901 đến 3.844 đồng/kWh chưa thuế; văn bản và số liệu trong bài tra ngày 02/11/2026. Bộ hàm Python 3.9 bên dưới dùng module decimal, và mọi kết quả in ra là kết quả của lần chạy thật.

Ví dụ, kỳ chốt từ 15/10 đến 15/11/2026 có 17 ngày theo biểu 6 bậc cũ và 14 ngày theo biểu 5 bậc mới, nên phần mềm phải tính hai biểu trong một hóa đơn.

Biểu giá và quy định cần đưa vào bảng cấu hình

Quyết định 2892/QĐ-BCT của Bộ Công Thương ký ngày 31/10/2026 và áp dụng từ ngày 01/11/2026. Cùng ngày, EVN thông báo giá bán lẻ điện bình quân mới là 2.159,9037 đồng/kWh chưa thuế, giảm 2% so với mức trước đó (thông cáo của EVN). Tra ngày 02/11/2026, đây là văn bản mới nhất về giá bán lẻ điện, và không thấy văn bản nào mới hơn.

Thông cáo EVN ngày 31/10/2026 nêu Quyết định 2892/QĐ-BCT và giá bình quân 2.159,9037 đồng/kWh
Đoạn thông cáo của EVN nêu số quyết định, ngày ban hành và giá bình quân mới. Nguồn: evn.com.vn, chụp ngày 02/11/2026.

Biểu sinh hoạt ở Mục 4 Phụ lục của quyết định gồm 5 bậc, giá chưa gồm thuế giá trị gia tăng:

Bậc Sản lượng mỗi tháng Giá (đồng/kWh)
1 Đến 100 kWh 1.901
2 Từ 101 đến 200 kWh 2.289
3 Từ 201 đến 400 kWh 2.894
4 Từ 401 đến 700 kWh 3.456
5 Từ 701 kWh trở lên 3.844

Số liệu từng bậc đọc trên bản Quyết định 2892 đăng ở luatvietnam.vn (trang này chặn công cụ tự động, cần mở bằng trình duyệt) và khớp với bản tin của VTV ngày 01/11/2026. Bản PDF gốc của Bộ Công Thương chưa tải được ở thời điểm tra, nên phần mềm cần cho nhập hóa đơn EVN làm số chuẩn và dùng bộ hàm dưới đây để đối chiếu, không dùng thay hóa đơn. Biểu 6 bậc theo Quyết định 1279/QĐ-BCT (hiệu lực 10/05/2025) vẫn phải nằm trong cấu hình, vì kỳ chốt có ngày trước 01/11/2026 tính theo biểu đó. Giá chưa thuế các bậc đọc trên bản Quyết định 1279 ở luatvietnam.vn: 1.984, 2.050, 2.380, 2.998, 3.350 và 3.460 đồng/kWh, với các cận 50, 100, 200, 300 và 400 kWh.

Về quy định thu của người thuê, nguồn là Thông tư 60/2025/TT-BCT của Bộ Công Thương ngày 02/12/2025. Thông tư có hiệu lực từ 02/12/2025, riêng điểm c khoản 5 Điều 12 về sinh viên và người lao động thuê nhà chỉ có hiệu lực từ lần điều chỉnh giá bán lẻ bình quân gần nhất sau Quyết định 14/2025/QĐ-TTg (khoản 1 Điều 21). MONA hiểu lần điều chỉnh đó là ngày 01/11/2026, đây là cách đọc của MONA. Ba quy tắc của điểm c cần mã hóa từ ngày này:

  • Người thuê không ký hợp đồng trực tiếp với bên bán điện thì tổng tiền chủ nhà thu không vượt hóa đơn hằng tháng (gạch đầu dòng thứ tư của điểm c).
  • Chủ nhà kê khai đủ số người thì cứ 4 người là một định mức (gạch đầu dòng thứ ba).
  • Hợp đồng thuê dưới 12 tháng mà chủ nhà không kê khai đủ người thì toàn bộ sản lượng tính theo giá bậc 2, tức 2.289 đồng/kWh (gạch đầu dòng thứ hai).

Phần giải thích quy định, mức phạt và ví dụ cho chủ trọ nằm ở bài giá điện nhà trọ 2026; bài đó viết khi biểu 6 bậc còn hiệu lực nên bảng giá trong đó dùng đến hết 31/10/2026.

Cấu hình giá là một danh sách, mỗi biểu một dòng có ngày bắt đầu áp dụng. Khi giá đổi, thêm dòng mới và giữ nguyên dòng cũ:

# Mỗi biểu giá: (ngày bắt đầu áp dụng, [(cận trên tích lũy của bậc, đồng/kWh), ...]); cận None = bậc cuối.
TARIFFS = [
    (date(2025, 5, 10), [(50, D(1984)), (100, D(2050)), (200, D(2380)),
                         (300, D(2998)), (400, D(3350)), (None, D(3460))]),  # QĐ 1279/QĐ-BCT
    (date(2026, 11, 1), [(100, D(1901)), (200, D(2289)), (400, D(2894)),
                         (700, D(3456)), (None, D(3844))]),                  # QĐ 2892/QĐ-BCT
]

Chốt số công tơ và đồng hồ quay vòng

Công tơ có N chữ số chỉ đếm đến 10 mũ N trừ 1 rồi quay về 0. Khi số chốt mới nhỏ hơn số chốt cũ, có ba khả năng: đồng hồ đã quay vòng, người nhập gõ nhầm, hoặc công tơ đã bị thay. Hàm dưới đây coi đó là quay vòng, rồi chặn kết quả vượt ngưỡng kWh hợp lý của một phòng và buộc người quản lý xác nhận. Số chữ số của từng công tơ là cấu hình của công tơ đó, và ngưỡng 3.000 kWh là số MONA đặt cho phòng trọ, không lấy từ văn bản nào.

def usage(prev, curr, digits, max_kwh=3000):
    """Số đã dùng giữa hai lần chốt; công tơ `digits` chữ số quay vòng về 0 sau khi qua 10**digits - 1."""
    used = curr - prev if curr >= prev else curr + 10 ** digits - prev
    if used > max_kwh:  # chốt nhầm số, hay công tơ bị thay mới: không tự đoán
        raise ValueError(f"{prev} -> {curr}: {used} kWh vượt {max_kwh}, kiểm lại hoặc ghi 'thay công tơ'")
    return used

Kết quả chạy cho công tơ 4 chữ số, công tơ 5 chữ số, hai ca không quay vòng, một ca gõ nhầm và một ca thay công tơ:

== 1. Công tơ quay vòng
4 chữ số 9990 -> 0020: 30  OK
5 chữ số 99950 -> 00120: 170  OK
không quay vòng 1200 -> 1350: 150  OK
không dùng 500 -> 500: 0  OK
chốt nhầm 1234 -> 1230: 1234 -> 1230: 9996 kWh vượt 3000, kiểm lại hoặc ghi 'thay công tơ'
  nếu không chặn, 9996 kWh một định mức tính ra: 37768424 đồng
== 2. Thay công tơ: số cuối công tơ cũ 8.740, số đầu công tơ mới 0, chốt kỳ trước 8.700, chốt nay 25
kWh: 65

Ca gõ nhầm 1234 thành 1230 cho ra 9.996 kWh, và hàm từ chối thay vì in hóa đơn 37.768.424 đồng cho một phòng một định mức. Ca thay công tơ tách làm hai đoạn: từ số chốt cũ đến số cuối của công tơ cũ, cộng từ số đầu của công tơ mới đến số chốt nay. Ví dụ 8.700 đến 8.740 và 0 đến 25 cho 65 kWh. Ngày chốt lấy theo múi giờ của dãy trọ; vì sao chốt lúc 23:30 có thể lọt sang ngày hôm sau, xem bài về múi giờ và ngày chốt sổ.

Chia bậc theo định mức, theo số ngày và theo ngày đổi giá

Dãy trọ dùng chung một công tơ tổng được tính định mức chung bằng định mức của từng bậc nhân với số hộ dùng chung công tơ, theo khoản 2 Điều 12 Thông tư 60/2025/TT-BCT. Khoản 5 cùng điều quy ước 1 người là 1/4 định mức, nên 24 người là 6 định mức và bậc 1 của cả dãy dài 600 kWh.

Khoản 5 Điều 12 Thông tư 60/2025/TT-BCT về điện sinh hoạt cho người thuê nhà
Khoản 5 Điều 12 Thông tư 60/2025/TT-BCT: hợp đồng mua điện duy nhất, định mức theo số người, trần tổng thu bằng hóa đơn. Nguồn: bản PDF toàn văn thông tư, chụp ngày 02/11/2026.

Hàm tier_cost nhận số kWh, danh sách bậc, số định mức và phần tháng của kỳ, trả về tiền chưa làm tròn:

def tier_cost(kwh, tiers, units, fraction):
    """Tiền điện (chưa làm tròn) của `kwh`; mỗi bậc nhân `units` định mức, rồi nhân `fraction` tháng."""
    kwh, cost, low = D(kwh), D(0), D(0)
    for upper, price in tiers:
        top = None if upper is None else D(upper) * D(units) * fraction
        chunk = kwh - low if top is None else min(kwh, top) - low
        if chunk <= 0:
            break
        cost += chunk * price
        low = kwh if top is None else top
    return cost

Ba ca kiểm cho một phòng một định mức và một dãy 24 người, tính đủ tháng:

== 3. Bậc thang biểu 5 bậc (từ 01/11/2026), 1 định mức, đủ tháng
135 kWh: 270215  OK
100 kWh (sát cận bậc 1): 190100  OK
750 kWh (qua cả 5 bậc): 2226800  OK
== 4. Công tơ tổng 24 người = 6 định mức, 1.440 kWh, kỳ 01/11 -> 01/12/2026
hóa đơn chưa thuế: 3208560  OK
đơn giá bình quân: 2228.17

Kỳ không tròn tháng xảy ra khi cấp điện mới, đổi chủ hợp đồng, chấm dứt hợp đồng hoặc đổi ngày ghi chỉ số. Khoản 11 Điều 12 quy định các trường hợp này điều chỉnh mức sử dụng của từng bậc theo số ngày thực tế của kỳ. Thông tư không ghi số ngày chia cho hộ sinh hoạt; điểm d khoản 2 Điều 14, áp cho đơn vị bán lẻ điện nông thôn, chia cho số ngày thực tế trong tháng tính toán. MONA dùng cách chia đó cho hộ sinh hoạt, đây là cách chọn của MONA và chưa đối chiếu với điện lực:

def add_month(d):
    y, m = d.year + (d.month == 12), d.month % 12 + 1
    return date(y, m, min(d.day, monthrange(y, m)[1]))


def quota_months(start, end):
    """Số 'tháng định mức' của kỳ: đúng một tháng lịch = 1, ngoài ra lấy số ngày chia số ngày của tháng chứa ngày dùng điện cuối cùng."""
    if end == add_month(start):
        return D(1)
    last = end - timedelta(days=1)
    return D((end - start).days) / D(monthrange(last.year, last.month)[1])

Một hợp đồng mới từ 11/11 đến 01/12/2026 dài 20 ngày, tháng 11 có 30 ngày nên bậc co lại còn 20/30:

== 5. Kỳ không tròn tháng (hợp đồng mới 11/11 -> 01/12/2026, 20 ngày, 80 kWh, 1 định mức)
tháng định mức: 0.6667
hóa đơn: 157253 | nếu quên co định mức: 152080

Quên co định mức làm hóa đơn thấp hơn 5.173 đồng cho 80 kWh so với tính đúng.

Phòng đổi số người giữa tháng cần định mức bình quân theo người-ngày, mỗi người tính 1/4 định mức:

def person_units(stays, month_days):
    """Định mức bình quân của phòng: mỗi người 1/4 định mức, tính theo số ngày ở. stays = [(số người, số ngày)]."""
    return sum(D(n) / 4 * D(d) for n, d in stays) / D(month_days)

Phòng có 3 người trong 10 ngày rồi 4 người trong 20 ngày của tháng 30 ngày:

== 6. Định mức theo người-ngày: 3 người 10 ngày rồi 4 người 20 ngày, tháng 30 ngày
định mức: 0.9167  OK

Ca khó nhất là kỳ chốt vắt qua ngày đổi giá. Khoản 8 Điều 12 yêu cầu tính định mức của từng bậc riêng cho từng khoảng giá theo số ngày thực tế, dùng số đo xa nếu có và nội suy nếu không; văn bản liệt kê các thông số nhưng không in công thức. Hàm bill dưới đây chia kWh theo số ngày của mỗi khoảng (nội suy tuyến tính, cách MONA hiểu), mỗi khoảng dùng biểu giá của ngày bắt đầu khoảng đó:

def tariff_at(day):
    return [t for start, t in TARIFFS if start <= day][-1]


def bill(start, end, kwh, units=1):
    """Hóa đơn chưa thuế của một kỳ ghi chỉ số, tách theo ngày đổi giá; kWh chia theo số ngày (nội suy tuyến tính)."""
    days = (end - start).days
    months = quota_months(start, end)
    cuts = [start] + [s for s, _ in TARIFFS if start < s < end] + [end]
    total = D(0)
    for a, b in zip(cuts, cuts[1:]):
        share = D((b - a).days) / D(days)
        total += tier_cost(D(kwh) * share, tariff_at(a), units, months * share)
    return total.quantize(D(1), ROUND_HALF_UP)
Khoản 8 đến khoản 11 Điều 12 Thông tư 60/2025/TT-BCT về tính bậc theo số ngày
Khoản 8 đến khoản 11 Điều 12 Thông tư 60/2025/TT-BCT: ngày chốt không trùng ngày đổi giá và kỳ không tròn tháng. Nguồn: bản PDF toàn văn thông tư, chụp ngày 02/11/2026.

Kỳ 15/10 đến 15/11/2026 của một phòng một định mức dùng 310 kWh có 17 ngày theo biểu cũ và 14 ngày theo biểu mới. Kết quả chạy:

== 7. Kỳ ghi chỉ số vắt qua ngày đổi giá 01/11/2026: 15/10 -> 15/11, 310 kWh, 1 định mức
hóa đơn chưa thuế: 756895
  nếu áp trọn kỳ biểu cũ: 773000
  nếu áp trọn kỳ biểu mới: 737340

So sánh ba cách tính cho cùng kỳ đó, tiền chưa thuế:

Cách tính Tiền (đồng) Lệch so với tách theo ngày
Áp trọn kỳ biểu 6 bậc cũ 773.000 cao hơn 16.105
Tách theo ngày đổi giá (hàm bill) 756.895 chuẩn so sánh
Áp trọn kỳ biểu 5 bậc mới 737.340 thấp hơn 19.555

Áp một biểu cho cả kỳ lệch từ 16.105 đến 19.555 đồng so với tách theo ngày ở ca một phòng này, đủ để người thuê hỏi lại. Vì công thức nội suy của EVN không in trong văn bản, hóa đơn của EVN luôn là số chuẩn; nếu kết quả của hàm lệch hóa đơn quá ngưỡng đã cấu hình thì phần mềm cần báo để người quản lý xem lại số chốt hoặc số người.

Chia hóa đơn về từng phòng và làm tròn đến đồng

Khi người thuê không ký hợp đồng trực tiếp với bên bán điện, tổng tiền chủ nhà thu không được vượt hóa đơn hằng tháng (điểm c khoản 5 Điều 12, ảnh ở trên). Làm tròn từng phòng rồi cộng lại không bảo đảm điều này. Với dãy 10 phòng, hóa đơn 3.208.560 đồng và 1.440 kWh, cả hai kiểu làm tròn phổ biến đều cho tổng 3.208.561 đồng, vượt hóa đơn 1 đồng.

Danh sách chế độ làm tròn của module decimal trong tài liệu Python 3.9
Các chế độ làm tròn của module decimal; ngữ cảnh mặc định dùng ROUND_HALF_EVEN. Nguồn: docs.python.org, chụp ngày 02/11/2026.

Hàm split_bill cắt xuống đồng cho từng phòng rồi phát phần đồng còn dư, mỗi phòng một đồng, bắt đầu từ phòng có phần lẻ lớn nhất, nên tổng luôn đúng bằng hóa đơn:

def split_bill(total, room_kwh):
    """Chia `total` đồng về các phòng theo kWh; làm tròn đồng, tổng các phòng đúng bằng `total`."""
    kwh_sum = sum(D(v) for v in room_kwh.values())
    exact = {r: D(total) * D(v) / kwh_sum for r, v in room_kwh.items()}
    share = {r: x.to_integral_value(rounding="ROUND_FLOOR") for r, x in exact.items()}
    left = int(D(total) - sum(share.values()))
    for r in sorted(exact, key=lambda r: exact[r] - share[r], reverse=True)[:left]:
        share[r] += 1
    return share

Kết quả chạy với 10 phòng, kèm hai kiểu làm tròn từng phòng để so sánh:

== 8. Chia hóa đơn về phòng, làm tròn đồng
tổng kWh: 1440 | hóa đơn: 3208560
{'P101': Decimal('467915'), 'P102': Decimal('218360'), 'P103': Decimal('296346'), 'P104': Decimal('416667'), 'P105': Decimal('169341'), 'P106': Decimal('314171'), 'P107': Decimal('265152'), 'P108': Decimal('450090'), 'P109': Decimal('142603'), 'P110': Decimal('467915')}
tổng các phòng: 3208560  OK
  làm tròn từng phòng ROUND_HALF_EVEN: tổng 3208561, lệch 1
  làm tròn từng phòng ROUND_HALF_UP: tổng 3208561, lệch 1
  Decimal('2.5') về số nguyên: HALF_EVEN = 2 | HALF_UP = 3
  float: 0.1+0.2 = 0.30000000000000004 | Decimal: 0.3

Công tơ phụ cộng lại thấp hơn công tơ tổng khi có hao hụt đường dây, đèn hành lang hay máy bơm dùng chung. Có hai cách xử lý: chia hao hụt theo tỉ lệ kWh của các phòng, hoặc tách thành một dòng phí chung. Cách đầu giữ tổng thu bằng hóa đơn mà không phải đặt thêm khoản phí; cách sau giúp người thuê nhìn rõ hao hụt nhưng chủ trọ phải tự quy ước mức chia. Hàm trên chọn cách đầu. Với công tơ tổng 1.500 kWh và các phòng cộng lại 1.440 kWh:

== 9. Công tơ phụ cộng lại thấp hơn công tơ tổng (hao hụt): tổng 1.500 kWh, các phòng 1.440 kWh
hóa đơn: 3382200 | tổng các phòng: 3382200 | P101: 493238
đơn giá P101 trên mỗi kWh: 2348.75 (so với 2254.80 bình quân của công tơ tổng)

Phòng P101 trả 2.348,75 đồng/kWh trong khi đơn giá bình quân của công tơ tổng là 2.254,80; phần chênh là phần hao hụt chia về phòng, và phiếu thu cần ghi riêng hai số này.

Tiền nước dùng chung hàm chốt số, khác ở chỗ đơn giá

Đồng hồ nước cũng quay vòng, nên hàm usage dùng lại nguyên cho số khối. Phần còn lại là đơn giá, và đó là chỗ MONA chưa có số chắc. Văn bản hợp nhất 57/VBHN-BXD của Thông tư 01/2008/TT-BXD (ký ngày 03/07/2026, đọc ngày 02/11/2026) ghi giá nước sạch do Ủy ban nhân dân tỉnh, thành phố phê duyệt. Văn bản cũng cho đơn vị cấp nước quy đổi khối lượng nước tối thiểu theo hộ 4 người, 4 m³ mỗi hộ mỗi tháng, khi nhiều hộ dùng chung một đồng hồ. Cả hai nội dung dành cho đơn vị cấp nước. MONA chưa tìm thấy văn bản gốc quy định mức chủ trọ được thu tiền nước của người thuê; các bài báo nhắc Điều 10 Nghị định 87/2024/NĐ-CP về xử phạt bán cao hơn giá nhà nước định, nhưng MONA chưa đọc bản gốc của điều đó.

Vì vậy phần mềm không cài sẵn đơn giá hay trần giá nước. Đơn giá theo kỳ, kèm cột ghi số quyết định giá nước của tỉnh mà chủ trọ nhập, là cách an toàn; phí theo đầu người tính theo số người-ngày, cùng tinh thần định mức theo ngày ở trên:

def water_charge(prev, curr, digits, price_per_m3, person_days=0, per_head=0, month_days=30):
    """Tiền nước = số khối x đơn giá + phí đầu người theo người-ngày. Đơn giá lấy từ quyết định giá nước của tỉnh."""
    m3 = D(curr - prev if curr >= prev else curr + 10 ** digits - prev)
    flat = D(per_head) * D(person_days) / D(month_days)
    return (m3 * D(price_per_m3) + flat).quantize(D(1), ROUND_HALF_UP)

Số thử trong ca kiểm là 10.000 đồng/m³ và 30.000 đồng cho mỗi người mỗi tháng, chỉ để minh họa phép tính, không phải giá thật:

== 10. Tiền nước (số thử: 10.000 đ/m3 và 30.000 đ/người/tháng, không phải giá thật)
đồng hồ 4 chữ số 9996 -> 0004: 8 m3
2 người ở trọn tháng (60 người-ngày): 140000
1 người ở 30 ngày + 1 người ở 10 ngày (40 người-ngày): 120000

Hỏi đáp

Công tơ quay vòng khác công tơ bị thay mới ở điểm nào?

Quay vòng cho số chốt mới nhỏ hơn số cũ và kWh tính bằng 10 mũ N trừ số cũ cộng số mới; công tơ bị thay cũng cho số mới nhỏ hơn nhưng kWh quy đổi ra lớn bất thường. Hàm usage chặn kết quả trên ngưỡng 3.000 kWh và yêu cầu ghi số cuối của công tơ cũ cùng số đầu của công tơ mới, như ca 8.740 và 25 ở trên. Ví dụ 9990 đến 0020 là 30 kWh khi công tơ có 4 chữ số, còn 1234 đến 1230 là lỗi nhập. Phiếu chốt cần lưu số chữ số của công tơ để tính lại được khi cấu hình đổi.

Làm tròn tiền điện đến đồng hay đến nghìn đồng?

Phần Thông tư 60/2025/TT-BCT đã đọc không nêu quy tắc làm tròn cho phiếu thu của chủ trọ. Bộ hàm làm tròn hóa đơn đến 1 đồng bằng ROUND_HALF_UP và chia về phòng bằng cách cắt xuống rồi phát đồng dư, để tổng bằng hóa đơn; chủ trọ muốn tròn đến nghìn đồng phải bảo đảm tổng sau khi tròn không vượt hóa đơn. Phiếu thu cần ghi số chưa làm tròn của từng phòng và số đồng dư được phát. Nhờ đó người thuê tự cộng lại ra đúng hóa đơn.

Vì sao dùng decimal thay vì số thực float?

Tài liệu Python 3.9 nêu số thập phân biểu diễn đúng trong decimal, còn float cho 0.1 + 0.2 ra 0.30000000000000004; ca kiểm in cả hai kết quả. Tiền điện nhân đơn giá với số kWh lẻ rồi cộng từng dòng, nên sai số của float cộng dồn qua từng phòng. Decimal mặc định làm tròn ROUND_HALF_EVEN, nghĩa là 2,5 thành 2, nên hàm tính luôn chỉ định chế độ làm tròn rõ ràng.

Biểu giá đổi giữa kỳ thì phần mềm phải làm gì?

Thêm một dòng vào bảng cấu hình với ngày bắt đầu áp dụng, giữ nguyên dòng cũ, và lưu bản chụp biểu giá đã dùng cùng mỗi hóa đơn đã chốt để đối chiếu lại sau. Hàm bill tự tách kỳ tại ngày đổi giá, như ca 15/10 đến 15/11/2026 cho 756.895 đồng ở trên. Nếu kỳ chốt có thêm một đợt đổi giá nữa, danh sách mốc cắt trong hàm lấy mọi ngày bắt đầu nằm giữa kỳ nên kỳ tự chia thành ba khoảng. Mỗi hóa đơn đã chốt giữ lại biểu giá đã dùng, vì biểu cũ vẫn cần để tính lại kỳ cũ.

Phòng dọn vào giữa tháng thì tính điện thế nào?

Kilowatt giờ của phòng lấy từ số công tơ phụ lúc dọn vào và lúc dọn ra, nên không cần co. Phép co theo ngày áp cho hợp đồng mua điện mới của cả dãy (khoản 11 Điều 12) và cho phí chia theo số người, như hàm person_units với 3 người 10 ngày rồi 4 người 20 ngày cho 0,9167 định mức. Phép tính là (3/4 × 10 + 4/4 × 20) chia 30. Số này dùng cho định mức bình quân của phòng khi dựng lại hóa đơn tổng, còn tiền điện của từng phòng vẫn lấy từ công tơ phụ.

Chủ trọ có từ hai cơ sở trở lên cần bảng giá theo ngày hiệu lực, số chốt kèm ảnh công tơ và phiếu thu tự đối chiếu được trong một phút. MONA Software xây phần mềm quản lý nhà trọ theo quy trình riêng của từng chủ trọ, so sánh các gói có sẵn ở bài phần mềm quản lý nhà trọ, và nhận tư vấn qua hotline 1900 636 648. Dữ liệu đang nằm trong Excel thì xem trước bài chuyển dữ liệu từ Excel sang phần mềm quản lý và bài quản lý phòng trọ bằng Excel hay phần mềm chuyên dụng; các rủi ro thất thoát khác của nhà trọ nằm ở bài rủi ro khi kinh doanh nhà trọ.

Đội MONA gặp khách hàng để khảo sát quy trình trước khi làm phần mềm

Kiến thức phần mềm

Gửi MONA quy trình đang chạy để nhận hướng làm phần mềm

Đội MONA Software khảo sát nghiệp vụ, thiết kế cơ sở dữ liệu, lập trình, bàn giao và đi cùng qua giai đoạn vận hành thử.