Skip to content

Instantly share code, notes, and snippets.

@bencz
Created July 11, 2025 23:48
Show Gist options
  • Save bencz/8dc678121b8c44bf807b2a1202008094 to your computer and use it in GitHub Desktop.
Save bencz/8dc678121b8c44bf807b2a1202008094 to your computer and use it in GitHub Desktop.
IDENTIFICATION DIVISION.
PROGRAM-ID. FOLHA-PAGAMENTO.
AUTHOR. SILVA.
DATE-WRITTEN. 2011.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARQUIVO-FUNCIONARIOS ASSIGN TO "FUNCIONARIOS.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT RELATORIO-FOLHA ASSIGN TO "FOLHA.RPT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ARQUIVO-FUNCIONARIOS.
01 REGISTRO-FUNCIONARIO.
05 FUNC-CODIGO PIC 9(5).
05 FUNC-NOME PIC X(30).
05 FUNC-SALARIO-BASE PIC 9(6)V99.
05 FUNC-HORAS-EXTRAS PIC 9(3).
05 FUNC-DEPENDENTES PIC 9(2).
FD RELATORIO-FOLHA.
01 LINHA-RELATORIO PIC X(80).
WORKING-STORAGE SECTION.
01 WS-INDICATORS.
05 WS-EOF-FLAG PIC X VALUE 'N'.
05 WS-PRIMEIRO-REG PIC X VALUE 'S'.
01 WS-CALCULOS.
05 WS-VALOR-HORA-EXTRA PIC 9(4)V99 VALUE 25.00.
05 WS-SALARIO-FAMILIA PIC 9(3)V99 VALUE 45.50.
05 WS-PERCENTUAL-INSS PIC 9V99 VALUE 0.11.
05 WS-PERCENTUAL-IRRF PIC 9V99 VALUE 0.15.
01 WS-VALORES-CALCULADOS.
05 WS-TOTAL-HORAS-EXTRAS PIC 9(6)V99.
05 WS-TOTAL-SAL-FAMILIA PIC 9(5)V99.
05 WS-SALARIO-BRUTO PIC 9(7)V99.
05 WS-DESCONTO-INSS PIC 9(6)V99.
05 WS-DESCONTO-IRRF PIC 9(6)V99.
05 WS-SALARIO-LIQUIDO PIC 9(7)V99.
01 WS-TOTAIS-GERAIS.
05 WS-TOTAL-FUNCIONARIOS PIC 9(4) VALUE ZERO.
05 WS-TOTAL-BRUTO-GERAL PIC 9(9)V99 VALUE ZERO.
05 WS-TOTAL-LIQUIDO-GERAL PIC 9(9)V99 VALUE ZERO.
01 WS-LINHA-DETALHE.
05 FILLER PIC X(5) VALUE SPACES.
05 DET-CODIGO PIC 9(5).
05 FILLER PIC X(2) VALUE SPACES.
05 DET-NOME PIC X(20).
05 FILLER PIC X(2) VALUE SPACES.
05 DET-SALARIO-BRUTO PIC ZZZ,ZZ9.99.
05 FILLER PIC X(2) VALUE SPACES.
05 DET-DESCONTO-TOTAL PIC ZZZ,ZZ9.99.
05 FILLER PIC X(2) VALUE SPACES.
05 DET-SALARIO-LIQUIDO PIC ZZZ,ZZ9.99.
01 WS-LINHA-CABECALHO.
05 FILLER PIC X(20) VALUE SPACES.
05 FILLER PIC X(40)
VALUE "*** RELATORIO DE FOLHA DE PAGAMENTO ***".
01 WS-LINHA-TITULOS.
05 FILLER PIC X(5) VALUE "COD.".
05 FILLER PIC X(7) VALUE SPACES.
05 FILLER PIC X(20) VALUE "NOME DO FUNCIONARIO".
05 FILLER PIC X(2) VALUE SPACES.
05 FILLER PIC X(12) VALUE "SAL. BRUTO".
05 FILLER PIC X(4) VALUE SPACES.
05 FILLER PIC X(10) VALUE "DESCONTOS".
05 FILLER PIC X(4) VALUE SPACES.
05 FILLER PIC X(12) VALUE "SAL. LIQUIDO".
PROCEDURE DIVISION.
MAIN-PROCESS.
PERFORM INICIALIZA-PROGRAMA
PERFORM PROCESSA-ARQUIVO
PERFORM FINALIZA-PROGRAMA
STOP RUN.
INICIALIZA-PROGRAMA.
OPEN INPUT ARQUIVO-FUNCIONARIOS
OPEN OUTPUT RELATORIO-FOLHA
PERFORM ESCREVE-CABECALHO
PERFORM LE-FUNCIONARIO.
PROCESSA-ARQUIVO.
PERFORM UNTIL WS-EOF-FLAG = 'S'
PERFORM CALCULA-SALARIO
PERFORM ESCREVE-DETALHE
PERFORM ACUMULA-TOTAIS
PERFORM LE-FUNCIONARIO
END-PERFORM
PERFORM ESCREVE-TOTAIS.
CALCULA-SALARIO.
COMPUTE WS-TOTAL-HORAS-EXTRAS =
FUNC-HORAS-EXTRAS * WS-VALOR-HORA-EXTRA
COMPUTE WS-TOTAL-SAL-FAMILIA =
FUNC-DEPENDENTES * WS-SALARIO-FAMILIA
COMPUTE WS-SALARIO-BRUTO =
FUNC-SALARIO-BASE + WS-TOTAL-HORAS-EXTRAS + WS-TOTAL-SAL-FAMILIA
COMPUTE WS-DESCONTO-INSS =
WS-SALARIO-BRUTO * WS-PERCENTUAL-INSS
IF WS-SALARIO-BRUTO > 3000
COMPUTE WS-DESCONTO-IRRF =
WS-SALARIO-BRUTO * WS-PERCENTUAL-IRRF
ELSE
MOVE ZERO TO WS-DESCONTO-IRRF
END-IF
COMPUTE WS-SALARIO-LIQUIDO =
WS-SALARIO-BRUTO - WS-DESCONTO-INSS - WS-DESCONTO-IRRF.
ESCREVE-CABECALHO.
WRITE LINHA-RELATORIO FROM WS-LINHA-CABECALHO
WRITE LINHA-RELATORIO FROM SPACES
WRITE LINHA-RELATORIO FROM WS-LINHA-TITULOS
WRITE LINHA-RELATORIO FROM SPACES.
ESCREVE-DETALHE.
MOVE FUNC-CODIGO TO DET-CODIGO
MOVE FUNC-NOME TO DET-NOME
MOVE WS-SALARIO-BRUTO TO DET-SALARIO-BRUTO
COMPUTE DET-DESCONTO-TOTAL = WS-DESCONTO-INSS + WS-DESCONTO-IRRF
MOVE WS-SALARIO-LIQUIDO TO DET-SALARIO-LIQUIDO
WRITE LINHA-RELATORIO FROM WS-LINHA-DETALHE.
ACUMULA-TOTAIS.
ADD 1 TO WS-TOTAL-FUNCIONARIOS
ADD WS-SALARIO-BRUTO TO WS-TOTAL-BRUTO-GERAL
ADD WS-SALARIO-LIQUIDO TO WS-TOTAL-LIQUIDO-GERAL.
ESCREVE-TOTAIS.
WRITE LINHA-RELATORIO FROM SPACES
WRITE LINHA-RELATORIO FROM SPACES
MOVE SPACES TO LINHA-RELATORIO
STRING "TOTAL DE FUNCIONARIOS: "
WS-TOTAL-FUNCIONARIOS
INTO LINHA-RELATORIO
WRITE LINHA-RELATORIO
MOVE SPACES TO LINHA-RELATORIO
STRING "TOTAL BRUTO GERAL: R$ "
WS-TOTAL-BRUTO-GERAL
INTO LINHA-RELATORIO
WRITE LINHA-RELATORIO
MOVE SPACES TO LINHA-RELATORIO
STRING "TOTAL LIQUIDO GERAL: R$ "
WS-TOTAL-LIQUIDO-GERAL
INTO LINHA-RELATORIO
WRITE LINHA-RELATORIO.
LE-FUNCIONARIO.
READ ARQUIVO-FUNCIONARIOS
AT END MOVE 'S' TO WS-EOF-FLAG
END-READ.
FINALIZA-PROGRAMA.
CLOSE ARQUIVO-FUNCIONARIOS
CLOSE RELATORIO-FOLHA
DISPLAY "PROCESSAMENTO CONCLUIDO COM SUCESSO"
DISPLAY "TOTAL DE FUNCIONARIOS PROCESSADOS: "
WS-TOTAL-FUNCIONARIOS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment