¿Puede la cantidad ser un número negativo: reglas comerciales separadas y reglas de tipo?
Escriba todos los campos de importe como `minimum: 0`, lo que parece muy estricto a primera vista, pero bloqueará el registro de reembolso normal. Si la cantidad se ha extraído en un número y si se permiten números negativos en este negocio son dos cuestiones. Primero debe confirmar el significado del documento y luego escribir las reglas de alcance.
Si realiza una extracción estructurada de pedidos, facturas o documentos financieros, el campo de importe suele ser el lugar más propenso a errores. Mucha gente escribirá todos los importes como minimum: 0, lo que parece muy estricto, pero los registros de reembolso normales serán rechazados por esta razón.
Si la cantidad se ha extraído en un número y si se permiten números negativos en este negocio son dos cuestiones diferentes. Primero confirme qué representa el signo negativo en el documento y luego determine las reglas de rango para garantizar que el tipo sea correcto sin dañar accidentalmente datos razonables.
Este artículo utiliza muestras sintéticas para demostrar el método de procesamiento. El código ha sido verificado con ejemplos en un entorno aislado; Esto no representa una garantía de todos los archivos reales o del rendimiento del producto. Antes de procesar documentos importantes, conserve los originales y revíselos de acuerdo con los límites y elementos de aceptación del texto.
¿El importe puede ser negativo? Conclusión de una frase
Que el importe pueda ser negativo depende del acuerdo de la empresa, no del tipo de campo en sí. Primero defina el significado del signo negativo y luego deje que el tipo determine las restricciones.
| tu situación | Prácticas recomendadas | razón |
|---|---|---|
| Los reembolsos en el acuerdo se expresan como importes negativos. | El campo de cargo está restringido a valores no negativos y se permiten valores negativos para reembolsos. | Los símbolos son semántica empresarial y no pueden ser iguales para todos |
| El sistema utiliza "monto positivo más tipo de reembolso" | El importe es uniformemente positivo y el campo tipo se utiliza para distinguir los reembolsos. | Se pueden establecer ambos métodos, pero sólo se puede seleccionar uno para una misma interfaz. |
| Se requiere una cantidad estrictamente positiva | Utilice exclusiveMinimum en lugar de minimum: 0 | minimum contiene límites y pasará valores cero |
| Es posible que falten o estén mal colocados signos negativos en las fuentes | Guarde el fragmento de texto original y revíselo manualmente. No tome directamente el valor absoluto. | La autocorrección puede enmascarar errores reales |
Primero define qué representa el signo negativo
El acuerdo de síntesis de este artículo establece que los cargos ordinarios no son negativos y las devoluciones se expresan como importes negativos. Los sistemas reales también pueden utilizar un método contable de "monto positivo más tipo de reembolso". Se pueden establecer ambos métodos, pero no se puede confiar en que los lectores adivinen en la misma interfaz.
El límite de punto cero aquí es un protocolo de muestra y no es un estándar unificado en la industria financiera.
Deja que el tipo determine las restricciones.
minimum del esquema JSON contiene límites, exclusiveMinimum no contiene límites. Si el requisito comercial es estrictamente positivo, no se puede utilizar minimum: 0.
Enumere los escenarios que permiten valores cero primero antes de seleccionar palabras clave para evitar malinterpretar artículos gratuitos, cancelaciones o estimaciones como errores.
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})
El ejemplo depende de jsonschema y está verificado según el Draft 2020-12. No realiza conversión de moneda ni verifica la relación entre artículos y totales.
Los cálculos de divisas requieren precisión clara y estrategias de redondeo. Solo porque los valores pasan la verificación del esquema, no se pueden usar números de punto flotante para acumularlos a voluntad.
Al informar un error, debe indicar el contexto empresarial
Cuando la verificación falla, el mensaje de error debería ayudar a las personas a determinar la causa, en lugar de simplemente indicar "ilegal".
| observar | El procesamiento aquí | Todavía necesito comprobar |
|---|---|---|
| El reembolso es positivo. | rechazar | ¿Falta el símbolo o la fuente utiliza otro protocolo? |
| El cargo es cero | aceptar estructura | ¿Es un proyecto gratuito? |
| La cantidad es una cadena | tipo de rechazo | Miles colocan reglas de signos, monedas y decimales |
| tipo faltante | rechazar | Adivina el tipo de documento sin depender del signo de importe |
No utilice valores absolutos automáticos para encubrir errores
Los guiones que faltan en el OCR, los signos negativos que se mueven durante la traducción o que la empresa utiliza convenciones de signos opuestos pueden manifestarse como la misma anomalía.
Llamar directamente a abs() eliminaría pistas de diagnóstico importantes. Un enfoque más seguro es guardar los fragmentos de texto originales, los números de página y las cadenas antes de analizarlos, y luego decidir si volver a extraerlos o revisarlos manualmente.
Verifique el monto y escriba juntos al realizar la entrega
Cuando use OmniDoc (portal de productos) para procesar documentos que contienen montos, puede usar esta tabla de reglas como parte de la aceptación posterior a la traducción: no solo verifique si los números se pierden, sino también si el contexto de reembolsos, créditos, etc. ha cambiado.
Las herramientas pueden ayudar a completar la traducción, pero el acuerdo de monto aún debe quedar claro para la parte comercial.
📊 Comparación central
| práctica | Significado del signo negativo | Adecuado para la escena | Nota |
|---|---|---|---|
| Reembolso con importe negativo | Un signo negativo indica un reembolso. | El acuerdo ha acordado utilizar símbolos para distinguir direcciones | El campo de cargo debe restringirse a valores no negativos y el campo de reembolso permite valores negativos. |
| Monto positivo más tipo de reembolso | El signo negativo no tiene significado comercial. | El sistema distingue las devoluciones por campo tipo | La cantidad es uniformemente positiva y el tipo debe verificarse al mismo tiempo. |
minimum: 0 | Contiene valor cero | Cantidades que permiten valores cero | Lanzará valores cero, no aptos para escenarios estrictamente positivos. |
exclusiveMinimum: 0 | No contiene valor cero | Es estrictamente necesario que sea una cantidad positiva | Es necesario confirmar que los artículos gratuitos o las reversiones no se rechazarán por error. |
🎯 ¿Qué método es el adecuado para ti?
Si su acuerdo utiliza un monto negativo para indicar un reembolso
- Establezca restricciones no negativas para el campo de cargo, permita valores negativos para el campo de reembolso y escriba el acuerdo en el documento.
Si su sistema utiliza "monto positivo más tipo de reembolso"
- El campo de monto debe ser uniformemente positivo y el campo de tipo debe verificarse al mismo tiempo para evitar juzgar la naturaleza del documento con solo mirar los números.
Si el monto del requisito comercial es estrictamente positivo
- Utilice
exclusiveMinimumy verifique primero si los artículos gratuitos, los reembolsos y las estimaciones no se rechazarán por error.
Si el signo negativo del archivo fuente se puede perder
- Conserve los fragmentos de texto originales, los números de página y las cadenas analizadas previamente, y revíselos manualmente antes de ingresarlos en la base de datos. No tome directamente el valor absoluto.
❓ Preguntas frecuentes (FAQ)
1. ¿Cuál es la diferencia entre minimum y exclusiveMinimum?
minimum contiene valores límite, exclusiveMinimum no contiene valores límite. Si el requisito comercial es estrictamente positivo, no se puede utilizar minimum: 0.
2. Si pasa la verificación del esquema, ¿será correcto el monto?
incierto. El ejemplo no realiza conversión de moneda ni verifica la relación entre artículos y totales; Los cálculos de divisas también requieren precisión clara y estrategias de redondeo.
3. ¿Por qué no se puede acumular el monto directamente usando números de punto flotante?
Los cálculos de divisas requieren precisión clara y estrategias de redondeo. Los números de coma flotante no se pueden usar para acumularse aleatoriamente solo porque los valores pasan la verificación del esquema.
4. Cuando encuentre una excepción de signo negativo, ¿puede tomar directamente el valor absoluto?
No recomendado. La falta de palabras en OCR, el movimiento de signos negativos en la traducción o diferentes convenciones de símbolos comerciales pueden causar anomalías. Tomar directamente el valor absoluto eliminará las pistas de diagnóstico.
📝 Resumen
La clave para el campo de cantidad es confirmar primero qué representa el signo negativo y luego dejar que el tipo determine las restricciones. Al separar las reglas comerciales y las reglas de tipo, no puede rechazar reembolsos por error ni pasar por alto errores reales.
Pruébelo ahora: cargue el documento para comenzar la traducción, conservando el diseño original
Referencias: Restricciones numéricas del esquema JSON


