npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

sped-gen

v0.2.0

Published

Gerador de código baseado em metadados do SPED

Readme

SPED-Gen

npm version Build Status Codecov semantic-release

Gerador de código baseado em metadados do SPED - Sistema Público de Escrituração Digital.

Conteúdo

Instalação

$ npm install sped-gen

Uso

var spedGen = require('sped-gen');

spedGen(/*Object*/options);

Opções

  • (String) layoutSped: Os valores possíveis são fiscal ou contrib (obrigatório, default: fiscal)
  • (String) versaoLayout: Corresponde ao valor do campo COD_VER do registro 0000 (ver manuais do SPED para mais informações). Para o layout fiscal as versões suportadas são '009', '010' e '011'; para o layout contrib as versões suportadas são '002' e '003'. Se não informada, a última versão suportada será usada.
  • (String) template: String contendo um template handlebars (obrigatório se templateFile não especificado)
  • (String) templateFile: Arquivo de template handlebars (obrigatório se template não especificado)
  • (String|Function) fileName: String ou função que retorna o nome do(s) arquivo(s) a ser(em) gerado(s). Pode ser um template handlebars que será processado com os metadados (obrigatório)
  • (Boolean) singleFile: Será gerado um único arquivo? (default: false)
  • (Function) filter: Função para filtrar (excluir) registros da geração (default: (registro) => true)
  • (Function) handler: Função para alterar um registro antes de ser passado para o template. Pode ser usada, por ex., para adicionar campos calculados ao registro (default: () => {})
  • (Function) mapper: Função para transformar um registro antes de ser passado para o template (default: (registro) => registro)
  • (Function) writer: Função que define onde o template processado será escrito. Recebe como parâmetros o template processado, o registro e as opções (default: DefaultWriter)
  • (Object) aditionalFields: Campos adicionais incluídos nos registros antes de passá-los ao template (default: {})
  • (Object) helpers: Helpers customizados do Handlebars que existirão somente no escopo da execução atual (default: {})

Para entender melhor as opções consulte os exemplos.

Formato dos metadados

Abaixo pode-se ver um exemplo de metadado do registro 0190. Para saber o significado de alguns campos (por ex. obrigatorio, tipo), consulte a documentação do SPED.

Obs: o campo REG da posição 1 sempre é excluído.

{
  "id": "0190",
  "nivel": "2",
  "ocorrencia": "2",
  "obrigatorio": "0",
  "descricao": "Unidade de Medida",
  "campos": [
    {
      "posicao": "2",
      "id": "UNID",
      "tipo": "C",
      "tamanho": "6",
      "obrigatorio": "1",
      "descricao": "Código da unidade de medida"
    },
    {
      "posicao": "3",
      "id": "DESCR",
      "tipo": "C",
      "tamanho": "",
      "obrigatorio": "1",
      "descricao": "Descrição da unidade de medida"
    }
  ],
  "pai": "0001",
  "referenciadoPor": [
    {
      "regId": "0200",
      "campoId": "UNID",
      "campoRef": "UNID_INV"
    }
  ]
}

Campos adicionais incluídos por padrão nos metadados

O seguintes campos são incluídos a cada metadado de registro na sua raiz. Podem ser acessados no template apenas com seu nome.

  • bloco: Bloco do registro (primeiro caracter do id do registro)
  • abertura: Registro é de abertura de bloco? (registros *001)
  • encerramento: Registro é de encerramento de bloco? (registros *990 e *999)
  • layoutSped: Layout SPED informado nas opções

Funções e constantes utilitárias

No módulo

var spedGen = require('sped-gen');

spedGen.layouts.{FISCAL|CONTRIB} // layouts permitidos
spedGen.utils // funções utilitárias sobre registros
spedGen.DEFAULT_OPTIONS // pode ser usada para sobrescrever as opções default
spedGen.registerHelper // registra um helper do handlebars

Nos templates (helpers do handlebars)

  • camelize(String): Converte a string para camel case. Por ex.: field_name -> fieldName
  • getter(String): Obtém java getter. Por ex.: field_name -> getFieldName
  • setter(String): Obtém java setter. Por ex.: field_name -> setFieldName
  • getJavaType(Object): Obtém um java type a partir de um metadado de campo do SPED
  • getBloco(String): Obtém o bloco (primeiro caracter do id do registro)
  • pascalCase(String): Converte a string para pascal case. Por ex.: field_name -> FieldName
  • lcase(String): Converte a string para lowercase
  • ucase(String): Converte a string para uppercase

A utilização de alguns desses helpers pode ser vista nos exemplos.