Uma biblioteca TypeScript para integração com o web service de Nota Fiscal de Serviço Eletrônica (NFSe) do Brasil.
npm install typenfse
Crie um arquivo .env
na raiz do seu projeto e adicione as seguintes variáveis de ambiente:
# Caminho para o seu certificado digital .pfx ou .p12
CERT_PATH=caminho/para/seu/certificado.pfx
# Senha do certificado digital
CERT_PASSWORD=sua-senha-do-certificado
A biblioteca vem pré-configurada com os endpoints para a cidade de Niterói/RJ. Caso precise utilizar os serviços de outra cidade, você pode passar sua própria configuração ao instanciar o NfseClient
:
const customConfig = {
production: {
url: "URL_DE_PRODUCAO_DA_SUA_CIDADE",
wsdl: "URL_DO_WSDL_DE_PRODUCAO_DA_SUA_CIDADE",
},
development: {
url: "URL_DE_HOMOLOGACAO_DA_SUA_CIDADE",
wsdl: "URL_DO_WSDL_DE_HOMOLOGACAO_DA_SUA_CIDADE",
},
};
const client = new NfseClient("production", customConfig);
Primeiro, importe e instancie o NfseClient
.
import { NfseClient } from "typenfse";
// Por padrão, o ambiente é 'production'.
// Para usar 'development', basta passar explicitamente.
const client = new NfseClient(); // production
// ou
const clientDev = new NfseClient("development");
// Também é possível passar uma configuração personalizada:
import { nfseConfig } from "./src/config/nfse";
const customConfig = {
production: { ... },
development: { ... }
};
const clientCustom = new NfseClient("production", customConfig);
async function enviarRps() {
const rpsXml = `<seu-xml-de-rps-aqui />`; // XML do RPS
const certPath = process.env.CERT_PATH!;
const certPassword = process.env.CERT_PASSWORD!;
try {
const resultado = await client.sendRps(rpsXml, certPath, certPassword);
console.log("RPS enviado com sucesso:", resultado);
} catch (error) {
console.error("Erro ao enviar RPS:", error);
}
}
enviarRps();
async function consultarLote() {
const protocolo = "numero-do-protocolo";
try {
const resultado = await client.consultRpsLot(protocolo);
console.log("Consulta de lote realizada com sucesso:", resultado);
} catch (error) {
console.error("Erro ao consultar lote:", error);
}
}
consultarLote();
async function gerarNfse() {
const rpsXml = `<seu-xml-de-rps-aqui />`; // XML do RPS individual
const certPath = process.env.CERT_PATH!;
const certPassword = process.env.CERT_PASSWORD!;
try {
const resultado = await client.gerarNfse(rpsXml, certPath, certPassword);
console.log("NFS-e gerada com sucesso:", resultado);
} catch (error) {
console.error("Erro ao gerar NFS-e:", error);
}
}
gerarNfse();
async function listarNfsePrestadas() {
const filtro = {
// Exemplo de filtro: período, CNPJ, etc
dataInicio: "2024-01-01",
dataFim: "2024-01-31",
cnpjPrestador: "12345678000199"
};
try {
const resultado = await client.listarNfsePrestadas(filtro);
console.log("NFS-e emitidas:", resultado);
} catch (error) {
console.error("Erro ao listar NFS-e prestadas:", error);
}
}
listarNfsePrestadas();
async function listarNfseTomadas() {
const filtro = {
// Exemplo de filtro: período, CNPJ, etc
dataInicio: "2024-01-01",
dataFim: "2024-01-31",
cnpjTomador: "98765432000188"
};
try {
const resultado = await client.listarNfseTomadas(filtro);
console.log("NFS-e recebidas/tomadas:", resultado);
} catch (error) {
console.error("Erro ao listar NFS-e tomadas:", error);
}
}
listarNfseTomadas();
async function consultarNfse() {
const identificadorRps = { rps: "12345" }; // Objeto com os dados do RPS
try {
const resultado = await client.consultNfseByRps(identificadorRps);
console.log("NFSe consultada com sucesso:", resultado);
} catch (error) {
console.error("Erro ao consultar NFSe:", error);
}
}
consultarNfse();
async function cancelar() {
const dadosCancelamento = { nfse: "54321" }; // Objeto com os dados para cancelamento
try {
const resultado = await client.cancelNfse(dadosCancelamento);
console.log("NFSe cancelada com sucesso:", resultado);
} catch (error) {
console.error("Erro ao cancelar NFSe:", error);
}
}
cancelar();
Para rodar os testes, primeiro instale as dependências de desenvolvimento:
npm install
Em seguida, execute o comando de teste:
npm test
Contribuições são bem-vindas! Para colaborar com este projeto:
- Faça um fork do repositório.
- Crie uma branch para sua feature ou correção:
git checkout -b minha-feature
- Faça suas alterações e adicione testes, se necessário.
- Execute os testes para garantir que tudo está funcionando:
npm test
- Faça commit das suas alterações:
git commit -m "Minha contribuição"
- Envie um push para sua branch:
git push origin minha-feature
- Abra um Pull Request detalhando suas mudanças.
Sinta-se à vontade para abrir issues para relatar bugs, sugerir melhorias ou tirar dúvidas!