summaryrefslogtreecommitdiffstats
path: root/copy/cepis.cpy
blob: 84a9976d7bab4b7ffbc49496e3b124e816360021 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
*> ---------------------------------------------------------------------
*> cepis 0.2.0 -- public data layouts for the cep.is client.
*>
*> Copy this into WORKING-STORAGE (callers) or LINKAGE (subprograms).
*> It defines, in order:
*>
*>   CEPIS-CONFIG      client configuration; fill it with
*>                     CALL "CEPIS-DEFAULT-CONFIG" before overriding
*>   CEPIS-STATUS      outcome of the last call, with the six error
*>                     categories as 88-levels
*>   CEPIS-CEP-INPUT   a CEP as the user typed it, masked or not
*>   CEPIS-CEP         the same CEP, 8 digits
*>   CEPIS-ADDRESS     one address
*>   CEPIS-HEALTH      the answer of GET /health
*>   CEPIS-BATCH       the batch table, one slot per requested CEP
*>
*> Data field names are the API's own, in Portuguese. Everything else in
*> this library is English.
*> ---------------------------------------------------------------------

*> Client configuration. CEPIS-DEFAULT-CONFIG fills every field; change
*> what you need afterwards. CFG-BASE-URL is the one that usually differs
*> between environments.
01  CEPIS-CONFIG.
    05  CFG-BASE-URL                PIC X(200).
    05  CFG-TIMEOUT-MS              PIC 9(9).
    05  CFG-MAX-ATTEMPTS            PIC 9(4).
    05  CFG-BACKOFF-BASE-MS         PIC 9(9).
    05  CFG-BACKOFF-MAX-MS          PIC 9(9).
    05  CFG-TOTAL-TIMEOUT-MS        PIC 9(9).
    05  CFG-USER-AGENT              PIC X(120).

*> Outcome of the last call. Test CEPIS-OK first; the six failure
*> categories are split by the decision the caller has to make, not by
*> the HTTP status that produced them. CEPIS-RETRIABLE covers the three
*> the client already retried on its own before giving up.
*>
*> A CEPIS-NOT-FOUND may also carry CEPIS-FAIXA, the municipality the
*> missing CEP would have belonged to. CEPIS-FAIXA-PRESENT says whether
*> it does; the call has still failed either way.
01  CEPIS-STATUS.
    COPY "cepis-status.cpy" REPLACING
        ==:P:== BY ==CEPIS== ==:L1:== BY ==05== ==:L2:== BY ==10==.

*> A CEP as the caller has it: "01001-000", "01001000" or "01001.000".
01  CEPIS-CEP-INPUT                 PIC X(20).

*> The same CEP reduced to its 8 digits by CEPIS-NORMALIZE-CEP.
01  CEPIS-CEP                       PIC X(8).

*> One address. Fields the database lacks come back as spaces, never as
*> a marker value. ADDR-GEO-PRESENT says whether the coordinate exists;
*> ADDR-GEO-LAT and ADDR-GEO-LON are meaningless when it does not.
01  CEPIS-ADDRESS.
    COPY "cepis-address.cpy" REPLACING
        ==:P:== BY ==ADDR== ==:L1:== BY ==05== ==:L2:== BY ==10==.

*> The answer of GET /health. HEALTH-DEGRADED is not an error: the API
*> reporting itself unwell is the diagnosis you asked for.
01  CEPIS-HEALTH.
    05  HEALTH-STATUS               PIC X(20).
        88  HEALTH-OK               VALUE "ok".
    05  HEALTH-DNE                  PIC X(20).
    05  HEALTH-CEPS                 PIC 9(12).
    05  HEALTH-GEO                  PIC 9(12).
    05  HEALTH-BASE-GERADA-EM       PIC X(32).

*> The batch table. Fill BATCH-COUNT and BATCH-REQUESTED for each slot,
*> then CALL "CEPIS-LOOKUP-MANY". Every slot comes back in place: a CEP
*> that does not exist, or that is not 8 digits, leaves its slot
*> BATCH-ENTRY-MISSING. Slots are never removed or shifted.
*>
*> Batches carry no coordinate: the endpoint behind them is CSV and the
*> CSV has no geo column, so BAT-GEO-PRESENT is always "N" here even for
*> CEPs that do have one. Need the coordinate? Use CEPIS-LOOKUP.
01  CEPIS-BATCH.
    05  BATCH-COUNT                 PIC 9(4).
    05  BATCH-ENTRY OCCURS 1000 TIMES.
        10  BATCH-REQUESTED         PIC X(20).
        10  BATCH-FOUND             PIC X.
            88  BATCH-ENTRY-FOUND   VALUE "Y".
            88  BATCH-ENTRY-MISSING VALUE "N".
        10  BATCH-ADDRESS.
            COPY "cepis-address.cpy" REPLACING
                ==:P:== BY ==BAT== ==:L1:== BY ==15== ==:L2:== BY ==20==.