Skip to content

Commit

Permalink
Merge pull request #189 from RJ-SMTR/feature/#187-cnab
Browse files Browse the repository at this point in the history
Feature/#187 cnab
  • Loading branch information
williamfl2007 committed Feb 27, 2024
2 parents c3f087b + 41b0b66 commit 26af1d5
Show file tree
Hide file tree
Showing 77 changed files with 3,706 additions and 55 deletions.
2 changes: 2 additions & 0 deletions src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import { MailCountModule } from './mail-count/mail-count.module';
import { CronJobsModule } from './cron-jobs/cron-jobs.module';
import { BigqueryModule } from './bigquery/bigquery.module';
import { TestModule } from './test/test.module';
import { CnabModule } from './cnab/cnab.module';

@Module({
imports: [
Expand Down Expand Up @@ -106,6 +107,7 @@ import { TestModule } from './test/test.module';
CronJobsModule,
BigqueryModule,
TestModule,
CnabModule,
],
})
export class AppModule {}
2 changes: 1 addition & 1 deletion src/auth-licensee/auth-licensee.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export class AuthLicenseeService {
);

if (!isValidPassword) {
throw CommonHttpException.simpleDetail(
throw CommonHttpException.detailField(
'password',
'incorrectPassword',
HttpStatus.UNAUTHORIZED,
Expand Down
19 changes: 19 additions & 0 deletions src/cnab/cnab-caixa.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Injectable } from '@nestjs/common';
import { CnabFile } from './types/cnab-file.type';
import { getCnabRegistros, stringifyCnabRegistro } from './utils/cnab-utils';
import { CNAB_EOL } from './cnab-consts';

@Injectable()
export class CnabRemessaService {
/**
* Generate CNAB Remessa text content from CnabFile
*/
generateRemessaCnab(cnab: CnabFile): string {
const plainCnab = getCnabRegistros(cnab);
const cnabTextList: string[] = [];
for (const registro of plainCnab) {
cnabTextList.push(stringifyCnabRegistro(registro));
}
return cnabTextList.join(CNAB_EOL);
}
}
2 changes: 2 additions & 0 deletions src/cnab/cnab-consts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const CNAB_SUPPORTED_FORMATS = [240];
export const CNAB_EOL = '\r\n';
7 changes: 7 additions & 0 deletions src/cnab/cnab.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { Module } from '@nestjs/common';
import { CnabService } from './cnab.service';

@Module({
providers: [CnabService],
})
export class CnabModule {}
18 changes: 18 additions & 0 deletions src/cnab/cnab.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { CnabService } from './cnab.service';

describe('CnabService', () => {
let service: CnabService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [CnabService],
}).compile();

service = module.get<CnabService>(CnabService);
});

it('should be defined', () => {
expect(service).toBeDefined();
});
});
4 changes: 4 additions & 0 deletions src/cnab/cnab.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { Injectable } from '@nestjs/common';

@Injectable()
export class CnabService {}
6 changes: 6 additions & 0 deletions src/cnab/enums/104/cnab-104-camara-compensacao.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export enum Cnab104CamaraCompensacao {
Ted = '018',
DocEOp = '700',
CreditoContaEGuiaDepositoJudiciario = '000',
BoletoEIspb = '888',
}
4 changes: 4 additions & 0 deletions src/cnab/enums/104/cnab-104-codigo-segmento.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum Cnab104CodigoSegmento {
A = 'A',
B = 'B',
}
14 changes: 14 additions & 0 deletions src/cnab/enums/104/cnab-104-finalidade-doc.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
export enum Cnab104FinalidadeDoc {
CreditoConta = '01',
PagamentoAluguelCondominio = '02',
PagamentoDuplicataTitulos = '03',
PagamentoDividendos = '04',
PagamentoMensalidadeEscolar = '05',
PagamentoSalarios = '06',
PagamentoFornecedoresHonorarios = '07',
OperacoesCambioFundosBolsaValores = '08',
RepasseArrecadacaoPagamentoTributos = '09',
TransferenciaInternacionalReal = '10',
DocPoupanca = '11',
Outros = '00',
}
5 changes: 5 additions & 0 deletions src/cnab/enums/104/cnab-104-finalidade-ted.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export enum Cnab104FinalidadeTed {
SemConta = '0',
ContaCorrente = '1',
Poupanca = '2',
}
16 changes: 16 additions & 0 deletions src/cnab/enums/104/cnab-104-forma-lancamento.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export enum Cnab104FormaLancamento {
CreditoContaCorrente = '01',
ChequePagamento = '02',
DOC = '03',
CreditoContaPoupanca = '05',
OPDisposicao = '10',
PagamentoContasTributos = '11',
PagamentoDARFSemBarras = '16',
PagamentoGPSSemBarras = '17',
LiquidacaoTitulosProprioBanco = '30',
PagamentoTitulosOutrosBancos = '31',
TED = '41',
DebitoContaCorrenteRecebimento = '50',
PagamentoGuiaDepositoJudicial = '71',
PagamentoConcessionarias = '99',
}
5 changes: 5 additions & 0 deletions src/cnab/enums/104/cnab-104-indicador-parcelamento.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export enum Cnab104IndicadorParcelamento {
DataFixa = '1',
Periodico = '2',
DiaUtil = '3',
}
7 changes: 7 additions & 0 deletions src/cnab/enums/104/cnab-104-tipo-compromisso.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export enum Cnab104TipoCompromisso {
PagamentoFornecedores = '01',
PagamentoSalarios = '02',
Autopagamento = '03',
SalarioAmpliacaoBase = '06',
DebitoContaDebitoAutomatico = '11',
}
4 changes: 4 additions & 0 deletions src/cnab/enums/104/cnab-104-tipo-movimento.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum Cnab104TipoMovimento {
Inclusao = '0',
Exclusao = '9',
}
15 changes: 15 additions & 0 deletions src/cnab/enums/104/cnab-104-tipo-servico.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export enum Cnab104TipoServico {
Optantes = '00',
DebitosRecebimento = '05',
PagamentoDividendos = '10',
PagamentoFornecedor = '20',
PagamentoTributos = '22',
PagamentoSalarios = '30',
PagamentoSinistrosSegurados = '50',
PagamentoDespesasViajanteTransito = '60',
PagamentoAutorizado = '70',
PagamentoCredenciados = '75',
PagamentoRepresentantesVendedoresAutorizados = '80',
PagamentoBeneficios = '90',
PagamentoDiversos = '98',
}
10 changes: 10 additions & 0 deletions src/cnab/enums/all/cnab-all-codigo-registro.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export enum CnabAllCodigoRegistro {
HeaderArquivo = '0',
HeaderLote = '1',

/** Se aplica a todos os segmentos de detalhe. */
DetalheSegmento = '3',

TrailerLote = '5',
TrailerArquivo = '9',
}
6 changes: 6 additions & 0 deletions src/cnab/enums/cnab-field-type.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export enum CnabFieldType {
Date = 'date',
Text = 'text',
/** Integer or decimal number */
Number = 'number',
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { CnabAllCodigoRegistro } from 'src/cnab/enums/all/cnab-all-codigo-registro.enum';
import {
CnabField,
CnabFieldAs,
CnabFields,
} from '../../../types/cnab-field.type';
import { Cnab104CodigoSegmento } from 'src/cnab/enums/104/cnab-104-codigo-segmento.enum';

export interface ICnab240_104DetalheA extends CnabFields {
codigoBanco: CnabField;
loteServico: CnabField;
codigoRegistro: CnabFieldAs<CnabAllCodigoRegistro>;
nsr: CnabField;
codigoSegmento: CnabFieldAs<Cnab104CodigoSegmento>;
tipoMovimento: CnabField;
codigoInstrucaoMovimento: CnabField;
camaraCompensacao: CnabField;
codigoBancoDestino: CnabField;
codigoAgenciaDestino: CnabField;
dvAgenciaDestino: CnabField;
contaCorrenteDestino: CnabField;
dvContaDestino: CnabField;
dvAgenciaContaDestino: CnabField;
nomeTerceiro: CnabField;
numeroDocumento: CnabField;
filler: CnabField;
tipoContaFinalidadeTed: CnabField;
dataVencimento: CnabField;
tipoMoeda: CnabField;
quantidadeMoeda: CnabField;
valorLancamento: CnabField;
numeroDocumentoBanco: CnabField;
filler2: CnabField;
quantidadeParcelas: CnabField;
indicadorBloqueio: CnabField;
indicadorFormaParcelamento: CnabField;
periodoDiaVencimento: CnabField;
numeroParcela: CnabField;
dataEfetivacao: CnabField;
valorRealEfetivado: CnabField;
informacao2: CnabField;
finalidadeDOC: CnabField;
usoExclusivoFebraban: CnabField;
avisoAoFavorecido: CnabField;
/** Status do retorno CNAB */
ocorrencias: CnabField;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { CnabAllCodigoRegistro as CnabAllCodigoRegistro } from 'src/cnab/enums/all/cnab-all-codigo-registro.enum';
import {
CnabField,
CnabFieldAs,
CnabFields,
} from '../../../types/cnab-field.type';
import { Cnab104CodigoSegmento } from 'src/cnab/enums/104/cnab-104-codigo-segmento.enum';

export interface ICnab240_104DetalheB extends CnabFields {
codigoBanco: CnabField;
loteServico: CnabField;
codigoRegistro: CnabFieldAs<CnabAllCodigoRegistro>;
nsr: CnabField;
codigoSegmento: CnabFieldAs<Cnab104CodigoSegmento>;
usoExclusivoFebraban: CnabField;
tipoInscricao: CnabField;
numeroInscricao: CnabField;
logradouro: CnabField;
numeroLocal: CnabField;
complemento: CnabField;
bairro: CnabField;
cidade: CnabField;
cep: CnabField;
complementoCep: CnabField;
siglaEstado: CnabField;
dataVencimento: CnabField;
valorDocumento: CnabField;
valorAbatimento: CnabField;
valorDesconto: CnabField;
valorMora: CnabField;
valorMulta: CnabField;
codigoDocumentoFavorecido: CnabField;
usoExclusivoFebraban2: CnabField;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ICnab240_104HeaderArquivo } from './cnab-240-104-header-arquivo.interface';
import { ICnab240_104Lote } from './cnab-240-104-lote.interface';
import { ICnab240_104TrailerArquivo } from './cnab-240-104-trailer-arquivo.interface';

export interface ICnab240_104File {
headerArquivo: ICnab240_104HeaderArquivo;
lotes: ICnab240_104Lote[];
trailerArquivo: ICnab240_104TrailerArquivo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { CnabAllCodigoRegistro } from 'src/cnab/enums/all/cnab-all-codigo-registro.enum';
import {
CnabField,
CnabFieldAs,
CnabFields,
} from '../../../types/cnab-field.type';

export interface ICnab240_104HeaderArquivo extends CnabFields {
codigoBanco: CnabField;
loteServico: CnabField;
codigoRegistro: CnabFieldAs<CnabAllCodigoRegistro>;
filler: CnabField;
tipoInscricao: CnabField;
numeroInscricao: CnabField;
codigoConvenioBanco: CnabField;
parametroTransmissao: CnabField;
ambienteCliente: CnabField;
ambienteCaixa: CnabField;
origemAplicativo: CnabField;
numeroVersao: CnabField;
filler2: CnabField;
agenciaContaCorrente: CnabField;
numeroConta: CnabField;
dvAgencia: CnabField;
dvConta: CnabField;
dvAgenciaConta: CnabField;
nomeEmpresa: CnabField;
nomeBanco: CnabField;
filler3: CnabField;
tipoArquivo: CnabField;
dataGeracaoArquivo: CnabField;
horaGeracaoArquivo: CnabField;

/** Número sequencial de arquivo, id único do arquivo CNAB. */
nsa: CnabField;

versaoLeiauteArquivo: CnabField;
densidadeGravacao: CnabField;
reservadoBanco: CnabField;
reservadoEmpresa: CnabField;
usoExclusivoFebraban: CnabField;
identidadeCobranca: CnabField;
usoExclusivoVan: CnabField;
tipoServico: CnabField;
ocorrenciaCobrancaSemPapel: CnabField;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { CnabAllCodigoRegistro } from 'src/cnab/enums/all/cnab-all-codigo-registro.enum';
import {
CnabField,
CnabFieldAs,
CnabFields,
} from '../../../types/cnab-field.type';

export interface ICnab240_104HeaderLote extends CnabFields {
codigoBanco: CnabField;
loteServico: CnabField;
codigoRegistro: CnabFieldAs<CnabAllCodigoRegistro>;
tipoOperacao: CnabField;
tipoServico: CnabField;
formaLancamento: CnabField;
versaoLeiauteLote: CnabField;
filler: CnabField;
tipoInscricao: CnabField;
numeroInscricao: CnabField;
codigoConvenioBanco: CnabField;
tipoCompromisso: CnabField;
codigoCompromisso: CnabField;
parametroTransmissao: CnabField;
filler2: CnabField;
agenciaContaCorrente: CnabField;
dvAgencia: CnabField;
numeroConta: CnabField;
dvConta: CnabField;
dvAgenciaConta: CnabField;
nomeEmpresa: CnabField;
mensagemAviso: CnabField;
logradouro: CnabField;
numeroLocal: CnabField;
/** @example "Apto 503" */
complemento: CnabField;
cidade: CnabField;
/** @example "12345" */
cep: CnabField;
/** @example "678" */
complementoCep: CnabField;
/** @example "RJ" */
siglaEstado: CnabField;
usoExclusivoFebraban: CnabField;
ocorrencias: CnabField;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ICnab240_104HeaderLote } from './cnab-240-104-header-lote.interface';
import { ICnab240_104Registro } from './cnab-240-104-registro.interface';
import { ICnab240_104TrailerLote } from './cnab-240-104-trailer-lote.interface';

export interface ICnab240_104Lote {
headerLote: ICnab240_104HeaderLote;
registros: ICnab240_104Registro[];
trailerLote: ICnab240_104TrailerLote;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { ICnab240_104DetalheA } from './cnab-240-104-detalhe-a.interface';
import { ICnab240_104DetalheB } from './cnab-240-104-detalhe-b.interface';

export interface ICnab240_104RegistroAB {
detalheA: ICnab240_104DetalheA;
detalheB: ICnab240_104DetalheB;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { ICnab240_104DetalheA } from './cnab-240-104-detalhe-a.interface';
import { ICnab240_104DetalheB } from './cnab-240-104-detalhe-b.interface';

export interface ICnab240_104Registro {
detalheA?: ICnab240_104DetalheA;
detalheB?: ICnab240_104DetalheB;
}
Loading

0 comments on commit 26af1d5

Please sign in to comment.