The NEGATIVE class condition represents sophisticated numeric validation and sign testing capabilities within COBOL programming environments, providing comprehensive negative value detection, advanced sign processing features, and intelligent numeric validation mechanisms that enable reliable data verification, efficient sign-based conditional logic, and robust numeric data handling. This condition embodies modern data validation principles by supporting precise sign testing, enabling comprehensive numeric validation workflows, and facilitating business logic requirements while maintaining computational efficiency, ensuring accurate numeric processing, and enabling scalable validation architectures across enterprise applications requiring reliable negative number detection, financial data processing, and predictable sign-based decision making throughout complex business calculations and data validation scenarios.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061*> Basic NEGATIVE condition syntax IF data-name IS NEGATIVE imperative-statements END-IF. IF data-name IS NOT NEGATIVE imperative-statements END-IF. *> Examples with different numeric types 01 WS-SIGNED-NUMBERS. 05 WS-BALANCE PIC S9(8)V99 COMP-3. 05 WS-TEMPERATURE PIC S9(3) DISPLAY SIGN LEADING. 05 WS-PROFIT-LOSS PIC S9(10)V99 USAGE COMP. 05 WS-ADJUSTMENT PIC S9(6)V99. PROCEDURE DIVISION. *> Test for negative balance IF WS-BALANCE IS NEGATIVE DISPLAY "Account overdrawn" PERFORM OVERDRAFT-PROCESSING END-IF *> Test for negative temperature IF WS-TEMPERATURE IS NEGATIVE DISPLAY "Temperature below freezing" PERFORM FREEZING-ALERT END-IF *> Test for losses IF WS-PROFIT-LOSS IS NEGATIVE DISPLAY "Financial loss detected" PERFORM LOSS-ANALYSIS ELSE DISPLAY "Profitable operation" END-IF *> Multiple conditions IF WS-BALANCE IS NEGATIVE AND WS-ADJUSTMENT IS NEGATIVE DISPLAY "Both balance and adjustment are negative" END-IF. *> NEGATIVE in EVALUATE statements EVALUATE TRUE WHEN WS-BALANCE IS POSITIVE PERFORM CREDIT-PROCESSING WHEN WS-BALANCE IS NEGATIVE PERFORM DEBIT-PROCESSING WHEN WS-BALANCE IS ZERO PERFORM ZERO-BALANCE-PROCESSING END-EVALUATE. *> NEGATIVE with arrays 01 WS-TRANSACTION-AMOUNTS OCCURS 100 TIMES PIC S9(6)V99. PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 100 IF WS-TRANSACTION-AMOUNTS(WS-INDEX) IS NEGATIVE ADD 1 TO WS-NEGATIVE-COUNT ADD WS-TRANSACTION-AMOUNTS(WS-INDEX) TO WS-NEGATIVE-TOTAL END-IF END-PERFORM.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406IDENTIFICATION DIVISION. PROGRAM-ID. NEGATIVE-CONDITION-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Financial data with signed fields 01 WS-FINANCIAL-DATA. 05 WS-ACCOUNT-BALANCE PIC S9(10)V99 COMP-3. 05 WS-MONTHLY-CHANGE PIC S9(8)V99 COMP-3. 05 WS-INTEREST-EARNED PIC S9(6)V99 COMP-3. 05 WS-FEES-CHARGED PIC S9(5)V99 COMP-3. 05 WS-NET-WORTH PIC S9(12)V99 COMP-3. *> Temperature monitoring system 01 WS-TEMPERATURE-DATA. 05 WS-CURRENT-TEMP PIC S9(3) DISPLAY SIGN LEADING. 05 WS-TEMP-CHANGE PIC S9(2) DISPLAY SIGN LEADING. 05 WS-MIN-TEMP PIC S9(3) DISPLAY SIGN LEADING. 05 WS-MAX-TEMP PIC S9(3) DISPLAY SIGN LEADING. 05 WS-DAILY-READINGS OCCURS 24 TIMES. 10 WS-HOURLY-TEMP PIC S9(3) DISPLAY SIGN LEADING. *> Business metrics 01 WS-BUSINESS-METRICS. 05 WS-REVENUE PIC S9(10)V99. 05 WS-EXPENSES PIC S9(10)V99. 05 WS-PROFIT-LOSS PIC S9(10)V99. 05 WS-GROWTH-RATE PIC S9(3)V99. 05 WS-VARIANCE PIC S9(8)V99. *> Inventory adjustments 01 WS-INVENTORY-DATA. 05 WS-QUANTITY-CHANGE PIC S9(6). 05 WS-VALUE-ADJUSTMENT PIC S9(8)V99. 05 WS-SHRINKAGE PIC S9(6)V99. 05 WS-REORDER-POINT PIC S9(6). *> Validation and processing counters 01 WS-PROCESSING-COUNTERS. 05 WS-NEGATIVE-COUNT PIC 9(6) VALUE 0. 05 WS-POSITIVE-COUNT PIC 9(6) VALUE 0. 05 WS-ZERO-COUNT PIC 9(6) VALUE 0. 05 WS-TOTAL-PROCESSED PIC 9(6) VALUE 0. 05 WS-ERROR-COUNT PIC 9(4) VALUE 0. *> Status and control fields 01 WS-PROCESSING-STATUS. 05 WS-ALERT-FLAG PIC X VALUE 'N'. 05 WS-WARNING-LEVEL PIC 9 VALUE 0. 05 WS-PROCESS-CODE PIC X(5). 05 WS-ERROR-MESSAGE PIC X(100). PROCEDURE DIVISION. MAIN-NEGATIVE-DEMO. DISPLAY "=== COBOL NEGATIVE CONDITION DEMONSTRATION ===" DISPLAY SPACES PERFORM DEMONSTRATE-BASIC-NEGATIVE PERFORM DEMONSTRATE-FINANCIAL-VALIDATION PERFORM DEMONSTRATE-TEMPERATURE-MONITORING PERFORM DEMONSTRATE-BUSINESS-ANALYSIS PERFORM DEMONSTRATE-INVENTORY-PROCESSING PERFORM DEMONSTRATE-BATCH-VALIDATION DISPLAY "=== NEGATIVE CONDITION DEMO COMPLETE ===" STOP RUN. DEMONSTRATE-BASIC-NEGATIVE. DISPLAY "=== BASIC NEGATIVE CONDITION USAGE ===" DISPLAY SPACES DISPLAY "Testing NEGATIVE class condition with various values:" *> Test with different negative values MOVE -1234.56 TO WS-ACCOUNT-BALANCE IF WS-ACCOUNT-BALANCE IS NEGATIVE DISPLAY " Balance " WS-ACCOUNT-BALANCE " is NEGATIVE ✓" ADD 1 TO WS-NEGATIVE-COUNT ELSE DISPLAY " Balance " WS-ACCOUNT-BALANCE " is NOT negative ✗" END-IF *> Test with positive value MOVE 5000.00 TO WS-ACCOUNT-BALANCE IF WS-ACCOUNT-BALANCE IS NEGATIVE DISPLAY " Balance " WS-ACCOUNT-BALANCE " is NEGATIVE ✗" ELSE DISPLAY " Balance " WS-ACCOUNT-BALANCE " is NOT negative ✓" ADD 1 TO WS-POSITIVE-COUNT END-IF *> Test with zero MOVE 0 TO WS-ACCOUNT-BALANCE IF WS-ACCOUNT-BALANCE IS NEGATIVE DISPLAY " Balance " WS-ACCOUNT-BALANCE " is NEGATIVE ✗" ELSE DISPLAY " Balance " WS-ACCOUNT-BALANCE " is NOT negative ✓" ADD 1 TO WS-ZERO-COUNT END-IF *> Test with very small negative value MOVE -0.01 TO WS-ACCOUNT-BALANCE IF WS-ACCOUNT-BALANCE IS NEGATIVE DISPLAY " Balance " WS-ACCOUNT-BALANCE " is NEGATIVE ✓" ADD 1 TO WS-NEGATIVE-COUNT END-IF DISPLAY " Summary: " WS-NEGATIVE-COUNT " negative, " WS-POSITIVE-COUNT " positive, " WS-ZERO-COUNT " zero" DISPLAY SPACES. DEMONSTRATE-FINANCIAL-VALIDATION. DISPLAY "=== FINANCIAL DATA VALIDATION ===" DISPLAY SPACES DISPLAY "Processing financial account data..." *> Initialize financial data MOVE -2500.75 TO WS-ACCOUNT-BALANCE MOVE -150.00 TO WS-MONTHLY-CHANGE MOVE 25.50 TO WS-INTEREST-EARNED MOVE -45.00 TO WS-FEES-CHARGED DISPLAY "Account Analysis:" DISPLAY " Current balance: $" WS-ACCOUNT-BALANCE *> Validate account balance IF WS-ACCOUNT-BALANCE IS NEGATIVE DISPLAY " ⚠️ OVERDRAFT ALERT: Account is overdrawn" MOVE 'Y' TO WS-ALERT-FLAG MOVE 3 TO WS-WARNING-LEVEL MOVE "OVRD" TO WS-PROCESS-CODE *> Check severity of overdraft IF WS-ACCOUNT-BALANCE < -1000 DISPLAY " 🚨 SEVERE OVERDRAFT: Balance exceeds $1,000 limit" MOVE 5 TO WS-WARNING-LEVEL END-IF ELSE DISPLAY " ✓ Account balance is positive" MOVE "NORM" TO WS-PROCESS-CODE END-IF *> Analyze monthly change DISPLAY " Monthly change: $" WS-MONTHLY-CHANGE IF WS-MONTHLY-CHANGE IS NEGATIVE DISPLAY " 📉 Account decreased this month" IF WS-ACCOUNT-BALANCE IS NEGATIVE DISPLAY " 💡 Recommendation: Deposit funds immediately" END-IF ELSE DISPLAY " 📈 Account increased this month" END-IF *> Calculate net activity COMPUTE WS-NET-WORTH = WS-INTEREST-EARNED + WS-FEES-CHARGED DISPLAY " Net fees/interest: $" WS-NET-WORTH IF WS-NET-WORTH IS NEGATIVE DISPLAY " 📊 Net fees exceed interest earned" ELSE DISPLAY " 📊 Interest earnings exceed fees" END-IF DISPLAY " Alert status: " WS-ALERT-FLAG DISPLAY " Warning level: " WS-WARNING-LEVEL DISPLAY " Process code: " WS-PROCESS-CODE DISPLAY SPACES. DEMONSTRATE-TEMPERATURE-MONITORING. DISPLAY "=== TEMPERATURE MONITORING SYSTEM ===" DISPLAY SPACES DISPLAY "Processing temperature sensor data..." *> Initialize temperature readings MOVE -5 TO WS-CURRENT-TEMP MOVE -2 TO WS-TEMP-CHANGE MOVE -15 TO WS-MIN-TEMP MOVE 8 TO WS-MAX-TEMP DISPLAY "Temperature Analysis:" DISPLAY " Current temperature: " WS-CURRENT-TEMP "°C" *> Check for freezing conditions IF WS-CURRENT-TEMP IS NEGATIVE DISPLAY " 🥶 FREEZING ALERT: Temperature below 0°C" MOVE 'Y' TO WS-ALERT-FLAG IF WS-CURRENT-TEMP < -10 DISPLAY " ❄️ EXTREME COLD: Temperature below -10°C" MOVE 4 TO WS-WARNING-LEVEL ELSE MOVE 2 TO WS-WARNING-LEVEL END-IF ELSE DISPLAY " 🌡️ Temperature above freezing" MOVE 0 TO WS-WARNING-LEVEL END-IF *> Analyze temperature trend DISPLAY " Temperature change: " WS-TEMP-CHANGE "°C" IF WS-TEMP-CHANGE IS NEGATIVE DISPLAY " 📉 Temperature falling" IF WS-CURRENT-TEMP IS NEGATIVE AND WS-TEMP-CHANGE IS NEGATIVE DISPLAY " ⚠️ CONTINUED COOLING: Already below freezing" END-IF ELSE DISPLAY " 📈 Temperature rising" IF WS-CURRENT-TEMP IS NEGATIVE AND WS-TEMP-CHANGE > 0 DISPLAY " 🌤️ WARMING TREND: May rise above freezing" END-IF END-IF *> Check daily extremes DISPLAY " Daily range: " WS-MIN-TEMP "°C to " WS-MAX-TEMP "°C" IF WS-MIN-TEMP IS NEGATIVE DISPLAY " ❄️ Daily minimum below freezing" END-IF DISPLAY " Warning level: " WS-WARNING-LEVEL DISPLAY SPACES. DEMONSTRATE-BUSINESS-ANALYSIS. DISPLAY "=== BUSINESS PERFORMANCE ANALYSIS ===" DISPLAY SPACES DISPLAY "Analyzing business metrics..." *> Initialize business data MOVE 150000.00 TO WS-REVENUE MOVE 175000.00 TO WS-EXPENSES COMPUTE WS-PROFIT-LOSS = WS-REVENUE - WS-EXPENSES MOVE -5.25 TO WS-GROWTH-RATE MOVE -12500.50 TO WS-VARIANCE DISPLAY "Financial Performance:" DISPLAY " Revenue: $" WS-REVENUE DISPLAY " Expenses: $" WS-EXPENSES DISPLAY " Profit/Loss: $" WS-PROFIT-LOSS *> Analyze profitability IF WS-PROFIT-LOSS IS NEGATIVE DISPLAY " 📉 LOSS DETECTED: Business operating at a loss" MOVE "LOSS" TO WS-PROCESS-CODE MOVE 'Y' TO WS-ALERT-FLAG *> Calculate loss percentage COMPUTE WS-VARIANCE = (WS-PROFIT-LOSS / WS-REVENUE) * 100 DISPLAY " Loss percentage: " WS-VARIANCE "%" IF WS-VARIANCE < -20 DISPLAY " 🚨 CRITICAL: Loss exceeds 20% of revenue" MOVE 5 TO WS-WARNING-LEVEL ELSE MOVE 3 TO WS-WARNING-LEVEL END-IF ELSE DISPLAY " ✓ PROFITABLE: Business generating profit" MOVE "PROF" TO WS-PROCESS-CODE END-IF *> Analyze growth rate DISPLAY " Growth rate: " WS-GROWTH-RATE "%" IF WS-GROWTH-RATE IS NEGATIVE DISPLAY " 📉 DECLINING: Negative growth rate" IF WS-PROFIT-LOSS IS NEGATIVE AND WS-GROWTH-RATE IS NEGATIVE DISPLAY " ⚠️ DOUBLE NEGATIVE: Both profit and growth declining" END-IF ELSE DISPLAY " 📈 GROWING: Positive growth rate" END-IF DISPLAY " Process code: " WS-PROCESS-CODE DISPLAY " Alert status: " WS-ALERT-FLAG DISPLAY SPACES. DEMONSTRATE-INVENTORY-PROCESSING. DISPLAY "=== INVENTORY ADJUSTMENT PROCESSING ===" DISPLAY SPACES DISPLAY "Processing inventory adjustments..." *> Initialize inventory data MOVE -150 TO WS-QUANTITY-CHANGE MOVE -2500.75 TO WS-VALUE-ADJUSTMENT MOVE -125.50 TO WS-SHRINKAGE MOVE -25 TO WS-REORDER-POINT DISPLAY "Inventory Analysis:" DISPLAY " Quantity change: " WS-QUANTITY-CHANGE " units" *> Process quantity changes IF WS-QUANTITY-CHANGE IS NEGATIVE DISPLAY " 📦 INVENTORY REDUCTION: Stock decreased" MOVE "REDN" TO WS-PROCESS-CODE *> Check if significant reduction IF WS-QUANTITY-CHANGE < -100 DISPLAY " ⚠️ LARGE REDUCTION: Over 100 units removed" MOVE 3 TO WS-WARNING-LEVEL END-IF ELSE DISPLAY " 📈 INVENTORY INCREASE: Stock added" MOVE "INCR" TO WS-PROCESS-CODE END-IF *> Process value adjustments DISPLAY " Value adjustment: $" WS-VALUE-ADJUSTMENT IF WS-VALUE-ADJUSTMENT IS NEGATIVE DISPLAY " 💰 VALUE DECREASE: Inventory value reduced" IF WS-QUANTITY-CHANGE IS NEGATIVE AND WS-VALUE-ADJUSTMENT IS NEGATIVE DISPLAY " 📉 BOTH NEGATIVE: Quantity and value both decreased" END-IF ELSE DISPLAY " 💰 VALUE INCREASE: Inventory value increased" END-IF *> Process shrinkage DISPLAY " Shrinkage: $" WS-SHRINKAGE IF WS-SHRINKAGE IS NEGATIVE DISPLAY " 🔍 SHRINKAGE DETECTED: Inventory loss identified" MOVE 'Y' TO WS-ALERT-FLAG END-IF *> Check reorder point DISPLAY " Reorder point adjustment: " WS-REORDER-POINT IF WS-REORDER-POINT IS NEGATIVE DISPLAY " 📊 REORDER LOWERED: Reduced reorder threshold" END-IF DISPLAY " Process code: " WS-PROCESS-CODE DISPLAY " Alert triggered: " WS-ALERT-FLAG DISPLAY SPACES. DEMONSTRATE-BATCH-VALIDATION. DISPLAY "=== BATCH DATA VALIDATION ===" DISPLAY SPACES DISPLAY "Validating batch of hourly temperature readings..." *> Initialize sample temperature readings MOVE -8 TO WS-HOURLY-TEMP(1) MOVE -5 TO WS-HOURLY-TEMP(2) MOVE -2 TO WS-HOURLY-TEMP(3) MOVE 1 TO WS-HOURLY-TEMP(4) MOVE 3 TO WS-HOURLY-TEMP(5) MOVE 5 TO WS-HOURLY-TEMP(6) MOVE 7 TO WS-HOURLY-TEMP(7) MOVE 8 TO WS-HOURLY-TEMP(8) MOVE 6 TO WS-HOURLY-TEMP(9) MOVE 3 TO WS-HOURLY-TEMP(10) MOVE 0 TO WS-HOURLY-TEMP(11) MOVE -3 TO WS-HOURLY-TEMP(12) *> Reset counters MOVE 0 TO WS-NEGATIVE-COUNT MOVE 0 TO WS-POSITIVE-COUNT MOVE 0 TO WS-ZERO-COUNT *> Process 12 hours of data PERFORM VARYING WS-TOTAL-PROCESSED FROM 1 BY 1 UNTIL WS-TOTAL-PROCESSED > 12 DISPLAY " Hour " WS-TOTAL-PROCESSED ": " WS-HOURLY-TEMP(WS-TOTAL-PROCESSED) "°C" IF WS-HOURLY-TEMP(WS-TOTAL-PROCESSED) IS NEGATIVE DISPLAY " ❄️ Below freezing" ADD 1 TO WS-NEGATIVE-COUNT ELSE IF WS-HOURLY-TEMP(WS-TOTAL-PROCESSED) IS ZERO DISPLAY " 🌡️ At freezing point" ADD 1 TO WS-ZERO-COUNT ELSE DISPLAY " 🌤️ Above freezing" ADD 1 TO WS-POSITIVE-COUNT END-IF END-IF END-PERFORM DISPLAY SPACES DISPLAY "Batch Processing Summary:" DISPLAY " Total readings processed: " WS-TOTAL-PROCESSED DISPLAY " Negative temperatures: " WS-NEGATIVE-COUNT DISPLAY " Positive temperatures: " WS-POSITIVE-COUNT DISPLAY " Zero temperatures: " WS-ZERO-COUNT *> Calculate percentages COMPUTE WS-VARIANCE = (WS-NEGATIVE-COUNT / WS-TOTAL-PROCESSED) * 100 DISPLAY " Percentage below freezing: " WS-VARIANCE "%" IF WS-NEGATIVE-COUNT > (WS-TOTAL-PROCESSED / 2) DISPLAY " ⚠️ MAJORITY FREEZING: Most readings below 0°C" MOVE 'Y' TO WS-ALERT-FLAG ELSE DISPLAY " ✓ MOSTLY ABOVE FREEZING: Majority of readings positive" END-IF DISPLAY SPACES DISPLAY "NEGATIVE condition benefits demonstrated:" DISPLAY " ✓ Clear semantic meaning for sign testing" DISPLAY " ✓ Efficient validation of negative values" DISPLAY " ✓ Simplified conditional logic" DISPLAY " ✓ Enhanced code readability" DISPLAY " ✓ Reliable numeric sign detection" DISPLAY SPACES.
12345678910111213141516171819202122232425262728293031323334353637383901 WS-ACCOUNT-DATA. 05 WS-CURRENT-BALANCE PIC S9(8)V99. 05 WS-TRANSACTION-AMOUNT PIC S9(6)V99. 05 WS-OVERDRAFT-LIMIT PIC S9(6)V99 VALUE -500.00. 05 WS-OVERDRAFT-FEE PIC S9(4)V99 VALUE -35.00. 05 WS-PROJECTED-BALANCE PIC S9(8)V99. PROCEDURE DIVISION. OVERDRAFT-PROTECTION. MOVE 125.50 TO WS-CURRENT-BALANCE MOVE -200.00 TO WS-TRANSACTION-AMOUNT *> Calculate projected balance COMPUTE WS-PROJECTED-BALANCE = WS-CURRENT-BALANCE + WS-TRANSACTION-AMOUNT DISPLAY "Account Overdraft Check:" DISPLAY " Current balance: $" WS-CURRENT-BALANCE DISPLAY " Transaction: $" WS-TRANSACTION-AMOUNT DISPLAY " Projected balance: $" WS-PROJECTED-BALANCE *> Check if transaction would cause overdraft IF WS-PROJECTED-BALANCE IS NEGATIVE DISPLAY " ⚠️ OVERDRAFT WARNING" *> Check if within overdraft limit IF WS-PROJECTED-BALANCE < WS-OVERDRAFT-LIMIT DISPLAY " 🚫 TRANSACTION DENIED: Exceeds overdraft limit" DISPLAY " Overdraft limit: $" WS-OVERDRAFT-LIMIT ELSE DISPLAY " ✓ Transaction approved with overdraft fee" DISPLAY " Overdraft fee: $" WS-OVERDRAFT-FEE COMPUTE WS-PROJECTED-BALANCE = WS-PROJECTED-BALANCE + WS-OVERDRAFT-FEE DISPLAY " Final balance: $" WS-PROJECTED-BALANCE END-IF ELSE DISPLAY " ✓ Transaction approved - no overdraft" END-IF.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535401 WS-PERFORMANCE-METRICS. 05 WS-METRICS OCCURS 5 TIMES. 10 WS-METRIC-NAME PIC X(20). 10 WS-METRIC-VALUE PIC S9(8)V99. 10 WS-TARGET-VALUE PIC S9(8)V99. 10 WS-VARIANCE PIC S9(8)V99. 05 WS-NEGATIVE-METRICS PIC 9(2) VALUE 0. 05 WS-WARNING-COUNT PIC 9(2) VALUE 0. PROCEDURE DIVISION. PERFORMANCE-DASHBOARD. *> Initialize performance data MOVE "Revenue Growth" TO WS-METRIC-NAME(1) MOVE -2.5 TO WS-METRIC-VALUE(1) MOVE 5.0 TO WS-TARGET-VALUE(1) MOVE "Customer Satisfaction" TO WS-METRIC-NAME(2) MOVE 8.2 TO WS-METRIC-VALUE(2) MOVE 8.0 TO WS-TARGET-VALUE(2) MOVE "Cost Reduction" TO WS-METRIC-NAME(3) MOVE -15.3 TO WS-METRIC-VALUE(3) MOVE -10.0 TO WS-TARGET-VALUE(3) DISPLAY "Performance Dashboard Analysis:" DISPLAY "================================" PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 3 COMPUTE WS-VARIANCE(WS-COUNTER) = WS-METRIC-VALUE(WS-COUNTER) - WS-TARGET-VALUE(WS-COUNTER) DISPLAY WS-METRIC-NAME(WS-COUNTER) ":" DISPLAY " Actual: " WS-METRIC-VALUE(WS-COUNTER) DISPLAY " Target: " WS-TARGET-VALUE(WS-COUNTER) DISPLAY " Variance: " WS-VARIANCE(WS-COUNTER) IF WS-VARIANCE(WS-COUNTER) IS NEGATIVE DISPLAY " Status: ⚠️ BELOW TARGET" ADD 1 TO WS-NEGATIVE-METRICS IF WS-VARIANCE(WS-COUNTER) < -5 DISPLAY " Alert: 🚨 SIGNIFICANT UNDERPERFORMANCE" ADD 1 TO WS-WARNING-COUNT END-IF ELSE DISPLAY " Status: ✓ MEETING OR EXCEEDING TARGET" END-IF DISPLAY " " END-PERFORM DISPLAY "Summary:" DISPLAY " Metrics below target: " WS-NEGATIVE-METRICS " of 3" DISPLAY " Critical alerts: " WS-WARNING-COUNT.
What is the primary purpose of the NEGATIVE class condition?
Answer: NEGATIVE tests whether a signed numeric field contains a value less than zero. It provides a clear, semantic way to check for negative values in business applications, particularly useful for financial data validation and sign-based conditional logic.
What types of fields can be tested with the NEGATIVE condition?
Answer: NEGATIVE can only be used with signed numeric fields (those with 'S' in the picture clause). It works with DISPLAY, COMP, PACKED-DECIMAL, and other signed numeric formats, but cannot be used with unsigned fields.
What are common business scenarios where NEGATIVE conditions are useful?
Answer: Common applications include account overdraft detection, financial loss identification, inventory shrinkage monitoring, temperature below-freezing alerts, performance variance analysis, and any scenario requiring reliable detection of negative values in business data.