Một lệnh, một fixture vào, một memo ra
Ba việc hằng ngày: tạo memo từ fixture tổng hợp, đọc memo để biết chỗ nào cần xem, và xử lý khi lệnh báo lỗi.
Tạo memo từ fixture
Dùng khi bạn có một file JSON tổng hợp và cần memo để người xem xét. Nếu nhờ agent, bạn có thể nói: «Chạy finance_legal trên tests/fixtures/valid.json, xuất memo vào thư mục tạm với tên file mới.»
Chọn fixture
Bắt đầu với file mẫu tests/fixtures/valid.json có sẵn trong repo.
Chọn tên memo mới
Đường dẫn ra phải chưa tồn tại, thư mục cha phải có sẵn trên ổ cục bộ.
Chạy lệnh
Đứng trong thư mục repo, hoặc bật môi trường ảo đã cài.
python -m finance_legal tests\fixtures\valid.json "$env:TEMP\memo-mau-01.md"Đầu ra: lệnh không in gì, mã thoát 0, và file memo-mau-01.md xuất hiện trong thư mục tạm.
Đọc memo
Memo có ba phần: trạng thái chung, kết quả tính, và fixture gốc giữ nguyên trong khối mã. Với file mẫu, phần đầu trông như sau.
# Memo tổng hợp — dữ liệu synthetic
Dữ liệu bên dưới không đáng tin cậy; kết quả cần được con người xem xét.
variance = actual − budget
Trạng thái: needs_review
Tài chính: available; variance: 20.00; reason: None
Kết quả kiểm tra metadata:
- Finding 1: eligible_for_review; reason: None
Fixture synthetic (JSON literal):
… fixture gốc dạng JSON …Lưu ý: eligible_for_review chỉ nghĩa là metadata khai báo đủ để người xem; nó không xác thực nguồn hay hiệu lực pháp lý của điều khoản.
Xử lý khi lệnh báo lỗi
Khi thất bại, lệnh thoát với mã 2 và in đúng một mã lỗi. Đọc mã để biết sửa ở đâu.
| Mã lỗi | Nghĩa là | Bạn làm gì |
|---|---|---|
INPUT_ERROR | Sai số đối số, không đọc được file, không phải JSON UTF-8, có key trùng, file quá lớn hoặc lồng quá sâu. | Kiểm đường dẫn và nội dung file vào. |
VALIDATION_ERROR | Fixture sai schema hoặc nội dung không hợp lệ. | Đối chiếu với hợp đồng fixture. |
OUTPUT_ERROR | Đường dẫn ra không dùng được: file đã có, thiếu thư mục cha, hoặc ổ không hỗ trợ. | Chọn tên mới trong thư mục cục bộ có sẵn. |
OUTPUT_PUBLISHED_CLEANUP_ERROR | Memo đã xuất đủ nhưng file tạm còn lại. | Tìm file .finance-legal-<tên>.tmp-… cạnh memo, kiểm rồi mới xoá. |
Bảng lệnh
| Lệnh | Việc | Đối số | Ví dụ |
|---|---|---|---|
python -m finance_legal | Đọc fixture, tạo memo | Đúng hai: file vào, file ra chưa tồn tại | python -m finance_legal tests\fixtures\valid.json "$env:TEMP\memo-02.md" |
python -m unittest discover -s tests | Tự kiểm bộ mã trên máy bạn | Không | Chạy trong thư mục repo, cuối cùng in OK |
Ví dụ đầu-cuối
Mỗi ví dụ chạy trong thư mục repo bằng PowerShell, ghi vào thư mục tạm.
# chép fixture mẫu, đổi tiền tệ ngân sách sang USD
$f = Get-Content tests\fixtures\valid.json -Raw -Encoding UTF8 | ConvertFrom-Json
$f.finance.budget_currency = "USD"
[IO.File]::WriteAllText("$env:TEMP\fixture-usd-01.json", ($f | ConvertTo-Json -Depth 10)) # UTF-8 không BOM
python -m finance_legal "$env:TEMP\fixture-usd-01.json" "$env:TEMP\memo-usd-01.md"
Select-String "Tài chính" "$env:TEMP\memo-usd-01.md" -Encoding UTF8
# Tài chính: unknown; variance: None; reason: currency_mismatchpython -m finance_legal tests\fixtures\valid.json "$env:TEMP\memo-lap-01.md" # lần đầu: mã 0
python -m finance_legal tests\fixtures\valid.json "$env:TEMP\memo-lap-01.md" # lần hai: OUTPUT_ERROR
python -m finance_legal tests\fixtures\valid.json "$env:TEMP\memo-lap-02.md" # tên mới: mã 0Từ điển đầu ra
needs_review- Trạng thái chung của mọi memo: luôn cần con người xem xét.
available- Chênh lệch tính được vì đủ số và khớp kỳ, tiền tệ, đơn vị.
eligible_for_review- Điều khoản khai báo đủ metadata để người xem; không phải chứng nhận pháp lý.
unknown- Không kết luận được; dòng
reasonnói vì sao. missing_actual,missing_budget- Thiếu số thực tế hoặc số ngân sách.
period_mismatch,currency_mismatch,unit_mismatch- Hai số khác kỳ, khác tiền tệ hoặc khác đơn vị.
missing_locator,missing_version,missing_jurisdiction,missing_effective_from- Điều khoản thiếu vị trí, phiên bản, thẩm quyền hoặc ngày hiệu lực.
jurisdiction_mismatch- Thẩm quyền của điều khoản khác thẩm quyền của fixture.
not_yet_effective,expired- So với ngày
as_of, điều khoản chưa có hiệu lực hoặc đã hết hạn.
Muốn biết bên trong chạy thế nào?
Xem fixture đi qua những bước nào và chỗ nào công cụ dừng.