Tout d'abord, examinons un tableau général de ce que la Oracle BRM facturation le fait :
- Compile le montant total des impacts sur le solde qui ont eu lieu au cours du mois dernier. Il peut s'agir de frais d'utilisation et d'abonnement.
- Le statut de toutes les factures associées à la facture passe de "en attente" à "ouverte", de sorte qu'elles cessent d'accumuler des frais et que des paiements puissent y être appliqués. En outre, une date d'échéance de paiement est ajoutée à la facture.
- Demande automatiquement des paiements à un organisme de traitement des cartes de crédit ou demande des paiements par l'envoi de factures.
- Met automatiquement à jour le solde du compte d'un client lorsqu'un paiement est enregistré dans la base de données BRM.
Comment cela se passe-t-il dans la pratique ?
Avant d'exécuter une facturation brm en production, il est nécessaire d'exécuter toutes les étapes préalables. La première étape consiste à préparer une copie de l'environnement de production - il peut s'agir d'un environnement de préproduction ou d'un environnement de test. Cette étape comprend l'installation de la dernière version de production sur cet environnement et la copie de la base de données de production. Ensuite, les configurations de l'environnement doivent refléter celles de la production. Voici les principales configurations qui doivent être définies de manière appropriée :
- cm ($HOME/pin/sys/cm/pin.conf),
o Vérifiez que l'entrée loglevel est réglée sur 1
o Remplacer le paramètre agent_return par 0
o Modifiez la valeur du paramètre simulate_agent en la fixant à 1
Ces deux derniers changements sont effectués de manière à ne pas impliquer d'action de provisionnement pendant le cycle de facturation.
- dm_oracle ($HOME/pin/sys/dm_oracle/pin.conf),
o Réglez le paramètre dm_bigsize sur 8388608 ou plus.
o Réglez le paramètre dm_shmsize sur 33554432 ou plus.
o Fixer dm_n_fe à 8
o Fixer dm_max_per_fe à 16
o Réglez dm_n_be sur 24
o Fixer dm_trans_be_max à 22
- pin_bill_accts ($HOME/pin/apps/pin_billd/pin.conf),
o Vérifiez le niveau du journal. Modifiez-le à la valeur appropriée en fonction de ce qui doit être vérifié pendant le test de facturation, soit 1 ou 3.
o Modifier le paramètre "enfants" pour pin_billd et pin_mta en le fixant à 5
o Modifier le paramètre per_batch pour pin_billd et pin_mta à 20000
o Modifier le paramètre fetch_size pour pin_billd et pin_mta à 150000
- pin_inv_accts ($HOME/pin/apps/pin_inv/pin.conf),
o Vérifiez le niveau du journal. Modifiez-le à la valeur appropriée en fonction de ce qui doit être vérifié pendant le test de facturation, soit 1 ou 3.
o Modifier le paramètre "enfants" pour pin_billd et pin_mta en le fixant à 5
o Modifier le paramètre per_batch pour pin_billd et pin_mta à 2000
o Modifier le paramètre fetch_size pour pin_billd et pin_mta à 15000
Pour obtenir la meilleure simulation possible de la production, le pin_virtual_time de l'exécution de factures doit être réglé sur la date à laquelle l'exécution de factures réelles sur la production sera exécutée. Une fois que cela est fait, l'exécution de la facture peut être lancée.
Nous exécutons la facturation mensuellement avec le script pin_bill_day qui crée environ 100 000 factures par heure. Le script crée des factures pour les comptes dont la date de facturation est antérieure à minuit le jour où nous exécutons la facturation. Que fait le script pin_billd_day ? Il exécute les utilitaires de facturation suivants :
- pin_deferred_act : Exécute des actions différées ; par exemple, si un compte doit devenir inactif, cet utilitaire effectue le changement d'état à la date prévue.
- pin_bill_accts : Calcule le solde dû pour les comptes et crée une facture pour le solde dû.
- pin_collect : Recouvre le solde dû pour les comptes qui utilisent des cartes de crédit et des méthodes de paiement par débit direct.
- pin_refund : Recherche les comptes qui ont des éléments de remboursement et effectue des transactions de remboursement en ligne.
- pin_inv_accts : Crée une facture pour chaque compte facturé.
- pin_cycle_fees : Applique l'impact du solde des frais d'avance de cycle sur le compte du client et annule les produits dont la date d'annulation en attente a expiré.
Pour vérifier la progression et les performances du script pin_bill_day, nous lançons des requêtes dans la base de données afin d'obtenir des informations sur le nombre de factures effectuées, le nombre de factures restant à effectuer, les erreurs éventuelles dans les factures, etc.
Une fois que la partie facturation de brm est terminée et que toutes les factures sont créées, la facturation commence. Une fois les factures créées, elles sont exportées vers des documents XML, qui sont ensuite convertis au format PDF.
Outre les requêtes mentionnées précédemment, d'autres requêtes doivent être exécutées une fois la facturation terminée, afin de vérifier l'exactitude des données générées par ce processus. Nous exécutons un lot de requêtes ; en voici quelques-unes :
- La facturation a-t-elle échoué ?
select * from billinfo_t where billing_state = 4 and bill_info_id 'Bill Unit(1)' ;
-Résultats attendus : Aucune ligne trouvée
- Y a-t-il des comptes non facturés ?
select poid_id0, first_name,last_name,a.status from account_t a, account_nameinfo_t an where
a.poid_id0=an.obj_id0 et
created_t< et
n'existe pas (select b.account_obj_id0 from bill_t b
where end_t= and
b.account_obj_id0=a.poid_id0) ;
-Résultats attendus : Aucune ligne trouvée
- Y a-t-il des projets de loi qui n'ont pas de numéro ?
select * from bill_t where end_t= and bill_no is null ;
- Attendu : Aucune ligne trouvée
Tous les problèmes constatés sont ensuite examinés et corrigés par le biais du système de contrôle des versions, où les corrections sont ensuite incluses dans la version suivante.
Bonjour,
Puis-je savoir quelle plateforme vous utilisez ? Quelle est la taille du matériel pour supporter cette implémentation ?
Avis.
Bonjour Ayazul,
Notre client utilise deux serveurs HP-UX Intanium.
Serveurs BRM :
- 2 x HP Integrity RX6600
- 4 x Intel Itanium Dual Core 1,8 GHz
- Mémoire de 64 Go
- HP UX B.11.23 64 bit
- multiple Gbit ETH et 4Gb FC
Serveurs de base de données BRM :
- 2 x IBM x36502
- 2x Intel Xeon Dual Core 3.16 GHz
- 48 Go de mémoire ; Red Hat Enterprise Linux 4 (Nahant Update 8)
- 4 TB de stockage sur disque alloués
- multiple Gbit ETH et 4Gb FC
- Base de données Oracle 10.2 EE RAC
Gestion automatique du stockage utilisée pour le BRM en mode actif / veille
Nœud db RAC secondaire de BRM en attente, utilisé pour la médiation, le reporting et à d'autres fins.
Stockage :
- 1 x HP XP 24000
- disques dédiés pour la base de données BRM ASM gérée
- 64 Go de cache4 Gbit de bande passante FC pour la base de données BRM
Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,
Ales
Pouvez-vous clarifier mes doutes dans oracle brm, après la facturation dans le même compte, certains plans sont incatifs et d'autres non, pourquoi cela se produit-il si un drapeau ou un autre champ de données manque, si oui, faites-moi savoir la classe et le type de champ ........ nous utilisons pin_bill_day pour la facturation .......
Bonjour, Abirami
Il peut y avoir de nombreuses raisons pour lesquelles certaines offres, certains plans ou certains produits deviennent inactifs après la facturation.
Les scripts de facturation exécutent un ou plusieurs utilitaires de facturation, pin_bill_day exécute les utilitaires de facturation suivants :
* pin_deferred_act
* pin_bill_accts
* pin_collect
* pin_refund
* pin_inv_accts
* pin_deposit
* pin_cycle_fees
Vous pouvez personnaliser pin_bill_day pour spécifier les utilitaires de facturation à exécuter et définir les paramètres de chaque utilitaire de facturation pour spécifier leur mode d'exécution.
Par défaut, l'utilitaire pin_deferred_act est inclus dans le script pin_bill_day et est utilisé pour exécuter des actions différées. Par exemple, si un CSR a programmé l'inactivité d'un compte, l'utilitaire pin_deferred_act effectue le changement de statut à la date prévue. C'est la raison la plus fréquente pour laquelle certains plans deviennent inactifs après la facturation.
La deuxième raison peut être l'exécution de l'utilitaire pin_cycle_fees, qui est également inclus dans le script pin_bill_day. L'utilitaire pin_cycle_fees annule les produits dont la date d'annulation en attente a expiré. Par exemple, si un produit est programmé pour être annulé à une date ultérieure, l'utilitaire pin_cycle_fees annule le produit.
Comme je l'ai mentionné, vous pouvez définir les paramètres de chaque utilitaire de facturation pour spécifier comment les exécuter et quelles actions ils effectueront. Je vous suggère d'abord de prêter attention aux dates qui spécifient quand un plan doit être annulé, cycle_end_t (heure de fin de cycle) et purchase_end_t (heure de fin d'achat) sont définies lorsque vous activez un plan, et elles déclenchent le changement d'état (dans votre cas à inactif) lorsque vous exécutez la facturation.
J'espère que ma réponse vous sera utile. Pour une explication plus détaillée, j'aurais besoin d'informations plus précises sur les comptes (plans) qui deviennent inactifs et sur la configuration des services de facturation.
Meilleures salutations, Ales Cvetic
hi,
J'ai un problème. Dans ma base de données, il y a trois types de produits : les produits en avance sur le cycle, les produits uniques et les produits en retard sur le cycle. Les produits en retard de cycle sont simplement inclus dans la liste des produits. Cependant, lorsque j'exécute pin_bill_day le 1er du mois suivant, deux événements en double sont générés dans le système. Par conséquent, deux lignes identiques apparaissent sur la facture, ce qui génère une facture avec un montant double de ce qu'il devrait être. Après une première analyse, j'ai découvert qu'en raison de deux exécutables de pin_bill_day, des lignes en double sont générées pour les produits en retard de cycle. L'un est pin_bill_accts et l'autre pin_cycle_fees.
Par conséquent, pouvez-vous m'indiquer comment je peux filtrer le calcul des frais de produit pour les arriérés de cycle sur les frais de cycle d'épingle exécutés par le jour de facture d'épingle du 1er jour du mois suivant. Je suis impatient d'en savoir plus ou de me faire savoir si des éclaircissements supplémentaires sont nécessaires.
Avis,
Sayan
Bonjour,
Je suis novice en matière d'Oracle BRM et j'aimerais l'apprendre. Pourriez-vous m'aider à savoir par où commencer ? Existe-t-il des documents disponibles en ligne à ce sujet ?
Bonjour,
Vous pouvez essayer de faire des recherches sur Internet. Vous devriez trouver des vidéos sur YouTube et des documents sur Oracle BRM. En tant que partenaire Oracle Gold, nous avons des livres sur Oracle Communications Billing and Revenue Management (abréviations Oracle BRM, OBRM, OCBRM). Je vous suggère de commencer par Oracle BRM Essentials, puis de continuer en fonction de vos besoins (OCBRM Development, OCBRM Pipeline development, OCBRM Pricing, OBRM administration, etc.)
Avis,
Ales
Merci Ales, j'apprécie votre suggestion.
J'ai un problème concernant le "lack of forward cycle" (la plupart des erreurs "bad parse of proto / hostname / port" dans les logs), nous avons constaté à nouveau la présence de plusieurs cas de "lack of cycle forward".
L'erreur "" bad parse of proto / hostname / port "n'est plus détectée.
Pourquoi cela s'est-il produit ?
Pouvez-vous nous donner la solution à ce problème ?
Bonjour à tous,
J'ai une question à vous poser. Elle concerne la facturation différée. Quel est l'impact de l'activation de la facturation différée ?
Actuellement, nous sommes confrontés à des problèmes liés à l'exécution de la facturation, ce qui a considérablement réduit les performances puisque nous devons exécuter la facturation deux fois, la facturation partielle et la facturation finale. Pour l'instant, il faut plus de 2 jours pour terminer la première étape, et les problèmes détectés au niveau de la base de données sont TX - contention de verrouillage de ligne sur bal_grp_t par cette instruction "select poid_DB, poid_ID0, poid_TYPE, poid_REV from bal_grp_t where bal_grp_t.billinfo_obj_ID0 = :1 order by bal_grp_t.poid_id0 for update of bal_grp_t.poid_id0" et aussi la lecture séquentielle du fichier db.
Vous pouvez peut-être nous donner des conseils à ce sujet.
Avis.
Bonjour Ayazul !
La facturation différée vous permet de facturer des événements plus anciens que le cycle de facturation pour lequel vous créez la facture. Vous l'utilisez si vous recevez des événements que vous devez facturer, mais qui ont eu lieu pendant le cycle de facturation pour lequel l'exécution de la facture a déjà été effectuée. Par exemple, les opérateurs de téléphonie mobile qui fournissent des services d'itinérance internationale peuvent recevoir des événements jusqu'à 30 jours après la fin de l'événement ou de l'appel ; ils doivent donc facturer également les "anciens" événements.
En ce qui concerne votre problème de performance de facturation et l'instruction SQL mentionnée, cette instruction TX - row lock contention on bal_grp_t est juste le symptôme, pas la cause du problème. L'instruction SQL ci-dessus est utilisée dans le BRM comme mécanisme principal de verrouillage à l'intérieur d'une transaction. Par défaut, le BRM ne verrouille pas tous les objets modifiés à l'intérieur d'une transaction. Au lieu de cela, il verrouille uniquement le groupe de soldes du compte pour lequel les objets sont modifiés. Par exemple, lors d'une opération d'exécution de facture, ou lors de l'opération d'imputation d'un événement.
Cette contention de verrou de ligne vous montre simplement que l'opération/transaction sur le compte n'était pas encore terminée, qu'une autre opération/transaction a déjà commencé et demande le verrou sur le même objet et qu'elle attend bien sûr que la première fasse son travail et termine sa transaction en effectuant un commit ou un rollback.
Pour diagnostiquer les opérations SQL lentes pendant le billrun, il suffit d'utiliser Oracle Database Enterprise Manager et d'aller dans Preformance, Top Activity section et d'observer les principales instructions SQL exécutées à ce moment-là. Observez celles qui consomment beaucoup d'E/S ou un nombre excessif de CPU, elles peuvent être candidates à l'optimisation. Parfois, les statistiques de la base de données utilisées par SQL Optimizer sont périmées et l'optimiseur a choisi un plan sous-optimal. Parfois, vous devez créer un nouvel index ou peut-être modifier l'instruction SQL si vous créez des procédures de facturation personnalisées qui ne sont pas prêtes à l'emploi.
Comme votre kilométrage peut varier, il est difficile de diagnostiquer vos problèmes de performance uniquement via ce blog. Parfois, les racines du problème sont plus profondes, comme une mauvaise conception de l'architecture, un code personnalisé, un serveur de base de données mal réglé (par exemple, pas assez de broches de disque pour la base de données, car à l'heure actuelle, les vendeurs informatiques aiment vendre des téraoctets et oublient les IOPS).
Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,
Ognjen Antonic
Bonjour,
Quelle est la différence entre les fonctionnalités de Pin_billd et Pin_bill_accts ? quels sont les paramètres d'entrée ?
Vous avez besoin de connaître la différence entre balance_group, item et event ?
Bonjour,
Le solde actuel présent dans la table "bal_sub_bals_t" n'est pas reflété dans l'onglet Solde du centre client. Quel peut être le problème ? et comment résoudre ce problème. Merci de m'aider.
J'ai des clients qui ont annulé leur abonnement et je suis censé les rembourser, mais leur carte de crédit a expiré et je ne peux donc pas le faire, ce qui se répercute sur mon écart chaque mois.
Bonjour : Dans l'un des posts précédents (28 octobre 2011 par admin), il est fait référence au livre Oracle BRM essentials Book for Oracle Gold Partners. Pourriez-vous, s'il vous plaît, me fournir plus d'informations sur la façon d'accéder à ces livres ? Ces livres sont-ils vendus par vous ou par Oracle ? Merci d'avance.
La facturation est toujours exécutée en mode unique et la valeur per_batch n'a donc pas d'importance.
Bonjour,
Je voudrais savoir s'il y a des restrictions sur le nombre de factures qui peuvent être générées sur un compte dans BRM.
Si oui, pouvez-vous nous indiquer où nous pouvons le vérifier ?
Salutations
En principe, il n'y a pas de restrictions et vous pouvez avoir de nombreuses factures par compte. Pour ce faire, vous devez créer davantage de groupes de solde et les affecter chacun à une unité de facturation nouvellement créée (/billinfo).
Pour en savoir plus, consultez le site http://ow.ly/TKGc308tB9F
Bonjour Rana,
Je ne suis pas d'accord avec le fait que la facturation soit toujours exécutée en mode unique. Attribut Per_batch
spécifie le nombre d'objets traités par chaque thread de travailleur en mode batch.
Pour exécuter plusieurs threads, vous devez définir l'attribut children sur 2 ou plus.
L'attribut Children spécifie le nombre de threads de travail créés pour effectuer le travail spécifié. La valeur par défaut est 5.
L'exemple montre la configuration avec 10 threads.
- pin_mta enfants 10
- pin_mta par_lot 600
- pin_mta per_step 1500
- pin_mta fetch_size 6000
Merci,
Igor
Bonjour à tous,
Comment vérifiez-vous la facturation ?
Comment vérifier que toutes les factures ont été créées ?
Comment vérifier que toutes les factures ont été créées ?
Merci,
Karl
Outre les requêtes destinées à vérifier la progression, les performances et l'achèvement de l'exécution des utilitaires pin_bill_accts et pin_inv_accts, il existe une série de requêtes qui peuvent être exécutées une fois la facturation terminée afin de vérifier l'exactitude des données générées par ces processus. Ces requêtes sont les suivantes :
- Y a-t-il une différence entre un événement et un article ?
select i.account_obj_id0,i.poid_id0,i.name,item_total,sum(amount),sum(amount)-item_total
from event_bal_impacts_t eb,item_t i
where eb.item_obj_id0=i.poid_id0
and i.bill_obj_id0 in (select poid_id0 from bill_t where start_t=)
et eb.resource_id=978
group by i.account_obj_id0,i.poid_id0,name,item_total
ayant sum(amount)-item_total0
order by sum(amount)-item_total desc ;
-Attendu : Aucune ligne trouvée
Jean
Comment relever les défis de la performance dans Oracle BRM ?
Patrick
Bonjour,
En exécutant les utilitaires de facturation Oracle BRM MTA suivants, vous obtenez les erreurs suivantes :
[pin_billd]$ pin_bill_accts -v
pin_bill_accts : erreur de recherche de symbole : pin_bill_accts : symbole non défini :
pcm_set_multithread
[pin_billd]$ pin_collect
pin_collect : erreur de recherche de symbole : pin_collect : symbole non défini :
pcm_set_multithread
[ pin_billd]$ pin_inv_accts
pin_inv_accts : erreur de recherche de symbole : pin_inv_accts : symbole non défini :
pcm_set_multithread
Aidez-nous
Cela fait un certain temps que je n'ai pas publié mon dernier billet. Permettez-moi de partager quelques requêtes SQL, qui pourraient aider tout opérateur Oracle BRM. En raison des restrictions de sécurité du blog, vous devez remplacer SLT par select.
- Existe-t-il un compte ayant des articles et n'ayant pas de factures ?;
SLT a.poid_0,first_name,last_name,a.status
from account_t a,account_nameinfo_t an
où an.obj_id0=a.poid_id0
et n'existe pas (SLT 1 from bill_t b
where bill_no is not null
et end_t=
et b.account_obj_id0=a.poid_id0)
et existe (SLT 1 de item_t i
où a.poid_id0=i.account_obj_id0
et effective_t=
-et que item_no n'est pas null
et item_total!=0.00)
et a.created_t<
- Attendu : Aucune ligne trouvée
- Un autre moyen;
SLT a.poid_0,first_name,last_name,a.status
from account_t a,account_nameinfo_t an
où an.obj_id0=a.poid_id0
et n'existe pas (SLT 1 from bill_t b
where bill_no is not null
et end_t=
et b.account_obj_id0=a.poid_id0)
et existe (SLT 1 from item_t i,billinfo_t bi
où a.poid_id0=i.account_obj_id0
et i.account_obj_id0=bi.account_obj_id0
et i.bill_obj_id0=bi.last_bill_obj_id0
et item_total!=0.00)
et a.created_t<
- Attendu : Aucune ligne trouvée
- Y a-t-il une différence entre un article et une facture ?) b,
SLT poid_id0 bill,current_total bill_total,item_total
from (SLT poid_id0,current_total from bill_t
où end_t=
(SLT bill_obj_id0,sum(round(item_total,2)) item_total
de item_t
group by bill_obj_id0) i
où i.bill_obj_id0=b.poid_id0
et abs(current_total-item_total)>0.01 ;
- Attendu : Aucune ligne trouvée
J'ajoute quelques requêtes SQL pour vérifier la facturation d'Oracle BRM :
- Y a-t-il un élément non facturé ?) ou status=1 ou ar_bill_obj_id0=0 ou ar_billinfo_obj_id0=0)
SLTdistinct account_obj_id0,bill_obj_id0 from item_t i
où existe
(SLT1 de bill_t b
where b.poid_id0=i.bill_obj_id0
et end_t=
et (effective_t!=
;
- Y a-t-il un compte non facturé ?
SLTpoid_id0, first_name,last_name,a.status
from account_t a, account_nameinfo_t an
où a.poid_id0=an.obj_id0
et created_t<
and not exists (SLTb.account_obj_id0 from bill_t b
où end_t=
et b.account_obj_id0=a.poid_id0) ;
-Résultat attendu : Aucune ligne trouvée
- Autre moyen);
SLT* from billinfo_t bi
où état_de_la_facturation=0
et last_bill_t=
et n'existe pas
(SLT1 from bill_t b where b.account_obj_id0=bi.account_obj_id0)
et bill_no n'est pas nul et end_t=
-Résultats attendus : Aucune ligne trouvée
- Existe-t-il un compte avec deux factures ?
SLTcount(*),account_obj_id0
de bill_t
où end_t=
group by account_obj_id0
ayant count(*)>1 ;
-Résultats attendus : Aucune ligne trouvée
- Existe-t-il un projet de loi sans projet de loi négatif ?
SLT* de bill_t
où end_t=
et bill_no est nul ;
- Attendu : Aucune ligne trouvée
L'analyse de ldd libcmpin.so, libportal.so, libportal64.so et libpcmcpp67.so montre que la cause première de cette erreur est liée aux paramètres du chemin d'accès.
libportal.so => /brmdata/opt/ifw/lib/libportal.so (0xf76c7000)
Veuillez vérifier la variable $LD_LIBRARY_PATH, par défaut elle pointe vers IFW.
Pour corriger les erreurs, exécutez le programme :
source $PIN_HOME/source.me.csh
et poursuivre les opérations.
Vos utilitaires Oracle BRM devraient maintenant fonctionner correctement.
J'utilise également les requêtes ci-jointes pour examiner ma facturation Oracle BRM.
- Y a-t-il une facture avec un numéro de facture en double ?
SLT count(*),bill_no from invoice_t
group by bill_no
ayant count(*)>1 ;
- Attendu : Aucune ligne trouvée
- La facturation a échoué ?
SLT * from billinfo_t
où billing_state = 4
- et bill_info_id<>Unité de facturation(1)" ;
-Résultats attendus : Aucune ligne trouvée
- Les projets de loi disposent d'une information appropriée sur les projets de loi ?
SLT b.poid_0,b.account_obj_id0,current_total,due,total_due,subords_total,parent_id0,bp.poid_0
from bill_t b,billinfo_t bi
où b.account_obj_id0=bi.account_obj_id0
et end_t=
et (b.billinfo_obj_id0<>bi.poid_id0 ou b.ar_billinfo_obj_id0<>bi.ar_billinfo_obj_id0) ;
- Attendu : Aucune ligne trouvée
- Les factures pour les enfants ont-elles une facture parentale appropriée ?
SLT b.poid_0,b.account_obj_id0,b.current_total,b.due,b.total_due,b.subords_total,b.parent_id0
from bill_t b,billinfo_t bi,billinfo_t bip,bill_t bp
où b.account_obj_id0=bi.account_obj_id0
et bi.poid_id0!=bi.ar_billinfo_obj_id0
et bi.ar_billinfo_obj_id0=bip.poid_id0
et bip.account_obj_id0=bp.account_obj_id0
et b.end_t=
et bp.end_t=
et b.parent_id0<>bp.poid_id0 ;
- Attendu : Aucune ligne trouvée
- Les factures pour les enfants sont-elles correctes ?
SLT b.poid_0,b.account_obj_id0,current_total,due,total_due,subords_total,parent_id0
from bill_t b,billinfo_t bi
où b.account_obj_id0=bi.account_obj_id0
et bi.poid_id0!=bi.ar_billinfo_obj_id0
et end_t=
et (total_courant<>due ou subords_total<>0 ou parent_id0=0) ;
- Attendu : Aucune ligne trouvée
- Les factures pour les vrais parents sont-elles correctes ?
SLT b.poid_id0,b.account_obj_id0,current_total,due,total_due,subords_total,parent_id0,ar_hierarchy_size
from bill_t b,billinfo_t bi
où b.account_obj_id0=bi.account_obj_id0
et bi.poid_id0=bi.ar_billinfo_obj_id0
et end_t=
et subords_total<>0
et (total_courant<>0 ou parent_id0<>0 ou subords_total<>due ou ar_hierarchy_size=0) ;
Attendu : Aucune ligne trouvée
- La somme des factures des enfants et des parents est égale ?
SLT poid_id0,subords_total,children.current_total
de bill_t b,
(SLT parent_id0,sum(current_total) current_total
from bill_t where parent_id0<>0
group by parent_id0) children
where b.poid_id0=children.parent_id0
et end_t=
et children.current_total<>subords_total ;
- Attendu : Aucune ligne trouvée
- Billinfo last_bill_t est correctement paramétré ? –01.01 ;
SLT distinct a.poid_id0,first_name,last_name,a.status,pin2date(last_bill_t)
from billinfo_t bi,account_t a, account_nameinfo_t an
where account_obj_id0=a.poid_id0
et an.obj_id0=a.poid_id0
et bi.last_bill_t!=
et billing_status dans (0,4)
et a.created_t<
- Attendu : Aucune ligne trouvée
- Billinfo next_bill_t est correctement paramétré ?;
SLT distinct a.poid_id0,first_name,last_name,a.status,pin2date(last_bill_t)
from billinfo_t bi,account_t a, account_nameinfo_t an
where account_obj_id0=a.poid_id0
et an.obj_id0=a.poid_id0
et bi.next_bill_t!= 1201820400 -01.02
et billing_status dans (0,4)
et a.created_t<
- Attendu : Aucune ligne trouvée
- Billinfo future_bill_t est correctement paramétré ?;
SLT distinct a.poid_id0,first_name,last_name,a.status,pin2date(last_bill_t)
from billinfo_t bi,account_t a, account_nameinfo_t an
where account_obj_id0=a.poid_id0
et an.obj_id0=a.poid_id0
et bi.future_bill_t!=1204326000 -01.03
et billing_status dans (0,4)
et a.created_t<
- Attendu : Aucune ligne trouvée
- Billinfo last_bill_obj_id0 est généré ?;
SLT a.poid_0,first_name,last_name,a.status
from billinfo_t bi,account_t a,account_nameinfo_t an
where account_obj_id0=a.poid_id0
et an.obj_id0=a.poid_id0
et n'existe pas
(SLT 1 de bill_t b
where b.poid_id0=last_bill_obj_id0
et b.account_obj_id0=bi.account_obj_id0
et last_bill_t=end_t)
et billing_status dans (0,4)
et a.created_t<
- Attendu : Aucune ligne trouvée
- Billinfo next_bill_obj_id0 est généré ?;
SLT a.poid_0,first_name,last_name,a.status
from billinfo_t bi,account_t a, account_nameinfo_t an
where account_obj_id0=a.poid_id0
et an.obj_id0=a.poid_id0
et n'existe pas
(SLT 1 de bill_t b
where b.poid_id0=bill_obj_id0
et b.account_obj_id0=bi.account_obj_id0
et bi.last_bill_t=b.start_t)
et billing_status dans (0,4)
et a.created_t<
- Attendu : Aucune ligne trouvée
- Billinfo future_bill_obj_id0 est générée ?;
SLT a.poid_0,first_name,last_name,a.status
from billinfo_t bi,account_t a, account_nameinfo_t an
where account_obj_id0=a.poid_id0
et an.obj_id0=a.poid_id0
et n'existe pas
(SLT 1 de bill_t b
where b.poid_id0=next_bill_obj_id0
et b.account_obj_id0=bi.account_obj_id0
et bi.last_bill_t=b.start_t)
et billing_status dans (0,4)
et a.created_t<
- Attendu : Aucune ligne trouvée
OK !!!
- Existe-t-il une facture pour laquelle il n'y a pas de création de facture ?
SLT b.poid_0,b.account_obj_id0,bill_no,due
from bill_t b,billinfo_t bi
où b.account_obj_id0=bi.account_obj_id0
et b.end_t=
et pay_type dans (10001,10007)
et b.billinfo_obj_id0=b.ar_billinfo_obj_id0
et n'existe pas
(SLT 1 from invoice_t i
where i.bill_obj_id0 = b.poid_id0) ;
Attendu : Aucune ligne trouvée
- Y a-t-il une facture qui ne correspond pas à la facture ?
SLT * from bill_t b,invoice_t i
where b.poid_id0=i.bill_obj_id0
et (b.bill_no<>i.bill_no ou b.end_t<>i.bill_date_t) ;
- Attendu : Aucune ligne trouvée
- Existe-t-il une facture avec un numéro de facture en double ?
SLT count(*),bill_no from invoice_t
group by bill_no
ayant count(*)>1 ;
- Attendu : Aucune ligne trouvée
Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,
Ales