Ver Mensaje Individual
  #3
Antiguo 16 de agosto de 2025, 17:26
Eslopes
Creador de
PowerRustCOBOL
Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por ámplios conocimientos en la materia Concurso: Tercer puesto: Ganador/a del Tercer puesto en un concurso - Issue reason: Juego  Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras 
Última Actividad 20.09.2026 13:24
Posts Posts: 357
Likes enviados Enviados: 29
Likes recibidos Recibidos: 157

El siguiente código es una posible aplicación Cobol que genera el informe. Observa la llamada CALL "genaicob". Eso es todo lo que necesitas para usar IA generativa con tus informes Cobol existentes.

El ejemplo es bastante básico. Una aplicación más elaborada tendría una interfaz más interesante, pero la mecánica básica es la descrita arriba. Tu aplicación no necesita ajustarse para integrarse directamente con esta tecnología. Un punto de discusión sería crear múltiples prompts, cada uno adecuado a una situación en la que un informe podría tener un diseño completamente diferente, lo que requeriría ajustes en las instrucciones. Otro punto sería poder ajustar la “personalidad” del modelo, haciéndolo más formal y adecuado para su uso en análisis del día a día.

En este momento estoy analizando la mejor forma de crear una solución capaz de navegar en una base de datos relacional, generando SQL de forma dinámica. Otra cuestión es mejorar la interfaz con el usuario. Voy a verificar la posibilidad de usar una GUI con GnuCOBOL. Si logro integrarlo con Streamlit, podremos generar gráficos a partir de la información, pidiéndole al modelo que produzca, por ejemplo, un gráfico circular o un gráfico de líneas a partir de series temporales.


Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. RPT1000.
  3.  
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT SECTION.
  6.        FILE-CONTROL.
  7.            SELECT CUST-FILE
  8.               ASSIGN       TO "customers.isam"
  9.               ORGANIZATION IS INDEXED
  10.               ACCESS MODE  IS SEQUENTIAL
  11.               RECORD KEY   IS CUST-KEY
  12.               FILE STATUS  IS CUST-STATUS.
  13.  
  14.            SELECT RPT-FILE
  15.               ASSIGN       TO "report.txt"
  16.               ORGANIZATION IS LINE SEQUENTIAL
  17.               FILE STATUS  IS RPT-STATUS.
  18.  
  19.        DATA DIVISION.
  20.        FILE SECTION.
  21.        FD  CUST-FILE
  22.            RECORD CONTAINS 80 CHARACTERS.
  23.        01  CUST-REC.
  24.            05 CUST-KEY.
  25.               10 BRANCH-NUM        PIC 9(02).
  26.               10 CUST-NUM          PIC 9(05).
  27.            05 CUST-NAME            PIC X(28).
  28.            05 FILLER               PIC X(05).
  29.            05 SALES-THIS-YTD       PIC 9(9)V99.
  30.            05 SALES-LAST-YTD       PIC 9(9)V99.
  31.            05 FILLER               PIC X(23).  *> pad to record length (80)
  32.  
  33.        FD  RPT-FILE.
  34.        01  RPT-LINE                PIC X(132).
  35.  
  36.        WORKING-STORAGE SECTION.
  37.        COPY "genaicob.book".
  38.  
  39.        77  CUST-STATUS             PIC XX  VALUE SPACES.
  40.        77  RPT-STATUS              PIC XX  VALUE SPACES.
  41.  
  42.        77  PAGE-NO                 PIC 9(4)     VALUE 1.
  43.        77  LINE-COUNT              PIC 9(3)     VALUE 0.
  44.        77  LINES-PER-PAGE          PIC 9(3)     VALUE 60.
  45.  
  46.        77  CURR-BRANCH             PIC 9(02)    VALUE 00.
  47.        77  FIRST-RECORD            PIC X        VALUE "Y".
  48.  
  49.        77  CHANGE-AMT              PIC S9(11)V99 VALUE 0.
  50.        77  CHANGE-PCT              PIC S9(5)V9   VALUE 0.   *> one decimal
  51.  
  52.        77  BR-TOT-THIS             PIC S9(13)V99 VALUE 0.
  53.        77  BR-TOT-LAST             PIC S9(13)V99 VALUE 0.
  54.        77  BR-TOT-CHG              PIC S9(13)V99 VALUE 0.
  55.  
  56.        77  WS-DATE-YYYY            PIC 9(4).
  57.        77  WS-DATE-MM              PIC 9(2).
  58.        77  WS-DATE-DD              PIC 9(2).
  59.        77  WS-TIME-HH              PIC 9(2).
  60.        77  WS-TIME-MM              PIC 9(2).
  61.  
  62.        * Edited fields for display (with trailing minus like sample)
  63.        01  EDIT-FIELDS.
  64.            05 E-BRANCH         PIC ZZ9.
  65.            05 E-CUST-NUM       PIC Z(5).
  66.            05 E-CUST-NAME      PIC X(28).
  67.            05 E-THIS           PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  68.            05 E-LAST           PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  69.            05 E-CHG            PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  70.            05 E-PCT            PIC ZZZ9.9-.
  71.            05 E-BR-TOT-THIS    PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  72.            05 E-BR-TOT-LAST    PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  73.            05 E-BR-TOT-CHG     PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  74.  
  75.        01  WS-HEAD1.
  76.            05 FILLER PIC X(90)
  77.                VALUE "------------------------------------------------------------------------------------------".
  78.        01  WS-HEAD2.
  79.            05 FILLER PIC X(7)  VALUE "DATE:  ".
  80.            05 H-DATE PIC X(10) VALUE SPACES.
  81.            05 FILLER PIC X(11) VALUE SPACES.
  82.            05 FILLER PIC X(29) VALUE "YEAR-TO-DATE SALES REPORT".
  83.            05 FILLER PIC X(18) VALUE SPACES.
  84.            05 FILLER PIC X(7)  VALUE "PAGE: ".
  85.            05 H-PAGE PIC X(4)  VALUE SPACES.
  86.        01  WS-HEAD3.
  87.            05 FILLER PIC X(7)  VALUE "TIME:  ".
  88.            05 H-TIME PIC X(5)  VALUE SPACES.
  89.            05 FILLER PIC X(58) VALUE SPACES.
  90.            05 FILLER PIC X(6)  VALUE "RPT1000".
  91.        01  WS-HEAD4.
  92.            05 FILLER PIC X(90)
  93.                VALUE "------------------------------------------------------------------------------------------".
  94.        01  WS-HEAD5.
  95.            05 FILLER PIC X(2)  VALUE SPACES.
  96.            05 FILLER PIC X(6)  VALUE "BRANCH".
  97.            05 FILLER PIC X(3)  VALUE SPACES.
  98.            05 FILLER PIC X(4)  VALUE "CUST".
  99.            05 FILLER PIC X(28) VALUE SPACES.
  100.            05 FILLER PIC X(5)  VALUE "SALES".
  101.            05 FILLER PIC X(11) VALUE SPACES.
  102.            05 FILLER PIC X(5)  VALUE "SALES".
  103.            05 FILLER PIC X(9)  VALUE SPACES.
  104.            05 FILLER PIC X(6)  VALUE "CHANGE".
  105.            05 FILLER PIC X(5)  VALUE SPACES.
  106.            05 FILLER PIC X(6)  VALUE "CHANGE".
  107.        01  WS-HEAD6.
  108.            05 FILLER PIC X(2)  VALUE SPACES.
  109.            05 FILLER PIC X(4)  VALUE "NUM".
  110.            05 FILLER PIC X(5)  VALUE SPACES.
  111.            05 FILLER PIC X(3)  VALUE "NUM".
  112.            05 FILLER PIC X(2)  VALUE SPACES.
  113.            05 FILLER PIC X(13) VALUE "CUSTOMER NAME".
  114.            05 FILLER PIC X(14) VALUE SPACES.
  115.            05 FILLER PIC X(9)  VALUE "THIS YTD".
  116.            05 FILLER PIC X(6)  VALUE SPACES.
  117.            05 FILLER PIC X(8)  VALUE "LAST YTD".
  118.            05 FILLER PIC X(7)  VALUE SPACES.
  119.            05 FILLER PIC X(6)  VALUE "AMOUNT".
  120.            05 FILLER PIC X(5)  VALUE SPACES.
  121.            05 FILLER PIC X(7)  VALUE "PERCENT".
  122.        01  WS-HEAD7.
  123.            05 FILLER PIC X(90)
  124.                VALUE "------------------------------------------------------------------------------------------".
  125.        01  WS-HEAD8.
  126.            05 FILLER PIC X(90)
  127.                VALUE "------------------------------------------------------------------------------------------".
  128.  
  129.        01  DETAIL-LINE.
  130.            05 FILLER         PIC X(1)  VALUE SPACE.
  131.            05 D-BRANCH       PIC ZZ9.
  132.            05 FILLER         PIC X(3)  VALUE SPACE.
  133.            05 D-CUST-NUM     PIC Z(5).
  134.            05 FILLER         PIC X(2)  VALUE SPACE.
  135.            05 D-CUST-NAME    PIC X(28).
  136.            05 FILLER         PIC X(2)  VALUE SPACE.
  137.            05 D-THIS         PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  138.            05 FILLER         PIC X(5)  VALUE SPACE.
  139.            05 D-LAST         PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  140.            05 FILLER         PIC X(6)  VALUE SPACE.
  141.            05 D-CHG          PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  142.            05 FILLER         PIC X(4)  VALUE SPACE.
  143.            05 D-PCT          PIC ZZZ9.9-.
  144.  
  145.        01  BRANCH-TOTAL-LINE.
  146.            05 FILLER         PIC X(20) VALUE SPACES.
  147.            05 FILLER         PIC X(20) VALUE "BRANCH TOTAL".
  148.            05 FILLER         PIC X(6)  VALUE SPACES.
  149.            05 BT-THIS        PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  150.            05 FILLER         PIC X(5)  VALUE SPACES.
  151.            05 BT-LAST        PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  152.            05 FILLER         PIC X(5)  VALUE SPACES.
  153.            05 BT-CHG         PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
  154.  
  155.        01  FILL-LINE         PIC X(1) VALUE SPACE.
  156.  
  157.        01  CD                PIC X(21).
  158.            88  CD-VALID      VALUE "YYYYMMDDHHMMSS+HHMM".
  159.        01  CURR-DATE         REDEFINES CD.
  160.            05 CD-YYYY        PIC 9(4).
  161.            05 CD-MM          PIC 9(2).
  162.            05 CD-DD          PIC 9(2).
  163.            05 CD-HH          PIC 9(2).
  164.            05 CD-MI          PIC 9(2).
  165.            05 CD-SS          PIC 9(2).
  166.            05 CD-GMT         PIC X(5).
  167.  
  168.        PROCEDURE DIVISION.
  169.        MAIN-LOGIC.
  170.            OPEN INPUT  CUST-FILE
  171.                 OUTPUT RPT-FILE
  172.            IF CUST-STATUS NOT = "00" AND CUST-STATUS NOT = "97"
  173.               DISPLAY "OPEN ERROR CUST-FILE STATUS=" CUST-STATUS
  174.               STOP RUN
  175.            END-IF
  176.            IF RPT-STATUS NOT = "00"
  177.               DISPLAY "OPEN ERROR RPT-FILE STATUS=" RPT-STATUS
  178.               STOP RUN
  179.            END-IF
  180.  
  181.            MOVE FUNCTION CURRENT-DATE TO CD
  182.            MOVE CD-DD  TO WS-DATE-DD
  183.            MOVE CD-MM  TO WS-DATE-MM
  184.            MOVE CD-YYYY TO WS-DATE-YYYY
  185.            MOVE CD-HH  TO WS-TIME-HH
  186.            MOVE CD-MI  TO WS-TIME-MM
  187.  
  188.            PERFORM PRINT-HEADERS
  189.  
  190.            READ CUST-FILE NEXT RECORD
  191.                 AT END GO TO CLOSE-AND-EXIT
  192.            END-READ
  193.  
  194.            PERFORM UNTIL CUST-STATUS = "10"
  195.               IF FIRST-RECORD = "Y"
  196.                  MOVE BRANCH-NUM TO CURR-BRANCH
  197.                  MOVE "N" TO FIRST-RECORD
  198.               END-IF
  199.  
  200.               IF BRANCH-NUM NOT = CURR-BRANCH
  201.                  PERFORM PRINT-BRANCH-TOTALS
  202.                  MOVE BRANCH-NUM TO CURR-BRANCH
  203.                  MOVE 0 TO BR-TOT-THIS BR-TOT-LAST BR-TOT-CHG
  204.                  PERFORM CHECK-PAGE-LINES
  205.               END-IF
  206.  
  207.               PERFORM BUILD-AND-WRITE-DETAIL
  208.  
  209.               ADD SALES-THIS-YTD  TO BR-TOT-THIS
  210.               ADD SALES-LAST-YTD  TO BR-TOT-LAST
  211.               ADD CHANGE-AMT      TO BR-TOT-CHG
  212.  
  213.               READ CUST-FILE NEXT RECORD
  214.                  AT END
  215.                     PERFORM PRINT-BRANCH-TOTALS
  216.                     EXIT PERFORM
  217.               END-READ
  218.            END-PERFORM
  219.  
  220.        CLOSE-AND-EXIT.
  221.            CLOSE CUST-FILE RPT-FILE
  222.  
  223.            CALL "genaicob" USING "report.txt" & X"00".
  224.  
  225.            STOP RUN.
  226.  
  227.        PRINT-HEADERS.
  228.            MOVE WS-DATE-DD  TO H-DATE (1:2)
  229.            MOVE "/"         TO H-DATE (3:1)
  230.            MOVE WS-DATE-MM  TO H-DATE (4:2)
  231.            MOVE "/"         TO H-DATE (6:1)
  232.            MOVE WS-DATE-YYYY TO H-DATE (7:4)
  233.  
  234.            MOVE WS-TIME-HH  TO H-TIME (1:2)
  235.            MOVE ":"         TO H-TIME (3:1)
  236.            MOVE WS-TIME-MM  TO H-TIME (4:2)
  237.  
  238.            MOVE PAGE-NO TO H-PAGE
  239.            INSPECT H-PAGE REPLACING LEADING SPACES BY "0"
  240.  
  241.            MOVE WS-HEAD1 TO RPT-LINE  WRITE RPT-LINE
  242.            MOVE WS-HEAD2 TO RPT-LINE  WRITE RPT-LINE
  243.            MOVE WS-HEAD3 TO RPT-LINE  WRITE RPT-LINE
  244.            MOVE WS-HEAD4 TO RPT-LINE  WRITE RPT-LINE
  245.            MOVE WS-HEAD5 TO RPT-LINE  WRITE RPT-LINE
  246.            MOVE WS-HEAD6 TO RPT-LINE  WRITE RPT-LINE
  247.            MOVE WS-HEAD7 TO RPT-LINE  WRITE RPT-LINE
  248.            MOVE WS-HEAD8 TO RPT-LINE  WRITE RPT-LINE
  249.            MOVE 8 TO LINE-COUNT
  250.            .
  251.  
  252.        CHECK-PAGE-LINES.
  253.            IF LINE-COUNT > (LINES-PER-PAGE - 5)
  254.               ADD 1 TO PAGE-NO
  255.               MOVE 0 TO LINE-COUNT
  256.               PERFORM PRINT-HEADERS
  257.            END-IF
  258.            .
  259.  
  260.        BUILD-AND-WRITE-DETAIL.
  261.            PERFORM CHECK-PAGE-LINES
  262.  
  263.            COMPUTE CHANGE-AMT = SALES-THIS-YTD - SALES-LAST-YTD
  264.  
  265.            IF SALES-LAST-YTD = 0
  266.               IF SALES-THIS-YTD = 0
  267.                  MOVE 0     TO CHANGE-PCT
  268.               ELSE
  269.                  MOVE 9999  TO CHANGE-PCT *> 999.9 shown by edited mask
  270.                  MOVE 9 TO CHANGE-PCT     *> ensure one decimal as 999.9
  271.                  COMPUTE CHANGE-PCT = 999.9
  272.               END-IF
  273.            ELSE
  274.               COMPUTE CHANGE-PCT =
  275.                   (CHANGE-AMT / SALES-LAST-YTD) * 100
  276.            END-IF
  277.  
  278.            MOVE BRANCH-NUM      TO D-BRANCH
  279.            MOVE CUST-NUM        TO D-CUST-NUM
  280.            MOVE CUST-NAME       TO D-CUST-NAME
  281.  
  282.            MOVE SALES-THIS-YTD  TO D-THIS
  283.            MOVE SALES-LAST-YTD  TO D-LAST
  284.            MOVE CHANGE-AMT      TO D-CHG
  285.            MOVE CHANGE-PCT      TO D-PCT
  286.  
  287.            *> For subsequent lines under same branch, blank the branch field
  288.            IF CUST-NUM NOT = 0
  289.               CONTINUE
  290.            END-IF
  291.  
  292.            MOVE DETAIL-LINE TO RPT-LINE
  293.            WRITE RPT-LINE
  294.            ADD 1 TO LINE-COUNT
  295.            .
  296.  
  297.        PRINT-BRANCH-TOTALS.
  298.            PERFORM CHECK-PAGE-LINES
  299.  
  300.            MOVE BR-TOT-THIS TO BT-THIS
  301.            MOVE BR-TOT-LAST TO BT-LAST
  302.            COMPUTE BR-TOT-CHG = BR-TOT-THIS - BR-TOT-LAST
  303.            MOVE BR-TOT-CHG  TO BT-CHG
  304.  
  305.            MOVE SPACES TO RPT-LINE
  306.            WRITE RPT-LINE
  307.            ADD 1 TO LINE-COUNT
  308.  
  309.            MOVE BRANCH-TOTAL-LINE TO RPT-LINE
  310.            WRITE RPT-LINE
  311.            ADD 1 TO LINE-COUNT
  312.  
  313.            MOVE SPACES TO RPT-LINE
  314.            WRITE RPT-LINE
  315.            ADD 1 TO LINE-COUNT
  316.            .
Eslopes is offline   Responder Con Cita