Le montant peut-il être un nombre négatif : séparer les règles métier et les règles de type
Écrivez tous les champs de montant sous la forme `minimum: 0`, ce qui semble très strict à première vue, mais bloquera l'enregistrement de remboursement normal. La question de savoir si le montant a été extrait en un nombre et si les nombres négatifs sont autorisés dans cette activité sont deux questions. Vous devez d'abord confirmer la signification du document, puis rédiger les règles de portée.
Si vous effectuez une extraction structurée de commandes, de factures ou de documents financiers, le champ du montant est souvent l'endroit le plus sujet aux erreurs. De nombreuses personnes écriront tous les montants sous la forme minimum: 0, ce qui semble très strict, mais les enregistrements de remboursement normaux seront rejetés pour cette raison.
Que le montant ait été extrait en nombre et que les nombres négatifs soient autorisés dans ce secteur sont deux questions différentes. Confirmez d'abord ce que représente le signe négatif dans le document, puis déterminez les règles de plage, afin de garantir que le type est correct sans endommager accidentellement des données raisonnables.
Cet article utilise des échantillons synthétiques pour démontrer la méthode de traitement. Le code a été vérifié avec des exemples dans un environnement isolé ; cela ne représente pas une garantie de tous les fichiers réels ou des performances du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.
Le montant peut-il être négatif ? Conclusion en une phrase
Le fait que le montant puisse être négatif dépend de l'accord de l'entreprise et non du type de champ lui-même. Définissez d'abord la signification du signe négatif, puis laissez le type déterminer les contraintes.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
| Les remboursements dans l'accord sont exprimés en montants négatifs | Le champ de frais est limité aux valeurs non négatives et les valeurs négatives sont autorisées pour les remboursements. | Les symboles sont une sémantique commerciale et ne peuvent pas être universelles. |
| Le système utilise « montant positif plus type de remboursement » | Le montant est uniformément positif et le champ type est utilisé pour distinguer les remboursements | Les deux méthodes peuvent être établies, mais une seule peut être sélectionnée pour la même interface. |
| Un montant strictement positif est requis | Utilisez exclusiveMinimum au lieu de minimum: 0 | minimum contient des limites et transmettra des valeurs nulles |
| Les signes négatifs dans les sources peuvent être manquants ou égarés | Enregistrez le fragment de texte original et révisez-le manuellement. Ne prenez pas directement la valeur absolue. | La correction automatique peut masquer de vraies erreurs |
Définissez d'abord ce que représente le signe négatif
L'accord de synthèse de cet article stipule que les charges ordinaires ne sont pas négatives et que les remboursements sont exprimés en montants négatifs. Les systèmes réels peuvent également utiliser une méthode comptable « montant positif plus type de remboursement ». Les deux méthodes peuvent être établies, mais vous ne pouvez pas compter sur les lecteurs pour deviner dans la même interface.
La limite du point zéro est ici un exemple de protocole et ne constitue pas une norme unifiée dans le secteur financier.
Laissez le type déterminer les contraintes
minimum du schéma JSON contient des limites, exclusiveMinimum ne contient pas de limites. Si le besoin métier est strictement positif, minimum: 0 ne peut pas être utilisé.
Répertoriez d'abord les scénarios qui autorisent des valeurs nulles avant de sélectionner des mots-clés pour éviter de mal interpréter les éléments gratuits, les radiations ou les estimations comme des erreurs.
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})
L'exemple dépend de jsonschema et est vérifié selon le projet 2020-12. Il n'effectue pas de conversion de devises et ne vérifie pas non plus la relation entre les éléments et les totaux.
Les calculs de devises nécessitent une précision claire et des stratégies d’arrondi. Tout simplement parce que les valeurs réussissent la vérification du schéma, vous ne pouvez pas utiliser de nombres à virgule flottante pour les accumuler à volonté.
Lors du signalement d'une erreur, vous devez indiquer le contexte commercial
Lorsque la vérification échoue, le message d’erreur devrait aider les utilisateurs à en déterminer la cause, plutôt que d’indiquer simplement « illégal ».
| observer | Le traitement ici | Encore faut-il vérifier |
|---|---|---|
| Le remboursement est positif | rejeter | Le symbole est-il manquant ou la source utilise un autre protocole ? |
| Les frais sont nuls | accepter la structure | Est-ce un projet gratuit ? |
| Le montant est une chaîne | type de rejet | Des milliers placent le signe, la monnaie et les règles décimales |
| Type manquant | rejeter | Devinez le type de document sans vous fier au signe du montant |
N'utilisez pas de valeurs absolues automatiques pour masquer les erreurs
Les tirets manquants dans l'OCR, les signes négatifs déplacés pendant la traduction ou l'entreprise utilisant des conventions de signes opposés peuvent tous se manifester par la même anomalie.
Appeler directement abs() éliminerait des indices de diagnostic importants. Une approche plus sûre consiste à enregistrer les fragments de texte d'origine, les numéros de page et les chaînes avant l'analyse, puis à décider s'il faut les réextraire ou les réviser manuellement.
Vérifiez le montant et tapez ensemble lors de la livraison
Lorsque vous utilisez OmniDoc (portail produit) pour traiter des documents contenant des montants, vous pouvez utiliser cette table de règles dans le cadre de l'acceptation post-traduction : vérifier non seulement si les numéros sont perdus, mais aussi si le contexte des remboursements, crédits, etc. a changé.
Des outils peuvent aider à terminer la traduction, mais le montant convenu doit toujours être clair du côté commercial.
📊 Comparaison de base
| pratique | Signification du signe négatif | Adapté à la scène | Note |
|---|---|---|---|
| Remboursement avec montant négatif | Un signe négatif indique un remboursement | L'accord a convenu d'utiliser des symboles pour distinguer les directions | Le champ de frais doit être limité aux valeurs non négatives et le champ de remboursement autorise les valeurs négatives. |
| Montant positif plus type de remboursement | Le signe négatif n'a pas de sens commercial | Le système distingue les remboursements par type de champ | Le montant est uniformément positif et le type doit être vérifié en même temps. |
minimum: 0 | Contient une valeur nulle | Montants autorisant des valeurs nulles | Libérera des valeurs nulles, ne convient pas aux scénarios strictement positifs |
exclusiveMinimum: 0 | Ne contient pas de valeur nulle | Strictement requis, il doit s'agir d'un montant positif | Besoin de confirmer que les articles gratuits ou les annulations ne seront pas rejetés par erreur |
🎯 Quelle méthode vous convient ?
Si votre accord utilise un montant négatif pour indiquer un remboursement
- Définissez des contraintes non négatives pour le champ de facturation, autorisez des valeurs négatives pour le champ de remboursement et rédigez l'accord dans le document.
Si votre système utilise "montant positif plus type de remboursement"
- Le champ montant doit être uniformément positif, et le champ type doit être vérifié en même temps pour éviter de juger de la nature du document en regardant simplement les chiffres.
Si le montant du besoin métier est strictement positif
- Utilisez
exclusiveMinimumet vérifiez d'abord si les articles gratuits, les remises et les estimations ne seront pas rejetés par erreur.
Si le signe négatif du fichier source risque d'être perdu
- Conservez les fragments de texte originaux, les numéros de page et les chaînes pré-analysées, et examinez-les manuellement avant de les saisir dans la base de données. Ne prenez pas directement la valeur absolue.
❓ Questions fréquemment posées (FAQ)
1. Quelle est la différence entre minimum et exclusiveMinimum ?
minimum contient des valeurs limites, exclusiveMinimum ne contient pas de valeurs limites. Si le besoin métier est strictement positif, minimum: 0 ne peut pas être utilisé.
2. S'il réussit la vérification du schéma, le montant sera-t-il correct ?
incertain. L'exemple n'effectue pas de conversion de devises et ne vérifie pas non plus la relation entre les éléments et les totaux ; les calculs de devises nécessitent également des stratégies claires de précision et d’arrondi.
3. Pourquoi le montant ne peut-il pas être accumulé directement à l'aide de nombres à virgule flottante ?
Les calculs de devises nécessitent une précision claire et des stratégies d’arrondi. Les nombres à virgule flottante ne peuvent pas être utilisés pour s'accumuler de manière aléatoire simplement parce que les valeurs réussissent la vérification du schéma.
4. Lorsque vous rencontrez une exception de signe négatif, pouvez-vous directement prendre la valeur absolue ?
Non recommandé. Des mots manquants dans l'OCR, des signes négatifs déplacés dans la traduction ou des conventions de symboles commerciaux différentes peuvent provoquer des anomalies. Prendre directement la valeur absolue éliminera les indices de diagnostic.
📝Résumé
La clé du champ Montant est de confirmer d’abord ce que représente le signe négatif, puis de laisser le type déterminer les contraintes. En séparant les règles métier et les règles de type, vous ne pouvez ni rejeter les remboursements par erreur ni manquer de véritables erreurs.
Références : Contraintes numériques du schéma JSON


