Suppose you see some code which performs 2840-READ-INPUT-REC. Are you likely to wonder what that paragraph does? No, you'll just assume, without looking further, that it's about three lines long. It'll READ something, check for end-of-file, and maybe increment a counter.
If you're right, fine. But suppose that 2840-READ-INPUT-REC doesn't just read a record. It also writes an output record, updates a database, and issues a formfeed on a report. How many hours will you waste before you figure out what's going on? Believe it or not, preposterous programs like this really exist.
In JOCKEY the prefix is a four-digit number followed by a hyphen (or three digits in some small programs). This convention is common, though some shops use alphabetic or alphanumeric prefixes.
If you can't come up with an accurate name without using the word 'and,' then reconsider your design. Your paragraph is probably jumbling things together that don't belong together. If not, try looking at your paragraph from a higher level of abstraction. For example, READ-AND-VALIDATE-RECORD might become GET-VALID-RECORD.
Be as specific as you can. Wimpy words like 'process' or 'handle' drain a name of its meaning.
(By tradition, the uppermost paragraphs are exempt from this rule. No one will be baffled by a conventional PERFORM 2000-PROCESS-RECORD, even if it is a bit vague.)
Even if the paragraph is PERFORMed with an UNTIL clause, the name should tell what the paragraph does on a single invocation. For example: you are loading a WORKING-STORAGE table from a file, PERFORMing a paragraph for each record. The name of that paragraph should be 1310-LOAD-RECORD, not 1310-LOAD-TABLE.
We can afford to make this rule absolute, since it is easy to follow. An occasional global edit is a small price to pay for being able to find paragraphs easily.
The topmost paragraph is numbered 0000. It typically performs 1000, 2000, and 3000. The next level down would have numbers like 1100, 2700, and so on. Only the lowest-level paragraphs have no trailing zeros at all.
In a strict application of this rule, there could only be five levels. Since that's usually not enough levels in a non-trivial program, we bend the rule as convenient.
This rule tends to bring related paragraphs together, especially at lower levels. Paragraphs mostly perform paragraphs which follow them in the source code. Not only does this pattern make the code more intuitive to follow, but it may also reduce the number of page faults at run time.
Any convention sanctioned by common usage deserves some respect. Still, this style has little to recommend it.
The text portion of a paragraph name can (and should) indicate what a paragraph does. To encode a crude functional category in the prefix adds nothing.
More importantly, it is a bad idea to group these specially tagged paragraphs at the end of the source file, remote from the code which invokes them. Programs are easier to read and maintain when closely related code is grouped together.
On the other hand, some paragraphs (such as 9999-ABEND) are invoked in numerous places. It makes sense to put them toward the end of the source code, but there is little point in creating an extra numbering scheme for them.