Bisakah jumlahnya menjadi angka negatif: pisahkan aturan bisnis dan aturan tipe
Tulis semua kolom jumlah sebagai `minimum: 0`, yang terlihat sangat ketat di permukaan, namun akan memblokir catatan pengembalian dana normal. Apakah jumlah tersebut telah diekstraksi menjadi angka dan apakah angka negatif diperbolehkan dalam bisnis ini adalah dua masalah. Anda harus terlebih dahulu mengkonfirmasi arti dokumen tersebut dan kemudian menulis aturan cakupannya.
Jika Anda melakukan ekstraksi terstruktur atas pesanan, tagihan, atau dokumen keuangan, bidang jumlah sering kali merupakan tempat yang paling rawan kesalahan. Banyak orang akan menulis semua jumlah sebagai minimum: 0, yang tampaknya sangat ketat, namun catatan pengembalian dana normal akan ditolak karena hal ini.
Apakah jumlah tersebut telah diekstraksi menjadi angka dan apakah angka negatif diperbolehkan dalam bisnis ini adalah dua masalah yang berbeda. Pertama-tama konfirmasikan apa yang diwakili oleh tanda negatif dalam dokumen, lalu tentukan aturan rentangnya, untuk memastikan bahwa jenisnya benar tanpa merusak data yang masuk akal secara tidak sengaja.
Artikel ini menggunakan sampel sintetis untuk mendemonstrasikan metode pemrosesan. Kode telah diperiksa dengan contoh di lingkungan yang terisolasi; ini tidak mewakili jaminan atas semua file asli atau kinerja produk. Sebelum memproses dokumen penting, harap simpan dokumen asli dan tinjau sesuai dengan batasan dan item penerimaan dalam teks.
Bisakah jumlahnya negatif? Kesimpulan satu kalimat
Apakah jumlahnya bisa negatif tergantung pada kesepakatan bisnis, bukan jenis bidang itu sendiri. Tentukan arti dari tanda negatif terlebih dahulu, lalu biarkan jenisnya menentukan batasannya.
| situasi Anda | Praktik yang direkomendasikan | alasan |
|---|---|---|
| Pengembalian dana dalam perjanjian dinyatakan sebagai jumlah negatif | Bidang tagihan dibatasi untuk nilai non-negatif, dan nilai negatif diperbolehkan untuk pengembalian dana. | Simbol adalah semantik bisnis dan tidak bisa menjadi satu ukuran untuk semua |
| Sistem menggunakan "jumlah positif ditambah jenis pengembalian dana" | Jumlahnya positif secara seragam, dan bidang jenis digunakan untuk membedakan pengembalian dana | Kedua metode dapat diterapkan, namun hanya satu yang dapat dipilih untuk antarmuka yang sama. |
| Diperlukan jumlah yang sangat positif | Gunakan exclusiveMinimum, bukan minimum: 0 | minimum berisi batasan dan akan melewati nilai nol |
| Tanda-tanda negatif pada sumber mungkin hilang atau salah tempat | Simpan fragmen teks asli dan tinjau secara manual. Jangan langsung mengambil nilai absolut. | Koreksi otomatis dapat menutupi kesalahan yang sebenarnya |
Pertama-tama tentukan apa yang diwakili oleh tanda negatif
Perjanjian sintesis dalam pasal ini menetapkan bahwa biaya biasa tidak negatif, dan pengembalian dana dinyatakan dalam jumlah negatif. Sistem nyata juga dapat menggunakan metode akuntansi "jumlah positif ditambah jenis pengembalian dana". Kedua metode tersebut dapat dilakukan, tetapi Anda tidak dapat mengandalkan pembaca untuk menebak dalam antarmuka yang sama.
Batas titik nol di sini adalah contoh protokol dan bukan merupakan standar terpadu dalam industri keuangan.
Biarkan tipe menentukan batasannya
minimum Skema JSON berisi batasan, exclusiveMinimum tidak berisi batasan. Jika persyaratan bisnis benar-benar positif, minimum: 0 tidak dapat digunakan.
Buat daftar skenario yang mengizinkan nilai nol terlebih dahulu sebelum memilih kata kunci untuk menghindari salah mengartikan item gratis, penghapusan, atau perkiraan sebagai kesalahan.
from jsonschema import Draft202012Validator
schema = {
"type": "object", "required": ["kind", "amount"],
"additionalProperties": False,
"properties": {"kind": {"enum": ["charge", "refund"]},
"amount": {"type": "number"}},
"allOf": [
{"if": {"properties": {"kind": {"const": "charge"}}},
"then": {"properties": {"amount": {"minimum": 0}}}},
{"if": {"properties": {"kind": {"const": "refund"}}},
"then": {"properties": {"amount": {"exclusiveMaximum": 0}}}}
]
}
v = Draft202012Validator(schema)
valid = lambda x: not list(v.iter_errors(x))
assert valid({"kind": "charge", "amount": 0})
assert valid({"kind": "refund", "amount": -12.5})
assert not valid({"kind": "refund", "amount": 12.5})
assert not valid({"kind": "charge", "amount": True})
assert not valid({"amount": 12.5})
Contohnya bergantung pada jsonschema dan diverifikasi menurut Draf 2020-12. Itu tidak melakukan konversi mata uang, juga tidak memverifikasi hubungan antara item dan total.
Perhitungan mata uang memerlukan ketelitian dan strategi pembulatan yang jelas. Hanya karena nilainya lolos verifikasi Skema, Anda tidak dapat menggunakan angka floating point untuk diakumulasikan sesuka hati.
Saat melaporkan kesalahan, Anda perlu menunjukkan konteks bisnis
Ketika verifikasi gagal, pesan kesalahan akan membantu orang menentukan penyebabnya, bukan hanya menunjukkan "ilegal".
| mengamati | Pemrosesan di sini | Masih perlu diperiksa |
|---|---|---|
| Pengembalian dana positif | menolak | Apakah simbolnya hilang atau sumbernya menggunakan protokol lain? |
| Biayanya nol | menerima struktur | Apakah ini proyek gratis? |
| Jumlah adalah string | tipe penolakan | Ribuan tanda tempat, mata uang, dan aturan desimal |
| Tipe tidak ada | menolak | Tebak jenis dokumen tanpa bergantung pada tanda jumlah |
Jangan gunakan nilai absolut otomatis untuk menutupi kesalahan
Tanda hubung OCR yang hilang, tanda negatif yang bergerak selama penerjemahan, atau bisnis yang menggunakan konvensi tanda yang berlawanan semuanya dapat bermanifestasi sebagai anomali yang sama.
Menelepon abs() secara langsung akan menghilangkan petunjuk diagnostik penting. Pendekatan yang lebih aman adalah dengan menyimpan fragmen teks asli, nomor halaman, dan string sebelum diurai, lalu memutuskan apakah akan mengekstrak ulang atau meninjaunya secara manual.
Periksa jumlah dan ketik bersamaan saat pengiriman
Saat menggunakan OmniDoc (portal produk) untuk memproses dokumen yang berisi jumlah, Anda dapat menggunakan tabel aturan ini sebagai bagian dari penerimaan pasca-penerjemahan: tidak hanya memeriksa apakah nomor tersebut hilang, tetapi juga apakah konteks pengembalian dana, kredit, dll. telah berubah.
Alat dapat membantu menyelesaikan penerjemahan, namun kesepakatan jumlah harus tetap jelas oleh pihak bisnis.
📊 Perbandingan inti
| praktik | Arti tanda negatif | Cocok untuk adegan itu | Catatan |
|---|---|---|---|
| Pengembalian dana dengan jumlah negatif | Tanda negatif menunjukkan pengembalian dana | Perjanjian tersebut sepakat untuk menggunakan simbol-simbol untuk membedakan arah | Bidang tagihan harus dibatasi pada nilai non-negatif, dan bidang pengembalian dana mengizinkan nilai negatif. |
| Jumlah positif ditambah jenis pengembalian dana | Tanda negatif tidak mempunyai arti bisnis | Sistem membedakan pengembalian dana berdasarkan jenis bidangnya | Jumlahnya positif seragam, dan jenisnya harus diverifikasi pada saat yang bersamaan. |
minimum: 0 | Berisi nilai nol | Jumlah yang memungkinkan nilai nol | Akan melepaskan nilai nol, tidak cocok untuk skenario positif |
exclusiveMinimum: 0 | Tidak mengandung nilai nol | Sangat diwajibkan untuk menjadi jumlah yang positif | Perlu dipastikan bahwa barang gratis atau pembalikan tidak akan ditolak secara keliru |
🎯 Metode mana yang cocok untuk Anda?
Jika perjanjian Anda menggunakan jumlah negatif untuk menunjukkan pengembalian dana
- Tetapkan batasan non-negatif untuk kolom biaya, izinkan nilai negatif untuk kolom pengembalian dana, dan tulis perjanjian di dokumen.
Jika sistem Anda menggunakan "jumlah positif ditambah jenis pengembalian dana"
- Bidang jumlah harus positif secara seragam, dan bidang jenis harus diverifikasi pada saat yang sama untuk menghindari menilai sifat dokumen hanya dengan melihat angkanya.
Jika jumlah kebutuhan bisnis benar-benar positif
- Gunakan
exclusiveMinimumdan periksa terlebih dahulu apakah item gratis, rabat, dan perkiraan tidak akan ditolak secara keliru.
Jika tanda negatif file sumber mungkin hilang
- Simpan fragmen teks asli, nomor halaman, dan string yang telah diurai sebelumnya, dan tinjau secara manual sebelum memasukkannya ke dalam database. Jangan langsung mengambil nilai absolut.
❓ Pertanyaan yang Sering Diajukan (FAQ)
1. Apa perbedaan antara minimum dan exclusiveMinimum?
minimum berisi nilai batas, exclusiveMinimum tidak berisi nilai batas. Jika persyaratan bisnis benar-benar positif, minimum: 0 tidak dapat digunakan.
2. Jika lolos verifikasi Skema, apakah jumlahnya benar?
tidak pasti. Contoh ini tidak melakukan konversi mata uang, juga tidak memverifikasi hubungan antara item dan total; perhitungan mata uang juga memerlukan strategi ketelitian dan pembulatan yang jelas.
3. Mengapa jumlah tersebut tidak dapat diakumulasikan langsung menggunakan angka floating point?
Perhitungan mata uang memerlukan ketelitian dan strategi pembulatan yang jelas. Angka floating point tidak dapat digunakan untuk diakumulasikan secara acak hanya karena nilainya lolos verifikasi Skema.
4. Saat menemui pengecualian tanda negatif, bisakah Anda langsung mengambil nilai absolutnya?
Tidak direkomendasikan. Kata-kata yang hilang dalam OCR, perpindahan tanda negatif dalam terjemahan, atau konvensi simbol bisnis yang berbeda dapat menyebabkan kelainan. Mengambil nilai absolut secara langsung akan menghilangkan petunjuk diagnostik.
📝 Ringkasan
Kunci dari bidang jumlah adalah pertama-tama mengkonfirmasi apa yang diwakili oleh tanda negatif, dan kemudian membiarkan jenisnya menentukan batasannya. Dengan memisahkan aturan bisnis dan aturan jenis, Anda tidak dapat menolak pengembalian dana karena kesalahan atau melewatkan kesalahan nyata.
Referensi: Batasan numerik Skema JSON


