<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.webhuis.nl:443/index.php?action=history&amp;feed=atom&amp;title=Business_Requirement_Document</id>
	<title>Business Requirement Document - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.webhuis.nl:443/index.php?action=history&amp;feed=atom&amp;title=Business_Requirement_Document"/>
	<link rel="alternate" type="text/html" href="https://wiki.webhuis.nl:443/index.php?title=Business_Requirement_Document&amp;action=history"/>
	<updated>2026-09-11T10:00:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.webhuis.nl:443/index.php?title=Business_Requirement_Document&amp;diff=4758&amp;oldid=prev</id>
		<title>Martin: Created page with &quot;&lt;span id=&quot;business-requirements-document&quot;&gt;&lt;/span&gt; = Business Requirements Document =  {| !width=&quot;23%&quot;| Field !width=&quot;76%&quot;| Value |- | Document ID | PGCBL-BRD-001 |- | Document Type | Business Requirements Document |- | System | pgcobol — Prime Numbers Application v1.0 |- | Version | 1.0 |- | Status | Approved |- | Owner | Lead Developer |- | Author | [reverse-engineered from source artifacts] |- | Reviewers | — (pending) |- | Approved by | — (pending) |- | Created...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.webhuis.nl:443/index.php?title=Business_Requirement_Document&amp;diff=4758&amp;oldid=prev"/>
		<updated>2026-03-25T15:37:41Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;span id=&amp;quot;business-requirements-document&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = Business Requirements Document =  {| !width=&amp;quot;23%&amp;quot;| Field !width=&amp;quot;76%&amp;quot;| Value |- | Document ID | PGCBL-BRD-001 |- | Document Type | Business Requirements Document |- | System | pgcobol — Prime Numbers Application v1.0 |- | Version | 1.0 |- | Status | Approved |- | Owner | Lead Developer |- | Author | [reverse-engineered from source artifacts] |- | Reviewers | — (pending) |- | Approved by | — (pending) |- | Created...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;business-requirements-document&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Business Requirements Document =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;23%&amp;quot;| Field&lt;br /&gt;
!width=&amp;quot;76%&amp;quot;| Value&lt;br /&gt;
|-&lt;br /&gt;
| Document ID&lt;br /&gt;
| PGCBL-BRD-001&lt;br /&gt;
|-&lt;br /&gt;
| Document Type&lt;br /&gt;
| Business Requirements Document&lt;br /&gt;
|-&lt;br /&gt;
| System&lt;br /&gt;
| pgcobol — Prime Numbers Application v1.0&lt;br /&gt;
|-&lt;br /&gt;
| Version&lt;br /&gt;
| 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Approved&lt;br /&gt;
|-&lt;br /&gt;
| Owner&lt;br /&gt;
| Lead Developer&lt;br /&gt;
|-&lt;br /&gt;
| Author&lt;br /&gt;
| [reverse-engineered from source artifacts]&lt;br /&gt;
|-&lt;br /&gt;
| Reviewers&lt;br /&gt;
| — (pending)&lt;br /&gt;
|-&lt;br /&gt;
| Approved by&lt;br /&gt;
| — (pending)&lt;br /&gt;
|-&lt;br /&gt;
| Created&lt;br /&gt;
| 2026-03-17&lt;br /&gt;
|-&lt;br /&gt;
| Last modified&lt;br /&gt;
| 2026-03-17&lt;br /&gt;
|-&lt;br /&gt;
| Classification&lt;br /&gt;
| Internal&lt;br /&gt;
|-&lt;br /&gt;
| Parent document&lt;br /&gt;
| PGCBL-SAD-001 (Scope and Applicability)&lt;br /&gt;
|-&lt;br /&gt;
| Supersedes&lt;br /&gt;
| —&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;version-history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Version History ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;11%&amp;quot;| Version&lt;br /&gt;
!width=&amp;quot;14%&amp;quot;| Date&lt;br /&gt;
!width=&amp;quot;9%&amp;quot;| Author&lt;br /&gt;
!width=&amp;quot;12%&amp;quot;| Status&lt;br /&gt;
!width=&amp;quot;51%&amp;quot;| Change Summary&lt;br /&gt;
|-&lt;br /&gt;
| 0.1&lt;br /&gt;
| 2026-03-17&lt;br /&gt;
| —&lt;br /&gt;
| Draft&lt;br /&gt;
| Initial reverse-engineering baseline&lt;br /&gt;
|-&lt;br /&gt;
| 1.0&lt;br /&gt;
| 2026-03-17&lt;br /&gt;
| —&lt;br /&gt;
| Approved&lt;br /&gt;
| Baselined&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;table-of-contents&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
&lt;br /&gt;
# [[#1-purpose-and-scope|Purpose and Scope]]&lt;br /&gt;
# [[#2-assumptions-and-dependencies|Assumptions and Dependencies]]&lt;br /&gt;
# [[#3-stakeholders|Stakeholders]]&lt;br /&gt;
# [[#4-functional-requirements|Functional Requirements]]&lt;br /&gt;
# [[#5-non-functional-requirements|Non-Functional Requirements]]&lt;br /&gt;
# [[#6-constraints|Constraints]]&lt;br /&gt;
# [[#7-out-of-scope|Out of Scope]]&lt;br /&gt;
# [[#8-related-documents|Related Documents]]&lt;br /&gt;
# [[#9-open-issues|Open Issues]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;purpose-and-scope&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 1. Purpose and Scope ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;purpose&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.1 Purpose ===&lt;br /&gt;
&lt;br /&gt;
This document defines what the pgcobol system must do from a business perspective. It is the primary input to all technical and design documents in the specification set. Any feature not described here is out of scope.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;scope&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.2 Scope ===&lt;br /&gt;
&lt;br /&gt;
This document covers all externally observable behaviour of pgcobol v1.0: prime-number generation, database persistence, and printed report production.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;out-of-scope&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.3 Out of Scope ===&lt;br /&gt;
&lt;br /&gt;
* How the system achieves its requirements (that is PGCBL-TSD-001).&lt;br /&gt;
* Internal program structure and algorithm details (PGCBL-PLG-001).&lt;br /&gt;
* Non-functional quality attributes in detail (PGCBL-NFR-001).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;audience&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.4 Audience ===&lt;br /&gt;
&lt;br /&gt;
Business analysts, QA engineers, and stakeholders who need to understand what the system does without needing to read COBOL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;related-documents&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.5 Related Documents ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;27%&amp;quot;| Document ID&lt;br /&gt;
!width=&amp;quot;50%&amp;quot;| Title&lt;br /&gt;
!width=&amp;quot;22%&amp;quot;| Relationship&lt;br /&gt;
|-&lt;br /&gt;
| PGCBL-SAD-001&lt;br /&gt;
| Scope and Applicability&lt;br /&gt;
| Navigation; defines document set&lt;br /&gt;
|-&lt;br /&gt;
| PGCBL-NFR-001&lt;br /&gt;
| Non-Functional Requirements&lt;br /&gt;
| Complements this BRD with quality attributes&lt;br /&gt;
|-&lt;br /&gt;
| PGCBL-TSD-001&lt;br /&gt;
| Technical Specification&lt;br /&gt;
| Implements requirements in this document&lt;br /&gt;
|-&lt;br /&gt;
| PGCBL-TTM-001&lt;br /&gt;
| Test Traceability Matrix&lt;br /&gt;
| Maps each requirement here to a test case&lt;br /&gt;
|-&lt;br /&gt;
| PGCBL-ADD-001&lt;br /&gt;
| Architecture Decision Records&lt;br /&gt;
| Documents why the design is as it is&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;assumptions-and-dependencies&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 2. Assumptions and Dependencies ==&lt;br /&gt;
&lt;br /&gt;
See PGCBL-SAD-002 for the full register. Key items:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;36%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;31%&amp;quot;| Item&lt;br /&gt;
!width=&amp;quot;31%&amp;quot;| Type&lt;br /&gt;
|-&lt;br /&gt;
| A-01&lt;br /&gt;
| Prime 2 is manually seeded in the DB before generation&lt;br /&gt;
| Assumption&lt;br /&gt;
|-&lt;br /&gt;
| A-02&lt;br /&gt;
| DB is empty at the start of a generation run&lt;br /&gt;
| Assumption&lt;br /&gt;
|-&lt;br /&gt;
| DEP-03&lt;br /&gt;
| PostgreSQL running on localhost:5432&lt;br /&gt;
| Dependency&lt;br /&gt;
|-&lt;br /&gt;
| DEP-08&lt;br /&gt;
| Prime 2 seeded before first generation&lt;br /&gt;
| Dependency&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;stakeholders&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 3. Stakeholders ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;50%&amp;quot;| Role&lt;br /&gt;
!width=&amp;quot;50%&amp;quot;| Interest&lt;br /&gt;
|-&lt;br /&gt;
| System operator&lt;br /&gt;
| Runs generation and reporting jobs from the command line&lt;br /&gt;
|-&lt;br /&gt;
| Database administrator&lt;br /&gt;
| Owns the PostgreSQL schema; manages credentials and data&lt;br /&gt;
|-&lt;br /&gt;
| Report consumer&lt;br /&gt;
| Reads the formatted print file &amp;lt;code&amp;gt;primes.prt&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;functional-requirements&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 4. Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fr-01-prime-generation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== FR-01 — Prime Generation ===&lt;br /&gt;
&lt;br /&gt;
* The system shall accept a &amp;lt;code&amp;gt;generate&amp;lt;/code&amp;gt; command-line argument to trigger prime-number generation.&lt;br /&gt;
* The system shall test every odd integer from 3 upward for primality using trial division.&lt;br /&gt;
* The system shall store each confirmed prime in the database in ascending order of discovery.&lt;br /&gt;
* Generation shall continue until the candidate number reaches 999,999,999.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fr-02-trial-division-algorithm-correctness&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== FR-02 — Trial-Division Algorithm Correctness ===&lt;br /&gt;
&lt;br /&gt;
* For each candidate number N, the system shall divide N by each known prime p where p ≤ √N.&lt;br /&gt;
* If any p divides N exactly (remainder = 0), N is composite and shall not be stored.&lt;br /&gt;
* If no p ≤ √N divides N, N is prime and shall be persisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fr-03-prime-reporting&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== FR-03 — Prime Reporting ===&lt;br /&gt;
&lt;br /&gt;
* The system shall accept a &amp;lt;code&amp;gt;report&amp;lt;/code&amp;gt; command-line argument to trigger report generation.&lt;br /&gt;
* The system shall read all stored primes from the database in sequence order.&lt;br /&gt;
* The system shall write a paginated, formatted print file containing all primes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fr-04-print-report-format&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== FR-04 — Print Report Format ===&lt;br /&gt;
&lt;br /&gt;
* The report shall contain a page heading (“primes overview”) and column headers on each page.&lt;br /&gt;
* Each data line shall display six prime entries side by side: sequence number and prime value.&lt;br /&gt;
* Each page shall carry a page-number footing.&lt;br /&gt;
* The print record width shall be 132 characters.&lt;br /&gt;
* The report shall be written to a file named &amp;lt;code&amp;gt;primes.prt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fr-05-operational-logging&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== FR-05 — Operational Logging ===&lt;br /&gt;
&lt;br /&gt;
* The system shall write progress and status messages to the system console throughout execution.&lt;br /&gt;
* Each message shall identify the issuing program name and paragraph.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fr-06-error-handling&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== FR-06 — Error Handling ===&lt;br /&gt;
&lt;br /&gt;
* The system shall log an error message and stop cleanly if an unrecognised command-line argument is provided.&lt;br /&gt;
* The system shall log an error message and stop cleanly if the print file cannot be opened.&lt;br /&gt;
* The system shall log database connection or cursor failures and set an error indicator before exiting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;non-functional-requirements&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 5. Non-Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
Summary only — see PGCBL-NFR-001 for full specification.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Category&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Requirement&lt;br /&gt;
|-&lt;br /&gt;
| NFR-PERF-01&lt;br /&gt;
| Performance&lt;br /&gt;
| ≥ 1,000 primes generated per second&lt;br /&gt;
|-&lt;br /&gt;
| NFR-REL-01&lt;br /&gt;
| Reliability&lt;br /&gt;
| Batch runs to completion without manual intervention&lt;br /&gt;
|-&lt;br /&gt;
| NFR-SEC-01&lt;br /&gt;
| Security&lt;br /&gt;
| No credentials in compiled binary&lt;br /&gt;
|-&lt;br /&gt;
| NFR-MAIN-01&lt;br /&gt;
| Maintainability&lt;br /&gt;
| SQL only in &amp;lt;code&amp;gt;primes.cbl&amp;lt;/code&amp;gt;; file I/O only in &amp;lt;code&amp;gt;primesui.cbl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NFR-OPER-02&lt;br /&gt;
| Operability&lt;br /&gt;
| Non-zero process return code on failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;constraints&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 6. Constraints ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! ID&lt;br /&gt;
! Constraint&lt;br /&gt;
|-&lt;br /&gt;
| C-01&lt;br /&gt;
| Must run on Linux with GnuCOBOL 4.0&lt;br /&gt;
|-&lt;br /&gt;
| C-02&lt;br /&gt;
| Must use PostgreSQL as the database&lt;br /&gt;
|-&lt;br /&gt;
| C-03&lt;br /&gt;
| Upper generation limit: 999,999,999 (hard-coded)&lt;br /&gt;
|-&lt;br /&gt;
| C-04&lt;br /&gt;
| Single-user batch execution only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;out-of-scope-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 7. Out of Scope ==&lt;br /&gt;
&lt;br /&gt;
* Interactive or web-based user interfaces.&lt;br /&gt;
* Concurrent or distributed execution.&lt;br /&gt;
* Generation of prime numbers by any algorithm other than trial division.&lt;br /&gt;
* Any prime number below 2 or above 999,999,999.&lt;br /&gt;
* Checkpoint/restart capability for interrupted generation runs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;related-documents-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 8. Related Documents ==&lt;br /&gt;
&lt;br /&gt;
As listed in §1.5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;open-issues&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 9. Open Issues ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;18%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;18%&amp;quot;| Issue&lt;br /&gt;
!width=&amp;quot;18%&amp;quot;| Owner&lt;br /&gt;
!width=&amp;quot;21%&amp;quot;| Target&lt;br /&gt;
!width=&amp;quot;21%&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
| OI-01&lt;br /&gt;
| FR-01: generate loop is commented out in current source — this is defect D-01. FR-01 is not fully met by the current code.&lt;br /&gt;
| Developer&lt;br /&gt;
| —&lt;br /&gt;
| Open&lt;br /&gt;
|-&lt;br /&gt;
| OI-02&lt;br /&gt;
| FR-06: the process does not return a non-zero exit code on error (NFR-OPER-02 gap).&lt;br /&gt;
| Developer&lt;br /&gt;
| —&lt;br /&gt;
| Open&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
Terug naar: [[Design standards]] | [[Cobol and PostgreSQL]]&lt;/div&gt;</summary>
		<author><name>Martin</name></author>
	</entry>
</feed>