{"id":37136665,"url":"https://github.com/fabyo/go-nfe-validator","last_synced_at":"2026-01-14T15:55:45.171Z","repository":{"id":322501364,"uuid":"1089757247","full_name":"fabyo/go-nfe-validator","owner":"fabyo","description":"Golang lendo xml NFE e validando com SEFAZ e mostrando dados em json","archived":false,"fork":false,"pushed_at":"2025-11-18T19:10:32.000Z","size":7069,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-18T20:10:01.445Z","etag":null,"topics":["golang","sefaz","xml-parser","xsd-schema","xsd-validation"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fabyo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-04T19:13:58.000Z","updated_at":"2025-11-18T19:10:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fabyo/go-nfe-validator","commit_stats":null,"previous_names":["fabyo/go-nfe-validator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fabyo/go-nfe-validator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo%2Fgo-nfe-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo%2Fgo-nfe-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo%2Fgo-nfe-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo%2Fgo-nfe-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fabyo","download_url":"https://codeload.github.com/fabyo/go-nfe-validator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabyo%2Fgo-nfe-validator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28425572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T15:24:48.085Z","status":"ssl_error","status_checked_at":"2026-01-14T15:23:41.940Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","sefaz","xml-parser","xsd-schema","xsd-validation"],"created_at":"2026-01-14T15:55:44.446Z","updated_at":"2026-01-14T15:55:45.164Z","avatar_url":"https://github.com/fabyo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go NFE Validator 📄✅\n\u003cp\u003e\n   \u003cimg src=\"https://img.shields.io/badge/Go-1.24.0-00ADD8?style=for-the-badge\u0026logo=go\u0026logoColor=white\" /\u003e\n   \u003cimg src=\"https://img.shields.io/badge/XML%2FXSD-NFe-blueviolet?style=for-the-badge\" alt=\"XML/XSD\"/\u003e   \n   \u003cimg src=\"https://img.shields.io/badge/XML-XSD%20Schemas-orange?style=for-the-badge\" /\u003e\n   \u003cimg src=\"https://img.shields.io/badge/SEFAZ-4CAF50?style=for-the-badge\" /\u003e\n   \u003cimg src=\"https://img.shields.io/badge/License-MIT-4CAF50?style=for-the-badge\u0026logo=opensourceinitiative\u0026logoColor=white\" /\u003e   \n\u003c/p\u003e\n\n\n\u003cimg src=\"go-nfe.png\" alt=\"Golang\" width=\"200\" /\u003e\n\nValidador de **NF-e em Go**, focado em:\n\n- ✅ **Validação XSD** usando *libxml2* via `go-xsd-validate`\n- ✅ **Validação estrutural / de dados** (parse do XML)\n- ✅ **Consulta real na SEFAZ** para verificar o status da NF\n- ✅ Retorno em **JSON estruturado**, pronto para APIs, antifraude, auditoria etc.\n\n---\n\n## 🧠 O que o projeto faz\n\nDado um arquivo XML de NF-e ou procNFe (`\u003cNFe\u003e` ou `\u003cnfeProc\u003e`), o validador:\n\n1. **Valida o XML contra o XSD oficial da NF-e 4.00**\n2. Se o XSD passou, faz **parse do XML** e extrai:\n   - **Modelo** (`mod`)\n   - **Série** (`serie`)\n   - **Número** (`nNF`)\n   - **Chave de acesso** (`chNFe`)\n   - **CNPJ** e razão social do emitente\n   - **CNPJ/CPF** e nome do destinatário\n   - **Valor total da nota** (`vNF`)\n3. Opcionalmente, consulta a **SEFAZ real** para:\n   - verificar se a nota existe,\n   - se está **autorizada**, **cancelada**, **denegada**, etc.\n4. Retorna um **JSON** com o resultado consolidado.\n\n---\n\n## 🧪 Exemplo de saída (JSON)\n\n```json\n{\n  \"tipo\": \"nfe\",\n  \"chave_acesso\": \"12349874111111000123550010000040421000040420\",\n  \"valido_xsd\": true,\n  \"sefaz\": {\n    \"consultado\": true,\n    \"autorizado\": true,\n    \"codigo\": \"100\",\n    \"mensagem\": \"Autorizado o uso da NF-e\"\n  },\n  \"dados_xml\": {\n    \"modelo\": \"55\",\n    \"serie\": \"1\",\n    \"numero\": \"4042\",\n    \"emitente_cnpj\": \"12345678000199\",\n    \"emitente_razao\": \"EMPRESA EXEMPLO LTDA\",\n    \"destinatario_doc\": \"53745432000188\",\n    \"destinatario_nome\": \"CLIENTE TESTE\",\n    \"valor_total_nota\": \"199.90\"\n  }\n}\n```\n\n---\n\n## Uso como Biblioteca\n\n```go\ngo get github.com/fabyo/go-nfe-validator\n```\n\n### 1️⃣ Validar apenas XSD (desenvolvimento)\n\n```go\nimport \"github.com/fabyo/go-nfe-validator/pkg/nfe\"\n\nxmlData, _ := os.ReadFile(\"nota.xml\")\nerr := nfe.ValidarApenasXSD(xmlData, \"schemas/v4/procNFe_v4.00.xsd\")\n```\n\n### 2️⃣ Validar com SEFAZ\n```go\nclient, _ := nfe.NewClient(\"cert\", \"key.pem\", \"cert.pem\")\nresult, _ := client.ValidarXML(xmlData, \"schema.xsd\")\n\nif result.Autorizado {\n    fmt.Println(\"NF-e autorizada!\")\n}\n```\n\n### 3️⃣ Validar apenas por chave\n```go\nresult, _ := client.ValidarChave(\"123456789098765433215550010000098765543211111\")\nfmt.Println(result.Status.Mensagem)\n```\n\n### 4️⃣ Script de exemplo\n```go\ngo run examples/validar-xml/main.go 12345678998765432111111122222233333344444455-procNFe.xml\n```\n\n### 🚀 Outros projetos poderão usar assim:\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"os\"\n    \n    \"github.com/fabyo/go-nfe-validator/pkg/nfe\"\n)\n\nfunc main() {\n    // Validação rápida apenas XSD\n    xmlData, _ := os.ReadFile(\"nota.xml\")\n    if err := nfe.ValidarApenasXSD(xmlData, \"schema.xsd\"); err != nil {\n        panic(err)\n    }\n    \n    // Ou validação completa\n    client, _ := nfe.NewClient(\"cert\", \"key.pem\", \"cert.pem\")\n    result, _ := client.ValidarChave(\"12345678998765432111111122222233333344444455\")\n    \n    fmt.Printf(\"Autorizada: %v\\n\", result.Autorizado)\n}\n```\n\n---\n## Uso como CLI:\n\n1️⃣ **Apenas XSD (desenvolvimento - super rápido!)**\n```bash\n./validator -xsd nota.xml schemas/v4/procNFe_v4.00.xsd\n```\n✅ Valida apenas se o XML está correto conforme o schema  \n✅ Perfeito para desenvolvimento de emissor  \n✅ Não consulta SEFAZ  \n✅ Resposta instantânea  \n\n2️⃣ **XSD + Parse (validação intermediária)**\n```bash\n./validator -skip-sefaz nota.xml schemas/v4/procNFe_v4.00.xsd\n```\n✅ Valida XSD  \n✅ Extrai e valida dados (chave, CNPJ, valores)  \n✅ Não consulta SEFAZ  \n✅ Bom para testes antes de ir para SEFAZ  \n\n3️⃣ **Validação Completa (produção)**\n```bash\n./validator nota.xml schemas/v4/procNFe_v4.00.xsd\n```\n✅ Valida XSD  \n✅ Valida dados  \n✅ Consulta status na SEFAZ  \n✅ Retorna status da nota\n\n4️⃣ **Validação pela chave (sem xml)**\n```bash\n./validator -chave=12345678912345678998765432112345678911111111\n```\n✅ Verifica se tem exatamente 44 dígitos  \n✅ Verifica se são apenas números  \n✅ Consulta status na SEFAZ  \n✅ Retorna erro claro se inválida  \n✅ Retorna status da nota  \n\n\u003cimg src=\"status.png\" alt=\"Golang\" width=\"700\" /\u003e\n\n---\n\n# Exemplo: .env.production\n```bash\n# export NFE_ENV=production\nNFE_ENV=production\n\n# -----------------\n# Certificados\n# -----------------\nNFE_CERT_DIR=certs/\nNFE_CERT_KEY_FILE=key.pem\nNFE_CERT_PUB_FILE=cert.pem\n\n# -----------------\n# Credenciais\n# -----------------\nNFE_CNPJ=12345678000100\nNFE_UF_IBGE=35\n\n# -----------------\n# URLs (Produção)\n# -----------------\nSEFAZ_CONSULTA_URL=https://nfe.fazenda.sp.gov.br/ws/nfeconsultaprotocolo4.asmx\n```\n\n---\n\n## 🧩 Fluxo Inteligente\n\nFluxo lógico atual do validador:\n\n```mermaid\ngraph TD\n    %% Fluxo principal da NFe\n    A[Valida XSD]\n    B[Erro de schema]\n    C[Parse XML]\n    D[XML inválido]\n    E[Consulta SEFAZ]\n    F[Retorna apenas dados do XML]\n    G[Status real da NFe]\n\n    A -- erro --\u003e B\n    A -- ok --\u003e C\n    C -- erro --\u003e D\n    C -- ok --\u003e E\n    E -- \"skip sefaz\" --\u003e F\n    E -- consulta --\u003e G\n\n    %% Fluxo separado: validação por chave de acesso\n    X[Valida chave de acesso]\n    Y[Chave inválida]\n    Z[Chave válida]\n\n    X -- inválida --\u003e Y\n    X -- válida --\u003e Z\n\n```\n\nEm resumo:\n\n- **XSD sempre roda primeiro**.\n- Se o XSD falhar → erro e fim.\n- Se o XSD passar:\n  - faz parse do XML (para extrair dados de nota);\n  - se não estiver em modo “só XSD” e não usar `--skip-sefaz`, consulta a SEFAZ e enriquece o resultado com o status real da NF-e.\n\n---\n\n## 📚 Schemas (XSD) via `sefaz-scraper`\n\nOs schemas oficiais **não ficam hardcoded**:  \neste projeto usa os XSDs atualizados pelo:\n\n- 🔗 [`fabyo/sefaz-scraper`](https://github.com/fabyo/sefaz-scraper)\n\n```bash\n./download_schemas.sh\n```\n\nA ideia é:\n\n- `sefaz-scraper` baixa/atualiza os XSDs direto das SEFAZ/Portal;\n- `go-nfe-validator` aponta para essa pasta, garantindo validação sempre com os **layouts oficiais mais recentes**.\n\n---\n\n## 🎯 Objetivo do projeto\n\nSer um **núcleo técnico** sólido para:\n\n- validação de NF-e (estrutura + XSD),\n- conferência real na SEFAZ,\n- saída estruturada em JSON,\n- base para:\n  - antifraude,\n  - robôs de conferência fiscal,\n  - integrações com outros sistemas (ERPs, BI, IA, etc.).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabyo%2Fgo-nfe-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabyo%2Fgo-nfe-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabyo%2Fgo-nfe-validator/lists"}