Technical writing/Making a bad requirement good/WlodekZdenkaExercise

Invoice requirements
I01. The system must print the invoice on the specified date of the month by default/the date is optional
I02. The system must print the invoice for each customer/ optionally 1 customer, default ALL
I03. The system must be able to print the invoice for the particular subscribers/optionally, default ALL
I04. The printed period must be changeble/could be set by default

Printing requirements
P01. The invoicing period
P02. Databases of customers,subsribers inc., accounts database
P03. The invoice is printed for the first time or reprinted/optionally, default 1.
P04. The session is regular/hot-billing /optionally, default regular
P05. Hot-billing session must be performed after the regular session / flag after the regular session closed


At the beginning of each month all clients (Customer Alpha, Customer Omega) print invoices for previous month. Customer Alpha uses bulk printing. As an input parameter is a SFBR (session for bill result). Sometimes Customer Alpha needs to print invoices only for particular subscribers. Invoices to be printed are chosen by a list of Personal accounts. Sometimes it is needed to reprint all invoices for a particular period of time (i.e. last year etc.). One customer can have several contracts; each contract can have several personal accounts. So to print invoices of one customer it is necessary to use list of personal accounts. If customer closes contract (usually other day then at date of billing session), then a hot-bill will be created and the regular bill created as well. At the billing session close there runs a check-up for any hot-bills. For the personal account with a hot-bill there will be created a new shorter billing period for the regular bill, excluding the period of the hot-bill. At the end of each month Client Alpha needs to print all hot-bills in one bulk procedure.


To fully satisfy these needs, it is necessary to create three new methods, which will extend the actual system. These new methods will be called on DataBase level via DataBase link. Because it is impossible to transmit sys_refcursor via DataBase link, “types” should be used