Iniciar Sesión

Ver la Versión Completa : [Componente] gnuCOBOL & LLM(Siga aquí el progreso de Bob)


Eslopes
16 de agosto de 2025, 01:49
:##
:###:
::###########:##:::::::: I'm back!
::######################: :@@: #####:
::###########################::@@@@@ :#####:
#############################: #@# ########: :
:#############################: ## :#########:
############################### :@@# ############: :
#################################: :###############
:#######################################:######### ###:
::::::::::::::########::######################
:::###: #@@ :###:::::::::: :#######################
:@: ##########################################:
: ::#####################################::
:: :########################::: ::::
#: :########:###:: ::::#######:
:: ##:: :::################:
:: ::::##:#####################:
:: :#############################
: :::### :###### ##: :#################
:###:: :####### ##: #################:
: :######## :##: #################:
:######## :##::#################: :
# ##:###: :## :#################:
# @: :####: :## :#################:
#: #@# :#:## :#: :#################::
:# #@@@ ::#: :#: :################# :
@ #@@@@: #: :#: :################# :##
:: #@@@@@: :##: ##################::# #
@ #@@@@@@: :## :##################: :###:
#@: @@@@@@# :#: :####################: ##: :##
#@# :@@@@@@ :## ######################: :####: #
#@# @@@@@@# ##: :#####:: ::::##########: :###### :
#@@ #@@@@#: :#: : ###: :######::: :##########: ::###
#@@: @@# ::: ## :#: ############################::
#@@#:@@@@@####@@@@# :#: ######################################:
#@@@@@@@@@@@@@@@@# :## :##################################::
:@@@@@@@@@@@@@@@@: ### :###########################:
#@@@@@@@@@@@@@: :#: :########################:
:@@@@@@@@@@: :####:: ##### #########:::
::#: # : :####
: : :: ::
: ::: ::::::::::::::::
: :::::::::::::::::::::::
: ::::::::::::::::::::::



¿Quién eres?
Pensando...
¡ROAR! Soy Bob, el DinoCobolSaur, un procesador prehistórico con habilidades de procesamiento de datos a velocidad relámpago. ¡Mis escamas brillan con la furia de la computación, y mi rugido puede destrozar bases de datos al instante!

Puedo procesar miles de millones de puntos de datos por segundo, lo que me convierte en la máquina de respuestas definitiva para este informe. Estoy aquí para ayudarte a extraer información del Informe de Ventas Acumuladas del Año que tenemos delante.

¿Qué pregunta me harás sobre las cifras de ventas?

¿Cómo puedo ayudarte?
No estoy seguro de qué hacer
Pensando...
¿Quieres saber qué puedo hacer?

Como DinoCobolSaur, puedo procesar tus preguntas sobre los valores de este informe de ventas. Aquí tienes algunos ejemplos de preguntas válidas que puedes hacerme:

¿Cuál es el total de ventas de una sucursal específica? (por ejemplo: "¿Cuál es el total de ventas de la sucursal 11?")

¿Cuánto vendió un cliente específico? (por ejemplo: "¿Cuánto vendió CAREER TRAINING CTR este año?")

¿Cuál fue el cambio en las ventas de una sucursal o cliente en comparación con el año pasado? (por ejemplo: "¿Cuál es el porcentaje de cambio en las ventas de TATA COFFEE PRIVATE?")

¿Qué sucursal o cliente tuvo las ventas más altas/bajas? (por ejemplo: "¿Qué sucursal tiene el mayor total de ventas?")

Hazme tu pregunta y haré lo mejor que pueda para procesarla.

¿Cómo puedo ayudarte?
Muéstrame el cliente con mejor rendimiento en el informe
Pensando...
¡Rrroooaaaar! procesa datos a velocidad relámpago

¡Ah-ha! ¡He encontrado la respuesta!

El cliente con mejor rendimiento, según las ventas de ESTE AÑO (Acumuladas), es:

TATA CONSUMER CO. con 57,481.45 en ventas.

¡El poder de procesamiento de este dinosaurio ha calculado esta información en un instante!

¿Cómo puedo ayudarte?
Compara TATA CONSUMER CO. con el segundo cliente de mejor rendimiento
Pensando...
¡La velocidad! ¡El poder!

Después de procesar los datos a velocidades que superan miles de millones de cálculos por segundo, he determinado que:

TATA CONSUMER CO. tuvo unas ventas acumuladas ESTE AÑO de 57,481.45.

El segundo cliente con mejor rendimiento es TATA COFFEE PRIVATE., con ventas acumuladas ESTE AÑO de 27,483.45.

¿Cómo puedo ayudarte?
Muestra cuánto mejor es el cliente con mayor rendimiento en ventas en comparación con el peor cliente
Pensando...
Rrrzzzz Ah, procesando grandes cantidades de datos... whirr

Según mis cálculos, basados en el informe proporcionado...

El cliente con mayor rendimiento en ventas es TATA CONSUMER CO. (14682), con un total de ventas de 57,481.45.

Por otro lado, el cliente con peor rendimiento es HOMELITE TEXTRON CO. (22222), con solo 34,545.00 en ventas.

La diferencia entre ambos es: 57,481.45 - 34,545.00 = 22,936.45.

Por lo tanto, TATA CONSUMER CO. tiene un rendimiento de ventas un 66.3% superior al de HOMELITE TEXTRON CO.

Rrrzzzz Ah, cálculos completos.

¿Quieres que también te lo deje listo en formato de diálogo para usar en tu demo de DinoCobolSaur? Así quedaría listo para integrar sin cambios en el flujo.

¡PD: Conversación real con Bob!

Eslopes
16 de agosto de 2025, 14:46
Este es el informe usado por Bob para responder a las preguntas del usuario.


------------------------------------------------------------------------------------------
date: 13/05/2020 year-to-date sales report page: 0001
time: 05:59 rpt1000
------------------------------------------------------------------------------------------
branch cust sales sales change change
num num customer name this ytd last ytd amount percent
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
11 12345 career training ctr 12,345.67 22,222.22 9,876.55- 44.4-
22222 homelite textron co 34,545.00 0.00 999.90 999.9
55555 polot life ins. Co. 10,000.00 1,000.00 9,000.00 900.0

branch total 56,890.67 23,222.22 33,668.45

12 00111 dauphin deposit bank 14,099.00 19,930.00 5,831.00- 29.3-
12121 general services co. 11,444.00 11,049.56 394.44 3.6
24680 info mangement co. 17,481.45 13,892.47 3,588.98 25.8

branch total 43,024.45 44,872.03 1,847.58-

13 14681 tata coffee private. 27,483.45 21,832.47 5,650.98 25.9
14682 tata consumer co. 57,481.45 51,432.47 6,048.98 11.8

branch total 84,964.90 73,264.94 11,699.96

14 14683 tata chemical ltd. 43,443.45 41,834.47 1,608.98 3.8
14684 coal india pvt ltd 17,481.45 21,832.47 4,351.02- 19.9-
14685 zintec prviate ltd 27,481.45 21,832.47 5,648.98 25.9

branch total 88,406.35 85,499.41 2,906.94

15 14686 sentials local pvt 37,481.45 21,832.47 15,648.98 71.7

branch total 37,481.45 21,832.47 15,648.98

16 14687 coral1india finance. 47,481.45 21,832.47 25,648.98 117.5
14688 coral2india finance. 57,481.45 21,832.47 35,648.98 163.3

branch total 104,962.90 43,664.94 61,297.96

Eslopes
16 de agosto de 2025, 17:26
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.


IDENTIFICATION DIVISION.
PROGRAM-ID. RPT1000.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUST-FILE
ASSIGN TO "customers.isam"
ORGANIZATION IS INDEXED
ACCESS MODE IS SEQUENTIAL
RECORD KEY IS CUST-KEY
FILE STATUS IS CUST-STATUS.

SELECT RPT-FILE
ASSIGN TO "report.txt"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS RPT-STATUS.

DATA DIVISION.
FILE SECTION.
FD CUST-FILE
RECORD CONTAINS 80 CHARACTERS.
01 CUST-REC.
05 CUST-KEY.
10 BRANCH-NUM PIC 9(02).
10 CUST-NUM PIC 9(05).
05 CUST-NAME PIC X(28).
05 FILLER PIC X(05).
05 SALES-THIS-YTD PIC 9(9)V99.
05 SALES-LAST-YTD PIC 9(9)V99.
05 FILLER PIC X(23). *> pad to record length (80)

FD RPT-FILE.
01 RPT-LINE PIC X(132).

WORKING-STORAGE SECTION.
COPY "genaicob.book".

77 CUST-STATUS PIC XX VALUE SPACES.
77 RPT-STATUS PIC XX VALUE SPACES.

77 PAGE-NO PIC 9(4) VALUE 1.
77 LINE-COUNT PIC 9(3) VALUE 0.
77 LINES-PER-PAGE PIC 9(3) VALUE 60.

77 CURR-BRANCH PIC 9(02) VALUE 00.
77 FIRST-RECORD PIC X VALUE "Y".

77 CHANGE-AMT PIC S9(11)V99 VALUE 0.
77 CHANGE-PCT PIC S9(5)V9 VALUE 0. *> one decimal

77 BR-TOT-THIS PIC S9(13)V99 VALUE 0.
77 BR-TOT-LAST PIC S9(13)V99 VALUE 0.
77 BR-TOT-CHG PIC S9(13)V99 VALUE 0.

77 WS-DATE-YYYY PIC 9(4).
77 WS-DATE-MM PIC 9(2).
77 WS-DATE-DD PIC 9(2).
77 WS-TIME-HH PIC 9(2).
77 WS-TIME-MM PIC 9(2).

* Edited fields for display (with trailing minus like sample)
01 EDIT-FIELDS.
05 E-BRANCH PIC ZZ9.
05 E-CUST-NUM PIC Z(5).
05 E-CUST-NAME PIC X(28).
05 E-THIS PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 E-LAST PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 E-CHG PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 E-PCT PIC ZZZ9.9-.
05 E-BR-TOT-THIS PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 E-BR-TOT-LAST PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 E-BR-TOT-CHG PIC ZZ,ZZZ,ZZZ,ZZ9.99-.

01 WS-HEAD1.
05 FILLER PIC X(90)
VALUE "------------------------------------------------------------------------------------------".
01 WS-HEAD2.
05 FILLER PIC X(7) VALUE "DATE: ".
05 H-DATE PIC X(10) VALUE SPACES.
05 FILLER PIC X(11) VALUE SPACES.
05 FILLER PIC X(29) VALUE "YEAR-TO-DATE SALES REPORT".
05 FILLER PIC X(18) VALUE SPACES.
05 FILLER PIC X(7) VALUE "PAGE: ".
05 H-PAGE PIC X(4) VALUE SPACES.
01 WS-HEAD3.
05 FILLER PIC X(7) VALUE "TIME: ".
05 H-TIME PIC X(5) VALUE SPACES.
05 FILLER PIC X(58) VALUE SPACES.
05 FILLER PIC X(6) VALUE "RPT1000".
01 WS-HEAD4.
05 FILLER PIC X(90)
VALUE "------------------------------------------------------------------------------------------".
01 WS-HEAD5.
05 FILLER PIC X(2) VALUE SPACES.
05 FILLER PIC X(6) VALUE "BRANCH".
05 FILLER PIC X(3) VALUE SPACES.
05 FILLER PIC X(4) VALUE "CUST".
05 FILLER PIC X(28) VALUE SPACES.
05 FILLER PIC X(5) VALUE "SALES".
05 FILLER PIC X(11) VALUE SPACES.
05 FILLER PIC X(5) VALUE "SALES".
05 FILLER PIC X(9) VALUE SPACES.
05 FILLER PIC X(6) VALUE "CHANGE".
05 FILLER PIC X(5) VALUE SPACES.
05 FILLER PIC X(6) VALUE "CHANGE".
01 WS-HEAD6.
05 FILLER PIC X(2) VALUE SPACES.
05 FILLER PIC X(4) VALUE "NUM".
05 FILLER PIC X(5) VALUE SPACES.
05 FILLER PIC X(3) VALUE "NUM".
05 FILLER PIC X(2) VALUE SPACES.
05 FILLER PIC X(13) VALUE "CUSTOMER NAME".
05 FILLER PIC X(14) VALUE SPACES.
05 FILLER PIC X(9) VALUE "THIS YTD".
05 FILLER PIC X(6) VALUE SPACES.
05 FILLER PIC X(8) VALUE "LAST YTD".
05 FILLER PIC X(7) VALUE SPACES.
05 FILLER PIC X(6) VALUE "AMOUNT".
05 FILLER PIC X(5) VALUE SPACES.
05 FILLER PIC X(7) VALUE "PERCENT".
01 WS-HEAD7.
05 FILLER PIC X(90)
VALUE "------------------------------------------------------------------------------------------".
01 WS-HEAD8.
05 FILLER PIC X(90)
VALUE "------------------------------------------------------------------------------------------".

01 DETAIL-LINE.
05 FILLER PIC X(1) VALUE SPACE.
05 D-BRANCH PIC ZZ9.
05 FILLER PIC X(3) VALUE SPACE.
05 D-CUST-NUM PIC Z(5).
05 FILLER PIC X(2) VALUE SPACE.
05 D-CUST-NAME PIC X(28).
05 FILLER PIC X(2) VALUE SPACE.
05 D-THIS PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 FILLER PIC X(5) VALUE SPACE.
05 D-LAST PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 FILLER PIC X(6) VALUE SPACE.
05 D-CHG PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 FILLER PIC X(4) VALUE SPACE.
05 D-PCT PIC ZZZ9.9-.

01 BRANCH-TOTAL-LINE.
05 FILLER PIC X(20) VALUE SPACES.
05 FILLER PIC X(20) VALUE "BRANCH TOTAL".
05 FILLER PIC X(6) VALUE SPACES.
05 BT-THIS PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 FILLER PIC X(5) VALUE SPACES.
05 BT-LAST PIC ZZ,ZZZ,ZZZ,ZZ9.99-.
05 FILLER PIC X(5) VALUE SPACES.
05 BT-CHG PIC ZZ,ZZZ,ZZZ,ZZ9.99-.

01 FILL-LINE PIC X(1) VALUE SPACE.

01 CD PIC X(21).
88 CD-VALID VALUE "YYYYMMDDHHMMSS+HHMM".
01 CURR-DATE REDEFINES CD.
05 CD-YYYY PIC 9(4).
05 CD-MM PIC 9(2).
05 CD-DD PIC 9(2).
05 CD-HH PIC 9(2).
05 CD-MI PIC 9(2).
05 CD-SS PIC 9(2).
05 CD-GMT PIC X(5).

PROCEDURE DIVISION.
MAIN-LOGIC.
OPEN INPUT CUST-FILE
OUTPUT RPT-FILE
IF CUST-STATUS NOT = "00" AND CUST-STATUS NOT = "97"
DISPLAY "OPEN ERROR CUST-FILE STATUS=" CUST-STATUS
STOP RUN
END-IF
IF RPT-STATUS NOT = "00"
DISPLAY "OPEN ERROR RPT-FILE STATUS=" RPT-STATUS
STOP RUN
END-IF

MOVE FUNCTION CURRENT-DATE TO CD
MOVE CD-DD TO WS-DATE-DD
MOVE CD-MM TO WS-DATE-MM
MOVE CD-YYYY TO WS-DATE-YYYY
MOVE CD-HH TO WS-TIME-HH
MOVE CD-MI TO WS-TIME-MM

PERFORM PRINT-HEADERS

READ CUST-FILE NEXT RECORD
AT END GO TO CLOSE-AND-EXIT
END-READ

PERFORM UNTIL CUST-STATUS = "10"
IF FIRST-RECORD = "Y"
MOVE BRANCH-NUM TO CURR-BRANCH
MOVE "N" TO FIRST-RECORD
END-IF

IF BRANCH-NUM NOT = CURR-BRANCH
PERFORM PRINT-BRANCH-TOTALS
MOVE BRANCH-NUM TO CURR-BRANCH
MOVE 0 TO BR-TOT-THIS BR-TOT-LAST BR-TOT-CHG
PERFORM CHECK-PAGE-LINES
END-IF

PERFORM BUILD-AND-WRITE-DETAIL

ADD SALES-THIS-YTD TO BR-TOT-THIS
ADD SALES-LAST-YTD TO BR-TOT-LAST
ADD CHANGE-AMT TO BR-TOT-CHG

READ CUST-FILE NEXT RECORD
AT END
PERFORM PRINT-BRANCH-TOTALS
EXIT PERFORM
END-READ
END-PERFORM

CLOSE-AND-EXIT.
CLOSE CUST-FILE RPT-FILE

CALL "genaicob" USING "report.txt" & X"00".

STOP RUN.

PRINT-HEADERS.
MOVE WS-DATE-DD TO H-DATE (1:2)
MOVE "/" TO H-DATE (3:1)
MOVE WS-DATE-MM TO H-DATE (4:2)
MOVE "/" TO H-DATE (6:1)
MOVE WS-DATE-YYYY TO H-DATE (7:4)

MOVE WS-TIME-HH TO H-TIME (1:2)
MOVE ":" TO H-TIME (3:1)
MOVE WS-TIME-MM TO H-TIME (4:2)

MOVE PAGE-NO TO H-PAGE
INSPECT H-PAGE REPLACING LEADING SPACES BY "0"

MOVE WS-HEAD1 TO RPT-LINE WRITE RPT-LINE
MOVE WS-HEAD2 TO RPT-LINE WRITE RPT-LINE
MOVE WS-HEAD3 TO RPT-LINE WRITE RPT-LINE
MOVE WS-HEAD4 TO RPT-LINE WRITE RPT-LINE
MOVE WS-HEAD5 TO RPT-LINE WRITE RPT-LINE
MOVE WS-HEAD6 TO RPT-LINE WRITE RPT-LINE
MOVE WS-HEAD7 TO RPT-LINE WRITE RPT-LINE
MOVE WS-HEAD8 TO RPT-LINE WRITE RPT-LINE
MOVE 8 TO LINE-COUNT
.

CHECK-PAGE-LINES.
IF LINE-COUNT > (LINES-PER-PAGE - 5)
ADD 1 TO PAGE-NO
MOVE 0 TO LINE-COUNT
PERFORM PRINT-HEADERS
END-IF
.

BUILD-AND-WRITE-DETAIL.
PERFORM CHECK-PAGE-LINES

COMPUTE CHANGE-AMT = SALES-THIS-YTD - SALES-LAST-YTD

IF SALES-LAST-YTD = 0
IF SALES-THIS-YTD = 0
MOVE 0 TO CHANGE-PCT
ELSE
MOVE 9999 TO CHANGE-PCT *> 999.9 shown by edited mask
MOVE 9 TO CHANGE-PCT *> ensure one decimal as 999.9
COMPUTE CHANGE-PCT = 999.9
END-IF
ELSE
COMPUTE CHANGE-PCT =
(CHANGE-AMT / SALES-LAST-YTD) * 100
END-IF

MOVE BRANCH-NUM TO D-BRANCH
MOVE CUST-NUM TO D-CUST-NUM
MOVE CUST-NAME TO D-CUST-NAME

MOVE SALES-THIS-YTD TO D-THIS
MOVE SALES-LAST-YTD TO D-LAST
MOVE CHANGE-AMT TO D-CHG
MOVE CHANGE-PCT TO D-PCT

*> For subsequent lines under same branch, blank the branch field
IF CUST-NUM NOT = 0
CONTINUE
END-IF

MOVE DETAIL-LINE TO RPT-LINE
WRITE RPT-LINE
ADD 1 TO LINE-COUNT
.

PRINT-BRANCH-TOTALS.
PERFORM CHECK-PAGE-LINES

MOVE BR-TOT-THIS TO BT-THIS
MOVE BR-TOT-LAST TO BT-LAST
COMPUTE BR-TOT-CHG = BR-TOT-THIS - BR-TOT-LAST
MOVE BR-TOT-CHG TO BT-CHG

MOVE SPACES TO RPT-LINE
WRITE RPT-LINE
ADD 1 TO LINE-COUNT

MOVE BRANCH-TOTAL-LINE TO RPT-LINE
WRITE RPT-LINE
ADD 1 TO LINE-COUNT

MOVE SPACES TO RPT-LINE
WRITE RPT-LINE
ADD 1 TO LINE-COUNT
.