diff --git a/.github/workflows/DFe.NET_build.yml b/.github/workflows/DFe.NET_build.yml new file mode 100644 index 000000000..b7ab764eb --- /dev/null +++ b/.github/workflows/DFe.NET_build.yml @@ -0,0 +1,153 @@ +name: DFe.NET_build + +on: + workflow_dispatch: + inputs: + logLevel: + description: 'Log level' + required: true + default: 'warning' + nugetdeploy: + type: boolean + description: 'Deploy Nuget ?' + push: + branches: + - 'master' + pull_request: + types: [opened, reopened] + branches: + - 'master' +jobs: + build: + runs-on: ${{ matrix.os }} + outputs: + version: ${{ steps.date.outputs.date }} + strategy: + matrix: + # os: [ ubuntu-latest, windows-latest, macos-latest ] + os: [ windows-2022 ] + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setando Versao + id: date + run: | + $date = Get-Date -Format "yyyy.MM.dd.HHmm" + echo "date=$date" >> $env:GITHUB_OUTPUT + + - name: Versao + run: echo ${{ steps.date.outputs.date }} + + - name: Setup .NET 6.0.x + uses: actions/setup-dotnet@v2 + with: + dotnet-version: 6.0.x + + - name: Build/Restore Base + run: | + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\DFe.Classes\DFe.Classes.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\DFe.Utils\DFe.Utils.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\DFe.Wsdl\DFe.Wsdl.csproj" -c "Release" + - name: Build/Restore NFe + run: | + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\NFe.Classes\NFe.Classes.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\NFe.Servicos\NFe.Servicos.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\NFe.Utils\NFe.Utils.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\NFe.Wsdl\NFe.Wsdl.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\NFe.Wsdl.Standard\NFe.Wsdl.Standard.csproj" -c "Release" + + - name: Build/Restore MDFe + run: | + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\MDFe.Classes\MDFe.Classes.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\MDFe.Servicos\MDFe.Servicos.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\MDFe.Utils\MDFe.Utils.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\MDFe.Wsdl\MDFe.Wsdl.csproj" -c "Release" + + - name: Build/Restore MDFe + run: | + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\CTe.Classes\CTe.Classes.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\CTe.Servicos\CTe.Servicos.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\CTe.Utils\CTe.Utils.csproj" -c "Release" + dotnet build -p:Version=${{ steps.date.outputs.date }} ".\CTe.Wsdl\CTe.Wsdl.csproj" -c "Release" + + #- name: Test + # run: dotnet test --no-build --verbosity normal + + - name: Pack + run: | + dotnet pack -o ${{ github.workspace }} -v minimal -c Release -p:NuspecProperties=version=${{ steps.date.outputs.date }} -p:PackageVersion=${{ steps.date.outputs.date }} NuGet\Zeus.Net.NFe.NFCe\Zeus.Net.NFe.NFCe.csproj + dotnet pack -o ${{ github.workspace }} -v minimal -c Release -p:NuspecProperties=version=${{ steps.date.outputs.date }} -p:PackageVersion=${{ steps.date.outputs.date }} NuGet\Zeus.Net.MDFe\Zeus.Net.MDFe.csproj + dotnet pack -o ${{ github.workspace }} -v minimal -c Release -p:NuspecProperties=version=${{ steps.date.outputs.date }} -p:PackageVersion=${{ steps.date.outputs.date }} NuGet\Zeus.Net.CTe\Zeus.Net.CTe.csproj + dotnet pack -o ${{ github.workspace }} -v minimal -c Release -p:NuspecProperties=version=${{ steps.date.outputs.date }} -p:PackageVersion=${{ steps.date.outputs.date }} NFe.Danfe.Html\NFe.Danfe.Html.csproj + dotnet pack -o ${{ github.workspace }} -v minimal -c Release -p:NuspecProperties=version=${{ steps.date.outputs.date }} -p:PackageVersion=${{ steps.date.outputs.date }} NFe.Danfe.QuestPdf\NFe.Danfe.QuestPdf.csproj + dotnet pack -o ${{ github.workspace }} -v minimal -c Release -p:NuspecProperties=version=${{ steps.date.outputs.date }} -p:PackageVersion=${{ steps.date.outputs.date }} NFe.Danfe.PdfClown\NFe.Danfe.PdfClown.csproj + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: nupkg + path: ${{ github.workspace }}/*.nupkg + + deploy: + needs: build + if: github.event_name == 'push' || github.event.inputs.nugetdeploy == 'true' + runs-on: ${{ 'ubuntu-latest' }} + steps: + - name: Download Artifacts + uses: actions/download-artifact@v4 + with: + name: nupkg + path: ${{ github.workspace }} + + - name: List Artifacts + run: dir + + - name: Setup Nuget + uses: actions/setup-dotnet@v2 + with: + dotnet-version: 6.0.x + + - name: Push to NuGet Feed + run: dotnet nuget push *.nupkg -k $NUGET_AUTH_TOKEN -s https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: ${{secrets.NUGET_SECRET_DEPLOY}} + + - name: Criar Tag + id: create_tag + run: | + curl -X POST \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d '{ + "tag": "${{ needs.build.outputs.version }}", + "message": "Release versão ${{ needs.build.outputs.version }}", + "object": "${{ github.sha }}", + "type": "commit" + }' \ + https://api.github.com/repos/${{ github.repository }}/git/tags + + - name: Criar Release + id: create_release + run: | + curl -X POST \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d '{ + "tag_name": "${{ needs.build.outputs.version }}", + "name": "${{ needs.build.outputs.version }}", + "body": "Esta é a release da versão ${{ needs.build.outputs.version }} do Zeus DFe.NET.\n\n### Links dos pacotes no NuGet:\n- [Zeus.NFe.NFCe](https://www.nuget.org/packages/Zeus.Net.NFe.NFCe/${{ needs.build.outputs.version }})\n- [Zeus.MDFe](https://www.nuget.org/packages/Zeus.Net.MDFe/${{ needs.build.outputs.version }})\n- [Zeus.CTe](https://www.nuget.org/packages/Zeus.Net.CTe/${{ needs.build.outputs.version }})\n- [Zeus.NFe.Danfe.Html](https://www.nuget.org/packages/Zeus.Net.NFe.Danfe.Html/${{ needs.build.outputs.version }})\n- [Zeus.NFe.Danfe.QuestPdf](https://www.nuget.org/packages/Zeus.Net.NFe.Danfe.QuestPdf/${{ needs.build.outputs.version }})\n- [Zeus.NFe.Danfe.PdfClown](https://www.nuget.org/packages/Zeus.Net.NFe.Danfe.PdfClown/${{ needs.build.outputs.version }})", + "draft": false, + "prerelease": false + }' \ + https://api.github.com/repos/${{ github.repository }}/releases + + + - name: Discord notification + continue-on-error: true + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + DISCORD_MENSAGEM: ${{ needs.build.outputs.version }} + uses: Ilshidur/action-discord@master + with: + args: 'Lançado Zeus DFe.NET versão {{ DISCORD_MENSAGEM }} no Nuget! Acesse: https://www.nuget.org/profiles/ZeusAutomacao' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3873de9df..0daa0dbf5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,68 +1,166 @@ -# Windows image file caches -Thumbs.db -ehthumbs.db +# Created by https://www.gitignore.io/api/visualstudio -# Folder config file -Desktop.ini +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# ========================= -# Operating System Files -# ========================= - -# OSX -# ========================= - -.DS_Store -.AppleDouble -.LSOverride - -# Thumbnails -._* +# User-specific files +NFe.sln.DotSettings.user +*.suo +*.user +*.userosscache +*.sln.docstates -# Files that might appear on external disk -.Spotlight-V100 -.Trashes +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ -[Xx]64/ -[Xx]86/ -[Bb]uild/ +x64/ +x86/ bld/ [Bb]in/ [Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* +# NUNIT +*.VisualState.xml +TestResult.xml + # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates -*.csproj.user +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log *.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ # NuGet Packages *.nupkg @@ -76,106 +174,113 @@ dlldata.c *.nuget.props *.nuget.targets -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +### VisualStudio Patch ### +build/ -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk -/BuildProcessTemplates -/.vs/Zeus NFe/v15/.suo -/.vs/Zeus NFe/v14/.suo -/NFe.AppTeste/obj/Debug -/NFe.Classes/obj/Debug -/Nfe.Impressao/obj/Debug -/NFe.Servicos/obj/Debug -/NFe.Utils/obj/Debug -/NFe.Wsdl/obj/Debug -/NFe.Wsdl/obj/Release -/NFe.Wsdl/bin -/NFe.Utils/obj/Release -/NFe.Utils/bin -/NFe.Servicos/obj/Release -/NFe.Servicos/bin -/Nfe.Impressao/obj/Release -/Nfe.Impressao/bin -/NFe.Classes/obj/Release -/NFe.Classes/bin -/NFe.AppTeste/obj/Release -/NFe.AppTeste/bin -/NFe.Integracao/bin/Debug -/NFe.Integracao/obj/Debug -/NFe.Danfe.AppTeste/obj -/NFe.Danfe.AppTeste/bin -/NFe.Danfe.Base/bin -/NFe.Danfe.Base/obj -/NFe.Danfe.Fast/bin -/NFe.Danfe.Fast/obj -/NFe.Integracao/obj/Release -/MDFe.Classes/bin -/MDFe.Classes/obj -/MDFe.AppTeste/bin -/MDFe.AppTeste/obj -/MDFe.Utils/bin -/MDFe.Utils/obj -/DFe.Classes/bin -/DFe.Classes/obj -/DFe.Utils/bin -/DFe.Utils/obj -/MDFe.Servicos/bin -/MDFe.Servicos/obj -/MDFe.Wsdl/bin -/MDFe.Wsdl/obj -/DFe.Classes/obj -/DFe.Utils/obj -/MDFe.AppTeste/obj -/MDFe.AppTeste/bin -/MDFe.Classes/obj -/MDFe.Utils/obj -/MDFe.Damdfe.AppTeste/obj -/MDFe.Damdfe.AppTeste/bin -/MDFe.Damdfe.Base/obj -/MDFe.Damdfe.Base/bin -/MDFe.Damdfe.Fast/obj -/MDFe.Damdfe.Fast/bin -/NFe.Danfe.Nativo/bin -/NFe.Danfe.Nativo/obj -/GraphicsPrinter/bin -/GraphicsPrinter/obj -/GraphicsPrinter/bin -/GraphicsPrinter/obj -/NFe.Danfe.Nativo/obj -/NFe.Danfe.Nativo/bin -/NFe.Integracao/bin -/CTe.AppTeste/bin -/CTe.AppTeste/bin/Debug -/CTe.AppTeste/bin/Release -/CTe.AppTeste/obj -/CTe.Classes/bin -/CTe.Classes/obj -/CTe.Servicos/bin -/CTe.Servicos/obj -/CTe.Utils/bin -/CTe.Utils/obj -/CTe.Wsdl/bin -/CTe.Wsdl/obj -/CTe.AppTeste/obj -/CTe.AppTeste/bin -/CTe.Classes/obj -/CTe.Servicos/obj -/CTe.Utils/obj -/CTe.Wsdl/obj -/CTe.Dacte.AppTeste/obj/Debug -/CTe.Dacte.AppTeste/bin/Debug -/CTe.Dacte.Base/obj/Debug -/CTe.Dacte.Base/bin/Debug -/CTe.Dacte.Fast/obj/Debug -/CTe.Dacte.Fast/bin/Debug -/.vs/* -.vs/Zeus NFe/v15/.suo -/src/.vs/ZeusDFe/v15/Server/sqlite3/db.lock -/src/.vs/ZeusDFe/v15/Server/sqlite3/storage.ide -/src/* \ No newline at end of file +# End of https://www.gitignore.io/api/visualstudio +*.dll +/Bredas.SharedKernel/novo.sql diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..c1ca367e2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,191 @@ +# Contribuindo para o projeto DFe.NET + +Bem-vindo(a) ao repositório do **DFe.NET**! Agradecemos seu interesse em contribuir para este projeto open source. Este documento tem o objetivo de orientar colaboradores, definir padrões de qualidade e facilitar a integração das contribuições. Leia atentamente as seções abaixo para que possamos trabalhar juntos de forma colaborativa e eficiente. + +## Índice + +1. [Abertura de issues](#abertura-de-issues) + - [Reportando possíveis bugs ou problemas](#reportando-possiveis-bugs-ou-problemas) + - [Solicitação de recursos ou melhorias](#solicitacao-de-recursos-ou-melhorias) + - [Dúvidas sobre o projeto, recursos e configurações](#duvidas-sobre-o-projeto-recursos-e-configuracoes) +2. [Contribuindo](#contribuindo) + - [Fluxo de trabalho](#fluxo-de-trabalho) + - [Commits](#commits) + - [Pull requests](#pull-requests) +3. [Convenções de código, padrões e boas práticas](#convencoes-de-codigo-padroes-e-boas-praticas) +4. [Licença](#licenca) + +## Abertura de issues + +Issues podem ser abertas para tirar dúvidas, reportar possíveis bugs e problemas, além de sugerir novos recursos ou melhorias em funcionalidades existentes. Antes de abrir uma nova issue, verifique se já existe alguma aberta ou fechada relacionada ao mesmo tema. Se encontrar, junte-se à discussão e avalie se sua solicitação pode ser atendida nela. Caso a issue tenha tomado um rumo diferente e não atenda à sua necessidade específica, você pode contribuir para a discussão existente ou, se necessário, criar uma nova issue abordando um ponto diferente relacionado ao tema. Se não houver nenhuma issue relacionada, siga as diretrizes abaixo para abrir uma nova corretamente. + +### Reportando possíveis bugs ou problemas + +Ao reportar um possível bug ou problema, forneça uma descrição detalhada, incluindo: + +- Passos para reproduzir +- O comportamento esperado (se aplicável) +- O comportamento atual +- Imagens, stack traces ou qualquer outra informação relevante para facilitar a identificação e reprodução +- Detalhes sobre o ambiente em que ocorreu (versão do sistema operacional, dependências, se está usando pacotes via NuGet ou referências diretas, etc.). + +Isso reduz o tempo gasto apenas para entender e replicar o problema. + +**Modelo para reportar bugs:** + +```markdown +**Descrição:** +Ao tentar executar a funcionalidade X, ocorre um erro inesperado. + +**Passos para reproduzir:** +1. Acesse a tela Y. +2. Clique no botão Z. +3. Observe que o erro ocorre. + +**Comportamento esperado:** +O sistema deveria realizar a ação A e retornar B, sem erro. + +**Comportamento atual:** +O sistema exibe a exceção "System.NullReferenceException". + +**Ambiente:** +- Windows 10 +- .NET Framework 4.8 +- Versão do software: 1.2.3 +- Utilizando Nuget +``` + +### Solicitação de recursos ou melhorias + +Antes de criar a issue solicitando algum recurso ou melhoria, verifique se a solicitação já não foi proposta ou discutida anteriormente para evitar duplicidade. Caso já exista uma discussão, contribua nela em vez de abrir uma nova issue. Se não houver nenhuma issue aberta sobre o assunto, descreva claramente o novo recurso, os benefícios que ele traria e, quando possível, o que seria necessário para viabilizar sua implementação. + +**Modelo para solicitar recursos ou melhorias:** + +```markdown +**Descrição:** +Adicionar suporte à emissão de um novo tipo de documento fiscal eletrônico. + +**Benefícios:** +- Ampliaria o suporte da biblioteca para documentos fiscais eletrônicos, atendendo mais usuários. +- Etc... + +**Requisitos:** +- O sistema precisaria dos schemas do novo documento fiscal eletrônico; +- Etc... +``` + +### Dúvidas sobre o projeto, recursos e configurações + +Caso possua dúvidas sobre o uso do projeto, configurações, funcionalidades ou outros aspectos, verifique se sua dúvida já foi respondida na documentação do `README` ou em alguma issue (aberta ou fechada) que já foi discutida e resolvida. Caso encontre uma issue aberta relacionada, participe da discussão em vez de criar uma nova. Se a issue estiver fechada, confira se sua dúvida foi sanada. Caso contrário, descreva seu problema de forma detalhada, informando o contexto e os passos que já tentou para resolvê-lo, se pertinente, e abra uma nova issue. + +**Modelo para abertura de dúvidas:** + +```markdown +**Pergunta:** +Como posso configurar o projeto para rodar em um ambiente Linux? + +**Contexto:** +Estou tentando executar o projeto no Ubuntu 22.04, mas estou enfrentando dificuldades para instalar as dependências corretamente. + +**O que já tentei:** +1. Instalei todas as dependências listadas na documentação. +2. Executei o comando X, mas recebo o erro "Y". +3. Tentei a solução alternativa Z, sem sucesso. + +**Ambiente:** +- Sistema Operacional: Ubuntu 22.04 +- .NET versão: 6.0 +- Dependências instaladas: A, B, C +``` + +## Contribuindo + +Para realizar contribuições para a biblioteca, é fundamental seguir o fluxo de trabalho e respeitar as convenções definidas aqui. + +### Fluxo de trabalho + +Faça um fork do repositório no GitHub para iniciar a implementação. Contribuidores externos não possuem nível de permissão para criar branches no repositório. Dessa forma, é necessário realizar contribuições através de um fork. + +Com o fork realizado, deve-se criar uma branch para a implementação com base na branch principal. A branch principal é `master`, que reflete a versão estável e mais atualizada do projeto. Dessa forma, toda e qualquer contribuição deve ser realizada utilizando a branch `master`. + +A nova branch deve seguir o padrão de nomenclatura conforme o [Conventional Branch](https://conventional-branch.github.io/), por exemplo: +- `feature/nome_da_funcionalidade` para novas funcionalidades +- `bugfix/descrição_do_bug` para correções de bugs + +Além disso, mantenha sua branch sempre sincronizada com a branch principal para minimizar conflitos durante o desenvolvimento. + +#### Commits + +Os commits devem ser atômicos e lógicos, garantindo que cada um contenha apenas alterações relacionadas a uma única funcionalidade ou correção. Isso mantém o histórico do repositório organizado e facilita a compreensão das mudanças. + +Se as alterações no código fizerem com que os testes falhem, os testes devem ser corrigidos no mesmo commit. + +Para mudanças significativas, divida seu trabalho em commits separados para facilitar a revisão. Isso ajuda a manter o histórico organizado e torna mais fácil identificar e entender cada alteração individualmente. De maneira opcional, caso ache interessante, utilize a estratégia de *squash commit* para mesclar commits relacionados e manter o histórico coerente e simplificado. Link de apoio para aplicar o squash commit: [Git Squash Commits – Squashing the Last N Commits into One Commit](https://www.freecodecamp.org/news/git-squash-commits/) + +A mensagem do commit deve descrever claramente como o comportamento está mudando e o motivo da alteração. Evite descrições vagas como "corrige bug" ou "ajuste", bem como commits sem descrição. Orientamos utilizar o formato [Conventional Commits](https://www.conventionalcommits.org/pt-br/v1.0.0/) para garantir uniformidade e facilitar a compreensão do histórico de alterações. + + +#### Pull requests + +Os Pull Requests devem conter apenas alterações relacionadas a uma única funcionalidade ou correção. Isso auxilia na revisão e mantém o histórico do repositório organizado e facilita a compreensão das mudanças. + +Após concluir as alterações na sua branch, abra um Pull Request (PR) da branch, em seu fork, onde realizou a implementação, para a branch `master` do repositório principal. Isso permitirá que seu código seja revisado e mesclado ao repositório principal. Para isso, siga as diretrizes abaixo: + +1. Certifique-se de que sua branch está sincronizada com a branch principal (`master`). Caso necessário, faça um rebase ou merge antes de abrir o PR +2. Execute todos os testes antes de enviar a solicitação. Pull Requests que quebram testes automatizados não serão revisados nem aprovados +3. Verifique se o código segue as convenções de nomenclatura, formatação e boas práticas estabelecidas no repositório. +4. Em seu PR, forneça uma descrição clara e objetiva sobre quais mudanças foram feitas e o motivo da alteração +5. Se houver uma issue vinculada à implementação do seu PR, faça a associação para facilitar o rastreamento +6. Caso haja alguma pendência, resolva-a antes de abrir o PR. Corrija conflitos, erros no pipeline e outras pendências antes de enviar a solicitação +7. Após a abertura do PR, aguarde a revisão. Verifique periodicamente se solicitações foram adicionadas pelos revisores. Caso haja, realize as correções necessárias e atualize o PR. + + +### Convenções de código, padrões e boas práticas + +Para garantir clareza, consistência e qualidade no código, adote as seguintes diretrizes: + +- Os nomes de métodos, atributos e classes auxiliares devem ser escritos em português; +- Os nomes das classes e atributos constantes no Manual de Orientação do Contribuinte devem ser escritos exatamente como constam na documentação, respeitando a diferenciação entre maiúsculas e minúsculas (case sensitive). Exemplo: se o atributo ou classe começar com letra minúscula, ele deve ser mantido dessa forma no código C#. +- Todas as classes devem conter um cabeçalho com a licença e os direitos de uso; +- Ao referenciar objetos ou métodos na documentação XML, utilize ``. Exemplo: +```csharp +/// +/// Obtém o certificado digital. +/// +/// Se for informado, será usado o método . +/// Caso contrário, será usado . +/// +/// Após o uso, invoque . +/// +``` +- Todas as classes, atributos e métodos devem ser documentados no formato XML. A documentação dos atributos e classes do projeto `*.Classes` deve incluir o código e a descrição conforme especificado no Manual de Orientação do Contribuinte, seguindo o padrão adotado no projeto `NFe.Classes`. Exemplo: +```csharp +/// +/// PR06 - Versão do Aplicativo que processou a consulta. +/// +public string verAplic { get; set; } +``` +- Siga as convenções da Microsoft, conforme definido em: + - [Regras e Convenções de Nomenclatura do Identificador C#](https://learn.microsoft.com/pt-br/dotnet/csharp/fundamentals/coding-style/identifier-names) + - [Convenções Comuns de Código C#](https://learn.microsoft.com/pt-br/dotnet/csharp/fundamentals/coding-style/coding-conventions) +- Testes automatizados: + - Implemente testes automatizados para validar fluxos positivos e cenários de falha; + - Organize os testes de forma a refletir a estrutura do código, garantindo isolamento e reprodutibilidade; + - Utilize o padrão de nomenclatura [Given-When-Then](https://martinfowler.com/bliki/GivenWhenThen.html). +- Princípios [S.O.L.I.D.](https://medium.com/desenvolvendo-com-paixao/o-que-%C3%A9-solid-o-guia-completo-para-voc%C3%AA-entender-os-5-princ%C3%ADpios-da-poo-2b937b3fc530): + - Responsabilidade Única: cada classe ou método deve ter uma responsabilidade clara; + - Aberto/Fechado: projete o sistema para permitir novas funcionalidades sem alterar o comportamento existente; + - Substituição de Liskov: componentes derivados devem substituir os genéricos sem comprometer a integridade; + - Segregação de Interfaces: mantenha interfaces focadas e específicas; + - Inversão de Dependência: estruture dependências em abstrações, não em implementações concretas; +- [KISS](https://dev.to/suspir0n/kiss-mantenha-a-simplicidade-estupido-24lh) (Keep It Simple, Stupid): opte por soluções simples e diretas, evitando complexidade desnecessária; +- [DRY](https://medium.com/@rafaelsouzaim/n%C3%A3o-se-repita-dry-dont-repeat-yourself-40da33289bcf) (Don't Repeat Yourself): centralize a lógica repetitiva para um código mais sustentável e menos propenso a erros; +- Outras boas práticas: + - Use nomes autoexplicativos; + - Mantenha responsabilidades bem definidas em métodos e classes; + - Escreva código de fácil leitura e manutenção, minimizando a necessidade de comentários para esclarecer a intenção. + + +## Licença + +Ao contribuir para o projeto DFe.NET, você concorda que suas contribuições estarão sob a mesma [Licença do Projeto](LICENSE). diff --git a/CTe.AppTeste.NetCore/CTe.AppTeste.NetCore.csproj b/CTe.AppTeste.NetCore/CTe.AppTeste.NetCore.csproj index 5cfece41a..0a03cbdeb 100644 --- a/CTe.AppTeste.NetCore/CTe.AppTeste.NetCore.csproj +++ b/CTe.AppTeste.NetCore/CTe.AppTeste.NetCore.csproj @@ -2,31 +2,16 @@ Exe - netcoreapp2.1 - false + net6.0 + + false - - - - - - - - - - - - - - - - - - - - + + + + diff --git a/CTe.AppTeste.NetCore/schemas/evPrestDesacordo_v3.00.xsd b/CTe.AppTeste.NetCore/schemas/evPrestDesacordo_v3.00.xsd index a0a570875..22a2cf1e4 100644 --- a/CTe.AppTeste.NetCore/schemas/evPrestDesacordo_v3.00.xsd +++ b/CTe.AppTeste.NetCore/schemas/evPrestDesacordo_v3.00.xsd @@ -15,6 +15,7 @@ + diff --git a/CTe.AppTeste/App.config b/CTe.AppTeste/App.config index d1428ad71..4bfa00561 100644 --- a/CTe.AppTeste/App.config +++ b/CTe.AppTeste/App.config @@ -1,6 +1,6 @@ - + diff --git a/CTe.AppTeste/CTe.AppTeste.csproj b/CTe.AppTeste/CTe.AppTeste.csproj index 210acc612..a1c168627 100644 --- a/CTe.AppTeste/CTe.AppTeste.csproj +++ b/CTe.AppTeste/CTe.AppTeste.csproj @@ -9,7 +9,7 @@ Properties CTe.AppTeste CTe.AppTeste - v4.5 + v4.8 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 @@ -103,9 +103,6 @@ - - Code - True True @@ -137,6 +134,14 @@ Designer Always + + Designer + Always + + + Designer + Always + Designer Always @@ -161,6 +166,10 @@ Designer Always + + Designer + Always + Designer Always @@ -169,6 +178,10 @@ Designer Always + + Designer + Always + Designer Always @@ -177,6 +190,10 @@ Designer Always + + Designer + Always + Designer Always @@ -185,6 +202,18 @@ Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -193,6 +222,10 @@ Designer Always + + Designer + Always + Designer Always @@ -201,6 +234,10 @@ Designer Always + + Designer + Always + Designer Always @@ -209,6 +246,10 @@ Designer Always + + Designer + Always + Designer Always @@ -217,10 +258,18 @@ Designer Always + + Designer + Always + Designer Always + + Designer + Always + Designer Always @@ -229,6 +278,10 @@ Designer Always + + Designer + Always + Designer Always @@ -237,10 +290,21 @@ Designer Always + + Designer + Always + Designer Always + + Designer + Always + + + Designer + Designer Always @@ -249,6 +313,10 @@ Designer Always + + Designer + Always + Designer Always @@ -257,6 +325,25 @@ Designer Always + + Designer + Always + + + Designer + + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -269,6 +356,18 @@ Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -277,6 +376,21 @@ Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Designer Always @@ -285,6 +399,70 @@ Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -293,6 +471,10 @@ Designer Always + + Designer + Always + Designer Always @@ -301,6 +483,10 @@ Designer Always + + Designer + Always + Designer Always @@ -309,14 +495,30 @@ Designer Always + + Designer + Always + Designer Always + + Designer + Always + + + Designer + Always + Designer Always + + Designer + Always + Designer Always @@ -325,6 +527,18 @@ Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -333,6 +547,10 @@ Designer Always + + Designer + Always + Designer Always @@ -341,14 +559,49 @@ Designer Always + + Designer + Always + + + Designer + Always + Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always + + Designer + Always + + + Designer + Designer Always @@ -357,6 +610,10 @@ Designer Always + + Designer + Always + Designer Always @@ -365,6 +622,18 @@ Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -373,10 +642,22 @@ Designer Always + + Designer + Always + Designer Always + + Designer + Always + + + Designer + Always + Designer Always @@ -393,6 +674,10 @@ Designer Always + + Designer + Always + Designer Always @@ -401,10 +686,45 @@ Designer Always + + Designer + Always + + + Designer + Always + Designer Always + + Designer + Always + + + Designer + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -425,6 +745,18 @@ Designer Always + + Designer + Always + + + Designer + Always + + + Designer + Always + Designer Always @@ -433,6 +765,14 @@ Designer Always + + Designer + Always + + + Designer + Always + Designer Always @@ -457,6 +797,10 @@ Designer Always + + Designer + Always + Designer Always @@ -465,40 +809,40 @@ + + + False + Microsoft .NET Framework 4.5.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + - {c86e3921-f0b8-4bfe-9ef1-0e9084326b13} + {fc15197f-4f76-47d4-839e-0f442e1d47ce} CTe.Classes - {63227402-2B1E-4BC7-A6DF-362129923CF6} + {772ceb28-d73d-4d6f-9cb4-1fef4b96ff60} CTe.Servicos - {21a894ec-b79e-4936-bff3-abead2e5c44f} + {63c33fd7-81d5-4016-a8e9-656266e922b2} CTe.Utils - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} + {a08ce194-9780-493d-a758-d5b3f44bd208} DFe.Classes - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} + {97f3c222-fd10-488a-812b-e514c3a8863c} DFe.Utils - - - False - Microsoft .NET Framework 4.5.2 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - + + + + Tipo string genérico + + + + + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + + Código de Classificação Tributária do IBS e da CBS + + + + + + + + + Código de Classificação do Crédito Presumido do IBS e da CBS, conforme tabela cCredPres + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais) + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais + + + + + + + + + Tipo da Operação com Ente Governamental + + + + + + + + + + Tipo de Ente Governamental + + + + + + + + + + + + Tipo de classificação do Crédito Presumido IBS ZFM + + + + + + + + + + + + Tipo Indicador de Doação + + + + + + + + Grupo de informações da Tributação da NFCom + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação da NF3e + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação da NFAg + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação do CTe + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação do BPe + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação da NFCe + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + + + + + + Grupo de informações da Tributação da NFe + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + + Informar essa opção da Choice para Monofasia (CST 620) + + + + + Informar essa opção da Choice para o CST 800 + + + + + Informar essa opção da Choice para o CST 811 + + + + + + Informado conforme indicador no cClassTrib + + + + + + Crédito Presumido da Operação. Informado conforme indicador no cClassTrib. + + + + + Classificação de acordo com o art. 450, § 1º, da LC 214/25 para o cálculo do crédito presumido na ZFM. Informado conforme indicador no cClassTrib. + + + + + + + + Grupo de informações da Tributação da NFGas + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + + Informar essa opção da Choice para Monofasia + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações do Imposto Seletivo + + + + + Código Situação Tributária do Imposto Seletivo + + + + + + + Valor do BC + + + + + Alíquota do Imposto Seletivo (percentual) + + + + + Alíquota do Imposto Seletivo (por valor) + + + + + + Unidade de medida apropriada especificada em Lei Ordinaria para fins de apuração do Imposto Seletivo + + + + + + + + + + + Quantidade com abse no campo uTrib informado + + + + + + Valor do Imposto Seletivo calculado + + + + + + + + Grupo de informações de totais do Imposto Seletivo + + + + + Valor Total do Imposto Seletivo + + + + + + + Grupo de informações de totais da CBS/IBS + + + + + Total Base de Calculo + + + + + Totalização do IBS + + + + + + Totalização do IBS de competência da UF + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Estadual + + + + + + + + Totalização do IBS de competência Municipal + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Municipal + + + + + + + + Valor total do IBS + + + + + + + + Totalização da CBS + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total da CBS + + + + + + + + Totalização do estorno de crédito + + + + + + Valor total do IBS estornado + + + + + Valor total da CBS estornada + + + + + + + + + + Grupo de informações de totais da CBS/IBS com monofasia + + + + + Total Base de Calculo + + + + + Totalização do IBS + + + + + + Totalização do IBS de competência da UF + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Estadual + + + + + + + + Totalização do IBS de competência Municipal + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Municipal + + + + + + + + Valor total do IBS + + + + + Total do Crédito Presumido + + + + + Total do Crédito Presumido Condição Suspensiva + + + + + + + + Totalização da CBS + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total da CBS + + + + + Total do Crédito Presumido + + + + + Total do Crédito Presumido Condição Suspensiva + + + + + + + + Totais da Monofasia + Só deverá ser utilizado para DFe modelos 55 e 65 + + + + + + Valor total do IBS monofásico + + + + + Valor total da CBS monofásica + + + + + Valor total do IBS monofásico sujeito a retenção + + + + + Valor total da CBS monofásica sujeita a retenção + + + + + Valor do IBS monofásico retido anteriormente + + + + + Valor da CBS monofásica retida anteriormente + + + + + + + + Totalização do estorno de crédito + + + + + + Valor total do IBS estornado + + + + + Valor total da CBS estornada + + + + + + + + + + Tipo Monofasia + + + + Monofasia + + + + Grupo de informações da Tributação Monofásica padrão + + + + + + Quantidade tributada na monofasia + + + + + Alíquota ad rem do IBS + + + + + Alíquota ad rem da CBS + + + + + Valor do IBS monofásico + + + + + Valor da CBS monofásica + + + + + + + + Grupo de informações da Tributação Monofásica sujeita a retenção + + + + + + Quantidade tributada sujeita a retenção. + + + + + Alíquota ad rem do IBS sujeito a retenção + + + + + Valor do IBS monofásico sujeito a retenção + + + + + Alíquota ad rem da CBS sujeita a retenção + + + + + Valor da CBS monofásica sujeita a retenção + + + + + + + + Grupo de informações da Tributação Monofásica retida anteriormente + + + + + + Quantidade tributada retida anteriormente + + + + + Alíquota ad rem do IBS retido anteriormente + + + + + Valor do IBS retido anteriormente + + + + + Alíquota ad rem da CBS retida anteriormente + + + + + Valor da CBS retida anteriormente + + + + + + + + Grupo de informações do diferimento da Tributação Monofásica + + + + + + Percentual do diferimento do imposto monofásico + + + + + Valor do IBS monofásico diferido + + + + + Percentual do diferimento do imposto monofásico + + + + + Valor da CBS monofásica diferida + + + + + + + + Total de IBS monofásico do item + + + + + Total da CBS monofásica do item + + + + + + + Tipo CBS IBS Completo + + + + IBS / CBS + + + + Valor do BC + + + + + + Grupo de informações do IBS na UF + + + + + + Aliquota do IBS de competência das UF (em percentual) + + + + + Grupo de campos do Diferimento + + + + + Grupo de Informações da devolução de tributos + + + + + Grupo de campos da redução de aliquota + + + + + Valor do IBS de competência das UF + + + + + + + + Grupo de Informações do IBS no Município + + + + + + Aliquota do IBS Municipal (em percentual) + + + + + Grupo de campos do Diferimento + + + + + Grupo de Informações da devolução de tributos + + + + + Grupo de campos da redução de aliquota + + + + + Valor do IBS Municipal + + + + + + + + Valor do IBS + + + + + + Grupo de Tributação da CBS + + + + + + Aliquota da CBS (em percentual) + + + + + Grupo de campos do Diferimento + + + + + Grupo de Informações da devolução de tributos + + + + + Grupo de campos da redução de aliquota + + + + + Valor da CBS + + + + + + + + Grupo de informações da Tributação Regular. Informar como seria a tributação caso não cumprida a condição resolutória/suspensiva. Exemplo 1: Art. 442, §4. Operações com ZFM e ALC. Exemplo 2: Operações com suspensão do tributo. + + + + + Grupo de informações da composição do valor do IBS e da CBS em compras governamental + + + + + + + Tipo Redução Base de Cálculo + + + + + Percentual de redução de aliquota do cClassTrib + + + + + Aliquota Efetiva que será aplicada a Base de Calculo (em percentual) + + + + + + + Tipo Crédito Presumido + + + + + Percentual do Crédito Presumido + + + + + + Valor do Crédito Presumido + + + + + Valor do Crédito Presumido Condição Suspensiva, preencher apenas para cCredPres que possui indicação de Condição Suspensiva + + + + + + + + Tipo Diferimento + + + + + Percentual do diferimento + + + + + Valor do diferimento + + + + + + + Tipo Devolução Tributo + + + + + Valor do tributo devolvido. No fornecimento de energia elétrica, água, esgoto e +gás natural e em outras hipóteses definidas no regulamento + + + + + + + Tipo Tributação Regular + + + + + Código da Situação Tributária do IBS e CBS + Informar qual seria o CST caso não cumprida a condição resolutória/suspensiva + + + + + Informar qual seria o cClassTrib caso não cumprida a condição resolutória/suspensiva + + + + + Alíquota do IBS da UF + Informar como seria a Alíquota caso não cumprida a condição resolutória/suspensiva + + + + + Valor do IBS da UF + Informar como seria o valor do Tributo caso não cumprida a condição resolutória/suspensiva + + + + + Alíquota do IBS do Município + Informar como seria a Alíquota caso não cumprida a condição resolutória/suspensiva + + + + + Valor do IBS do Município + Informar como seria o valor do Tributo caso não cumprida a condição resolutória/suspensiva + + + + + Alíquota da CBS + Informar como seria a Alíquota caso não cumprida a condição resolutória/suspensiva + + + + + Valor da CBS + Informar como seria o valor do Tributo caso não cumprida a condição resolutória/suspensiva + + + + + + + Tipo Tributação Compra Governamental + + + + + + Valor que seria devido a UF, sem aplicação do Art. 473. da LC 214/2025 + + + + + + Valor que seria devido ao município, sem aplicação do Art. 473. da LC 214/2025 + + + + + + Valor que seria devido a CBS, sem aplicação do Art. 473. da LC 214/2025 + + + + + + + Tipo Compras Governamentais + Cada DFe que utilizar deverá utilizar esses tipo no grupo ide + + + + + Para administração pública direta e suas autarquias e fundações: +1=União +2=Estados +3=Distrito Federal +4=Municípios + + + + + Percentual de redução de aliquota em compra governamental + + + + + + + Tipo Compras Governamentais + Cada DFe que utilizar deverá utilizar esses tipo no grupo ide + + + + + Para administração pública direta e suas autarquias e fundações: +1=União +2=Estados +3=Distrito Federal +4=Municípios + + + + + Percentual de redução de aliquota em compra governamental + + + + + Tipo da operação com ente governamental: +1 - Fornecimento +2 - Recebimento do Pagamento + + + + + + + Tipo Transferência de Crédito + + + + + Valor do IBS a ser transferido + + + + + Valor da CBS a ser transferida + + + + + + + Tipo Estorno de Crédito + + + + + Valor do IBS a ser estornado + + + + + Valor da CBS a ser estornada + + + + + + + Ano e mês referência do período de apuração (AAAA-MM) + + + + + + + + Tipo Ajuste de Competência + + + + + Ano e mês referência do período de apuração (AAAA-MM) + + + + + Valor do IBS + + + + + Valor da CBS + + + + + + + Tipo Crédito Presumido da Operação + + + + + Valor da Base de Cálculo do Crédito Presumido da Operação + + + + + Código de Classificação do Crédito Presumido do IBS e da CBS + + + + + Grupo de Informações do Crédito Presumido referente ao IBS, quando aproveitado pelo emitente do documento. + + + + + Grupo de Informações do Crédito Presumido referente a CBS, quando aproveitado pelo emitente do documento. + + + + + + + Tipo Informações do crédito presumido de IBS para fornecimentos a partir da ZFM + + + + + Ano e mês referência do período de apuração (AAAA-MM) + + + + + Classificação de acordo com o art. 450, § 1º, da LC 214/25 para o cálculo do crédito presumido na ZFM + 0 - Sem crédito presumido; +1 - Bens de consumo final (55%); +2 - Bens de capital (75%); +3 - Bens intermediários (90,25%); +4 - Bens de informática e outros definidos em legislação (100%). +OBS: Percentuais definidos no art. 450, § 1º, da LC 214/25 para o cálculo do crédito presumido + + + + + + Valor do crédito presumido calculado sobre o saldo devedor apurado + + + + + \ No newline at end of file diff --git a/CTe.AppTeste/schemas/GTVe_v3.00.xsd b/CTe.AppTeste/schemas/GTVe_v3.00.xsd new file mode 100644 index 000000000..2ca3b86c6 --- /dev/null +++ b/CTe.AppTeste/schemas/GTVe_v3.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Guia de Trasnsporte Eletrônica + + + diff --git a/CTe.AppTeste/schemas/GTVe_v4.00.xsd b/CTe.AppTeste/schemas/GTVe_v4.00.xsd new file mode 100644 index 000000000..66cd2adb3 --- /dev/null +++ b/CTe.AppTeste/schemas/GTVe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Guia de Trasnsporte Eletrônica + + + diff --git a/CTe.AppTeste/schemas/consNSUFaltCTe_v3.00.xsd b/CTe.AppTeste/schemas/consNSUFaltCTe_v3.00.xsd new file mode 100644 index 000000000..f952c98c6 --- /dev/null +++ b/CTe.AppTeste/schemas/consNSUFaltCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação da área de dados da mensagem da consulta NSU Faltantes + + + diff --git a/CTe.AppTeste/schemas/consProtFaltCTe_v3.00.xsd b/CTe.AppTeste/schemas/consProtFaltCTe_v3.00.xsd new file mode 100644 index 000000000..cf77307e7 --- /dev/null +++ b/CTe.AppTeste/schemas/consProtFaltCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Pedido de consulta de Protocolos Faltantes de CT-e + + + diff --git a/CTe.AppTeste/schemas/consSitCTeTiposBasico_v3.00.xsd b/CTe.AppTeste/schemas/consSitCTeTiposBasico_v3.00.xsd index caac0a22a..1bbcc44e6 100644 --- a/CTe.AppTeste/schemas/consSitCTeTiposBasico_v3.00.xsd +++ b/CTe.AppTeste/schemas/consSitCTeTiposBasico_v3.00.xsd @@ -1,5 +1,5 @@ - + diff --git a/CTe.AppTeste/schemas/consSitCTeTiposBasico_v4.00.xsd b/CTe.AppTeste/schemas/consSitCTeTiposBasico_v4.00.xsd new file mode 100644 index 000000000..27525a233 --- /dev/null +++ b/CTe.AppTeste/schemas/consSitCTeTiposBasico_v4.00.xsd @@ -0,0 +1,123 @@ + + + + + + + + Tipo Pedido de Consulta da Situação Atual do Conhecimento de Transporte eletrônico + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + Chaves de acesso da CT-e + + + + + + + + + + + + Tipo Retorno de Pedido de Consulta da Situação Atual do Conhecimento de Transporte eletrônico + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou o CT-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + + + + Retornar protCTe da versão correspondente do CT-e autorizado + + + + + + + + + + + + + + + + + + + + + + + Retornar procEventoCTe da versão correspondente do evento CT-e autorizado + + + + + + + + + + + + + + + + + + + + + + Tipo Versão do Consulta situação de CT-e - 4.00 + + + + + + diff --git a/CTe.AppTeste/schemas/consSitCTe_v4.00.xsd b/CTe.AppTeste/schemas/consSitCTe_v4.00.xsd new file mode 100644 index 000000000..c9825f322 --- /dev/null +++ b/CTe.AppTeste/schemas/consSitCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema de validação XML dp Pedido de Consulta da Situação Atual do CT-e. + + + diff --git a/CTe.AppTeste/schemas/consStatServCTe_v4.00.xsd b/CTe.AppTeste/schemas/consStatServCTe_v4.00.xsd new file mode 100644 index 000000000..bc2ed3598 --- /dev/null +++ b/CTe.AppTeste/schemas/consStatServCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do Pedido de Consulta do Status do Serviço CT-e + + + diff --git a/CTe.AppTeste/schemas/consStatServTiposBasico_v4.00.xsd b/CTe.AppTeste/schemas/consStatServTiposBasico_v4.00.xsd new file mode 100644 index 000000000..a79fae2cc --- /dev/null +++ b/CTe.AppTeste/schemas/consStatServTiposBasico_v4.00.xsd @@ -0,0 +1,115 @@ + + + + + + + Tipo Pedido de Consulta do Status do Serviço CTe + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Código da UF a ser verificado o status + Utilizar a Tabela do IBGE. + + + + + Serviço Solicitado + + + + + + + + + + + + Tipo Resultado da Consulta do Status do Serviço CTe + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou o CT-e + + + + + + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + Código da UF responsável pelo serviço + + + + + AAAA-MM-DDTHH:MM:SS TZD + + + + + Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos + + + + + + + + + + AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados. + + + + + Campo observação utilizado para incluir informações ao contribuinte + + + + + + + + + + + + + + + Tipo Versão do Consulta do Status do Serviço CTe + + + + + + diff --git a/CTe.AppTeste/schemas/cteConsultaDFeTiposBasico_v1.00.xsd b/CTe.AppTeste/schemas/cteConsultaDFeTiposBasico_v1.00.xsd new file mode 100644 index 000000000..85935c021 --- /dev/null +++ b/CTe.AppTeste/schemas/cteConsultaDFeTiposBasico_v1.00.xsd @@ -0,0 +1,155 @@ + + + + + + + Tipo Pedido de Consulta do Conhecimento de Transporte eletrônico + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + Chaves de acesso da CT-e, compostas por: UF do emitente, AAMM da emissão da CT-e, CNPJ do emitente, modelo, série e número da CT-e e código numérico + DV. + + + + + + + + + + + + Tipo Retorno de Pedido de Consulta do Conhecimento de Transporte eletrônico + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a consulta do CT-e + + + + + Código do status da consulta do CT-e + + + + + Descrição literal do status da consulta do CT-e + + + + + + + + + Tipo Documento Fiscal Eletrônico CT-e + + + + + + + + Autorização de Uso do CT-e + + + + + + Versão do proc + + + + + + + + + + + + + + + + + + + + Solicitação de Cancelamento do CT-e + + + + + + Versão do procCancCTe + + + + + + + + + + + + + + + + + + Demais eventos vinculados ao CT-e + + + + + + Versão do procEventoCTe + + + + + + + + + + + + + + + + + + Tipo Versão do Consulta DFe de CT-e - 1.00 + + + + + + diff --git a/CTe.AppTeste/schemas/cteConsultaDFe_v1.00.xsd b/CTe.AppTeste/schemas/cteConsultaDFe_v1.00.xsd new file mode 100644 index 000000000..e859d3d3d --- /dev/null +++ b/CTe.AppTeste/schemas/cteConsultaDFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema de validação XML do Pedido de Consulta do CT-e. + + + diff --git a/CTe.AppTeste/schemas/cteModalAereo_v4.00.xsd b/CTe.AppTeste/schemas/cteModalAereo_v4.00.xsd new file mode 100644 index 000000000..fbb254601 --- /dev/null +++ b/CTe.AppTeste/schemas/cteModalAereo_v4.00.xsd @@ -0,0 +1,240 @@ + + + + + + + Informações do modal Aéreo + + + + + + Número da Minuta + Documento que precede o CT-e, assinado pelo expedidor, espécie de pedido de serviço + + + + + + + + + + + Número Operacional do Conhecimento Aéreo + Representa o número de controle comumente utilizado pelo conhecimento aéreo composto por uma sequência numérica de onze dígitos. Os três primeiros dígitos representam um código que os operadores de transporte aéreo associados à IATA possuem. Em seguida um número de série de sete dígitos determinados pelo operador de transporte aéreo. Para finalizar, um dígito verificador, que é um sistema de módulo sete imponderado o qual divide o número de série do conhecimento aéreo por sete e usa o resto como dígito de verificação. + + + + + + + + + + + Data prevista da entrega + Formato AAAA-MM-DD + + + + + Natureza da carga + + + + + + Dimensão + Formato:1234X1234X1234 (cm). Esse campo deve sempre que possível ser preenchido. Entretanto, quando for impossível o preenchimento das dimensões, fica obrigatório o preenchimento da cubagem em metro cúbico do leiaute do CT-e da estrutura genérica (infQ). + + + + + + + + + + + + Informações de manuseio + 01 - certificado do expedidor para embarque de animal vivo; + +02 - artigo perigoso conforme Declaração do Expedidor anexa; + +03 - somente em aeronave cargueira; + +04 - artigo perigoso - declaração do expedidor não requerida; + +05 - artigo perigoso em quantidade isenta; + +06 - gelo seco para refrigeração (especificar no campo observações a quantidade); + +07 - não restrito (especificar a Disposição Especial no campo observações); + +08 - artigo perigoso em carga consolidada (especificar a quantidade no campo observações) +; +09 - autorização da autoridade governamental anexa (especificar no campo observações); + +10 – baterias de íons de lítio em conformidade com a Seção II da PI965 – CAO +; +11 - baterias de íons de lítio em conformidade com a Seção II da PI966 +; +12 - baterias de íons de lítio em conformidade com a Seção II da PI967 +; +13 – baterias de metal lítio em conformidade com a Seção II da PI968 — CAO; + +14 - baterias de metal lítio em conformidade com a Seção II da PI969; + +15 - baterias de metal lítio em conformidade com a Seção II da PI970 +; +99 - outro (especificar no campo observações) +. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Informações de tarifa + + + + + + Classe + Preencher com: + M - Tarifa Mínima; + G - Tarifa Geral; + E - Tarifa Específica + + + + + + + + + + + + + + Código da Tarifa + Deverão ser incluídos os códigos de três dígitos, correspondentes à tarifa. + + + + + + + + + + + Valor da Tarifa + Valor da tarifa por kg quando for o caso. + + + + + + + + Preenchido quando for transporte de produtos classificados pela ONU como perigosos. + O preenchimento desses campos não desobriga a empresa aérea de emitir os demais documentos que constam na legislação vigente. + + + + + + Número ONU/UN + Ver a legislação de transporte de produtos perigosos aplicadas ao modal + + + + + + + + + + + Quantidade total de volumes contendo artigos perigosos + Preencher com o número de volumes (unidades) de artigos perigosos, ou seja, cada embalagem devidamente marcada e etiquetada (por ex.: número de caixas, de tambores, de bombonas, dentre outros). Não deve ser preenchido com o número de ULD, pallets ou containers. + + + + + + + + + + + Grupo de informações das quantidades totais de artigos perigosos + Preencher conforme a legislação de transporte de produtos perigosos aplicada ao modal + + + + + + Quantidade total de artigos perigosos + 15 posições, sendo 11 inteiras e 4 decimais. +Deve indicar a quantidade total do artigo perigoso, tendo como base a unidade referenciada na Tabela 3-1 do Doc 9284, por exemplo: litros; quilogramas; quilograma bruto etc. O preenchimento não deve, entretanto, incluir a unidade de medida. No caso de transporte de material radioativo, deve-se indicar o somatório dos Índices de Transporte (TI). Não indicar a quantidade do artigo perigoso por embalagem. + + + + + Unidade de medida + 1 – KG; +2 – KG G (quilograma bruto); +3 – LITROS; +4 – TI (índice de transporte para radioativos); 5- Unidades (apenas para artigos perigosos medidos em unidades que não se enquadram nos itens acima. Exemplo: baterias, celulares, equipamentos, veículos, dentre outros) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteModalAquaviario_v4.00.xsd b/CTe.AppTeste/schemas/cteModalAquaviario_v4.00.xsd new file mode 100644 index 000000000..a4fe08399 --- /dev/null +++ b/CTe.AppTeste/schemas/cteModalAquaviario_v4.00.xsd @@ -0,0 +1,207 @@ + + + + + + + Informações do modal Aquaviário + + + + + + Valor da Prestação Base de Cálculo do AFRMM + + + + + AFRMM (Adicional de Frete para Renovação da Marinha Mercante) + + + + + Identificação do Navio + + + + + + + + + + + Grupo de informações das balsas + + + + + + Identificador da Balsa + + + + + + + + + + + + + + Número da Viagem + + + + + + + + + + + Direção + Preencher com: N-Norte, L-Leste, S-Sul, O-Oeste + + + + + + + + + + + + + + Irin do navio sempre deverá ser informado + + + + + + + + + + + + Grupo de informações de detalhamento dos conteiners +(Somente para Redespacho Intermediário e Serviço Vinculado a Multimodal) + + + + + + Identificação do Container + + + + + Grupo de informações dos lacres dos cointainers da qtde da carga + + + + + + Lacre + + + + + + + + + + + + + + Informações dos documentos dos conteiners + + + + + + Informações das NF + + + + + + Série + + + + + + + + + + + Número + + + + + + + + + + + Unidade de medida rateada (Peso,Volume) + + + + + + + + Informações das NFe + + + + + + Chave de acesso da NF-e + + + + + Unidade de medida rateada (Peso,Volume) + + + + + + + + + + + + + + Tipo de Navegação + Preencher com: + 0 - Interior; + 1 - Cabotagem + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteModalDutoviario_v4.00.xsd b/CTe.AppTeste/schemas/cteModalDutoviario_v4.00.xsd new file mode 100644 index 000000000..bb75ffd76 --- /dev/null +++ b/CTe.AppTeste/schemas/cteModalDutoviario_v4.00.xsd @@ -0,0 +1,92 @@ + + + + + + + + Informações do modal Dutoviário + + + + + + Valor da tarifa + + + + + Data de Início da prestação do serviço + + + + + Data de Fim da prestação do serviço + + + + + Classificação do Dutoviário + Informar: 1 - Gasoduto 2 - Mineroduto 3 - Oleoduto + + + + + + + + + + + + Tipo de contratação do serviço de transporte (apenas para gasoduto) + Informar: +0 - Ponta a ponto +1 - Capacidade de Entrada +2 - Capacidade de Saida + + + + + + + + + + + + Código do Ponto de Entrada + + + + + + + + + + + Código do Ponto de Saída + + + + + + + + + + + Número do Contrato de Capacidade + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteModalFerroviario_v4.00.xsd b/CTe.AppTeste/schemas/cteModalFerroviario_v4.00.xsd new file mode 100644 index 000000000..2a789ac65 --- /dev/null +++ b/CTe.AppTeste/schemas/cteModalFerroviario_v4.00.xsd @@ -0,0 +1,231 @@ + + + + + + + + Tipo Dados do Endereço + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município + Utilizar a tabela do IBGE + Informar 9999999 para operações com o exterior. + + + + + Nome do município + Informar EXTERIOR para operações com o exterior. + + + + + + + + + + + CEP + + + + + + + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + + + Informações do modal Ferroviário + + + + + + Tipo de Tráfego + Preencher com: + 0-Próprio; + 1-Mútuo; + 2-Rodoferroviário; + 3-Rodoviário. + + + + + + + + + + + + + + Detalhamento de informações para o tráfego mútuo + + + + + + Responsável pelo Faturamento + Preencher com: + 1-Ferrovia de origem; + 2-Ferrovia de destino + + + + + + + + + + + + Ferrovia Emitente do CTe + Preencher com: + 1-Ferrovia de origem; + 2-Ferrovia de destino + + + + + + + + + + + + Valor do Frete do Tráfego Mútuo + + + + + Chave de acesso do CT-e emitido pelo ferrovia de origem + + + + + Informações das Ferrovias Envolvidas + + + + + + Número do CNPJ + Informar o CNPJ da Ferrovia Envolvida. Caso a Ferrovia envolvida não seja inscrita no CNPJ o campo deverá preenchido com zeros. +Informar os zeros não significativos. + + + + + Código interno da Ferrovia envolvida + Uso da transportadora + + + + + + + + + + + Inscrição Estadual + + + + + Razão Social ou Nome + + + + + + + + + + + Dados do endereço da ferrovia envolvida + + + + + + + + + + + Fluxo Ferroviário + Trata-se de um número identificador do contrato firmado com o cliente + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteModalRodoviarioOS_v3.00.xsd b/CTe.AppTeste/schemas/cteModalRodoviarioOS_v3.00.xsd index 4e40e9db5..bfbe38e51 100644 --- a/CTe.AppTeste/schemas/cteModalRodoviarioOS_v3.00.xsd +++ b/CTe.AppTeste/schemas/cteModalRodoviarioOS_v3.00.xsd @@ -1,5 +1,5 @@ - + @@ -70,7 +70,7 @@ - Proprietários do Veículo. + Proprietário ou possuidor do Veículo. Só preenchido quando o veículo não pertencer à empresa emitente do CT-e OS @@ -131,7 +131,7 @@ Só preenchido quando o veículo não pertencer à empresa emitente do CT-e OS - Tipo Proprietário + Tipo Proprietário ou possuidor Preencher com: 0-TAC – Agregado; 1-TAC Independente; ou @@ -149,7 +149,7 @@ Só preenchido quando o veículo não pertencer à empresa emitente do CT-e OS - + UF em que veículo está licenciado Sigla da UF de licenciamento do veículo. diff --git a/CTe.AppTeste/schemas/cteModalRodoviarioOS_v4.00.xsd b/CTe.AppTeste/schemas/cteModalRodoviarioOS_v4.00.xsd new file mode 100644 index 000000000..23bcb62a6 --- /dev/null +++ b/CTe.AppTeste/schemas/cteModalRodoviarioOS_v4.00.xsd @@ -0,0 +1,193 @@ + + + + + + + + Tipo Termo de Autorização de Fretamento – TAF + + + + + + + + + + Tipo Número de Registro Estadual + + + + + + + + + + Informações do modal Rodoviário + + + + + + + Termo de Autorização de Fretamento – TAF + Registro obrigatório do emitente do CT-e OS junto à ANTT, de acordo com a Resolução ANTT nº 4.777/2015 + + + + + Número do Registro Estadual + Registro obrigatório do emitente do CT-e OS junto à Agência Reguladora Estadual. + + + + + + Dados do Veículo + + + + + + Placa do veículo + + + + + + + + RENAVAM do veículo + + + + + + + + + + + Proprietário ou possuidor do Veículo. +Só preenchido quando o veículo não pertencer à empresa emitente do CT-e OS + + + + + + + Número do CPF + Informar os zeros não significativos. + + + + + Número do CNPJ + Informar os zeros não significativos. + + + + + + + Termo de Autorização de Fretamento – TAF + De acordo com a Resolução ANTT nº 4.777/2015 + + + + + Número do Registro Estadual + Registro obrigatório do emitente do CT-e OS junto à Agência Reguladora Estadual + + + + + + Razão Social ou Nome do proprietário + + + + + + + + + + + + Inscrição Estadual + + + + + + + + UF + + + + + + Tipo Proprietário ou possuidor + Preencher com: + 0-TAC – Agregado; + 1-TAC Independente; ou + 2 – Outros. + + + + + + + + + + + + + + + + UF em que veículo está licenciado + Sigla da UF de licenciamento do veículo. + + + + + + + + Dados do fretamento (apenas para Transporte de Pessoas) + + + + + + Tipo Fretamento + Preencher com: + 1 - Eventual 2 - Continuo + + + + + + + + + + + + Data e hora da viagem (Apenas para fretamento eventual) + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteModalRodoviario_v4.00.xsd b/CTe.AppTeste/schemas/cteModalRodoviario_v4.00.xsd new file mode 100644 index 000000000..210232290 --- /dev/null +++ b/CTe.AppTeste/schemas/cteModalRodoviario_v4.00.xsd @@ -0,0 +1,102 @@ + + + + + + + + Informações do modal Rodoviário + + + + + + Registro Nacional de Transportadores Rodoviários de Carga + Registro obrigatório do emitente do CT-e junto à ANTT para exercer a atividade de transportador rodoviário de cargas por conta de terceiros e mediante remuneração. + + + + + + + + + Ordens de Coleta associados + + + + + + Série da OCC + + + + + + + + + + + Número da Ordem de coleta + + + + + + + + + + + Data de emissão da ordem de coleta + Formato AAAA-MM-DD + + + + + + + + Número do CNPJ + Informar os zeros não significativos. + + + + + Código interno de uso da transportadora + Uso intermo das transportadoras. + + + + + + + + + + + Inscrição Estadual + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + Telefone + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteMultiModal_v4.00.xsd b/CTe.AppTeste/schemas/cteMultiModal_v4.00.xsd new file mode 100644 index 000000000..05dc7949f --- /dev/null +++ b/CTe.AppTeste/schemas/cteMultiModal_v4.00.xsd @@ -0,0 +1,100 @@ + + + + + + + + Informações do Multimodal + + + + + + Número do Certificado do Operador de Transporte Multimodal + + + + + + + + + + + + + Indicador Negociável +Preencher com: 0 - Não Negociável; 1 - Negociável + + + + + + + + + + + + Informações de Seguro do Multimodal + + + + + + Informações da seguradora + + + + + + Nome da Seguradora + + + + + + + + + + + Número do CNPJ da seguradora + Obrigatório apenas se responsável pelo seguro for (2) responsável pela contratação do transporte - pessoa jurídica + + + + + + + + Número da Apólice + Obrigatório pela lei 11.442/07 (RCTRC) + + + + + + + + + + + Número da Averbação + Não é obrigatório, pois muitas averbações ocorrem aapós a emissão do CT, mensalmente, por exemplo. + + + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteOS_v4.00.xsd b/CTe.AppTeste/schemas/cteOS_v4.00.xsd new file mode 100644 index 000000000..9ac66b268 --- /dev/null +++ b/CTe.AppTeste/schemas/cteOS_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Conhecimento de Transporte Eletrônico Outros Serviços + + + diff --git a/CTe.AppTeste/schemas/cteSimp_v4.00.xsd b/CTe.AppTeste/schemas/cteSimp_v4.00.xsd new file mode 100644 index 000000000..a6b23e03f --- /dev/null +++ b/CTe.AppTeste/schemas/cteSimp_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Conhecimento de Transporte Eletrônico Simplificado + + + diff --git a/CTe.AppTeste/schemas/cteTiposBasico_v3.00.xsd b/CTe.AppTeste/schemas/cteTiposBasico_v3.00.xsd index e9176804b..014573d76 100644 --- a/CTe.AppTeste/schemas/cteTiposBasico_v3.00.xsd +++ b/CTe.AppTeste/schemas/cteTiposBasico_v3.00.xsd @@ -3,9 +3,1017 @@ + + + Tipo Modal transporte GTVe + + + + + + + + + + Tipo Finalidade da GTV-e + + + + + + + + + Tipo Guia de Transporte de Valores Eletrônica (Modelo 64) + + + + + Informações do CT-e do tipo GTV-e + + + + + + Identificação da GTV-e + + + + + + Código da UF do emitente da GTV-e. + Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. + Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. + + + + + + + + + + + Código Fiscal de Operações e Prestações + + + + + Natureza da Operação + + + + + + + + + + + Modelo do documento fiscal + Utilizar o código 64 para identificação do CT-e Guia de Transporte de Valores + + + + + Série da GTV-e + Preencher com "0" no caso de série única + + + + + + + + Número da GTV-e + + + + + Data e hora de emissão da GTV-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Formato de impressão do DACTE + Preencher com: 1 - Retrato; 2 - Paisagem. + + + + + + + + + + + + Forma de emissão da GTV-e + Preencher com: +1 - Normal; + 2- Contingencia offline +7 - Autorização pela SVC-RS; + 8 - Autorização pela SVC-SP + + + + + + + + + + + + + + Digito Verificador da chave de acesso da GTV-e + Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. + + + + + + + + + + + Tipo do Ambiente + Preencher com:1 - Produção; 2 - Homologação + + + + + Tipo da GTV-e + Preencher com: + 4 - GTV-e + + + + + + + + Versão do processo de emissão + Iinformar a versão do aplicativo emissor de CT-e. + + + + + + + + + + + Código do Município de envio da GTV-e (de onde o documento foi transmitido) + Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. + + + + + Nome do Município de envio da GTV-e (de onde o documento foi transmitido) + Informar PAIS/Municipio para as operações com o exterior. + + + + + + + + + + + Sigla da UF de envio da GTV-e (de onde o documento foi transmitido) + Informar 'EX' para operações com o exterior. + + + + + Modal da GTV-e + Preencher com: +01-Rodoviário +06-Multimodal + + + + + + + + + + + Tipo do Serviço + Preencher com: + +9 - GTV + + + + + + + + + + + Indicador da IE do tomador: +1 – Contribuinte ICMS; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + Aplica-se ao tomador que for indicado no toma3 ou toma4 + + + + + + + + + + + + + Data e hora de saida da origem + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Data e hora de chegada no destino + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + + Indicador do "papel" do tomador do serviço no GT-e + + + + + + Tomador do Serviço + Preencher com: + 0-Remetente; + 1-Destinatário + + + + + + + + + + + + + + + + Indicador do "papel" do tomador do serviço no CTV-e + + + + + + Tomador do Serviço + Preencher com: + 4 - Outros + Obs: Informar os dados cadastrais do tomador do serviço + + + + + + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. +Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome + + + + + + + + + + + Nome Fantasia + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Data e Hora da entrada em contingência + Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS + + + + + Justificativa da entrada em contingência + + + + + + + + + + + + + + + Dados complementares da GTV-e para fins operacionais ou comerciais + + + + + + Característica adicional do transporte + Texto livre: +REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + + + + + + + + + Característica adicional do serviço + Texto livre: + ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc + + + + + + + + + + + Funcionário emissor da GTV-e + + + + + + + + + + + Observações Gerais + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + + + + Identificação do Emitente da GTV-e + + + + + + CNPJ do emitente + Informar zeros não significativos + + + + + Inscrição Estadual do Emitente + + + + + + + + Inscrição Estadual do Substituto Tributário + + + + + + + + Razão social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + + + + Informações do Remetente + Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar a tag. + + + + + + + + Razão social ou nome do remetente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + + + + Informações do Destinatário + Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do destinatário ou ISENTO se destinatário é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o destinatário não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome do destinatário + + + + + + + + + + + Telefone + + + + + Inscrição na SUFRAMA + (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) + + + + + + + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + Informações do endereço da origem do serviço + + + + + Informações do endereço do destino do serviço + + + + + Grupo de informações detalhadas da GTV-e + + + + + + Informações das Espécies transportadas + + + + + + Tipo da Espécie + 1 - Cédula +2 - Cheque +3 - Moeda +4 - Outros + + + + + + + + + + + + + + Valor Transportada em Espécie indicada + + + + + Nacionalidade do Numerário + 1 - Nacional +2 - Estrangeiro + + + + + + + + + + + + Nome da Moeda + Informar somente se tipo de numerário for 2 - Estrangeiro + + + + + + + + + + + + + + Quantidade de volumes/malotes + + + + + Grupo de informações dos veículos utilizados no transporte de valores + + + + + + Placa do veículo + + + + + UF em que veículo está licenciado + Sigla da UF de licenciamento do veículo. + + + + + RNTRC do transportador + + + + + + + + + + + + + + + + + Autorizados para download do XML do DF-e + Informar CNPJ ou CPF. Preencher os zeros não significativos. + + + + + + + CNPJ do autorizado + Informar zeros não significativos + + + + + CPF do autorizado + Informar zeros não significativos + + + + + + + + + Informações do Responsável Técnico pela emissão do DF-e + + + + + + Versão do leiaute + Ex: "3.00" + + + + + + + + Identificador da tag a ser assinada + Informar a chave de acesso do CT-e OS e precedida do literal "CTe" + + + + + + + + + + + + Informações suplementares da GTV-e + + + + + + Texto com o QR-Code impresso no DACTE + + + + + + + + + + + + + + + + + + Versão do leiaute + + + + + + - Tipo Protocolo de status resultado do processamento da CT-e + Tipo Protocolo de status resultado do processamento da CT-e + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou o CT-e + + + + + Chaves de acesso da CT-e, + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + Número do Protocolo de Status do CT-e. + + + + + Digest Value da CT-e processado. Utilizado para conferir a integridade do CT-e original. + + + + + Código do status do CT-e. + + + + + + + + Descrição literal do status do CT-e. + + + + + + + + + Mensagem do Fisco + + + + + + Código do status da mensagem do fisco + + + + + + + + Mensagem do Fisco + + + + + + + + + + + + + + + + Tipo Protocolo de status resultado do processamento do CT-e OS (Modelo 67) @@ -28,7 +1036,7 @@ - Chaves de acesso da CT-e, + Chaves de acesso da CT-e @@ -38,7 +1046,7 @@ - Número do Protocolo de Status do CT-e. + Número do Protocolo de Status do CT-e. @@ -93,9 +1101,9 @@ - + - Tipo Protocolo de status resultado do processamento do CT-e OS (Modelo 67) + Tipo Protocolo de status resultado do processamento da GTV-e (Modelo 64) @@ -113,7 +1121,7 @@ - Versão do Aplicativo que processou o CT-e + Versão do Aplicativo que processou a GTV-e @@ -128,17 +1136,17 @@ - Número do Protocolo de Status do CT-e. + Número do Protocolo de Status da GTV-e - Digest Value da CT-e processado. Utilizado para conferir a integridade do CT-e original. + Digest Value da GTV-e processado. Utilizado para conferir a integridade da GTV-e original. - Código do status do CT-e. + Código do status da GTV-e. @@ -146,7 +1154,7 @@ - Descrição literal do status do CT-e. + Descrição literal do status da GTV-e. @@ -223,6 +1231,46 @@ + + + Tipo Retorno do Pedido de Autorização de GTV-e (Modelo 64) + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação da UF + + + + + Versão do Aplicativo que processou a GTV-e + + + + + código do status do retorno da consulta. + + + + + Descrição literal do status do do retorno da consulta. + + + + + Reposta ao processamento do CT-e + + + + + Tipo Retorno do Pedido de Autorização de CT-e OS (Modelo 67) @@ -361,7 +1409,7 @@ Forma de emissão do CT-e Preencher com: 1 - Normal; - 4-EPEC pela SVC; 5 - Contingência FSDA; + 3-Regime Especial NFF; 4-EPEC pela SVC; 5 - Contingência FSDA; 7 - Autorização pela SVC-RS; 8 - Autorização pela SVC-SP @@ -369,6 +1417,7 @@ + @@ -1118,15 +2167,26 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - - - CNPJ do emitente - Informar zeros não significativos - - - + + + + CNPJ do emitente + Informar zeros não significativos + + + + + CPF do emitente + Informar zeros não significativos. + +Usar com série específica 920-969 para emitente pessoa física com inscrição estadual + + + + Inscrição Estadual do Emitente + A IE do emitente somente ficará sem informação para o caso do Regime Especial da NFF (tpEmis=3) @@ -1167,6 +2227,15 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc Endereço do emitente + + + Código do Regime Tributário + Informar: 1=Simples Nacional; +2=Simples Nacional, excesso sublimite de receita bruta; +3=Regime Normal. + + + @@ -1540,16 +2609,6 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - - - Percentual provisório de partilha entre os estados - Percentual de partilha para a UF do destinatário: -- 40% em 2016; -- 60% em 2017; -- 80% em 2018; -- 100% a partir de 2019. - - Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação @@ -2516,6 +3575,27 @@ Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, Informações do Responsável Técnico pela emissão do DF-e + + + Grupo de informações do pedido de emissão da Nota Fiscal Fácil + + + + + + Solicitação do pedido de emissão da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + @@ -3058,6 +4138,15 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc Endereço do emitente + + + Código do Regime Tributário + Informar: 1=Simples Nacional; +2=Simples Nacional, excesso sublimite de receita bruta; +3=Regime Normal. + + + @@ -3241,16 +4330,6 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - - - Percentual provisório de partilha entre os estados - Percentual de partilha para a UF do destinatário: -- 40% em 2016; -- 60% em 2017; -- 80% em 2018; -- 100% a partir de 2019. - - Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação @@ -3354,52 +4433,62 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc Informações dos documentos referenciados - - - - Número - - - - - - - - - - - Série - - - - - - - - - + + + + + Número + + + + + + + + + + + Série + + + + + + + + + + + Subsérie + + + + + + + + + + + Data de Emissão + Formato AAAA-MM-DD + + + + + Valor Transportado + + + + - Subsérie + Chave de acesso do BP-e que possui eventos excesso de bagagem - - - - + - - - Data de Emissão - Formato AAAA-MM-DD - - - - - Valor Transportado - - - + @@ -3676,6 +4765,73 @@ Somente para Transporte de Valores + + + Informações das GTV-e relacionadas ao CT-e OS + + + + + + Chave de acesso da GTV-e + + + + + + + + + + Componentes do Valor da GTVe + + + + + + Tipo do Componente + 1-Custodia +2-Embarque +3-Tempo de espera +4-Malote +5-Ad Valorem +6-Outros + + + + + + + + + + + + + + + + Valor do componente + + + + + Nome do componente (informar apenas para outros) + Exemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc + + + + + + + + + + + + + + @@ -5431,6 +6587,19 @@ Observação: 28 caracteres são representados no schema como 20 bytes do tipo b + + + Tipo Código Regime Tributário + + + + + + + + + + Tipo processo de emissão do CT-e diff --git a/CTe.AppTeste/schemas/cteTiposBasico_v4.00.xsd b/CTe.AppTeste/schemas/cteTiposBasico_v4.00.xsd new file mode 100644 index 000000000..389b6391d --- /dev/null +++ b/CTe.AppTeste/schemas/cteTiposBasico_v4.00.xsd @@ -0,0 +1,8038 @@ + + + + + + + + + Tipo Modal transporte GTVe + + + + + + + + + + Tipo Finalidade da GTV-e + + + + + + + + + Tipo Guia de Transporte de Valores Eletrônica (Modelo 64) + + + + + Informações do CT-e do tipo GTV-e + + + + + + Identificação da GTV-e + + + + + + Código da UF do emitente da GTV-e. + Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. + Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. + + + + + + + + + + + Código Fiscal de Operações e Prestações + + + + + Natureza da Operação + + + + + + + + + + + Modelo do documento fiscal + Utilizar o código 64 para identificação do CT-e Guia de Transporte de Valores + + + + + Série da GTV-e + Preencher com "0" no caso de série única + + + + + + + + Número da GTV-e + + + + + Data e hora de emissão da GTV-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Formato de impressão do DACTE + Preencher com: 1 - Retrato; 2 - Paisagem. + + + + + + + + + + + + Forma de emissão da GTV-e + Preencher com: +1 - Normal; +2- Contingencia offline + + + + + + + + + + + + Digito Verificador da chave de acesso da GTV-e + Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. + + + + + + + + + + + Tipo do Ambiente + Preencher com:1 - Produção; 2 - Homologação + + + + + Tipo da GTV-e + Preencher com: + 4 - GTV-e + + + + + + + + Versão do processo de emissão + Iinformar a versão do aplicativo emissor de CT-e. + + + + + + + + + + + Código do Município de envio da GTV-e (de onde o documento foi transmitido) + Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. + + + + + Nome do Município de envio da GTV-e (de onde o documento foi transmitido) + Informar PAIS/Municipio para as operações com o exterior. + + + + + + + + + + + Sigla da UF de envio da GTV-e (de onde o documento foi transmitido) + Informar 'EX' para operações com o exterior. + + + + + Modal da GTV-e + Preencher com: +01-Rodoviário +06-Multimodal + + + + + + + + + + + Tipo do Serviço + Preencher com: + +9 - GTV + + + + + + + + + + + Indicador da IE do tomador: +1 – Contribuinte ICMS; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + Aplica-se ao tomador que for indicado no toma3 ou toma4 + + + + + + + + + + + + + Data e hora de saida da origem + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Data e hora de chegada no destino + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + + Indicador do "papel" do tomador do serviço no GT-e + + + + + + Tomador do Serviço + Preencher com: + 0-Remetente; + 1-Destinatário + + + + + + + + + + + + + + + + Indicador do "papel" do tomador do serviço no CTV-e + + + + + + Tomador do Serviço + Preencher com: + 4 - Outros + Obs: Informar os dados cadastrais do tomador do serviço + + + + + + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. +Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome + + + + + + + + + + + Nome Fantasia + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Data e Hora da entrada em contingência + Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS + + + + + Justificativa da entrada em contingência + + + + + + + + + + + + + + + Dados complementares da GTV-e para fins operacionais ou comerciais + + + + + + Característica adicional do transporte + Texto livre: +REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + + + + + + + + + Característica adicional do serviço + Texto livre: + ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc + + + + + + + + + + + Funcionário emissor da GTV-e + + + + + + + + + + + Observações Gerais + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + + + + Identificação do Emitente da GTV-e + + + + + + CNPJ do emitente + Informar zeros não significativos + + + + + Inscrição Estadual do Emitente + + + + + + + + Inscrição Estadual do Substituto Tributário + + + + + + + + Razão social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + + + + Informações do Remetente + Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar a tag. + + + + + + + + Razão social ou nome do remetente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + + + + Informações do Destinatário + Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do destinatário ou ISENTO se destinatário é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o destinatário não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome do destinatário + + + + + + + + + + + Telefone + + + + + Inscrição na SUFRAMA + (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) + + + + + + + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + Informações do endereço da origem do serviço + + + + + Informações do endereço do destino do serviço + + + + + Grupo de informações detalhadas da GTV-e + + + + + + Informações das Espécies transportadas + + + + + + Tipo da Espécie + 1 - Cédula +2 - Cheque +3 - Moeda +4 - Outros + + + + + + + + + + + + + + Valor Transportada em Espécie indicada + + + + + Nacionalidade do Numerário + 1 - Nacional +2 - Estrangeiro + + + + + + + + + + + + Nome da Moeda + Informar somente se tipo de numerário for 2 - Estrangeiro + + + + + + + + + + + + + + Quantidade de volumes/malotes + + + + + Grupo de informações dos veículos utilizados no transporte de valores + + + + + + Placa do veículo + + + + + UF em que veículo está licenciado + Sigla da UF de licenciamento do veículo. + + + + + RNTRC do transportador + + + + + + + + + + + + + + + + + Autorizados para download do XML do DF-e + Informar CNPJ ou CPF. Preencher os zeros não significativos. + + + + + + + CNPJ do autorizado + Informar zeros não significativos + + + + + CPF do autorizado + Informar zeros não significativos + + + + + + + + + Informações do Responsável Técnico pela emissão do DF-e + + + + + + Versão do leiaute + Ex: "4.00" + + + + + + + + Identificador da tag a ser assinada + Informar a chave de acesso do CT-e OS e precedida do literal "CTe" + + + + + + + + + + + + Informações suplementares da GTV-e + + + + + + Texto com o QR-Code impresso no DACTE + + + + + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + Tipo Protocolo de status resultado do processamento da CT-e + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou o CT-e + + + + + Chaves de acesso da CT-e, + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + Número do Protocolo de Status do CT-e. + + + + + Digest Value da CT-e processado. Utilizado para conferir a integridade do CT-e original. + + + + + Código do status do CT-e. + + + + + + + + Descrição literal do status do CT-e. + + + + + + + + + Mensagem do Fisco + + + + + + Código do status da mensagem do fisco + + + + + + + + Mensagem do Fisco + + + + + + + + + + + + + + + + Tipo Protocolo de status resultado do processamento do CT-e OS (Modelo 67) + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou o CT-e + + + + + Chaves de acesso da CT-e + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + Número do Protocolo de Status do CT-e. + + + + + Digest Value da CT-e processado. Utilizado para conferir a integridade do CT-e original. + + + + + Código do status do CT-e. + + + + + + + + Descrição literal do status do CT-e. + + + + + + + + + Mensagem do Fisco + + + + + + Código do status da mensagem do fisco + + + + + + + + Mensagem do Fisco + + + + + + + + + + + + + + + + Tipo Protocolo de status resultado do processamento da GTV-e (Modelo 64) + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a GTV-e + + + + + Chaves de acesso da CT-e + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + Número do Protocolo de Status da GTV-e + + + + + Digest Value da GTV-e processado. Utilizado para conferir a integridade da GTV-e original. + + + + + Código do status da GTV-e. + + + + + + + + Descrição literal do status da GTV-e. + + + + + + + + + Mensagem do Fisco + + + + + + Código do status da mensagem do fisco + + + + + + + + Mensagem do Fisco + + + + + + + + + + + + + + + + Tipo Retorno do Pedido de Autorização de CT-e Simplificado (Modelo 57) + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação da UF + + + + + Versão do Aplicativo que processou a CT-e + + + + + código do status do retorno da consulta. + + + + + Descrição literal do status do do retorno da consulta. + + + + + Reposta ao processamento do CT-e + + + + + + + + Tipo Retorno do Pedido de Autorização de CT-e (Modelo 57) + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação da UF + + + + + Versão do Aplicativo que processou a CT-e + + + + + código do status do retorno da consulta. + + + + + + + + + + Descrição literal do status do do retorno da consulta. + + + + + Reposta ao processamento do CT-e + + + + + + + + Tipo Retorno do Pedido de Autorização de GTV-e (Modelo 64) + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação da UF + + + + + Versão do Aplicativo que processou a GTV-e + + + + + código do status do retorno da consulta. + + + + + Descrição literal do status do do retorno da consulta. + + + + + Reposta ao processamento do CT-e + + + + + + + + Tipo Retorno do Pedido de Autorização de CT-e OS (Modelo 67) + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação da UF + + + + + Versão do Aplicativo que processou a CT-e + + + + + código do status do retorno da consulta. + + + + + Descrição literal do status do do retorno da consulta. + + + + + Reposta ao processamento do CT-e + + + + + + + + Tipo Conhecimento de Transporte Eletrônico (Modelo 57) - Modelo Simplificado + + + + + Informações do CT-e + + + + + + Identificação do CT-e + + + + + + Código da UF do emitente do CT-e. + Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. + Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. + + + + + + + + + + + Código Fiscal de Operações e Prestações + + + + + Natureza da Operação + + + + + + + + + + + Modelo do documento fiscal + Utilizar o código 57 para identificação do CT-e, emitido em substituição aos modelos de conhecimentos em papel. + + + + + Série do CT-e + Preencher com "0" no caso de série única + + + + + + + + Número do CT-e + + + + + Data e hora de emissão do CT-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Formato de impressão do DACTE + Preencher com: 1 - Retrato; 2 - Paisagem. + + + + + + + + + + + + Forma de emissão do CT-e + Preencher com: +1 - Normal; +3 - Regime Especial NFF; +4 - EPEC pela SVC; +7 - Autorização pela SVC-RS; +8 - Autorização pela SVC-SP + + + + + + + + + + + + + + + Digito Verificador da chave de acesso do CT-e + Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. + + + + + + + + + + + Tipo do Ambiente + Preencher com:1 - Produção; 2 - Homologação. + + + + + Tipo do CT-e Simplificado + Preencher com: +5 - CTe Simplificado +6 - Substituição CTe Simplificado + + + + + Identificador do processo de emissão do CT-e + Preencher com: + 0 - emissão de CT-e com aplicativo do contribuinte; + 3- emissão CT-e pelo contribuinte com aplicativo fornecido pelo SEBRAE. + + + + + Versão do processo de emissão + Informar a versão do aplicativo emissor de CT-e. + + + + + + + + + + + Código do Município de envio do CT-e (de onde o documento foi transmitido) + Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. + + + + + Nome do Município de envio do CT-e (de onde o documento foi transmitido) + Informar PAIS/Municipio para as operações com o exterior. + + + + + + + + + + + Sigla da UF de envio do CT-e (de onde o documento foi transmitido) + Informar 'EX' para operações com o exterior. + + + + + Modal + Preencher com: +01-Rodoviário +02-Aéreo +03-Aquaviário + + + + + Tipo do Serviço + Preencher com: +0 - Normal; +1 - Subcontratação; +2 - Redespacho; + + + + + + + + + + + + + UF do início da prestação + Informar 'EX' para operações com o exterior. + + + + + UF do término da prestação + Informar 'EX' para operações com o exterior. + + + + + Indicador se o Recebedor retira no Aeroporto, Filial, Porto ou Estação de Destino? + Preencher com: 0 - sim; 1 - não + + + + + + + + + + + + Detalhes do retira + + + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Data e Hora da entrada em contingência + Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS + + + + + Justificativa da entrada em contingência + + + + + + + + + + + + Grupo de Compras Governamentais + + + + + + + + Dados complementares do CT-e para fins operacionais ou comerciais + + + + + + Característica adicional do transporte + Texto livre: +REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + + + + + + + + + Característica adicional do serviço + Texto livre: + ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc + + + + + + + + + + + Previsão do fluxo da carga + Preenchimento obrigatório para o modal aéreo. + + + + + + Sigla ou código interno da Filial/Porto/Estação/ Aeroporto de Origem + Observações para o modal aéreo: + - Preenchimento obrigatório para o modal aéreo. + - O código de três letras IATA do aeroporto de partida deverá ser incluído como primeira anotação. Quando não for possível, utilizar a sigla OACI. + + + + + + + + + + + + + + Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Passagem + Observação para o modal aéreo: + - O código de três letras IATA, referente ao aeroporto de transferência, deverá ser incluído, quando for o caso. Quando não for possível, utilizar a sigla OACI. Qualquer solicitação de itinerário deverá ser incluída. + + + + + + + + + + + + + + Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Destino + Observações para o modal aéreo: + - Preenchimento obrigatório para o modal aéreo. + - Deverá ser incluído o código de três letras IATA do aeroporto de destino. Quando não for possível, utilizar a sigla OACI. + + + + + + + + + + + Código da Rota de Entrega + + + + + + + + + + + + + + Observações Gerais + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + + + + Identificação do Emitente do CT-e + + + + + + + CNPJ do emitente + Informar zeros não significativos + + + + + CPF do emitente + Informar zeros não significativos. + +Usar com série específica 920-969 para emitente pessoa física com inscrição estadual + + + + + + Inscrição Estadual do Emitente + A IE do emitente somente ficará sem informação para o caso do Regime Especial da NFF (tpEmis=3) + + + + + + + + Inscrição Estadual do Substituto Tributário + + + + + + + + Razão social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + Código do Regime Tributário + Informar: 1=Simples Nacional; +2=Simples Nacional, excesso sublimite de receita bruta; +3=Regime Normal. +4=Simples Nacional - Microempreendedor Individual – MEI. + + + + + + + + + Identificação do tomador do serviço no CT-e + + + + + + Tomador do Serviço + Preencher com: + +0-Remetente; +1-Expedidor; +2-Recebedor; +3-Destinatário +4-Terceiro + + + + + + + + + + + + + + + Indicador do papel do tomador na prestação do serviço: +1 – Contribuinte ICMS; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + Aplica-se ao tomador que for indicado no toma + + + + + + + + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. +Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome + + + + + + + + + + + Inscrição na SUFRAMA + (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + Informações da Carga do CT-e + + + + + + Valor total da carga + + + + + Produto predominante + Informar a descrição do produto predominante + + + + + + + + + + + Outras características da carga + "FRIA", "GRANEL", "REFRIGERADA", "Medidas: 12X12X12" + + + + + + + + + + + Informações de quantidades da Carga do CT-e + Para o Aéreo é obrigatório o preenchimento desse campo da seguinte forma. +1 - Peso Bruto, sempre em quilogramas (obrigatório); +2 - Peso Cubado; sempre em quilogramas; +3 - Quantidade de volumes, sempre em unidades (obrigatório); +4 - Cubagem, sempre em metros cúbicos (obrigatório apenas quando for impossível preencher as dimensões da(s) embalagem(ens) na tag xDime do leiaute do Aéreo). + + + + + + Código da Unidade de Medida + Preencher com: +00-M3; +01-KG; +02-TON; +03-UNIDADE; +04-LITROS; +05-MMBTU + + + + + + + + + + + + + + + + Tipo da Medida + Informar com: +00-Cubagem da NF-e +01-Cubagem Aferida pelo Transportador +02-Peso Bruto da NF-e +03-Peso Bruto Aferido pelo Transportador +04-Peso Cubado +05-Peso Base do Cálculo do Frete +06-Peso para uso Operacional +07-Caixas +08-Paletes +09-Sacas +10-Containers +11-Rolos +12-Bombonas +13-Latas +14-Litragem +15-Milhão de BTU (British Thermal Units) +99-Outros + + + + + + + + + + + + + + + + + + + + + + + + + + + + Quantidade + + + + + + + + Valor da Carga para efeito de averbação + Normalmente igual ao valor declarado da mercadoria, diferente por exemplo, quando a mercadoria transportada é isenta de tributos nacionais para exportação, onde é preciso averbar um valor maior, pois no caso de indenização, o valor a ser pago será maior + + + + + + + + Detalhamento das entregas / prestações do CTe Simplificado + + + + + + + Código do Município de início da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do início da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + + + Código do Município de término da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do término da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + + Valorl da Prestação do Serviço + Pode conter zeros quando o CT-e for de complemento de ICMS + + + + + Valor a Receber + + + + + Componentes do Valor da Prestação + + + + + + Nome do componente + Exxemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc + + + + + + + + + + + Valor do componente + + + + + + + + + Informações das NF-e + + + + + + Chave de acesso da NF-e + + + + + + + + + + PIN SUFRAMA + PIN atribuído pela SUFRAMA para a operação. + + + + + + + + + + + + + Data prevista de entrega + Formato AAAA-MM-DD + + + + + + Informações das Unidades de Carga (Containeres/ULD/Outros) + Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. + + + + + Informações das Unidades de Transporte (Carreta/Reboque/Vagão) + Deve ser preenchido com as informações das unidades de transporte utilizadas. + + + + + + + + + Documentos anteriores + + + + + + Chave de acesso do CT-e + + + + + indica se a prestação é total ou parcial em relação as notas do documento anterior + Preencher com: + +1 - Total +2 - Parcial + + + + + + + + + + + + + + + Chave de acesso da NF-e + Informando o tpPrest com “2 – Parcial” deve-se informar as chaves de acesso das NF-e que acobertam a carga transportada. + + + + + + + + + + + + + Número identificador do item agrupador da prestação + + + + + + + + + + + + + Informações do modal + + + + + + XML do modal +Insira neste local o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). + O elemento do tipo -any- permite estender o documento XML com elementos não especificados pelo schema. + Insira neste local - any- o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). A especificação do schema XML para cada modal pode ser encontrada nos arquivos que acompanham este pacote de liberação: + Rodoviário - ver arquivo CTeModalRodoviario_v9.99 + Aéreo - ver arquivo CTeModalAereo_v9.99 + Aquaviário - arquivo CTeModalAquaviario_v9.99 + Ferroviário - arquivo CTeModalFerroviario_v9.99 + Dutoviário - arquivo CTeModalDutoviario_v9.99 + +Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.04 será denominado "CTeModalRodoviario_v1.04". + + + + + + Versão do leiaute específico para o Modal + + + + + + + + + + + + + Dados da cobrança do CT-e + + + + + + Dados da fatura + + + + + + Número da fatura + + + + + + + + + + + Valor original da fatura + + + + + Valor do desconto da fatura + + + + + Valor líquido da fatura + + + + + + + + Dados das duplicatas + + + + + + Número da duplicata + + + + + + + + + + + Data de vencimento da duplicata (AAAA-MM-DD) + + + + + Valor da duplicata + + + + + + + + + + + Informações do CT-e de substituição + + + + + + Chave de acesso do CT-e a ser substituído (original) + + + + + + + + + + Indicador de CT-e Alteração de Tomador + + + + + + + + + + + + + Informações relativas aos Impostos + + + + + + Informações relativas ao ICMS + + + + + + Valor Total dos Tributos + + + + + Informações adicionais de interesse do Fisco + Norma referenciada, informações complementares, etc + + + + + + + + + + + Informações do ICMS de partilha com a UF de término do serviço de transporte na operação interestadual + Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS + + + + + + Valor da BC do ICMS na UF de término da prestação do serviço de transporte + + + + + Percentual do ICMS relativo ao Fundo de Combate à pobreza (FCP) na UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interna da UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interestadual das UF envolvidas + Alíquota interestadual das UF envolvidas + + + + + + Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação + + + + + Valor do ICMS de partilha para a UF de término da prestação do serviço de transporte + + + + + Valor do ICMS de partilha para a UF de início da prestação do serviço de transporte + + + + + + + + Grupo de informações do IBS e CBS + + + + + + + + Valores Totais do CTe + + + + + + Valor Total da Prestação do Serviço + Pode conter zeros quando o CT-e for de complemento de ICMS + + + + + Valor total a Receber + + + + + Valor total do documento fiscal +(vTPrest + total do IBS + total da CBS) + + + + + + + + + Autorizados para download do XML do DF-e + Informar CNPJ ou CPF. Preencher os zeros não significativos. + + + + + + + CNPJ do autorizado + Informar zeros não significativos + + + + + CPF do autorizado + Informar zeros não significativos + + + + + + + + + Informações do Responsável Técnico pela emissão do DF-e + + + + + Grupo de informações do pedido de emissão da Nota Fiscal Fácil + + + + + + Solicitação do pedido de emissão da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + + + + Grupo de Informação do Provedor de Assinatura e Autorização + + + + + + CNPJ do Provedor de Assinatura e Autorização + + + + + Assinatura RSA do Emitente para DFe gerados por PAA + + + + + + Assinatura digital padrão RSA + Converter o atributo Id do DFe para array de bytes e assinar com a chave privada do RSA com algoritmo SHA1 gerando um valor no formato base64. + + + + + Chave Publica no padrão XML RSA Key + + + + + + + + + + + + Versão do leiaute + Ex: "4.00" + + + + + + + + Identificador da tag a ser assinada + Informar a chave de acesso do CT-e e precedida do literal "CTe" + + + + + + + + + + + + + + + + Informações suplementares do CT-e + + + + + + Texto com o QR-Code impresso no DACTE + + + + + + + + + + + + + + + + + + + Tipo Conhecimento de Transporte Eletrônico (Modelo 57) + + + + + Informações do CT-e + + + + + + Identificação do CT-e + + + + + + Código da UF do emitente do CT-e. + Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. + Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. + + + + + + + + + + + Código Fiscal de Operações e Prestações + + + + + Natureza da Operação + + + + + + + + + + + Modelo do documento fiscal + Utilizar o código 57 para identificação do CT-e, emitido em substituição aos modelos de conhecimentos em papel. + + + + + Série do CT-e + Preencher com "0" no caso de série única + + + + + + + + Número do CT-e + + + + + Data e hora de emissão do CT-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Formato de impressão do DACTE + Preencher com: 1 - Retrato; 2 - Paisagem. + + + + + + + + + + + + Forma de emissão do CT-e + Preencher com: +1 - Normal; + 3-Regime Especial NFF; 4-EPEC pela SVC; 5 - Contingência FSDA; + 7 - Autorização pela SVC-RS; + 8 - Autorização pela SVC-SP + + + + + + + + + + + + + + + + Digito Verificador da chave de acesso do CT-e + Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. + + + + + + + + + + + Tipo do Ambiente + Preencher com:1 - Produção; 2 - Homologação. + + + + + Tipo do CT-e + Preencher com: + 0 - CT-e Normal; + 1 - CT-e de Complemento de Valores; + 3 - CT-e de Substituição + + + + + Identificador do processo de emissão do CT-e + Preencher com: + 0 - emissão de CT-e com aplicativo do contribuinte; + 3- emissão CT-e pelo contribuinte com aplicativo fornecido pelo SEBRAE. + + + + + Versão do processo de emissão + Iinformar a versão do aplicativo emissor de CT-e. + + + + + + + + + + + Indicador de CT-e Globalizado + Informar valor 1 quando for Globalizado e não informar a tag quando não tratar de CT-e Globalizado + + + + + + + + + + Código do Município de envio do CT-e (de onde o documento foi transmitido) + Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. + + + + + Nome do Município de envio do CT-e (de onde o documento foi transmitido) + Informar PAIS/Municipio para as operações com o exterior. + + + + + + + + + + + Sigla da UF de envio do CT-e (de onde o documento foi transmitido) + Informar 'EX' para operações com o exterior. + + + + + Modal + Preencher com:01-Rodoviário; +02-Aéreo;03-Aquaviário;04-Ferroviário;05-Dutoviário;06-Multimodal; + + + + + Tipo do Serviço + Preencher com: +0 - Normal; +1 - Subcontratação; +2 - Redespacho; +3 - Redespacho Intermediário; +4 - Serviço Vinculado a Multimodal + + + + + + + + + + + + + + + Código do Município de início da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do início da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + UF do início da prestação + Informar 'EX' para operações com o exterior. + + + + + Código do Município de término da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do término da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + UF do término da prestação + Informar 'EX' para operações com o exterior. + + + + + Indicador se o Recebedor retira no Aeroporto, Filial, Porto ou Estação de Destino? + Preencher com: 0 - sim; 1 - não + + + + + + + + + + + + Detalhes do retira + + + + + + + + + + + Indicador do papel do tomador na prestação do serviço: +1 – Contribuinte ICMS; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + Aplica-se ao tomador que for indicado no toma3 ou toma4 + + + + + + + + + + + + + + Indicador do "papel" do tomador do serviço no CT-e + + + + + + Tomador do Serviço + Preencher com: + 0-Remetente; + 1-Expedidor; + 2-Recebedor; + 3-Destinatário + Serão utilizadas as informações contidas no respectivo grupo, conforme indicado pelo conteúdo deste campo + + + + + + + + + + + + + + + + + Indicador do "papel" do tomador do serviço no CT-e + + + + + + Tomador do Serviço + Preencher com: + 4 - Outros + Obs: Informar os dados cadastrais do tomador do serviço + + + + + + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. +Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + + Razão Social ou Nome + + + + + + + + + + + Nome Fantasia + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Data e Hora da entrada em contingência + Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS + + + + + Justificativa da entrada em contingência + + + + + + + + + + + + Grupo de Compras Governamentais + + + + + + + + Dados complementares do CT-e para fins operacionais ou comerciais + + + + + + Característica adicional do transporte + Texto livre: +REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + + + + + + + + + Característica adicional do serviço + Texto livre: + ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc + + + + + + + + + + + Funcionário emissor do CTe + + + + + + + + + + + Previsão do fluxo da carga + Preenchimento obrigatório para o modal aéreo. + + + + + + Sigla ou código interno da Filial/Porto/Estação/ Aeroporto de Origem + Observações para o modal aéreo: + - Preenchimento obrigatório para o modal aéreo. + - O código de três letras IATA do aeroporto de partida deverá ser incluído como primeira anotação. Quando não for possível, utilizar a sigla OACI. + + + + + + + + + + + + + + Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Passagem + Observação para o modal aéreo: + - O código de três letras IATA, referente ao aeroporto de transferência, deverá ser incluído, quando for o caso. Quando não for possível, utilizar a sigla OACI. Qualquer solicitação de itinerário deverá ser incluída. + + + + + + + + + + + + + + Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Destino + Observações para o modal aéreo: + - Preenchimento obrigatório para o modal aéreo. + - Deverá ser incluído o código de três letras IATA do aeroporto de destino. Quando não for possível, utilizar a sigla OACI. + + + + + + + + + + + Código da Rota de Entrega + + + + + + + + + + + + + + Informações ref. a previsão de entrega + + + + + + + Entrega sem data definida + Esta opção é proibida para o modal aéreo. + + + + + + Tipo de data/período programado para entrega + 0- Sem data definida + + + + + + + + + + + + + + Entrega com data definida + + + + + + Tipo de data/período programado para entrega + Preencher com: + 1-Na data; + 2-Até a data; + 3-A partir da data + + + + + + + + + + + + + Data programada + Formato AAAA-MM-DD + + + + + + + + Entrega no período definido + + + + + + Tipo período + 4-no período + + + + + + + + + + + Data inicial + Formato AAAA-MM-DD + + + + + Data final + Formato AAAA-MM-DD + + + + + + + + + + Entrega sem hora definida + + + + + + Tipo de hora + 0- Sem hora definida + + + + + + + + + + + + + + Entrega com hora definida + + + + + + Tipo de hora + Preencher com: + 1 - No horário; + 2 - Até o horário; + 3 - A partir do horário. + + + + + + + + + + + + + Hora programada + Formato HH:MM:SS + + + + + + + + Entrega no intervalo de horário definido + + + + + + Tipo de hora + 4 - No intervalo de tempo + + + + + + + + + + + Hora inicial + Formato HH:MM:SS + + + + + Hora final + Formato HH:MM:SS + + + + + + + + + + + + Município de origem para efeito de cálculo do frete + + + + + + + + + + + Município de destino para efeito de cálculo do frete + + + + + + + + + + + Observações Gerais + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + + + + Identificação do Emitente do CT-e + + + + + + + CNPJ do emitente + Informar zeros não significativos + + + + + CPF do emitente + Informar zeros não significativos. + +Usar com série específica 920-969 para emitente pessoa física com inscrição estadual + + + + + + Inscrição Estadual do Emitente + A IE do emitente somente ficará sem informação para o caso do Regime Especial da NFF (tpEmis=3) + + + + + + + + Inscrição Estadual do Substituto Tributário + + + + + + + + Razão social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + Código do Regime Tributário + Informar: 1=Simples Nacional; +2=Simples Nacional, excesso sublimite de receita bruta; +3=Regime Normal. +4=Simples Nacional - Microempreendedor Individual – MEI. + + + + + + + + + Informações do Remetente das mercadorias transportadas pelo CT-e + Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar a tag. + + + + + + + + Razão social ou nome do remetente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + + + + Informações do Expedidor da Carga + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do expedidor ou ISENTO se expedidor é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o expedidor não seja contribuinte do ICMS não informar a tag. + + + + + + + + Razão Social ou Nome + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + Informações do Recebedor da Carga + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do recebedor ou ISENTO se recebedor é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o recebedor não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + Informações do Destinatário do CT-e + Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do destinatário ou ISENTO se destinatário é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o destinatário não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome do destinatário + + + + + + + + + + + Telefone + + + + + Inscrição na SUFRAMA + (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) + + + + + + + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + Valores da Prestação de Serviço + + + + + + Valor Total da Prestação do Serviço + Pode conter zeros quando o CT-e for de complemento de ICMS + + + + + Valor a Receber + + + + + Componentes do Valor da Prestação + + + + + + Nome do componente + Exxemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc + + + + + + + + + + + Valor do componente + + + + + + + + + + + Informações relativas aos Impostos + + + + + + Informações relativas ao ICMS + + + + + + Valor Total dos Tributos + + + + + Informações adicionais de interesse do Fisco + Norma referenciada, informações complementares, etc + + + + + + + + + + + Informações do ICMS de partilha com a UF de término do serviço de transporte na operação interestadual + Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS + + + + + + Valor da BC do ICMS na UF de término da prestação do serviço de transporte + + + + + Percentual do ICMS relativo ao Fundo de Combate à pobreza (FCP) na UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interna da UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interestadual das UF envolvidas + Alíquota interestadual das UF envolvidas + + + + + + Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação + + + + + Valor do ICMS de partilha para a UF de término da prestação do serviço de transporte + + + + + Valor do ICMS de partilha para a UF de início da prestação do serviço de transporte + + + + + + + + Grupo de informações do IBS e CBS + + + + + Valor total do documento fiscal +(vTPrest + total do IBS + total da CBS) + + + + + + + + + + Grupo de informações do CT-e Normal e Substituto + + + + + + Informações da Carga do CT-e + + + + + + Valor total da carga + Dever ser informado para todos os modais, com exceção para o Dutoviário. + + + + + Produto predominante + Informar a descrição do produto predominante + + + + + + + + + + + Outras características da carga + "FRIA", "GRANEL", "REFRIGERADA", "Medidas: 12X12X12" + + + + + + + + + + + Informações de quantidades da Carga do CT-e + Para o Aéreo é obrigatório o preenchimento desse campo da seguinte forma. +1 - Peso Bruto, sempre em quilogramas (obrigatório); +2 - Peso Cubado; sempre em quilogramas; +3 - Quantidade de volumes, sempre em unidades (obrigatório); +4 - Cubagem, sempre em metros cúbicos (obrigatório apenas quando for impossível preencher as dimensões da(s) embalagem(ens) na tag xDime do leiaute do Aéreo). + + + + + + Código da Unidade de Medida + Preencher com: + 00-M3; + 01-KG; + 02-TON; + 03-UNIDADE; + 04-LITROS; + 05-MMBTU + + + + + + + + + + + + + + + + Tipo da Medida + Exemplos: +PESO BRUTO, PESO DECLARADO, PESO CUBADO, PESO AFORADO, PESO AFERIDO, PESO BASE DE CÁLCULO, LITRAGEM, CAIXAS e etc + + + + + + + + + + + Quantidade + + + + + + + + Valor da Carga para efeito de averbação + Normalmente igual ao valor declarado da mercadoria, diferente por exemplo, quando a mercadoria transportada é isenta de tributos nacionais para exportação, onde é preciso averbar um valor maior, pois no caso de indenização, o valor a ser pago será maior + + + + + + + + Informações dos documentos transportados pelo CT-e +Opcional para Redespacho Intermediario e Serviço vinculado a multimodal. + Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. + + + + + + + Informações das NF + Este grupo deve ser informado quando o documento originário for NF + + + + + + Número do Romaneio da NF + + + + + + + + + + + Número do Pedido da NF + + + + + + + + + + + Modelo da Nota Fiscal + Preencher com: +01 - NF Modelo 01/1A e Avulsa; +04 - NF de Produtor + + + + + Série + + + + + + + + + + + Número + + + + + + + + + + + Data de Emissão + Formato AAAA-MM-DD + + + + + Valor da Base de Cálculo do ICMS + + + + + Valor Total do ICMS + + + + + Valor da Base de Cálculo do ICMS ST + + + + + Valor Total do ICMS ST + + + + + Valor Total dos Produtos + + + + + Valor Total da NF + + + + + CFOP Predominante + CFOP da NF ou, na existência de mais de um, predominância pelo critério de valor econômico. + + + + + Peso total em Kg + + + + + PIN SUFRAMA + PIN atribuído pela SUFRAMA para a operação. + + + + + + + + + + + + + Data prevista de entrega + Formato AAAA-MM-DD + + + + + + Informações das Unidades de Carga (Containeres/ULD/Outros) + Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. + + + + + Informações das Unidades de Transporte (Carreta/Reboque/Vagão) + Deve ser preenchido com as informações das unidades de transporte utilizadas. + + + + + + + + + Informações das NF-e + + + + + + Chave de acesso da NF-e + + + + + PIN SUFRAMA + PIN atribuído pela SUFRAMA para a operação. + + + + + + + + + + + + + Data prevista de entrega + Formato AAAA-MM-DD + + + + + + Informações das Unidades de Carga (Containeres/ULD/Outros) + Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. + + + + + Informações das Unidades de Transporte (Carreta/Reboque/Vagão) + Deve ser preenchido com as informações das unidades de transporte utilizadas. + + + + + + + + + Informações dos demais documentos + + + + + + Tipo de documento originário + Preencher com: + 00 - Declaração; + 10 - Dutoviário; + + +59 - CF-e SAT; + +65 - NFC-e; + 99 - Outros + + + + + + + + + + + + + + + Descrição do documento + + + + + + + + + + + Número + + + + + + + + + + + Data de Emissão + Formato AAAA-MM-DD + + + + + Valor do documento + + + + + Data prevista de entrega + Formato AAAA-MM-DD + + + + + + Informações das Unidades de Carga (Containeres/ULD/Outros) + Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. + + + + + Informações das Unidades de Transporte (Carreta/Reboque/Vagão) + Deve ser preenchido com as informações das unidades de transporte utilizadas. + + + + + + + + + Informações das DCe + + + + + + Chave de acesso da DCe + + + + + + + + + + + + Documentos de Transporte Anterior + + + + + + Emissor do documento anterior + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + + Inscrição Estadual + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + + Razão Social ou Nome do expedidor + + + + + + + + + + + Informações de identificação dos documentos de Transporte Anterior + + + + + + Documentos de transporte anterior em papel + + + + + + Tipo do Documento de Transporte Anterior + Preencher com: +07-ATRE; +08-DTA (Despacho de Transito Aduaneiro); +09-Conhecimento Aéreo Internacional; +10 – Conhecimento - Carta de Porte Internacional; +11 – Conhecimento Avulso; +12-TIF (Transporte Internacional Ferroviário); 13-BL (Bill of Lading) + + + + + + + + Série do Documento Fiscal + + + + + + + + + + + Série do Documento Fiscal + + + + + + + + + + + Número do Documento Fiscal + + + + + + + + + + + Data de emissão (AAAA-MM-DD) + + + + + + + + Documentos de transporte anterior eletrônicos + + + + + + Chave de acesso do CT-e + + + + + + + + + + + + + + + + + Informações do modal + + + + + + XML do modal +Insira neste local o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). + O elemento do tipo -any- permite estender o documento XML com elementos não especificados pelo schema. + Insira neste local - any- o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). A especificação do schema XML para cada modal pode ser encontrada nos arquivos que acompanham este pacote de liberação: + Rodoviário - ver arquivo CTeModalRodoviario_v9.99 + Aéreo - ver arquivo CTeModalAereo_v9.99 + Aquaviário - arquivo CTeModalAquaviario_v9.99 + Ferroviário - arquivo CTeModalFerroviario_v9.99 + Dutoviário - arquivo CTeModalDutoviario_v9.99 + +Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.04 será denominado "CTeModalRodoviario_v1.04". + + + + + + Versão do leiaute específico para o Modal + + + + + + + + + + + + + informações dos veículos transportados + + + + + + Chassi do veículo + + + + + + + + + + + + Cor do veículo + Código de cada montadora + + + + + + + + + + + Descrição da cor + + + + + + + + + + + Código Marca Modelo + Utilizar tabela RENAVAM + + + + + + + + + + + Valor Unitário do Veículo + + + + + Frete Unitário + + + + + + + + Dados da cobrança do CT-e + + + + + + Dados da fatura + + + + + + Número da fatura + + + + + + + + + + + Valor original da fatura + + + + + Valor do desconto da fatura + + + + + Valor líquido da fatura + + + + + + + + Dados das duplicatas + + + + + + Número da duplicata + + + + + + + + + + + Data de vencimento da duplicata (AAAA-MM-DD) + + + + + Valor da duplicata + + + + + + + + + + + Informações do CT-e de substituição + + + + + + Chave de acesso do CT-e a ser substituído (original) + + + + + + + + + + Indicador de CT-e Alteração de Tomador + + + + + + + + + + + + + Informações do CT-e Globalizado + + + + + + Preencher com informações adicionais, legislação do regime especial, etc + + + + + + + + + + + + + + Informações do Serviço Vinculado a Multimodal + + + + + + informações do CT-e multimodal vinculado + + + + + + Chave de acesso do CT-e Multimodal + + + + + + + + + + + + + + Detalhamento do CT-e complementado + + + + + + Chave do CT-e complementado + + + + + + + + + Autorizados para download do XML do DF-e + Informar CNPJ ou CPF. Preencher os zeros não significativos. + + + + + + + CNPJ do autorizado + Informar zeros não significativos + + + + + CPF do autorizado + Informar zeros não significativos + + + + + + + + + Informações do Responsável Técnico pela emissão do DF-e + + + + + Grupo de informações do pedido de emissão da Nota Fiscal Fácil + + + + + + Solicitação do pedido de emissão da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + + + + Grupo de Informação do Provedor de Assinatura e Autorização + + + + + + CNPJ do Provedor de Assinatura e Autorização + + + + + Assinatura RSA do Emitente para DFe gerados por PAA + + + + + + Assinatura digital padrão RSA + Converter o atributo Id do DFe para array de bytes e assinar com a chave privada do RSA com algoritmo SHA1 gerando um valor no formato base64. + + + + + Chave Publica no padrão XML RSA Key + + + + + + + + + + + + Versão do leiaute + Ex: "4.00" + + + + + + + + Identificador da tag a ser assinada + Informar a chave de acesso do CT-e e precedida do literal "CTe" + + + + + + + + + + + + Informações suplementares do CT-e + + + + + + Texto com o QR-Code impresso no DACTE + + + + + + + + + + + + + + + + + + + Tipo Conhecimento de Transporte Eletrônico Outros Serviços (Modelo 67) + + + + + Informações do CT-e Outros Serviços + + + + + + Identificação do CT-e Outros Serviços + + + + + + Código da UF do emitente do CT-e. + Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. + Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. + + + + + + + + + + + Código Fiscal de Operações e Prestações + + + + + Natureza da Operação + + + + + + + + + + + Modelo do documento fiscal + Utilizar o código 67 para identificação do CT-e Outros Serviços, emitido em substituição a Nota Fiscal Modelo 7 para transporte de pessoas, valores e excesso de bagagem. + + + + + Série do CT-e OS + Preencher com "0" no caso de série única + + + + + + + + Número do CT-e OS + + + + + Data e hora de emissão do CT-e OS + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Formato de impressão do DACTE OS + Preencher com: 1 - Retrato; 2 - Paisagem. + + + + + + + + + + + + Forma de emissão do CT-e + Preencher com: +1 - Normal; + 5 - Contingência FSDA; +7 - Autorização pela SVC-RS; + 8 - Autorização pela SVC-SP + + + + + + + + + + + + + + Digito Verificador da chave de acesso do CT-e + Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. + + + + + + + + + + + Tipo do Ambiente + Preencher com:1 - Produção; 2 - Homologação + + + + + Tipo do CT-e OS + Preencher com: +0 - CT-e Normal; +1 - CT-e Complementar; +3 - CT-e de Substituição. + + + + + Identificador do processo de emissão do CT-e OS + Preencher com: + 0 - emissão de CT-e com aplicativo do contribuinte; + 3- emissão CT-e pelo contribuinte com aplicativo fornecido pelo Fisco. + + + + + Versão do processo de emissão + Iinformar a versão do aplicativo emissor de CT-e. + + + + + + + + + + + Código do Município de envio do CT-e (de onde o documento foi transmitido) + Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. + + + + + Nome do Município de envio do CT-e (de onde o documento foi transmitido) + Informar PAIS/Municipio para as operações com o exterior. + + + + + + + + + + + Sigla da UF de envio do CT-e (de onde o documento foi transmitido) + Informar 'EX' para operações com o exterior. + + + + + Modal do CT-e OS + Preencher com: +01-Rodoviário; +02- Aéreo; +03 - Aquaviário; +04 - Ferroviário. + + + + + Tipo do Serviço + Preencher com: + +6 - Transporte de Pessoas; +7 - Transporte de Valores; +8 - Excesso de Bagagem. + + + + + + + + + + + + + Indicador da IE do tomador: +1 – Contribuinte ICMS; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + Aplica-se ao tomador que for indicado no toma3 ou toma4 + + + + + + + + + + + + + Código do Município de início da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do início da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + UF do início da prestação + Informar 'EX' para operações com o exterior. + + + + + Código do Município de término da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do término da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + UF do término da prestação + Informar 'EX' para operações com o exterior. + + + + + Informações do Percurso do CT-e Outros Serviços + + + + + + Sigla das Unidades da Federação do percurso do veículo. + Não é necessário repetir as UF de Início e Fim + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Data e Hora da entrada em contingência + Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS + + + + + Justificativa da entrada em contingência + + + + + + + + + + + + Grupo de Compras Governamentais + + + + + + + + Dados complementares do CT-e para fins operacionais ou comerciais + + + + + + Característica adicional do transporte + Texto livre: +REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + + + + + + + + + Característica adicional do serviço + Texto livre: + ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc + + + + + + + + + + + Funcionário emissor do CTe + + + + + + + + + + + Observações Gerais + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + + + + Identificação do Emitente do CT-e OS + + + + + + CNPJ do emitente + Informar zeros não significativos + + + + + Inscrição Estadual do Emitente + + + + + + + + Inscrição Estadual do Substituto Tributário + + + + + + + + Razão social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + Código do Regime Tributário + Informar: 1=Simples Nacional; +2=Simples Nacional, excesso sublimite de receita bruta; +3=Regime Normal; +4=Simples Nacional - Microempreendedor Individual – MEI. + + + + + + + + + Informações do Tomador/Usuário do Serviço + Opcional para Excesso de Bagagem + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão social ou nome do tomador + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + + + + Valores da Prestação de Serviço + + + + + + Valor Total da Prestação do Serviço + Pode conter zeros quando o CT-e for de complemento de ICMS + + + + + Valor a Receber + + + + + Componentes do Valor da Prestação + + + + + + Nome do componente + Exxemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc + + + + + + + + + + + Valor do componente + + + + + + + + + + + Informações relativas aos Impostos + + + + + + Informações relativas ao ICMS + + + + + + Valor Total dos Tributos + + + + + Informações adicionais de interesse do Fisco + Norma referenciada, informações complementares, etc + + + + + + + + + + + Informações do ICMS de partilha com a UF de término do serviço de transporte na operação interestadual + Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS + + + + + + Valor da BC do ICMS na UF de término da prestação do serviço de transporte + + + + + Percentual do ICMS relativo ao Fundo de Combate à pobreza (FCP) na UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interna da UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interestadual das UF envolvidas + Alíquota interestadual das UF envolvidas + + + + + + Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação + + + + + Valor do ICMS de partilha para a UF de término da prestação do serviço de transporte + + + + + Valor do ICMS de partilha para a UF de início da prestação do serviço de transporte + + + + + + + + Informações dos tributos federais + Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS + + + + + + Valor do PIS + + + + + Valor COFINS + + + + + Valor de Imposto de Renda + + + + + Valor do INSS + + + + + Valor do CSLL + + + + + + + + Grupo de informações do IBS e CBS + + + + + Valor total do documento fiscal +(vTPrest + total do IBS + total da CBS) + + + + + + + + + + Grupo de informações do CT-e OS Normal + + + + + + Informações da Prestação do Serviço + + + + + + Descrição do Serviço prestado + + + + + + + + + + + Informações de quantidades da Carga do CT-e + Para Transporte de Pessoas indicar número de passageiros, para excesso de bagagem e transporte de valores indicar número de Volumes/Malotes + + + + + + Quantidade + + + + + + + + + + + Informações dos documentos referenciados + + + + + + + Número + + + + + + + + + + + Série + + + + + + + + + + + Subsérie + + + + + + + + + + + Data de Emissão + Formato AAAA-MM-DD + + + + + Valor Transportado + + + + + + Chave de acesso do BP-e que possui eventos excesso de bagagem + + + + + + + + + + + Informações de Seguro da Carga + + + + + + Responsável pelo seguro + Preencher com: + +4 - Emitente do CT-e; + +5 - Tomador de Serviço. + + + + + + + + + + + + + + + Nome da Seguradora + + + + + + + + + + + Número da Apólice + Obrigatório pela lei 11.442/07 (RCTRC) + + + + + + + + + + + + + + Informações do modal +Obrigatório para Pessoas e Bagagem + + + + + + XML do modal +Insira neste local o XML específico do modal + O elemento do tipo -any- permite estender o documento XML com elementos não especificados pelo schema. + Insira neste local - any- o XML específico do modal (rodoviário). A especificação do schema XML para cada modal pode ser encontrada nos arquivos que acompanham este pacote de liberação: + Rodoviário - ver arquivo CTeModalRodoviarioOS_v9.99 + +Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, o arquivo para o schema do modal Rodoviário na versão 4.00 será denominado "CTeModalRodoviarioOS_v4.00". + + + + + + Versão do leiaute específico para o Modal + + + + + + + + + + + + + Informações do CT-e de substituição + + + + + + Chave de acesso do CT-e a ser substituído (original) + + + + + + + + + + + + + Chave de acesso do CT-e Cancelado +Somente para Transporte de Valores + + + + + + + + Dados da cobrança do CT-e + + + + + + Dados da fatura + + + + + + Número da fatura + + + + + + + + + + + Valor original da fatura + + + + + Valor do desconto da fatura + + + + + Valor líquido da fatura + + + + + + + + Dados das duplicatas + + + + + + Número da duplicata + + + + + + + + + + + Data de vencimento da duplicata (AAAA-MM-DD) + + + + + Valor da duplicata + + + + + + + + + + + Informações das GTV-e relacionadas ao CT-e OS + + + + + + Chave de acesso da GTV-e + + + + + + + + + + Componentes do Valor da GTVe + + + + + + Tipo do Componente + 1-Custodia +2-Embarque +3-Tempo de espera +4-Malote +5-Ad Valorem +6-Outros + + + + + + + + + + + + + + + + Valor do componente + + + + + Nome do componente (informar apenas para outros) + Exemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc + + + + + + + + + + + + + + + + + + + + Detalhamento do CT-e complementado + + + + + + Chave do CT-e complementado + + + + + + + + + Autorizados para download do XML do DF-e + Informar CNPJ ou CPF. Preencher os zeros não significativos. + + + + + + + CNPJ do autorizado + Informar zeros não significativos + + + + + CPF do autorizado + Informar zeros não significativos + + + + + + + + + Informações do Responsável Técnico pela emissão do DF-e + + + + + + Versão do leiaute + Ex: "4.00" + + + + + + + + Identificador da tag a ser assinada + Informar a chave de acesso do CT-e OS e precedida do literal "CTe" + + + + + + + + + + + + Informações suplementares do CT-e + + + + + + Texto com o QR-Code impresso no DACTE + + + + + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + Tipo Dados do Endereço + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE) + + + + + Nome do município + + + + + + + + + + + CEP + Informar zeros não significativos + + + + + + + + + + + Sigla da UF + + + + + Telefone + + + + + + + Tipo Dados do Endereço + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE) + Informar 9999999 para operações com o exterior. + + + + + Nome do município + Informar EXTERIOR para operações com o exterior. + + + + + + + + + + + CEP + Informar os zeros não significativos + + + + + + + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + Código do país + Utilizar a tabela do BACEN + + + + + + + + + + + Nome do país + + + + + + + + + + + + + Tipo Dados do Endereço + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. + + + + + Nome do município, , informar EXTERIOR para operações com o exterior. + + + + + + + + + + + CEP + + + + + + + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + + + Tipo Dados do Endereço + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. + + + + + Nome do município + Informar EXTERIOR para operações com o exterior. + + + + + + + + + + + CEP + + + + + + + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + Código do país + + + + + + + + + + + Nome do país + + + + + + + + + + + Telefone + + + + + + + Tipo Dados do Local de Origem ou Destino + + + + + Código do município (utilizar a tabela do IBGE) + + + + + Nome do município + + + + + + + + + + + Sigla da UF + + + + + + + Tipo Dados do Local de Retirada ou Entrega + + + + + + Número do CNPJ + + + + + Número do CPF + + + + + + Razão Social ou Nome + + + + + + + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE) + Informar 9999999 para operações com o exterior. + + + + + Nome do município + Informar EXTERIOR para operações com o exterior. + + + + + + + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + + + Tipo Dados do Imposto CT-e + + + + + Prestação sujeito à tributação normal do ICMS + + + + + + classificação Tributária do Serviço + 00 - tributação normal ICMS + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + + + Prestação sujeito à tributação com redução de BC do ICMS + + + + + + Classificação Tributária do serviço + 20 - tributação com BC reduzida do ICMS + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + ICMS Isento, não Tributado ou diferido + + + + + + Classificação Tributária do Serviço + Preencher com: + 40 - ICMS isenção; + 41 - ICMS não tributada; + 51 - ICMS diferido + + + + + + + + + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + Tributação pelo ICMS60 - ICMS cobrado por substituição tributária.Responsabilidade do recolhimento do ICMS atribuído ao tomador ou 3º por ST + + + + + + Classificação Tributária do Serviço + 60 - ICMS cobrado por substituição tributária + + + + + + + + + + + Valor da BC do ICMS ST retido + Valor do frete sobre o qual será calculado o ICMS a ser substituído na Prestação. + + + + + Valor do ICMS ST retido + Resultado da multiplicação do “vBCSTRet” x “pICMSSTRet” – que será valor do ICMS a ser retido pelo Substituto. Podendo o valor do ICMS a ser retido efetivamente, sofrer ajustes conforme a opção tributaria do transportador substituído. + + + + + Alíquota do ICMS + Percentual de Alíquota incidente na prestação de serviço de transporte. + + + + + Valor do Crédito outorgado/Presumido + Preencher somente quando o transportador substituído, for optante pelo crédito outorgado previsto no Convênio 106/96 e corresponde ao percentual de 20% do valor do ICMS ST retido. + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + ICMS Outros + + + + + + Classificação Tributária do Serviço + 90 - ICMS outros + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Valor do Crédito Outorgado/Presumido + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + ICMS devido à UF de origem da prestação, quando diferente da UF do emitente + + + + + + Classificação Tributária do Serviço + 90 - ICMS Outra UF + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS devido outra UF + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + Simples Nacional + + + + + + Classificação Tributária do Serviço + 90 - ICMS Simples Nacional + + + + + + + + + + + Indica se o contribuinte é Simples Nacional 1=Sim + + + + + + + + + + + + + + + + Tipo Dados do Imposto para CT-e OS + + + + + Prestação sujeito à tributação normal do ICMS + + + + + + classificação Tributária do Serviço + 00 - tributação normal ICMS + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + + + Prestação sujeito à tributação com redução de BC do ICMS + + + + + + Classificação Tributária do serviço + 20 - tributação com BC reduzida do ICMS + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + ICMS Isento, não Tributado ou diferido + + + + + + Classificação Tributária do Serviço + Preencher com: + 40 - ICMS isenção; + 41 - ICMS não tributada; + 51 - ICMS diferido + + + + + + + + + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + ICMS Outros + + + + + + Classificação Tributária do Serviço + 90 - Outros + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Valor do Crédito Outorgado/Presumido + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + ICMS devido à UF de origem da prestação, quando diferente da UF do emitente + + + + + + Classificação Tributária do Serviço + 90 - ICMS Outra UF + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS devido outra UF + + + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + + + + + + + Simples Nacional + + + + + + Classificação Tributária do Serviço + 90 - ICMS Simples Nacional + + + + + + + + + + + Indica se o contribuinte é Simples Nacional 1=Sim + + + + + + + + + + + + + + + + Tipo Dados Unidade de Transporte + + + + + Tipo da Unidade de Transporte + 1 - Rodoviário Tração +2 - Rodoviário Reboque +3 - Navio +4 - Balsa +5 - Aeronave +6 - Vagão +7 - Outros + + + + + Identificação da Unidade de Transporte + Informar a identificação conforme o tipo de unidade de transporte. +Por exemplo: para rodoviário tração ou reboque deverá preencher com a placa do veículo. + + + + + + Lacres das Unidades de Transporte + + + + + + Número do lacre + + + + + + + + + + + + + + Informações das Unidades de Carga (Containeres/ULD/Outros) + Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. + + + + + Quantidade rateada (Peso,Volume) + + + + + + + Tipo Dados Unidade de Carga + + + + + Tipo da Unidade de Carga + 1 - Container +2 - ULD +3 - Pallet +4 - Outros + + + + + Identificação da Unidade de Carga + Informar a identificação da unidade de carga, por exemplo: número do container. + + + + + Lacres das Unidades de Carga + + + + + + Número do lacre + + + + + + + + + + + + + + Quantidade rateada (Peso,Volume) + + + + + + + Tipo Dados da Responsável Técnico + + + + + CNPJ da pessoa jurídica responsável técnica pelo sistema utilizado na emissão do documento fiscal eletrônico + Informar o CNPJ da pessoa jurídica desenvolvedora do sistema utilizado na emissão do documento fiscal eletrônico. + + + + + Nome da pessoa a ser contatada + Informar o nome da pessoa a ser contatada na empresa desenvolvedora do sistema utilizado na emissão do documento fiscal eletrônico. No caso de pessoa física, informar o respectivo nome. + + + + + + + + + + + Email da pessoa jurídica a ser contatada + + + + + Telefone da pessoa jurídica a ser contatada + Preencher com o Código DDD + número do telefone. + + + + + + + + + + + + Identificador do código de segurança do responsável técnico + Identificador do CSRT utilizado para geração do hash + + + + + + + + + + Hash do token do código de segurança do responsável técnico + O hashCSRT é o resultado das funções SHA-1 e base64 do token CSRT fornecido pelo fisco + chave de acesso do DF-e. (Implementação em futura NT) + +Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary + + + + + + + + + + + + + Tipo CFOP + + + + + + + + + Tipo Código da Lista de Serviços LC 116/2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Número do Container + + + + + + + + + + + Tipo Documento Associado + + + + + + + + + + + + + + + Tipo Email + + + + + + + + + + + Tipo Finalidade da CT-e + + + + + + + + + + + Tipos Finalidade de CT-e Simplificado + + + + + + + + + + Tipo Identificador de controle do envio do lote. Número seqüencial auto-incremental, de controle correspondente ao identificador único do lote enviado. A responsabilidade de gerar e controlar esse número é do próprio contribuinte. + + + + + + + + + Tipo Modelo do Documento + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Modal transporte Outros Serviços + + + + + + + + + + + + Tipo Modal transporte + + + + + + + + + + + + + + Tipo Modal transporte do CTe Simplificado + + + + + + + + + + + Tipo RNTRC - Registro Nacional Transportadores Rodoviários de Carga + + + + + + + + + Tipo CIOT - Código Identificador da Operação de Transporte + + + + + + + + + Tipo Código Regime Tributário + + + + + + + + + + + + + + Tipo processo de emissão do CT-e + + + + + + + + + + Tipo hora + + + + + + + + + Tipo Versão do CT-e - 4.00 + + + + + + + \ No newline at end of file diff --git a/CTe.AppTeste/schemas/cte_v4.00.xsd b/CTe.AppTeste/schemas/cte_v4.00.xsd new file mode 100644 index 000000000..b0cb9c1a9 --- /dev/null +++ b/CTe.AppTeste/schemas/cte_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Conhecimento de Transporte Eletrônico + + + diff --git a/CTe.AppTeste/schemas/distCTePorUF_v3.00.xsd b/CTe.AppTeste/schemas/distCTePorUF_v3.00.xsd new file mode 100644 index 000000000..e70c9f3e4 --- /dev/null +++ b/CTe.AppTeste/schemas/distCTePorUF_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + solicitação de distribuição de CT-e para o Ambiente Nacional + + + diff --git a/CTe.AppTeste/schemas/distCTe_v3.00.xsd b/CTe.AppTeste/schemas/distCTe_v3.00.xsd new file mode 100644 index 000000000..fc98f85de --- /dev/null +++ b/CTe.AppTeste/schemas/distCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + solicitação de distribuição de CT-e para o Ambiente Nacional + + + diff --git a/CTe.AppTeste/schemas/distChCTe_v3.00.xsd b/CTe.AppTeste/schemas/distChCTe_v3.00.xsd new file mode 100644 index 000000000..828d15e89 --- /dev/null +++ b/CTe.AppTeste/schemas/distChCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + solicitação de distribuição de dados de controle dos DF-e + + + diff --git a/CTe.AppTeste/schemas/evCCeCTe_v4.00.xsd b/CTe.AppTeste/schemas/evCCeCTe_v4.00.xsd new file mode 100644 index 000000000..92e786909 --- /dev/null +++ b/CTe.AppTeste/schemas/evCCeCTe_v4.00.xsd @@ -0,0 +1,98 @@ + + + + + + + Schema XML de validação do evento carta de correção +110110 + + + + + + Descrição do Evento - “Carta de Correção” + + + + + + + + + + + + Grupo de Informações de Correção + + + + + + Indicar o grupo de informações que pertence o campoAlterado. Ex: ide + + + + + + + + + + + + Nome do campo modificado do CT-e Original. + + + + + + + + + + + + Valor correspondente à alteração. + + + + + + + + + + + + Preencher com o indice do item alterado caso a alteração ocorra em uma lista. +OBS: O indice inicia sempre em 1 + + + + + + + + + + + + + + Condições de uso da Carta de Correção, + informar a literal :Condições de uso da Carta de Correção, informar a literal: +“A Carta de Correção é disciplinada pelo Art. 58-B do CONVÊNIO/SINIEF 06/89: Fica permitida a utilização de carta de correção, para regularização de erro ocorrido na emissão de documentos fiscais relativos à prestação de serviço de transporte, desde que o erro não esteja relacionado com: I - as variáveis que determinam o valor do imposto tais como: base de cálculo, alíquota, diferença de preço, quantidade, valor da prestação;II - a correção de dados cadastrais que implique mudança do emitente, tomador, remetente ou do destinatário;III - a data de emissão ou de saída.” (texto com acentuação) ou “A Carta de Correcao e disciplinada pelo Art. 58-B do CONVENIO/SINIEF 06/89: Fica permitida a utilizacao de carta de correcao, para regularizacao de erro ocorrido na emissao de documentos fiscais relativos a prestacao de servico de transporte, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da prestacao;II - a correcao de dados cadastrais que implique mudança do emitente, tomador, remetente ou do destinatario;III - a data de emissao ou de saida.” (texto sem acentuação) + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCECTe_v3.00.xsd b/CTe.AppTeste/schemas/evCECTe_v3.00.xsd new file mode 100644 index 000000000..80b202309 --- /dev/null +++ b/CTe.AppTeste/schemas/evCECTe_v3.00.xsd @@ -0,0 +1,108 @@ + + + + + + + Schema XML de validação do evento comprovante de entrega eletrônico do CT-e +110180 + + + + + + Descrição do Evento - “Comprovante de Entrega do CT-e” + + + + + + + + + + + Número do Protocolo de autorização do CT-e + + + + + Data e hora de conclusão da entrega da NF-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Número do Documento de identificação da pessoa que recebeu a entrega + + + + + + + + + + + Nome da pessoa que recebeu a entrega + + + + + + + + + + + Latitude do ponto de entrega + + + + + Longitude do ponto de entrega + + + + + Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da entrega (Exemplo: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc) + O hashCSRT é o resultado das funções SHA-1 e base64 do token CSRT fornecido pelo fisco + chave de acesso do DF-e. (Implementação em futura NT) +Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary + + + + + + + + + + Data e hora de geração do hash entrega + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Grupo de informações das NF-e que foram entregues ao Destinatário + Informar o grupo apenas para CT-e com tipo de serviço Normal + + + + + + Chave de acesso da NF-e entregue + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCECTe_v4.00.xsd b/CTe.AppTeste/schemas/evCECTe_v4.00.xsd new file mode 100644 index 000000000..17f9c36c4 --- /dev/null +++ b/CTe.AppTeste/schemas/evCECTe_v4.00.xsd @@ -0,0 +1,108 @@ + + + + + + + Schema XML de validação do evento comprovante de entrega eletrônico do CT-e +110180 + + + + + + Descrição do Evento - “Comprovante de Entrega do CT-e” + + + + + + + + + + + Número do Protocolo de autorização do CT-e + + + + + Data e hora de conclusão da entrega da NF-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Número do Documento de identificação da pessoa que recebeu a entrega + + + + + + + + + + + Nome da pessoa que recebeu a entrega + + + + + + + + + + + Latitude do ponto de entrega + + + + + Longitude do ponto de entrega + + + + + Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da entrega (Exemplo: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc) + O hashCSRT é o resultado das funções SHA-1 e base64 do token CSRT fornecido pelo fisco + chave de acesso do DF-e. (Implementação em futura NT) +Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary + + + + + + + + + + Data e hora de geração do hash entrega + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Grupo de informações das NF-e que foram entregues ao Destinatário + Informar o grupo apenas para CT-e com tipo de serviço Normal + + + + + + Chave de acesso da NF-e entregue + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeAnulado_v3.00.xsd b/CTe.AppTeste/schemas/evCTeAnulado_v3.00.xsd new file mode 100644 index 000000000..95662873f --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeAnulado_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação do CT-e de Anulação 240150 + + + + + + Descrição do Evento - "CT-e Anulado" + + + + + + + + + + + Informar a chave de acesso do CT-e de Anulação de Valores que referenciou o CT-e Original + + + + + Data e hora de processamento do CT-e de Anulação, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Autorização do CT-e de Anulação. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeAutorizadoMDFe_v3.00.xsd b/CTe.AppTeste/schemas/evCTeAutorizadoMDFe_v3.00.xsd new file mode 100644 index 000000000..a52772d4d --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeAutorizadoMDFe_v3.00.xsd @@ -0,0 +1,97 @@ + + + + + + Schema XML de validação do evento MDF-e Autorizado 310610 + + + + + + Descrição do Evento - "MDF-e Autorizado" + + + + + + + + + + + Dados do MDF-e + + + + + + Chave de Acesso do MDF-e + + + + + Modal do MDF-e + + + + + + + + + + + + + + Data de Emissão do MDF-e, formato AAAA-MM-DDThh:mm:ss TZD + + + + + Número do Protocolo de Status do MDF-e. 1 posição tipo de autorizador (9- Ambiente Autorizador do MDF-e ); 2 posições ano; 10 seqüencial no ano. + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + + + + Dados do Emitente do MDF-e + + + + + + CNPJ do emitente + + + + + IE do emitente + + + + + Razão social ou Nome do Emitente + + + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeCanceladoMDFe_v3.00.xsd b/CTe.AppTeste/schemas/evCTeCanceladoMDFe_v3.00.xsd new file mode 100644 index 000000000..024ed93f7 --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeCanceladoMDFe_v3.00.xsd @@ -0,0 +1,43 @@ + + + + + + Schema XML de validação do evento MDF-e Cancelado 310611 + + + + + + Descrição do Evento - "MDF-e Cancelado" + + + + + + + + + + + Dados do MDF-e + + + + + + Chave de Acesso do MDF-e + + + + + Número do Protocolo de Cancelamento do MDF-e. 1 posição tipo de autorizador (9- Ambiente Autorizador do MDF-e ); 2 posições ano; 10 seqüencial no ano. + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeComplementar_v3.00.xsd b/CTe.AppTeste/schemas/evCTeComplementar_v3.00.xsd new file mode 100644 index 000000000..db4f2d44a --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeComplementar_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação Autorizado CT-e Complementar 240130 + + + + + + Descrição do Evento - “Autorizado CT-e Complementar” + + + + + + + + + + + Informar a chave de acesso do CT-e Complementar que referenciou o CT-e Original + + + + + Data e hora de processamento do CT-e Complementar, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Autorização do CT-e Complementar. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeLiberaEPEC_v3.00.xsd b/CTe.AppTeste/schemas/evCTeLiberaEPEC_v3.00.xsd new file mode 100644 index 000000000..b91ae0c18 --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeLiberaEPEC_v3.00.xsd @@ -0,0 +1,36 @@ + + + + + + Schema XML de validação do evento de Liberação de EPEC 240160 + + + + + + Descrição do Evento - “Liberação EPEC” + + + + + + + + + + + Motivo da Liberação do Bloqueio da EPEC informado pela UF. + Norma referenciada, informações complementares, etc + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeLiberaPrazoCanc_v3.00.xsd b/CTe.AppTeste/schemas/evCTeLiberaPrazoCanc_v3.00.xsd new file mode 100644 index 000000000..e2ad92ab5 --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeLiberaPrazoCanc_v3.00.xsd @@ -0,0 +1,36 @@ + + + + + + Schema XML de validação do evento de Liberação do Prazo de Cancelamento 240170 + + + + + + Descrição do Evento - “Liberação Prazo Cancelamento” + + + + + + + + + + + Motivo da Liberação do Prazo de Cancelamento informado pela UF. + Norma referenciada, informações complementares, etc + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeMultimodal_v3.00.xsd b/CTe.AppTeste/schemas/evCTeMultimodal_v3.00.xsd new file mode 100644 index 000000000..409c8c1cd --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeMultimodal_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação Autorizado Serviço Vinculado a Multimodal 440160 + + + + + + Descrição do Evento - “Autorizado Serviço Vinculado a Multimodal” + + + + + + + + + + + Informar a chave de acesso do CT-e que referenciou o CT-e Multimodal + + + + + Data e hora de processamento do CT-e que referenciou o Multimodal, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Autorização do CT-e que referenciou o Multimodal. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeRedespachoInter_v3.00.xsd b/CTe.AppTeste/schemas/evCTeRedespachoInter_v3.00.xsd new file mode 100644 index 000000000..d73c9c636 --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeRedespachoInter_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação Autorizado Redespacho Intermediário 440140 + + + + + + Descrição do Evento - “Autorizado Redespacho Intermediário” + + + + + + + + + + + Informar a chave de acesso do CT-e de Redespacho Intermediário que referenciou o CT-e + + + + + Data e hora de processamento do CT-e de Redespacho Intermediário que referenciou o CT-e, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Autorização do CT-e Redespacho Intermediário que referenciou o CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeRedespacho_v3.00.xsd b/CTe.AppTeste/schemas/evCTeRedespacho_v3.00.xsd new file mode 100644 index 000000000..d68d8bde3 --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeRedespacho_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação Autorizado Redespacho 440130 + + + + + + Descrição do Evento - “Autorizado Redespacho” + + + + + + + + + + + Informar a chave de acesso do CT-e de Redespacho que referenciou o CT-e + + + + + Data e hora de processamento do CT-e de Redespacho que referenciou o CT-e, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Autorização do CT-e Redespacho que referenciou o CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeRegPassagemAuto_v3.00.xsd b/CTe.AppTeste/schemas/evCTeRegPassagemAuto_v3.00.xsd new file mode 100644 index 000000000..9abbfa75c --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeRegPassagemAuto_v3.00.xsd @@ -0,0 +1,149 @@ + + + + + + Schema XML de validação do evento de Registro de Passagem Automatico do CT-e 510620 + + + + + + Descrição do Evento - “Registro de Passagem Automático” + + + + + + + + + + + Tipo de Transmissão: N – Normal; R – Retransmissão; A - Atraso Processamento + + + + + + + + + + + + + Informações do Registro de Passagem + + + + + + Informar o codigo da UF onde foi registrada a passagem. Deverá ser utilizada a tabela do IBGE. + Informar 'EX' para operações com o exterior. + + + + + Codigo Identificação do Equipamento (SLD, OCR) ou 99999 para tpEquip=3 + + + + + + + + + + + Nome Identificação do Equiipamento (SLD, OCR) ou Sem Equipamento para tpEquip=3 + + + + + + + + + + + Tipo de Equipamento: +1 – SLD (Antena); 2 – OCR; 3 - Leitura Sen Equipamento + + + + + + + + + + + + + Placa do Veiculo de Tracao + + + + + + + + Sentido da Passagem: +E – Entrada; S – Saída; I - Indeterminado + + + + + + + + + + + + + + Data e hora do Registro de Passagem + Formato AAAA-MM-DDTHH:MM:DD + + + + + Latitude do ponto geográfico onde foi registrada a passagem + + + + + Latitude do ponto geográfico onde foi registrada a passagem + + + + + NSU do registro na base do ONE + + + + + + + + Chave de Acesso do MDF-e que originou o registro + + + + + Informações complementares do Fisco de Registro de Passagem + Norma referenciada, informações complementares, etc + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeRegPassagem_v3.00.xsd b/CTe.AppTeste/schemas/evCTeRegPassagem_v3.00.xsd new file mode 100644 index 000000000..9a61cd06b --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeRegPassagem_v3.00.xsd @@ -0,0 +1,145 @@ + + + + + + Schema XML de validação do evento de Registro de Passagem do CT-e 310620 + + + + + + Descrição do Evento - “Registro de Passagem” + + + + + + + + + + + Informar o código da UF onde foi registrada a passagem. Deverá ser utilizada a tabela do IBGE. + Informar 'EX' para operações com o exterior. + + + + + Código da Unidade Fiscal + + + + + + + + + + Nome da Unidade Fiscal + + + + + + + + + + + Data e hora do Registro de Passagem + Formato AAAA-MM-DDTHH:MM:DD + + + + + Identificação do funcionário responsável pelo registro de passagem + + + + + Nome do funcionário responsável pelo registro de passagem + + + + + + + + + + + Tipo de Transmissão: N – Normal; A – Atrasada + + + + + + + + + + + + Sentido da Passagem: +E – Entrada; S – Saída; I - Indeterminado + + + + + + + + + + + + + + Latitude do ponto geográfico onde foi registrada a passagem + + + + + Latitude do ponto geográfico onde foi registrada a passagem + + + + + Placa do Veiculo de Tracao + + + + + + + + Segundo código de barras do CT-e em contingência + + + + + + + + + + Chave de Acesso do MDF-e que originou o registro + + + + + Informações complementares do Fisco de Registro de Passagem + Norma referenciada, informações complementares, etc + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeSubcontratacao_v3.00.xsd b/CTe.AppTeste/schemas/evCTeSubcontratacao_v3.00.xsd new file mode 100644 index 000000000..fd2171b67 --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeSubcontratacao_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação Autorizado Subcontratação 440150 + + + + + + Descrição do Evento - “Autorizado Subcontratação” + + + + + + + + + + + Informar a chave de acesso do CT-e de Subcontratação que referenciou o CT-e + + + + + Data e hora de processamento do CT-e de Subcontratação que referenciou o CT-e, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Autorização do CT-e de Subcontratação que referenciou o CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCTeSubstituido_v3.00.xsd b/CTe.AppTeste/schemas/evCTeSubstituido_v3.00.xsd new file mode 100644 index 000000000..0a258f3e0 --- /dev/null +++ b/CTe.AppTeste/schemas/evCTeSubstituido_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação do CT-e de Substituição 240140 + + + + + + Descrição do Evento - "CT-e Substituido" + + + + + + + + + + + Informar a chave de acesso do CT-e de Substituicao que referenciou o CT-e Original + + + + + Data e hora de processamento do CT-e de Substituição, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Autorização do CT-e de Substituição. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCancCECTe_v3.00.xsd b/CTe.AppTeste/schemas/evCancCECTe_v3.00.xsd new file mode 100644 index 000000000..6f557453c --- /dev/null +++ b/CTe.AppTeste/schemas/evCancCECTe_v3.00.xsd @@ -0,0 +1,36 @@ + + + + + + + Schema XML de validação do evento cancelamento do comprovante de entrega eletrônico do CT-e +110181 + + + + + + Descrição do Evento - “Cancelamento do Comprovante de Entrega do CT-e” + + + + + + + + + + + Número do Protocolo de autorização do CT-e + + + + + Número do Protocolo de autorização do evento a ser cancelado + + + + + + diff --git a/CTe.AppTeste/schemas/evCancCECTe_v4.00.xsd b/CTe.AppTeste/schemas/evCancCECTe_v4.00.xsd new file mode 100644 index 000000000..0a9f3ef59 --- /dev/null +++ b/CTe.AppTeste/schemas/evCancCECTe_v4.00.xsd @@ -0,0 +1,36 @@ + + + + + + + Schema XML de validação do evento cancelamento do comprovante de entrega eletrônico do CT-e +110181 + + + + + + Descrição do Evento - “Cancelamento do Comprovante de Entrega do CT-e” + + + + + + + + + + + Número do Protocolo de autorização do CT-e + + + + + Número do Protocolo de autorização do evento a ser cancelado + + + + + + diff --git a/CTe.AppTeste/schemas/evCancCTeComplementar_v3.00.xsd b/CTe.AppTeste/schemas/evCancCTeComplementar_v3.00.xsd new file mode 100644 index 000000000..44796b9f6 --- /dev/null +++ b/CTe.AppTeste/schemas/evCancCTeComplementar_v3.00.xsd @@ -0,0 +1,39 @@ + + + + + + Schema XML de validação do evento de marcação Cancelado CT-e Complementar 240131 + + + + + + Descrição do Evento - “Cancelado CT-e Complementar” + + + + + + + + + + + Informar a chave de acesso do CT-e Complementar que referenciou o CT-e Original + + + + + Data e hora de recebimento do Cancelamento do CT-e Complementar, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. + + + + + Número do Protocolo de Homologação do Cancelamento do CT-e Complementar. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. + + + + + + diff --git a/CTe.AppTeste/schemas/evCancCTe_v4.00.xsd b/CTe.AppTeste/schemas/evCancCTe_v4.00.xsd new file mode 100644 index 000000000..af1f280bf --- /dev/null +++ b/CTe.AppTeste/schemas/evCancCTe_v4.00.xsd @@ -0,0 +1,36 @@ + + + + + + + Schema XML de validação do evento do cancelamento +110111 + + + + + + Descrição do Evento - “Cancelamento” + + + + + + + + + + + Número do Protocolo de Status do CT-e + + + + + Justificativa do Cancelamento + + + + + + diff --git a/CTe.AppTeste/schemas/evCancIECTe_v4.00.xsd b/CTe.AppTeste/schemas/evCancIECTe_v4.00.xsd new file mode 100644 index 000000000..20ce3b5ff --- /dev/null +++ b/CTe.AppTeste/schemas/evCancIECTe_v4.00.xsd @@ -0,0 +1,36 @@ + + + + + + + Schema XML de validação do evento cancelamento do insucesso de entrega eletrônico do CT-e +110191 + + + + + + Descrição do Evento - “Cancelamento do Insucesso de Entrega do CT-e” + + + + + + + + + + + Número do Protocolo de autorização do CT-e + + + + + Número do Protocolo de autorização do evento a ser cancelado + + + + + + diff --git a/CTe.AppTeste/schemas/evCancPrestDesacordo.xsd b/CTe.AppTeste/schemas/evCancPrestDesacordo.xsd new file mode 100644 index 000000000..a3404d254 --- /dev/null +++ b/CTe.AppTeste/schemas/evCancPrestDesacordo.xsd @@ -0,0 +1,32 @@ + + + + + + + Schema XML de validação do evento Cancelamento Prestação do Serviço em Desacordo 610111 + + + + + + Descrição do Evento - “Cancelamento Prestação do Serviço em Desacordo” + + + + + + + + + + + + Protocolo do evento que será cancelado + Informar o número do protocolo de autorização do evento de prestação de serviço em desacordo que será cancelado + + + + + + diff --git a/CTe.AppTeste/schemas/evCancPrestDesacordo_v4.00.xsd b/CTe.AppTeste/schemas/evCancPrestDesacordo_v4.00.xsd new file mode 100644 index 000000000..a3404d254 --- /dev/null +++ b/CTe.AppTeste/schemas/evCancPrestDesacordo_v4.00.xsd @@ -0,0 +1,32 @@ + + + + + + + Schema XML de validação do evento Cancelamento Prestação do Serviço em Desacordo 610111 + + + + + + Descrição do Evento - “Cancelamento Prestação do Serviço em Desacordo” + + + + + + + + + + + + Protocolo do evento que será cancelado + Informar o número do protocolo de autorização do evento de prestação de serviço em desacordo que será cancelado + + + + + + diff --git a/CTe.AppTeste/schemas/evEPECCTe_v4.00.xsd b/CTe.AppTeste/schemas/evEPECCTe_v4.00.xsd new file mode 100644 index 000000000..be7452cdf --- /dev/null +++ b/CTe.AppTeste/schemas/evEPECCTe_v4.00.xsd @@ -0,0 +1,161 @@ + + + + + + + Schema XML de validação do evento de emissão prévia de emissão em contingência +110113 + + + + + + Descrição do Evento - “EPEC” + + + + + + + + + + + Justificativa da Entrada em Contingencia + + + + + Valor do ICMS + + + + + Valor do ICMS ST + + + + + Valor Total da Prestação do Serviço + Pode conter zeros quando o CT-e for de complemento de ICMS + + + + + Valor total da carga + Dever ser informado para todos os modais, com exceção para o Dutoviário. + + + + + Indicador do "papel" do tomador do serviço no CT-e + + + + + + Tomador do Serviço + Preencher com: +0-Remetente; +1-Expedidor;2-Recebedor;3-Destinatário +;4 - Outros + + + + + + + + + + + + + + + UF do tomador do serviço + Informar 'EX' para operações com o exterior. + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. +Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Modal + Preencher com: + +01-Rodoviário; + +02-Aéreo; +03-Aquaviário; + +04-Ferroviário; + +05-Dutoviário; +06-Multimodal; + + + + + UF do início da prestação + Informar 'EX' para operações com o exterior. + + + + + UF do término da prestação + Informar 'EX' para operações com o exterior. + + + + + Tipo do CT-e - Aceitar apenas Tipo Normal = 0 + Preencher com: + 0 - CT-e Normal; + 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; + 3 - CT-e Substituto + + + + + + + + + + + + Data e hora de emissão do CT-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evGTV_v4.00.xsd b/CTe.AppTeste/schemas/evGTV_v4.00.xsd new file mode 100644 index 000000000..9b9cd01a3 --- /dev/null +++ b/CTe.AppTeste/schemas/evGTV_v4.00.xsd @@ -0,0 +1,255 @@ + + + + + + + Schema XML de validação do evento informações da GTV 110170 + + + + + + Descrição do Evento - “Informações da GTV” + + + + + + + + + + + + Grupo de Informações das GTV + + + + + + Número da GTV + + + + + + + + + + + Identificador para diferenciar GTV de mesmo número (Usar número do AIDF ou identificador interno da empresa), + + + + + + + + + + + Série + + + + + + + + + + + Subsérie + + + + + + + + + + + Data de Emissão + Formato AAAA-MM-DD + + + + + Número Dígito Verificador + + + + + + + + + + + Quantidade de volumes/malotes + + + + + Informações das Espécies transportadas + + + + + + Tipo da Espécie + 1 - Numerário +2 - Cheque +3 - Moeda +4 - Outros + + + + + + + + + + + + + + Valor Transportada em Espécie indicada + + + + + + + + Informações do Remetente da GTV + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + Razão social ou nome do remetente + + + + + + + + + + + + + + Informações do Destinatário da GTV + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. + Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do destinatário ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Sigla da UF + Informar EX para operações com o exterior. + + + + + Razão social ou nome do destinatário + + + + + + + + + + + + + + Placa do veículo + + + + + UF em que veículo está licenciado + Sigla da UF de licenciamento do veículo. + + + + + RNTRC do transportador + + + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evIECTe_v4.00.xsd b/CTe.AppTeste/schemas/evIECTe_v4.00.xsd new file mode 100644 index 000000000..09266903f --- /dev/null +++ b/CTe.AppTeste/schemas/evIECTe_v4.00.xsd @@ -0,0 +1,126 @@ + + + + + + + Schema XML de validação do evento insucesso na entrega eletrônico do CT-e +110190 + + + + + + Descrição do Evento - “Insucesso na Entrega do CT-e” + + + + + + + + + + + Número do Protocolo de autorização do CT-e + + + + + Data e hora da tentativa da entrega da NF-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Número da tentativa de entrega que não teve insucesso + + + + + + + + + + + Motivo do insucesso + 1- Recebedor não encontrado; +2- Recusa do recebedor; +3- Endereço inexistente; +4- Outros (exige informar justificativa) + + + + + + + + + + + + + + Justificativa do Motivo de insucesso, informar apenas para tpMotivo = 4 + + + + + + + + + + + Latitude do ponto de entrega + + + + + Longitude do ponto de entrega + + + + + Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da tentativa com insucesso da entrega (Exemplo: foto do local que não recebeu a entrega ou do local sem recebedor) + O hashCSRT é o resultado das funções SHA-1 e base64 do token CSRT fornecido pelo fisco + chave de acesso do DF-e. (Implementação em futura NT) +Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary + + + + + + + + + + Data e hora de geração do hash tentativa entrega + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Grupo de informações das NF-e que não tiveram sucesso na entrega ao Destinatário + Informar o grupo apenas para CT-e com tipo de serviço Normal + + + + + + Chave de acesso da NF-e com insucesso na tentativa de entrega + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evPrestDesacordo_v4.00.xsd b/CTe.AppTeste/schemas/evPrestDesacordo_v4.00.xsd new file mode 100644 index 000000000..34542d33e --- /dev/null +++ b/CTe.AppTeste/schemas/evPrestDesacordo_v4.00.xsd @@ -0,0 +1,49 @@ + + + + + + + Schema XML de validação do evento Prestação do Serviço em Desacordo 610110 + + + + + + Descrição do Evento - “Prestação do Serviço em Desacordo” + + + + + + + + + + + + Indicador de operação em desacordo + + + + + + + + + + Observações do tomador + + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/evRegMultimodal_v4.00.xsd b/CTe.AppTeste/schemas/evRegMultimodal_v4.00.xsd new file mode 100644 index 000000000..6ba3eccd6 --- /dev/null +++ b/CTe.AppTeste/schemas/evRegMultimodal_v4.00.xsd @@ -0,0 +1,51 @@ + + + + + + + Schema XML de validação do evento Registro Multimodal 110160 + + + + + + Descrição do Evento - “Registro Multimodal” + + + + + + + + + + + Informação complementar sobre o registro, indicação do tipo de documento utilizado e demais situações ocorridas no Multimodal (Texto Livre). + + + + + + + + + + + + + Numero do Documento lançado no CT-e Multimodal + + + + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/eventoCTeTiposBasico_v3.00.xsd b/CTe.AppTeste/schemas/eventoCTeTiposBasico_v3.00.xsd index 567bd5151..c5ae9560f 100644 --- a/CTe.AppTeste/schemas/eventoCTeTiposBasico_v3.00.xsd +++ b/CTe.AppTeste/schemas/eventoCTeTiposBasico_v3.00.xsd @@ -23,11 +23,21 @@ 2 - Homologação - - - CNPJ do emissor do evento - - + + + + CNPJ do emissor do evento + + + + + CPF do emissor do evento + Informar zeros não significativos. + +Usar com série específica 920-969 para emitente pessoa física com inscrição estadual + + + Chave de Acesso do CT-e vinculado ao evento @@ -83,6 +93,27 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen + + + Grupo de informações do pedido de registro de evento da Nota Fiscal Fácil + + + + + + Solicitação do pedido de registro de evento da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + @@ -211,7 +242,26 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen - + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + diff --git a/CTe.AppTeste/schemas/eventoCTeTiposBasico_v4.00.xsd b/CTe.AppTeste/schemas/eventoCTeTiposBasico_v4.00.xsd new file mode 100644 index 000000000..ae2e98b8b --- /dev/null +++ b/CTe.AppTeste/schemas/eventoCTeTiposBasico_v4.00.xsd @@ -0,0 +1,331 @@ + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + + CNPJ do emissor do evento + + + + + CPF do emissor do evento + Informar zeros não significativos. + +Usar com série específica 920-969 para emitente pessoa física com inscrição estadual + + + + + + Chave de Acesso do CT-e vinculado ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD) + + + + + Tipo do Evento + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Detalhamento do evento específico + + + + + + XML do evento +Insira neste local o XML específico do tipo de evento (cancelamento, encerramento, registro de passagem). + + + + + + + + + + + + + + + + Grupo de informações do pedido de registro de evento da Nota Fiscal Fácil + + + + + + Solicitação do pedido de registro de evento da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + + + + Grupo de Informação do Provedor de Assinatura e Autorização + + + + + + CNPJ do Provedor de Assinatura e Autorização + + + + + Assinatura RSA do Emitente para DFe gerados por PAA + + + + + + Assinatura digital padrão RSA + Converter o atributo Id do DFe para array de bytes e assinar com a chave privada do RSA com algoritmo SHA1 gerando um valor no formato base64. + + + + + Chave Publica no padrão XML RSA Key + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave do CT-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso CT-e vinculado + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato AAAA-MM-DDThh:mm:ssTZD + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + + + + + Tipo procEvento + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo Modal transporte + + + + + + + + + + + + + + Tipo número sequencial único do AN + + + + + + diff --git a/CTe.AppTeste/schemas/eventoCTe_v4.00.xsd b/CTe.AppTeste/schemas/eventoCTe_v4.00.xsd new file mode 100644 index 000000000..a61975004 --- /dev/null +++ b/CTe.AppTeste/schemas/eventoCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do Pedido de Registro de Evento do CT-e + + + diff --git a/CTe.AppTeste/schemas/inutCTeTiposBasico_v3.00.xsd b/CTe.AppTeste/schemas/inutCTeTiposBasico_v3.00.xsd index 5a26ca820..d1c6e57d9 100644 --- a/CTe.AppTeste/schemas/inutCTeTiposBasico_v3.00.xsd +++ b/CTe.AppTeste/schemas/inutCTeTiposBasico_v3.00.xsd @@ -1,4 +1,5 @@ + @@ -195,7 +196,26 @@ - + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + diff --git a/CTe.AppTeste/schemas/inutCTeTiposBasico_v4.00.xsd b/CTe.AppTeste/schemas/inutCTeTiposBasico_v4.00.xsd new file mode 100644 index 000000000..36228c762 --- /dev/null +++ b/CTe.AppTeste/schemas/inutCTeTiposBasico_v4.00.xsd @@ -0,0 +1,228 @@ + + + + + + + + Tipo Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico + + + + + Dados do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + Código da UF solicitada + + + + + Ano de inutilização da numeração + + + + + + + + + + CNPJ do emitente + + + + + Modelo da CT-e (57 ou 67) + + + + + Série da CT-e + + + + + Número da CT-e inicial + + + + + Número da CT-e final + + + + + Justificativa do pedido de inutilização + + + + + + + + + + + + + + + + + + + + + + + Tipo retorno do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico + + + + + Dados do Retorno do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a CT-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + + + + + + + + Código da UF solicitada + + + + + Ano de inutilização da numeração + + + + + + + + + + CNPJ do emitente + + + + + Modelo da CT-e (57 ou 67) + + + + + Série da CT-e + + + + + Número da CT-e inicial + + + + + Número da CT-e final + + + + + Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização. + + + + + Número do Protocolo de Status do CT-e. 1 posição (1 – Secretaria de Fazenda Estadual , 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP); 2 - código da UF - 2 posições ano; 10 seqüencial no ano. + + + + + + + + + + + + + Tipo Pedido de inutilzação de númeração de CT-e processado + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + + Tipo Versão Inutilização de numeração de CT-e + + + + + + diff --git a/CTe.AppTeste/schemas/inutCTe_v4.00.xsd b/CTe.AppTeste/schemas/inutCTe_v4.00.xsd new file mode 100644 index 000000000..c368b74d0 --- /dev/null +++ b/CTe.AppTeste/schemas/inutCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do Pedido de Inutilização de Numeração do Conhecimento de Transportes eletrônico + + + diff --git a/CTe.AppTeste/schemas/leiauteChCTe_v3.00.xsd b/CTe.AppTeste/schemas/leiauteChCTe_v3.00.xsd new file mode 100644 index 000000000..b9f11c2ec --- /dev/null +++ b/CTe.AppTeste/schemas/leiauteChCTe_v3.00.xsd @@ -0,0 +1,478 @@ + + + + + + Tipo Versão 3.00 + + + + + + + + Versão documento + + + + + + + + Tipo número sequencial único do AN + + + + + + + + solicitação de distribuição de dados de controle dos DF-e + + + + + +Identificação do Ambiente: +1 - Produção; +2 - Homologação + + + + + + Versão do Aplicativo que solicitou a distribuição de DF-e + + + + + Indicador de Compactação da Mensagem de retorno: +0 - sem compactação; +1 - compactação padrão gZip + + + + + + + + + + + + Código da UF do autorizador. Utilizar a Tabela do IBGE. + + + + + último NSU (AN) recebido pela SVC. Caso seja informado com zero, o AN tentará localizar o primeiro DF-e. + + + + + + NSU final desejado. Se informado, a aplicação do AN deverá observar este valor máximo do NSU a ser fornecido. + + + + + + + + + + + + + + + + Lote de dados de controle sobre os DF-e encontrados + + + + + +Identificação do Ambiente: + +1 - Produção; +2 - Homologação + + + + + + Versão do Aplicativo que solicitou a distribuição de DF-e + + + + + Código do status da resposta + + + + + Descrição literal do status da resposta + + + + + Código da UF do autorizador. Utilizar a Tabela do IBGE. + + + + + Ultimo NSU pesquisado pelo Ambiente Nacional + + + + + + NSU final desejado. Se informado, a aplicação do AN deverá observar este valor máximo do NSU a ser fornecido. + + + + + + + + + + + + + Maior NSU existente na Base Nacional para a SVC. + + + + + + + + + + + + Schema XML dados descompactado + + + + + + informações de controle CT-e + + + + + informações de controle Cancelamento + + + + + informações de controle Evento + + + + + informações de controle Inutilização + + + + + + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + Chave de Acesso do DF-e + + + + + Hash MD5 da Chave de acesso convertido para base64 + + + + + Tipo de CT-e + Preencher com: + +0 - CT-e Normal; +1 - CT-e de Complemento de Valores; +2 - CT-e de Anulação de Valores; +3 - CT-e Substituto + + + + + + + + + + + + + Forma de Emiissão do DFe + Preencher com: +1 - Normal; + 4-EPEC pela SVC; 5 - Contingência FSDA; + 7 - Autorização pela SVC-RS; + 8 - Autorização pela SVC-SP + + + + + + + + + + + + + + Indicador de denegação do documento: 0 - NÃO denegado; 1 - denegado + + + + + + + + + + + Data e hora de autorizacao no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + Número de protocolo de autorização CT-e. + + + + + + número sequencial único do Ambiente Nacional + + + + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + Chave de Acesso do DF-e cancelado + + + + + Hash MD5 da Chave de Acesso convertido para base64 + + + + + Forma de Emiissão do DFe + Preencher com: +1 - Normal; + 4-EPEC pela SVC; 5 - Contingência FSDA; + 7 - Autorização pela SVC-RS; + 8 - Autorização pela SVC-SP + + + + + + + + + + + + + + Número de protocolo de autorização do CT-e. + + + + + Data e hora de autorizacao do Cancelamento no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + Número de protocolo de autorização do Cancelamento + + + + + + número sequencial único do Ambiente Nacional + + + + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + Ano de inutilização da numeração + + + + + CNPJ do emitente + + + + + Série do Documento Fiscal + + + + + Modelo do Documento Fiscal + + + + + Número da CT-e inicial + + + + + Número da CT-e final + + + + + Data e hora de autorizacao no formato AAAA-MM-DDTHH:MM:SS TZD + + + + + Número de protocolo de autorização da Inutilização. + + + + + + número sequencial único do Ambiente Nacional + + + + + + + + + Código do Orgao de Recepcao do Evento + + + + + Chave de Acesso do DF-e + + + + + Hash MD5 da Chave de Acesso convertido para base64 + + + + + Forma de Emiissão do DFe + Preencher com: +1 - Normal; + 4-EPEC pela SVC; 5 - Contingência FSDA; + 7 - Autorização pela SVC-RS; + 8 - Autorização pela SVC-SP + + + + + + + + + + + + + + CNPJ do Autor do Evento + + + + + Data e Hora do Evento, formato (AAAA-MM-DDThh:mm:ss TZD) + + + + + Tipo do Evento + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Número de protocolo de autorização do CT-e. + + + + + Data e hora de autorizacao do Evento no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + Número de protocolo de autorização do evento + + + + + + número sequencial único do Ambiente Nacional + + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/leiauteLoteRFBCTe_v3.00.xsd b/CTe.AppTeste/schemas/leiauteLoteRFBCTe_v3.00.xsd new file mode 100644 index 000000000..a1174e93b --- /dev/null +++ b/CTe.AppTeste/schemas/leiauteLoteRFBCTe_v3.00.xsd @@ -0,0 +1,561 @@ + + + + + + + Tipo Versão + + + + + + + + Tipo número sequencial único do AN + + + + + + + + Schema XML de validação do lote de envio de documentos ficais eletronicos + + + + + Versão da aplicação do órgão autorizador. + + + + + + Conjunto de DF-e compactado com o método indicado no indComp, deve conter as mesmas informações do grupo loteEnvCTe + + + + + Conjunto de DF-e enviados, a princípio, apenas será permitido o envio de documentos fiscais em vigência. + + + + + + + + + Schema XML de validação da área de dados descompactada + + + + + + + + informação do proc + + + + + + Identificação do Schema XML de validação do proc, Ex. procCTe_v3.00.xsd, procCTeOS_v3.00.xsd, procInutCTe_v3.00.xsd, etc. + + + + + + + + + + + Schema XML de validação da área de dados da mensagem de retorno + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão da aplicação do AN que recebeu os documentos fiscais. + + + + + Código do status da resposta + + + + + Descrição literal do status da resposta + + + + + + Retorno de processamento dos DF-e, somente é gerado se os documentos fiscais forem válidos. + + + + + + Número de protocolo do DF-e processado, o campo serve para a aplicação da SEFAZ identificar os retornos. + + + + + código do status do processmaneto do DF-e + + + + + descrição do status do processmaneto do DF-e + + + + + número sequencial único do Ambiente Nacional + + + + + Número seqüencial único de Autorização gerado pelo Ambiente Nacional para a UF Autorizadora + + + + + + + + + + + + + + Schema XML de validação da área de dados da mensagem da solicitação de distribuição de DF-e + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que solicitou a distribuição de DF-e + + + + + Indicador de DF-e solicitados: 0 - DF-e autorizados pela UF; 1 - DF-e interestaduais destinados para a UF ; 2 – DF-e autorizados pela SEFAZ Virtual ou SVC em nome da UF; 3 - DF-e autorizados em contingencia SVC em nome da UF; 8 – DF-e interestaduais destinados para a UF (1) e DF-e autorizados pela SEFAZ Virtual ou SVC em nome da UF (2); 9 - Todos os DF-e. + + + + + + + + + + + + + + + Indicador de Compactação da Mensagem de retorno: 0 - sem compactação; 1 - compactação padrão gZip + + + + + + + + + + + último NSUAN recebido, caso seja informado com zero, o AN tentará localizar o primeiro DF-e existente. + + + + + + + + Schema XML de validação da área de dados da mensagem da solicitação de distribuição de DF-e + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que solicitou a distribuição de DF-e + + + + + Indicador do tipo de NSU que será solicitado: +0 – NSU dos DF-e autorizados pela UF; +1 – NSU dos DF-e de interesse da UF que não foram autorizados pela UF; + + + + + Indicador de Compactação da Mensagem de retorno: 0 - sem compactação; 1 - compactação padrão gZip + + + + + Último NSU recebido pela UF + + + + + + + + Schema XML de validação da área de dados da mensagem da consulta NSU Faltantes + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que solicitou a distribuição de DF-e + + + + + Indicador do tipo de NSU que será solicitado: +0 – NSU de autorizacao; +1 – NSU de busca + + + + + + + + + + + Indicador de Compactação da Mensagem de retorno: 0 - sem compactação; 1 - compactação padrão gZip + + + + + + + + + + + Lista de NSU + + + + + + NSU faltante na base de dados do Estado + + + + + + + + + + + Schema XML de validação do lote de retorno de documentos ficais eletronicos + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que atendeu a pedido de distribuição de DF-e + + + + + código do status de resultado da pesquisa + + + + + descrição do resultado do pesquisa + + + + + último NSU + + + + + + + + + + + + Schema XML de validação do lote de retorno de documentos ficais eletronicos + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que atendeu a pedido de distribuição de DF-e + + + + + código do status de resultado da pesquisa + + + + + descrição do resultado do pesquisa + + + + + Data e Hora de recebimento da solicitação de distribuição +Formato = AAAA-MM-DDTHH:MM:SS TZD + + + + + Indicador do tipo de NSU que será solicitado: +0 – NSU dos DF-e autorizados pela UF; +1 – NSU dos DF-e de interesse da UF que não foram autorizados pela UF; + + + + + último NSU + + + + + + + + + + + + Schema XML de validação da área de dados descompactada + + + + + + + + informação do proc + + + + + + Identificação do Schema XML de validação do proc, Ex. procCTe_v3.00.xsd, procCTeOS_v3.00.xsd, procInutCTe_v3.00.xsd, etc. + + + + + número sequencial único do Ambiente Nacional + + + + + + + + + + + Schema XML de validação da área de dados descompactada + + + + + + + + Código do status + + + + + Descrição literal do status correspondente ao documento retornado + + + + + + + + informação do proc + + + + + + Identificação do Schema XML de validação do proc, Ex. procCTe_v3.00.xsd, procCTeOS_v3.00.xsd, procInutCTe_v3.00.xsd, etc. + + + + + + + + + Número seqüencial único de Autorização ou de Busca + + + + + Número seqüencial único gerado na ordem de recepção no Ambiente Nacional independente do estado autorizador. + + + + + + + + + Schema XML de validação da área de dados da mensagem de consulta protocolos faltantes + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que gerou a consulta + + + + + número do protocolo inicial + + + + + + + + Schema XML de validação da área de dados da mensagem de retorno da consulta protocolos faltantes + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que atendeu a consulta + + + + + código do status de resultado da pesquisa + + + + + descrição do resultado do pesquisa + + + + + número do último protocolo pesquisado + + + + + + + + número do protocolo inicial + + + + + número do protocolo final + + + + + + + + + + + Schema XML de validação da área de dados da mensagem de retorno da consulta NSU faltantes + + + + + Identificação do Ambiente: 1 - Produção 2 - Homologação + + + + + Versão do Aplicativo que atendeu a pedido de distribuição de DF-e + + + + + código do status de resultado da pesquisa + + + + + descrição do resultado do pesquisa + + + + + Data e Hora de recebimento da solicitação de distribuição +Formato = AAAA-MM-DDTHH:MM:SS + + + + + Indicador do tipo de NSU que será solicitado: +0 – NSU dos DF-e autorizados pela UF; +1 – NSU dos DF-e de interesse da UF que não foram autorizados pela UF; + + + + + + + + + + diff --git a/CTe.AppTeste/schemas/loteDistCTePorUF_v3.00.xsd b/CTe.AppTeste/schemas/loteDistCTePorUF_v3.00.xsd new file mode 100644 index 000000000..b5533b736 --- /dev/null +++ b/CTe.AppTeste/schemas/loteDistCTePorUF_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Estrutura do Lote de Retorno de pedido de distribuição de CT-e, utilizar na validação da estrutura descompactada + + + diff --git a/CTe.AppTeste/schemas/loteDistCTe_v3.00.xsd b/CTe.AppTeste/schemas/loteDistCTe_v3.00.xsd new file mode 100644 index 000000000..66b4e0d49 --- /dev/null +++ b/CTe.AppTeste/schemas/loteDistCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Estrutura do Lote de Retorno de pedido de distribuição de CT-e, utilizar na validação da estrutura descompactada + + + diff --git a/CTe.AppTeste/schemas/loteEnvCTe_v3.00.xsd b/CTe.AppTeste/schemas/loteEnvCTe_v3.00.xsd new file mode 100644 index 000000000..ad2399ea3 --- /dev/null +++ b/CTe.AppTeste/schemas/loteEnvCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Estrutura do Lote de Envio de documentos do CT-e, utilizar na validação da estrutura descompactada + + + diff --git a/CTe.AppTeste/schemas/loteRFBCTe_v3.00.xsd b/CTe.AppTeste/schemas/loteRFBCTe_v3.00.xsd new file mode 100644 index 000000000..309712e7f --- /dev/null +++ b/CTe.AppTeste/schemas/loteRFBCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Envio de Lote de CT-e para o Ambiente Nacional + + + diff --git a/CTe.AppTeste/schemas/procCTeOS_v3.00.xsd b/CTe.AppTeste/schemas/procCTeOS_v3.00.xsd index 87c0b5f31..45456e445 100644 --- a/CTe.AppTeste/schemas/procCTeOS_v3.00.xsd +++ b/CTe.AppTeste/schemas/procCTeOS_v3.00.xsd @@ -1,4 +1,5 @@ + @@ -11,7 +12,26 @@ - + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + diff --git a/CTe.AppTeste/schemas/procCTeOS_v4.00.xsd b/CTe.AppTeste/schemas/procCTeOS_v4.00.xsd new file mode 100644 index 000000000..c019c2ecb --- /dev/null +++ b/CTe.AppTeste/schemas/procCTeOS_v4.00.xsd @@ -0,0 +1,37 @@ + + + + + + + CT-e OS processado + + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + diff --git a/CTe.AppTeste/schemas/procCTeSimp_v4.00.xsd b/CTe.AppTeste/schemas/procCTeSimp_v4.00.xsd new file mode 100644 index 000000000..ae7e19cb5 --- /dev/null +++ b/CTe.AppTeste/schemas/procCTeSimp_v4.00.xsd @@ -0,0 +1,37 @@ + + + + + + + CT-e Simplificado processado + + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + diff --git a/CTe.AppTeste/schemas/procCTe_v3.00.xsd b/CTe.AppTeste/schemas/procCTe_v3.00.xsd index 6354b1f25..863a5b341 100644 --- a/CTe.AppTeste/schemas/procCTe_v3.00.xsd +++ b/CTe.AppTeste/schemas/procCTe_v3.00.xsd @@ -1,5 +1,5 @@ - + @@ -12,7 +12,26 @@ - + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + diff --git a/CTe.AppTeste/schemas/procCTe_v4.00.xsd b/CTe.AppTeste/schemas/procCTe_v4.00.xsd new file mode 100644 index 000000000..c13cb4c81 --- /dev/null +++ b/CTe.AppTeste/schemas/procCTe_v4.00.xsd @@ -0,0 +1,37 @@ + + + + + + + CT-e processado + + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + diff --git a/CTe.AppTeste/schemas/procEventoCTe_v4.00.xsd b/CTe.AppTeste/schemas/procEventoCTe_v4.00.xsd new file mode 100644 index 000000000..ddfe9d4fb --- /dev/null +++ b/CTe.AppTeste/schemas/procEventoCTe_v4.00.xsd @@ -0,0 +1,15 @@ + + + + + + + Pedido de Registro de Eventos de CT-e processado + + + + + + + + diff --git a/CTe.AppTeste/schemas/procGTVe_v3.00.xsd b/CTe.AppTeste/schemas/procGTVe_v3.00.xsd new file mode 100644 index 000000000..b1af67b2e --- /dev/null +++ b/CTe.AppTeste/schemas/procGTVe_v3.00.xsd @@ -0,0 +1,37 @@ + + + + + + + GTV-e processada + + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + diff --git a/CTe.AppTeste/schemas/procGTVe_v4.00.xsd b/CTe.AppTeste/schemas/procGTVe_v4.00.xsd new file mode 100644 index 000000000..b9a438933 --- /dev/null +++ b/CTe.AppTeste/schemas/procGTVe_v4.00.xsd @@ -0,0 +1,37 @@ + + + + + + + GTV-e processada + + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + diff --git a/CTe.AppTeste/schemas/procInutCTe_v4.00.xsd b/CTe.AppTeste/schemas/procInutCTe_v4.00.xsd new file mode 100644 index 000000000..241e5fa89 --- /dev/null +++ b/CTe.AppTeste/schemas/procInutCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Pedido de inutilzação de numeração de CT-e processado + + + diff --git a/CTe.AppTeste/schemas/retCTeConsultaDFe_v1.00.xsd b/CTe.AppTeste/schemas/retCTeConsultaDFe_v1.00.xsd new file mode 100644 index 000000000..682093e0c --- /dev/null +++ b/CTe.AppTeste/schemas/retCTeConsultaDFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno da consulta do CT-e. + + + diff --git a/CTe.AppTeste/schemas/retCTeOS_v4.00.xsd b/CTe.AppTeste/schemas/retCTeOS_v4.00.xsd new file mode 100644 index 000000000..3ca744be4 --- /dev/null +++ b/CTe.AppTeste/schemas/retCTeOS_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno do recibo de envio do CT-e OS (Modelo 67) + + + diff --git a/CTe.AppTeste/schemas/retCTeSimp_v4.00.xsd b/CTe.AppTeste/schemas/retCTeSimp_v4.00.xsd new file mode 100644 index 000000000..8140961c8 --- /dev/null +++ b/CTe.AppTeste/schemas/retCTeSimp_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno do recibo de envio do CT-e Simplificado (Modelo 57) + + + diff --git a/CTe.AppTeste/schemas/retCTe_v3.00.xsd b/CTe.AppTeste/schemas/retCTe_v3.00.xsd new file mode 100644 index 000000000..efa4f7d88 --- /dev/null +++ b/CTe.AppTeste/schemas/retCTe_v3.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno do recibo de envio do CT-e (Modelo 57) + + + diff --git a/CTe.AppTeste/schemas/retCTe_v4.00.xsd b/CTe.AppTeste/schemas/retCTe_v4.00.xsd new file mode 100644 index 000000000..24f025ddc --- /dev/null +++ b/CTe.AppTeste/schemas/retCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno do recibo de envio do CT-e (Modelo 57) + + + diff --git a/CTe.AppTeste/schemas/retConsNSUFaltCTe_v3.00.xsd b/CTe.AppTeste/schemas/retConsNSUFaltCTe_v3.00.xsd new file mode 100644 index 000000000..b46f458c5 --- /dev/null +++ b/CTe.AppTeste/schemas/retConsNSUFaltCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação da área de dados da mensagem de retorno da consulta NSU faltantes + + + diff --git a/CTe.AppTeste/schemas/retConsProtFaltCTe_v3.00.xsd b/CTe.AppTeste/schemas/retConsProtFaltCTe_v3.00.xsd new file mode 100644 index 000000000..8721089b4 --- /dev/null +++ b/CTe.AppTeste/schemas/retConsProtFaltCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Retorno de pedido de consulta de protocolos faltantes de CT-e + + + diff --git a/CTe.AppTeste/schemas/retConsSitCTe_v4.00.xsd b/CTe.AppTeste/schemas/retConsSitCTe_v4.00.xsd new file mode 100644 index 000000000..3e6aac4e7 --- /dev/null +++ b/CTe.AppTeste/schemas/retConsSitCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno da consulta da situação atual do CT-e. + + + diff --git a/CTe.AppTeste/schemas/retConsStatServCTe_v4.00.xsd b/CTe.AppTeste/schemas/retConsStatServCTe_v4.00.xsd new file mode 100644 index 000000000..4bc47d6c1 --- /dev/null +++ b/CTe.AppTeste/schemas/retConsStatServCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do Resultado da Consulta do Status do Serviço de CT-e + + + diff --git a/CTe.AppTeste/schemas/retDistCTePorUF_v3.00.xsd b/CTe.AppTeste/schemas/retDistCTePorUF_v3.00.xsd new file mode 100644 index 000000000..bff2ba7cc --- /dev/null +++ b/CTe.AppTeste/schemas/retDistCTePorUF_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Retorno de pedido de distribuição de CT-e + + + diff --git a/CTe.AppTeste/schemas/retDistCTe_v3.00.xsd b/CTe.AppTeste/schemas/retDistCTe_v3.00.xsd new file mode 100644 index 000000000..376de3463 --- /dev/null +++ b/CTe.AppTeste/schemas/retDistCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Retorno de pedido de distribuição de CT-e + + + diff --git a/CTe.AppTeste/schemas/retDistChCTe_v3.00.xsd b/CTe.AppTeste/schemas/retDistChCTe_v3.00.xsd new file mode 100644 index 000000000..f403bfdb6 --- /dev/null +++ b/CTe.AppTeste/schemas/retDistChCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Lote de dados de controle sobre os DF-e encontrados + + + diff --git a/CTe.AppTeste/schemas/retEventoCTe_v4.00.xsd b/CTe.AppTeste/schemas/retEventoCTe_v4.00.xsd new file mode 100644 index 000000000..41010ef8c --- /dev/null +++ b/CTe.AppTeste/schemas/retEventoCTe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno Pedido de Evento do CT-e + + + diff --git a/CTe.AppTeste/schemas/retGTVe_v3.00.xsd b/CTe.AppTeste/schemas/retGTVe_v3.00.xsd new file mode 100644 index 000000000..a502231a0 --- /dev/null +++ b/CTe.AppTeste/schemas/retGTVe_v3.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno do recibo de envio da GTV-e (Modelo 64) + + + diff --git a/CTe.AppTeste/schemas/retGTVe_v4.00.xsd b/CTe.AppTeste/schemas/retGTVe_v4.00.xsd new file mode 100644 index 000000000..f4e333168 --- /dev/null +++ b/CTe.AppTeste/schemas/retGTVe_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno do recibo de envio da GTV-e (Modelo 64) + + + diff --git a/CTe.AppTeste/schemas/retInutCTe_v4.00.xsd b/CTe.AppTeste/schemas/retInutCTe_v4.00.xsd new file mode 100644 index 000000000..ab4f1d4cb --- /dev/null +++ b/CTe.AppTeste/schemas/retInutCTe_v4.00.xsd @@ -0,0 +1,15 @@ + + + + + + + Schema XML de validação do retorno do Pedido de Inutilização de Numeração do CT-e + + + + + + + + diff --git a/CTe.AppTeste/schemas/retLoteRFBCTe_v3.00.xsd b/CTe.AppTeste/schemas/retLoteRFBCTe_v3.00.xsd new file mode 100644 index 000000000..d999e2560 --- /dev/null +++ b/CTe.AppTeste/schemas/retLoteRFBCTe_v3.00.xsd @@ -0,0 +1,9 @@ + + + + + + Retorno do resultado de processamento de Lote de CT-e para o Ambiente Nacional compactado + + + diff --git a/CTe.AppTeste/schemas/tiposGeralCTe_v3.00.xsd b/CTe.AppTeste/schemas/tiposGeralCTe_v3.00.xsd index fcde53cf2..9431aa5c4 100644 --- a/CTe.AppTeste/schemas/tiposGeralCTe_v3.00.xsd +++ b/CTe.AppTeste/schemas/tiposGeralCTe_v3.00.xsd @@ -1,4 +1,4 @@ - + @@ -75,7 +75,7 @@ - Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 RFB) + Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 RFB + 94 SVC-RS + 95 SVC-SP + 96 Sinc. Chaves do RS para SVSP @@ -111,6 +111,7 @@ + @@ -386,6 +387,15 @@ + + + Tipo Modelo Documento Fiscal + + + + + + Tipo Modelo Documento Fiscal diff --git a/CTe.AppTeste/schemas/tiposGeralCTe_v4.00.xsd b/CTe.AppTeste/schemas/tiposGeralCTe_v4.00.xsd new file mode 100644 index 000000000..f3757bab2 --- /dev/null +++ b/CTe.AppTeste/schemas/tiposGeralCTe_v4.00.xsd @@ -0,0 +1,638 @@ + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo ano + + + + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código do Município da tabela do IBGE + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 RFB + 94 SVC-RS + 95 SVC-SP + 96 Sinc. Chaves do RS para SVSP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Chave de Documento Fiscal Eletrônico + + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + Tipo Número do Telefone + + + + + + + + + Tipo Número do CNPJ Opcional + + + + + + + + + Tipo Número do CPF + + + + + + + + + Tipo Número do CPF de tamanho variável (3-11) + + + + + + + + + Tipo data AAAA-MM-DD + + + + + + + + + Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com 6 dígitos, sendo 3 de corpo e 3 decimais + + + + + + + + + Tipo Decimal com 6 ou 5 dígitos, sendo 3 de corpo e 3 ou 2 decimais + + + + + + + + + Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais + + + + + + + + + Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4decimais + + + + + + + + + Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 9 de corpo e 6 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais + + + + + + + + + Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Inscrição Estadual do Emitente + + + + + + + + + + Tipo Inscrição Estadual do Destinatário + + + + + + + + + + Tipo Justificativa + + + + + + + + + Tipo temp médio em segundos + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + Tipo Modelo Documento Fiscal - NF Remetente + + + + + + + + + + Tipo da Unidade de Transporte + + + + + + + + + + + + + + + Tipo da Unidade de Carga + + + + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo Número do Documento Fiscal + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + Tipo Número do Recibo do envio de lote de NF-e + + + + + + + + + Tipo Série do Documento Fiscal + + + + + + + + + Tipo Serviço solicitado + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo Sigla da UF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Sigla da UF, sem Exterior + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Coordenada geográfica Latitude + + + + + + + + Coordenada geográfica Longitude + + + + + + + + Tipo IP versão 4 + + + + + + + + + Tipo Placa + + + + + + + + + Tipo que representa uma chave publica padrão RSA + + + + + + + diff --git a/CTe.Classes.Standard/CTe.Classes.Standard.csproj b/CTe.Classes.Standard/CTe.Classes.Standard.csproj deleted file mode 100644 index 24b0b82ed..000000000 --- a/CTe.Classes.Standard/CTe.Classes.Standard.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - netstandard2.0 - - - - - - - - - - diff --git a/CTe.Classes/CTe.Classes.csproj b/CTe.Classes/CTe.Classes.csproj index 357cd6264..41132d50f 100644 --- a/CTe.Classes/CTe.Classes.csproj +++ b/CTe.Classes/CTe.Classes.csproj @@ -1,72 +1,13 @@ - - - + + - Debug - AnyCPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13} - Library - Properties - CTe.Classes - CTe.Classes - v4.5 - 512 - - SAK - SAK - SAK - SAK + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - + - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - DFe.Utils - + + - - - - - \ No newline at end of file + + diff --git a/CTe.Classes/CTe.Classes.csproj.vspscc b/CTe.Classes/CTe.Classes.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/CTe.Classes/CTe.Classes.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Shared.CTe.Classes/CTe.cs b/CTe.Classes/CTe.cs similarity index 97% rename from Shared.CTe.Classes/CTe.cs rename to CTe.Classes/CTe.cs index b18002bdf..fd229efee 100644 --- a/Shared.CTe.Classes/CTe.cs +++ b/CTe.Classes/CTe.cs @@ -64,6 +64,9 @@ public string ProxyVersao if(value.Equals("3.00")) versao = Servicos.Tipos.versao.ve300; + + if (value.Equals("4.00")) + versao = Servicos.Tipos.versao.ve400; } } diff --git a/Shared.CTe.Classes/CTeOutrosServicos/CTeOS.cs b/CTe.Classes/CTeOutrosServicos/CTeOS.cs similarity index 95% rename from Shared.CTe.Classes/CTeOutrosServicos/CTeOS.cs rename to CTe.Classes/CTeOutrosServicos/CTeOS.cs index d4d07342d..d42831c59 100644 --- a/Shared.CTe.Classes/CTeOutrosServicos/CTeOS.cs +++ b/CTe.Classes/CTeOutrosServicos/CTeOS.cs @@ -12,7 +12,7 @@ public class CTeOS { public CTeOS() { - versao = VersaoServico.Versao300; + versao = VersaoServico.Versao400; } [XmlAttribute] diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Constantes/StatusAutorizacao.cs b/CTe.Classes/CTeOutrosServicos/Constantes/StatusAutorizacao.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Constantes/StatusAutorizacao.cs rename to CTe.Classes/CTeOutrosServicos/Constantes/StatusAutorizacao.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Extensoes/extretCteOS.cs b/CTe.Classes/CTeOutrosServicos/Extensoes/extretCteOS.cs similarity index 85% rename from Shared.CTe.Classes/CTeOutrosServicos/Extensoes/extretCteOS.cs rename to CTe.Classes/CTeOutrosServicos/Extensoes/extretCteOS.cs index 839f61d8a..4998f21c9 100644 --- a/Shared.CTe.Classes/CTeOutrosServicos/Extensoes/extretCteOS.cs +++ b/CTe.Classes/CTeOutrosServicos/Extensoes/extretCteOS.cs @@ -35,23 +35,10 @@ public static void SalvarXmlEmDisco(this retCTeOS retEnviCte, ConfiguracaoServic { if (config.NaoSalvarXml()) return; - var dataEnvio = DateTimeOffset.Now; - - if (retEnviCte != null && retEnviCte.protCTe != null - && retEnviCte.protCTe.infProt != null - && retEnviCte.protCTe.infProt.dhRecbto != null) - { - dataEnvio = retEnviCte.protCTe.infProt.dhRecbto; - } - var caminhoXml = config.DiretorioSalvarXml; - var protocolo = "000000"; - - - if (retEnviCte != null && retEnviCte.protCTe != null - && retEnviCte.protCTe.infProt != null - && retEnviCte.protCTe.infProt.nProt != null) + + if (retEnviCte?.protCTe?.infProt?.nProt != null) { protocolo = retEnviCte.protCTe.infProt.nProt; } diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Complemento/complOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Complemento/complOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Complemento/complOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Complemento/complOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Emitente/emitOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Emitente/emitOs.cs similarity index 91% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Emitente/emitOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Emitente/emitOs.cs index 9676969dd..e4f370468 100644 --- a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Emitente/emitOs.cs +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/Emitente/emitOs.cs @@ -51,5 +51,14 @@ public class emitOs public string xFant { get; set; } public enderEmit enderEmit { get; set; } + + /// + /// Versão 4.00 é Obrigatório + /// + public CRT? CRT { get; set; } + /// + /// Se null, não aparece no xml + /// + public bool CRTSpecified { get { return CRT.HasValue; } } } } diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Identificacao/ideOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Identificacao/ideOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Identificacao/ideOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Identificacao/ideOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs similarity index 93% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs index 64d234b4d..058428168 100644 --- a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs @@ -22,5 +22,7 @@ public decimal? vTotTrib public ICMSUFFim ICMSUFFim { get; set; } public infTribFed infTribFed { get; set; } + + public IBSCBS IBSCBS { get; set; } } } \ No newline at end of file diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/infTribFed.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/infTribFed.cs similarity index 98% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/infTribFed.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/infTribFed.cs index 610843f8e..e252c7de8 100644 --- a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/infTribFed.cs +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/infTribFed.cs @@ -33,7 +33,7 @@ using DFe.Classes; -namespace DFe.DocumentosEletronicos.CTe.CTeOS.Informacoes.Impostos +namespace CTe.Classes.CTeOutrosServicos.Informacoes.Impostos { public class infTribFed { diff --git a/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobr.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobr.cs new file mode 100644 index 000000000..528bc808e --- /dev/null +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobr.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Xml.Serialization; +using System; +using CTe.CTeOSDocumento.CTe.CTeOS.Informacoes.InfCTeNormal.cobrancas; + +namespace CTe.CTeOSDocumento.CTe.CTeOS.Informacoes.InfCTeNormal +{ + [Serializable] + public class cobr + { + [XmlElement("fat", Order = 1)] + public fat fat { get; set; } + + [XmlElement("dup", Order = 2)] + public List dup; + } +} \ No newline at end of file diff --git a/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobrancas/dup.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobrancas/dup.cs new file mode 100644 index 000000000..fb09d57e4 --- /dev/null +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobrancas/dup.cs @@ -0,0 +1,36 @@ +using System; +using System.Xml.Serialization; +using DFe.Classes; +using DFe.Utils; + +namespace CTe.CTeOSDocumento.CTe.CTeOS.Informacoes.InfCTeNormal.cobrancas +{ + public class dup + { + private decimal? _vDup; + public string nDup { get; set; } + + [XmlIgnore] + public DateTime? dVenc { get; set; } + + [XmlElement(ElementName = "dVenc")] + public string ProxydVenc + { + get + { + if (dVenc == null) return null; + + return dVenc.Value.ParaDataString(); + } + set { dVenc = Convert.ToDateTime(value); } + } + + public decimal? vDup + { + get { return _vDup.Arredondar(2); } + set { _vDup = value.Arredondar(2); } + } + + public bool vDupSpecified { get { return vDup.HasValue; } } + } +} \ No newline at end of file diff --git a/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobrancas/fat.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobrancas/fat.cs new file mode 100644 index 000000000..077921f91 --- /dev/null +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/cobrancas/fat.cs @@ -0,0 +1,35 @@ +using DFe.Classes; + +namespace CTe.CTeOSDocumento.CTe.CTeOS.Informacoes.InfCTeNormal.cobrancas +{ + public class fat + { + private decimal? _vOrig; + private decimal? _vDesc; + private decimal? _vLiq; + public string nFat { get; set; } + + public decimal? vOrig + { + get { return _vOrig.Arredondar(2); } + set { _vOrig = value.Arredondar(2); } + } + + public decimal? vDesc + { + get { return _vDesc.Arredondar(2); } + set { _vDesc = value.Arredondar(2); } + } + + public decimal? vLiq + { + get { return _vLiq.Arredondar(2); } + set { _vLiq = value.Arredondar(2); } + } + + + public bool vOrigSpecified { get { return vOrig.HasValue; } } + public bool vDescSpecified { get { return vDesc.HasValue; } } + public bool vLiqSpecified { get { return vLiq.HasValue; } } + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCTeNormOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCTeNormOs.cs similarity index 89% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCTeNormOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCTeNormOs.cs index 298b1e2b5..5af2ef283 100644 --- a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCTeNormOs.cs +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCTeNormOs.cs @@ -19,5 +19,8 @@ public class infCTeNormOs [XmlElement("infCteSub")] public infCteSubOs infCteSub { get; set; } + + [XmlElement("cobr")] + public cobr cobr { get; set; } } } \ No newline at end of file diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCteSubOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCteSubOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCteSubOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infCteSubOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infDocRef.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infDocRef.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infDocRef.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infDocRef.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infModalOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infModalOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infModalOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infModalOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infQOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infQOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infQOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/infQOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/rodoOS.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/rodoOS.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/rodoOS.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/rodoOS.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/segOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/segOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/segOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/segOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/veicOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/veicOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/veicOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/InfCTeOutrosServicosNormal/veicOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/enderTomaOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/enderTomaOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/enderTomaOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/enderTomaOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/tomaOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/tomaOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/tomaOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Tomador/tomaOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Valores/vPrestOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Valores/vPrestOs.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/Valores/vPrestOs.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/Valores/vPrestOs.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/infCteOS.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/infCteOS.cs similarity index 95% rename from Shared.CTe.Classes/CTeOutrosServicos/Informacoes/infCteOS.cs rename to CTe.Classes/CTeOutrosServicos/Informacoes/infCteOS.cs index 03aa4da3f..0d7fe7c62 100644 --- a/Shared.CTe.Classes/CTeOutrosServicos/Informacoes/infCteOS.cs +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/infCteOS.cs @@ -48,7 +48,8 @@ public class infCteOS public infCteAnu infCteAnu { get; set; } - public List autXml { get; set; } + [XmlElement("autXML")] + public List autXML { get; set; } [XmlElement(ElementName = "infRespTec")] public infRespTec infRespTec { get; set; } diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Retorno/cteOSProc.cs b/CTe.Classes/CTeOutrosServicos/Retorno/cteOSProc.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Retorno/cteOSProc.cs rename to CTe.Classes/CTeOutrosServicos/Retorno/cteOSProc.cs diff --git a/Shared.CTe.Classes/CTeOutrosServicos/Retorno/retCTeOS.cs b/CTe.Classes/CTeOutrosServicos/Retorno/retCTeOS.cs similarity index 100% rename from Shared.CTe.Classes/CTeOutrosServicos/Retorno/retCTeOS.cs rename to CTe.Classes/CTeOutrosServicos/Retorno/retCTeOS.cs diff --git a/CTe.Classes/ConfiguracaoServico.cs b/CTe.Classes/ConfiguracaoServico.cs new file mode 100644 index 000000000..8020a38f8 --- /dev/null +++ b/CTe.Classes/ConfiguracaoServico.cs @@ -0,0 +1,205 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using CTe.Classes.Informacoes.Tipos; +using CTe.Classes.Servicos.Tipos; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using DFe.Utils; +using DFe.Utils.Assinatura; + +namespace CTe.Classes +{ + public sealed class ConfiguracaoServico : IDisposable + { + private static volatile ConfiguracaoServico _instancia; + private static readonly object SyncRoot = new object(); + private string _diretorioSchemas; + private bool _unZip = true; + + public ConfiguracaoServico() + { + ConfiguracaoCertificado = new ConfiguracaoCertificado(); + TipoEmissao = tpEmis.teNormal; + IsValidaSchemas = true; + } + + /// + /// Configurações relativas ao Certificado Digital + /// + public ConfiguracaoCertificado ConfiguracaoCertificado { get; set; } + + private X509Certificate2 _certificado = null; + public X509Certificate2 X509Certificate2 + { + get + { + if (this._certificado != null) + if (!this.ConfiguracaoCertificado.ManterDadosEmCache) + this._certificado.Reset(); + _certificado = ObterCertificado(); + return _certificado; + } + } + + private X509Certificate2 ObterCertificado() + { + return CertificadoDigital.ObterCertificado(ConfiguracaoCertificado); + } + + public void Dispose() + { + if (!this.ConfiguracaoCertificado.ManterDadosEmCache && _certificado != null) + { + _certificado.Reset(); + _certificado = null; + } + } + + ~ConfiguracaoServico() + { + if (!this.ConfiguracaoCertificado.ManterDadosEmCache && _certificado != null) + { + _certificado.Reset(); + _certificado = null; + } + } + + /// + /// Tempo máximo de espera pela resposta do webservice, em milisegundos + /// + public int TimeOut { get; set; } + + /// + /// Estado de destino do webservice + /// + public Estado cUF { get; set; } + + /// + /// Tipo de ambiente do webservice (Produção, Homologação) + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// Versão do layout + /// + public versao VersaoLayout { get; set; } + + public versao ObterVersaoLayoutValida() + { + switch (VersaoLayout) + { + case versao.ve200: + return versao.ve200; + case versao.ve300: + return versao.ve300; + case versao.ve400: + return versao.ve400; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public bool IsAdicionaQrCode { get; set; } + + /// + /// Diretório onde estão aramazenados os schemas para validação + /// + public string DiretorioSchemas + { + get { return _diretorioSchemas; } + set + { + if (!string.IsNullOrEmpty(value) && !Directory.Exists(value)) + throw new Exception("Diretório " + value + " não encontrado!"); + _diretorioSchemas = value; + } + } + + /// + /// Informar se a biblioteca deve salvar o xml de envio e de retorno + /// + public bool IsSalvarXml { get; set; } + + /// + /// Diretório onde os xmls de envio/retorno devem ser salvos + /// + public string DiretorioSalvarXml { get; set; } + + /// + /// Valor True, será descompactado os arquivos, + /// Valor False, os valor não será descompactado e a classes não serão preenchidas + /// + public bool UnZip + { + get + { + return _unZip; + } + set + { + _unZip = value; + } + } + + /// + /// Instância do Singleton de ConfiguracaoServico + /// + public static ConfiguracaoServico Instancia + { + get + { + if (_instancia != null) return _instancia; + lock (SyncRoot) + { + if (_instancia != null) return _instancia; + _instancia = new ConfiguracaoServico(); + } + + return _instancia; + } + } + + public tpEmis TipoEmissao { get; set; } + + public bool IsValidaSchemas { get; set; } + + public bool NaoSalvarXml() + { + return !IsSalvarXml; + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/Ext/extversao.cs b/CTe.Classes/Ext/extversao.cs similarity index 91% rename from Shared.CTe.Classes/Ext/extversao.cs rename to CTe.Classes/Ext/extversao.cs index ca7b8ce31..11871ab78 100644 --- a/Shared.CTe.Classes/Ext/extversao.cs +++ b/CTe.Classes/Ext/extversao.cs @@ -41,12 +41,14 @@ public static string GetString(this versao versao) { switch (versao) { - case versao.ve200: + case versao.ve200: return "2.00"; - case versao.ve300: + case versao.ve300: return "3.00"; + case versao.ve400: + return "4.00"; default: - throw new InvalidOperationException("A emissão do CT-e possui apenas a versão 2.00 é 3.00"); + throw new InvalidOperationException("Versão de CT-e inválida. Para emissão apenas as versões 2.00, 3.00 e 4.00 são aceitas."); } } } diff --git a/CTe.Classes/Informacoes/Complemento/Comp.cs b/CTe.Classes/Informacoes/Complemento/Comp.cs new file mode 100644 index 000000000..dae5905ef --- /dev/null +++ b/CTe.Classes/Informacoes/Complemento/Comp.cs @@ -0,0 +1,49 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Complemento +{ + public class Comp + { + private string _xNome; + private decimal _vComp; + + public string xNome { get { return _xNome; } set { _xNome = value; } } + public decimal vComp + { + get { return _vComp.Arredondar(2); } + set { _vComp = value.Arredondar(2); } + } + } +} diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Entrega.cs b/CTe.Classes/Informacoes/Complemento/Entrega.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Entrega.cs rename to CTe.Classes/Informacoes/Complemento/Entrega.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Entrega/comData.cs b/CTe.Classes/Informacoes/Complemento/Entrega/comData.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Entrega/comData.cs rename to CTe.Classes/Informacoes/Complemento/Entrega/comData.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Entrega/comHora.cs b/CTe.Classes/Informacoes/Complemento/Entrega/comHora.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Entrega/comHora.cs rename to CTe.Classes/Informacoes/Complemento/Entrega/comHora.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Entrega/noInter.cs b/CTe.Classes/Informacoes/Complemento/Entrega/noInter.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Entrega/noInter.cs rename to CTe.Classes/Informacoes/Complemento/Entrega/noInter.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Entrega/noPeriodo.cs b/CTe.Classes/Informacoes/Complemento/Entrega/noPeriodo.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Entrega/noPeriodo.cs rename to CTe.Classes/Informacoes/Complemento/Entrega/noPeriodo.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Entrega/semData.cs b/CTe.Classes/Informacoes/Complemento/Entrega/semData.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Entrega/semData.cs rename to CTe.Classes/Informacoes/Complemento/Entrega/semData.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Entrega/semHora.cs b/CTe.Classes/Informacoes/Complemento/Entrega/semHora.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Entrega/semHora.cs rename to CTe.Classes/Informacoes/Complemento/Entrega/semHora.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/ObsCont.cs b/CTe.Classes/Informacoes/Complemento/ObsCont.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/ObsCont.cs rename to CTe.Classes/Informacoes/Complemento/ObsCont.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/ObsFisco.cs b/CTe.Classes/Informacoes/Complemento/ObsFisco.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/ObsFisco.cs rename to CTe.Classes/Informacoes/Complemento/ObsFisco.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Tipos/EntregaTipos.cs b/CTe.Classes/Informacoes/Complemento/Tipos/EntregaTipos.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/Tipos/EntregaTipos.cs rename to CTe.Classes/Informacoes/Complemento/Tipos/EntregaTipos.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/compl.cs b/CTe.Classes/Informacoes/Complemento/compl.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/compl.cs rename to CTe.Classes/Informacoes/Complemento/compl.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/fluxo.cs b/CTe.Classes/Informacoes/Complemento/fluxo.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/fluxo.cs rename to CTe.Classes/Informacoes/Complemento/fluxo.cs diff --git a/Shared.CTe.Classes/Informacoes/Complemento/pass.cs b/CTe.Classes/Informacoes/Complemento/pass.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Complemento/pass.cs rename to CTe.Classes/Informacoes/Complemento/pass.cs diff --git a/Shared.CTe.Classes/Informacoes/Destinatario/dest.cs b/CTe.Classes/Informacoes/Destinatario/dest.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Destinatario/dest.cs rename to CTe.Classes/Informacoes/Destinatario/dest.cs diff --git a/Shared.CTe.Classes/Informacoes/Destinatario/enderDest.cs b/CTe.Classes/Informacoes/Destinatario/enderDest.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Destinatario/enderDest.cs rename to CTe.Classes/Informacoes/Destinatario/enderDest.cs diff --git a/Shared.CTe.Classes/Informacoes/Destinatario/locEnt.cs b/CTe.Classes/Informacoes/Destinatario/locEnt.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Destinatario/locEnt.cs rename to CTe.Classes/Informacoes/Destinatario/locEnt.cs diff --git a/CTe.Classes/Informacoes/Emitente/emit.cs b/CTe.Classes/Informacoes/Emitente/emit.cs new file mode 100644 index 000000000..741bcc03f --- /dev/null +++ b/CTe.Classes/Informacoes/Emitente/emit.cs @@ -0,0 +1,64 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace CTe.Classes.Informacoes.Emitente +{ + public class emit + { + public string CNPJ { get; set; } + + public string IE { get; set; } + + /// + /// Versão 3.00 - Não é obrigatório + /// + public string IEST { get; set; } + + public string xNome { get; set; } + + public string xFant { get; set; } + + public enderEmit enderEmit { get; set; } + + + /// + /// Versão 4.00 é Obrigatório + /// + public CRT? CRT { get; set; } + + /// + /// Se null, não aparece no xml + /// + public bool CRTSpecified { get { return CRT.HasValue; } } + } +} diff --git a/CTe.Classes/Informacoes/Emitente/emitTipos.cs b/CTe.Classes/Informacoes/Emitente/emitTipos.cs new file mode 100644 index 000000000..527e4c2be --- /dev/null +++ b/CTe.Classes/Informacoes/Emitente/emitTipos.cs @@ -0,0 +1,71 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.ComponentModel; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Emitente +{ + /// + /// 1 – Simples Nacional; + /// 2 – Simples Nacional – excesso de sublimite de receita bruta; + /// 3 – Regime Normal. (v2.0). + /// + public enum CRT + { + /// + /// 1 – Simples Nacional + /// + [Description("Simples Nacional")] + [XmlEnum("1")] + SimplesNacional = 1, + + /// + /// 2 – Simples Nacional – excesso de sublimite de receita bruta + /// + [Description("Simples Nacional – excesso de sublimite de receita bruta")] + [XmlEnum("2")] + SimplesNacionalExcessoSublimite = 2, + + /// + /// 3 – Regime Normal + /// + [Description("Regime Normal")] + [XmlEnum("3")] + RegimeNormal = 3, + + [Description("Simples Nacional MEI")] + [XmlEnum("4")] + SimplesNacionalMei = 4, + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/Informacoes/Emitente/enderEmit.cs b/CTe.Classes/Informacoes/Emitente/enderEmit.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Emitente/enderEmit.cs rename to CTe.Classes/Informacoes/Emitente/enderEmit.cs diff --git a/Shared.CTe.Classes/Informacoes/Expedidor/enderExped.cs b/CTe.Classes/Informacoes/Expedidor/enderExped.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Expedidor/enderExped.cs rename to CTe.Classes/Informacoes/Expedidor/enderExped.cs diff --git a/Shared.CTe.Classes/Informacoes/Expedidor/exped.cs b/CTe.Classes/Informacoes/Expedidor/exped.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Expedidor/exped.cs rename to CTe.Classes/Informacoes/Expedidor/exped.cs diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/enderToma.cs b/CTe.Classes/Informacoes/Identificacao/enderToma.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Identificacao/enderToma.cs rename to CTe.Classes/Informacoes/Identificacao/enderToma.cs diff --git a/CTe.Classes/Informacoes/Identificacao/gCompraGov.cs b/CTe.Classes/Informacoes/Identificacao/gCompraGov.cs new file mode 100644 index 000000000..1c75654bb --- /dev/null +++ b/CTe.Classes/Informacoes/Identificacao/gCompraGov.cs @@ -0,0 +1,19 @@ +using CTe.Classes.Informacoes.Tipos; +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Identificacao +{ + public class gCompraGov + { + private decimal _pRedutor; + + public TipoEnteGov tpEnteGov { get; set; } + + public decimal pRedutor + { + get => _pRedutor.Arredondar(4); + set => _pRedutor = value.Arredondar(4); + } + + } +} diff --git a/CTe.Classes/Informacoes/Identificacao/ide.cs b/CTe.Classes/Informacoes/Identificacao/ide.cs new file mode 100644 index 000000000..52528c0cf --- /dev/null +++ b/CTe.Classes/Informacoes/Identificacao/ide.cs @@ -0,0 +1,255 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using CTe.Classes.Informacoes.Tipos; +using CTe.Classes.Servicos.Tipos; +using DFe.Classes.Entidades; +using DFe.Classes.Extensoes; +using DFe.Classes.Flags; +using DFe.Utils; + +namespace CTe.Classes.Informacoes.Identificacao +{ + public class ide + { + + public ide(ConfiguracaoServico configuracaoServico = null) + { + _configuracaoServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + } + + public ide() + { + + } + + [XmlIgnore] + private ConfiguracaoServico _configuracaoServico; + + /// + /// B02 - Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + /// + public Estado cUF { get; set; } + + [XmlIgnore] + public int cCT { get; set; } + + [XmlElement(ElementName = "cCT")] + public string ProxycCT + { + get { return this.cCT.ToString("00000000"); } + set { this.cCT = int.Parse(value); } + } + + public int CFOP { get; set; } + + public string natOp { get; set; } + + /// + /// Versão 2.00 + /// + public forPag? forPag { get; set; } + + public bool forPagSpecified { get { return forPag.HasValue; } } + + /// + /// B06 - Modelo do Documento Fiscal + /// + public ModeloDocumento mod { get; set; } + + public short serie { get; set; } + + public long nCT { get; set; } + + /// + /// Versão 3.0 AAAA-MM-DDTHH:MM:DD TZD + /// Versão 2.0 AAAA-MM-DDTHH:MM:DD + /// + [XmlIgnore] + public DateTimeOffset dhEmi { get; set; } + + [XmlElement(ElementName = "dhEmi")] + public string ProxydhEmi + { + get + { + if (_configuracaoServico == null) + _configuracaoServico = ConfiguracaoServico.Instancia; + switch (_configuracaoServico.VersaoLayout) + { + case versao.ve200: + return dhEmi.ParaDataHoraStringSemUtc(); + case versao.ve400: + case versao.ve300: + return dhEmi.ParaDataHoraStringUtc(); + default: + throw new InvalidOperationException("Versão Inválida para CT-e"); + } + } + set { dhEmi = DateTimeOffset.Parse(value); } + } + + public tpImp tpImp { get; set; } + + public tpEmis tpEmis { get; set; } + + public int cDV { get; set; } + + /// + /// B24 - Identificação do Ambiente + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// B11 - Tipo do Documento Fiscal + /// + public tpCTe tpCTe { get; set; } + + /// + /// Versão 3.00 = Informe AplicativoContribuinte ou ContribuinteAplicativoFisco + /// Versão 2.00 = Qualquer uma das opções + /// + public procEmi procEmi { get; set; } + + public string verProc { get; set; } + + /// + /// Versão 3.00 + /// + public byte? indGlobalizado { get; set; } + + /// + /// Se null, não aparece no xml + /// + public bool indGlobalizadoSpecified { get { return indGlobalizado.HasValue; } } + + /// + /// Versão 2.00 + /// + public string refCTE { get; set; } + + public long cMunEnv { get; set; } + + public string xMunEnv { get; set; } + + [XmlIgnore] + public Estado UFEnv { get; set; } + + [XmlElement(ElementName = "UFEnv")] + public string ProxyUFEnv + { + get { return UFEnv.GetSiglaUfString(); } + set { UFEnv = UFEnv.SiglaParaEstado(value); } + } + + public modal modal { get; set; } + + public tpServ tpServ { get; set; } + + public long cMunIni { get; set; } + + public string xMunIni { get; set; } + + [XmlIgnore] + public Estado UFIni { get; set; } + + [XmlElement(ElementName = "UFIni")] + public string ProxyUFIni { get { return UFIni.GetSiglaUfString(); } + set { UFIni = UFIni.SiglaParaEstado(value); } } + + public long cMunFim { get; set; } + + public string xMunFim { get; set; } + + [XmlIgnore] + public Estado UFFim { get; set; } + + [XmlElement(ElementName = "UFFim")] + public string ProxyUFFim { get { return UFFim.GetSiglaUfString(); } set + { + UFFim = UFFim.SiglaParaEstado(value); + } } + + [XmlElement(ElementName = "infPercurso")] + public List infPercurso { get; set; } + + public retira retira { get; set; } + + public string xDetRetira { get; set; } + + /// + /// Versao 3.00 é obrigatório + /// + public indIEToma? indIEToma { get; set; } + + /// + /// Se null, não aparece no xml + /// + public bool indIETomaSpecified { get { return indIEToma.HasValue; } } + + /// + /// Versão 2.00 = toma03 + /// Versão 3.00 = toma3 + /// + [XmlElement("toma03", typeof(toma03))] + [XmlElement("toma3", typeof(toma3))] + public tomaBase3 tomaBase3 { get; set; } + public toma4 toma4 { get; set; } + + [XmlIgnore] + public DateTime? dhCont { get; set; } + + [XmlElement(ElementName = "dhCont")] + public string ProxydhCont + { + get + { + if (dhCont == null) return null; + + return dhCont.Value.ParaDataHoraStringUtc(); + } + set + { + dhCont = Convert.ToDateTime(value); + } + } + + public string xJust { get; set; } + + public gCompraGov gCompraGov { get; set; } + + } +} diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/infPercurso.cs b/CTe.Classes/Informacoes/Identificacao/infPercurso.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Identificacao/infPercurso.cs rename to CTe.Classes/Informacoes/Identificacao/infPercurso.cs diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/toma03.cs b/CTe.Classes/Informacoes/Identificacao/toma03.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Identificacao/toma03.cs rename to CTe.Classes/Informacoes/Identificacao/toma03.cs diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/toma3.cs b/CTe.Classes/Informacoes/Identificacao/toma3.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Identificacao/toma3.cs rename to CTe.Classes/Informacoes/Identificacao/toma3.cs diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/toma4.cs b/CTe.Classes/Informacoes/Identificacao/toma4.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Identificacao/toma4.cs rename to CTe.Classes/Informacoes/Identificacao/toma4.cs diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/tomaBase3.cs b/CTe.Classes/Informacoes/Identificacao/tomaBase3.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Identificacao/tomaBase3.cs rename to CTe.Classes/Informacoes/Identificacao/tomaBase3.cs diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/tomaCteOs.cs b/CTe.Classes/Informacoes/Identificacao/tomaCteOs.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Identificacao/tomaCteOs.cs rename to CTe.Classes/Informacoes/Identificacao/tomaCteOs.cs diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS.cs new file mode 100644 index 000000000..662e47fe7 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS.cs @@ -0,0 +1,74 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using CTe.Classes.Informacoes.Impostos.IBSCBS; +using CTe.Classes.Informacoes.Tipos; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.Tributacao +{ + public class IBSCBS + { + private string _cClassTrib; + + [XmlElement(Order = 1)] + public CSTIBSCBS CST { get; set; } + + [XmlElement(Order = 2)] + public string cClassTrib + { + get => _cClassTrib; + set => _cClassTrib = value; + } + + [XmlElement(Order = 3)] + public short? indDoacao { get; set; } + + [XmlElement(Order = 4)] + public gIBSCBS gIBSCBS { get; set; } + + //define se o campo indDoacao deve ser serializado + public bool ShouldSerializeindDoacao() + { + return indDoacao.HasValue; + } + + /// + /// Define o valor de cClassTrib a partir de um inteiro + /// + public void SetcClassTrib(int intValue) + { + _cClassTrib = intValue.ToString("D6"); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gCBS.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gCBS.cs new file mode 100644 index 000000000..efcad234a --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gCBS.cs @@ -0,0 +1,34 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gCBS + { + private decimal _pGBS; + private decimal _vGBS; + + [XmlElement(Order = 1)] + public decimal pCBS + { + get => _pGBS.Arredondar(4); + set => _pGBS = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public gDif gDif { get; set; } + + [XmlElement(Order = 3)] + public gDevTrib gDevTrib { get; set; } + + [XmlElement(Order = 4)] + public gRed gRed { get; set; } + + [XmlElement(Order = 5)] + public decimal vCBS + { + get => _vGBS.Arredondar(2); + set => _vGBS = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gDevTrib.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDevTrib.cs new file mode 100644 index 000000000..4a185edc9 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDevTrib.cs @@ -0,0 +1,15 @@ +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gDevTrib + { + private decimal _vDevTrib { get; set; } + + public decimal vDevTrib + { + get => _vDevTrib.Arredondar(2); + set => _vDevTrib = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gDif.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDif.cs new file mode 100644 index 000000000..c83dafdc0 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDif.cs @@ -0,0 +1,22 @@ +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gDif + { + private decimal _pDif; + private decimal _vDif; + + public decimal pDif + { + get => _pDif.Arredondar(4); + set => _pDif = value.Arredondar(4); + } + + public decimal vDif + { + get => _vDif.Arredondar(2); + set => _vDif = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gEstornoCred.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gEstornoCred.cs new file mode 100644 index 000000000..bf73ce1a5 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gEstornoCred.cs @@ -0,0 +1,25 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gEstornoCred + { + private decimal _vIBSEstCred; + private decimal _vCBSEstCred; + + [XmlElement(Order = 1)] + public decimal vIBSEstCred + { + get => _vIBSEstCred.Arredondar(2); + set => _vIBSEstCred = value.Arredondar(2); + } + + [XmlElement(Order = 2)] + public decimal vCBSEstCred + { + get => _vCBSEstCred.Arredondar(2); + set => _vCBSEstCred = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSCBS.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSCBS.cs new file mode 100644 index 000000000..9c1bf0136 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSCBS.cs @@ -0,0 +1,48 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gIBSCBS + { + private decimal _vBc; + private decimal? _vIbs; + + [XmlElement(Order = 1)] + public decimal vBC + { + get => _vBc.Arredondar(2); + set => _vBc = value.Arredondar(2); + } + + [XmlElement(Order = 2)] + public gIBSUF gIBSUF { get; set; } + + [XmlElement(Order = 3)] + public gIBSMun gIBSMun { get; set; } + + [XmlElement(Order = 4)] + public decimal? vIBS + { + get => _vIbs.Arredondar(2); + set => _vIbs = value.Arredondar(2); + } + + [XmlElement(Order = 5)] + public gCBS gCBS { get; set; } + + [XmlElement(Order = 6)] + public gTribRegular gTribRegular { get; set; } + + [XmlElement(Order = 7)] + public gTribCompraGov gTribCompraGov { get; set; } + + [XmlElement(Order = 8)] + public gEstornoCred gEstornoCred { get; set; } + + public bool vIBSSpecified + { + get { return vIBS.HasValue; } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSMun.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSMun.cs new file mode 100644 index 000000000..afbdb5b3e --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSMun.cs @@ -0,0 +1,34 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gIBSMun + { + private decimal _pIbsMun; + private decimal _vIbsMun; + + [XmlElement(Order = 1)] + public decimal pIBSMun + { + get => _pIbsMun.Arredondar(4); + set => _pIbsMun = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public gDif gDif { get; set; } + + [XmlElement(Order = 3)] + public gDevTrib gDevTrib { get; set; } + + [XmlElement(Order = 4)] + public gRed gRed { get; set; } + + [XmlElement(Order = 5)] + public decimal vIBSMun + { + get => _vIbsMun.Arredondar(2); + set => _vIbsMun = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSUF.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSUF.cs new file mode 100644 index 000000000..e0a5600e2 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSUF.cs @@ -0,0 +1,35 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gIBSUF + { + private decimal _pIbsUf; + private decimal _vIbsUf; + + [XmlElement(Order = 1)] + public decimal pIBSUF + { + get => _pIbsUf.Arredondar(4); + set => _pIbsUf = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public gDif gDif { get; set; } + + [XmlElement(Order = 3)] + public gDevTrib gDevTrib { get; set; } + + [XmlElement(Order = 4)] + public gRed gRed { get; set; } + + [XmlElement(Order = 5)] + public decimal vIBSUF + { + get => _vIbsUf.Arredondar(2); + set => _vIbsUf = value.Arredondar(2); + } + } + +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gRed.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gRed.cs new file mode 100644 index 000000000..bed8183a1 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gRed.cs @@ -0,0 +1,22 @@ +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gRed + { + private decimal _pRedAliq; + private decimal _pAliqEfet; + + public decimal pRedAliq + { + get => _pRedAliq.Arredondar(4); + set => _pRedAliq = value.Arredondar(4); + } + + public decimal pAliqEfet + { + get => _pAliqEfet.Arredondar(4); + set => _pAliqEfet = value.Arredondar(4); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribCompraGov.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribCompraGov.cs new file mode 100644 index 000000000..cf8ef7abf --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribCompraGov.cs @@ -0,0 +1,57 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gTribCompraGov + { + private decimal _pAliqIbsUf; + private decimal _vTribIbsUf; + private decimal _pAliqIbsMun; + private decimal _vTribIbsMun; + private decimal _pAliqCbs; + private decimal _vTribCbs; + + [XmlElement(Order = 1)] + public decimal pAliqIBSUF + { + get => _pAliqIbsUf.Arredondar(4); + set => _pAliqIbsUf = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public decimal vTribIBSUF + { + get => _vTribIbsUf.Arredondar(2); + set => _vTribIbsUf = value.Arredondar(2); + } + + [XmlElement(Order = 3)] + public decimal pAliqIBSMun + { + get => _pAliqIbsMun.Arredondar(4); + set => _pAliqIbsMun = value.Arredondar(4); + } + + [XmlElement(Order = 4)] + public decimal vTribIBSMun + { + get => _vTribIbsMun.Arredondar(2); + set => _vTribIbsMun = value.Arredondar(2); + } + + [XmlElement(Order = 5)] + public decimal pAliqCBS + { + get => _pAliqCbs.Arredondar(4); + set => _pAliqCbs = value.Arredondar(4); + } + + [XmlElement(Order = 6)] + public decimal vTribCBS + { + get => _vTribCbs.Arredondar(2); + set => _vTribCbs = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribRegular.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribRegular.cs new file mode 100644 index 000000000..43600dfbd --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribRegular.cs @@ -0,0 +1,77 @@ +using CTe.Classes.Informacoes.Tipos; +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gTribRegular + { + private string _cClassTribReg; + private decimal _pAliqEfetRegIbsUf; + private decimal _vTribRegIbsUf; + private decimal _pAliqEfetRegIbsMun; + private decimal _vTribRegIbsMun; + private decimal _pAliqEfetRegCbs; + private decimal _vTribRegCbs; + + [XmlElement(Order = 1)] + public CSTIBSCBS CSTReg { get; set; } + + [XmlElement(Order = 2)] + public string cClassTribReg + { + get => _cClassTribReg; + set => _cClassTribReg = value; + } + + [XmlElement(Order = 3)] + public decimal pAliqEfetRegIBSUF + { + get => _pAliqEfetRegIbsUf.Arredondar(4); + set => _pAliqEfetRegIbsUf = value.Arredondar(4); + } + + [XmlElement(Order = 4)] + public decimal vTribRegIBSUF + { + get => _vTribRegIbsUf.Arredondar(2); + set => _vTribRegIbsUf = value.Arredondar(2); + } + + [XmlElement(Order = 5)] + public decimal pAliqEfetRegIBSMun + { + get => _pAliqEfetRegIbsMun.Arredondar(4); + set => _pAliqEfetRegIbsMun = value.Arredondar(4); + } + + [XmlElement(Order = 6)] + public decimal vTribRegIBSMun + { + get => _vTribRegIbsMun.Arredondar(2); + set => _vTribRegIbsMun = value.Arredondar(2); + } + + [XmlElement(Order = 7)] + public decimal pAliqEfetRegCBS + { + get => _pAliqEfetRegCbs.Arredondar(4); + set => _pAliqEfetRegCbs = value.Arredondar(4); + } + + [XmlElement(Order = 8)] + public decimal vTribRegCBS + { + get => _vTribRegCbs.Arredondar(2); + set => _vTribRegCbs = value.Arredondar(2); + } + + /// + /// Define o valor de cClassTrib a partir de um inteiro + /// + public void SetcClassTrib(int intValue) + { + _cClassTribReg = intValue.ToString("D6"); + } + } +} diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS.cs b/CTe.Classes/Informacoes/Impostos/ICMS.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS.cs rename to CTe.Classes/Informacoes/Impostos/ICMS.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS00.cs b/CTe.Classes/Informacoes/Impostos/ICMS/ICMS00.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS00.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/ICMS00.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS20.cs b/CTe.Classes/Informacoes/Impostos/ICMS/ICMS20.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS20.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/ICMS20.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS45.cs b/CTe.Classes/Informacoes/Impostos/ICMS/ICMS45.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS45.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/ICMS45.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS60.cs b/CTe.Classes/Informacoes/Impostos/ICMS/ICMS60.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS60.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/ICMS60.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS90.cs b/CTe.Classes/Informacoes/Impostos/ICMS/ICMS90.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMS90.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/ICMS90.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMSOutraUF.cs b/CTe.Classes/Informacoes/Impostos/ICMS/ICMSOutraUF.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMSOutraUF.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/ICMSOutraUF.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMSSN.cs b/CTe.Classes/Informacoes/Impostos/ICMS/ICMSSN.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/ICMSSN.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/ICMSSN.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMS/Tipos/ICMSBasico.cs b/CTe.Classes/Informacoes/Impostos/ICMS/Tipos/ICMSBasico.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMS/Tipos/ICMSBasico.cs rename to CTe.Classes/Informacoes/Impostos/ICMS/Tipos/ICMSBasico.cs diff --git a/Shared.CTe.Classes/Informacoes/Impostos/ICMSUFFim.cs b/CTe.Classes/Informacoes/Impostos/ICMSUFFim.cs similarity index 87% rename from Shared.CTe.Classes/Informacoes/Impostos/ICMSUFFim.cs rename to CTe.Classes/Informacoes/Impostos/ICMSUFFim.cs index 9c61f06cf..9702a177d 100644 --- a/Shared.CTe.Classes/Informacoes/Impostos/ICMSUFFim.cs +++ b/CTe.Classes/Informacoes/Impostos/ICMSUFFim.cs @@ -45,6 +45,8 @@ public class ICMSUFFim private decimal _vFcpufFim; private decimal _vIcmsufFim; private decimal _vIcmsufIni; + private decimal? _vIcmsRel; + private decimal? _pIcmsRel; public decimal vBCUFFim { @@ -78,10 +80,19 @@ public decimal? pICMSInterPart public bool pICMSInterPartSpecified { - get - { - return this._pIcmsInterPart.HasValue; - } + get { return this._pIcmsInterPart.HasValue; } + } + + + public decimal? pICMSRel + { + get { return _pIcmsRel.Arredondar(2); } + set { _pIcmsRel = value.Arredondar(2); } + } + + public bool pICMSRelSpecified + { + get { return _pIcmsRel.HasValue; } } public decimal vFCPUFFim @@ -101,5 +112,16 @@ public decimal vICMSUFIni get { return _vIcmsufIni.Arredondar(2); } set { _vIcmsufIni = value.Arredondar(2); } } + + public decimal? vICMSRel + { + get { return _vIcmsRel.Arredondar(2); } + set { _vIcmsRel = value.Arredondar(2); } + } + + public bool vICMSRelSpecified + { + get { return _vIcmsRel.HasValue; } + } } } \ No newline at end of file diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesCbs/gCBS.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesCbs/gCBS.cs new file mode 100644 index 000000000..e945b2bb8 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesCbs/gCBS.cs @@ -0,0 +1,80 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs; +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs.InformacoesCbs +{ + /// + /// Grupo de Informações da CBS + /// + public class gCBS + { + private decimal _pCbs; + private decimal _vCbs; + + /// + /// Alíquota da CBS (em percentual) + /// + public decimal pCBS + { + get { return _pCbs.Arredondar(2); } + set { _pCbs = value.Arredondar(2); } + } + + /// + /// Grupo de Informações do Diferimento + /// + public gDif gDif { get; set; } + + /// + /// Grupo de Informações da Devolução de Tributos + /// + public gDevTrib gDevTrib { get; set; } + + /// + /// Grupo de Informações da Redução da Alíquota + /// + public gRed gRed { get; set; } + + /// + /// Valor da CBS + /// + public decimal vCBS + { + get { return _vCbs.Arredondar(2); } + set { _vCbs = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesIbs/gIBSMun.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesIbs/gIBSMun.cs new file mode 100644 index 000000000..8614d32ed --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesIbs/gIBSMun.cs @@ -0,0 +1,80 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs; +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs.InformacoesIbs +{ + /// + /// Grupo de Informações do IBS para o município + /// + public class gIBSMun + { + private decimal _pIbsMun; + private decimal _vIbsMun; + + /// + /// Alíquota do IBS de competência do Município (em percentual) + /// + public decimal pIBSMun + { + get { return _pIbsMun.Arredondar(2); } + set { _pIbsMun = value.Arredondar(2); } + } + + /// + /// Grupo de Informações do Diferimento + /// + public gDif gDif { get; set; } + + /// + /// Grupo de Informações da Devolução de Tributos + /// + public gDevTrib gDevTrib { get; set; } + + /// + /// Grupo de Informações da Redução da Alíquota + /// + public gRed gRed { get; set; } + + /// + /// Valor do IBS de competência do Município + /// + public decimal vIBSMun + { + get { return _vIbsMun.Arredondar(2); } + set { _vIbsMun = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesIbs/gIBSUF.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesIbs/gIBSUF.cs new file mode 100644 index 000000000..35d80de21 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/InformacoesIbs/gIBSUF.cs @@ -0,0 +1,80 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs; +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs.InformacoesIbs +{ + /// + /// Grupo de Informações do IBS para a UF + /// + public class gIBSUF + { + private decimal _pIbsUf; + private decimal _vIbsUf; + + /// + /// Alíquota do IBS de competência das UF (em percentual) + /// + public decimal pIBSUF + { + get { return _pIbsUf.Arredondar(2); } + set { _pIbsUf = value.Arredondar(2); } + } + + /// + /// Grupo de Informações do Diferimento + /// + public gDif gDif { get; set; } + + /// + /// Grupo de Informações da Devolução de Tributos + /// + public gDevTrib gDevTrib { get; set; } + + /// + /// Grupo de Informações da Redução da Alíquota + /// + public gRed gRed { get; set; } + + /// + /// Valor do IBS de competência da UF + /// + public decimal vIBSUF + { + get { return _vIbsUf.Arredondar(2); } + set { _vIbsUf = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gCBSCredPres.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gCBSCredPres.cs new file mode 100644 index 000000000..ef7dbb1bc --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gCBSCredPres.cs @@ -0,0 +1,79 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Crédito Presumido da CBS + /// + public class gCBSCredPres + { + private decimal _pCredPres; + private decimal _vCredPres; + private decimal _vCredPresCondSus; + + /// + /// Código de Crédito Presumido + /// + public string cCredPres { get; set; } + + /// + /// Percentual de Crédito Presumido (em percentual) + /// + public decimal pCredPres + { + get { return _pCredPres.Arredondar(2); } + set { _pCredPres = value.Arredondar(2); } + } + + /// + /// Valor de Crédito Presumido + /// + public decimal vCredPres + { + get { return _vCredPres.Arredondar(2); } + set { _vCredPres = value.Arredondar(2); } + } + + /// + /// Valor de Crédito Presumido Condicionado ou Suspenso + /// + public decimal vCredPresCondSus + { + get { return _vCredPresCondSus.Arredondar(2); } + set { _vCredPresCondSus = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gDevTrib.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gDevTrib.cs new file mode 100644 index 000000000..960b1940d --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gDevTrib.cs @@ -0,0 +1,54 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Informações da Devolução de Tributos + /// + public class gDevTrib + { + private decimal _vDevTrib; + + /// + /// Valor da devolução de tributos + /// + public decimal vDevTrib + { + get { return _vDevTrib.Arredondar(2); } + set { _vDevTrib = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gDif.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gDif.cs new file mode 100644 index 000000000..6e2d28425 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gDif.cs @@ -0,0 +1,64 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Informações do Diferimento + /// + public class gDif + { + private decimal _pDif; + private decimal _vDif; + + /// + /// Percentual de diferimento (em percentual) + /// + public decimal pDif + { + get { return _pDif.Arredondar(2); } + set { _pDif = value.Arredondar(2); } + } + + /// + /// Valor diferido + /// + public decimal vDif + { + get { return _vDif.Arredondar(2); } + set { _vDif = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gIBSCBS.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gIBSCBS.cs new file mode 100644 index 000000000..ad4c6f6e0 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gIBSCBS.cs @@ -0,0 +1,101 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs.InformacoesCbs; +using CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs.InformacoesIbs; +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Informações do IBS e da CBS + /// + public class gIBSCBS + { + private decimal _vBc; + private decimal _vIbs; + + /// + /// Base de cálculo do IBS e CBS + /// + public decimal vBC + { + get { return _vBc.Arredondar(2); } + set { _vBc = value.Arredondar(2); } + } + + /// + /// Grupo de Informações do IBS para a UF + /// + public gIBSUF gIBSUF { get; set; } + + /// + /// Grupo de Informações do IBS para o município + /// + public gIBSMun gIBSMun { get; set; } + + /// + /// Valor do IBS + /// + public decimal vIBS + { + get { return _vIbs.Arredondar(2); } + set { _vIbs = value.Arredondar(2); } + } + + /// + /// Grupo de Informações da CBS + /// + public gCBS gCBS { get; set; } + + /// + /// Grupo de Informações da Tributação Regular + /// + public gTribRegular gTribRegular { get; set; } + + /// + /// Grupo de Crédito Presumido do IBS + /// + public gIBSCredPres gIBSCredPres { get; set; } + + /// + /// Grupo de Crédito Presumido da CBS + /// + public gCBSCredPres gCBSCredPres { get; set; } + + /// + /// Grupo de Informações da Composição do Valor do IBS e da CBS em Compras Governamentais + /// + public gTribCompraGov gTribCompraGov { get; set; } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gIBSCredPres.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gIBSCredPres.cs new file mode 100644 index 000000000..e9f97ce22 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gIBSCredPres.cs @@ -0,0 +1,79 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Crédito Presumido do IBS + /// + public class gIBSCredPres + { + private decimal _pCredPres; + private decimal _vCredPres; + private decimal _vCredPresCondSus; + + /// + /// Código de Crédito Presumido + /// + public string cCredPres { get; set; } + + /// + /// Percentual de Crédito Presumido (em percentual) + /// + public decimal pCredPres + { + get { return _pCredPres.Arredondar(2); } + set { _pCredPres = value.Arredondar(2); } + } + + /// + /// Valor de Crédito Presumido + /// + public decimal vCredPres + { + get { return _vCredPres.Arredondar(2); } + set { _vCredPres = value.Arredondar(2); } + } + + /// + /// Valor de Crédito Presumido Condicionado ou Suspenso + /// + public decimal vCredPresCondSus + { + get { return _vCredPresCondSus.Arredondar(2); } + set { _vCredPresCondSus = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gRed.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gRed.cs new file mode 100644 index 000000000..6055b6020 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gRed.cs @@ -0,0 +1,64 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Informações da Redução da Alíquota + /// + public class gRed + { + private decimal _pRedAliq; + private decimal _pAliqEfet; + + /// + /// Percentual de redução da alíquota (em percentual) + /// + public decimal pRedAliq + { + get { return _pRedAliq.Arredondar(2); } + set { _pRedAliq = value.Arredondar(2); } + } + + /// + /// Percentual da alíquota efetiva (em percentual) + /// + public decimal pAliqEfet + { + get { return _pAliqEfet.Arredondar(2); } + set { _pAliqEfet = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gTribCompraGov.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gTribCompraGov.cs new file mode 100644 index 000000000..4e7a45567 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gTribCompraGov.cs @@ -0,0 +1,104 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Informações da Composição do Valor do IBS e da CBS em Compras Governamentais + /// + public class gTribCompraGov + { + private decimal _pAliqIBSUF; + private decimal _vTribIBSUF; + private decimal _pAliqIBSMun; + private decimal _vTribIBSMun; + private decimal _pAliqCBS; + private decimal _vTribCBS; + + /// + /// Alíquota do IBS UF nas compras governamentais (em percentual) + /// + public decimal pAliqIBSUF + { + get { return _pAliqIBSUF.Arredondar(2); } + set { _pAliqIBSUF = value.Arredondar(2); } + } + + /// + /// Valor do tributo do IBS UF nas compras governamentais + /// + public decimal vTribIBSUF + { + get { return _vTribIBSUF.Arredondar(2); } + set { _vTribIBSUF = value.Arredondar(2); } + } + + /// + /// Alíquota do IBS Município nas compras governamentais (em percentual) + /// + public decimal pAliqIBSMun + { + get { return _pAliqIBSMun.Arredondar(2); } + set { _pAliqIBSMun = value.Arredondar(2); } + } + + /// + /// Valor do tributo do IBS Município nas compras governamentais + /// + public decimal vTribIBSMun + { + get { return _vTribIBSMun.Arredondar(2); } + set { _vTribIBSMun = value.Arredondar(2); } + } + + /// + /// Alíquota da CBS nas compras governamentais (em percentual) + /// + public decimal pAliqCBS + { + get { return _pAliqCBS.Arredondar(2); } + set { _pAliqCBS = value.Arredondar(2); } + } + + /// + /// Valor do tributo da CBS nas compras governamentais + /// + public decimal vTribCBS + { + get { return _vTribCBS.Arredondar(2); } + set { _vTribCBS = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gTribRegular.cs b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gTribRegular.cs new file mode 100644 index 000000000..9e49e2d1d --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/InformacoesIbsCbs/gTribRegular.cs @@ -0,0 +1,114 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs +{ + /// + /// Grupo de Informações da Tributação Regular + /// + public class gTribRegular + { + private decimal _pAliqEfetRegIBSUF; + private decimal _vTribRegIBSUF; + private decimal _pAliqEfetRegIBSMun; + private decimal _vTribRegIBSMun; + private decimal _pAliqEfetRegCBS; + private decimal _vTribRegCBS; + + /// + /// Código de Situação Tributária da Tributação Regular + /// + public string CSTReg { get; set; } + + /// + /// Código de Classificação Tributária da Tributação Regular + /// + public string cClassTribReg { get; set; } + + /// + /// Percentual da alíquota efetiva da Tributação Regular do IBS UF (em percentual) + /// + public decimal pAliqEfetRegIBSUF + { + get { return _pAliqEfetRegIBSUF.Arredondar(2); } + set { _pAliqEfetRegIBSUF = value.Arredondar(2); } + } + + /// + /// Valor da Tributação Regular do IBS UF + /// + public decimal vTribRegIBSUF + { + get { return _vTribRegIBSUF.Arredondar(2); } + set { _vTribRegIBSUF = value.Arredondar(2); } + } + + /// + /// Percentual da alíquota efetiva da Tributação Regular do IBS Município (em percentual) + /// + public decimal pAliqEfetRegIBSMun + { + get { return _pAliqEfetRegIBSMun.Arredondar(2); } + set { _pAliqEfetRegIBSMun = value.Arredondar(2); } + } + + /// + /// Valor da Tributação Regular do IBS Município + /// + public decimal vTribRegIBSMun + { + get { return _vTribRegIBSMun.Arredondar(2); } + set { _vTribRegIBSMun = value.Arredondar(2); } + } + + /// + /// Percentual da alíquota efetiva da Tributação Regular da CBS (em percentual) + /// + public decimal pAliqEfetRegCBS + { + get { return _pAliqEfetRegCBS.Arredondar(2); } + set { _pAliqEfetRegCBS = value.Arredondar(2); } + } + + /// + /// Valor da Tributação Regular da CBS + /// + public decimal vTribRegCBS + { + get { return _vTribRegCBS.Arredondar(2); } + set { _vTribRegCBS = value.Arredondar(2); } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/Tipos/CstIbsCbs.cs b/CTe.Classes/Informacoes/Impostos/Tipos/CstIbsCbs.cs new file mode 100644 index 000000000..113d9082f --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/Tipos/CstIbsCbs.cs @@ -0,0 +1,66 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.ComponentModel; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.Tipos +{ + /// + /// Código de Situação Tributária do IBS/CBS + /// Conforme NT 2025.001 v1.07 + /// + public enum CstIbsCbs + { + /// + /// 000 - Tributação integral + /// + [XmlEnum("000")] + [Description("Tributação integral")] + Cst000 = 0, + + /// + /// 200 - Alíquota zero + /// + [XmlEnum("200")] + [Description("Alíquota zero")] + Cst200 = 200, + + /// + /// 410 - Imunidade e não incidência + /// + [XmlEnum("410")] + [Description("Imunidade e não incidência")] + Cst410 = 410 + } +} diff --git a/CTe.Classes/Informacoes/Impostos/imp.cs b/CTe.Classes/Informacoes/Impostos/imp.cs new file mode 100644 index 000000000..4527a10c8 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/imp.cs @@ -0,0 +1,77 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emiss�o de Nota Fiscal Eletr�nica - NFe e Nota Fiscal de */ +/* Consumidor Eletr�nica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Voc� pode obter a �ltima vers�o desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca � software livre; voc� pode redistribu�-la e/ou modific�-la */ +/* sob os termos da Licen�a P�blica Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a vers�o 2.1 da Licen�a, ou (a seu crit�rio) */ +/* qualquer vers�o posterior. */ +/* */ +/* Esta biblioteca � distribu�da na expectativa de que seja �til, por�m, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia impl�cita de COMERCIABILIDADE OU */ +/* ADEQUA��O A UMA FINALIDADE ESPEC�FICA. Consulte a Licen�a P�blica Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICEN�A.TXT ou LICENSE.TXT) */ +/* */ +/* Voc� deve ter recebido uma c�pia da Licen�a P�blica Geral Menor do GNU junto*/ +/* com esta biblioteca; se n�o, escreva para a Free Software Foundation, Inc., */ +/* no endere�o 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Voc� tamb�m pode obter uma copia da licen�a em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco jos� da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using CTe.Classes.Informacoes.Impostos.IBSCBS; +using CTe.Classes.Informacoes.Valores; +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos +{ + public class imp + { + public Tributacao.ICMS ICMS { get; set; } + + private decimal? _vTotTrib; + public decimal? vTotTrib + { + get { return _vTotTrib.Arredondar(2); } + set { _vTotTrib = value.Arredondar(2); } + } + + public bool vTotTribSpecified { get { return vTotTrib.HasValue; } } + + public string infAdFisco { get; set; } + + public ICMSUFFim ICMSUFFim { get; set; } + + public infTribFed infTribFed { get; set; } + + + public Tributacao.IBSCBS IBSCBS { get; set; } + + private decimal? _vTotDFe; + /// + /// O total geral do DFe dever� ser a soma do total da presta��o + IBS + CBS + /// vTotDFe = vPrest / vTPrest + gIBSCBS / vIBS + gCBS / vCBS + /// + /// Exce��o: Em 2026 n�o somar IBS e CBS + /// Observa��o: Implementa��o futura + /// + public decimal? vTotDFe + { + get { return _vTotDFe.Arredondar(2); } + set { _vTotDFe = value.Arredondar(2); } + } + + public bool vTotDFeSpecified { get { return vTotDFe.HasValue; } } + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/Informacoes/Impostos/infTribFed.cs b/CTe.Classes/Informacoes/Impostos/infTribFed.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Impostos/infTribFed.cs rename to CTe.Classes/Informacoes/Impostos/infTribFed.cs diff --git a/Shared.CTe.Classes/Informacoes/Recebedor/enderReceb.cs b/CTe.Classes/Informacoes/Recebedor/enderReceb.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Recebedor/enderReceb.cs rename to CTe.Classes/Informacoes/Recebedor/enderReceb.cs diff --git a/Shared.CTe.Classes/Informacoes/Recebedor/receb.cs b/CTe.Classes/Informacoes/Recebedor/receb.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Recebedor/receb.cs rename to CTe.Classes/Informacoes/Recebedor/receb.cs diff --git a/Shared.CTe.Classes/Informacoes/Remetente/enderReme.cs b/CTe.Classes/Informacoes/Remetente/enderReme.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Remetente/enderReme.cs rename to CTe.Classes/Informacoes/Remetente/enderReme.cs diff --git a/Shared.CTe.Classes/Informacoes/Remetente/infNF.cs b/CTe.Classes/Informacoes/Remetente/infNF.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Remetente/infNF.cs rename to CTe.Classes/Informacoes/Remetente/infNF.cs diff --git a/Shared.CTe.Classes/Informacoes/Remetente/infNFe.cs b/CTe.Classes/Informacoes/Remetente/infNFe.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Remetente/infNFe.cs rename to CTe.Classes/Informacoes/Remetente/infNFe.cs diff --git a/Shared.CTe.Classes/Informacoes/Remetente/infOutros.cs b/CTe.Classes/Informacoes/Remetente/infOutros.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Remetente/infOutros.cs rename to CTe.Classes/Informacoes/Remetente/infOutros.cs diff --git a/Shared.CTe.Classes/Informacoes/Remetente/locColeta.cs b/CTe.Classes/Informacoes/Remetente/locColeta.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Remetente/locColeta.cs rename to CTe.Classes/Informacoes/Remetente/locColeta.cs diff --git a/Shared.CTe.Classes/Informacoes/Remetente/locRet.cs b/CTe.Classes/Informacoes/Remetente/locRet.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Remetente/locRet.cs rename to CTe.Classes/Informacoes/Remetente/locRet.cs diff --git a/Shared.CTe.Classes/Informacoes/Remetente/rem.cs b/CTe.Classes/Informacoes/Remetente/rem.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Remetente/rem.cs rename to CTe.Classes/Informacoes/Remetente/rem.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/CL.cs b/CTe.Classes/Informacoes/Tipos/CL.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/CL.cs rename to CTe.Classes/Informacoes/Tipos/CL.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/CST.cs b/CTe.Classes/Informacoes/Tipos/CST.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/CST.cs rename to CTe.Classes/Informacoes/Tipos/CST.cs diff --git a/CTe.Classes/Informacoes/Tipos/CSTIBSCBS.cs b/CTe.Classes/Informacoes/Tipos/CSTIBSCBS.cs new file mode 100644 index 000000000..36b3c62b5 --- /dev/null +++ b/CTe.Classes/Informacoes/Tipos/CSTIBSCBS.cs @@ -0,0 +1,80 @@ +using System.ComponentModel; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Tipos +{ + public enum CSTIBSCBS + { + [Description("Tributação integral")] + [XmlEnum("000")] + cst000 = 000, + + [Description("Tributação com alíquotas uniformes")] + [XmlEnum("010")] + cst010 = 010, + + [Description("Tributação com alíquotas uniformes reduzidas")] + [XmlEnum("011")] + cst011 = 011, + + [Description("Alíquota reduzida")] + [XmlEnum("200")] + cst200 = 200, + + [Description("Alíquota fixa")] + [XmlEnum("220")] + cst220 = 220, + + [Description("Alíquota fixa rateada")] + [XmlEnum("221")] + cst221 = 221, + + [Description("Redução de Base de Cálculo")] + [XmlEnum("222")] + cst222 = 222, + + [Description("Isenção")] + [XmlEnum("400")] + cst400 = 400, + + [Description("Imunidade e não incidência")] + [XmlEnum("410")] + cst410 = 410, + + [Description("Diferimento")] + [XmlEnum("510")] + cst510 = 510, + + [Description("Diferimento com redução de alíquota")] + [XmlEnum("515")] + cst515 = 515, + + [Description("Suspensão")] + [XmlEnum("550")] + cst550 = 550, + + [Description("Tributação Monofásica")] + [XmlEnum("620")] + cst620 = 620, + + [Description("Transferência de crédito")] + [XmlEnum("800")] + cst800 = 800, + + [Description("Ajuste de IBS na ZFM")] + [XmlEnum("810")] + cst810 = 810, + + [Description("Ajustes")] + [XmlEnum("811")] + cst811 = 811, + + [Description("Tributação em declaração de regime específico")] + [XmlEnum("820")] + cst820 = 820, + + [Description("Exclusão da Base de Cálculo")] + [XmlEnum("830")] + cst830 = 830, + } +} diff --git a/Shared.CTe.Classes/Informacoes/Tipos/ConsumidorFinal.cs b/CTe.Classes/Informacoes/Tipos/ConsumidorFinal.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/ConsumidorFinal.cs rename to CTe.Classes/Informacoes/Tipos/ConsumidorFinal.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/DestinoOperacao.cs b/CTe.Classes/Informacoes/Tipos/DestinoOperacao.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/DestinoOperacao.cs rename to CTe.Classes/Informacoes/Tipos/DestinoOperacao.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/FinalidadeNFe.cs b/CTe.Classes/Informacoes/Tipos/FinalidadeNFe.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/FinalidadeNFe.cs rename to CTe.Classes/Informacoes/Tipos/FinalidadeNFe.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/IdentificadorOperacaoCsc.cs b/CTe.Classes/Informacoes/Tipos/IdentificadorOperacaoCsc.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/IdentificadorOperacaoCsc.cs rename to CTe.Classes/Informacoes/Tipos/IdentificadorOperacaoCsc.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/IndicadorPagamento.cs b/CTe.Classes/Informacoes/Tipos/IndicadorPagamento.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/IndicadorPagamento.cs rename to CTe.Classes/Informacoes/Tipos/IndicadorPagamento.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/PresencaComprador.cs b/CTe.Classes/Informacoes/Tipos/PresencaComprador.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/PresencaComprador.cs rename to CTe.Classes/Informacoes/Tipos/PresencaComprador.cs diff --git a/CTe.Classes/Informacoes/Tipos/TipoEnteGov.cs b/CTe.Classes/Informacoes/Tipos/TipoEnteGov.cs new file mode 100644 index 000000000..e82732fee --- /dev/null +++ b/CTe.Classes/Informacoes/Tipos/TipoEnteGov.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Tipos +{ + public enum TipoEnteGov + { + [Description("União")] + [XmlEnum("1")] + Uniao = 1, + + [Description("Estado")] + [XmlEnum("2")] + Estado = 2, + + [Description("Distrito Federal")] + [XmlEnum("3")] + DistritoFederal = 3, + + [Description("Município")] + [XmlEnum("4")] + Municipio = 4 + } +} diff --git a/Shared.CTe.Classes/Informacoes/Tipos/cUnid.cs b/CTe.Classes/Informacoes/Tipos/cUnid.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/cUnid.cs rename to CTe.Classes/Informacoes/Tipos/cUnid.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/ferrEmi.cs b/CTe.Classes/Informacoes/Tipos/ferrEmi.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/ferrEmi.cs rename to CTe.Classes/Informacoes/Tipos/ferrEmi.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/forPag.cs b/CTe.Classes/Informacoes/Tipos/forPag.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/forPag.cs rename to CTe.Classes/Informacoes/Tipos/forPag.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/indIEToma.cs b/CTe.Classes/Informacoes/Tipos/indIEToma.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/indIEToma.cs rename to CTe.Classes/Informacoes/Tipos/indIEToma.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/indNegociavel.cs b/CTe.Classes/Informacoes/Tipos/indNegociavel.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/indNegociavel.cs rename to CTe.Classes/Informacoes/Tipos/indNegociavel.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/indSN.cs b/CTe.Classes/Informacoes/Tipos/indSN.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/indSN.cs rename to CTe.Classes/Informacoes/Tipos/indSN.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/lota.cs b/CTe.Classes/Informacoes/Tipos/lota.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/lota.cs rename to CTe.Classes/Informacoes/Tipos/lota.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/mod.cs b/CTe.Classes/Informacoes/Tipos/mod.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/mod.cs rename to CTe.Classes/Informacoes/Tipos/mod.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/modal.cs b/CTe.Classes/Informacoes/Tipos/modal.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/modal.cs rename to CTe.Classes/Informacoes/Tipos/modal.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/procEmi.cs b/CTe.Classes/Informacoes/Tipos/procEmi.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/procEmi.cs rename to CTe.Classes/Informacoes/Tipos/procEmi.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/respFat.cs b/CTe.Classes/Informacoes/Tipos/respFat.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/respFat.cs rename to CTe.Classes/Informacoes/Tipos/respFat.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/respSeg.cs b/CTe.Classes/Informacoes/Tipos/respSeg.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/respSeg.cs rename to CTe.Classes/Informacoes/Tipos/respSeg.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/retira.cs b/CTe.Classes/Informacoes/Tipos/retira.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/retira.cs rename to CTe.Classes/Informacoes/Tipos/retira.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/toma.cs b/CTe.Classes/Informacoes/Tipos/toma.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/toma.cs rename to CTe.Classes/Informacoes/Tipos/toma.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpCTe.cs b/CTe.Classes/Informacoes/Tipos/tpCTe.cs similarity index 94% rename from Shared.CTe.Classes/Informacoes/Tipos/tpCTe.cs rename to CTe.Classes/Informacoes/Tipos/tpCTe.cs index 74ab411ed..25e6f4e4e 100644 --- a/Shared.CTe.Classes/Informacoes/Tipos/tpCTe.cs +++ b/CTe.Classes/Informacoes/Tipos/tpCTe.cs @@ -35,7 +35,7 @@ namespace CTe.Classes.Informacoes.Tipos { /// - /// Tipo do Documento Fiscal (0 - CT-e Normal; 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; 3 - CT-e Substituto) + /// Tipo do Documento Fiscal (0 - CT-e Normal; 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; 3 - CT-e Substituto; 5 - Simplificado; 6 - Substitudo Simplificado) /// public enum tpCTe { @@ -46,6 +46,10 @@ public enum tpCTe [XmlEnum("2")] Anulacao, [XmlEnum("3")] - Substituto + Substituto, + [XmlEnum("5")] + Simplificado, + [XmlEnum("6")] + SubstitutoSimplificado } } \ No newline at end of file diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpCar.cs b/CTe.Classes/Informacoes/Tipos/tpCar.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpCar.cs rename to CTe.Classes/Informacoes/Tipos/tpCar.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpDoc.cs b/CTe.Classes/Informacoes/Tipos/tpDoc.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpDoc.cs rename to CTe.Classes/Informacoes/Tipos/tpDoc.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpDocAnterior.cs b/CTe.Classes/Informacoes/Tipos/tpDocAnterior.cs similarity index 98% rename from Shared.CTe.Classes/Informacoes/Tipos/tpDocAnterior.cs rename to CTe.Classes/Informacoes/Tipos/tpDocAnterior.cs index 4f50d6307..74d4c21e3 100644 --- a/Shared.CTe.Classes/Informacoes/Tipos/tpDocAnterior.cs +++ b/CTe.Classes/Informacoes/Tipos/tpDocAnterior.cs @@ -62,6 +62,8 @@ public enum tpDocAnterior ConhecimentoAvulso = 11, [XmlEnum("12")] TIF = 12, + [XmlEnum("13")] + BL = 13, [XmlEnum("99")] Outros = 99 } diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpEmis.cs b/CTe.Classes/Informacoes/Tipos/tpEmis.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpEmis.cs rename to CTe.Classes/Informacoes/Tipos/tpEmis.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpHor.cs b/CTe.Classes/Informacoes/Tipos/tpHor.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpHor.cs rename to CTe.Classes/Informacoes/Tipos/tpHor.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpImp.cs b/CTe.Classes/Informacoes/Tipos/tpImp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpImp.cs rename to CTe.Classes/Informacoes/Tipos/tpImp.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpNav.cs b/CTe.Classes/Informacoes/Tipos/tpNav.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpNav.cs rename to CTe.Classes/Informacoes/Tipos/tpNav.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpPer.cs b/CTe.Classes/Informacoes/Tipos/tpPer.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpPer.cs rename to CTe.Classes/Informacoes/Tipos/tpPer.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpProp.cs b/CTe.Classes/Informacoes/Tipos/tpProp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpProp.cs rename to CTe.Classes/Informacoes/Tipos/tpProp.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpPropProp.cs b/CTe.Classes/Informacoes/Tipos/tpPropProp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpPropProp.cs rename to CTe.Classes/Informacoes/Tipos/tpPropProp.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpRod.cs b/CTe.Classes/Informacoes/Tipos/tpRod.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpRod.cs rename to CTe.Classes/Informacoes/Tipos/tpRod.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpServ.cs b/CTe.Classes/Informacoes/Tipos/tpServ.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpServ.cs rename to CTe.Classes/Informacoes/Tipos/tpServ.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpTraf.cs b/CTe.Classes/Informacoes/Tipos/tpTraf.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpTraf.cs rename to CTe.Classes/Informacoes/Tipos/tpTraf.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpUnidCarga.cs b/CTe.Classes/Informacoes/Tipos/tpUnidCarga.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpUnidCarga.cs rename to CTe.Classes/Informacoes/Tipos/tpUnidCarga.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpUnidTransp.cs b/CTe.Classes/Informacoes/Tipos/tpUnidTransp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpUnidTransp.cs rename to CTe.Classes/Informacoes/Tipos/tpUnidTransp.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/tpVeic.cs b/CTe.Classes/Informacoes/Tipos/tpVeic.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/tpVeic.cs rename to CTe.Classes/Informacoes/Tipos/tpVeic.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/uniAP.cs b/CTe.Classes/Informacoes/Tipos/uniAP.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Tipos/uniAP.cs rename to CTe.Classes/Informacoes/Tipos/uniAP.cs diff --git a/Shared.CTe.Classes/Informacoes/Tipos/versaoModal.cs b/CTe.Classes/Informacoes/Tipos/versaoModal.cs similarity index 98% rename from Shared.CTe.Classes/Informacoes/Tipos/versaoModal.cs rename to CTe.Classes/Informacoes/Tipos/versaoModal.cs index 3fbe40165..a4076ee37 100644 --- a/Shared.CTe.Classes/Informacoes/Tipos/versaoModal.cs +++ b/CTe.Classes/Informacoes/Tipos/versaoModal.cs @@ -39,6 +39,8 @@ public enum versaoModal [XmlEnum("2.00")] veM200, [XmlEnum("3.00")] - veM300 + veM300, + [XmlEnum("4.00")] + veM400 } } \ No newline at end of file diff --git a/Shared.CTe.Classes/Informacoes/Valores/Comp.cs b/CTe.Classes/Informacoes/Valores/Comp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Valores/Comp.cs rename to CTe.Classes/Informacoes/Valores/Comp.cs diff --git a/Shared.CTe.Classes/Informacoes/Valores/vPrest.cs b/CTe.Classes/Informacoes/Valores/vPrest.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/Valores/vPrest.cs rename to CTe.Classes/Informacoes/Valores/vPrest.cs diff --git a/Shared.CTe.Classes/Informacoes/autXML.cs b/CTe.Classes/Informacoes/autXML.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/autXML.cs rename to CTe.Classes/Informacoes/autXML.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/cobr.cs b/CTe.Classes/Informacoes/infCTeNormal/cobr.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/cobr.cs rename to CTe.Classes/Informacoes/infCTeNormal/cobr.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/cobrancas/dup.cs b/CTe.Classes/Informacoes/infCTeNormal/cobrancas/dup.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/cobrancas/dup.cs rename to CTe.Classes/Informacoes/infCTeNormal/cobrancas/dup.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/cobrancas/fat.cs b/CTe.Classes/Informacoes/infCTeNormal/cobrancas/fat.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/cobrancas/fat.cs rename to CTe.Classes/Informacoes/infCTeNormal/cobrancas/fat.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/contQantidades/lacContQt.cs b/CTe.Classes/Informacoes/infCTeNormal/contQantidades/lacContQt.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/contQantidades/lacContQt.cs rename to CTe.Classes/Informacoes/infCTeNormal/contQantidades/lacContQt.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/contQt.cs b/CTe.Classes/Informacoes/infCTeNormal/contQt.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/contQt.cs rename to CTe.Classes/Informacoes/infCTeNormal/contQt.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/docAnt.cs b/CTe.Classes/Informacoes/infCTeNormal/docAnt.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/docAnt.cs rename to CTe.Classes/Informacoes/infCTeNormal/docAnt.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/emiDocAnt.cs b/CTe.Classes/Informacoes/infCTeNormal/docAnteriores/emiDocAnt.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/emiDocAnt.cs rename to CTe.Classes/Informacoes/infCTeNormal/docAnteriores/emiDocAnt.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAnt.cs b/CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAnt.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAnt.cs rename to CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAnt.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntEle.cs b/CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntEle.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntEle.cs rename to CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntEle.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntPap.cs b/CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntPap.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntPap.cs rename to CTe.Classes/Informacoes/infCTeNormal/docAnteriores/idDocAntPap.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCTeMultimodal.cs b/CTe.Classes/Informacoes/infCTeNormal/infCTeMultimodal.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCTeMultimodal.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCTeMultimodal.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCTeNorm.cs b/CTe.Classes/Informacoes/infCTeNormal/infCTeNorm.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCTeNorm.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCTeNorm.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCarga.cs b/CTe.Classes/Informacoes/infCTeNormal/infCarga.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCarga.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCarga.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCargas/infQ.cs b/CTe.Classes/Informacoes/infCTeNormal/infCargas/infQ.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCargas/infQ.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCargas/infQ.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSub.cs b/CTe.Classes/Informacoes/infCTeNormal/infCteSub.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSub.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCteSub.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSubs/refNF.cs b/CTe.Classes/Informacoes/infCTeNormal/infCteSubs/refNF.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSubs/refNF.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCteSubs/refNF.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaICMS.cs b/CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaICMS.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaICMS.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaICMS.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaNaoICMS.cs b/CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaNaoICMS.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaNaoICMS.cs rename to CTe.Classes/Informacoes/infCTeNormal/infCteSubs/tomaNaoICMS.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDoc.cs b/CTe.Classes/Informacoes/infCTeNormal/infDoc.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDoc.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDoc.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocRef.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocRef.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocRef.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocRef.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNF.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNF.cs similarity index 88% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNF.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNF.cs index 67358adb7..acef61f90 100644 --- a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNF.cs +++ b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNF.cs @@ -42,10 +42,15 @@ namespace CTe.Classes.Informacoes.infCTeNormal.infDocumentos { public class infNF { + [XmlElement(Order = 1)] public string nRoma { get; set; } + [XmlElement(Order = 2)] public string nPed { get; set; } + [XmlElement(Order = 3)] public mod mod { get; set; } + [XmlElement(Order = 4)] public string serie { get; set; } + [XmlElement(Order = 5)] public string nDoc { get; set; } [XmlIgnore] @@ -54,7 +59,7 @@ public class infNF /// /// Proxy para dEmi no formato AAAA-MM-DD /// - [XmlElement(ElementName = "dEmi")] + [XmlElement(ElementName = "dEmi", Order = 6)] public string ProxyddEmi { get @@ -65,53 +70,53 @@ public string ProxyddEmi } - + [XmlElement(Order = 7)] public decimal vBC { get { return _vBc.Arredondar(2); } set { _vBc = value.Arredondar(2); } } - + [XmlElement(Order = 8)] public decimal vICMS { get { return _vIcms.Arredondar(2); } set { _vIcms = value.Arredondar(2); } } - + [XmlElement(Order = 9)] public decimal vBCST { get { return _vBcst.Arredondar(2); } set { _vBcst = value.Arredondar(2); } } - + [XmlElement(Order = 10)] public decimal vST { get { return _vSt.Arredondar(2); } set { _vSt = value.Arredondar(2); } } - + [XmlElement(Order = 11)] public decimal vProd { get { return _vProd.Arredondar(2); } set { _vProd = value.Arredondar(2); } } - + [XmlElement(Order = 12)] public decimal vNF { get { return _vNf.Arredondar(2); } set { _vNf = value.Arredondar(2); } } - + [XmlElement(Order = 13)] public int nCFOP { get; set; } - + [XmlElement(Order = 14)] public decimal? nPeso { get { return _nPeso.Arredondar(3); } set { _nPeso = value.Arredondar(3); } } - + [XmlElement(Order = 15)] public bool nPesoSpecified { get { return _nPeso.HasValue; } } - + [XmlElement(Order = 16)] public string PIN { get; set; } [XmlIgnore] @@ -120,7 +125,7 @@ public decimal? nPeso /// /// Proxy para dPrev no formato AAAA-MM-DD /// - [XmlElement(ElementName = "dPrev")] + [XmlElement(ElementName = "dPrev", Order = 17)] public string ProxyddPrev { get @@ -134,10 +139,10 @@ public string ProxyddPrev set { dPrev = DateTime.Parse(value); } } - [XmlElement("infUnidTransp")] + [XmlElement("infUnidTransp", Order = 18)] public List infUnidTransp; - [XmlElement("infUnidCarga")] + [XmlElement("infUnidCarga", Order = 19)] public List infUnidCarga; private decimal _vBc; diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNFe.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNFe.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNFe.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infNFe.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infOutros.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infOutros.cs similarity index 92% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infOutros.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infOutros.cs index 2060f0d0b..8d3e21dea 100644 --- a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infOutros.cs +++ b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infOutros.cs @@ -42,8 +42,11 @@ namespace CTe.Classes.Informacoes.infCTeNormal.infDocumentos { public class infOutros { + [XmlElement(Order = 1)] public tpDoc tpDoc { get; set; } + [XmlElement(Order = 2)] public string descOutros { get; set; } + [XmlElement(Order = 3)] public string nDoc { get; set; } [XmlIgnore] @@ -52,7 +55,7 @@ public class infOutros /// /// Proxy para dPrev no formato AAAA-MM-DD /// - [XmlElement(ElementName = "dEmi")] + [XmlElement(ElementName = "dEmi", Order = 4)] public string ProxyddEmi { get @@ -66,7 +69,7 @@ public string ProxyddEmi set { dEmi = DateTime.Parse(value); } } - + [XmlElement(Order = 5)] public decimal? vDocFisc { get { return _vDocFisc.Arredondar(2); } @@ -81,7 +84,7 @@ public decimal? vDocFisc /// /// Proxy para dPrev no formato AAAA-MM-DD /// - [XmlElement(ElementName = "dPrev")] + [XmlElement(ElementName = "dPrev", Order = 6)] public string ProxyddPrev { get @@ -95,10 +98,10 @@ public string ProxyddPrev set { dPrev = DateTime.Parse(value); } } - [XmlElement("infUnidTransp")] + [XmlElement("infUnidTransp", Order = 7)] public List infUnidTransp; - [XmlElement("infUnidCarga")] + [XmlElement("infUnidCarga", Order = 8)] public List infUnidCarga; private decimal? _vDocFisc; diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidCarga.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidCarga.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidCarga.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidCarga.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidTransp.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidTransp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidTransp.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocumentos/infUnidTransp.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidCarga.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidCarga.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidCarga.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidCarga.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidTransp.cs b/CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidTransp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidTransp.cs rename to CTe.Classes/Informacoes/infCTeNormal/infDocumentos/lacUnidTransp.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infGlobalizado.cs b/CTe.Classes/Informacoes/infCTeNormal/infGlobalizado.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infGlobalizado.cs rename to CTe.Classes/Informacoes/infCTeNormal/infGlobalizado.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModal.cs b/CTe.Classes/Informacoes/infCTeNormal/infModal.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModal.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModal.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/ContainerModal.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/ContainerModal.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/ContainerModal.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/ContainerModal.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereo.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/aereo.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereo.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/aereo.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/natCarga.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/natCarga.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/natCarga.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/natCarga.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/peri.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/peri.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/peri.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/peri.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/tarifa.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/tarifa.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/tarifa.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/aereos/tarifa.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aquav.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/aquav.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/aquav.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/aquav.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/balsa.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/balsa.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/balsa.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/balsa.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/detCont.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/detCont.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/detCont.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/detCont.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/duto.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/duto.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/duto.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/duto.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/ferrov.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/ferrov.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/ferrov.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/ferrov.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/infTotAP.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/infTotAP.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/infTotAP.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/infTotAP.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/lacRodo.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/lacRodo.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/lacRodo.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/lacRodo.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/moto.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/moto.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/moto.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/moto.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/multimodal.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/multimodal.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/multimodal.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/multimodal.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodo.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodo.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodo.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodo.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoOS.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodoOS.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoOS.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodoOS.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/emiOcc.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/emiOcc.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/emiOcc.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/emiOcc.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/occ.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/occ.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/occ.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviario/occ.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/infFretamento.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/infFretamento.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/infFretamento.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/infFretamento.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/prop.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/prop.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/prop.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/prop.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/tpFretamento.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/tpFretamento.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/tpFretamento.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/tpFretamento.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/veic.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/veic.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/veic.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/rodoviarioOS/veic.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/valePed.cs b/CTe.Classes/Informacoes/infCTeNormal/infModals/valePed.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infModals/valePed.cs rename to CTe.Classes/Informacoes/infCTeNormal/infModals/valePed.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infQcteOs.cs b/CTe.Classes/Informacoes/infCTeNormal/infQcteOs.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infQcteOs.cs rename to CTe.Classes/Informacoes/infCTeNormal/infQcteOs.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infServVinc.cs b/CTe.Classes/Informacoes/infCTeNormal/infServVinc.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infServVinc.cs rename to CTe.Classes/Informacoes/infCTeNormal/infServVinc.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/infServico.cs b/CTe.Classes/Informacoes/infCTeNormal/infServico.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/infServico.cs rename to CTe.Classes/Informacoes/infCTeNormal/infServico.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/peri.cs b/CTe.Classes/Informacoes/infCTeNormal/peri.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/peri.cs rename to CTe.Classes/Informacoes/infCTeNormal/peri.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/seg.cs b/CTe.Classes/Informacoes/infCTeNormal/seg.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/seg.cs rename to CTe.Classes/Informacoes/infCTeNormal/seg.cs diff --git a/Shared.CTe.Classes/Informacoes/infCTeNormal/veicNovos.cs b/CTe.Classes/Informacoes/infCTeNormal/veicNovos.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCTeNormal/veicNovos.cs rename to CTe.Classes/Informacoes/infCTeNormal/veicNovos.cs diff --git a/Shared.CTe.Classes/Informacoes/infCte.cs b/CTe.Classes/Informacoes/infCte.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCte.cs rename to CTe.Classes/Informacoes/infCte.cs diff --git a/Shared.CTe.Classes/Informacoes/infCteAnu/infCteAnu.cs b/CTe.Classes/Informacoes/infCteAnu/infCteAnu.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCteAnu/infCteAnu.cs rename to CTe.Classes/Informacoes/infCteAnu/infCteAnu.cs diff --git a/Shared.CTe.Classes/Informacoes/infCteComp/impComp.cs b/CTe.Classes/Informacoes/infCteComp/impComp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCteComp/impComp.cs rename to CTe.Classes/Informacoes/infCteComp/impComp.cs diff --git a/Shared.CTe.Classes/Informacoes/infCteComp/impComp/ICMSComp.cs b/CTe.Classes/Informacoes/infCteComp/impComp/ICMSComp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCteComp/impComp/ICMSComp.cs rename to CTe.Classes/Informacoes/infCteComp/impComp/ICMSComp.cs diff --git a/Shared.CTe.Classes/Informacoes/infCteComp/infCteComp.cs b/CTe.Classes/Informacoes/infCteComp/infCteComp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCteComp/infCteComp.cs rename to CTe.Classes/Informacoes/infCteComp/infCteComp.cs diff --git a/Shared.CTe.Classes/Informacoes/infCteComp/vPresComp.cs b/CTe.Classes/Informacoes/infCteComp/vPresComp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCteComp/vPresComp.cs rename to CTe.Classes/Informacoes/infCteComp/vPresComp.cs diff --git a/Shared.CTe.Classes/Informacoes/infCteComp/vPresComp/compComp.cs b/CTe.Classes/Informacoes/infCteComp/vPresComp/compComp.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCteComp/vPresComp/compComp.cs rename to CTe.Classes/Informacoes/infCteComp/vPresComp/compComp.cs diff --git a/Shared.CTe.Classes/Informacoes/infCteSupl.cs b/CTe.Classes/Informacoes/infCteSupl.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infCteSupl.cs rename to CTe.Classes/Informacoes/infCteSupl.cs diff --git a/Shared.CTe.Classes/Informacoes/infRespTec/infRespTec.cs b/CTe.Classes/Informacoes/infRespTec/infRespTec.cs similarity index 100% rename from Shared.CTe.Classes/Informacoes/infRespTec/infRespTec.cs rename to CTe.Classes/Informacoes/infRespTec/infRespTec.cs diff --git a/CTe.Classes/Properties/AssemblyInfo.cs b/CTe.Classes/Properties/AssemblyInfo.cs deleted file mode 100644 index bc2db0385..000000000 --- a/CTe.Classes/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTe.Classes")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTe.Classes")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c86e3921-f0b8-4bfe-9ef1-0e9084326b13")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/CTe.Classes/Protocolo/infFisco.cs b/CTe.Classes/Protocolo/infFisco.cs new file mode 100644 index 000000000..18aeead31 --- /dev/null +++ b/CTe.Classes/Protocolo/infFisco.cs @@ -0,0 +1,8 @@ +namespace CTe.Classes.Protocolo +{ + public class infFisco + { + public int cMsg { get; set; } + public string xMsg { get; set; } + } +} \ No newline at end of file diff --git a/CTe.Classes/Protocolo/infProt.cs b/CTe.Classes/Protocolo/infProt.cs new file mode 100644 index 000000000..1b0a64274 --- /dev/null +++ b/CTe.Classes/Protocolo/infProt.cs @@ -0,0 +1,105 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; +using DFe.Classes.Assinatura; +using DFe.Classes.Flags; +using DFe.Utils; + +namespace CTe.Classes.Protocolo +{ + public class infProt + { + /// + /// PR04 - Identificador da TAG a ser assinada, somente precisa ser informado se a UF assinar a resposta. + /// + public string Id { get; set; } + + /// + /// PR05 - Identificação do Ambiente + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// PR06 - Versão do Aplicativo que processou a consulta. + /// + public string verAplic { get; set; } + + /// + /// PR07 - Chave de Acesso da CT-e + /// + public string chCTe { get; set; } + + /// + /// PR08 - Data e hora de recebimento + /// + [XmlIgnore] + public DateTimeOffset dhRecbto { get; set; } + + [XmlElement(ElementName = "dhRecbto")] + public string ProxydhRecbto + { + get { return dhRecbto.ParaDataHoraStringUtc(); } + set { dhRecbto = DateTimeOffset.Parse(value); } + } + + /// + /// PR09 - Número do Protocolo da CT-e + /// + public string nProt { get; set; } + + /// + /// PR10 - Digest Value da CT-e processada Utilizado para conferir a integridade da CTe original. + /// + public string digVal { get; set; } + + /// + /// PR11 - Código do status da resposta. + /// + public int cStat { get; set; } + + /// + /// PR12 - Descrição literal do status da resposta. + /// + public string xMotivo { get; set; } + + public infFisco infFisco { get; set; } + + /// + /// PR13 - Assinatura XML do grupo identificado pelo atributo “Id” + /// A decisão de assinar a mensagem fica a critério da UF interessada. + /// + public Signature Signature { get; set; } + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/Protocolo/protCTe.cs b/CTe.Classes/Protocolo/protCTe.cs similarity index 100% rename from Shared.CTe.Classes/Protocolo/protCTe.cs rename to CTe.Classes/Protocolo/protCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Consulta/consSitCTe.cs b/CTe.Classes/Servicos/Consulta/consSitCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Consulta/consSitCTe.cs rename to CTe.Classes/Servicos/Consulta/consSitCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Consulta/procEventoCTe.cs b/CTe.Classes/Servicos/Consulta/procEventoCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Consulta/procEventoCTe.cs rename to CTe.Classes/Servicos/Consulta/procEventoCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Consulta/retConsSitCTe.cs b/CTe.Classes/Servicos/Consulta/retConsSitCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Consulta/retConsSitCTe.cs rename to CTe.Classes/Servicos/Consulta/retConsSitCTe.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/MDFe.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/MDFe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/MDFe.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/MDFe.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/evCTeAutorizadoMDFe.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/evCTeAutorizadoMDFe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/evCTeAutorizadoMDFe.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/evCTeAutorizadoMDFe.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoCTe.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoCTe.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoCTe.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoCTe.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoCTe.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoCTe.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retEventoCTe.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retEventoCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retEventoCTe.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retEventoCTe.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs b/CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/consNSU.cs b/CTe.Classes/Servicos/DistribuicaoDFe/consNSU.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/consNSU.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/consNSU.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs b/CTe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/distNSU.cs b/CTe.Classes/Servicos/DistribuicaoDFe/distNSU.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/distNSU.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/distNSU.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs b/CTe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs diff --git a/Shared.CTe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs b/CTe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs rename to CTe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/EventoContainer.cs b/CTe.Classes/Servicos/Evento/EventoContainer.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/EventoContainer.cs rename to CTe.Classes/Servicos/Evento/EventoContainer.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/Flags/CTeTipoEvento.cs b/CTe.Classes/Servicos/Evento/Flags/CTeTipoEvento.cs similarity index 90% rename from Shared.CTe.Classes/Servicos/Evento/Flags/CTeTipoEvento.cs rename to CTe.Classes/Servicos/Evento/Flags/CTeTipoEvento.cs index 25bbf7683..1679645b5 100644 --- a/Shared.CTe.Classes/Servicos/Evento/Flags/CTeTipoEvento.cs +++ b/CTe.Classes/Servicos/Evento/Flags/CTeTipoEvento.cs @@ -1,4 +1,4 @@ -/********************************************************************************/ +/********************************************************************************/ /* Projeto: Biblioteca ZeusNFe */ /* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ /* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ @@ -53,11 +53,17 @@ public enum CTeTipoEvento ComprovantedeEntrega = 110180, [XmlEnum("110181")] CancelamentodoComprovantedeEntrega = 110181, + [XmlEnum("110190")] + InsucessoNaEntregaDoCte = 110190, + [XmlEnum("110191")] + CancelamentodoInsucessoNaEntregaDoCte = 110191, //Evento: Fisco [XmlEnum("310620")] RegistrodePassagem = 310620, [XmlEnum("510620")] RegistrodePassagemAutomatico = 510620, + [XmlEnum("510630")] + RegistrodePassagemAutomatico2 = 510630, [XmlEnum("310610")] MDFeAutorizado = 310610, [XmlEnum("310611")] @@ -86,6 +92,8 @@ public enum CTeTipoEvento AutorizadoServicoVinculadoMultimodal = 440160, // Evento: Tomador [XmlEnum("610110")] - Desacordo = 610110 + Desacordo = 610110, + [XmlEnum("610111")] + CancelamentoPrestacaodoServicoemDesacordo = 610111 } -} \ No newline at end of file +} diff --git a/Shared.CTe.Classes/Servicos/Evento/dest.cs b/CTe.Classes/Servicos/Evento/dest.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/dest.cs rename to CTe.Classes/Servicos/Evento/dest.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/detEvento.cs b/CTe.Classes/Servicos/Evento/detEvento.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/detEvento.cs rename to CTe.Classes/Servicos/Evento/detEvento.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/detEventoTipos.cs b/CTe.Classes/Servicos/Evento/detEventoTipos.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/detEventoTipos.cs rename to CTe.Classes/Servicos/Evento/detEventoTipos.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/envEvento.cs b/CTe.Classes/Servicos/Evento/envEvento.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/envEvento.cs rename to CTe.Classes/Servicos/Evento/envEvento.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/evCCeCTe.cs b/CTe.Classes/Servicos/Evento/evCCeCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/evCCeCTe.cs rename to CTe.Classes/Servicos/Evento/evCCeCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/evCancCTe.cs b/CTe.Classes/Servicos/Evento/evCancCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/evCancCTe.cs rename to CTe.Classes/Servicos/Evento/evCancCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/evPrestDesacordo.cs b/CTe.Classes/Servicos/Evento/evPrestDesacordo.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/evPrestDesacordo.cs rename to CTe.Classes/Servicos/Evento/evPrestDesacordo.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/eventoCTe.cs b/CTe.Classes/Servicos/Evento/eventoCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/eventoCTe.cs rename to CTe.Classes/Servicos/Evento/eventoCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/infEventoEnv.cs b/CTe.Classes/Servicos/Evento/infEventoEnv.cs similarity index 98% rename from Shared.CTe.Classes/Servicos/Evento/infEventoEnv.cs rename to CTe.Classes/Servicos/Evento/infEventoEnv.cs index 56343b29b..f0e911c31 100644 --- a/Shared.CTe.Classes/Servicos/Evento/infEventoEnv.cs +++ b/CTe.Classes/Servicos/Evento/infEventoEnv.cs @@ -76,6 +76,8 @@ public infEventoEnv() /// public string CNPJ { get; set; } + public string CPF { get; set; } + /// /// HP12 - Chave de Acesso da NF-e vinculada ao Evento /// @@ -98,6 +100,7 @@ public string ProxydhEvento { case versao.ve200: return dhEvento.ParaDataHoraStringSemUtc(); + case versao.ve400: case versao.ve300: return dhEvento.ParaDataHoraStringUtc(); default: diff --git a/Shared.CTe.Classes/Servicos/Evento/infEventoRet.cs b/CTe.Classes/Servicos/Evento/infEventoRet.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/infEventoRet.cs rename to CTe.Classes/Servicos/Evento/infEventoRet.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/retEnvEvento.cs b/CTe.Classes/Servicos/Evento/retEnvEvento.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/retEnvEvento.cs rename to CTe.Classes/Servicos/Evento/retEnvEvento.cs diff --git a/Shared.CTe.Classes/Servicos/Evento/retEventoCTe.cs b/CTe.Classes/Servicos/Evento/retEventoCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Evento/retEventoCTe.cs rename to CTe.Classes/Servicos/Evento/retEventoCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Inutilizacao/infInutEnv.cs b/CTe.Classes/Servicos/Inutilizacao/infInutEnv.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Inutilizacao/infInutEnv.cs rename to CTe.Classes/Servicos/Inutilizacao/infInutEnv.cs diff --git a/Shared.CTe.Classes/Servicos/Inutilizacao/infInutRet.cs b/CTe.Classes/Servicos/Inutilizacao/infInutRet.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Inutilizacao/infInutRet.cs rename to CTe.Classes/Servicos/Inutilizacao/infInutRet.cs diff --git a/Shared.CTe.Classes/Servicos/Inutilizacao/inutCTe.cs b/CTe.Classes/Servicos/Inutilizacao/inutCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Inutilizacao/inutCTe.cs rename to CTe.Classes/Servicos/Inutilizacao/inutCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Inutilizacao/retInutCTe.cs b/CTe.Classes/Servicos/Inutilizacao/retInutCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Inutilizacao/retInutCTe.cs rename to CTe.Classes/Servicos/Inutilizacao/retInutCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Recepcao/Retorno/consReciCTe.cs b/CTe.Classes/Servicos/Recepcao/Retorno/consReciCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Recepcao/Retorno/consReciCTe.cs rename to CTe.Classes/Servicos/Recepcao/Retorno/consReciCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Recepcao/Retorno/retconsReciCTe.cs b/CTe.Classes/Servicos/Recepcao/Retorno/retconsReciCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Recepcao/Retorno/retconsReciCTe.cs rename to CTe.Classes/Servicos/Recepcao/Retorno/retconsReciCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Recepcao/enviCTe.cs b/CTe.Classes/Servicos/Recepcao/enviCTe.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Recepcao/enviCTe.cs rename to CTe.Classes/Servicos/Recepcao/enviCTe.cs diff --git a/Shared.CTe.Classes/Servicos/Recepcao/infRec.cs b/CTe.Classes/Servicos/Recepcao/infRec.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Recepcao/infRec.cs rename to CTe.Classes/Servicos/Recepcao/infRec.cs diff --git a/CTe.Classes/Servicos/Recepcao/retCTe.cs b/CTe.Classes/Servicos/Recepcao/retCTe.cs new file mode 100644 index 000000000..4b917cc51 --- /dev/null +++ b/CTe.Classes/Servicos/Recepcao/retCTe.cs @@ -0,0 +1,60 @@ +using System.Xml.Serialization; +using CTe.Classes.Protocolo; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using DFe.Utils; + +namespace CTe.Classes.Servicos.Recepcao +{ + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte")] + public class retCTe : RetornoBase + { + /// + /// AR02 - Versão do leiaute + /// + [XmlAttribute] + public string versao { get; set; } + + /// + /// AR03 - Identificação do Ambiente: 1 – Produção / 2 - Homologação + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// AR06a - Código da UF que atendeu a solicitação. + /// + public Estado cUF { get; set; } + + /// + /// AR04 - Versão do Aplicativo que recebeu o Lote. A versão deve ser iniciada com a sigla da UF nos casos de WS + /// próprio ou a sigla SCAN, SVAN ou SVRS nos demais casos. + /// + public string verAplic { get; set; } + + /// + /// AR05 - Código do status da resposta (vide item 5.1.1) + /// + public int cStat { get; set; } + + /// + /// AR06 - Descrição literal do status da resposta + /// + public string xMotivo { get; set; } + + public protCTe protCTe { get; set; } + + public static retCTe LoadXml(string xml) + { + var retorno = FuncoesXml.XmlStringParaClasse(xml); + retorno.RetornoXmlString = xml; + return retorno; + } + + public static retCTe LoadXml(string xml, CTe enviCte) + { + var retorno = LoadXml(xml); + retorno.EnvioXmlString = FuncoesXml.ClasseParaXmlString(enviCte); + return retorno; + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/Servicos/Recepcao/retEnviCte.cs b/CTe.Classes/Servicos/Recepcao/retEnviCte.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/Recepcao/retEnviCte.cs rename to CTe.Classes/Servicos/Recepcao/retEnviCte.cs diff --git a/Shared.CTe.Classes/Servicos/RetornoBase.cs b/CTe.Classes/Servicos/RetornoBase.cs similarity index 100% rename from Shared.CTe.Classes/Servicos/RetornoBase.cs rename to CTe.Classes/Servicos/RetornoBase.cs diff --git a/Shared.CTe.Classes/Servicos/Status/consStatServ.cs b/CTe.Classes/Servicos/Status/consStatServ.cs similarity index 82% rename from Shared.CTe.Classes/Servicos/Status/consStatServ.cs rename to CTe.Classes/Servicos/Status/consStatServ.cs index 408de55c8..97c1912fc 100644 --- a/Shared.CTe.Classes/Servicos/Status/consStatServ.cs +++ b/CTe.Classes/Servicos/Status/consStatServ.cs @@ -33,6 +33,7 @@ using System.Xml.Serialization; using CTe.Classes.Servicos.Tipos; +using DFe.Classes.Entidades; using DFe.Classes.Flags; namespace CTe.Classes.Servicos.Status @@ -61,4 +62,31 @@ public consStatServCte() /// public string xServ { get; set; } } + + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte")] + public class consStatServCTe + { + public consStatServCTe() + { + xServ = "STATUS"; + } + + /// + /// FP02 - Versão do leiaute + /// + [XmlAttribute] + public versao versao { get; set; } + + /// + /// FP03 - Identificação do Ambiente: 1 – Produção / 2 - Homologação + /// + public TipoAmbiente tpAmb { get; set; } + + public Estado cUF { get; set; } + + /// + /// FP04 - Serviço solicitado 'STATUS' + /// + public string xServ { get; set; } + } } \ No newline at end of file diff --git a/CTe.Classes/Servicos/Status/retConsStatServ.cs b/CTe.Classes/Servicos/Status/retConsStatServ.cs new file mode 100644 index 000000000..5b9f7a0c0 --- /dev/null +++ b/CTe.Classes/Servicos/Status/retConsStatServ.cs @@ -0,0 +1,194 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; +using CTe.Classes.Servicos.Tipos; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using DFe.Utils; + +namespace CTe.Classes.Servicos.Status +{ + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte")] + public class retConsStatServCte : RetornoBase + { + /// + /// FR02 - Versão do leiaute + /// + [XmlAttribute] + public versao versao { get; set; } + + /// + /// FR03 - Identificação do Ambiente: 1 – Produção / 2 - Homologação + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// FR04 - Versão do Aplicativo que processou a consulta. A versão deve ser iniciada com a sigla da UF nos casos de WS + /// próprio ou a sigla SCAN, SVAN ou SVRS nos demais casos. + /// + public string verAplic { get; set; } + + /// + /// FR05 - Código do status da resposta. + /// + public int cStat { get; set; } + + /// + /// FR06 - Descrição literal do status da resposta. + /// + public string xMotivo { get; set; } + + /// + /// FR07 - Código da UF que atendeu a solicitação + /// + public Estado cUF { get; set; } + + [XmlIgnore] + public DateTimeOffset dhRecbto { get; set; } + + [XmlElement(ElementName = "dhRecbto")] + public string ProxydhRecbto + { + get { return dhRecbto.ParaDataHoraStringUtc(); } + set { dhRecbto = DateTimeOffset.Parse(value); } + } + + public int tMed { get; set; } + + [XmlIgnore] + public DateTime dhRetorno { get; set; } + + [XmlElement(ElementName = "dhRetorno")] + public string ProxydhRetorno + { + get { return dhRetorno.ParaDataHoraString(); } + set { dhRetorno = DateTime.Parse(value); } + } + + public string xObs { get; set; } + + public static retConsStatServCte LoadXml(string xml, consStatServCte consStatServCte) + { + var retorno = LoadXml(xml); + retorno.EnvioXmlString = FuncoesXml.ClasseParaXmlString(consStatServCte); + + return retorno; + } + + private static retConsStatServCte LoadXml(string xml) + { + var retorno = FuncoesXml.XmlStringParaClasse(xml); + retorno.RetornoXmlString = xml; + + return retorno; + } + } + + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte")] + public class retConsStatServCTe : RetornoBase + { + /// + /// FR02 - Versão do leiaute + /// + [XmlAttribute] + public versao versao { get; set; } + + /// + /// FR03 - Identificação do Ambiente: 1 – Produção / 2 - Homologação + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// FR04 - Versão do Aplicativo que processou a consulta. A versão deve ser iniciada com a sigla da UF nos casos de WS + /// próprio ou a sigla SCAN, SVAN ou SVRS nos demais casos. + /// + public string verAplic { get; set; } + + /// + /// FR05 - Código do status da resposta. + /// + public int cStat { get; set; } + + /// + /// FR06 - Descrição literal do status da resposta. + /// + public string xMotivo { get; set; } + + /// + /// FR07 - Código da UF que atendeu a solicitação + /// + public Estado cUF { get; set; } + + [XmlIgnore] + public DateTimeOffset dhRecbto { get; set; } + + [XmlElement(ElementName = "dhRecbto")] + public string ProxydhRecbto + { + get { return dhRecbto.ParaDataHoraStringUtc(); } + set { dhRecbto = DateTimeOffset.Parse(value); } + } + + public int tMed { get; set; } + + [XmlIgnore] + public DateTime dhRetorno { get; set; } + + [XmlElement(ElementName = "dhRetorno")] + public string ProxydhRetorno + { + get { return dhRetorno.ParaDataHoraString(); } + set { dhRetorno = DateTime.Parse(value); } + } + + public string xObs { get; set; } + + public static retConsStatServCTe LoadXml(string xml, consStatServCTe consStatServCte) + { + var retorno = LoadXml(xml); + retorno.EnvioXmlString = FuncoesXml.ClasseParaXmlString(consStatServCte); + + return retorno; + } + + private static retConsStatServCTe LoadXml(string xml) + { + var retorno = FuncoesXml.XmlStringParaClasse(xml); + retorno.RetornoXmlString = xml; + + return retorno; + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/Servicos/Tipos/CTeServicosTipos.cs b/CTe.Classes/Servicos/Tipos/CTeServicosTipos.cs similarity index 97% rename from Shared.CTe.Classes/Servicos/Tipos/CTeServicosTipos.cs rename to CTe.Classes/Servicos/Tipos/CTeServicosTipos.cs index 40895daca..42a0682b6 100644 --- a/Shared.CTe.Classes/Servicos/Tipos/CTeServicosTipos.cs +++ b/CTe.Classes/Servicos/Tipos/CTeServicosTipos.cs @@ -171,6 +171,7 @@ public enum TipoManifestacao /// Versão do leiaute /// 2.00 - Versão 2.00; /// 3.00 - Versão 3.00/3.00a + /// 4.00 - Versão 4.00 /// public enum versao { @@ -186,7 +187,14 @@ public enum versao /// [Description("Versão 3.00/3.00a")] [XmlEnum("3.00")] - ve300 + ve300, + + /// + /// 4.00 - Versão 4.00 + /// + [Description("Versão 4.00")] + [XmlEnum("4.00")] + ve400 } /// diff --git a/CTe.Classes/Simplificado/Carga/comp.cs b/CTe.Classes/Simplificado/Carga/comp.cs new file mode 100644 index 000000000..e2a190422 --- /dev/null +++ b/CTe.Classes/Simplificado/Carga/comp.cs @@ -0,0 +1,22 @@ +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Carga +{ + /// + /// Componente do valor da prestação. + /// + public class comp + { + /// + /// Nome do componente (ex: "Frete Valor", "Vr Icms"). + /// + [XmlElement(ElementName = "xNome")] + public string xNome { get; set; } + + /// + /// Valor do componente. + /// + [XmlElement(ElementName = "vComp")] + public decimal vComp { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Carga/det.cs b/CTe.Classes/Simplificado/Carga/det.cs new file mode 100644 index 000000000..e3fc85556 --- /dev/null +++ b/CTe.Classes/Simplificado/Carga/det.cs @@ -0,0 +1,66 @@ +using CTe.Classes.Simplificado.Informacoes; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Carga +{ + /// + /// Detalhamento de cada entrega/prestação do CT-e Simplificado. + /// + public class det + { + /// + /// Número do item na lista de detalhamento. + /// + [XmlAttribute(AttributeName = "nItem")] + public int nItem { get; set; } + + /// + /// Código do Município de início da prestação (IBGE). + /// + [XmlElement(ElementName = "cMunIni")] + public int cMunIni { get; set; } + + /// + /// Nome do Município do início da prestação. + /// + [XmlElement(ElementName = "xMunIni")] + public string xMunIni { get; set; } + + /// + /// Código do Município de término da prestação (IBGE). + /// + [XmlElement(ElementName = "cMunFim")] + public int cMunFim { get; set; } + + /// + /// Nome do Município do término da prestação. + /// + [XmlElement(ElementName = "xMunFim")] + public string xMunFim { get; set; } + + /// + /// Valor da Prestação do Serviço. + /// + [XmlElement(ElementName = "vPrest")] + public decimal vPrest { get; set; } + + /// + /// Valor a Receber. + /// + [XmlElement(ElementName = "vRec")] + public decimal vRec { get; set; } + + /// + /// Componentes do valor da prestação. + /// + [XmlElement(ElementName = "Comp")] + public List Comp { get; set; } + + /// + /// Informações das NF-e vinculadas à entrega. + /// + [XmlElement(ElementName = "infNFe")] + public List infNFe { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Carga/infCarga.cs b/CTe.Classes/Simplificado/Carga/infCarga.cs new file mode 100644 index 000000000..263202581 --- /dev/null +++ b/CTe.Classes/Simplificado/Carga/infCarga.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Carga +{ + /// + /// Informações da carga do CT-e. + /// + public class infCarga + { + /// + /// Valor total da carga. + /// + [XmlElement(ElementName = "vCarga")] + public decimal vCarga { get; set; } + + /// + /// Produto predominante. + /// + [XmlElement(ElementName = "proPred")] + public string proPred { get; set; } + + /// + /// Detalhamento dos itens da carga. + /// + [XmlElement(ElementName = "det")] + public List det { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Informacoes/infCte.cs b/CTe.Classes/Simplificado/Informacoes/infCte.cs new file mode 100644 index 000000000..23b96646b --- /dev/null +++ b/CTe.Classes/Simplificado/Informacoes/infCte.cs @@ -0,0 +1,273 @@ +using CTe.Classes.Simplificado.Carga; +using DFe.Utils; +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Informacoes +{ + /// + /// Informações do CT-e. + /// + public class infCte + { + /// + /// Código da UF do emitente do CT-e. Utilizar a Tabela do IBGE. + /// + [XmlElement(ElementName = "cUF")] + public int cUf { get; set; } + + /// + /// Código numérico que compõe a Chave de Acesso. + /// Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. + /// + [XmlElement(ElementName = "cCT")] + public string cCt { get; set; } + + /// + /// Código Fiscal de Operações e Prestações. + /// + [XmlElement(ElementName = "CFOP")] + public string cfop { get; set; } + + /// + /// Natureza da Operação. + /// + [XmlElement(ElementName = "natOp")] + public string natOp { get; set; } + + /// + /// Modelo do documento fiscal. Utilizar o código 57 para identificação do CT-e. + /// + [XmlElement(ElementName = "mod")] + public int mod { get; set; } + + /// + /// Série do CT-e. Preencher com "0" no caso de série única. + /// + [XmlElement(ElementName = "serie")] + public int serie { get; set; } + + /// + /// Número do CT-e. + /// + [XmlElement(ElementName = "nCT")] + public string nCt { get; set; } + + /// + /// Data e hora de emissão do CT-e. + /// + [XmlIgnore] + public DateTimeOffset? dhEmi { get; set; } + + /// + /// Data e hora de emissão do CT-e. Formato AAAA-MM-DDTHH:MM:DD TZD. + /// + [XmlElement(ElementName = "dhEmi")] + public string DhEmi + { + get { return dhEmi.ParaDataHoraStringUtc(); } + set { dhEmi = DateTimeOffset.Parse(value); } + } + + /// + /// Formato de impressão do DACTE. Preencher com: 1 - Retrato; 2 - Paisagem. + /// + [XmlElement(ElementName = "tpImp")] + public int tpImp { get; set; } + + /// + /// Forma de emissão do CT-e. + /// + [XmlElement(ElementName = "tpEmis")] + public int tpEmis { get; set; } + + /// + /// Dígito Verificador da chave de acesso do CT-e. + /// + [XmlElement(ElementName = "cDV")] + public int cDv { get; set; } + + /// + /// Tipo do Ambiente. Preencher com: 1 - Produção; 2 - Homologação. + /// + [XmlElement(ElementName = "tpAmb")] + public int tpAmb { get; set; } + + /// + /// Tipo do CT-e Simplificado. Preencher com: + /// 5 - CTe Simplificado; + /// 6 - Substituição CTe Simplificado. + /// + [XmlElement(ElementName = "tpCTe")] + public int tpCte { get; set; } + + /// + /// Identificador do processo de emissão do CT-e. + /// + [XmlElement(ElementName = "procEmi")] + public int procEmi { get; set; } + + /// + /// Versão do processo de emissão. + /// + [XmlElement(ElementName = "verProc")] + public string verProc { get; set; } + + /// + /// Código do Município de envio do CT-e (de onde o documento foi transmitido). Utilizar a tabela do IBGE. + /// + [XmlElement(ElementName = "cMunEnv")] + public int cMunEnv { get; set; } + + /// + /// Nome do Município de envio do CT-e (de onde o documento foi transmitido). + /// + [XmlElement(ElementName = "xMunEnv")] + public string xMunEnv { get; set; } + + /// + /// Sigla da UF de envio do CT-e (de onde o documento foi transmitido). + /// + [XmlElement(ElementName = "UFEnv")] + public string ufEnv { get; set; } + + /// + /// Modal. Preencher com: + /// 01-Rodoviário; + /// 02-Aéreo; + /// 03-Aquaviário. + /// + [XmlElement(ElementName = "modal")] + public string modal { get; set; } + + /// + /// Tipo do Serviço. Preencher com: + /// 0 - Normal; + /// 1 - Subcontratação; + /// 2 - Redespacho. + /// + [XmlElement(ElementName = "tpServ")] + public int tpServ { get; set; } + + /// + /// UF do início da prestação. + /// + [XmlElement(ElementName = "UFIni")] + public string ufIni { get; set; } + + /// + /// UF do término da prestação. + /// + [XmlElement(ElementName = "UFFim")] + public string ufFim { get; set; } + + /// + /// Indicador se o Recebedor retira no Aeroporto, Filial, Porto ou Estação de Destino. + /// Preencher com: 0 - sim; 1 - não. + /// + [XmlElement(ElementName = "retira")] + public int retira { get; set; } + + /// + /// Detalhes do retira. + /// + [XmlElement(ElementName = "detRetira")] + public string detRetira { get; set; } + + /// + /// Data e Hora da entrada em contingência. + /// + [XmlIgnore] + public DateTimeOffset? dhCont { get; set; } + + /// + /// Data e Hora da entrada em contingência. Formato AAAA-MM-DDTHH:MM:SS. + /// + [XmlElement(ElementName = "dhCont")] + public string DhCont + { + get { return dhCont.ParaDataHoraStringUtc(); } + set { dhCont = DateTimeOffset.Parse(value); } + } + + /// + /// Justificativa da entrada em contingência. + /// + [XmlElement(ElementName = "xJust")] + public string xJust { get; set; } + + /// + /// Característica adicional do transporte. + /// + [XmlElement(ElementName = "caracAd")] + public string caracAd { get; set; } + + /// + /// Característica adicional do serviço. + /// + [XmlElement(ElementName = "caracSer")] + public string caracSer { get; set; } + + /// + /// Detalhamento das entregas/prestações do CT-e Simplificado. + /// + [XmlElement(ElementName = "detEntrega")] + public List detEntrega { get; set; } + + + /// + /// Detalhamento das entregas/prestações do CT-e Simplificado. + /// + [XmlElement(ElementName = "det")] + public List det { get; set; } + + /// + /// Informações da carga do CT-e. + /// + [XmlElement(ElementName = "infCarga")] + public infCarga infCarga { get; set; } + } + + /// + /// Detalhamento das entregas/prestações do CT-e Simplificado. + /// + public class DetEntrega + { + /// + /// Código do Município de início da prestação. Utilizar a tabela do IBGE. + /// + [XmlElement(ElementName = "cMunIni")] + public int cMunIni { get; set; } + + /// + /// Nome do Município do início da prestação. + /// + [XmlElement(ElementName = "xMunIni")] + public string xMunIni { get; set; } + + /// + /// Código do Município de término da prestação. Utilizar a tabela do IBGE. + /// + [XmlElement(ElementName = "cMunFim")] + public int cMunFim { get; set; } + + /// + /// Nome do Município do término da prestação. + /// + [XmlElement(ElementName = "xMunFim")] + public string xMunFim { get; set; } + + /// + /// Valor da Prestação do Serviço. + /// + [XmlElement(ElementName = "vPrest")] + public decimal vPrest { get; set; } + + /// + /// Valor a Receber. + /// + [XmlElement(ElementName = "vRec")] + public decimal vRec { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Informacoes/infNFe.cs b/CTe.Classes/Simplificado/Informacoes/infNFe.cs new file mode 100644 index 000000000..38de8c6a1 --- /dev/null +++ b/CTe.Classes/Simplificado/Informacoes/infNFe.cs @@ -0,0 +1,33 @@ +using System; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Informacoes +{ + /// + /// Informações da NF-e vinculada à entrega. + /// + public class infNFe + { + /// + /// Chave de acesso da NF-e. + /// + [XmlElement(ElementName = "chNFe")] + public string chNFe { get; set; } + + /// + /// Data prevista de entrega. + /// + [XmlIgnore] + public DateTimeOffset? dPrev { get; set; } + + /// + /// Data prevista de entrega (formato AAAA-MM-DD). + /// + [XmlElement(ElementName = "dPrev")] + public string DPrev + { + get { return dPrev?.ToString("yyyy-MM-dd"); } + set { dPrev = DateTimeOffset.Parse(value); } + } + } +} diff --git a/CTe.Classes/Simplificado/cteSimp.cs b/CTe.Classes/Simplificado/cteSimp.cs new file mode 100644 index 000000000..6b80ebfe9 --- /dev/null +++ b/CTe.Classes/Simplificado/cteSimp.cs @@ -0,0 +1,30 @@ +using CTe.Classes.Simplificado.Informacoes; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado +{ + /// + /// Tipo Conhecimento de Transporte Eletrônico (Modelo 57) - Modelo Simplificado + /// + [XmlRoot("CTeSimp", Namespace = "http://www.portalfiscal.inf.br/cte")] + public class cteSimp + { + /// + /// Informações do CT-e + /// + [XmlElement("infCte")] + public infCte infCte { get; set; } + + /// + /// Versão do leiaute + /// + [XmlAttribute("versao")] + public string versao { get; set; } + + /// + /// Identificador da tag a ser assinada + /// + [XmlAttribute("Id")] + public string id { get; set; } + } +} diff --git a/CTe.Classes/cteOSProc.cs b/CTe.Classes/cteOSProc.cs new file mode 100644 index 000000000..d75ceea22 --- /dev/null +++ b/CTe.Classes/cteOSProc.cs @@ -0,0 +1,32 @@ +using System; +using System.Xml.Serialization; +using CTe.Classes.Protocolo; +using CTe.Classes.Servicos.Tipos; +using DFe.Utils; + +namespace CTe.Classes +{ + [Serializable] + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", + ElementName = "cteOSProc")] + public class cteOSProc + { + [XmlAttribute] + public versao versao { get; set; } + + public CTe CTeOS { get; set; } + + public protCTe protCTe { get; set; } + + + public static cteOSProc LoadXmlString(string xml) + { + return FuncoesXml.XmlStringParaClasse(xml); + } + + public static cteOSProc LoadXmlArquivo(string caminhoArquivoXml) + { + return FuncoesXml.ArquivoXmlParaClasse(caminhoArquivoXml); + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Classes/cteProc.cs b/CTe.Classes/cteProc.cs similarity index 100% rename from Shared.CTe.Classes/cteProc.cs rename to CTe.Classes/cteProc.cs diff --git a/CTe.Classes/cteSimpProc.cs b/CTe.Classes/cteSimpProc.cs new file mode 100644 index 000000000..e290cd05c --- /dev/null +++ b/CTe.Classes/cteSimpProc.cs @@ -0,0 +1,69 @@ +using CTe.Classes.Protocolo; +using CTe.Classes.Simplificado; +using DFe.Utils; +using System; +using System.Xml.Serialization; + +namespace CTe.Classes +{ + /// + /// CT-e Simplificado processado + /// + [XmlRoot("cteSimpProc", Namespace = "http://www.portalfiscal.inf.br/cte")] + public class cteSimpProc + { + /// + /// Representa o CT-e Simplificado + /// + [XmlElement("CTeSimp")] + public cteSimp cteSimp { get; set; } + + /// + /// Representa o protocolo do CT-e + /// + [XmlElement("protCTe")] + public protCTe protCTe { get; set; } + + /// + /// Versão do CT-e + /// + [XmlAttribute("versao")] + public string versao { get; set; } + + /// + /// IP do transmissor do documento fiscal para o ambiente autorizador + /// + [XmlAttribute("ipTransmissor")] + public string ipTransmissor { get; set; } + + /// + /// Porta de origem utilizada na conexão (De 0 a 65535) + /// + [XmlAttribute("nPortaCon")] + public string nPortaCon { get; set; } + + + [XmlIgnore] + public DateTimeOffset? dhConexao { get; set; } + + /// + /// Data e Hora da Conexão de Origem + /// + [XmlElement(ElementName = "dhConexao")] + public string DhConexao + { + get { return dhConexao.ParaDataHoraStringUtc(); } + set { dhConexao = DateTimeOffset.Parse(value); } + } + + public static cteSimpProc LoadXmlString(string xml) + { + return FuncoesXml.XmlStringParaClasse(xml); + } + + public static cteSimpProc LoadXmlArquivo(string caminhoArquivoXml) + { + return FuncoesXml.ArquivoXmlParaClasse(caminhoArquivoXml); + } + } +} diff --git a/CTe.Dacte.AppTeste/App.config b/CTe.Dacte.AppTeste/App.config index d1428ad71..4bfa00561 100644 --- a/CTe.Dacte.AppTeste/App.config +++ b/CTe.Dacte.AppTeste/App.config @@ -1,6 +1,6 @@ - + diff --git a/CTe.Dacte.AppTeste/CTe.Dacte.AppTeste.csproj b/CTe.Dacte.AppTeste/CTe.Dacte.AppTeste.csproj index afb2ed953..47bb41a15 100644 --- a/CTe.Dacte.AppTeste/CTe.Dacte.AppTeste.csproj +++ b/CTe.Dacte.AppTeste/CTe.Dacte.AppTeste.csproj @@ -8,7 +8,7 @@ WinExe CTe.Dacte.AppTeste CTe.Dacte.AppTeste - v4.5 + v4.8 512 true @@ -53,7 +53,6 @@ Form1.cs - Form1.cs @@ -82,7 +81,7 @@ - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13} + {fc15197f-4f76-47d4-839e-0f442e1d47ce} CTe.Classes @@ -94,7 +93,7 @@ CTe.Dacte.Fast - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} + {97f3c222-fd10-488a-812b-e514c3a8863c} DFe.Utils diff --git a/CTe.Dacte.AppTeste/Properties/AssemblyInfo.cs b/CTe.Dacte.AppTeste/Properties/AssemblyInfo.cs deleted file mode 100644 index 0e7821958..000000000 --- a/CTe.Dacte.AppTeste/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTe.Dacte.AppTeste")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTe.Dacte.AppTeste")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("827fa496-0f49-4e93-8ce9-2246ccd353b8")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/CTe.Dacte.AppTeste/Properties/Resources.Designer.cs b/CTe.Dacte.AppTeste/Properties/Resources.Designer.cs index 788465a2f..c8cd32c2f 100644 --- a/CTe.Dacte.AppTeste/Properties/Resources.Designer.cs +++ b/CTe.Dacte.AppTeste/Properties/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// O código foi gerado por uma ferramenta. +// Versão de Tempo de Execução:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se +// o código for gerado novamente. // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace CTe.Dacte.AppTeste.Properties { /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// Uma classe de recurso de tipo de alta segurança, para pesquisar cadeias de caracteres localizadas etc. /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + // Essa classe foi gerada automaticamente pela classe StronglyTypedResourceBuilder + // através de uma ferramenta como ResGen ou Visual Studio. + // Para adicionar ou remover um associado, edite o arquivo .ResX e execute ResGen novamente + // com a opção /str, ou recrie o projeto do VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -33,7 +33,7 @@ internal Resources() { } /// - /// Returns the cached ResourceManager instance used by this class. + /// Retorna a instância de ResourceManager armazenada em cache usada por essa classe. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resources() { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// Substitui a propriedade CurrentUICulture do thread atual para todas as + /// pesquisas de recursos que usam essa classe de recurso de tipo de alta segurança. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { diff --git a/CTe.Dacte.AppTeste/Properties/Settings.Designer.cs b/CTe.Dacte.AppTeste/Properties/Settings.Designer.cs index 8c4cd6a36..6a0843bcc 100644 --- a/CTe.Dacte.AppTeste/Properties/Settings.Designer.cs +++ b/CTe.Dacte.AppTeste/Properties/Settings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// O código foi gerado por uma ferramenta. +// Versão de Tempo de Execução:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se +// o código for gerado novamente. // //------------------------------------------------------------------------------ @@ -12,7 +12,7 @@ namespace CTe.Dacte.AppTeste.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/CTe.Dacte.Base/CTe.Dacte.Base.csproj b/CTe.Dacte.Base/CTe.Dacte.Base.csproj index f5b3ccdf4..6e7f021d8 100644 --- a/CTe.Dacte.Base/CTe.Dacte.Base.csproj +++ b/CTe.Dacte.Base/CTe.Dacte.Base.csproj @@ -1,53 +1,28 @@ - - - + + - Debug - AnyCPU - {E46ECA77-8732-4D99-9460-FA5E2CD90266} - Library - Properties - CTe.Dacte.Base - CTe.Dacte.Base - v4.5 - 512 - - SAK - SAK - SAK - SAK + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + 6.0.0 + + + + + + + + + + + Always + + + Always + + + + diff --git a/CTe.Dacte.Base/CTe.Dacte.Base.csproj.vspscc b/CTe.Dacte.Base/CTe.Dacte.Base.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/CTe.Dacte.Base/CTe.Dacte.Base.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/CTe.Dacte.Fast/Resources/CTeEvento.frx b/CTe.Dacte.Base/CTe/CTeEvento.frx similarity index 100% rename from CTe.Dacte.Fast/Resources/CTeEvento.frx rename to CTe.Dacte.Base/CTe/CTeEvento.frx diff --git a/CTe.Dacte.Fast/Resources/CTeRetrato.frx b/CTe.Dacte.Base/CTe/CTeRetrato.frx similarity index 98% rename from CTe.Dacte.Fast/Resources/CTeRetrato.frx rename to CTe.Dacte.Base/CTe/CTeRetrato.frx index b689597f2..4b032e12f 100644 --- a/CTe.Dacte.Fast/Resources/CTeRetrato.frx +++ b/CTe.Dacte.Base/CTe/CTeRetrato.frx @@ -111,9 +111,43 @@ namespace FastReport CabecalhoVeiculoNovo.Visible = veiculosNovos.HasMoreRows; DadosVeiculosNovos.Visible = veiculosNovos.HasMoreRows; } + + private string GetModalName(modal procModal) + { + string name = "Rodoviário"; + + switch (procModal) + { + case modal.aereo: + name = "Aéreo"; + break; + case modal.aquaviario: + name = "Aquaviário"; + break; + case modal.ferroviario: + name = "Ferroviário"; + break; + case modal.dutoviario: + name = "Dutoviário"; + break; + case modal.multimodal: + name = "Multimodal"; + break; + } + + return name.ToUpper(); + } private void PageHeader1_BeforePrint(object sender, EventArgs e) { + #region Definindo o nome do Modal + var _modal = (modal)Report.GetColumnValue("cteProc.CTe.infCte.ide.modal"); + var nomeModal = GetModalName(_modal); + if (!Text24.Text.Contains(nomeModal)) { + Text24.Text = Text24.Text + nomeModal; + } + #endregion + #region Banda inicial sempre deve aparecer! switch(Convert.ToInt32((tpCTe)Report.GetColumnValue("cteProc.CTe.infCte.ide.tpCTe"))) { @@ -459,7 +493,7 @@ namespace FastReport if ((Boolean)Report.GetParameterValue("QuebrarLinhasObservacao")) Text168.Text = ((String)Report.GetColumnValue("cteProc.CTe.infCte.compl.xObs")).Replace(";", Environment.NewLine);; - Text185.Visible = ((Boolean)Report.GetParameterValue("DoocumentoCancelado")); + Text185.Visible = ((Boolean)Report.GetParameterValue("DocumentoCancelado")); Text186.Visible = Convert.ToInt32((TipoAmbiente)Report.GetColumnValue("cteProc.CTe.infCte.ide.tpAmb")) == 2; } #endregion @@ -1186,7 +1220,7 @@ namespace FastReport - + @@ -1194,7 +1228,7 @@ namespace FastReport - + @@ -1457,7 +1491,7 @@ namespace FastReport - + @@ -1550,8 +1584,8 @@ namespace FastReport - - + + diff --git a/CTe.Dacte.Base/Properties/AssemblyInfo.cs b/CTe.Dacte.Base/Properties/AssemblyInfo.cs deleted file mode 100644 index 560072497..000000000 --- a/CTe.Dacte.Base/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTe.Dacte.Base")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTe.Dacte.Base")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e46eca77-8732-4d99-9460-fa5e2cd90266")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/CTe.Dacte.Fast/CTe.Dacte.Fast.csproj b/CTe.Dacte.Fast/CTe.Dacte.Fast.csproj index ae495d823..b8e4ba1a4 100644 --- a/CTe.Dacte.Fast/CTe.Dacte.Fast.csproj +++ b/CTe.Dacte.Fast/CTe.Dacte.Fast.csproj @@ -1,92 +1,20 @@ - - - - - Debug - AnyCPU - {1D58CBBD-56A5-4A10-8DAB-F795D35150EE} - Library - Properties - CTe.Dacte.Fast - CTe.Dacte.Fast - v4.5 - 512 - - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - Dlls\FastReport.dll - - - False - Dlls\FastReport.Bars.dll - - - False - Dlls\FastReport.Editor.dll - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - {c86e3921-f0b8-4bfe-9ef1-0e9084326b13} - CTe.Classes - - - {e46eca77-8732-4d99-9460-fa5e2cd90266} - CTe.Dacte.Base - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - - - \ No newline at end of file + + + + net462 + + + + + + + + + + + + + + + + diff --git a/CTe.Dacte.Fast/CTe.Dacte.Fast.csproj.vspscc b/CTe.Dacte.Fast/CTe.Dacte.Fast.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/CTe.Dacte.Fast/CTe.Dacte.Fast.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/CTe.Dacte.Fast/DacteFrCte.cs b/CTe.Dacte.Fast/DacteFrCte.cs index d7eef346f..1176e9787 100644 --- a/CTe.Dacte.Fast/DacteFrCte.cs +++ b/CTe.Dacte.Fast/DacteFrCte.cs @@ -31,24 +31,44 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using System.IO; +using CTe.Classes; +using CTe.Dacte.Base; using FastReport; using FastReport.Export.Pdf; -using CTe.Dacte.Base; -using CTe.Classes; using System; +using System.IO; +using DFe.Utils; namespace CTe.Dacte.Fast { public class DacteFrCte { - protected Report Relatorio; + public Report Relatorio; public DacteFrCte() { Relatorio = new Report(); } + public DacteFrCte(cteProc proc, ConfiguracaoDacte config, string arquivoRelatorio = "") + { + Relatorio = new Report(); + RegisterData(proc); + + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"CTe\CTeRetrato.frx"; + var frx = FrxFileHelper.TryGetFrxFile(caminho); + Relatorio.Load(new MemoryStream(frx)); + } + else + { + Relatorio.Load(arquivoRelatorio); + } + + Configurar(config); + } + public void LoadReport(string arquivoRelatorio) { Relatorio.Load(arquivoRelatorio); @@ -62,29 +82,19 @@ public void LoadReport(MemoryStream stream) public void RegisterData(cteProc proc) { Relatorio.RegisterData(new[] { proc }, "cteProc", 20); - Relatorio.GetDataSource("cteProc").Enabled = true; + Relatorio.GetDataSource("cteProc").Enabled = true; } public void Configurar(ConfiguracaoDacte config) { - Relatorio.SetParameterValue("DoocumentoCancelado", config.DocumentoCancelado); + Relatorio.SetParameterValue("DocumentoCancelado", config.DocumentoCancelado); Relatorio.SetParameterValue("Desenvolvedor", config.Desenvolvedor); Relatorio.SetParameterValue("QuebrarLinhasObservacao", config.QuebrarLinhasObservacao); + if (Relatorio.FindObject("poEmitLogo") != null) ((PictureObject)Relatorio.FindObject("poEmitLogo")).Image = config.ObterLogo(); } - public DacteFrCte(cteProc proc, ConfiguracaoDacte config, string arquivoRelatorio = "") - { - Relatorio = new Report(); - RegisterData(proc); - if (!string.IsNullOrEmpty(arquivoRelatorio)) - Relatorio.Load(arquivoRelatorio); - else - Relatorio.Load(new MemoryStream(Properties.Resources.CTeRetrato)); - Configurar(config); - } - /// /// Abre a janela de visualização do DACTe /// diff --git a/CTe.Dacte.Fast/DacteFrEvento.cs b/CTe.Dacte.Fast/DacteFrEvento.cs index 924f73309..8afd99eda 100644 --- a/CTe.Dacte.Fast/DacteFrEvento.cs +++ b/CTe.Dacte.Fast/DacteFrEvento.cs @@ -33,21 +33,39 @@ using System.IO; using FastReport; -using FastReport.Export.Pdf; using CTe.Classes; using CTe.Classes.Servicos.Consulta; using System; +using DFe.Utils; +using FastReport.Export.Pdf; namespace CTe.Dacte.Fast { public class DacteFrEvento { - protected Report Relatorio; + public Report Relatorio; public DacteFrEvento() { Relatorio = new Report(); } + public DacteFrEvento(cteProc proc, procEventoCTe procEventoCTe, string desenvolvedor = "", string arquivoRelatorio = "") + { + Relatorio = new Report(); + + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"CTe\CTeEvento.frx"; + var frx = FrxFileHelper.TryGetFrxFile(caminho); + Relatorio.Load(new MemoryStream(frx)); + } + else + { + Relatorio.Load(arquivoRelatorio); + } + + Configurar(desenvolvedor: desenvolvedor); + } public void LoadReport(string arquivoRelatorio) { @@ -73,17 +91,6 @@ public void Configurar(string desenvolvedor = "") Relatorio.SetParameterValue("Desenvolvedor", desenvolvedor); } - public DacteFrEvento(cteProc proc, procEventoCTe procEventoCTe, string desenvolvedor = "", string arquivoRelatorio = "") - { - Relatorio = new Report(); - RegisterData(proc, procEventoCTe); - if (!string.IsNullOrEmpty(arquivoRelatorio)) - Relatorio.Load(arquivoRelatorio); - else - Relatorio.Load(new MemoryStream(Properties.Resources.CTeEvento)); - Configurar(desenvolvedor: desenvolvedor); - } - /// /// Abre a janela de visualização do DAMDFe diff --git a/CTe.Dacte.Fast/Properties/AssemblyInfo.cs b/CTe.Dacte.Fast/Properties/AssemblyInfo.cs deleted file mode 100644 index 801e8c648..000000000 --- a/CTe.Dacte.Fast/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTe.Dacte.Fast")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTe.Dacte.Fast")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("1d58cbbd-56a5-4a10-8dab-f795d35150ee")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/CTe.Dacte.Fast/Properties/Resources.Designer.cs b/CTe.Dacte.Fast/Properties/Resources.Designer.cs deleted file mode 100644 index b26583bc6..000000000 --- a/CTe.Dacte.Fast/Properties/Resources.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace CTe.Dacte.Fast.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CTe.Dacte.Fast.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] CTeEvento { - get { - object obj = ResourceManager.GetObject("CTeEvento", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] CTeRetrato { - get { - object obj = ResourceManager.GetObject("CTeRetrato", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/CTe.Dacte.Fast/Properties/Resources.resx b/CTe.Dacte.Fast/Properties/Resources.resx deleted file mode 100644 index afe79f500..000000000 --- a/CTe.Dacte.Fast/Properties/Resources.resx +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\CTeEvento.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Resources\CTeRetrato.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/CTe.Dacte.OpenFast/CTe.Dacte.OpenFast.csproj b/CTe.Dacte.OpenFast/CTe.Dacte.OpenFast.csproj new file mode 100644 index 000000000..a0bb23341 --- /dev/null +++ b/CTe.Dacte.OpenFast/CTe.Dacte.OpenFast.csproj @@ -0,0 +1,23 @@ + + + net462;netstandard2.0;net6.0 + openfastreport + + + + + + + + + + + + + + + + + + + diff --git a/CTe.Dacte.OpenFast/DacteFrCte.cs b/CTe.Dacte.OpenFast/DacteFrCte.cs new file mode 100644 index 000000000..bae117357 --- /dev/null +++ b/CTe.Dacte.OpenFast/DacteFrCte.cs @@ -0,0 +1,148 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using CTe.Classes; +using CTe.Dacte.Base; +using FastReport; +using FastReport.Export.PdfSimple; +using System; +using System.IO; +using DFe.Utils; + +namespace CTe.Dacte.OpenFast +{ + public class DacteFrCte + { + public Report Relatorio; + + public DacteFrCte() + { + Relatorio = new Report(); + } + + public DacteFrCte(cteProc proc, ConfiguracaoDacte config, string arquivoRelatorio = "") + { + Relatorio = new Report(); + RegisterData(proc); + + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"CTe\CTeRetrato.frx"; + var frx = FrxFileHelper.TryGetFrxFile(caminho); + Relatorio.Load(new MemoryStream(frx)); + } + else + { + Relatorio.Load(arquivoRelatorio); + } + + Configurar(config); + } + + public void LoadReport(string arquivoRelatorio) + { + Relatorio.Load(arquivoRelatorio); + } + + public void LoadReport(MemoryStream stream) + { + Relatorio.Load(stream); + } + + public void RegisterData(cteProc proc) + { + Relatorio.RegisterData(new[] { proc }, "cteProc", 20); + Relatorio.GetDataSource("cteProc").Enabled = true; + } + + public void Configurar(ConfiguracaoDacte config) + { + Relatorio.SetParameterValue("DocumentoCancelado", config.DocumentoCancelado); + Relatorio.SetParameterValue("Desenvolvedor", config.Desenvolvedor); + Relatorio.SetParameterValue("QuebrarLinhasObservacao", config.QuebrarLinhasObservacao); + + if (Relatorio.FindObject("poEmitLogo") != null) + ((PictureObject)Relatorio.FindObject("poEmitLogo")).SetImageData(config.Logomarca); + } + + /// + /// Converte o DACTe para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DACTe + public void ExportarPdf(string arquivo) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), arquivo); + } + + /// + /// Converte o DACTe para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + public void ExportarPdf(Stream outputStream) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), outputStream); + outputStream.Position = 0; + } + + /// + /// Converte o DACTe para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DACTe + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(string arquivo, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, arquivo); + } + + /// + /// Converte o DACTe para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, outputStream); + outputStream.Position = 0; + } + } +} \ No newline at end of file diff --git a/CTe.Dacte.OpenFast/DacteFrEvento.cs b/CTe.Dacte.OpenFast/DacteFrEvento.cs new file mode 100644 index 000000000..d260e321b --- /dev/null +++ b/CTe.Dacte.OpenFast/DacteFrEvento.cs @@ -0,0 +1,144 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.IO; +using CTe.Classes; +using CTe.Classes.Servicos.Consulta; +using DFe.Utils; +using FastReport; +using FastReport.Export.PdfSimple; + +namespace CTe.Dacte.OpenFast +{ + public class DacteFrEvento + { + public Report Relatorio; + + public DacteFrEvento() + { + Relatorio = new Report(); + } + public DacteFrEvento(cteProc proc, procEventoCTe procEventoCTe, string desenvolvedor = "", string arquivoRelatorio = "") + { + Relatorio = new Report(); + + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"CTe\CTeEvento.frx"; + var frx = FrxFileHelper.TryGetFrxFile(caminho); + Relatorio.Load(new MemoryStream(frx)); + } + else + { + Relatorio.Load(arquivoRelatorio); + } + + Configurar(desenvolvedor: desenvolvedor); + } + + public void LoadReport(string arquivoRelatorio) + { + Relatorio.Load(arquivoRelatorio); + } + + public void LoadReport(MemoryStream stream) + { + Relatorio.Load(stream); + } + + public void RegisterData(cteProc proc, procEventoCTe procEventoCTe) + { + Relatorio.RegisterData(new[] { proc }, "cteProc", 20); + Relatorio.GetDataSource("cteProc").Enabled = true; + + Relatorio.RegisterData(new[] { procEventoCTe }, "procEventoCTe", 20); + Relatorio.GetDataSource("procEventoCTe").Enabled = true; + } + + public void Configurar(string desenvolvedor = "") + { + Relatorio.SetParameterValue("Desenvolvedor", desenvolvedor); + } + + /// + /// Converte o DAMDFe para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DAMDFe + public void ExportarPdf(string arquivo) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), arquivo); + } + + /// + /// Converte o DAMDFe para PDF e copia para o stream + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DAMDFe + public void ExportarPdf(Stream outputStream) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), outputStream); + outputStream.Position = 0; + } + + /// + /// Converte o DAMDFe para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DAMDFe + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(string arquivo, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, arquivo); + } + + /// + /// Converte o DAMDFe para PDF e copia para o stream + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DAMDFe + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, outputStream); + outputStream.Position = 0; + } + } +} diff --git a/CTe.Servicos.Standard/CTe.Servicos.Standard.csproj b/CTe.Servicos.Standard/CTe.Servicos.Standard.csproj deleted file mode 100644 index 32faa5e79..000000000 --- a/CTe.Servicos.Standard/CTe.Servicos.Standard.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - netstandard2.0 - - - - - - - - - - - - - - diff --git a/CTe.Servicos/CTe.Servicos.csproj b/CTe.Servicos/CTe.Servicos.csproj index 424922ed7..0b5f03d68 100644 --- a/CTe.Servicos/CTe.Servicos.csproj +++ b/CTe.Servicos/CTe.Servicos.csproj @@ -1,88 +1,13 @@ - - - + + - Debug - AnyCPU - {63227402-2B1E-4BC7-A6DF-362129923CF6} - Library - Properties - CTe.Servicos - CTe.Servicos - v4.5 - 512 - - SAK - SAK - SAK - SAK + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - + - - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13} - CTe.Classes - - - {21a894ec-b79e-4936-bff3-abead2e5c44f} - CTe.Utils - - - {9CC914F9-4C3E-43BB-A34B-A12AE4923548} - CTe.Wsdl - - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - DFe.Utils - - - {DBEE88E7-6003-436E-9810-9ACC662F5851} - DFe.Wsdl - + + - - - - - \ No newline at end of file + + diff --git a/CTe.Servicos/CTe.Servicos.csproj.DotSettings b/CTe.Servicos/CTe.Servicos.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/CTe.Servicos/CTe.Servicos.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/CTe.Servicos/CTe.Servicos.csproj.vspscc b/CTe.Servicos/CTe.Servicos.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/CTe.Servicos/CTe.Servicos.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs b/CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs new file mode 100644 index 000000000..04cb5abf5 --- /dev/null +++ b/CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs @@ -0,0 +1,104 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Threading.Tasks; +using CTe.Classes; +using CTe.Classes.Servicos.Consulta; +using CTe.Servicos.Factory; +using CTe.Utils.Extensoes; + +namespace CTe.Servicos.ConsultaProtocolo +{ + public class ConsultaProtcoloServico + { + public retConsSitCTe ConsultaProtocolo(string chave, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configServico); + + if (configServico.IsValidaSchemas) + consSitCTe.ValidarSchema(configServico); + + consSitCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configServico); + var retornoXml = webService.cteConsultaCT(consSitCTe.CriaRequestWs()); + + var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); + retorno.SalvarXmlEmDisco(chave, configServico); + + return retorno; + } + + public retConsSitCTe ConsultaProtocoloV4(string chave, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configServico); + + if (configServico.IsValidaSchemas) + consSitCTe.ValidarSchema(configServico); + + consSitCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlConsultaProtocoloV4(configServico); + var retornoXml = webService.cteConsultaCT(consSitCTe.CriaRequestWs()); + + var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); + retorno.SalvarXmlEmDisco(chave, configServico); + + return retorno; + } + + public async Task ConsultaProtocoloAsync(string chave, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configServico); + + if (configServico.IsValidaSchemas) + consSitCTe.ValidarSchema(configServico); + + consSitCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configServico); + var retornoXml = await webService.cteConsultaCTAsync(consSitCTe.CriaRequestWs()); + + var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); + retorno.SalvarXmlEmDisco(chave, configServico); + + return retorno; + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs b/CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs similarity index 84% rename from Shared.CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs rename to CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs index 5900c45b5..67350d156 100644 --- a/Shared.CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs +++ b/CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs @@ -35,7 +35,7 @@ using CTe.Classes; using CTe.Classes.Servicos.Recepcao.Retorno; using CTe.Servicos.Factory; -using CTe.Utils.Extencoes; +using CTe.Utils.Extensoes; namespace CTe.Servicos.ConsultaRecibo { @@ -50,30 +50,40 @@ public ConsultaReciboServico(string recibo) public retConsReciCTe Consultar(ConfiguracaoServico configuracaoServico = null) { - var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configuracaoServico); - consReciCTe.ValidarSchema(configuracaoServico); - consReciCTe.SalvarXmlEmDisco(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configuracaoServico); + var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configServico); + + if (configServico.IsValidaSchemas) + consReciCTe.ValidarSchema(configServico); + + consReciCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configServico); var retornoXml = webService.cteRetRecepcao(consReciCTe.CriaRequestWs()); var retorno = retConsReciCTe.LoadXml(retornoXml.OuterXml, consReciCTe); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } public async Task ConsultarAsync(ConfiguracaoServico configuracaoServico = null) { - var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configuracaoServico); - consReciCTe.ValidarSchema(configuracaoServico); - consReciCTe.SalvarXmlEmDisco(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configServico); + + if (configServico.IsValidaSchemas) + consReciCTe.ValidarSchema(configServico); + + consReciCTe.SalvarXmlEmDisco(configServico); - var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configServico); var retornoXml = await webService.cteRetRecepcaoAsync(consReciCTe.CriaRequestWs()); var retorno = retConsReciCTe.LoadXml(retornoXml.OuterXml, consReciCTe); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } diff --git a/Shared.CTe.Servicos/ConsultaStatus/StatusServico.cs b/CTe.Servicos/ConsultaStatus/StatusServico.cs similarity index 79% rename from Shared.CTe.Servicos/ConsultaStatus/StatusServico.cs rename to CTe.Servicos/ConsultaStatus/StatusServico.cs index c5b8fcd2c..296f79b6b 100644 --- a/Shared.CTe.Servicos/ConsultaStatus/StatusServico.cs +++ b/CTe.Servicos/ConsultaStatus/StatusServico.cs @@ -35,7 +35,7 @@ using CTe.Classes; using CTe.Classes.Servicos.Status; using CTe.Servicos.Factory; -using CTe.Utils.Extencoes; +using CTe.Utils.Extensoes; namespace CTe.Servicos.ConsultaStatus { @@ -44,7 +44,10 @@ public class StatusServico public retConsStatServCte ConsultaStatus(ConfiguracaoServico configuracaoServico = null) { var consStatServCte = ClassesFactory.CriaConsStatServCte(configuracaoServico); - consStatServCte.ValidarSchema(configuracaoServico); + + if (configuracaoServico.IsValidaSchemas) + consStatServCte.ValidarSchema(configuracaoServico); + consStatServCte.SalvarXmlEmDisco(configuracaoServico); var webService = WsdlFactory.CriaWsdlCteStatusServico(configuracaoServico); @@ -56,10 +59,31 @@ public retConsStatServCte ConsultaStatus(ConfiguracaoServico configuracaoServico return retorno; } + public retConsStatServCTe ConsultaStatusV4(ConfiguracaoServico configuracaoServico = null) + { + var consStatServCte = ClassesFactory.CriaConsStatServCTe(configuracaoServico); + + if (configuracaoServico.IsValidaSchemas) + consStatServCte.ValidarSchema(configuracaoServico); + + consStatServCte.SalvarXmlEmDisco(configuracaoServico); + + var webService = WsdlFactory.CriaWsdlCteStatusServico(configuracaoServico); + var retornoXml = webService.cteStatusServicoCT(consStatServCte.CriaRequestWs()); + + var retorno = retConsStatServCTe.LoadXml(retornoXml.OuterXml, consStatServCte); + retorno.SalvarXmlEmDisco(configuracaoServico); + + return retorno; + } + public async Task ConsultaStatusAsync(ConfiguracaoServico configuracaoServico = null) { var consStatServCte = ClassesFactory.CriaConsStatServCte(configuracaoServico); - consStatServCte.ValidarSchema(configuracaoServico); + + if (configuracaoServico.IsValidaSchemas) + consStatServCte.ValidarSchema(configuracaoServico); + consStatServCte.SalvarXmlEmDisco(configuracaoServico); var webService = WsdlFactory.CriaWsdlCteStatusServico(configuracaoServico); diff --git a/Shared.CTe.Servicos/DistribuicaoDFe/RetornoCteDistDFeInt.cs b/CTe.Servicos/DistribuicaoDFe/RetornoCteDistDFeInt.cs similarity index 98% rename from Shared.CTe.Servicos/DistribuicaoDFe/RetornoCteDistDFeInt.cs rename to CTe.Servicos/DistribuicaoDFe/RetornoCteDistDFeInt.cs index 3ca38f325..ee4cf0831 100644 --- a/Shared.CTe.Servicos/DistribuicaoDFe/RetornoCteDistDFeInt.cs +++ b/CTe.Servicos/DistribuicaoDFe/RetornoCteDistDFeInt.cs @@ -31,8 +31,6 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ - - using CTe.Classes.Servicos.DistribuicaoDFe; namespace CTe.Servicos.DistribuicaoDFe @@ -46,12 +44,11 @@ public RetornoCteDistDFeInt(string envioStr, string retornoStr, string retornoCo RetornoCompletoStr = retornoCompletaStr; Retorno = retorno; } - - + public string EnvioStr { get; protected set; } public string RetornoStr { get; protected set; } public string RetornoCompletoStr { get; protected set; } - public new retDistDFeInt Retorno { get; set; } + public retDistDFeInt Retorno { get; set; } } } diff --git a/Shared.CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs b/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs similarity index 83% rename from Shared.CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs rename to CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs index 9db372857..e068c9f3e 100644 --- a/Shared.CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs +++ b/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs @@ -33,18 +33,19 @@ -using System; -using System.IO; -using System.Reflection; -using System.Threading.Tasks; -using System.Xml; using CTe.Classes; using CTe.Classes.Servicos.DistribuicaoDFe; using CTe.Servicos.Factory; using CTe.Utils.DistribuicaoDFe; -using CTe.Utils; using CTe.Wsdl.DistribuicaoDFe; using DFe.Utils; +using Shared.DFe.Utils; +using System; +using System.IO; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using System.Xml; using Compressao = DFe.Utils.Compressao; @@ -52,6 +53,20 @@ namespace CTe.Servicos.DistribuicaoDFe { public class ServicoCTeDistribuicaoDFe { + public ServicoCTeDistribuicaoDFe() + { + + } + + private readonly ConfiguracaoServico _configuracaoServico; + private readonly X509Certificate2 _certificado; + public ServicoCTeDistribuicaoDFe(ConfiguracaoServico configuracaoServico, X509Certificate2 certificado = null) + { + _configuracaoServico = configuracaoServico; + _certificado = certificado ?? configuracaoServico.X509Certificate2; + } + + /// /// Serviço destinado à distribuição de informações resumidas e documentos fiscais eletrônicos de interesse de um ator, seja este pessoa física ou jurídica. /// @@ -63,7 +78,8 @@ public class ServicoCTeDistribuicaoDFe /// Retorna um objeto da classe CTeDistDFeInteresse com os documentos de interesse do CNPJ/CPF pesquisado public RetornoCteDistDFeInt CTeDistDFeInteresse(string ufAutor, string documento, string ultNSU = "0", string nSU = "0", ConfiguracaoServico configuracaoServico = null) { - var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var configServico = configuracaoServico ?? _configuracaoServico ?? ConfiguracaoServico.Instancia; + distDFeInt pedDistDFeInt; XmlDocument dadosConsulta; var ws = InicializaCTeDistDFeInteresse(documento, ultNSU, nSU, out pedDistDFeInt, out dadosConsulta, configServico); @@ -78,11 +94,11 @@ public RetornoCteDistDFeInt CTeDistDFeInteresse(string ufAutor, string documento #region Obtém um retDistDFeInt de cada evento e salva em arquivo - if (retConsulta.loteDistDFeInt != null) + if (retConsulta.loteDistDFeInt != null && configServico.UnZip) { for (int i = 0; i < retConsulta.loteDistDFeInt.Length; i++) { - string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe); + string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe).RemoverDeclaracaoXml(); string chCTe = string.Empty; if (conteudo.StartsWith("(conteudo); chCTe = procEventoNFeConteudo.eventoCTe.infEvento.chCTe; } + else if (conteudo.StartsWith("(conteudo); + chCTe = retConteudo.protCTe.infProt.chCTe; + } + else + { + + } string[] schema = retConsulta.loteDistDFeInt[i].schema.Split('_'); if (chCTe == string.Empty) @@ -111,7 +136,7 @@ public RetornoCteDistDFeInt CTeDistDFeInteresse(string ufAutor, string documento public async Task CTeDistDFeInteresseAsync(string ufAutor, string documento, string ultNSU = "0", string nSU = "0", ConfiguracaoServico configuracaoServico = null) { - var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var configServico = configuracaoServico ?? _configuracaoServico ?? ConfiguracaoServico.Instancia; distDFeInt pedDistDFeInt; XmlDocument dadosConsulta; var ws = InicializaCTeDistDFeInteresse(documento, ultNSU, nSU, out pedDistDFeInt, out dadosConsulta, configServico); @@ -126,11 +151,11 @@ public async Task CTeDistDFeInteresseAsync(string ufAutor, #region Obtém um retDistDFeInt de cada evento e salva em arquivo - if (retConsulta.loteDistDFeInt != null) + if (retConsulta.loteDistDFeInt != null && configServico.UnZip) { for (int i = 0; i < retConsulta.loteDistDFeInt.Length; i++) { - string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe); + string conteudo = Compressao.Unzip(retConsulta.loteDistDFeInt[i].XmlNfe).RemoverDeclaracaoXml(); string chCTe = string.Empty; if (conteudo.StartsWith(" CTeDistDFeInteresseAsync(string ufAutor, var procEventoNFeConteudo = FuncoesXml.XmlStringParaClasse(conteudo); chCTe = procEventoNFeConteudo.eventoCTe.infEvento.chCTe; } + else if (conteudo.StartsWith("(conteudo); + chCTe = retConteudo.protCTe.infProt.chCTe; + } string[] schema = retConsulta.loteDistDFeInt[i].schema.Split('_'); if (chCTe == string.Empty) @@ -164,7 +194,7 @@ private CTeDistDFeInteresse InicializaCTeDistDFeInteresse(string documento, stri #region Cria o objeto wdsl para consulta - var ws = WsdlFactory.CriaWsdlCTeDistDFeInteresse(configuracaoServico); + var ws = WsdlFactory.CriaWsdlCTeDistDFeInteresse(configuracaoServico, _certificado); #endregion @@ -183,17 +213,18 @@ private CTeDistDFeInteresse InicializaCTeDistDFeInteresse(string documento, stri pedDistDFeInt.CNPJ = documento; - pedDistDFeInt.distNSU = new distNSU {ultNSU = ultNSU.PadLeft(15, '0')}; + pedDistDFeInt.distNSU = new distNSU { ultNSU = ultNSU.PadLeft(15, '0') }; if (!nSU.Equals("0")) { - pedDistDFeInt.consNSU = new consNSU {NSU = nSU.PadLeft(15, '0')}; + pedDistDFeInt.consNSU = new consNSU { NSU = nSU.PadLeft(15, '0') }; pedDistDFeInt.distNSU = null; } #endregion - pedDistDFeInt.ValidaSchema(configuracaoServico); + if (configuracaoServico.IsValidaSchemas) + pedDistDFeInt.ValidaSchema(configuracaoServico); var xmlConsulta = pedDistDFeInt.ObterXmlString(); diff --git a/CTe.Servicos/Enderecos/Helpers/UrlHelper.cs b/CTe.Servicos/Enderecos/Helpers/UrlHelper.cs new file mode 100644 index 000000000..827cd2a1e --- /dev/null +++ b/CTe.Servicos/Enderecos/Helpers/UrlHelper.cs @@ -0,0 +1,653 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using CTe.Classes; +using CTe.Classes.Informacoes.Tipos; +using CTe.Classes.Servicos.Tipos; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; + +namespace CTe.Servicos.Enderecos.Helpers +{ + public class UrlHelper + { + public static UrlCTe ObterUrlServico(ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + switch (configServico.tpAmb) + { + case TipoAmbiente.Homologacao: + if (configServico.TipoEmissao == tpEmis.teSVCRS) + { + return UrlHomologacaoSvrs(configServico); + } + + if (configServico.TipoEmissao == tpEmis.teSVCSP) + { + return UrlHomologacaoSvcsp(configServico); + } + + return UrlHomologacao(configServico); + case TipoAmbiente.Producao: + if (configServico.TipoEmissao == tpEmis.teSVCRS) + { + return UrlProducaoSvrs(configServico); + } + + if (configServico.TipoEmissao == tpEmis.teSVCSP) + { + return UrlProducaoSvcsp(configServico); + } + + return UrlProducao(configServico); + } + + throw new InvalidOperationException("Tipo Ambiente inválido"); + } + + public static string ObterUrlQrCode(ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + switch (configServico.tpAmb) + { + case TipoAmbiente.Homologacao: + return UrlHomologacao(configServico).QrCode; + case TipoAmbiente.Producao: + return UrlProducao(configServico).QrCode; + } + + throw new InvalidOperationException("Tipo Ambiente inválido"); + } + + private static UrlCTe UrlProducaoSvcsp(ConfiguracaoServico configuracaoServico) + { + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeConsultaV4.asmx", + CteStatusServico = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode" + }; + } + + return new UrlCTe + { + CteRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", + CteRetRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", + CteConsulta = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", + CteStatusServico = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", + QrCode = @"http://dfe-portal.svrs.rs.gov.br/cte/QRCode", + CteRecepcaoEvento = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx" + }; + } + + private static UrlCTe UrlHomologacaoSvcsp(ConfiguracaoServico configuracaoServico) + { + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeConsultaV4.asmx", + CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeConsulta/qrCode" + }; + } + + return new UrlCTe + { + CteRecepcaoEvento = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx", + CteRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcao.asmx", + CteRetRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", + CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", + CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx" + }; + } + + private static UrlCTe UrlHomologacaoSvrs(ConfiguracaoServico configuracaoServico) + { + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoEventoV4/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoSincV4/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeConsultaV4/CTeConsultaV4.asmx", + CteStatusServico = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeStatusServicoV4/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoOSV4/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoGTVeV4/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode" + }; + } + + return new UrlCTe + { + CteRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CTeRecepcao.asmx", + CteRetRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/CTeRetRecepcao.asmx", + CteInutilizacao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", + CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteconsulta/CTeConsulta.asmx", + CteStatusServico = @"https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CTeStatusServico.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", + CteRecepcaoEvento = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/CTeRecepcaoEvento.asmx" + }; + } + + private static UrlCTe UrlProducaoSvrs(ConfiguracaoServico configuracaoServico) + { + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoEventoV4/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoSincV4/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://cte.svrs.rs.gov.br/ws/CTeConsultaV4/CTeConsultaV4.asmx", + CteStatusServico = @"https://cte.svrs.rs.gov.br/ws/CTeStatusServicoV4/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoOSV4/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoGTVeV4/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode" + }; + } + + return new UrlCTe + { + CteRecepcao = @"https://cte.svrs.rs.gov.br/ws/cterecepcao/CTeRecepcao.asmx", + CteRetRecepcao = @"https://cte.svrs.rs.gov.br/ws/cteretrecepcao/CTeRetRecepcao.asmx", + CteInutilizacao = @"https://cte.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", + CteConsulta = @"https://cte.svrs.rs.gov.br/ws/cteconsulta/CTeConsulta.asmx", + CteStatusServico = @"https://cte.svrs.rs.gov.br/ws/ctestatusservico/CTeStatusServico.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", + CteRecepcaoEvento = @"https://cte.svrs.rs.gov.br/ws/cterecepcaoevento/CTeRecepcaoEvento.asmx" + }; + } + + private static UrlCTe UrlProducao(ConfiguracaoServico configuracaoServico) + { + switch (configuracaoServico.cUF) + { + case Estado.MT: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://cte.sefaz.mt.gov.br/ctews2/services/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://cte.sefaz.mt.gov.br/ctews2/services/CTeRecepcaoSincV4", + CteConsulta = @"https://cte.sefaz.mt.gov.br/ctews2/services/CTeConsultaV4", + CteStatusServico = @"https://cte.sefaz.mt.gov.br/ctews2/services/CTeStatusServicoV4", + CteRecepcaoOs = @"https://cte.sefaz.mt.gov.br/ctews/services/CTeRecepcaoOSV4", + CteRecepcaoGtve = @"https://cte.sefaz.mt.gov.br/ctews2/services/CTeRecepcaoGTVeV4", + QrCode = @"https://www.sefaz.mt.gov.br/cte/qrcode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico", + CteRetRecepcao = "https://cte.sefaz.mt.gov.br/ctews/services/CteRetRecepcao", + CteRecepcao = "https://cte.sefaz.mt.gov.br/ctews/services/CteRecepcao", + CteInutilizacao = "https://cte.sefaz.mt.gov.br/ctews/services/CteInutilizacao", + CteRecepcaoEvento = "https://cte.sefaz.mt.gov.br/ctews2/services/CteRecepcaoEvento?wsdl", + CteConsulta = @"https://cte.sefaz.mt.gov.br/ctews/services/CteConsulta", + QrCode = @"https://www.sefaz.mt.gov.br/cte/qrcode", + CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.MS: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://producao.cte.ms.gov.br/ws/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://producao.cte.ms.gov.br/ws/CTeRecepcaoSincV4", + CteConsulta = @"https://producao.cte.ms.gov.br/ws/CTeConsultaV4", + CteStatusServico = @"https://producao.cte.ms.gov.br/ws/CTeStatusServicoV4", + CteRecepcaoOs = @"https://producao.cte.ms.gov.br/ws/CTeRecepcaoOSV4", + CteRecepcaoGtve = @"https://producao.cte.ms.gov.br/ws/CTeRecepcaoGTVeV4", + QrCode = @"http://www.dfe.ms.gov.br/cte/qrcode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://producao.cte.ms.gov.br/ws/CteStatusServico", + CteRetRecepcao = @"https://producao.cte.ms.gov.br/ws/CteRetRecepcao", + CteRecepcao = @"https://producao.cte.ms.gov.br/ws/CteRecepcao", + CteInutilizacao = @"https://producao.cte.ms.gov.br/ws/CteInutilizacao", + CteRecepcaoEvento = @"https://producao.cte.ms.gov.br/ws/CteRecepcaoEvento", + CteConsulta = @"https://producao.cte.ms.gov.br/ws/CteConsulta", + QrCode = @"http://www.dfe.ms.gov.br/cte/qrcode", + CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.MG: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://cte.fazenda.mg.gov.br/cte/services/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://cte.fazenda.mg.gov.br/cte/services/CTeRecepcaoSincV4", + CteConsulta = @"https://cte.fazenda.mg.gov.br/cte/services/CTeConsultaV4", + CteStatusServico = @"https://cte.fazenda.mg.gov.br/cte/services/CTeStatusServicoV4", + CteRecepcaoOs = @"https://cte.fazenda.mg.gov.br/cte/services/CTeRecepcaoOSV4", + CteRecepcaoGtve = @"https://cte.fazenda.mg.gov.br/cte/services/CTeRecepcaoGTVeV4", + QrCode = @"https://portalcte.fazenda.mg.gov.br/portalcte/sistema/qrcode.xhtml" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://cte.fazenda.mg.gov.br/cte/services/CteStatusServico", + CteRetRecepcao = @"https://cte.fazenda.mg.gov.br/cte/services/CteRetRecepcao", + CteRecepcao = @"https://cte.fazenda.mg.gov.br/cte/services/CteRecepcao", + CteInutilizacao = @"https://cte.fazenda.mg.gov.br/cte/services/CteInutilizacao", + CteRecepcaoEvento = @"https://cte.fazenda.mg.gov.br/cte/services/RecepcaoEvento", + CteConsulta = @"https://cte.fazenda.mg.gov.br/cte/services/CteConsulta", + QrCode = @"https://portalcte.fazenda.mg.gov.br/portalcte/sistema/qrcode.xhtml", + CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.PR: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://cte.fazenda.pr.gov.br/cte4/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://cte.fazenda.pr.gov.br/cte4/CTeRecepcaoSincV4", + CteConsulta = @"https://cte.fazenda.pr.gov.br/cte4/CTeConsultaV4", + CteStatusServico = @"https://cte.fazenda.pr.gov.br/cte4/CTeStatusServicoV4", + CteRecepcaoOs = @"https://cte.fazenda.pr.gov.br/cte4/CTeRecepcaoOSV4", + CteRecepcaoGtve = @"https://cte.fazenda.pr.gov.br/cte4/CTeRecepcaoGTVeV4", + QrCode = @"http://www.fazenda.pr.gov.br/cte/qrcode" + }; + } + + return new UrlCTe + { + CteStatusServico = @" https://cte.fazenda.pr.gov.br/cte/CteStatusServico?wsdl", + CteRetRecepcao = @"https://cte.fazenda.pr.gov.br/cte/CteRetRecepcao?wsdl", + CteRecepcao = @"https://cte.fazenda.pr.gov.br/cte/CteRecepcao?wsdl", + CteInutilizacao = @"https://cte.fazenda.pr.gov.br/cte/CteInutilizacao?wsdl", + CteRecepcaoEvento = @"https://cte.fazenda.pr.gov.br/cte/CteRecepcaoEvento?wsdl", + CteConsulta = @"https://cte.fazenda.pr.gov.br/cte/CteConsulta?wsdl", + QrCode = @"http://www.fazenda.pr.gov.br/cte/qrcode", + CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.SP: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeConsultaV4.asmx", + CteStatusServico = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode" + }; + } + + return new UrlCTe + { + CteStatusServico = + @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx", + CteRetRecepcao = + @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRetRecepcao.asmx", + CteRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", + CteInutilizacao = + @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", + CteRecepcaoEvento = + @"https://nfe.fazenda.sp.gov.br/cteweb/services/cteRecepcaoEvento.asmx", + CteConsulta = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteConsulta.asmx", + QrCode = @"https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", + CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.AC: + case Estado.AL: + case Estado.AM: + case Estado.BA: + case Estado.CE: + case Estado.DF: + case Estado.ES: + case Estado.GO: + case Estado.MA: + case Estado.PA: + case Estado.PB: + case Estado.PI: + case Estado.RJ: + case Estado.RN: + case Estado.RO: + case Estado.SC: + case Estado.SE: + case Estado.TO: + case Estado.RS: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoEventoV4/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoSincV4/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://cte.svrs.rs.gov.br/ws/CTeConsultaV4/CTeConsultaV4.asmx", + CteStatusServico = @"https://cte.svrs.rs.gov.br/ws/CTeStatusServicoV4/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoOSV4/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://cte.svrs.rs.gov.br/ws/CTeRecepcaoGTVeV4/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", + }; + } + + return new UrlCTe + { + CteStatusServico = + @"https://cte.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", + CteInutilizacao = + @"https://cte.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", + CteRecepcao = @"https://cte.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", + CteRecepcaoEvento = + @"https://cte.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx", + CteRetRecepcao = @"https://cte.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", + CteConsulta = @"https://cte.svrs.rs.gov.br/ws/cteconsulta/CteConsulta.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", + CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.AP: + case Estado.PE: + case Estado.RR: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeConsultaV4.asmx", + CteStatusServico = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", + CteRetRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", + CteRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", + CteInutilizacao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", + CteRecepcaoEvento = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx", + CteConsulta = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", + QrCode = @"https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", + CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + default: + throw new InvalidOperationException( + "Não achei a url do seu estado(uf), tente com outra unidade federativa"); + } + + } + + private static UrlCTe UrlHomologacao(ConfiguracaoServico configuracaoServico) + { + switch (configuracaoServico.cUF) + { + case Estado.MT: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://homologacao.sefaz.mt.gov.br/ctews2/services/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://homologacao.sefaz.mt.gov.br/ctews2/services/CTeRecepcaoSincV4", + CteConsulta = @"https://homologacao.sefaz.mt.gov.br/ctews2/services/CTeConsultaV4", + CteStatusServico = @"https://homologacao.sefaz.mt.gov.br/ctews2/services/CTeStatusServicoV4", + CteRecepcaoOs = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CTeRecepcaoOSV4", + CteRecepcaoGtve = @"https://homologacao.sefaz.mt.gov.br/ctews2/services/CTeRecepcaoGTVeV4", + QrCode = @"https://homologacao.sefaz.mt.gov.br/cte/qrcode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteStatusServico", + CteRetRecepcao = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteRetRecepcao", + CteRecepcao = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteRecepcao", + CteInutilizacao = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteInutilizacao", + CteRecepcaoEvento = + @"https://homologacao.sefaz.mt.gov.br/ctews2/services/CteRecepcaoEvento?wsdl", + CteConsulta = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteConsulta", + QrCode = @"https://homologacao.sefaz.mt.gov.br/cte/qrcode", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.MS: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://homologacao.cte.ms.gov.br/ws/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://homologacao.cte.ms.gov.br/ws/CTeRecepcaoSincV4", + CteConsulta = @"https://homologacao.cte.ms.gov.br/ws/CTeConsultaV4", + CteStatusServico = @"https://homologacao.cte.ms.gov.br/ws/CTeStatusServicoV4", + QrCode = @"http://www.dfe.ms.gov.br/cte/qrcode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://homologacao.cte.ms.gov.br/ws/CteStatusServico", + CteRetRecepcao = @"https://homologacao.cte.ms.gov.br/ws/CteRetRecepcao", + CteRecepcao = @"https://homologacao.cte.ms.gov.br/ws/CteRecepcao", + CteInutilizacao = @"https://homologacao.cte.ms.gov.br/ws/CteInutilizacao", + CteRecepcaoEvento = @"https://homologacao.cte.ms.gov.br/ws/CteRecepcaoEvento", + CteConsulta = @"https://homologacao.cte.ms.gov.br/ws/CteConsulta", + QrCode = @"http://www.dfe.ms.gov.br/cte/qrcode", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.MG: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://hcte.fazenda.mg.gov.br/cte/services/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://hcte.fazenda.mg.gov.br/cte/services/CTeRecepcaoSincV4", + CteConsulta = @"https://hcte.fazenda.mg.gov.br/cte/services/CTeConsultaV4", + CteStatusServico = @"https://hcte.fazenda.mg.gov.br/cte/services/CTeStatusServicoV4", + CteRecepcaoOs = @"https://hcte.fazenda.mg.gov.br/cte/services/CTeRecepcaoOSV4", + CteRecepcaoGtve = @"https://hcte.fazenda.mg.gov.br/cte/services/CTeRecepcaoGTVeV4", + QrCode = @"https://portalcte.fazenda.mg.gov.br/portalcte/sistema/qrcode.xhtml" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://hcte.fazenda.mg.gov.br/cte/services/CteStatusServico?wsdl", + CteRetRecepcao = @"https://hcte.fazenda.mg.gov.br/cte/services/CteRetRecepcao?wsdl", + CteRecepcao = @"https://hcte.fazenda.mg.gov.br/cte/services/CteRecepcao?wsdl", + CteInutilizacao = @"https://hcte.fazenda.mg.gov.br/cte/services/CteInutilizacao?wsdl", + CteRecepcaoEvento = @"https://hcte.fazenda.mg.gov.br/cte/services/RecepcaoEvento?wsdl", + CteConsulta = @"https://hcte.fazenda.mg.gov.br/cte/services/CteConsulta?wsdl", + QrCode = @"https://hcte.fazenda.mg.gov.br/portalcte/sistema/qrcode.xhtml", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.PR: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://homologacao.cte.fazenda.pr.gov.br/cte4/CTeRecepcaoEventoV4", + CteRecepcaoSinc = @"https://homologacao.cte.fazenda.pr.gov.br/cte4/CTeRecepcaoSincV4", + CteConsulta = @"https://homologacao.cte.fazenda.pr.gov.br/cte4/CTeConsultaV4", + CteStatusServico = @"https://homologacao.cte.fazenda.pr.gov.br/cte4/CTeStatusServicoV4", + CteRecepcaoOs = @"https://homologacao.cte.fazenda.pr.gov.br/cte4/CTeRecepcaoOSV4", + CteRecepcaoGtve = @"https://homologacao.cte.fazenda.pr.gov.br/cte4/CTeRecepcaoGTVeV4", + QrCode = @"http://www.fazenda.pr.gov.br/cte/qrcode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteStatusServico?wsdl", + CteRetRecepcao = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteRetRecepcao?wsdl", + CteRecepcao = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteRecepcao?wsdl", + CteInutilizacao = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteInutilizacao?wsdl", + CteRecepcaoEvento = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteRecepcaoEvento?wsdl", + CteConsulta = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteConsulta?wsdl", + QrCode = @"http://www.fazenda.pr.gov.br/cte/qrcode", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.RS: + return new UrlCTe + { + CteStatusServico = + @"https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", + CteRetRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", + CteRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", + CteInutilizacao = + @"https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", + CteRecepcaoEvento = + @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx", + CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteconsulta/CteConsulta.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.SP: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeConsultaV4.asmx", + CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeConsulta/qrCode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx", + CteRetRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteRetRecepcao.asmx", + CteRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", + CteInutilizacao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", + CteRecepcaoEvento = @"https://homologacao.nfe.fazenda.sp.gov.br/cteweb/services/cteRecepcaoEvento.asmx", + CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteConsulta.asmx", + QrCode = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.AC: + case Estado.AL: + case Estado.AM: + case Estado.BA: + case Estado.CE: + case Estado.DF: + case Estado.ES: + case Estado.GO: + case Estado.MA: + case Estado.PA: + case Estado.PB: + case Estado.PI: + case Estado.RJ: + case Estado.RN: + case Estado.RO: + case Estado.SC: + case Estado.SE: + case Estado.TO: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoEventoV4/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoSincV4/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeConsultaV4/CTeConsultaV4.asmx", + CteStatusServico = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeStatusServicoV4/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoOSV4/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://cte-homologacao.svrs.rs.gov.br/ws/CTeRecepcaoGTVeV4/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode" + }; + } + + return new UrlCTe + { + CteStatusServico = + @"https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CTeStatusServico.asmx", + CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteconsulta/CTeConsulta.asmx", + CteInutilizacao = + @"https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", + CteRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CTeRecepcao.asmx", + CteRecepcaoEvento = + @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/CTeRecepcaoEvento.asmx", + CteRetRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/CTeRetRecepcao.asmx", + QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + case Estado.AP: + case Estado.PE: + case Estado.RR: + if (configuracaoServico.VersaoLayout == versao.ve400) + { + return new UrlCTe + { + CteRecepcaoEvento = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoEventoV4.asmx", + CteRecepcaoSinc = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoSincV4.asmx", + CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeConsultaV4.asmx", + CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeStatusServicoV4.asmx", + CteRecepcaoOs = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoOSV4.asmx", + CteRecepcaoGtve = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeWS/WS/CTeRecepcaoGTVeV4.asmx", + QrCode = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeConsulta/qrCode" + }; + } + + return new UrlCTe + { + CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", + CteRetRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", + CteRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcao.asmx", + CteInutilizacao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", + CteRecepcaoEvento = @"https://cte.sefaz.rs.gov.br/ws/CteRecepcaoEvento/CteRecepcaoEvento.asmx", + CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", + QrCode = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", + CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" + }; + default: + throw new InvalidOperationException( + "Não achei a url do seu estado(uf), tente com outra unidade federativa"); + } + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Enderecos/UrlCTe.cs b/CTe.Servicos/Enderecos/UrlCTe.cs similarity index 89% rename from Shared.CTe.Servicos/Enderecos/UrlCTe.cs rename to CTe.Servicos/Enderecos/UrlCTe.cs index 771e49b2f..3edf97a97 100644 --- a/Shared.CTe.Servicos/Enderecos/UrlCTe.cs +++ b/CTe.Servicos/Enderecos/UrlCTe.cs @@ -36,11 +36,20 @@ public class UrlCTe { public string CteConsulta { get; set; } public string CteInutilizacao { get; set; } + public string CteRecepcaoSinc { get; set; } public string CteRecepcao { get; set; } public string CteRecepcaoEvento { get; set; } public string CteRetRecepcao { get; set; } public string CteStatusServico { get; set; } public string CTeDistribuicaoDFe { get; set; } public string QrCode { get; set; } + public string CteRecepcaoOs { get; set; } + public string CteRecepcaoGtve { get; set; } + + public UrlCTe() + { + //CTe tem como URL de distribuição ambinente nacional + CTeDistribuicaoDFe = @"https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx"; + } } } \ No newline at end of file diff --git a/Shared.CTe.Servicos/EnviarCte/RetornoEnviarCte.cs b/CTe.Servicos/EnviarCte/RetornoEnviarCte.cs similarity index 100% rename from Shared.CTe.Servicos/EnviarCte/RetornoEnviarCte.cs rename to CTe.Servicos/EnviarCte/RetornoEnviarCte.cs diff --git a/Shared.CTe.Servicos/EnviarCte/ServicoEnviarCte.cs b/CTe.Servicos/EnviarCte/ServicoEnviarCte.cs similarity index 98% rename from Shared.CTe.Servicos/EnviarCte/ServicoEnviarCte.cs rename to CTe.Servicos/EnviarCte/ServicoEnviarCte.cs index b21d20cc0..583b08f54 100644 --- a/Shared.CTe.Servicos/EnviarCte/ServicoEnviarCte.cs +++ b/CTe.Servicos/EnviarCte/ServicoEnviarCte.cs @@ -14,10 +14,10 @@ public class ServicoEnviarCte public RetornoEnviarCte Enviar(int lote, Classes.CTe cte, ConfiguracaoServico configuracaoServico = null) { var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - + ServicoCTeRecepcao servicoRecepcao = new ServicoCTeRecepcao(); - retEnviCte retEnviCte = servicoRecepcao.CTeRecepcao(lote, new List {cte}, configServico); + retEnviCte retEnviCte = servicoRecepcao.CTeRecepcao(lote, new List { cte }, configServico); if (retEnviCte.cStat != 103) { @@ -28,7 +28,6 @@ public RetornoEnviarCte Enviar(int lote, Classes.CTe cte, ConfiguracaoServico co retConsReciCTe retConsReciCTe = servicoConsultaRecibo.Consultar(configServico); - cteProc cteProc = null; if (retConsReciCTe.cStat == 104) { @@ -54,6 +53,7 @@ public RetornoEnviarCte Enviar(int lote, Classes.CTe cte, ConfiguracaoServico co public async Task EnviarAsync(int lote, Classes.CTe cte, ConfiguracaoServico configuracaoServico = null) { var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + ServicoCTeRecepcao servicoRecepcao = new ServicoCTeRecepcao(); retEnviCte retEnviCte = await servicoRecepcao.CTeRecepcaoAsync(lote, new List { cte }, configServico); diff --git a/Shared.CTe.Servicos/Eventos/Contratos/IServicoController.cs b/CTe.Servicos/Eventos/Contratos/IServicoController.cs similarity index 100% rename from Shared.CTe.Servicos/Eventos/Contratos/IServicoController.cs rename to CTe.Servicos/Eventos/Contratos/IServicoController.cs diff --git a/Shared.CTe.Servicos/Eventos/EventoCancelamento.cs b/CTe.Servicos/Eventos/EventoCancelamento.cs similarity index 76% rename from Shared.CTe.Servicos/Eventos/EventoCancelamento.cs rename to CTe.Servicos/Eventos/EventoCancelamento.cs index ae8fa0713..c644667fb 100644 --- a/Shared.CTe.Servicos/Eventos/EventoCancelamento.cs +++ b/CTe.Servicos/Eventos/EventoCancelamento.cs @@ -38,19 +38,22 @@ using CTe.Servicos.Factory; using CTe.Utils.CTe; using CteEletronico = CTe.Classes.CTe; +using CteEletronicoOS = CTe.CTeOSClasses.CTeOS; namespace CTe.Servicos.Eventos { public class EventoCancelamento { private readonly CteEletronico _cte; + private readonly CteEletronicoOS _cteOs; + private readonly int _sequenciaEvento; private readonly string _numeroProtocolo; private readonly string _justificativa; - + public eventoCTe EventoEnviado { get; private set; } public retEventoCTe RetornoSefaz { get; private set; } - + public EventoCancelamento(CteEletronico cte, int sequenciaEvento, string numeroProtocolo, string justificativa) { _cte = cte; @@ -59,22 +62,43 @@ public EventoCancelamento(CteEletronico cte, int sequenciaEvento, string numeroP _justificativa = justificativa; } + public EventoCancelamento(CteEletronicoOS cte, int sequenciaEvento, string numeroProtocolo, string justificativa) + { + _cteOs = cte; + _sequenciaEvento = sequenciaEvento; + _numeroProtocolo = numeroProtocolo; + _justificativa = justificativa; + } + public retEventoCTe Cancelar(ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var evento = ClassesFactory.CriaEvCancCTe(_justificativa, _numeroProtocolo); + + EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configServico); + RetornoSefaz = new ServicoController().Executar(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configServico); + + return RetornoSefaz; + } + + public retEventoCTe CancelarOs(ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var evento = ClassesFactory.CriaEvCancCTe(_justificativa, _numeroProtocolo); - EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configuracaoServico); - RetornoSefaz = new ServicoController().Executar(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configuracaoServico); + EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cteOs.Chave(), _cteOs.InfCte.emit.CNPJ, evento, configServico); + RetornoSefaz = new ServicoController().Executar(_cteOs, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configServico); return RetornoSefaz; } public async Task CancelarAsync(ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var evento = ClassesFactory.CriaEvCancCTe(_justificativa, _numeroProtocolo); - EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configuracaoServico); - RetornoSefaz = await new ServicoController().ExecutarAsync(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configuracaoServico); + EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configServico); + RetornoSefaz = await new ServicoController().ExecutarAsync(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configServico); return RetornoSefaz; } diff --git a/Shared.CTe.Servicos/Eventos/EventoCartaCorrecao.cs b/CTe.Servicos/Eventos/EventoCartaCorrecao.cs similarity index 83% rename from Shared.CTe.Servicos/Eventos/EventoCartaCorrecao.cs rename to CTe.Servicos/Eventos/EventoCartaCorrecao.cs index 4bbf8b670..a3c673439 100644 --- a/Shared.CTe.Servicos/Eventos/EventoCartaCorrecao.cs +++ b/CTe.Servicos/Eventos/EventoCartaCorrecao.cs @@ -39,12 +39,14 @@ using CTe.Servicos.Factory; using CTe.Utils.CTe; using CteEletronico = CTe.Classes.CTe; +using CteEletronicoOS = CTe.CTeOSClasses.CTeOS; namespace CTe.Servicos.Eventos { public class EventoCartaCorrecao { private readonly CteEletronico _cte; + private readonly CteEletronicoOS _cteOs; private readonly int _sequenciaEvento; private readonly List _infCorrecaos; @@ -59,6 +61,13 @@ public EventoCartaCorrecao(CteEletronico cte, int sequenciaEvento, _infCorrecaos = infCorrecaos; } + public EventoCartaCorrecao(CteEletronicoOS cte, int sequenciaEvento, List infCorrecaos) + { + _cteOs = cte; + _sequenciaEvento = sequenciaEvento; + _infCorrecaos = infCorrecaos; + } + public retEventoCTe AdicionarCorrecoes(ConfiguracaoServico configuracaoServico = null) { var eventoCorrecao = ClassesFactory.CriaEvCCeCTe(_infCorrecaos); @@ -69,6 +78,16 @@ public retEventoCTe AdicionarCorrecoes(ConfiguracaoServico configuracaoServico = return RetornoSefaz; } + public retEventoCTe AdicionarCorrecoesOs(ConfiguracaoServico configuracaoServico = null) + { + var eventoCorrecao = ClassesFactory.CriaEvCCeCTe(_infCorrecaos); + + EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.CartaCorrecao, _sequenciaEvento, _cteOs.Chave(), _cteOs.InfCte.emit.CNPJ, eventoCorrecao, configuracaoServico); + RetornoSefaz = new ServicoController().Executar(_cteOs, _sequenciaEvento, eventoCorrecao, CTeTipoEvento.CartaCorrecao, configuracaoServico); + + return RetornoSefaz; + } + public async Task AdicionarCorrecoesAsync(ConfiguracaoServico configuracaoServico = null) { var eventoCorrecao = ClassesFactory.CriaEvCCeCTe(_infCorrecaos); diff --git a/Shared.CTe.Servicos/Eventos/EventoDesacordo.cs b/CTe.Servicos/Eventos/EventoDesacordo.cs similarity index 100% rename from Shared.CTe.Servicos/Eventos/EventoDesacordo.cs rename to CTe.Servicos/Eventos/EventoDesacordo.cs diff --git a/Shared.CTe.Servicos/Eventos/FactoryEvento.cs b/CTe.Servicos/Eventos/FactoryEvento.cs similarity index 90% rename from Shared.CTe.Servicos/Eventos/FactoryEvento.cs rename to CTe.Servicos/Eventos/FactoryEvento.cs index f8cd42416..f862794e2 100644 --- a/Shared.CTe.Servicos/Eventos/FactoryEvento.cs +++ b/CTe.Servicos/Eventos/FactoryEvento.cs @@ -36,6 +36,7 @@ using CTe.Classes; using CTe.Classes.Servicos.Evento; using CTe.Classes.Servicos.Evento.Flags; +using CTe.Classes.Servicos.Tipos; using CTe.Utils.CTe; using CTeEletronico = CTe.Classes.CTe; @@ -46,7 +47,8 @@ public class FactoryEvento //Vou manter para evitar quebra de código pois a classe e o metodo são publicos public static eventoCTe CriaEvento(CTeEletronico cte, CTeTipoEvento cTeTipoEvento, int sequenciaEvento, EventoContainer container, ConfiguracaoServico configuracaoServico = null) { - return CriaEvento(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return CriaEvento(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configServico); } public static eventoCTe CriaEvento(CTeTipoEvento cTeTipoEvento, int sequenciaEvento, string chave, string cnpj, EventoContainer container, ConfiguracaoServico configuracaoServico = null) @@ -56,7 +58,12 @@ public static eventoCTe CriaEvento(CTeTipoEvento cTeTipoEvento, int sequenciaEve var id = new StringBuilder("ID"); id.Append((int)cTeTipoEvento); id.Append(chave); - id.Append(sequenciaEvento.ToString("D2")); + + if (configServico.VersaoLayout == versao.ve200 || configServico.VersaoLayout == versao.ve300) + id.Append(sequenciaEvento.ToString("D2")); + + if (configServico.VersaoLayout == versao.ve400) + id.Append(sequenciaEvento.ToString("D3")); return new eventoCTe { diff --git a/CTe.Servicos/Eventos/ServicoController.cs b/CTe.Servicos/Eventos/ServicoController.cs new file mode 100644 index 000000000..5e319f335 --- /dev/null +++ b/CTe.Servicos/Eventos/ServicoController.cs @@ -0,0 +1,137 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Threading.Tasks; +using System.Xml; +using CTe.Classes; +using CTe.Classes.Servicos.Evento; +using CTe.Classes.Servicos.Evento.Flags; +using CTe.Classes.Servicos.Tipos; +using CTe.Servicos.Eventos.Contratos; +using CTe.Servicos.Factory; +using CTe.Utils.CTe; +using CTe.Utils.Evento; +using CteEletronico = CTe.Classes.CTe; +using CteEletronicoOS = CTe.CTeOSClasses.CTeOS; + +namespace CTe.Servicos.Eventos +{ + public class ServicoController : IServicoController + { + public retEventoCTe Executar(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configServico); + } + + public retEventoCTe Executar(CteEletronicoOS cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.InfCte.emit.CNPJ, container, configServico); + } + + public async Task ExecutarAsync(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return await ExecutarAsync(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configServico); + } + + public retEventoCTe Executar(CTeTipoEvento cTeTipoEvento, int sequenciaEvento, string chave, string cnpj, EventoContainer container, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configServico); + evento.Assina(configServico); + + if (configServico.IsValidaSchemas) + evento.ValidarSchema(configServico); + + evento.SalvarXmlEmDisco(configServico); + + XmlNode retornoXml = null; + + if (evento.versao == versao.ve200 || evento.versao == versao.ve300) + { + var webService = WsdlFactory.CriaWsdlCteEvento(configServico); + retornoXml = webService.cteRecepcaoEvento(evento.CriaXmlRequestWs()); + } + + if (evento.versao == versao.ve400) + { + var webService = WsdlFactory.CriaWsdlCteEventoV4(configServico); + retornoXml = webService.cteRecepcaoEvento(evento.CriaXmlRequestWs()); + } + + var retorno = retEventoCTe.LoadXml(retornoXml.OuterXml, evento); + retorno.SalvarXmlEmDisco(configServico); + + return retorno; + } + + public async Task ExecutarAsync(CTeTipoEvento cTeTipoEvento, + int sequenciaEvento, + string chave, string + cnpj, EventoContainer container, + ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configServico); + evento.Assina(configServico); + + if (configServico.IsValidaSchemas) + evento.ValidarSchema(configServico); + + evento.SalvarXmlEmDisco(configServico); + + XmlNode retornoXml = null; + + if (evento.versao == versao.ve200 || evento.versao == versao.ve300) + { + var webService = WsdlFactory.CriaWsdlCteEvento(configServico); + retornoXml = await webService.cteRecepcaoEventoAsync(evento.CriaXmlRequestWs()); + } + + if (evento.versao == versao.ve400) + { + var webService = WsdlFactory.CriaWsdlCteEventoV4(configServico); + retornoXml = await webService.cteRecepcaoEventoAsync(evento.CriaXmlRequestWs()); + } + + + var retorno = retEventoCTe.LoadXml(retornoXml.OuterXml, evento); + retorno.SalvarXmlEmDisco(configServico); + + return retorno; + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Factory/ClassesFactory.cs b/CTe.Servicos/Factory/ClassesFactory.cs similarity index 87% rename from Shared.CTe.Servicos/Factory/ClassesFactory.cs rename to CTe.Servicos/Factory/ClassesFactory.cs index 02430b892..03492279d 100644 --- a/Shared.CTe.Servicos/Factory/ClassesFactory.cs +++ b/CTe.Servicos/Factory/ClassesFactory.cs @@ -42,6 +42,7 @@ using CTe.Classes.Servicos.Recepcao.Retorno; using CTe.Classes.Servicos.Status; using CTe.Servicos.Inutilizacao; +using DFe.Classes.Entidades; using DFe.Classes.Extensoes; using CTeEletronica = CTe.Classes.CTe; @@ -60,6 +61,18 @@ public static consStatServCte CriaConsStatServCte(ConfiguracaoServico configurac }; } + public static consStatServCTe CriaConsStatServCTe(ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + return new consStatServCTe + { + versao = configServico.VersaoLayout, + cUF = configServico.cUF, + tpAmb = configServico.tpAmb + }; + } + public static consSitCTe CriarconsSitCTe(string chave, ConfiguracaoServico configuracaoServico = null) { var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; @@ -134,20 +147,29 @@ public static evCCeCTe CriaEvCCeCTe(List infCorrecaos) }; } - public static evPrestDesacordo CriaEvPrestDesacordo(string indicadorDesacordo, string observacao) + public static evPrestDesacordo CriaEvPrestDesacordo(string indicadorDesacordo, string observacao, ConfiguracaoServico configuracaoServico = null) { - return new evPrestDesacordo + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var evPrestDesacordo = new evPrestDesacordo { indDesacordoOper = indicadorDesacordo, xObs = observacao }; + + if (configServico.cUF == Estado.MT)//sem acentuação issue #1386 + { + evPrestDesacordo.descEvento = "Prestacao do Servico em Desacordo"; + } + + return evPrestDesacordo; } public static enviCTe CriaEnviCTe(int lote, List cteEletronicoList, ConfiguracaoServico configuracaoServico = null) { var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - return new enviCTe(configServico.VersaoLayout, lote, cteEletronicoList); + return new enviCTe(configServico.ObterVersaoLayoutValida(), lote, cteEletronicoList); } } } \ No newline at end of file diff --git a/CTe.Servicos/Factory/WsdlFactory.cs b/CTe.Servicos/Factory/WsdlFactory.cs new file mode 100644 index 000000000..fb633d0e2 --- /dev/null +++ b/CTe.Servicos/Factory/WsdlFactory.cs @@ -0,0 +1,176 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using CTe.Classes; +using CTe.Classes.Ext; +using CTe.Servicos.Enderecos.Helpers; +using CTe.Wsdl.ConsultaProtocolo; +using CTe.Wsdl.DistribuicaoDFe; +using CTe.Wsdl.Evento; +using CTe.Wsdl.Inutilizacao; +using CTe.Wsdl.Recepcao; +using CTe.Wsdl.RetRecepcao; +using CTe.Wsdl.Status; +using DFe.Classes.Extensoes; +using CTe.CTeOSDocumento.Common; +using CTe.Wsdl.ConsultaProtocolo.V4; +using CTe.Wsdl.Evento.V4; +using CTe.Wsdl.Recepcao.Sincrono; +using System.Security.Cryptography.X509Certificates; + +namespace CTe.Servicos.Factory +{ + public class WsdlFactory + { + public static CteStatusServico CriaWsdlCteStatusServico(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteStatusServico; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteStatusServico(configuracaoWsdl); + } + + public static CteConsulta CriaWsdlConsultaProtocolo(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteConsulta; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteConsulta(configuracaoWsdl); + } + + public static CteConsultaV4 CriaWsdlConsultaProtocoloV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteConsulta; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteConsultaV4(configuracaoWsdl); + } + + public static CteInutilizacao CriaWsdlCteInutilizacao(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteInutilizacao; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteInutilizacao(configuracaoWsdl); + } + + public static CteRetRecepcao CriaWsdlCteRetRecepcao(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRetRecepcao; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteRetRecepcao(configuracaoWsdl); + } + + public static CteRecepcao CriaWsdlCteRecepcao(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcao; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteRecepcao(configuracaoWsdl); + } + + public static CteRecepcaoSincronoV4 CriaWsdlCteRecepcaoSincronoV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoSinc; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteRecepcaoSincronoV4(configuracaoWsdl); + } + public static CteRecepcaoSincronoOSV4 CriaWsdlCteRecepcaoSincronoOSV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoOs; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteRecepcaoSincronoOSV4(configuracaoWsdl); + } + + public static CteRecepcaoEvento CriaWsdlCteEvento(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoEvento; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CteRecepcaoEvento(configuracaoWsdl); + } + + public static CteRecepcaoEventoV4 CriaWsdlCteEventoV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var url = UrlHelper.ObterUrlServico(configServico).CteRecepcaoEvento; + + var configuracaoWsdl = CriaConfiguracao(url, configServico, certificado); + + return new CteRecepcaoEventoV4(configuracaoWsdl); + } + + + public static CTeDistDFeInteresse CriaWsdlCTeDistDFeInteresse(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) + { + var url = UrlHelper.ObterUrlServico(configuracaoServico).CTeDistribuicaoDFe; + + var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + + return new CTeDistDFeInteresse(configuracaoWsdl); + } + + + private static WsdlConfiguracao CriaConfiguracao(string url, ConfiguracaoServico configuracaoServico, X509Certificate2 certificado) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var codigoEstado = configServico.cUF.GetCodigoIbgeEmString(); + var certificadoDigital = certificado ?? configServico.X509Certificate2; + var versaoEmString = configServico.VersaoLayout.GetString(); + var timeOut = configServico.TimeOut; + + return new WsdlConfiguracao + { + CertificadoDigital = certificadoDigital, + Versao = versaoEmString, + CodigoIbgeEstado = codigoEstado, + Url = url, + TimeOut = timeOut + }; + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Inutilizacao/InutilizacaoServico.cs b/CTe.Servicos/Inutilizacao/InutilizacaoServico.cs similarity index 90% rename from Shared.CTe.Servicos/Inutilizacao/InutilizacaoServico.cs rename to CTe.Servicos/Inutilizacao/InutilizacaoServico.cs index 997e665ec..361674039 100644 --- a/Shared.CTe.Servicos/Inutilizacao/InutilizacaoServico.cs +++ b/CTe.Servicos/Inutilizacao/InutilizacaoServico.cs @@ -36,7 +36,7 @@ using CTe.Classes; using CTe.Classes.Servicos.Inutilizacao; using CTe.Servicos.Factory; -using CTe.Utils.Extencoes; +using CTe.Utils.Extensoes; using CTe.Utils.Inutilizacao; using DFe.Classes.Flags; @@ -78,32 +78,36 @@ public InutilizacaoServico(ConfigInutiliza configInutiliza) public retInutCTe Inutilizar(ConfiguracaoServico configuracaoServico = null) { - var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configuracaoServico); - inutCte.Assinar(configuracaoServico); - inutCte.ValidarShcema(configuracaoServico); - inutCte.SalvarXmlEmDisco(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - var webService = WsdlFactory.CriaWsdlCteInutilizacao(configuracaoServico); + var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configServico); + inutCte.Assinar(configServico); + inutCte.ValidarSchema(configServico); + inutCte.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlCteInutilizacao(configServico); var retornoXml = webService.cteInutilizacaoCT(inutCte.CriaRequestWs()); var retorno = retInutCTe.LoadXml(retornoXml.OuterXml, inutCte); - retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configuracaoServico); + retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configServico); return retorno; } public async Task InutilizarAsync(ConfiguracaoServico configuracaoServico = null) { - var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configuracaoServico); - inutCte.Assinar(configuracaoServico); - inutCte.ValidarShcema(configuracaoServico); - inutCte.SalvarXmlEmDisco(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configServico); + inutCte.Assinar(configServico); + inutCte.ValidarSchema(configServico); + inutCte.SalvarXmlEmDisco(configServico); - var webService = WsdlFactory.CriaWsdlCteInutilizacao(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteInutilizacao(configServico); var retornoXml = await webService.cteInutilizacaoCTAsync(inutCte.CriaRequestWs()); var retorno = retInutCTe.LoadXml(retornoXml.OuterXml, inutCte); - retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configuracaoServico); + retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configServico); return retorno; } diff --git a/CTe.Servicos/Properties/AssemblyInfo.cs b/CTe.Servicos/Properties/AssemblyInfo.cs deleted file mode 100644 index b53e5df92..000000000 --- a/CTe.Servicos/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTe.Servicos")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTe.Servicos")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("63227402-2b1e-4bc7-a6df-362129923cf6")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/Shared.CTe.Servicos/Recepcao/AntesEnviarRecepcao.cs b/CTe.Servicos/Recepcao/AntesEnviarRecepcao.cs similarity index 100% rename from Shared.CTe.Servicos/Recepcao/AntesEnviarRecepcao.cs rename to CTe.Servicos/Recepcao/AntesEnviarRecepcao.cs diff --git a/CTe.Servicos/Recepcao/ServicoCTeOSRecepcao.cs b/CTe.Servicos/Recepcao/ServicoCTeOSRecepcao.cs new file mode 100644 index 000000000..61c31cc20 --- /dev/null +++ b/CTe.Servicos/Recepcao/ServicoCTeOSRecepcao.cs @@ -0,0 +1,36 @@ +using CTe.Classes; +using CTe.CTeOSDocumento.CTe.CTeOS.Extensoes; +using CTe.CTeOSDocumento.CTe.CTeOS.Servicos.Autorizacao; +using CTe.Servicos.Enderecos.Helpers; +using CTe.Servicos.Factory; +using CTe.Utils.CTe; +using System.Text; +using CTeEletronico = CTe.CTeOSClasses.CTeOS; + +namespace CTe.Servicos.Recepcao +{ + public class ServicoCTeOSRecepcao + { + public retCTeOS CTeRecepcaoSincronoV4(CTeEletronico cte, ConfiguracaoServico configuracaoServico = null) + { + var instanciaConfiguracao = configuracaoServico ?? ConfiguracaoServico.Instancia; + + cte.InfCte.ide.tpEmis = instanciaConfiguracao.TipoEmissao; + cte.Assina(instanciaConfiguracao); + cte.infCTeSupl = cte.QrCode(instanciaConfiguracao.X509Certificate2, Encoding.UTF8, instanciaConfiguracao.IsAdicionaQrCode, UrlHelper.ObterUrlQrCode(instanciaConfiguracao)); + cte.SalvarXmlEmDisco(instanciaConfiguracao); //salva em disco antes de validas os schemas, facilitando encontrar possíveis erros + cte.ValidaSchema(instanciaConfiguracao); + cte.SalvarXmlEmDisco(instanciaConfiguracao); + + var webService = WsdlFactory.CriaWsdlCteRecepcaoSincronoOSV4(configuracaoServico); + + var retornoXml = webService.CTeRecepcaoSincV4(cte.CriaRequestWs(configuracaoServico)); + + var retorno = retCTeOS.LoadXml(retornoXml.OuterXml, cte); + + retorno.SalvarXmlEmDisco(cte.Chave(), configuracaoServico); + + return retorno; + } + } +} diff --git a/CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs b/CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs new file mode 100644 index 000000000..7ac0ee9f0 --- /dev/null +++ b/CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs @@ -0,0 +1,172 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using CTe.Classes; +using CTe.Classes.Servicos.Recepcao; +using CTe.Classes.Servicos.Tipos; +using CTe.Servicos.Enderecos.Helpers; +using CTe.Servicos.Factory; +using CTe.Utils.CTe; +using CTe.Utils.Recepcao; +using DFe.Classes.Flags; +using CTeEletronico = CTe.Classes.CTe; + +namespace CTe.Servicos.Recepcao +{ + public class ServicoCTeRecepcao + { + public event EventHandler AntesDeEnviar; + + public retEnviCte CTeRecepcao(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configServico); + + var webService = WsdlFactory.CriaWsdlCteRecepcao(configServico); + + OnAntesDeEnviar(enviCte); + + var retornoXml = webService.cteRecepcaoLote(enviCte.CriaRequestWs(configServico)); + + var retorno = retEnviCte.LoadXml(retornoXml.OuterXml, enviCte); + retorno.SalvarXmlEmDisco(configServico); + + return retorno; + } + + public async Task CTeRecepcaoAsync(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configServico); + + var webService = WsdlFactory.CriaWsdlCteRecepcao(configServico); + + OnAntesDeEnviar(enviCte); + + var retornoXml = await webService.cteRecepcaoLoteAsync(enviCte.CriaRequestWs(configServico)); + + var retorno = retEnviCte.LoadXml(retornoXml.OuterXml, enviCte); + retorno.SalvarXmlEmDisco(configServico); + + return retorno; + } + + public retCTe CTeRecepcaoSincronoV4(CTeEletronico cte, ConfiguracaoServico configuracaoServico = null) + { + var instanciaConfiguracao = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaConfiguracao.tpAmb == TipoAmbiente.Homologacao && instanciaConfiguracao.VersaoLayout == versao.ve300) + { + const string razaoSocial = "CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; + + cte.infCte.rem.xNome = razaoSocial; + cte.infCte.dest.xNome = razaoSocial; + } + + if (instanciaConfiguracao.tpAmb == TipoAmbiente.Homologacao && instanciaConfiguracao.VersaoLayout == versao.ve400) + { + const string razaoSocial = "CTE EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; + + cte.infCte.rem.xNome = razaoSocial; + cte.infCte.dest.xNome = razaoSocial; + } + + cte.infCte.ide.tpEmis = instanciaConfiguracao.TipoEmissao; + cte.Assina(instanciaConfiguracao); + cte.infCTeSupl = cte.QrCode(instanciaConfiguracao.X509Certificate2, Encoding.UTF8, instanciaConfiguracao.IsAdicionaQrCode, UrlHelper.ObterUrlQrCode(instanciaConfiguracao)); + cte.SalvarXmlEmDisco(instanciaConfiguracao); //salva em disco antes de validas os schemas, facilitando encontrar possíveis erros + cte.ValidaSchema(instanciaConfiguracao); + cte.SalvarXmlEmDisco(instanciaConfiguracao); + + var webService = WsdlFactory.CriaWsdlCteRecepcaoSincronoV4(instanciaConfiguracao); + + //OnAntesDeEnviar(enviCte); + + var retornoXml = webService.CTeRecepcaoSincV4(cte.CriaRequestWs(instanciaConfiguracao)); + + var retorno = retCTe.LoadXml(retornoXml.OuterXml, cte); + retorno.SalvarXmlEmDisco(cte.Chave(), instanciaConfiguracao); + + return retorno; + } + + private static enviCTe PreparaEnvioCTe(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) + { + var instanciaConfiguracao = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var enviCte = ClassesFactory.CriaEnviCTe(lote, cteEletronicosList, instanciaConfiguracao); + + if (instanciaConfiguracao.tpAmb == TipoAmbiente.Homologacao) + { + foreach (var cte in enviCte.CTe) + { + const string razaoSocial = "CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; + + cte.infCte.rem.xNome = razaoSocial; + cte.infCte.dest.xNome = razaoSocial; + } + } + + + foreach (var cte in enviCte.CTe) + { + cte.infCte.ide.tpEmis = instanciaConfiguracao.TipoEmissao; + cte.Assina(instanciaConfiguracao); + cte.infCTeSupl = cte.QrCode(instanciaConfiguracao.X509Certificate2, Encoding.UTF8, instanciaConfiguracao.IsAdicionaQrCode, UrlHelper.ObterUrlQrCode(instanciaConfiguracao)); + + if (configuracaoServico.IsValidaSchemas) + cte.ValidaSchema(instanciaConfiguracao); + + cte.SalvarXmlEmDisco(instanciaConfiguracao); + } + + if (configuracaoServico.IsValidaSchemas) + enviCte.ValidaSchema(instanciaConfiguracao); + + enviCte.SalvarXmlEmDisco(instanciaConfiguracao); + return enviCte; + } + + protected virtual void OnAntesDeEnviar(enviCTe enviCTe) + { + var handler = AntesDeEnviar; + if (handler != null) handler(this, new AntesEnviarRecepcao(enviCTe)); + } + } +} \ No newline at end of file diff --git a/CTe.Utils.Standard/CTe.Utils.Standard.csproj b/CTe.Utils.Standard/CTe.Utils.Standard.csproj deleted file mode 100644 index 55edaeb59..000000000 --- a/CTe.Utils.Standard/CTe.Utils.Standard.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - netstandard2.0 - - - - - - - - - - - diff --git a/CTe.Utils/CTe.Utils.csproj b/CTe.Utils/CTe.Utils.csproj index 70fb6e51a..6791d0521 100644 --- a/CTe.Utils/CTe.Utils.csproj +++ b/CTe.Utils/CTe.Utils.csproj @@ -1,75 +1,13 @@ - - - + + - Debug - AnyCPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F} - Library - Properties - CTe.Utils - CTe.Utils - v4.5 - 512 - - SAK - SAK - SAK - SAK + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - + - - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13} - CTe.Classes - - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - DFe.Utils - + + - - - - - \ No newline at end of file + + diff --git a/CTe.Utils/CTe.Utils.csproj.DotSettings b/CTe.Utils/CTe.Utils.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/CTe.Utils/CTe.Utils.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/CTe.Utils/CTe.Utils.csproj.vspscc b/CTe.Utils/CTe.Utils.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/CTe.Utils/CTe.Utils.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/CTe.Utils/CTe/ExCteOSProc.cs b/CTe.Utils/CTe/ExCteOSProc.cs new file mode 100644 index 000000000..c990a2edf --- /dev/null +++ b/CTe.Utils/CTe/ExCteOSProc.cs @@ -0,0 +1,101 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.IO; +using CTe.Classes; +using DFe.Utils; +using cteOSProc = CTe.Classes.cteOSProc; + +namespace CTe.Utils.CTe +{ + public static class ExtCteOSProc + { + /// + /// Carrega um arquivo XML para um objeto da classe cteOSProc + /// + /// + /// arquivo XML + /// Retorna um cteOSProc carregada com os dados do XML + public static cteOSProc CarregarDeArquivoXml(this cteOSProc cteOSProc, string arquivoXml) + { + return FuncoesXml.ArquivoXmlParaClasse(arquivoXml); + } + + /// + /// Converte o objeto cteOSProc para uma string no formato XML + /// + /// + /// Retorna uma string no formato XML com os dados do cteOSProc + public static string ObterXmlString(this cteOSProc cteOSProc) + { + return FuncoesXml.ClasseParaXmlString(cteOSProc); + } + + /// + /// Coverte uma string XML no formato cteOSProc para um objeto cteOSProc + /// + /// + /// + /// Retorna um objeto do tipo cteOSProc + public static cteOSProc CarregarDeXmlString(this cteOSProc cteOSProc, string xmlString) + { + var s = FuncoesXml.ObterNodeDeStringXml(typeof(cteOSProc).Name, xmlString); + return FuncoesXml.XmlStringParaClasse(s); + } + + /// + /// Grava os dados do objeto cteOSProc em um arquivo XML + /// + /// Objeto cteOSProc + /// Diretório com nome do arquivo a ser gravado + public static void SalvarArquivoXml(this cteOSProc cteOSProc, string arquivoXml) + { + FuncoesXml.ClasseParaArquivoXml(cteOSProc, arquivoXml); + } + + public static void SalvarXmlEmDisco(this cteOSProc cteOSProc, ConfiguracaoServico configuracaoServico = null) + { + if (cteOSProc == null) return; + + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, cteOSProc.CTeOS.Chave() + "-cteOSProc.xml"); + + FuncoesXml.ClasseParaArquivoXml(cteOSProc, arquivoSalvar); + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Utils/CTe/ExCteProc.cs b/CTe.Utils/CTe/ExCteProc.cs similarity index 100% rename from Shared.CTe.Utils/CTe/ExCteProc.cs rename to CTe.Utils/CTe/ExCteProc.cs diff --git a/CTe.Utils/CTe/ExtCTe.cs b/CTe.Utils/CTe/ExtCTe.cs new file mode 100644 index 000000000..c43e6b003 --- /dev/null +++ b/CTe.Utils/CTe/ExtCTe.cs @@ -0,0 +1,354 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Xml; +using CTe.Classes; +using CTe.Classes.Informacoes; +using CTe.Classes.Informacoes.infCTeNormal.infModals; +using CTe.Classes.Informacoes.Tipos; +using CTe.Classes.Servicos.Recepcao; +using CTe.Classes.Servicos.Tipos; +using CTe.Utils.Validacao; +using DFe.Classes.Entidades; +using DFe.Utils; +using DFe.Utils.Assinatura; +using CteEletronica = CTe.Classes.CTe; + +namespace CTe.Utils.CTe +{ + public static class ExtCTe + { + /// + /// Carrega um arquivo XML para um objeto da classe CTe + /// + /// + /// arquivo XML + /// Retorna uma NFe carregada com os dados do XML + public static CteEletronica CarregarDeArquivoXml(this CteEletronica cte, string arquivoXml) + { + var s = FuncoesXml.ObterNodeDeArquivoXml(typeof(CteEletronica).Name, arquivoXml); + return FuncoesXml.XmlStringParaClasse(s); + } + + /// + /// Converte o objeto CTe para uma string no formato XML + /// + /// + /// Retorna uma string no formato XML com os dados da CTe + public static string ObterXmlString(this CteEletronica cte) + { + return FuncoesXml.ClasseParaXmlString(cte); + } + + /// + /// Coverte uma string XML no formato CTe para um objeto CTe + /// + /// + /// + /// Retorna um objeto do tipo CTe + public static CteEletronica CarregarDeXmlString(this CteEletronica cte, string xmlString) + { + var s = FuncoesXml.ObterNodeDeStringXml(typeof(CteEletronica).Name, xmlString); + return FuncoesXml.XmlStringParaClasse(s); + } + + /// + /// Gera id, cdv, assina e faz alguns ajustes nos dados da classe CTe antes de utilizá-la + /// + /// + /// + /// Retorna um objeto CTe devidamente tradado + public static void ValidaSchema(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + if (cte == null) throw new ArgumentNullException("cte"); + + var xmlValidacao = cte.ObterXmlString(); + + var servicoInstancia = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (!servicoInstancia.IsValidaSchemas) + return; + + switch (cte.infCte.versao) + { + case versao.ve200: + Validador.Valida(xmlValidacao, "cte_v2.00.xsd", servicoInstancia); + break; + case versao.ve300: + Validador.Valida(xmlValidacao, "cte_v3.00.xsd", servicoInstancia); + break; + case versao.ve400: + Validador.Valida(xmlValidacao, "cte_v4.00.xsd", servicoInstancia); + break; + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + "a versão está inválida, somente é permitido " + + "versão 2.00 é 3.00"); + } + + if (cte.infCte.ide.tpCTe != tpCTe.Anulacao && cte.infCte.ide.tpCTe != tpCTe.Complemento) // Ct-e do Tipo Anulação/Complemento não tem Informações do Modal + { + var xmlModal = FuncoesXml.ClasseParaXmlString(cte.infCte.infCTeNorm.infModal); + + switch (cte.infCte.infCTeNorm.infModal.versaoModal) + { + case versaoModal.veM200: + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) + { + Validador.Valida(xmlModal, "cteModalAereo_v2.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) + { + Validador.Valida(xmlModal, "cteModalAquaviario_v2.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) + { + Validador.Valida(xmlModal, "cteModalDutoviario_v2.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) + { + Validador.Valida(xmlModal, "cteModalFerroviario_v2.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) + { + Validador.Valida(xmlModal, "cteModalRodoviario_v2.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) + { + Validador.Valida(xmlModal, "cteMultimodal_v2.00.xsd", servicoInstancia); + } + break; + case versaoModal.veM300: + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) + { + Validador.Valida(xmlModal, "cteModalAereo_v3.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) + { + Validador.Valida(xmlModal, "cteModalAquaviario_v3.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) + { + Validador.Valida(xmlModal, "cteModalDutoviario_v3.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) + { + Validador.Valida(xmlModal, "cteModalFerroviario_v3.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) + { + Validador.Valida(xmlModal, "cteModalRodoviario_v3.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) + { + Validador.Valida(xmlModal, "cteMultimodal_v3.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS)) + { + Validador.Valida(xmlModal, "cteModalRodoviarioOS_v3.00.xsd", servicoInstancia); + } + break; + case versaoModal.veM400: + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) + { + Validador.Valida(xmlModal, "cteModalAereo_v4.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) + { + Validador.Valida(xmlModal, "cteModalAquaviario_v4.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) + { + Validador.Valida(xmlModal, "cteModalDutoviario_v4.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) + { + Validador.Valida(xmlModal, "cteModalFerroviario_v4.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) + { + Validador.Valida(xmlModal, "cteModalRodoviario_v4.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) + { + Validador.Valida(xmlModal, "cteMultimodal_v4.00.xsd", servicoInstancia); + } + + if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS)) + { + Validador.Valida(xmlModal, "cteModalRodoviarioOS_v4.00.xsd", servicoInstancia); + } + break; + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + "a versão está inválida, somente é permitido " + + "versão 2.00 é 3.00"); + } + } + } + + /// + /// Assina um objeto CTe + /// + /// + /// + /// Retorna um objeto do tipo CTe assinado + public static void Assina(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + if (cte == null) throw new ArgumentNullException("cte"); + + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var modeloDocumentoFiscal = cte.infCte.ide.mod; + var tipoEmissao = (int)cte.infCte.ide.tpEmis; + var codigoNumerico = cte.infCte.ide.cCT; + var estado = cte.infCte.ide.cUF; + var dataEHoraEmissao = cte.infCte.ide.dhEmi; + var cnpj = cte.infCte.emit.CNPJ; + var numeroDocumento = cte.infCte.ide.nCT; + int serie = cte.infCte.ide.serie; + + var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico); + + cte.infCte.Id = "CTe" + dadosChave.Chave; + cte.infCte.versao = configServico.ObterVersaoLayoutValida(); + cte.infCte.ide.cDV = dadosChave.DigitoVerificador; + + var assinatura = AssinaturaDigital.Assina(cte, cte.infCte.Id, configServico.X509Certificate2); + + cte.Signature = assinatura; + } + + public static string Chave(this CteEletronica cte) + { + var chave = cte.infCte.Id.Substring(3, 44); + return chave; + } + + public static infCTeSupl QrCode(this CteEletronica cte, X509Certificate2 certificadoDigital, + Encoding encoding, bool isAdicionaQrCode, string url) + { + if (isAdicionaQrCode == false) return null; + + if (encoding == null) + encoding = Encoding.UTF8; + + var chave = cte.infCte.Id.Substring(3, 44); + + var qrCode = new StringBuilder(url); + qrCode.Append("?"); + qrCode.Append("chCTe=").Append(chave); + qrCode.Append("&"); + qrCode.Append("tpAmb=").Append((int)cte.infCte.ide.tpAmb); + + if (cte.infCte.ide.tpEmis != tpEmis.teNormal + && cte.infCte.ide.tpEmis != tpEmis.teSVCRS + && cte.infCte.ide.tpEmis != tpEmis.teSVCSP + ) + { + var assinatura = Convert.ToBase64String(AssinaturaDigital.CriarAssinaturaPkcs1(certificadoDigital, encoding.GetBytes(chave))); + qrCode.Append("&sign="); + qrCode.Append(assinatura); + } + + return new infCTeSupl + { + qrCodCTe = qrCode.ToString() + }; + } + + public static void SalvarXmlEmDisco(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, cte.Chave() + "-cte.xml"); + + FuncoesXml.ClasseParaArquivoXml(cte, arquivoSalvar); + } + + public static XmlDocument CriaRequestWs(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + var request = new XmlDocument(); + + var xml = cte.ObterXmlString(); + + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.cUF == Estado.PR + || instanciaServico.cUF == Estado.MT) + //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/456 + xml = xml.Replace("", ""); + + request.LoadXml(xml); + + return request; + } + + public static void SalvarXmlEmDisco(this retCTe retEnviCte, string chave, ConfiguracaoServico configuracaoServico = null) + { + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, chave + "-cte.xml"); + + FuncoesXml.ClasseParaArquivoXml(retEnviCte, arquivoSalvar); + } + } +} \ No newline at end of file diff --git a/CTe.Utils/CTe/ExtCTeOs.cs b/CTe.Utils/CTe/ExtCTeOs.cs new file mode 100644 index 000000000..437f6e799 --- /dev/null +++ b/CTe.Utils/CTe/ExtCTeOs.cs @@ -0,0 +1,223 @@ +using CTe.Classes; +using CTe.Classes.Informacoes; +using CTe.Classes.Informacoes.infCTeNormal.infModals; +using CTe.Classes.Informacoes.Tipos; +using CTe.CTeOSDocumento.CTe.CTeOS.Servicos.Autorizacao; +using CTe.Utils.Validacao; +using DFe.Classes.Entidades; +using DFe.Utils; +using DFe.Utils.Assinatura; +using System; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Xml; +using CteEletronica = CTe.CTeOSClasses.CTeOS; + +namespace CTe.Utils.CTe +{ + public static class ExtCTeOs + { + /// + /// Assina um objeto CTe OS + /// + /// + /// + /// Retorna um objeto do tipo CTe assinado + public static void Assina(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + if (cte == null) throw new ArgumentNullException("cte"); + + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var modeloDocumentoFiscal = cte.InfCte.ide.mod; + var tipoEmissao = (int)cte.InfCte.ide.tpEmis; + var codigoNumerico = cte.InfCte.ide.cCT; + var estado = cte.InfCte.ide.cUF; + var dataEHoraEmissao = cte.InfCte.ide.dhEmi; + var cnpj = cte.InfCte.emit.CNPJ; + var numeroDocumento = cte.InfCte.ide.nCT; + int serie = cte.InfCte.ide.serie; + + var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico); + + cte.InfCte.Id = "CTe" + dadosChave.Chave; + cte.InfCte.versao = DFe.Classes.Flags.VersaoServico.Versao400; + cte.InfCte.ide.cDV = dadosChave.DigitoVerificador; + + var assinatura = AssinaturaDigital.Assina(cte, cte.InfCte.Id, configServico.X509Certificate2); + + cte.Signature = assinatura; + } + + public static infCTeSupl QrCode(this CteEletronica cte, X509Certificate2 certificadoDigital, + Encoding encoding, bool isAdicionaQrCode, string url) + { + if (isAdicionaQrCode == false) return null; + + if (encoding == null) + encoding = Encoding.UTF8; + + var chave = cte.InfCte.Id.Substring(3, 44); + + var qrCode = new StringBuilder(url); + qrCode.Append("?"); + qrCode.Append("chCTe=").Append(chave); + qrCode.Append("&"); + qrCode.Append("tpAmb=").Append((int)cte.InfCte.ide.tpAmb); + + if (cte.InfCte.ide.tpEmis != tpEmis.teNormal + && cte.InfCte.ide.tpEmis != tpEmis.teSVCRS + && cte.InfCte.ide.tpEmis != tpEmis.teSVCSP + ) + { + var assinatura = Convert.ToBase64String(AssinaturaDigital.CriarAssinaturaPkcs1(certificadoDigital, encoding.GetBytes(chave))); + qrCode.Append("&sign="); + qrCode.Append(assinatura); + } + + return new infCTeSupl + { + qrCodCTe = qrCode.ToString() + }; + } + + public static string Chave(this CteEletronica cte) + { + var chave = cte.InfCte.Id.Substring(3, 44); + return chave; + } + + public static void SalvarXmlEmDisco(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, cte.Chave() + "-cte.xml"); + + FuncoesXml.ClasseParaArquivoXml(cte, arquivoSalvar); + } + + + /// + /// Converte o objeto CTe para uma string no formato XML + /// + /// + /// Retorna uma string no formato XML com os dados da CTe + public static string ObterXmlString(this CteEletronica cte) + { + return FuncoesXml.ClasseParaXmlString(cte); + } + + public static XmlDocument CriaRequestWs(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + var request = new XmlDocument(); + + var xml = cte.ObterXmlString(); + + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.cUF == Estado.PR + || instanciaServico.cUF == Estado.MT) + //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/456 + xml = xml.Replace("", ""); + + request.LoadXml(xml); + + return request; + } + + /// + /// Gera id, cdv, assina e faz alguns ajustes nos dados da classe CTe antes de utilizá-la + /// + /// + /// + /// Retorna um objeto CTe devidamente tradado + public static void ValidaSchema(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) + { + if (cte == null) throw new ArgumentNullException("cte"); + + var xmlValidacao = cte.ObterXmlString(); + + var servicoInstancia = configuracaoServico ?? ConfiguracaoServico.Instancia; + if (!servicoInstancia.IsValidaSchemas) + return; + + switch (cte.InfCte.versao) + { + case DFe.Classes.Flags.VersaoServico.Versao400: + Validador.Valida(xmlValidacao, "cteOS_v4.00.xsd", servicoInstancia); + break; + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + "a versão está inválida, somente é permitido " + + "versão 4.00"); + } + + if (cte.InfCte.ide.tpCTe != tpCTe.Complemento) // Ct-e do Tipo Anulação/Complemento não tem Informações do Modal + { + var xmlModal = FuncoesXml.ClasseParaXmlString(cte.InfCte.infCTeNorm.infModal); + + switch (cte.InfCte.infCTeNorm.infModal.versaoModal) + { + case versaoModal.veM400: + if (cte.InfCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) + { + Validador.Valida(xmlModal, "cteModalAereo_v4.00.xsd", servicoInstancia); + } + + if (cte.InfCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) + { + Validador.Valida(xmlModal, "cteModalAquaviario_v4.00.xsd", servicoInstancia); + } + + if (cte.InfCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) + { + Validador.Valida(xmlModal, "cteModalDutoviario_v4.00.xsd", servicoInstancia); + } + + if (cte.InfCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) + { + Validador.Valida(xmlModal, "cteModalFerroviario_v4.00.xsd", servicoInstancia); + } + + if (cte.InfCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) + { + Validador.Valida(xmlModal, "cteModalRodoviario_v4.00.xsd", servicoInstancia); + } + + if (cte.InfCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) + { + Validador.Valida(xmlModal, "cteMultimodal_v4.00.xsd", servicoInstancia); + } + + if (cte.InfCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS)) + { + Validador.Valida(xmlModal, "cteModalRodoviarioOS_v4.00.xsd", servicoInstancia); + } + break; + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + "a versão está inválida, somente é permitido " + + "versão 4.00"); + } + } + } + + public static void SalvarXmlEmDisco(this retCTeOS retEnviCte, string chave, ConfiguracaoServico configuracaoServico = null) + { + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, chave + "-cte.xml"); + + FuncoesXml.ClasseParaArquivoXml(retEnviCte, arquivoSalvar); + } + } +} diff --git a/Shared.CTe.Utils/CTe/ExtEnvCte.cs b/CTe.Utils/CTe/ExtEnvCte.cs similarity index 95% rename from Shared.CTe.Utils/CTe/ExtEnvCte.cs rename to CTe.Utils/CTe/ExtEnvCte.cs index 31a5fa0a2..8b698b751 100644 --- a/Shared.CTe.Utils/CTe/ExtEnvCte.cs +++ b/CTe.Utils/CTe/ExtEnvCte.cs @@ -47,15 +47,18 @@ public static class ExtEnvCte { public static void ValidaSchema(this enviCTe enviCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = enviCTe.ObterXmlString(); switch (enviCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "enviCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "enviCTe_v2.00.xsd", configServico); break; + case versao.ve400: case versao.ve300: - Validador.Valida(xmlValidacao, "enviCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "enviCTe_v3.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -92,10 +95,11 @@ public static XmlDocument CriaRequestWs(this enviCTe enviCTe, ConfiguracaoServic var request = new XmlDocument(); var xml = enviCTe.ObterXmlString(); - + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - if (instanciaServico.cUF == Estado.PR) + if (instanciaServico.cUF == Estado.PR + || instanciaServico.cUF == Estado.MT) //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/456 xml = xml.Replace("", ""); diff --git a/Shared.CTe.Utils/Compressao.cs b/CTe.Utils/Compressao.cs similarity index 100% rename from Shared.CTe.Utils/Compressao.cs rename to CTe.Utils/Compressao.cs diff --git a/Shared.CTe.Utils/Consulta/ExtprocEventoCTe.cs b/CTe.Utils/Consulta/ExtprocEventoCTe.cs similarity index 100% rename from Shared.CTe.Utils/Consulta/ExtprocEventoCTe.cs rename to CTe.Utils/Consulta/ExtprocEventoCTe.cs diff --git a/Shared.CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs b/CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs similarity index 97% rename from Shared.CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs rename to CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs index 1ad4ec66c..6b73322d1 100644 --- a/Shared.CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs +++ b/CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs @@ -54,16 +54,17 @@ public static string ObterXmlString(this distDFeInt pedDistDFeInt) public static void ValidaSchema(this distDFeInt pedDistDFeInt, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = pedDistDFeInt.ObterXmlString(); - if (pedDistDFeInt.versao.Equals("1.00")) { - Validador.Valida(xmlValidacao, "distDFeInt_v1.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "distDFeInt_v1.00.xsd", configServico); } else if (pedDistDFeInt.versao.Equals("1.10")) { - Validador.Valida(xmlValidacao, "distDFeInt_v1.10.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "distDFeInt_v1.10.xsd", configServico); } else { diff --git a/Shared.CTe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs b/CTe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs similarity index 100% rename from Shared.CTe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs rename to CTe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs diff --git a/Shared.CTe.Utils/Evento/ExtenvEvento.cs b/CTe.Utils/Evento/ExtenvEvento.cs similarity index 100% rename from Shared.CTe.Utils/Evento/ExtenvEvento.cs rename to CTe.Utils/Evento/ExtenvEvento.cs diff --git a/Shared.CTe.Utils/Evento/Extevento.cs b/CTe.Utils/Evento/Extevento.cs similarity index 87% rename from Shared.CTe.Utils/Evento/Extevento.cs rename to CTe.Utils/Evento/Extevento.cs index ee6b3b525..9f866503b 100644 --- a/Shared.CTe.Utils/Evento/Extevento.cs +++ b/CTe.Utils/Evento/Extevento.cs @@ -37,7 +37,7 @@ using CTe.Classes; using CTe.Classes.Servicos.Evento; using CTe.Classes.Servicos.Tipos; -using CTe.Utils.Extencoes; +using CTe.Utils.Extensoes; using CTe.Utils.Validacao; using DFe.Utils; using DFe.Utils.Assinatura; @@ -74,20 +74,25 @@ public static void Assina(this eventoCTe eventoCTe, ConfiguracaoServico configur public static void ValidarSchema(this eventoCTe eventoCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlEvento = eventoCTe.ObterXmlString(); switch (eventoCTe.versao) { case versao.ve200: - Validador.Valida(xmlEvento, "eventoCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEvento, "eventoCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEvento, "eventoCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEvento, "eventoCTe_v3.00.xsd", configServico); + break; + case versao.ve400: + Validador.Valida(xmlEvento, "eventoCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + - "versão 2.00 é 3.00"); + "versão 2.00, 3.00, 4.00"); } ValidarSchemaEventoContainer(eventoCTe.infEvento.detEvento.EventoContainer, eventoCTe.versao, configuracaoServico); @@ -95,24 +100,29 @@ public static void ValidarSchema(this eventoCTe eventoCTe, ConfiguracaoServico c private static void ValidarSchemaEventoContainer(EventoContainer container, versao versao, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + if (container.GetType() == typeof(evCancCTe)) { - var evCancCTe = (evCancCTe) container; + var evCancCTe = (evCancCTe)container; var xmlEventoCancelamento = evCancCTe.ObterXmlString(); switch (versao) { case versao.ve200: - Validador.Valida(xmlEventoCancelamento, "evCancCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCancelamento, "evCancCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEventoCancelamento, "evCancCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCancelamento, "evCancCTe_v3.00.xsd", configServico); + break; + case versao.ve400: + Validador.Valida(xmlEventoCancelamento, "evCancCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + - "versão 2.00 é 3.00"); + "versão 2.00, 3.00, 4.00"); } @@ -127,15 +137,18 @@ private static void ValidarSchemaEventoContainer(EventoContainer container, vers switch (versao) { case versao.ve200: - Validador.Valida(xmlEventoCCe, "evCCeCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evCCeCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEventoCCe, "evCCeCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evCCeCTe_v3.00.xsd", configServico); + break; + case versao.ve400: + Validador.Valida(xmlEventoCCe, "evCCeCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + - "versão 2.00 é 3.00"); + "versão 2.00, 3.00, 4.00"); } } @@ -148,15 +161,18 @@ private static void ValidarSchemaEventoContainer(EventoContainer container, vers switch (versao) { case versao.ve200: - Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v3.00.xsd", configServico); + break; + case versao.ve400: + Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + - "versão 2.00 é 3.00"); + "versão 2.00, 3.00, 4.00"); } } } diff --git a/Shared.CTe.Utils/Evento/ExtprocEventoCTe.cs b/CTe.Utils/Evento/ExtprocEventoCTe.cs similarity index 100% rename from Shared.CTe.Utils/Evento/ExtprocEventoCTe.cs rename to CTe.Utils/Evento/ExtprocEventoCTe.cs diff --git a/Shared.CTe.Utils/Evento/ExtretEnvEvento.cs b/CTe.Utils/Evento/ExtretEnvEvento.cs similarity index 100% rename from Shared.CTe.Utils/Evento/ExtretEnvEvento.cs rename to CTe.Utils/Evento/ExtretEnvEvento.cs diff --git a/Shared.CTe.Utils/Extencoes/ExtConsReciCTe.cs b/CTe.Utils/Extensoes/ExtConsReciCTe.cs similarity index 96% rename from Shared.CTe.Utils/Extencoes/ExtConsReciCTe.cs rename to CTe.Utils/Extensoes/ExtConsReciCTe.cs index a05e7e5ee..8b8a55b1b 100644 --- a/Shared.CTe.Utils/Extencoes/ExtConsReciCTe.cs +++ b/CTe.Utils/Extensoes/ExtConsReciCTe.cs @@ -39,21 +39,22 @@ using CTe.Utils.Validacao; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtConsReciCTe { public static void ValidarSchema(this consReciCTe consReciCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var xmlValidacao = consReciCTe.ObterXmlString(); switch (consReciCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "consReciCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consReciCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "consReciCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consReciCTe_v3.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + diff --git a/Shared.CTe.Utils/Extencoes/ExtconsSitCTe.cs b/CTe.Utils/Extensoes/ExtconsSitCTe.cs similarity index 91% rename from Shared.CTe.Utils/Extencoes/ExtconsSitCTe.cs rename to CTe.Utils/Extensoes/ExtconsSitCTe.cs index d1206e880..8b39caf4f 100644 --- a/Shared.CTe.Utils/Extencoes/ExtconsSitCTe.cs +++ b/CTe.Utils/Extensoes/ExtconsSitCTe.cs @@ -39,24 +39,30 @@ using CTe.Utils.Validacao; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtconsSitCTe { public static void ValidarSchema(this consSitCTe consSitCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = consSitCTe.ObterXmlString(); switch (consSitCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "consSitCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consSitCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "consSitCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consSitCTe_v3.00.xsd", configServico); + break; + case versao.ve400: + Validador.Valida(xmlValidacao, "consSitCTe_v4.00.xsd", configServico); break; - default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + "versão 2.00 é 3.00"); } diff --git a/CTe.Utils/Extensoes/ExtconsStatServCte.cs b/CTe.Utils/Extensoes/ExtconsStatServCte.cs new file mode 100644 index 000000000..049a1fbff --- /dev/null +++ b/CTe.Utils/Extensoes/ExtconsStatServCte.cs @@ -0,0 +1,159 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System; +using System.IO; +using System.Xml; +using CTe.Classes; +using CTe.Classes.Servicos.Status; +using CTe.Classes.Servicos.Tipos; +using CTe.Utils.Validacao; +using DFe.Utils; + +namespace CTe.Utils.Extensoes +{ + public static class ExtconsStatServCte + { + public static void ValidarSchema(this consStatServCte consStatServCte, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var xmlValidacao = consStatServCte.ObterXmlString(); + + switch (consStatServCte.versao) + { + case versao.ve200: + Validador.Valida(xmlValidacao, "consStatServCTe_v2.00.xsd", configServico); + break; + case versao.ve300: + Validador.Valida(xmlValidacao, "consStatServCTe_v3.00.xsd", configServico); + break; + case versao.ve400: + Validador.Valida(xmlValidacao, "consStatServCTe_v4.00.xsd", configServico); + break; + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + "a versão está inválida, somente é permitido " + + "versão 2.00 é 3.00"); + } + } + + /// + /// Recebe um objeto consStatServ e devolve a string no formato XML + /// + /// Objeto do tipo consStatServ + /// string com XML no do objeto consStatServ + public static string ObterXmlString(this consStatServCte pedStatus) + { + return FuncoesXml.ClasseParaXmlString(pedStatus); + } + + public static void SalvarXmlEmDisco(this consStatServCte statuServCte, ConfiguracaoServico configuracaoServico = null) + { + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, DateTime.Now.ParaDataHoraString() + "-ped-sta.xml"); + + FuncoesXml.ClasseParaArquivoXml(statuServCte, arquivoSalvar); + } + + public static XmlDocument CriaRequestWs(this consStatServCte consStatServMdFe) + { + var request = new XmlDocument(); + request.LoadXml(consStatServMdFe.ObterXmlString()); + + return request; + } + } + + public static class ExtconsStatServCTe + { + public static void ValidarSchema(this consStatServCTe consStatServCte, ConfiguracaoServico configuracaoServico = null) + { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var xmlValidacao = consStatServCte.ObterXmlString(); + + switch (consStatServCte.versao) + { + case versao.ve200: + Validador.Valida(xmlValidacao, "consStatServCTe_v2.00.xsd", configServico); + break; + case versao.ve300: + Validador.Valida(xmlValidacao, "consStatServCTe_v3.00.xsd", configServico); + break; + case versao.ve400: + Validador.Valida(xmlValidacao, "consStatServCTe_v4.00.xsd", configServico); + break; + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + "a versão está inválida, somente é permitido " + + "versão 2.00 é 3.00"); + } + } + + /// + /// Recebe um objeto consStatServ e devolve a string no formato XML + /// + /// Objeto do tipo consStatServ + /// string com XML no do objeto consStatServ + public static string ObterXmlString(this consStatServCTe pedStatus) + { + return FuncoesXml.ClasseParaXmlString(pedStatus); + } + + public static void SalvarXmlEmDisco(this consStatServCTe statuServCte, ConfiguracaoServico configuracaoServico = null) + { + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, DateTime.Now.ParaDataHoraString() + "-ped-sta.xml"); + + FuncoesXml.ClasseParaArquivoXml(statuServCte, arquivoSalvar); + } + + public static XmlDocument CriaRequestWs(this consStatServCTe consStatServMdFe) + { + var request = new XmlDocument(); + request.LoadXml(consStatServMdFe.ObterXmlString()); + + return request; + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Utils/Extencoes/ExtevCCeCTe.cs b/CTe.Utils/Extensoes/ExtevCCeCTe.cs similarity index 99% rename from Shared.CTe.Utils/Extencoes/ExtevCCeCTe.cs rename to CTe.Utils/Extensoes/ExtevCCeCTe.cs index 7e0a7b1c0..853839bd3 100644 --- a/Shared.CTe.Utils/Extencoes/ExtevCCeCTe.cs +++ b/CTe.Utils/Extensoes/ExtevCCeCTe.cs @@ -34,7 +34,7 @@ using CTe.Classes.Servicos.Evento; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtevCCeCTe { diff --git a/Shared.CTe.Utils/Extencoes/ExtevCancCTe.cs b/CTe.Utils/Extensoes/ExtevCancCTe.cs similarity index 99% rename from Shared.CTe.Utils/Extencoes/ExtevCancCTe.cs rename to CTe.Utils/Extensoes/ExtevCancCTe.cs index 4fc6a867c..0bddbdf82 100644 --- a/Shared.CTe.Utils/Extencoes/ExtevCancCTe.cs +++ b/CTe.Utils/Extensoes/ExtevCancCTe.cs @@ -34,7 +34,7 @@ using CTe.Classes.Servicos.Evento; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtevCancCTe { diff --git a/Shared.CTe.Utils/Extencoes/ExtevPrestDesacordo.cs b/CTe.Utils/Extensoes/ExtevPrestDesacordo.cs similarity index 99% rename from Shared.CTe.Utils/Extencoes/ExtevPrestDesacordo.cs rename to CTe.Utils/Extensoes/ExtevPrestDesacordo.cs index 79fe51339..8eb2bea4e 100644 --- a/Shared.CTe.Utils/Extencoes/ExtevPrestDesacordo.cs +++ b/CTe.Utils/Extensoes/ExtevPrestDesacordo.cs @@ -34,7 +34,7 @@ using CTe.Classes.Servicos.Evento; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtevPrestDesacordo { diff --git a/Shared.CTe.Utils/Extencoes/ExtinutCTe.cs b/CTe.Utils/Extensoes/ExtinutCTe.cs similarity index 95% rename from Shared.CTe.Utils/Extencoes/ExtinutCTe.cs rename to CTe.Utils/Extensoes/ExtinutCTe.cs index 87bf4f942..66e9d691b 100644 --- a/Shared.CTe.Utils/Extencoes/ExtinutCTe.cs +++ b/CTe.Utils/Extensoes/ExtinutCTe.cs @@ -40,7 +40,7 @@ using DFe.Utils; using DFe.Utils.Assinatura; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtinutCTe { @@ -63,18 +63,19 @@ public static string ObterXmlString(this inutCTe pedInutilizacao) return FuncoesXml.ClasseParaXmlString(pedInutilizacao); } - public static void ValidarShcema(this inutCTe inutCTe, ConfiguracaoServico configuracaoServico = null) + public static void ValidarSchema(this inutCTe inutCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var xmlValidacao = inutCTe.ObterXmlString(); switch (inutCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "inutCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "inutCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "inutCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "inutCTe_v3.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -91,7 +92,7 @@ public static void SalvarXmlEmDisco(this inutCTe inutCTe, ConfiguracaoServico co var caminhoXml = instanciaServico.DiretorioSalvarXml; - var arquivoSalvar = Path.Combine(caminhoXml, inutCTe.infInut.Id+ "-ped-inu.xml"); + var arquivoSalvar = Path.Combine(caminhoXml, inutCTe.infInut.Id + "-ped-inu.xml"); FuncoesXml.ClasseParaArquivoXml(inutCTe, arquivoSalvar); } diff --git a/Shared.CTe.Utils/Extencoes/ExtretConsSitCTe.cs b/CTe.Utils/Extensoes/ExtretConsSitCTe.cs similarity index 99% rename from Shared.CTe.Utils/Extencoes/ExtretConsSitCTe.cs rename to CTe.Utils/Extensoes/ExtretConsSitCTe.cs index 76d03027a..8fc8bee84 100644 --- a/Shared.CTe.Utils/Extencoes/ExtretConsSitCTe.cs +++ b/CTe.Utils/Extensoes/ExtretConsSitCTe.cs @@ -36,7 +36,7 @@ using CTe.Classes.Servicos.Consulta; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtretConsSitCTe { diff --git a/Shared.CTe.Utils/Extencoes/ExtretConsStatServ.cs b/CTe.Utils/Extensoes/ExtretConsStatServ.cs similarity index 99% rename from Shared.CTe.Utils/Extencoes/ExtretConsStatServ.cs rename to CTe.Utils/Extensoes/ExtretConsStatServ.cs index 4972be434..1d1409554 100644 --- a/Shared.CTe.Utils/Extencoes/ExtretConsStatServ.cs +++ b/CTe.Utils/Extensoes/ExtretConsStatServ.cs @@ -34,7 +34,7 @@ using CTe.Classes.Servicos.Status; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtretConsStatServ { diff --git a/Shared.CTe.Utils/Extencoes/ExtretConsStatServCte.cs b/CTe.Utils/Extensoes/ExtretConsStatServCte.cs similarity index 84% rename from Shared.CTe.Utils/Extencoes/ExtretConsStatServCte.cs rename to CTe.Utils/Extensoes/ExtretConsStatServCte.cs index 6bdcd48b1..73826d436 100644 --- a/Shared.CTe.Utils/Extencoes/ExtretConsStatServCte.cs +++ b/CTe.Utils/Extensoes/ExtretConsStatServCte.cs @@ -36,7 +36,7 @@ using CTe.Classes.Servicos.Status; using DFe.Utils; -namespace CTe.Utils.Extencoes +namespace CTe.Utils.Extensoes { public static class ExtretConsStatServCte { @@ -53,4 +53,20 @@ public static void SalvarXmlEmDisco(this retConsStatServCte retConsStatServCte, FuncoesXml.ClasseParaArquivoXml(retConsStatServCte, arquivoSalvar); } } + + public static class ExtretConsStatServCTe + { + public static void SalvarXmlEmDisco(this retConsStatServCTe retConsStatServCte, ConfiguracaoServico configuracaoServico = null) + { + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, DateTime.Now.ParaDataHoraString() + "-sta.xml"); + + FuncoesXml.ClasseParaArquivoXml(retConsStatServCte, arquivoSalvar); + } + } } \ No newline at end of file diff --git a/Shared.CTe.Utils/Inutilizacao/ExtretInutCTe.cs b/CTe.Utils/Inutilizacao/ExtretInutCTe.cs similarity index 99% rename from Shared.CTe.Utils/Inutilizacao/ExtretInutCTe.cs rename to CTe.Utils/Inutilizacao/ExtretInutCTe.cs index c0b4c211d..6e378da2c 100644 --- a/Shared.CTe.Utils/Inutilizacao/ExtretInutCTe.cs +++ b/CTe.Utils/Inutilizacao/ExtretInutCTe.cs @@ -60,8 +60,6 @@ public static string ObterXmlString(this retInutCTe retInutCTe) { return FuncoesXml.ClasseParaXmlString(retInutCTe); } - - public static void SalvarXmlEmDisco(this retInutCTe retInutCTe, string chaveNome, ConfiguracaoServico configuracaoServico = null) { var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; @@ -69,11 +67,10 @@ public static void SalvarXmlEmDisco(this retInutCTe retInutCTe, string chaveNome if (instanciaServico.NaoSalvarXml()) return; var caminhoXml = instanciaServico.DiretorioSalvarXml; - + var arquivoSalvar = Path.Combine(caminhoXml, chaveNome + "-inu.xml"); FuncoesXml.ClasseParaArquivoXml(retInutCTe, arquivoSalvar); } - } } \ No newline at end of file diff --git a/CTe.Utils/Properties/AssemblyInfo.cs b/CTe.Utils/Properties/AssemblyInfo.cs deleted file mode 100644 index 6a521a6db..000000000 --- a/CTe.Utils/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTe.Utils")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTe.Utils")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("21a894ec-b79e-4936-bff3-abead2e5c44f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/Shared.CTe.Utils/Recepcao/ExtconsReciCTe.cs b/CTe.Utils/Recepcao/ExtconsReciCTe.cs similarity index 100% rename from Shared.CTe.Utils/Recepcao/ExtconsReciCTe.cs rename to CTe.Utils/Recepcao/ExtconsReciCTe.cs diff --git a/Shared.CTe.Utils/Recepcao/ExtretEnviCTe.cs b/CTe.Utils/Recepcao/ExtretEnviCTe.cs similarity index 100% rename from Shared.CTe.Utils/Recepcao/ExtretEnviCTe.cs rename to CTe.Utils/Recepcao/ExtretEnviCTe.cs diff --git a/CTe.Utils/Validacao/Validador.cs b/CTe.Utils/Validacao/Validador.cs new file mode 100644 index 000000000..667b2560d --- /dev/null +++ b/CTe.Utils/Validacao/Validador.cs @@ -0,0 +1,100 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.IO; +using System.Xml; +using System.Xml.Schema; +using CTe.Classes; + +namespace CTe.Utils.Validacao +{ + public static class Validador + { + public static void Valida(string xml, string schema, ConfiguracaoServico configuracaoServico = null) + { + var servicoInstancia = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var pathSchema = servicoInstancia.DiretorioSchemas; + + if (!Directory.Exists(pathSchema)) + throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); + + var arquivoSchema = Path.Combine(pathSchema, schema); + + // Define o tipo de validação + var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; + + // Previne ataques XXE: nao permite resolver recursos externos + cfg.DtdProcessing = DtdProcessing.Prohibit; + cfg.XmlResolver = null; + + // Carrega o arquivo de esquema + var schemas = new XmlSchemaSet + { + XmlResolver = new XmlUrlResolver() + }; + + cfg.Schemas = schemas; + // Quando carregar o schema, especificar o namespace que ele valida + // e a localização do arquivo + schemas.Add(null, arquivoSchema); + // Especifica o tratamento de evento para os erros de validacao + cfg.ValidationEventHandler += ValidationEventHandler; + // cria um leitor para validação + var validator = XmlReader.Create(new StringReader(xml), cfg); + try + { + // Faz a leitura de todos os dados XML + while (validator.Read()) + { + } + } + catch (XmlException err) + { + // Um erro ocorre se o documento XML inclui caracteres ilegais + // ou tags que não estão aninhadas corretamente + throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + err.Message); + } + finally + { + validator.Close(); + } + } + + private static void ValidationEventHandler(object sender, ValidationEventArgs e) + { + throw new Exception("Erros da validação : " + e.Message); + } + } +} \ No newline at end of file diff --git a/CTe.Wsdl.Standard/CTe.Wsdl.Standard.csproj b/CTe.Wsdl.Standard/CTe.Wsdl.Standard.csproj deleted file mode 100644 index 9ac912a29..000000000 --- a/CTe.Wsdl.Standard/CTe.Wsdl.Standard.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - netstandard2.0 - - - - - - - - - - diff --git a/CTe.Wsdl/CTe.Wsdl.csproj b/CTe.Wsdl/CTe.Wsdl.csproj index bf0efd9cd..29133ee8c 100644 --- a/CTe.Wsdl/CTe.Wsdl.csproj +++ b/CTe.Wsdl/CTe.Wsdl.csproj @@ -1,72 +1,16 @@ - - - + + - Debug - AnyCPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548} - Library - Properties - CTe.Wsdl - CTe.Wsdl - v4.5 - 512 - - SAK - SAK - SAK - SAK + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - + - + + - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {dbee88e7-6003-436e-9810-9acc662f5851} - DFe.Wsdl - + - - - - - \ No newline at end of file + + diff --git a/CTe.Wsdl/CTe.Wsdl.csproj.DotSettings b/CTe.Wsdl/CTe.Wsdl.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/CTe.Wsdl/CTe.Wsdl.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/CTe.Wsdl/CTe.Wsdl.csproj.vspscc b/CTe.Wsdl/CTe.Wsdl.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/CTe.Wsdl/CTe.Wsdl.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Shared.CTe.Wsdl/ConsultaProtocolo/CteConsulta.cs b/CTe.Wsdl/ConsultaProtocolo/CteConsulta.cs similarity index 100% rename from Shared.CTe.Wsdl/ConsultaProtocolo/CteConsulta.cs rename to CTe.Wsdl/ConsultaProtocolo/CteConsulta.cs diff --git a/CTe.Wsdl/ConsultaProtocolo/V4/CteConsulta.cs b/CTe.Wsdl/ConsultaProtocolo/V4/CteConsulta.cs new file mode 100644 index 000000000..7ee884352 --- /dev/null +++ b/CTe.Wsdl/ConsultaProtocolo/V4/CteConsulta.cs @@ -0,0 +1,74 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace CTe.Wsdl.ConsultaProtocolo.V4 +{ + public class CteConsultaV4 + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao configuracao; + + /// + /// Cria o cabeçalho do envelope a ser enviado e atribui as configurações do WSDL. + /// + /// + public CteConsultaV4(WsdlConfiguracao configuracao) + { + if (configuracao == null) throw new ArgumentNullException(); + + this.configuracao = configuracao; + this.soapEnvelope = new SoapEnvelope(); + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public XmlNode cteConsultaCT(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = cteDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, TipoEvento.CTeConsultaV4, "retConsSitCTe"); + } + + public async Task cteConsultaCTAsync(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = cteDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, configuracao, TipoEvento.CTeConsultaV4, "retConsSitCTe"); + } + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CTeConsultaV4")] + public T cteDadosMsg { get; set; } + } +} \ No newline at end of file diff --git a/Shared.CTe.Wsdl/DistribuicaoDFe/CTeDistDFeInteresse.cs b/CTe.Wsdl/DistribuicaoDFe/CTeDistDFeInteresse.cs similarity index 100% rename from Shared.CTe.Wsdl/DistribuicaoDFe/CTeDistDFeInteresse.cs rename to CTe.Wsdl/DistribuicaoDFe/CTeDistDFeInteresse.cs diff --git a/Shared.CTe.Wsdl/Evento/CteRecepcaoEvento.cs b/CTe.Wsdl/Evento/CteRecepcaoEvento.cs similarity index 100% rename from Shared.CTe.Wsdl/Evento/CteRecepcaoEvento.cs rename to CTe.Wsdl/Evento/CteRecepcaoEvento.cs diff --git a/CTe.Wsdl/Evento/V4/CteRecepcaoEventoV4.cs b/CTe.Wsdl/Evento/V4/CteRecepcaoEventoV4.cs new file mode 100644 index 000000000..c6ef47932 --- /dev/null +++ b/CTe.Wsdl/Evento/V4/CteRecepcaoEventoV4.cs @@ -0,0 +1,86 @@ +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace CTe.Wsdl.Evento.V4 +{ + public class CteRecepcaoEventoV4 + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao configuracao; + + /// + /// Cria o cabeçalho do envelope a ser enviado e atribui as configurações do WSDL. + /// + /// + public CteRecepcaoEventoV4(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + this.configuracao = configuracao; + soapEnvelope = new SoapEnvelope(); + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public XmlNode cteRecepcaoEvento(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = cteDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, TipoEvento.CTeRecepcaoEventoV4, "retEventoCTe"); + } + + public async Task cteRecepcaoEventoAsync(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = cteDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, configuracao, TipoEvento.CTeRecepcaoEventoV4, "retEventoCTe"); + } + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o cabeçalho do Envelope SOAP + /// + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoEventoV4")] + public T cteCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoEventoV4")] + public T cteDadosMsg { get; set; } + } +} diff --git a/Shared.CTe.Wsdl/Inutilizacao/CteInutilizacao.cs b/CTe.Wsdl/Inutilizacao/CteInutilizacao.cs similarity index 100% rename from Shared.CTe.Wsdl/Inutilizacao/CteInutilizacao.cs rename to CTe.Wsdl/Inutilizacao/CteInutilizacao.cs diff --git a/CTe.Wsdl/Properties/AssemblyInfo.cs b/CTe.Wsdl/Properties/AssemblyInfo.cs deleted file mode 100644 index b43a07271..000000000 --- a/CTe.Wsdl/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTe.Wsdl")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTe.Wsdl")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9cc914f9-4c3e-43bb-a34b-a12ae4923548")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/Shared.CTe.Wsdl/Recepcao/CteRecepcao.cs b/CTe.Wsdl/Recepcao/CteRecepcao.cs similarity index 100% rename from Shared.CTe.Wsdl/Recepcao/CteRecepcao.cs rename to CTe.Wsdl/Recepcao/CteRecepcao.cs diff --git a/CTe.Wsdl/Recepcao/Sincrono/CteRecepcaoSincronoOSV4.cs b/CTe.Wsdl/Recepcao/Sincrono/CteRecepcaoSincronoOSV4.cs new file mode 100644 index 000000000..4f0cf48ce --- /dev/null +++ b/CTe.Wsdl/Recepcao/Sincrono/CteRecepcaoSincronoOSV4.cs @@ -0,0 +1,68 @@ +using CTe.CTeOSDocumento.Common; +using DFe.Utils; +using System; +using System.Net; +using System.Xml; +using System.Xml.Serialization; + +namespace CTe.Wsdl.Recepcao.Sincrono +{ + public class CteRecepcaoSincronoOSV4 + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao configuracao; + + /// + /// Cria o cabeçalho do envelope a ser enviado e atribui as configurações do WSDL. + /// + /// + public CteRecepcaoSincronoOSV4(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + this.configuracao = configuracao; + soapEnvelope = new SoapEnvelope(); + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public XmlNode CTeRecepcaoSincV4(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = Convert.ToBase64String(Compressao.Zip(cteDadosMsg.OuterXml)) + }; + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, TipoEvento.CTeRecepcaoOSV4, "retCTeOS"); + } + + + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoOSV4")] + public T cteDadosMsg { get; set; } + } + } +} diff --git a/CTe.Wsdl/Recepcao/Sincrono/CteRecepcaoSincronoV4.cs b/CTe.Wsdl/Recepcao/Sincrono/CteRecepcaoSincronoV4.cs new file mode 100644 index 000000000..d13a598e5 --- /dev/null +++ b/CTe.Wsdl/Recepcao/Sincrono/CteRecepcaoSincronoV4.cs @@ -0,0 +1,76 @@ +using CTe.CTeOSDocumento.Common; +using DFe.Utils; +using System; +using System.Net; +using System.Xml; +using System.Xml.Serialization; + +namespace CTe.Wsdl.Recepcao.Sincrono +{ + public class CteRecepcaoSincronoV4 + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao configuracao; + + /// + /// Cria o cabeçalho do envelope a ser enviado e atribui as configurações do WSDL. + /// + /// + public CteRecepcaoSincronoV4(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + this.configuracao = configuracao; + soapEnvelope = new SoapEnvelope(); + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public XmlNode CTeRecepcaoSincV4(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = Convert.ToBase64String(Compressao.Zip(cteDadosMsg.OuterXml)) + }; + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, TipoEvento.CTeRecepcaoV4, "retCTe"); + } + + /*public async Task cteRecepcaoLoteAsync(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = cteDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, configuracao, TipoEvento.CTeRecepcao, "retEnviCte"); + }*/ + + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoSincV4")] + public T cteDadosMsg { get; set; } + } + } +} \ No newline at end of file diff --git a/Shared.CTe.Wsdl/RetRecepcao/CteRetRecepcao.cs b/CTe.Wsdl/RetRecepcao/CteRetRecepcao.cs similarity index 100% rename from Shared.CTe.Wsdl/RetRecepcao/CteRetRecepcao.cs rename to CTe.Wsdl/RetRecepcao/CteRetRecepcao.cs diff --git a/CTe.Wsdl/Status/CTeStatusServico.cs b/CTe.Wsdl/Status/CTeStatusServico.cs new file mode 100644 index 000000000..b5f3e3e34 --- /dev/null +++ b/CTe.Wsdl/Status/CTeStatusServico.cs @@ -0,0 +1,138 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace CTe.Wsdl.Status +{ + public class CteStatusServico + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + private SoapEnvelopeV4 soapEnvelopeV4; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao configuracao; + + /// + /// Cria o cabeçalho do envelope a ser enviado e atribui as configurações do WSDL. + /// + /// + public CteStatusServico(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + this.configuracao = configuracao; + + soapEnvelope = new SoapEnvelope(); + soapEnvelopeV4 = new SoapEnvelopeV4(); + + if (configuracao.Versao != "4.00") + { + soapEnvelope.head = new ResponseHead + { + cteCabecMsg = new cteCabecMsg + { + versaoDados = configuracao.Versao, + cUF = configuracao.CodigoIbgeEstado + } + }; + } + + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public async Task cteStatusServicoCTAsync(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = cteDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, configuracao, configuracao.Versao == "4.00" ? TipoEvento.CTeStatusServicoV4 : TipoEvento.CTeStatusServico, "retConsStatServCte"); + } + + public XmlNode cteStatusServicoCT(XmlNode cteDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + cteDadosMsg = cteDadosMsg + }; + + if (configuracao.Versao == "4.00") + { + soapEnvelopeV4.body = new ResponseBodyV4 + { + cteDadosMsg = cteDadosMsg + }; + } + + if (configuracao.Versao == "4.00") + { + return RequestBuilderAndSender.Execute(soapEnvelopeV4, configuracao, TipoEvento.CTeStatusServicoV4, + "retConsStatServCTe"); + } + + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, + TipoEvento.CTeStatusServico, + "retConsStatServCte"); + } + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o cabeçalho do Envelope SOAP + /// + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico")] + public T cteCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico")] + public T cteDadosMsg { get; set; } + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelopeV4 : CommonSoapEnvelope + { + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBodyV4 body { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBodyV4 : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CTeStatusServicoV4")] + public T cteDadosMsg { get; set; } + } +} diff --git a/CTeRefatorar/Assets/Schemas.Cte/cancCTeTiposBasico_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cancCTeTiposBasico_v2.00.xsd deleted file mode 100755 index f97e669d7..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cancCTeTiposBasico_v2.00.xsd +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - Tipo Pedido de Cancelamento de CT-e - - - - - Dados do Pedido de Cancelamentode Conhecimento de Transporte Eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - Chaves de acesso compostas por Código da UF + AAMM da emissão + CNPJ do Emitente + Modelo, Série e Número do CT-e+ Código Numérico + DV. - - - - - Número do Protocolo de Status do CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual 2 – Receita Federal - SCAN, 3 - SEFAZ Virtual RFB ); 2 posições ano; 10 seqüencial no ano. - - - - - Justificativa do cancelamento - - - - - - - - - - - - - - - - - - - Tipo retorno Pedido de Cancelamento CT-e - - - - - Dados do Resultado do Pedido de Cancelamento do Conhecimento de Transporte Eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Identificação da UF - - - - - Versão do Aplicativo que processou o pedido de cancelamento - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - Chaves de acesso do CT-e, compostas por: UF do emitente, AAMM da emissão do CT-e, CNPJ do emitente, modelo, série e número do CT-e e código numérico + DV. - - - - - Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. - - - - - Número do Protocolo de homologação do cancelamento: 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. - - - - - - - - - - - - - Tipo Pedido de Cancelamento de CT-e processado - - - - - - - - - - Tipo Versão de cancela CT-e - 1.04 - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cancCTeTiposBasico_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cancCTeTiposBasico_v3.00.xsd deleted file mode 100755 index 6de1988ca..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cancCTeTiposBasico_v3.00.xsd +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - Tipo Pedido de Cancelamento de CT-e - - - - - Dados do Pedido de Cancelamentode Conhecimento de Transporte Eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - Chaves de acesso compostas por Código da UF + AAMM da emissão + CNPJ do Emitente + Modelo, Série e Número do CT-e+ Código Numérico + DV. - - - - - Número do Protocolo de Status do CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual 2 – Receita Federal - SCAN, 3 - SEFAZ Virtual RFB ); 2 posições ano; 10 seqüencial no ano. - - - - - Justificativa do cancelamento - - - - - - - - - - - - - - - - - - - Tipo retorno Pedido de Cancelamento CT-e - - - - - Dados do Resultado do Pedido de Cancelamento do Conhecimento de Transporte Eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Identificação da UF - - - - - Versão do Aplicativo que processou o pedido de cancelamento - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - Chaves de acesso do CT-e, compostas por: UF do emitente, AAMM da emissão do CT-e, CNPJ do emitente, modelo, série e número do CT-e e código numérico + DV. - - - - - Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. - - - - - Número do Protocolo de homologação do cancelamento: 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. - - - - - - - - - - - - - Tipo Pedido de Cancelamento de CT-e processado - - - - - - - - - - Tipo Versão de cancela CT-e - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consCad_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consCad_v2.00.xsd deleted file mode 100755 index 385c8316d..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consCad_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno da consulta cadastro contribuintes - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consReciCTeTiposBasico_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consReciCTeTiposBasico_v2.00.xsd deleted file mode 100755 index 99db9e7e6..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consReciCTeTiposBasico_v2.00.xsd +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - Tipo Protocolo de status resultado do processamento da CT-e - - - - - Dados do protocolo de status - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a NF-e - - - - - Chaves de acesso da CT-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, subsérie e número da CT-e e código numérico+DV. - - - - - Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. - - - - - Número do Protocolo de Status do CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. - - - - - Digest Value da CT-e processado. Utilizado para conferir a integridade do CT-e original. - - - - - Código do status do CT-e. - - - - - - - - Descrição literal do status do CT-e. - - - - - - - - - - - - - - - - - Tipo Pedido de Consulta do Recibo do Lote de CT-e - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Número do Recibo do lote a ser consultado - - - - - - - - Tipo Retorno do Pedido de Consulta do Recibo do Lote de CT-e - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a CT-e - - - - - Número do Recibo Consultado - - - - - código do status do retorno da consulta. - - - - - Descrição literal do status do do retorno da consulta. - - - - - Idntificação da UF - - - - - Conjunto de CT-es processados, só existe nos casos em que o lote consultado se encontra processado - - - - - - - - Tipo Versão do Consulta Lote de CT-e - 1.04 - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consReciCTeTiposBasico_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consReciCTeTiposBasico_v3.00.xsd deleted file mode 100755 index d6e285739..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consReciCTeTiposBasico_v3.00.xsd +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - Tipo Protocolo de status resultado do processamento da CT-e - - - - - Dados do protocolo de status - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a NF-e - - - - - Chaves de acesso da CT-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, subsérie e número da CT-e e código numérico+DV. - - - - - Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. - - - - - Número do Protocolo de Status do CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. - - - - - Digest Value da CT-e processado. Utilizado para conferir a integridade do CT-e original. - - - - - Código do status do CT-e. - - - - - - - - Descrição literal do status do CT-e. - - - - - - - - - - - - - - - - - Tipo Pedido de Consulta do Recibo do Lote de CT-e - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Número do Recibo do lote a ser consultado - - - - - - - - Tipo Retorno do Pedido de Consulta do Recibo do Lote de CT-e - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a CT-e - - - - - Número do Recibo Consultado - - - - - código do status do retorno da consulta. - - - - - Descrição literal do status do do retorno da consulta. - - - - - Idntificação da UF - - - - - Conjunto de CT-es processados, só existe nos casos em que o lote consultado se encontra processado - - - - - - - - Tipo Versão do Consulta Lote de CT-e - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consReciCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consReciCTe_v2.00.xsd deleted file mode 100755 index 8a41d5d96..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consReciCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Consulta de Lote de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consReciCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consReciCTe_v3.00.xsd deleted file mode 100755 index 2c082b26a..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consReciCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Consulta de Lote de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consSitCTeTiposBasico_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consSitCTeTiposBasico_v2.00.xsd deleted file mode 100755 index 43eb74c46..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consSitCTeTiposBasico_v2.00.xsd +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - Tipo Pedido de Consulta da Situação Atual do Conhecimento de Transporte eletrônico - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - Chaves de acesso da CT-e, compostas por: UF do emitente, AAMM da emissão da CT-e, CNPJ do emitente, modelo, série e número da CT-e e código numérico + DV. - - - - - - - - - - - - Tipo Retorno de Pedido de Consulta da Situação Atual do Conhecimento de Transporte eletrônico - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou o CT-e - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - código da UF de atendimento - - - - - - - - - - - - - Tipo Versão do Consulta situação de CT-e - 2.00 - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consSitCTeTiposBasico_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consSitCTeTiposBasico_v3.00.xsd deleted file mode 100755 index bd38cbb1d..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consSitCTeTiposBasico_v3.00.xsd +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - Tipo Pedido de Consulta da Situação Atual do Conhecimento de Transporte eletrônico - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - Chaves de acesso da CT-e, compostas por: UF do emitente, AAMM da emissão da CT-e, CNPJ do emitente, modelo, série e número da CT-e e código numérico + DV. - - - - - - - - - - - - Tipo Retorno de Pedido de Consulta da Situação Atual do Conhecimento de Transporte eletrônico - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou o CT-e - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - código da UF de atendimento - - - - - - - - - - - - - Tipo Versão do Consulta situação de CT-e - 2.00 - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consSitCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consSitCTe_v2.00.xsd deleted file mode 100755 index 078cb15e2..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consSitCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema de validação XML dp Pedido de Consulta da Situação Atual do CT-e. - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consSitCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consSitCTe_v3.00.xsd deleted file mode 100755 index 7fc527165..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consSitCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema de validação XML dp Pedido de Consulta da Situação Atual do CT-e. - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consStatServCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consStatServCTe_v2.00.xsd deleted file mode 100755 index 04da6c020..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consStatServCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Consulta do Status do Serviço CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consStatServCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consStatServCTe_v3.00.xsd deleted file mode 100755 index 425fe5110..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consStatServCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Consulta do Status do Serviço CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consStatServTiposBasico_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consStatServTiposBasico_v2.00.xsd deleted file mode 100755 index 63d571b79..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consStatServTiposBasico_v2.00.xsd +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - Tipo Pedido de Consulta do Status do Serviço CTe - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - - - - - - - - Tipo Resultado da Consulta do Status do Serviço CTe - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou o CT-e - - - - - - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - Código da UF responsável pelo serviço - - - - - AAAA-MM-DDTHH:MM:SS - - - - - Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos - - - - - - - - - - AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados. - - - - - Campo observação utilizado para incluir informações ao contribuinte - - - - - - - - - - - - - - - Tipo Versão do Consulta do Status do Serviço CTe - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/consStatServTiposBasico_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/consStatServTiposBasico_v3.00.xsd deleted file mode 100755 index 8f7d863b8..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/consStatServTiposBasico_v3.00.xsd +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - Tipo Pedido de Consulta do Status do Serviço CTe - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - - - - - - - - Tipo Resultado da Consulta do Status do Serviço CTe - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou o CT-e - - - - - - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - Código da UF responsável pelo serviço - - - - - AAAA-MM-DDTHH:MM:SS TZD - - - - - Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos - - - - - - - - - - AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados. - - - - - Campo observação utilizado para incluir informações ao contribuinte - - - - - - - - - - - - - - - Tipo Versão do Consulta do Status do Serviço CTe - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalAereo_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalAereo_v2.00.xsd deleted file mode 100755 index 4874aaa6e..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalAereo_v2.00.xsd +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - Informações do modal Aéreo - - - - - - Número da Minuta - Documento que precede o CT-e, assinado pelo expedidor, espécie de pedido de serviço - - - - - - - - - - - Número Operacional do Conhecimento Aéreo - Os três primeiros dígitos representam um código que os operadores de transporte aéreo associados à IATA possuem. Em seguida um número de série de sete dígitos determinados pelo operador de tansporte aéreo. Para finalizar, um dígito verificador - - - - - - - - - - - Data prevista da entrega - Formato AAAA-MM-DD - - - - - Identificação do Emissor - Preencher com o nome da filial, da franquia ou da representante legal emissora do CT-e da empresa de transporte aéreo. - - - - - - - - - - - Identificação Interna do Tomador - Preencher com o código identificador entre o cliente tomador e a empresa aérea. Exemplo: CNPJ, conta corrente, etc. - - - - - - - - - - - Informações de tarifa - - - - - - Classe - Preencher com: - M - Tarifa Mínima; - G - Tarifa Geral; - E - Tarifa Específica - - - - - - - - - - - - - - Código da Tarifa - Deverão ser incluídos os códigos de três dígitos, correspondentes à tarifa. - - - - - - - - - - - Valor da Tarifa - Valor da tarifa por kg quando for o caso. - - - - - - - - Natureza da carga - - - - - - Dimensão - Formato:1234X1234X1234 (cm) - -Esse campo deve sempre que possível ser preenchido. Entretanto, quando for impossível o preenchimento das dimensões, fica obrigatório o preechimento da cubagem em metro cúbico da infQ do leiaute do CT-e da estrutura genérica. - - - - - - - - - - - Informações de manuseio - 1 - certificado do expedidor para embarque de animal vivo; - 2 - artigo perigoso conforme Declaração do Expedidor anexa; - 3 - somente em aeronave cargueira; - 4 - artigo perigoso - declaração do expedidor não requerida; - 5 - artigo perigoso em quantidade isenta; - 6 - gelo seco para refrigeração (especificar no campo observações a quantidade) - 7 - não restrito (especificar a Disposição Especial no campo observações) - 8 - artigo perigoso em carga consolidada (especificar a quantidade no campo observações) - 9 - autorização da autoridade governamental anexa (especificar no campo observações) - 99 - outro (especificar no campo observações) - - - - - - - - - - - - - - - - - - - - Carga especial - Informar o código Interline Message Procedure - IMP - - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalAereo_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalAereo_v3.00.xsd deleted file mode 100755 index e8297d5b8..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalAereo_v3.00.xsd +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - Informações do modal Aéreo - - - - - - Número da Minuta - Documento que precede o CT-e, assinado pelo expedidor, espécie de pedido de serviço - - - - - - - - - - - Número Operacional do Conhecimento Aéreo - Representa o número de controle comumente utilizado pelo conhecimento aéreo composto por uma sequência numérica de onze dígitos. Os três primeiros dígitos representam um código que os operadores de transporte aéreo associados à IATA possuem. Em seguida um número de série de sete dígitos determinados pelo operador de transporte aéreo. Para finalizar, um dígito verificador, que é um sistema de módulo sete imponderado o qual divide o número de série do conhecimento aéreo por sete e usa o resto como dígito de verificação. - - - - - - - - - - - Data prevista da entrega - Formato AAAA-MM-DD - - - - - Natureza da carga - - - - - - Dimensão - Formato:1234X1234X1234 (cm). Esse campo deve sempre que possível ser preenchido. Entretanto, quando for impossível o preenchimento das dimensões, fica obrigatório o preenchimento da cubagem em metro cúbico do leiaute do CT-e da estrutura genérica (infQ). - - - - - - - - - - - - Informações de manuseio - 01 - certificado do expedidor para embarque de animal vivo; -02 - artigo perigoso conforme Declaração do Expedidor anexa; -03 - somente em aeronave cargueira; -04 - artigo perigoso - declaração do expedidor não requerida; -05 - artigo perigoso em quantidade isenta; -06 - gelo seco para refrigeração (especificar no campo observações a quantidade); -07 - não restrito (especificar a Disposição Especial no campo observações); -08 - artigo perigoso em carga consolidada (especificar a quantidade no campo observações) -; 09 - autorização da autoridade governamental anexa (especificar no campo observações); -10 – baterias de íons de lítio em conformidade com a Seção II da PI965 – CAO -; 11 - baterias de íons de lítio em conformidade com a Seção II da PI966 -; 12 - baterias de íons de lítio em conformidade com a Seção II da PI967 -; 13 – baterias de metal lítio em conformidade com a Seção II da PI968 — CAO; -14 - baterias de metal lítio em conformidade com a Seção II da PI969; -15 - baterias de metal lítio em conformidade com a Seção II da PI970 -; 99 - outro (especificar no campo observações) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Informações de tarifa - - - - - - Classe - Preencher com: - M - Tarifa Mínima; - G - Tarifa Geral; - E - Tarifa Específica - - - - - - - - - - - - - - Código da Tarifa - Deverão ser incluídos os códigos de três dígitos, correspondentes à tarifa. - - - - - - - - - - - Valor da Tarifa - Valor da tarifa por kg quando for o caso. - - - - - - - - Preenchido quando for transporte de produtos classificados pela ONU como perigosos. - O preenchimento desses campos não desobriga a empresa aérea de emitir os demais documentos que constam na legislação vigente. - - - - - - Número ONU/UN - Ver a legislação de transporte de produtos perigosos aplicadas ao modal - - - - - - - - - - - Quantidade total de volumes contendo artigos perigosos - Preencher com o número de volumes (unidades) de artigos perigosos, ou seja, cada embalagem devidamente marcada e etiquetada (por ex.: número de caixas, de tambores, de bombonas, dentre outros). Não deve ser preenchido com o número de ULD, pallets ou containers. - - - - - - - - - - - Grupo de informações das quantidades totais de artigos perigosos - Preencher conforme a legislação de transporte de produtos perigosos aplicada ao modal - - - - - - Quantidade total de artigos perigosos - 15 posições, sendo 11 inteiras e 4 decimais. -Deve indicar a quantidade total do artigo perigoso, tendo como base a unidade referenciada na Tabela 3-1 do Doc 9284, por exemplo: litros; quilogramas; quilograma bruto etc. O preenchimento não deve, entretanto, incluir a unidade de medida. No caso de transporte de material radioativo, deve-se indicar o somatório dos Índices de Transporte (TI). Não indicar a quantidade do artigo perigoso por embalagem. - - - - - Unidade de medida - 1 – KG; -2 – KG G (quilograma bruto); -3 – LITROS; -4 – TI (índice de transporte para radioativos); 5- Unidades (apenas para artigos perigosos medidos em unidades que não se enquadram nos itens acima. Exemplo: baterias, celulares, equipamentos, veículos, dentre outros) - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalAquaviario_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalAquaviario_v2.00.xsd deleted file mode 100755 index 6f47b0b75..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalAquaviario_v2.00.xsd +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - Informações do modal Aquaviário - - - - - - Valor da Prestação Base de Cálculo do AFRMM - - - - - AFRMM (Adicional de Frete para Renovação da Marinha Mercante) - - - - - Número do Booking (reserva) - - - - - - - - - - - Número de Controle - campo para uso das empresas transportadoras - - - - - - - - - - - Identificação do Navio - - - - - - - - - - - Grupo de informações das balsas - - - - - - Identificador da Balsa - - - - - - - - - - - - - - Número da Viagem - - - - - - - - - - - Direção - Preencher com: N-Norte, L-Leste, S-Sul, O-Oeste - - - - - - - - - - - - - - Porto de Embarque - - - - - - - - - - - Porto de Transbordo - - - - - - - - - - - Porto de Destino - - - - - - - - - - - Tipo de Navegação - Preencher com: - 0 - Interior; - 1 - Cabotagem - - - - - - - - - - - - Irin do navio sempre deverá ser informado - - - - - - - - - - - - Grupo de informações de detalhamento dos conteiners -(Somente para Redespacho Intermediario) - - - - - - Identificação do Container - - - - - Grupo de informações dos lacres dos cointainers da qtde da carga - - - - - - Lacre - - - - - - - - - - - - - - Informações dos documentos dos conteiners - - - - - - Informações das NF - - - - - - Série - - - - - - - - - - - Número - - - - - - - - - - - Unidade de medida rateada (Peso,Volume) - - - - - - - - Informações das NFe - - - - - - Chave de acesso da NF-e - - - - - Unidade de medida rateada (Peso,Volume) - - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalAquaviario_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalAquaviario_v3.00.xsd deleted file mode 100755 index b18437a8c..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalAquaviario_v3.00.xsd +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - Informações do modal Aquaviário - - - - - - Valor da Prestação Base de Cálculo do AFRMM - - - - - AFRMM (Adicional de Frete para Renovação da Marinha Mercante) - - - - - Identificação do Navio - - - - - - - - - - - Grupo de informações das balsas - - - - - - Identificador da Balsa - - - - - - - - - - - - - - Número da Viagem - - - - - - - - - - - Direção - Preencher com: N-Norte, L-Leste, S-Sul, O-Oeste - - - - - - - - - - - - - - Irin do navio sempre deverá ser informado - - - - - - - - - - - - Grupo de informações de detalhamento dos conteiners -(Somente para Redespacho Intermediario e serviço vinculado) - - - - - - Identificação do Container - - - - - Grupo de informações dos lacres dos cointainers da qtde da carga - - - - - - Lacre - - - - - - - - - - - - - - Informações dos documentos dos conteiners - - - - - - Informações das NF - - - - - - Série - - - - - - - - - - - Número - - - - - - - - - - - Unidade de medida rateada (Peso,Volume) - - - - - - - - Informações das NFe - - - - - - Chave de acesso da NF-e - - - - - Unidade de medida rateada (Peso,Volume) - - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalDutoviario_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalDutoviario_v2.00.xsd deleted file mode 100755 index 35c431d92..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalDutoviario_v2.00.xsd +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - Informações do modal Dutoviário - - - - - - Valor da tarifa - - - - - Data de Início da prestação do serviço - - - - - Data de Fim da prestação do serviço - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalDutoviario_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalDutoviario_v3.00.xsd deleted file mode 100755 index a2fa1359f..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalDutoviario_v3.00.xsd +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - Informações do modal Dutoviário - - - - - - Valor da tarifa - - - - - Data de Início da prestação do serviço - - - - - Data de Fim da prestação do serviço - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalFerroviario_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalFerroviario_v2.00.xsd deleted file mode 100755 index 3ca46833b..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalFerroviario_v2.00.xsd +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município - Utilizar a tabela do IBGE - Informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - - Informações do modal Ferroviário - - - - - - Tipo de Tráfego - Preencher com: - 0-Próprio; - 1-Mútuo; - 2-Rodoferroviário; - 3-Rodoviário. - - - - - - - - - - - - - - Detalhamento de informações para o tráfego mútuo - - - - - - Responsável pelo Faturamento - Preencher com: - 1-Ferrovia de origem; - 2-Ferrovia de destino - - - - - - - - - - - - Ferrovia Emitente do CTe - Preencher com: - 1-Ferrovia de origem; - 2-Ferrovia de destino - - - - - - - - - - - - - - - Fluxo Ferroviário - Trata-se de um número identificador do contrato firmado com o cliente - - - - - - - - - - - Identificação do trem. - - - - - - - - - - - Valor do Frete - - - - - Informações das Ferrovias Envolvidas - - - - - - Número do CNPJ - Informar o CNPJ da Ferrovia Envolvida. Caso a Ferrovia envolvida não seja inscrita no CNPJ o campo deverá preenchido com zeros. -Informar os zeros não significativos. - - - - - Código interno da Ferrovia envolvida - Uso da transportadora - - - - - - - - - - - Inscrição Estadual - - - - - Razão Social ou Nome - - - - - - - - - - - Dados do endereço da ferrovia envolvida - - - - - - - - informações de detalhes dos Vagões - - - - - - Número de Identificação do vagão - - - - - - - - - - - Capacidade em Toneladas - - - - - Tipo de Vagão - - - - - - - - - - Peso Real em Toneladas - - - - - Peso Base de Cálculo de Frete em Toneladas - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalFerroviario_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalFerroviario_v3.00.xsd deleted file mode 100755 index bf2cf40ef..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalFerroviario_v3.00.xsd +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município - Utilizar a tabela do IBGE - Informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - - Informações do modal Ferroviário - - - - - - Tipo de Tráfego - Preencher com: - 0-Próprio; - 1-Mútuo; - 2-Rodoferroviário; - 3-Rodoviário. - - - - - - - - - - - - - - Detalhamento de informações para o tráfego mútuo - - - - - - Responsável pelo Faturamento - Preencher com: - 1-Ferrovia de origem; - 2-Ferrovia de destino - - - - - - - - - - - - Ferrovia Emitente do CTe - Preencher com: - 1-Ferrovia de origem; - 2-Ferrovia de destino - - - - - - - - - - - - Valor do Frete do Tráfego Mútuo - - - - - Chave de acesso do CT-e emitido pelo ferrovia de origem - - - - - Informações das Ferrovias Envolvidas - - - - - - Número do CNPJ - Informar o CNPJ da Ferrovia Envolvida. Caso a Ferrovia envolvida não seja inscrita no CNPJ o campo deverá preenchido com zeros. -Informar os zeros não significativos. - - - - - Código interno da Ferrovia envolvida - Uso da transportadora - - - - - - - - - - - Inscrição Estadual - - - - - Razão Social ou Nome - - - - - - - - - - - Dados do endereço da ferrovia envolvida - - - - - - - - - - - Fluxo Ferroviário - Trata-se de um número identificador do contrato firmado com o cliente - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviarioOS_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviarioOS_v3.00.xsd deleted file mode 100755 index 47dbba17c..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviarioOS_v3.00.xsd +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - Tipo Termo de Autorização de Fretamento – TAF - - - - - - - - - - Tipo Número de Registro Estadual - - - - - - - - - - Informações do modal Rodoviário - - - - - - - Termo de Autorização de Fretamento – TAF - de acordo com a Resolução ANTT nº 4.777/2015 - - - - - Número do Registro Estadual - Registro obrigatório do emitente do CT-e junto à ANTT para exercer a atividade de transportador rodoviário de cargas por conta de terceiros e mediante remuneração. - - - - - - - Dados do Veículo - - - - - - Placa do veículo - - - - - - - - RENAVAM do veículo - - - - - - - - - - - Proprietários do Veículo. -Só preenchido quando o veículo não pertencer à empresa emitente do CT-e OS - - - - - - - Número do CPF - Informar os zeros não significativos. - - - - - Número do CNPJ - Informar os zeros não significativos. - - - - - - - Termo de Autorização de Fretamento – TAF - De acordo com a Resolução ANTT nº 4.777/2015 - - - - - Número do Registro Estadual - Registro obrigatório do emitente do CT-e junto à ANTT para exercer a atividade de transportador rodoviário de cargas por conta de terceiros e mediante remuneração. - - - - - - - Razão Social ou Nome do proprietário - - - - - - - - - - - - Inscrição Estadual - - - - - - - - UF - - - - - - Tipo Proprietário - Preencher com: - 0-TAC – Agregado; - 1-TAC Independente; ou - 2 – Outros. - - - - - - - - - - - - - - - - UF em que veículo está licenciado - Sigla da UF de licenciamento do veículo. - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviario_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviario_v2.00.xsd deleted file mode 100755 index 71704ffd7..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviario_v2.00.xsd +++ /dev/null @@ -1,479 +0,0 @@ - - - - - - - Tipo RNTRC - Registro Nacional Transportadores Rodoviários de Carga - - - - - - - - - Tipo Placa - - - - - - - - - Tipo CIOT - Código Identificador da Operação de Transporte - - - - - - - - - Informações do modal Rodoviário - - - - - - Registro Nacional de Transportadores Rodoviários de Carga - Registro obrigatório do emitente do CT-e junto à ANTT para exercer a atividade de transportador rodoviário de cargas por conta de terceiros e mediante remuneração. - - - - - - - - - Data prevista para entrega da carga no Recebedor - Formato AAAA-MM-DD - - - - - Indicador de Lotação - - Preencher com: 0 - Não; 1 - Sim - Será lotação quando houver um único conhecimento de transporte por veículo, ou combinação veicular, e por viagem - - - - - - - - - - - - Código Identificador da Operação de Transporte - Também Conhecido como conta frete - - - - - - - - Ordens de Coleta associados - - - - - - Série da OCC - - - - - - - - - - - Número da Ordem de coleta - - - - - - - - - - - Data de emissão da ordem de coleta - Formato AAAA-MM-DD - - - - - - - - Número do CNPJ - Informar os zeros não significativos. - - - - - Código interno de uso da transportadora - Uso intermo das transportadoras. - - - - - - - - - - - Inscrição Estadual - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Telefone - - - - - - - - - - - Informações de Vale Pedágio - Outras informações sobre Vale-Pedágio obrigatório que não tenham campos específicos devem ser informadas no campo de observações gerais de uso livre pelo contribuinte, visando atender as determinações legais vigentes. - - - - - - CNPJ da empresa fornecedora do Vale-Pedágio - - CNPJ da Empresa Fornecedora do Vale-Pedágio, ou seja, empresa que fornece ao Responsável pelo Pagamento do Vale-Pedágio os dispositivos do Vale-Pedágio. - - Informar os zeros não significativos. - - - - - - - - Número do comprovante de compra - Número de ordem do comprovante de compra do Vale-Pedágio fornecido para cada veículo ou combinação veicular, por viagem. - - - - - - - - - - CNPJ do responsável pelo pagamento do Vale-Pedágio - - responsável pelo pagamento do Vale Pedágio. Informar somente quando o responsável não for o emitente do CT-e. - - Informar os zeros não significativos. - - - - - Valor do Vale-Pedagio - Número de ordem do comprovante de compra do Vale-Pedágio fornecido para cada veículo ou combinação veicular, por viagem. - - - - - - - - Dados dos Veículos - Um CT-e poderá ter vários veículos associados, ex.: cavalo + reboque. - Só preenchido em CT-e rodoviário de lotação. - - - - - - Código interno do veículo - - - - - - - - - - - RENAVAM do veículo - - - - - - - - - - - Placa do veículo - - - - - - - - Tara em KG - - - - - - - - - - - Capacidade em KG - - - - - - - - - - - Capacidade em M3 - - - - - - - - - - - Tipo de Propriedade de veículo - Preencher com: - P- Próprio; - T- terceiro. - Será próprio quando o proprietário, co-proprietário ou arrendatário do veículo for o Emitente do CT-e, caso contrário será caracterizado como de propriedade de Terceiro - - - - - - - - - - - - - Tipo de veículo - Preencher com: 0-Tração; 1-Reboque - - - - - - - - - - - - Tipo de Rodado - Preencher com: - 00 - não aplicável; - 01 - Truck; - 02 - Toco; - 03 - Cavalo Mecânico; - 04 - VAN; - 05 - Utilitário; - 06 - Outros. - - - - - - - - - - - - - - - - - Tipo de Carroceria - Preencher com: - 00 - não aplicável; - 01 - Aberta; - 02 - Fechada/Baú; - 03 - Granelera; - 04 - Porta Container; - 05 - Sider - - - - - - - - - - - - - - - - UF em que veículo está licenciado - Sigla da UF de licenciamento do veículo. - - - - - Proprietários do Veículo. - Só preenchido quando o veículo não pertencer à empresa emitente do CT-e - - - - - - - Número do CPF - Informar os zeros não significativos. - - - - - Número do CNPJ - Informar os zeros não significativos. - - - - - - Registro Nacional dos Transportadores Rodoviários de Carga - Registro obrigatório do proprietário, co-proprietário ou arrendatário do veículo junto à ANTT para exercer a atividade de transportador rodoviário de cargas por conta de terceiros e mediante remuneração. - - - - - Razão Social ou Nome do proprietário - - - - - - - - - - - - Inscrição Estadual - - - - - - - - UF - - - - - - Tipo Proprietário - Preencher com: - 0-TAC – Agregado; - 1-TAC Independente; ou - 2 – Outros. - - - - - - - - - - - - - - - - - - - Lacres - - - - - - Número do Lacre - - - - - - - - - - - - - - Informações do(s) Motorista(s) - Só preenchido em CT-e rodoviário de lotação - - - - - - Nome do Motorista - - - - - - - - - - - CPF do Motorista - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviario_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviario_v3.00.xsd deleted file mode 100755 index bb5f55397..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteModalRodoviario_v3.00.xsd +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - Informações do modal Rodoviário - - - - - - Registro Nacional de Transportadores Rodoviários de Carga - Registro obrigatório do emitente do CT-e junto à ANTT para exercer a atividade de transportador rodoviário de cargas por conta de terceiros e mediante remuneração. - - - - - - - - - Ordens de Coleta associados - - - - - - Série da OCC - - - - - - - - - - - Número da Ordem de coleta - - - - - - - - - - - Data de emissão da ordem de coleta - Formato AAAA-MM-DD - - - - - - - - Número do CNPJ - Informar os zeros não significativos. - - - - - Código interno de uso da transportadora - Uso intermo das transportadoras. - - - - - - - - - - - Inscrição Estadual - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Telefone - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteMultiModal_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteMultiModal_v2.00.xsd deleted file mode 100755 index d9538d985..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteMultiModal_v2.00.xsd +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - Informações do Multimodal - - - - - - Número do Certificado do Operador de Transporte Multimodal - - - - - - - - - - - - - Indicador Negociável -Preencher com: 0 - Não Negociável; 1 - Negociável - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteMultiModal_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteMultiModal_v3.00.xsd deleted file mode 100755 index 60a707bec..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteMultiModal_v3.00.xsd +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - Informações do Multimodal - - - - - - Número do Certificado do Operador de Transporte Multimodal - - - - - - - - - - - - - Indicador Negociável -Preencher com: 0 - Não Negociável; 1 - Negociável - - - - - - - - - - - - Informações de Seguro do Multimodal - - - - - - Informações da seguradora - - - - - - Nome da Seguradora - - - - - - - - - - - Número do CNPJ da seguradora - Obrigatório apenas se responsável pelo seguro for (2) responsável pela contratação do transporte - pessoa jurídica - - - - - - - - Número da Apólice - Obrigatório pela lei 11.442/07 (RCTRC) - - - - - - - - - - - Número da Averbação - Não é obrigatório, pois muitas averbações ocorrem aapós a emissão do CT, mensalmente, por exemplo. - - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteOS_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteOS_v3.00.xsd deleted file mode 100755 index 2bf87cb0d..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteOS_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Conhecimento de Transporte Eletrônico Outros Serviços - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteTiposBasico_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteTiposBasico_v2.00.xsd deleted file mode 100755 index 96d3ddae5..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteTiposBasico_v2.00.xsd +++ /dev/null @@ -1,3699 +0,0 @@ - - - - - - - Tipo Conhecimento de Transporte Eletrônico - - - - - Informações do CT-e - - - - - - Identificação do CT-e - - - - - - Código da UF do emitente do CT-e. - Utilizar a Tabela do IBGE. - - - - - Código numérico que compõe a Chave de Acesso. - Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. - - - - - - - - - - - Código Fiscal de Operações e Prestações - - - - - Natureza da Operação - - - - - - - - - - - Forma de pagamento do serviço *** TAG OBSOLETA - Será retirada em versão futura - Preencher com: - 0 - Pago; - 1 - A pagar; - 2 - Outros - - - - - - - - - - - - - Modelo do documento fiscal - Utilizar o código 57 para identificação do CT-e, emitido em substituição aos modelos de conhecimentos em papel. - - - - - Série do CT-e - Preencher com "0" no caso de série única - - - - - - - - Número do CT-e - - - - - Data e hora de emissão do CT-e - Formato AAAA-MM-DDTHH:MM:DD - - - - - - - - - - - Formato de impressão do DACTE - Preencher com: 1 - Retrato; 2 - Paisagem. - - - - - - - - - - - - Forma de emissão do CT-e - Preencher com: -1 - Normal; - 4-EPEC pela SVC; 5 - Contingência FSDA; - 7 - Autorização pela SVC-RS; - 8 - Autorização pela SVC-SP - - - - - - - - - - - - - - - Digito Verificador da chave de acesso do CT-e - Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. - - - - - - - - - - - Tipo do Ambiente - Preencher com:1 - Produção; 2 - Homologação - - - - - Tipo do CT-e - Preencher com: - 0 - CT-e Normal; - 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; - 3 - CT-e Substituto - - - - - Identificador do processo de emissão do CT-e - Preencher com: - 0 - emissão de CT-e com aplicativo do contribuinte; - 1 - emissão de CT-e avulsa pelo Fisco; - 2 - emissão de CT-e avulsa, pelo contribuinte com seu certificado digital, através do site do Fisco; - 3- emissão CT-e pelo contribuinte com aplicativo fornecido pelo Fisco. - - - - - Versão do processo de emissão - Iinformar a versão do aplicativo emissor de CT-e. - - - - - - - - - - - Chave de acesso do CT-e referenciado - - - - - Código do Município de envio do CT-e (de onde o documento foi transmitido) - Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. - - - - - Nome do Município de envio do CT-e (de onde o documento foi transmitido) - Informar PAIS/Municipio para as operações com o exterior. - - - - - - - - - - - Sigla da UF de envio do CT-e (de onde o documento foi transmitido) - Informar 'EX' para operações com o exterior. - - - - - Modal - Preencher com:01-Rodoviário; -02-Aéreo;03-Aquaviário;04-Ferroviário;05-Dutoviário;06-Multimodal; - - - - - Tipo do Serviço - Preencher com: -0 - Normal;1 - Subcontratação; -2 - Redespacho;3 - Redespacho Intermediário; 4 - Serviço Vinculado a Multimodal - - - - - - - - - - - - - - - Código do Município de início da prestação - Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. - - - - - Nome do Município do início da prestação - Informar 'EXTERIOR' para operações com o exterior. - - - - - - - - - - - UF do início da prestação - Informar 'EX' para operações com o exterior. - - - - - Código do Município de término da prestação - Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. - - - - - Nome do Município do término da prestação - Informar 'EXTERIOR' para operações com o exterior. - - - - - - - - - - - UF do término da prestação - Informar 'EX' para operações com o exterior. - - - - - Indicador se o Recebedor retira no Aeroporto, Filial, Porto ou Estação de Destino? - Preencher com: 0 - sim; 1 - não - - - - - - - - - - - - Detalhes do retira - - - - - - - - - - - - Indicador do "papel" do tomador do serviço no CT-e - - - - - - Tomador do Serviço - Preencher com: - 0-Remetente; - 1-Expedidor; - 2-Recebedor; - 3-Destinatário - Serão utilizadas as informações contidas no respectivo grupo, conforme indicado pelo conteúdo deste campo - - - - - - - - - - - - - - - - - Indicador do "papel" do tomador do serviço no CT-e - - - - - - Tomador do Serviço - Preencher com: - 4 - Outros - Obs: Informar os dados cadastrais do tomador do serviço - - - - - - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. -Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. - - - - - - Razão Social ou Nome - - - - - - - - - - - Nome Fantasia - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - - - Informar apenas -para tpEmis diferente de 1 - - - - Data e Hora da entrada em contingência - Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS - - - - - - - - - - - Justificativa da entrada em contingência - - - - - - - - - - - - - - - Dados complementares do CT-e para fins operacionais ou comerciais - - - - - - Característica adicional do transporte - Texto livre: -REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - - - - - - - - - - - Característica adicional do serviço - Texto livre: - ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc - - - - - - - - - - - Funcionário emissor do CTe - - - - - - - - - - - Previsão do fluxo da carga - Preenchimento obrigatório para o modal aéreo. - - - - - - Sigla ou código interno da Filial/Porto/Estação/ Aeroporto de Origem - Observações para o modal aéreo: - - Preenchimento obrigatório para o modal aéreo. - - O código de três letras IATA do aeroporto de partida deverá ser incluído como primeira anotação. Quando não for possível, utilizar a sigla OACI. - - - - - - - - - - - - - - Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Passagem - Observação para o modal aéreo: - - O código de três letras IATA, referente ao aeroporto de transferência, deverá ser incluído, quando for o caso. Quando não for possível, utilizar a sigla OACI. Qualquer solicitação de itinerário deverá ser incluída. - - - - - - - - - - - - - - Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Destino - Observações para o modal aéreo: - - Preenchimento obrigatório para o modal aéreo. - - Deverá ser incluído o código de três letras IATA do aeroporto de destino. Quando não for possível, utilizar a sigla OACI. - - - - - - - - - - - Código da Rota de Entrega - - - - - - - - - - - - - - Informações ref. a previsão de entrega - - - - - - - Entrega sem data definida - Esta opção é proibida para o modal aéreo. - - - - - - Tipo de data/período programado para entrega - 0- Sem data definida - - - - - - - - - - - - - - Entrega com data definida - - - - - - Tipo de data/período programado para entrega - Preencher com: - 1-Na data; - 2-Até a data; - 3-A partir da data - - - - - - - - - - - - - Data programada - Formato AAAA-MM-DD - - - - - - - - Entrega no período definido - - - - - - Tipo período - 4-no período - - - - - - - - - - - Data inicial - Formato AAAA-MM-DD - - - - - Data final - Formato AAAA-MM-DD - - - - - - - - - - Entrega sem hora definida - - - - - - Tipo de hora - 0- Sem hora definida - - - - - - - - - - - - - - Entrega com hora definida - - - - - - Tipo de hora - Preencher com: - 1--No horário; - 2-Até o horário; - 3-A partir do horário - - - - - - - - - - - - - Hora programada - Formato HH:MM:SS - - - - - - - - Entrega no intervalo de horário definido - - - - - - Tipo de hora - 4 - No intervalo de tempo - - - - - - - - - - - Hora inicial - Formato HH:MM:SS - - - - - Hora final - Formato HH:MM:SS - - - - - - - - - - - - Município de origem para efeito de cálculo do frete - - - - - - - - - - - Município de destino para efeito de cálculo do frete - - - - - - - - - - - Observações Gerais - - - - - - - - - - - Campo de uso livre do contribuinte - Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto - - - - - - Conteúdo do campo - - - - - - - - - - - - Identificação do campo - - - - - - - - - - - - - Campo de uso livre do contribuinte - Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto - - - - - - Conteúdo do campo - - - - - - - - - - - - Identificação do campo - - - - - - - - - - - - - - - - Identificação do Emitente do CT-e - - - - - - CNPJ do emitente - Informar zeros não significativos - - - - - Inscrição Estadual do Emitente - - - - - - - - Razão social ou Nome do emitente - - - - - - - - - - - Nome fantasia - - - - - - - - - - - Endereço do emitente - - - - - - - - Informações do Remetente das mercadorias transportadas pelo CT-e - Poderá não ser informado para os CT-e de redespacho intermediário. Nos demais casos deverá sempre ser informado. - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar o conteúdo. - - - - - Razão social ou nome do remetente - - - - - - - - - - - Nome fantasia - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - - - - Informações do Expedidor da Carga - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do expedidor ou ISENTO se expedidor é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o expedidor não seja contribuinte do ICMS não informar o conteúdo. - - - - - Razão Social ou Nome - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - Informações do Recebedor da Carga - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do recebedor ou ISENTO se recebedor é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o recebedor não seja contribuinte do ICMS não informar o conteúdo. - - - - - Razão Social ou Nome - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - Informações do Destinatário do CT-e - Só pode ser omitido em caso de redespacho intermediário - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do destinatário ou ISENTO se destinatário é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o destinatário não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Razão Social ou Nome do destinatário - - - - - - - - - - - Telefone - - - - - Inscrição na SUFRAMA - (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) - - - - - - - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - Valores da Prestação de Serviço - - - - - - Valor Total da Prestação do Serviço - Pode conter zeros quando o CT-e for de complemento de ICMS - - - - - Valor a Receber - - - - - Componentes do Valor da Prestação - - - - - - Nome do componente - Exxemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc - - - - - - - - - - - Valor do componente - - - - - - - - - - - Informações relativas aos Impostos - - - - - - Informações relativas ao ICMS - - - - - - Valor Total dos Tributos - - - - - Informações adicionais de interesse do Fisco - Norma referenciada, informações complementares, etc - - - - - - - - - - - Informações do ICMS de partilha com a UF de término do serviço de transporte na operação interestadual - Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS - - - - - - Valor da BC do ICMS na UF de término da prestação do serviço de transporte - - - - - Percentual do ICMS relativo ao Fundo de Combate à pobreza (FCP) na UF de término da prestação do serviço de transporte - Alíquota adotada nas operações internas na UF do destinatário - - - - - Alíquota interna da UF de término da prestação do serviço de transporte - Alíquota adotada nas operações internas na UF do destinatário - - - - - Alíquota interestadual das UF envolvidas - Alíquota interestadual das UF envolvidas - - - - - - Percentual provisório de partilha entre os estados - Percentual de partilha para a UF do destinatário: -- 40% em 2016; -- 60% em 2017; -- 80% em 2018; -- 100% a partir de 2019. - - - - - Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação - - - - - Valor do ICMS de partilha para a UF de término da prestação do serviço de transporte - - - - - Valor do ICMS de partilha para a UF de início da prestação do serviço de transporte - - - - - - - - - - - - Grupo de informações do CT-e Normal e Substituto - - - - - - Informações da Carga do CT-e - - - - - - Valor total da carga - Dever ser informado para todos os modais, com exceção para o Dutoviário. - - - - - Produto predominante - Informar a descrição do produto predominante - - - - - - - - - - - Outras características da carga - "FRIA", "GRANEL", "REFRIGERADA", "Medidas: 12X12X12" - - - - - - - - - - - Informações de quantidades da Carga do CT-e - Para o Aéreo é obrigatório o preenchimento desse campo da seguinte forma. -1 - Peso Bruto, sempre em quilogramas (obrigatório); -2 - Peso Cubado; sempre em quilogramas; -3 - Quantidade de volumes, sempre em unidades (obrigatório); -4 - Cubagem, sempre em metros cúbicos (obrigatório apenas quando for impossível preencher as dimensões da(s) embalagem(ens) na tag xDime do leiaute do Aéreo). - - - - - - Código da Unidade de Medida - Preencher com: - 00-M3; - 01-KG; - 02-TON; - 03-UNIDADE; - 04-LITROS; - 05-MMBTU - - - - - - - - - - - - - - - - Tipo da Medida - Exemplos: -PESO BRUTO, PESO DECLARADO, PESO CUBADO, PESO AFORADO, PESO AFERIDO, PESO BASE DE CÁLCULO, LITRAGEM, CAIXAS e etc - - - - - - - - - - - Quantidade - - - - - - - - - - - Informações dos documentos transportados pelo CT-e -Opcional para Redespacho Intermediario e Serviço vinculado a multimodal. - Poderá não ser informado para os CT-e de redespacho intermediário. Nos demais casos deverá sempre ser informado. - - - - - - - Informações das NF - Este grupo deve ser informado quando o documento originário for NF - - - - - - Número do Romaneio da NF - - - - - - - - - - - Número do Pedido da NF - - - - - - - - - - - Modelo da Nota Fiscal - Preencher com: -01 - NF Modelo 01/1A e Avulsa; -04 - NF de Produtor - - - - - Série - - - - - - - - - - - Número - - - - - - - - - - - Data de Emissão - Formato AAAA-MM-DD - - - - - Valor da Base de Cálculo do ICMS - - - - - Valor Total do ICMS - - - - - Valor da Base de Cálculo do ICMS ST - - - - - Valor Total do ICMS ST - - - - - Valor Total dos Produtos - - - - - Valor Total da NF - - - - - CFOP Predominante - CFOP da NF ou, na existência de mais de um, predominância pelo critério de valor econômico. - - - - - Peso total em Kg - - - - - PIN SUFRAMA - PIN atribuído pela SUFRAMA para a operação. - - - - - - - - - - - - - Data prevista de entrega - Formato AAAA-MM-DD - - - - - - Informações das Unidades de Transporte (Carreta/Reboque/Vagão) - Deve ser preenchido com as informações das unidades de transporte utilizadas. - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - - - - - Informações das NF-e - - - - - - Chave de acesso da NF-e - - - - - PIN SUFRAMA - PIN atribuído pela SUFRAMA para a operação. - - - - - - - - - - - - - Data prevista de entrega - Formato AAAA-MM-DD - - - - - - Informações das Unidades de Transporte (Carreta/Reboque/Vagão) - Deve ser preenchido com as informações das unidades de transporte utilizadas. - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - - - - - Informações dos demais documentos - - - - - - Tipo de documento originário - Preencher com: - 00 - Declaração; - 10 - Dutoviário; - 99 - Outros - - - - - - - - - - - - - Descrição quando se tratar de 99-Outros - - - - - - - - - - - Número - - - - - - - - - - - Data de Emissão - Formato AAAA-MM-DD - - - - - Valor do documento - - - - - Data prevista de entrega - Formato AAAA-MM-DD - - - - - - Informações das Unidades de Transporte (Carreta/Reboque/Vagão) - Deve ser preenchido com as informações das unidades de transporte utilizadas. - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - - - - - - - - - Documentos de Transporte Anterior - - - - - - Emissor do documento anterior - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - - Inscrição Estadual - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - Razão Social ou Nome do expedidor - - - - - - - - - - - Informações de identificação dos documentos de Transporte Anterior - - - - - - Documentos de transporte anterior em papel - - - - - - Tipo do Documento de Transporte Anterior - Preencher com: - 00-CTRC; - 01-CTAC; - 02-ACT; - 03 - NF Modelo 7; - 04 - NF Modelo 27; - 05-Conhecimento Aéreo Nacional; - 06-CTMC; - 07-ATRE; - 08-DTA (Despacho de Transito Aduaneiro); - 09-Conhecimento Aéreo Internacional; - 10 – Conhecimento - Carta de Porte Internacional; - 11 – Conhecimento Avulso; - 12-TIF (Transporte Internacional Ferroviário); - 99 - outros - - - - - Série do Documento Fiscal - - - - - - - - - - - Série do Documento Fiscal - - - - - - - - - - - Número do Documento Fiscal - - - - - - - - - - - - - Data de emissão (AAAA-MM-DD) - - - - - - - - Documentos de transporte anterior eletrônicos - - - - - - Chave de acesso do CT-e - - - - - - - - - - - - - - - - - Informações de Seguro da Carga - - - - - - Responsável pelo seguro - Preencher com: - 0- Remetente; - 1- Expedidor; - 2 - Recebedor; - 3 - Destinatário; - 4 - Emitente do CT-e; - 5 - Tomador de Serviço. - Dados obrigatórios apenas no modal Rodoviário, depois da lei 11.442/07. Para os demais modais esta informação é opcional. - - - - - - - - - - - - - - - - - - Nome da Seguradora - - - - - - - - - - - Número da Apólice - Obrigatório pela lei 11.442/07 (RCTRC) - - - - - - - - - - - Número da Averbação - Não é obrigatório, pois muitas averbações ocorrem aapós a emissão do CT, mensalmente, por exemplo. - - - - - - - - - - Valor da Carga para efeito de averbação - Normalmente igual ao valor declarado da mercadoria, diferente por exemplo, quando a mercadoria transportada é isenta de tributos nacionais para exportação, onde é preciso averbar um valor maior, pois no caso de indenização, o valor a ser pago será maior - - - - - - - - Informações do modal - - - - - - XML do modal -Insira neste local o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). - O elemento do tipo -any- permite estender o documento XML com elementos não especificados pelo schema. - Insira neste local - any- o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). A especificação do schema XML para cada modal pode ser encontrada nos arquivos que acompanham este pacote de liberação: - Rodoviário - ver arquivo CTeModalRodoviario_v9.99 - Aéreo - ver arquivo CTeModalAereo_v9.99 - Aquaviário - arquivo CTeModalAquaviario_v9.99 - Ferroviário - arquivo CTeModalFerroviario_v9.99 - Dutoviário - arquivo CTeModalDutoviario_v9.99 -Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.04 será denominado "CTeModalRodoviario_v1.04". - - - - - - Versão do leiaute específico para o Modal - - - - - - - - - - - - - Preenchido quando for transporte de produtos classificados pela ONU como perigosos. - Não deve ser preenchido para modal dutoviário. - Observação para o modal aéreo: - - O preenchimento desses campos não desobriga a empresa aérea de emitir os demais documentos que constam na legislação vigente. - - - - - - Número ONU/UN - Ver a legislação de transporte de produtos perigosos aplicadas ao modal - - - - - - - - - - - Nome apropriado para embarque do produto - Ver a legislação de transporte de produtos perigosos aplicada ao modo de transporte - - - - - - - - - - - Classe ou subclasse/divisão, e risco subsidiário/risco secundário - Ver a legislação de transporte de produtos perigosos aplicadas ao modal - - - - - - - - - - - Grupo de Embalagem - Ver a legislação de transporte de produtos perigosos aplicadas ao modal - Preenchimento obrigatório para o modal aéreo. - A legislação para o modal rodoviário e ferroviário não atribui grupo de embalagem para todos os produtos, portanto haverá casos de não preenchimento desse campo. - - - - - - - - - - - Quantidade total por produto - Preencher conforme a legislação de transporte de produtos perigosos aplicada ao modal - - - - - - - - - - - Quantidade e Tipo de volumes - Preencher conforme a legislação de transporte de produtos perigosos aplicada ao modal - - - - - - - - - - - Ponto de Fulgor - Preencher conforme a legislação de transporte de produtos perigosos aplicada ao modal. - No caso de transporte rodoviário e ferroviário, este campo não é exigido. - - - - - - - - - - - - - - informações dos veículos transportados - - - - - - Chassi do veículo - - - - - - - - - - - - Cor do veículo - Código de cada montadora - - - - - - - - - - - Descrição da cor - - - - - - - - - - - Código Marca Modelo - Utilizar tabela RENAVAM - - - - - - - - - - - Valor Unitário do Veículo - - - - - Frete Unitário - - - - - - - - Dados da cobrança do CT-e - - - - - - Dados da fatura - - - - - - Número da fatura - - - - - - - - - - - Valor original da fatura - - - - - Valor do desconto da fatura - - - - - Valor líquido da fatura - - - - - - - - Dados das duplicatas - - - - - - Número da duplicata - - - - - - - - - - - Data de vencimento da duplicata (AAAA-MM-DD) - - - - - Valor da duplicata - - - - - - - - - - - Informações do CT-e de substituição - - - - - - Chave de acesso do CT-e a ser substituído (original) - - - - - - - - - - - Tomador é contribuinte do ICMS - - - - - - Chave de acesso da NF-e emitida pelo Tomador - - - - - Informação da NF ou CT emitido pelo Tomador - - - - - - - CNPJ do Emitente - Informar o CNPJ do emitente do Documento Fiscal - - - - - Número do CPF - Informar o CPF do emitente do documento fiscal - - - - - - Modelo do Documento Fiscal - - - - - Serie do documento fiscal - - - - - Subserie do documento fiscal - - - - - Número do documento fiscal - - - - - - - - - - - Valor do documento fiscal. - - - - - Data de emissão do documento fiscal. - - - - - - - - Chave de acesso do CT-e emitido pelo Tomador - - - - - - - - Tomador não é contribuinte do ICMS - - - - - - Chave de acesso do CT-e de Anulação - - - - - - - - - - - - - - - - - - Detalhamento do CT-e complementado - - - - - - Chave do CT-e complementado - - - - - - - - Detalhamento do CT-e do tipo Anulação - - - - - - Chave de acesso do CT-e original a ser anulado e substituído - - - - - - - - - - Data de emissão da declaração do tomador não contribuinte do ICMS - - - - - - - - - Autorizados para download do XML do DF-e - Informar CNPJ ou CPF. Preencher os zeros não significativos. - - - - - - - CNPJ do autorizado - Informar zeros não significativos - - - - - CPF do autorizado - Informar zeros não significativos - - - - - - - - - - Versão do leiaute - Ex: "2.00" - - - - - - - - Identificador da tag a ser assinada - Informar a chave de acesso do CT-e e precedida do literal "CTe" - - - - - - - - - - - - - - - Tipo Pedido de Concessão de Autorização da CT-e - - - - - - - - - - Tipo Retorno do Pedido de Concessão de Autorização da CT-e - - - - - Identificação do Ambiente:1 - Produção; 2 - Homologação - - - - - Identificação da UF - - - - - Versão do Aplicativo que recebeu o Lote. - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - Dados do Recibo do Lote - - - - - - Número do Recibo - - - - - Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SS - - - - - Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos - - - - - - - - - - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE) - - - - - Nome do município - - - - - - - - - - - CEP - Informar zeros não significativos - - - - - - - - - - - Sigla da UF - - - - - Telefone - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE) - Informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - Informar os zeros não significativos - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Código do país - Utilizar a tabela do BACEN - - - - - - - - - - - Nome do país - - - - - - - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. - - - - - Nome do município, , informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Código do país - - - - - - - - - - - Nome do país - - - - - - - - - - - Telefone - - - - - - - Tipo Dados do Local de Origem ou Destino - - - - - Código do município (utilizar a tabela do IBGE) - - - - - Nome do município - - - - - - - - - - - Sigla da UF - - - - - - - Tipo Dados do Local de Retirada ou Entrega - - - - - - Número do CNPJ - - - - - Número do CPF - - - - - - Razão Social ou Nome - - - - - - - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE) - Informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - - Tipo Dados do Imposto - - - - - Prestação sujeito à tributação normal do ICMS - - - - - - classificação Tributária do Serviço - 00 - tributação normal ICMS - - - - - - - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - - Prestação sujeito à tributação com redução de BC do ICMS - - - - - - Classificação Tributária do serviço - 20 - tributação com BC reduzida do ICMS - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - - ICMS Isento, não Tributado ou diferido - - - - - - Classificação Tributária do Serviço - Preencher com: - 40 - ICMS isenção; - 41 - ICMS não tributada; - 51 - ICMS diferido - - - - - - - - - - - - - - - - Tributação pelo ICMS60 - ICMS cobrado por substituição tributária.Responsabilidade do recolhimento do ICMS atribuído ao tomador ou 3º por ST - - - - - - Classificação Tributária do Serviço - 60 - ICMS cobrado anteriormente por substituição tributária - - - - - - - - - - - Valor da BC do ICMS ST retido - - - - - Valor do ICMS ST retido - - - - - Alíquota do ICMS - - - - - Valor do Crédito outorgado/Presumido - - - - - - - - ICMS Outros - - - - - - Classificação Tributária do Serviço - 90 - Outros - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - Valor do Crédito Outorgado/Presumido - - - - - - - - ICMS devido à UF de origem da prestação, quando diferente da UF do emitente - - - - - - Classificação Tributária do Serviço - 90 - ICMS Outra UF - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS devido outra UF - - - - - - - - Simples Nacional - - - - - - Indica se o contribuinte é Simples Nacional 1=Sim - - - - - - - - - - - - - - - - Tipo Dados Unidade de Transporte - - - - - Tipo da Unidade de Transporte - 1 - Rodoviário Tração -2 - Rodoviário Reboque -3 - Navio -4 - Balsa -5 - Aeronave -6 - Vagão -7 - Outros - - - - - Identificação da Unidade de Transporte - Informar a identificação conforme o tipo de unidade de transporte. -Por exemplo: para rodoviário tração ou reboque deverá preencher com a placa do veículo. - - - - - - Lacres das Unidades de Transporte - - - - - - Número do lacre - - - - - - - - - - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - Quantidade rateada (Peso,Volume) - - - - - - - Tipo Dados Unidade de Carga - - - - - Tipo da Unidade de Carga - 1 - Container -2 - ULD -3 - Pallet -4 - Outros - - - - - Identificação da Unidade de Carga - Informar a identificação da unidade de carga, por exemplo: número do container. - - - - - Lacres das Unidades de Carga - - - - - - Número do lacre - - - - - - - - - - - - - - Quantidade rateada (Peso,Volume) - - - - - - - Tipo CFOP - - - - - - - - - Tipo Código da Lista de Serviços LC 116/2003 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Número do Container - - - - - - - - - - - Tipo Documento Associado - - - - - - - - - - - - - - - - - - - - - - Tipo Email - - - - - - - - - - - Tipo Finalidade da CT-e - - - - - - - - - - - - Tipo Identificador de controle do envio do lote. Número seqüencial auto-incremental, de controle correspondente ao identificador único do lote enviado. A responsabilidade de gerar e controlar esse número é do próprio contribuinte. - - - - - - - - - Tipo Modelo do Documento - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Modal transporte - - - - - - - - - - - - - - Tipo processo de emissão do CT-e - - - - - - - - - - - - Tipo hora - - - - - - - - - Tipo Versão do CT-e - 2.00 - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cteTiposBasico_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cteTiposBasico_v3.00.xsd deleted file mode 100755 index 8818962df..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cteTiposBasico_v3.00.xsd +++ /dev/null @@ -1,5061 +0,0 @@ - - - - - - - Tipo Protocolo de status resultado do processamento do CT-e OS (Modelo 67) - - - - - Dados do protocolo de status - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a NF-e - - - - - Chaves de acesso da CT-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, subsérie e número da CT-e e código numérico+DV. - - - - - Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de CT-e enviado. - - - - - Número do Protocolo de Status do CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. - - - - - Digest Value da CT-e processado. Utilizado para conferir a integridade do CT-e original. - - - - - Código do status do CT-e. - - - - - - - - Descrição literal do status do CT-e. - - - - - - - - - - - - - - - - - Tipo Retorno do Pedido de Autorização de CT-e OS (Modelo 67) - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Identificação da UF - - - - - Versão do Aplicativo que processou a CT-e - - - - - código do status do retorno da consulta. - - - - - Descrição literal do status do do retorno da consulta. - - - - - Reposta ao processamento do CT-e - - - - - - - - Tipo Conhecimento de Transporte Eletrônico (Modelo 57) - - - - - Informações do CT-e - - - - - - Identificação do CT-e - - - - - - Código da UF do emitente do CT-e. - Utilizar a Tabela do IBGE. - - - - - Código numérico que compõe a Chave de Acesso. - Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. - - - - - - - - - - - Código Fiscal de Operações e Prestações - - - - - Natureza da Operação - - - - - - - - - - - Modelo do documento fiscal - Utilizar o código 57 para identificação do CT-e, emitido em substituição aos modelos de conhecimentos em papel. - - - - - Série do CT-e - Preencher com "0" no caso de série única - - - - - - - - Número do CT-e - - - - - Data e hora de emissão do CT-e - Formato AAAA-MM-DDTHH:MM:DD TZD - - - - - - - - Formato de impressão do DACTE - Preencher com: 1 - Retrato; 2 - Paisagem. - - - - - - - - - - - - Forma de emissão do CT-e - Preencher com: -1 - Normal; - 4-EPEC pela SVC; 5 - Contingência FSDA; - 7 - Autorização pela SVC-RS; - 8 - Autorização pela SVC-SP - - - - - - - - - - - - - - - Digito Verificador da chave de acesso do CT-e - Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. - - - - - - - - - - - Tipo do Ambiente - Preencher com:1 - Produção; 2 - Homologação - - - - - Tipo do CT-e - Preencher com: - 0 - CT-e Normal; - 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; - 3 - CT-e Substituto - - - - - Identificador do processo de emissão do CT-e - Preencher com: - 0 - emissão de CT-e com aplicativo do contribuinte; - 3- emissão CT-e pelo contribuinte com aplicativo fornecido pelo Fisco. - - - - - Versão do processo de emissão - Iinformar a versão do aplicativo emissor de CT-e. - - - - - - - - - - - Indicador de CT-e Globalizado - Informar valor 1 quando for Globalizado e não informar a tag quando não tratar de CT-e Globalizado - - - - - - - - - - Código do Município de envio do CT-e (de onde o documento foi transmitido) - Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. - - - - - Nome do Município de envio do CT-e (de onde o documento foi transmitido) - Informar PAIS/Municipio para as operações com o exterior. - - - - - - - - - - - Sigla da UF de envio do CT-e (de onde o documento foi transmitido) - Informar 'EX' para operações com o exterior. - - - - - Modal - Preencher com:01-Rodoviário; -02-Aéreo;03-Aquaviário;04-Ferroviário;05-Dutoviário;06-Multimodal; - - - - - Tipo do Serviço - Preencher com: -0 - Normal;1 - Subcontratação; -2 - Redespacho;3 - Redespacho Intermediário; 4 - Serviço Vinculado a Multimodal - - - - - - - - - - - - - - - Código do Município de início da prestação - Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. - - - - - Nome do Município do início da prestação - Informar 'EXTERIOR' para operações com o exterior. - - - - - - - - - - - UF do início da prestação - Informar 'EX' para operações com o exterior. - - - - - Código do Município de término da prestação - Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. - - - - - Nome do Município do término da prestação - Informar 'EXTERIOR' para operações com o exterior. - - - - - - - - - - - UF do término da prestação - Informar 'EX' para operações com o exterior. - - - - - Indicador se o Recebedor retira no Aeroporto, Filial, Porto ou Estação de Destino? - Preencher com: 0 - sim; 1 - não - - - - - - - - - - - - Detalhes do retira - - - - - - - - - - - Indicador do papel do tomador na prestação do serviço: -1 – Contribuinte ICMS; -2 – Contribuinte isento de inscrição; -9 – Não Contribuinte - Aplica-se ao tomador que for indicado no toma3 ou toma4 - - - - - - - - - - - - - - Indicador do "papel" do tomador do serviço no CT-e - - - - - - Tomador do Serviço - Preencher com: - 0-Remetente; - 1-Expedidor; - 2-Recebedor; - 3-Destinatário - Serão utilizadas as informações contidas no respectivo grupo, conforme indicado pelo conteúdo deste campo - - - - - - - - - - - - - - - - - Indicador do "papel" do tomador do serviço no CT-e - - - - - - Tomador do Serviço - Preencher com: - 4 - Outros - Obs: Informar os dados cadastrais do tomador do serviço - - - - - - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. -Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - - Razão Social ou Nome - - - - - - - - - - - Nome Fantasia - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - - - Informar apenas -para tpEmis diferente de 1 - - - - Data e Hora da entrada em contingência - Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS - - - - - Justificativa da entrada em contingência - - - - - - - - - - - - - - - Dados complementares do CT-e para fins operacionais ou comerciais - - - - - - Característica adicional do transporte - Texto livre: -REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - - - - - - - - - - - Característica adicional do serviço - Texto livre: - ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc - - - - - - - - - - - Funcionário emissor do CTe - - - - - - - - - - - Previsão do fluxo da carga - Preenchimento obrigatório para o modal aéreo. - - - - - - Sigla ou código interno da Filial/Porto/Estação/ Aeroporto de Origem - Observações para o modal aéreo: - - Preenchimento obrigatório para o modal aéreo. - - O código de três letras IATA do aeroporto de partida deverá ser incluído como primeira anotação. Quando não for possível, utilizar a sigla OACI. - - - - - - - - - - - - - - Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Passagem - Observação para o modal aéreo: - - O código de três letras IATA, referente ao aeroporto de transferência, deverá ser incluído, quando for o caso. Quando não for possível, utilizar a sigla OACI. Qualquer solicitação de itinerário deverá ser incluída. - - - - - - - - - - - - - - Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Destino - Observações para o modal aéreo: - - Preenchimento obrigatório para o modal aéreo. - - Deverá ser incluído o código de três letras IATA do aeroporto de destino. Quando não for possível, utilizar a sigla OACI. - - - - - - - - - - - Código da Rota de Entrega - - - - - - - - - - - - - - Informações ref. a previsão de entrega - - - - - - - Entrega sem data definida - Esta opção é proibida para o modal aéreo. - - - - - - Tipo de data/período programado para entrega - 0- Sem data definida - - - - - - - - - - - - - - Entrega com data definida - - - - - - Tipo de data/período programado para entrega - Preencher com: - 1-Na data; - 2-Até a data; - 3-A partir da data - - - - - - - - - - - - - Data programada - Formato AAAA-MM-DD - - - - - - - - Entrega no período definido - - - - - - Tipo período - 4-no período - - - - - - - - - - - Data inicial - Formato AAAA-MM-DD - - - - - Data final - Formato AAAA-MM-DD - - - - - - - - - - Entrega sem hora definida - - - - - - Tipo de hora - 0- Sem hora definida - - - - - - - - - - - - - - Entrega com hora definida - - - - - - Tipo de hora - Preencher com: - 1--No horário; - 2-Até o horário; - 3-A partir do horário - - - - - - - - - - - - - Hora programada - Formato HH:MM:SS - - - - - - - - Entrega no intervalo de horário definido - - - - - - Tipo de hora - 4 - No intervalo de tempo - - - - - - - - - - - Hora inicial - Formato HH:MM:SS - - - - - Hora final - Formato HH:MM:SS - - - - - - - - - - - - Município de origem para efeito de cálculo do frete - - - - - - - - - - - Município de destino para efeito de cálculo do frete - - - - - - - - - - - Observações Gerais - - - - - - - - - - - Campo de uso livre do contribuinte - Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto - - - - - - Conteúdo do campo - - - - - - - - - - - - Identificação do campo - - - - - - - - - - - - - Campo de uso livre do contribuinte - Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto - - - - - - Conteúdo do campo - - - - - - - - - - - - Identificação do campo - - - - - - - - - - - - - - - - Identificação do Emitente do CT-e - - - - - - CNPJ do emitente - Informar zeros não significativos - - - - - Inscrição Estadual do Emitente - - - - - - - - Inscrição Estadual do Substituto Tributário - - - - - - - - Razão social ou Nome do emitente - - - - - - - - - - - Nome fantasia - - - - - - - - - - - Endereço do emitente - - - - - - - - Informações do Remetente das mercadorias transportadas pelo CT-e - Poderá não ser informado para os CT-e de redespacho intermediário e serviço vinculado a multimodal. Nos demais casos deverá sempre ser informado. - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar a tag. - - - - - - - - Razão social ou nome do remetente - - - - - - - - - - - Nome fantasia - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - - - - Informações do Expedidor da Carga - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do expedidor ou ISENTO se expedidor é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o expedidor não seja contribuinte do ICMS não informar a tag. - - - - - - - - Razão Social ou Nome - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - Informações do Recebedor da Carga - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do recebedor ou ISENTO se recebedor é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o recebedor não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Razão Social ou Nome - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - Informações do Destinatário do CT-e - Só pode ser omitido em caso de redespacho intermediário - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do destinatário ou ISENTO se destinatário é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o destinatário não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Razão Social ou Nome do destinatário - - - - - - - - - - - Telefone - - - - - Inscrição na SUFRAMA - (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) - - - - - - - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - Valores da Prestação de Serviço - - - - - - Valor Total da Prestação do Serviço - Pode conter zeros quando o CT-e for de complemento de ICMS - - - - - Valor a Receber - - - - - Componentes do Valor da Prestação - - - - - - Nome do componente - Exxemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc - - - - - - - - - - - Valor do componente - - - - - - - - - - - Informações relativas aos Impostos - - - - - - Informações relativas ao ICMS - - - - - - Valor Total dos Tributos - - - - - Informações adicionais de interesse do Fisco - Norma referenciada, informações complementares, etc - - - - - - - - - - - Informações do ICMS de partilha com a UF de término do serviço de transporte na operação interestadual - Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS - - - - - - Valor da BC do ICMS na UF de término da prestação do serviço de transporte - - - - - Percentual do ICMS relativo ao Fundo de Combate à pobreza (FCP) na UF de término da prestação do serviço de transporte - Alíquota adotada nas operações internas na UF do destinatário - - - - - Alíquota interna da UF de término da prestação do serviço de transporte - Alíquota adotada nas operações internas na UF do destinatário - - - - - Alíquota interestadual das UF envolvidas - Alíquota interestadual das UF envolvidas - - - - - - Percentual provisório de partilha entre os estados - Percentual de partilha para a UF do destinatário: -- 40% em 2016; -- 60% em 2017; -- 80% em 2018; -- 100% a partir de 2019. - - - - - Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação - - - - - Valor do ICMS de partilha para a UF de término da prestação do serviço de transporte - - - - - Valor do ICMS de partilha para a UF de início da prestação do serviço de transporte - - - - - - - - - - - - Grupo de informações do CT-e Normal e Substituto - - - - - - Informações da Carga do CT-e - - - - - - Valor total da carga - Dever ser informado para todos os modais, com exceção para o Dutoviário. - - - - - Produto predominante - Informar a descrição do produto predominante - - - - - - - - - - - Outras características da carga - "FRIA", "GRANEL", "REFRIGERADA", "Medidas: 12X12X12" - - - - - - - - - - - Informações de quantidades da Carga do CT-e - Para o Aéreo é obrigatório o preenchimento desse campo da seguinte forma. -1 - Peso Bruto, sempre em quilogramas (obrigatório); -2 - Peso Cubado; sempre em quilogramas; -3 - Quantidade de volumes, sempre em unidades (obrigatório); -4 - Cubagem, sempre em metros cúbicos (obrigatório apenas quando for impossível preencher as dimensões da(s) embalagem(ens) na tag xDime do leiaute do Aéreo). - - - - - - Código da Unidade de Medida - Preencher com: - 00-M3; - 01-KG; - 02-TON; - 03-UNIDADE; - 04-LITROS; - 05-MMBTU - - - - - - - - - - - - - - - - Tipo da Medida - Exemplos: -PESO BRUTO, PESO DECLARADO, PESO CUBADO, PESO AFORADO, PESO AFERIDO, PESO BASE DE CÁLCULO, LITRAGEM, CAIXAS e etc - - - - - - - - - - - Quantidade - - - - - - - - Valor da Carga para efeito de averbação - Normalmente igual ao valor declarado da mercadoria, diferente por exemplo, quando a mercadoria transportada é isenta de tributos nacionais para exportação, onde é preciso averbar um valor maior, pois no caso de indenização, o valor a ser pago será maior - - - - - - - - Informações dos documentos transportados pelo CT-e -Opcional para Redespacho Intermediario e Serviço vinculado a multimodal. - Poderá não ser informado para os CT-e de redespacho intermediário. Nos demais casos deverá sempre ser informado. - - - - - - - Informações das NF - Este grupo deve ser informado quando o documento originário for NF - - - - - - Número do Romaneio da NF - - - - - - - - - - - Número do Pedido da NF - - - - - - - - - - - Modelo da Nota Fiscal - Preencher com: -01 - NF Modelo 01/1A e Avulsa; -04 - NF de Produtor - - - - - Série - - - - - - - - - - - Número - - - - - - - - - - - Data de Emissão - Formato AAAA-MM-DD - - - - - Valor da Base de Cálculo do ICMS - - - - - Valor Total do ICMS - - - - - Valor da Base de Cálculo do ICMS ST - - - - - Valor Total do ICMS ST - - - - - Valor Total dos Produtos - - - - - Valor Total da NF - - - - - CFOP Predominante - CFOP da NF ou, na existência de mais de um, predominância pelo critério de valor econômico. - - - - - Peso total em Kg - - - - - PIN SUFRAMA - PIN atribuído pela SUFRAMA para a operação. - - - - - - - - - - - - - Data prevista de entrega - Formato AAAA-MM-DD - - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - Informações das Unidades de Transporte (Carreta/Reboque/Vagão) - Deve ser preenchido com as informações das unidades de transporte utilizadas. - - - - - - - - - Informações das NF-e - - - - - - Chave de acesso da NF-e - - - - - PIN SUFRAMA - PIN atribuído pela SUFRAMA para a operação. - - - - - - - - - - - - - Data prevista de entrega - Formato AAAA-MM-DD - - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - Informações das Unidades de Transporte (Carreta/Reboque/Vagão) - Deve ser preenchido com as informações das unidades de transporte utilizadas. - - - - - - - - - Informações dos demais documentos - - - - - - Tipo de documento originário - Preencher com: - 00 - Declaração; - 10 - Dutoviário; - - -59 - CF-e SAT; - -65 - NFC-e; - 99 - Outros - - - - - - - - - - - - - - - Descrição do documento - - - - - - - - - - - Número - - - - - - - - - - - Data de Emissão - Formato AAAA-MM-DD - - - - - Valor do documento - - - - - Data prevista de entrega - Formato AAAA-MM-DD - - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - Informações das Unidades de Transporte (Carreta/Reboque/Vagão) - Deve ser preenchido com as informações das unidades de transporte utilizadas. - - - - - - - - - - - - - Documentos de Transporte Anterior - - - - - - Emissor do documento anterior - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - - Inscrição Estadual - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - Razão Social ou Nome do expedidor - - - - - - - - - - - Informações de identificação dos documentos de Transporte Anterior - - - - - - Documentos de transporte anterior em papel - - - - - - Tipo do Documento de Transporte Anterior - Preencher com: -07-ATRE; -08-DTA (Despacho de Transito Aduaneiro); -09-Conhecimento Aéreo Internacional; -10 – Conhecimento - Carta de Porte Internacional; -11 – Conhecimento Avulso; -12-TIF (Transporte Internacional Ferroviário); 13-BL (Bill of Lading) - - - - - - - - Série do Documento Fiscal - - - - - - - - - - - Série do Documento Fiscal - - - - - - - - - - - Número do Documento Fiscal - - - - - - - - - - - Data de emissão (AAAA-MM-DD) - - - - - - - - Documentos de transporte anterior eletrônicos - - - - - - Chave de acesso do CT-e - - - - - - - - - - - - - - - - - Informações do modal - - - - - - XML do modal -Insira neste local o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). - O elemento do tipo -any- permite estender o documento XML com elementos não especificados pelo schema. - Insira neste local - any- o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). A especificação do schema XML para cada modal pode ser encontrada nos arquivos que acompanham este pacote de liberação: - Rodoviário - ver arquivo CTeModalRodoviario_v9.99 - Aéreo - ver arquivo CTeModalAereo_v9.99 - Aquaviário - arquivo CTeModalAquaviario_v9.99 - Ferroviário - arquivo CTeModalFerroviario_v9.99 - Dutoviário - arquivo CTeModalDutoviario_v9.99 - -Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.04 será denominado "CTeModalRodoviario_v1.04". - - - - - - Versão do leiaute específico para o Modal - - - - - - - - - - - - - informações dos veículos transportados - - - - - - Chassi do veículo - - - - - - - - - - - - Cor do veículo - Código de cada montadora - - - - - - - - - - - Descrição da cor - - - - - - - - - - - Código Marca Modelo - Utilizar tabela RENAVAM - - - - - - - - - - - Valor Unitário do Veículo - - - - - Frete Unitário - - - - - - - - Dados da cobrança do CT-e - - - - - - Dados da fatura - - - - - - Número da fatura - - - - - - - - - - - Valor original da fatura - - - - - Valor do desconto da fatura - - - - - Valor líquido da fatura - - - - - - - - Dados das duplicatas - - - - - - Número da duplicata - - - - - - - - - - - Data de vencimento da duplicata (AAAA-MM-DD) - - - - - Valor da duplicata - - - - - - - - - - - Informações do CT-e de substituição - - - - - - Chave de acesso do CT-e a ser substituído (original) - - - - - - - - - - - Chave de acesso do CT-e de Anulação - - - - - - - - Tomador é contribuinte do ICMS, mas não é emitente de documento fiscal eletrônico - - - - - - Chave de acesso da NF-e emitida pelo Tomador - - - - - Informação da NF ou CT emitido pelo Tomador - - - - - - - CNPJ do Emitente - Informar o CNPJ do emitente do Documento Fiscal - - - - - Número do CPF - Informar o CPF do emitente do documento fiscal - - - - - - Modelo do Documento Fiscal - - - - - Serie do documento fiscal - - - - - Subserie do documento fiscal - - - - - Número do documento fiscal - - - - - - - - - - - Valor do documento fiscal. - - - - - Data de emissão do documento fiscal. - - - - - - - - Chave de acesso do CT-e emitido pelo Tomador - - - - - - - - - Indicador de CT-e Alteração de Tomador - Tag com efeito e utilização aguardando legislação, não utilizar antes de NT específica tratar desse procedimento - - - - - - - - - - - - - Informações do CT-e Globalizado - - - - - - Preencher com informações adicionais, legislação do regime especial, etc - - - - - - - - - - - - - - Informações do Serviço Vinculado a Multimodal - - - - - - informações do CT-e multimodal vinculado - - - - - - Chave de acesso do CT-e Multimodal - - - - - - - - - - - - - - Detalhamento do CT-e complementado - - - - - - Chave do CT-e complementado - - - - - - - - Detalhamento do CT-e do tipo Anulação - - - - - - Chave de acesso do CT-e original a ser anulado e substituído - - - - - - - - - - Data de emissão da declaração do tomador não contribuinte do ICMS - - - - - - - - - Autorizados para download do XML do DF-e - Informar CNPJ ou CPF. Preencher os zeros não significativos. - - - - - - - CNPJ do autorizado - Informar zeros não significativos - - - - - CPF do autorizado - Informar zeros não significativos - - - - - - - - - - Versão do leiaute - Ex: "3.00" - - - - - - - - Identificador da tag a ser assinada - Informar a chave de acesso do CT-e e precedida do literal "CTe" - - - - - - - - - - - - - - - Tipo Conhecimento de Transporte Eletrônico Outros Serviços (Modelo 67) - - - - - Informações do CT-e Outros Serviços - - - - - - Identificação do CT-e Outros Serviços - - - - - - Código da UF do emitente do CT-e. - Utilizar a Tabela do IBGE. - - - - - Código numérico que compõe a Chave de Acesso. - Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. - - - - - - - - - - - Código Fiscal de Operações e Prestações - - - - - Natureza da Operação - - - - - - - - - - - Modelo do documento fiscal - Utilizar o código 67 para identificação do CT-e Outros Serviços, emitido em substituição a Nota Fiscal Modelo 7 para transporte de pessoas, valores e excesso de bagagem. - - - - - Série do CT-e OS - Preencher com "0" no caso de série única - - - - - - - - Número do CT-e OS - - - - - Data e hora de emissão do CT-e OS - Formato AAAA-MM-DDTHH:MM:DD TZD - - - - - - - - Formato de impressão do DACTE OS - Preencher com: 1 - Retrato; 2 - Paisagem. - - - - - - - - - - - - Forma de emissão do CT-e - Preencher com: -1 - Normal; -5 - Contingência FSDA; -7 - Autorização pela SVC-RS; - 8 - Autorização pela SVC-SP - - - - - - - - - - - - - - Digito Verificador da chave de acesso do CT-e - Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. - - - - - - - - - - - Tipo do Ambiente - Preencher com:1 - Produção; 2 - Homologação - - - - - Tipo do CT-e OS - Preencher com: - 0 - CT-e Normal; 1 - CT-e Complementar; 2 - Anulação; 3 - Substituição - - - - - Identificador do processo de emissão do CT-e OS - Preencher com: - 0 - emissão de CT-e com aplicativo do contribuinte; - 3- emissão CT-e pelo contribuinte com aplicativo fornecido pelo Fisco. - - - - - Versão do processo de emissão - Iinformar a versão do aplicativo emissor de CT-e. - - - - - - - - - - - Código do Município de envio do CT-e (de onde o documento foi transmitido) - Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. - - - - - Nome do Município de envio do CT-e (de onde o documento foi transmitido) - Informar PAIS/Municipio para as operações com o exterior. - - - - - - - - - - - Sigla da UF de envio do CT-e (de onde o documento foi transmitido) - Informar 'EX' para operações com o exterior. - - - - - Modal do CT-e OS - Preencher com:01-Rodoviário - - - - - Tipo do Serviço - Preencher com: -6 - Transporte de Pessoas;7 - Transporte de Valores;8 - Excesso de Bagagem - - - - - - - - - - - - - Indicador da IE do tomador: -1 – Contribuinte ICMS; -2 – Contribuinte isento de inscrição; -9 – Não Contribuinte - Aplica-se ao tomador que for indicado no toma3 ou toma4 - - - - - - - - - - - - - Código do Município de início da prestação - Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. - - - - - Nome do Município do início da prestação - Informar 'EXTERIOR' para operações com o exterior. - - - - - - - - - - - UF do início da prestação - Informar 'EX' para operações com o exterior. - - - - - Código do Município de término da prestação - Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. - - - - - Nome do Município do término da prestação - Informar 'EXTERIOR' para operações com o exterior. - - - - - - - - - - - UF do término da prestação - Informar 'EX' para operações com o exterior. - - - - - Informações do Percurso do CT-e Outros Serviços - - - - - - Sigla das Unidades da Federação do percurso do veículo. - Não é necessário repetir as UF de Início e Fim - - - - - - - - Informar apenas -para tpEmis diferente de 1 - - - - Data e Hora da entrada em contingência - Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS - - - - - Justificativa da entrada em contingência - - - - - - - - - - - - - - - Dados complementares do CT-e para fins operacionais ou comerciais - - - - - - Característica adicional do transporte - Texto livre: -REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - - - - - - - - - - - Característica adicional do serviço - Texto livre: - ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc - - - - - - - - - - - Funcionário emissor do CTe - - - - - - - - - - - Observações Gerais - - - - - - - - - - - Campo de uso livre do contribuinte - Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto - - - - - - Conteúdo do campo - - - - - - - - - - - - Identificação do campo - - - - - - - - - - - - - Campo de uso livre do contribuinte - Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto - - - - - - Conteúdo do campo - - - - - - - - - - - - Identificação do campo - - - - - - - - - - - - - - - - Identificação do Emitente do CT-e OS - - - - - - CNPJ do emitente - Informar zeros não significativos - - - - - Inscrição Estadual do Emitente - - - - - - - - Inscrição Estadual do Substituto Tributário - - - - - - - - Razão social ou Nome do emitente - - - - - - - - - - - Nome fantasia - - - - - - - - - - - Endereço do emitente - - - - - - - - Informações do Tomador/Usuário do Serviço - Opcional para Excesso de Bagagem - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Razão social ou nome do tomador - - - - - - - - - - - Nome fantasia - - - - - - - - - - - Telefone - - - - - Dados do endereço - - - - - Endereço de email - - - - - - - - - - - Valores da Prestação de Serviço - - - - - - Valor Total da Prestação do Serviço - Pode conter zeros quando o CT-e for de complemento de ICMS - - - - - Valor a Receber - - - - - Componentes do Valor da Prestação - - - - - - Nome do componente - Exxemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc - - - - - - - - - - - Valor do componente - - - - - - - - - - - Informações relativas aos Impostos - - - - - - Informações relativas ao ICMS - - - - - - Valor Total dos Tributos - - - - - Informações adicionais de interesse do Fisco - Norma referenciada, informações complementares, etc - - - - - - - - - - - Informações do ICMS de partilha com a UF de término do serviço de transporte na operação interestadual - Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS - - - - - - Valor da BC do ICMS na UF de término da prestação do serviço de transporte - - - - - Percentual do ICMS relativo ao Fundo de Combate à pobreza (FCP) na UF de término da prestação do serviço de transporte - Alíquota adotada nas operações internas na UF do destinatário - - - - - Alíquota interna da UF de término da prestação do serviço de transporte - Alíquota adotada nas operações internas na UF do destinatário - - - - - Alíquota interestadual das UF envolvidas - Alíquota interestadual das UF envolvidas - - - - - - Percentual provisório de partilha entre os estados - Percentual de partilha para a UF do destinatário: -- 40% em 2016; -- 60% em 2017; -- 80% em 2018; -- 100% a partir de 2019. - - - - - Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação - - - - - Valor do ICMS de partilha para a UF de término da prestação do serviço de transporte - - - - - Valor do ICMS de partilha para a UF de início da prestação do serviço de transporte - - - - - - - - Informações dos tributos federais - Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS - - - - - - Valor do PIS - - - - - Valor COFINS - - - - - Valor de Imposto de Renda - - - - - Valor do INSS - - - - - Valor do CSLL - - - - - - - - - - - - Grupo de informações do CT-e OS Normal - - - - - - Informações da Prestação do Serviço - - - - - - Descrição do Serviço prestado - - - - - - - - - - - Informações de quantidades da Carga do CT-e - Para Transporte de Pessoas indicar núimero de passageiros, para excesso de bagagem e transporte de valores indicar Nro de Volumes/Malotes - - - - - - Quantidade - - - - - - - - - - - Informações dos documentos referenciados - - - - - - Número - - - - - - - - - - - Série - - - - - - - - - - - Subsérie - - - - - - - - - - - Data de Emissão - Formato AAAA-MM-DD - - - - - Valor Transportado - - - - - - - - Informações de Seguro da Carga - - - - - - Responsável pelo seguro - Preencher com: - 4 - Emitente do CT-e; -5 - Tomador de Serviço. - - - - - - - - - - - - - - - Nome da Seguradora - - - - - - - - - - - Número da Apólice - Obrigatório pela lei 11.442/07 (RCTRC) - - - - - - - - - - - - - - Informações do modal -Obrigatório para Pessoas e Bagagem - - - - - - XML do modal -Insira neste local o XML específico do modal - O elemento do tipo -any- permite estender o documento XML com elementos não especificados pelo schema. - Insira neste local - any- o XML específico do modal (rodoviário). A especificação do schema XML para cada modal pode ser encontrada nos arquivos que acompanham este pacote de liberação: - Rodoviário - ver arquivo CTeModalRodoviarioOS_v9.99 - -Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, o arquivo para o schema do modal Rodoviário na versão 3.00 será denominado "CTeModalRodoviarioOS_v3.00". - - - - - - Versão do leiaute específico para o Modal - - - - - - - - - - - - - Informações do CT-e de substituição - - - - - - Chave de acesso do CT-e a ser substituído (original) - - - - - - - - - - - Chave de acesso do CT-e de Anulação - - - - - - - - Tomador é contribuinte do ICMS, mas não é emitente de documento fiscal eletrônico - - - - - - Chave de acesso da NF-e emitida pelo Tomador - - - - - Informação da NF ou CT emitido pelo Tomador - - - - - - - CNPJ do Emitente - Informar o CNPJ do emitente do Documento Fiscal - - - - - Número do CPF - Informar o CPF do emitente do documento fiscal - - - - - - Modelo do Documento Fiscal - - - - - Serie do documento fiscal - - - - - Subserie do documento fiscal - - - - - Número do documento fiscal - - - - - - - - - - - Valor do documento fiscal. - - - - - Data de emissão do documento fiscal. - - - - - - - - Chave de acesso do CT-e emitido pelo Tomador - - - - - - - - - - - - - - - Detalhamento do CT-e complementado - - - - - - Chave do CT-e complementado - - - - - - - - Detalhamento do CT-e do tipo Anulação - - - - - - Chave de acesso do CT-e original a ser anulado e substituído - - - - - - - - - - Data de emissão da declaração do tomador não contribuinte do ICMS - - - - - - - - - Autorizados para download do XML do DF-e - Informar CNPJ ou CPF. Preencher os zeros não significativos. - - - - - - - CNPJ do autorizado - Informar zeros não significativos - - - - - CPF do autorizado - Informar zeros não significativos - - - - - - - - - - Versão do leiaute - Ex: "3.00" - - - - - - - - Identificador da tag a ser assinada - Informar a chave de acesso do CT-e e precedida do literal "CTe" - - - - - - - - - - - - - - Versão do leiaute - - - - - - - - - Tipo Pedido de Concessão de Autorização da CT-e - - - - - - - - - - Tipo Retorno do Pedido de Concessão de Autorização da CT-e - - - - - Identificação do Ambiente:1 - Produção; 2 - Homologação - - - - - Identificação da UF - - - - - Versão do Aplicativo que recebeu o Lote. - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - Dados do Recibo do Lote - - - - - - Número do Recibo - - - - - Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SS TZD - - - - - Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos - - - - - - - - - - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE) - - - - - Nome do município - - - - - - - - - - - CEP - Informar zeros não significativos - - - - - - - - - - - Sigla da UF - - - - - Telefone - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE) - Informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - Informar os zeros não significativos - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Código do país - Utilizar a tabela do BACEN - - - - - - - - - - - Nome do país - - - - - - - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. - - - - - Nome do município, , informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - CEP - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Código do país - - - - - - - - - - - Nome do país - - - - - - - - - - - Telefone - - - - - - - Tipo Dados do Local de Origem ou Destino - - - - - Código do município (utilizar a tabela do IBGE) - - - - - Nome do município - - - - - - - - - - - Sigla da UF - - - - - - - Tipo Dados do Local de Retirada ou Entrega - - - - - - Número do CNPJ - - - - - Número do CPF - - - - - - Razão Social ou Nome - - - - - - - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE) - Informar 9999999 para operações com o exterior. - - - - - Nome do município - Informar EXTERIOR para operações com o exterior. - - - - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - - - Tipo Dados do Imposto CT-e - - - - - Prestação sujeito à tributação normal do ICMS - - - - - - classificação Tributária do Serviço - 00 - tributação normal ICMS - - - - - - - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - - Prestação sujeito à tributação com redução de BC do ICMS - - - - - - Classificação Tributária do serviço - 20 - tributação com BC reduzida do ICMS - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - - ICMS Isento, não Tributado ou diferido - - - - - - Classificação Tributária do Serviço - Preencher com: - 40 - ICMS isenção; - 41 - ICMS não tributada; - 51 - ICMS diferido - - - - - - - - - - - - - - - - Tributação pelo ICMS60 - ICMS cobrado por substituição tributária.Responsabilidade do recolhimento do ICMS atribuído ao tomador ou 3º por ST - - - - - - Classificação Tributária do Serviço - 60 - ICMS cobrado por substituição tributária - - - - - - - - - - - Valor da BC do ICMS ST retido - Valor do frete sobre o qual será calculado o ICMS a ser substituído na Prestação. - - - - - Valor do ICMS ST retido - Resultado da multiplicação do “vBCSTRet” x “pICMSSTRet” – que será valor do ICMS a ser retido pelo Substituto. Podendo o valor do ICMS a ser retido efetivamente, sofrer ajustes conforme a opção tributaria do transportador substituído. - - - - - Alíquota do ICMS - Percentual de Alíquota incidente na prestação de serviço de transporte. - - - - - Valor do Crédito outorgado/Presumido - Preencher somente quando o transportador substituído, for optante pelo crédito outorgado previsto no Convênio 106/96 e corresponde ao percentual de 20% do valor do ICMS ST retido. - - - - - - - - ICMS Outros - - - - - - Classificação Tributária do Serviço - 90 - ICMS outros - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - Valor do Crédito Outorgado/Presumido - - - - - - - - ICMS devido à UF de origem da prestação, quando diferente da UF do emitente - - - - - - Classificação Tributária do Serviço - 90 - ICMS Outra UF - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS devido outra UF - - - - - - - - Simples Nacional - - - - - - Classificação Tributária do Serviço - 90 - ICMS Simples Nacional - - - - - - - - - - - Indica se o contribuinte é Simples Nacional 1=Sim - - - - - - - - - - - - - - - - Tipo Dados do Imposto para CT-e OS - - - - - Prestação sujeito à tributação normal do ICMS - - - - - - classificação Tributária do Serviço - 00 - tributação normal ICMS - - - - - - - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - - ICMS Isento, não Tributado ou diferido - - - - - - Classificação Tributária do Serviço - Preencher com: - 40 - ICMS isenção; - 41 - ICMS não tributada; - 51 - ICMS diferido - - - - - - - - - - - - - - - - ICMS Outros - - - - - - Classificação Tributária do Serviço - 90 - Outros - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - Valor do Crédito Outorgado/Presumido - - - - - - - - ICMS devido à UF de origem da prestação, quando diferente da UF do emitente - - - - - - Classificação Tributária do Serviço - 90 - ICMS Outra UF - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS devido outra UF - - - - - - - - Simples Nacional - - - - - - Classificação Tributária do Serviço - 90 - ICMS Simples Nacional - - - - - - - - - - - Indica se o contribuinte é Simples Nacional 1=Sim - - - - - - - - - - - - - - - - Tipo Dados Unidade de Transporte - - - - - Tipo da Unidade de Transporte - 1 - Rodoviário Tração -2 - Rodoviário Reboque -3 - Navio -4 - Balsa -5 - Aeronave -6 - Vagão -7 - Outros - - - - - Identificação da Unidade de Transporte - Informar a identificação conforme o tipo de unidade de transporte. -Por exemplo: para rodoviário tração ou reboque deverá preencher com a placa do veículo. - - - - - - Lacres das Unidades de Transporte - - - - - - Número do lacre - - - - - - - - - - - - - - Informações das Unidades de Carga (Containeres/ULD/Outros) - Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. - - - - - Quantidade rateada (Peso,Volume) - - - - - - - Tipo Dados Unidade de Carga - - - - - Tipo da Unidade de Carga - 1 - Container -2 - ULD -3 - Pallet -4 - Outros - - - - - Identificação da Unidade de Carga - Informar a identificação da unidade de carga, por exemplo: número do container. - - - - - Lacres das Unidades de Carga - - - - - - Número do lacre - - - - - - - - - - - - - - Quantidade rateada (Peso,Volume) - - - - - - - Tipo CFOP - - - - - - - - - Tipo Código da Lista de Serviços LC 116/2003 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Número do Container - - - - - - - - - - - Tipo Documento Associado - - - - - - - - - - - - - - - Tipo Email - - - - - - - - - - - Tipo Finalidade da CT-e - - - - - - - - - - - - Tipo Finalidade da CT-e Outros Serviços - - - - - - - - - - Tipo Identificador de controle do envio do lote. Número seqüencial auto-incremental, de controle correspondente ao identificador único do lote enviado. A responsabilidade de gerar e controlar esse número é do próprio contribuinte. - - - - - - - - - Tipo Modelo do Documento - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Modal transporte Outros Serviços - - - - - - - - - - - - Tipo Modal transporte - - - - - - - - - - - - - - Tipo RNTRC - Registro Nacional Transportadores Rodoviários de Carga - - - - - - - - - Tipo Placa - - - - - - - - - Tipo CIOT - Código Identificador da Operação de Transporte - - - - - - - - - Tipo processo de emissão do CT-e - - - - - - - - - - Tipo hora - - - - - - - - - Tipo Versão do CT-e - 3.00 - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cte_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cte_v2.00.xsd deleted file mode 100755 index fc29d8818..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cte_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Conhecimento de Transporte Eletrônico - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/cte_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/cte_v3.00.xsd deleted file mode 100755 index efe9b998f..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/cte_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Conhecimento de Transporte Eletrônico - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/enviCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/enviCTe_v2.00.xsd deleted file mode 100755 index 289688fd9..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/enviCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Envio de Lote CT-e para concessão de autorização - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/enviCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/enviCTe_v3.00.xsd deleted file mode 100755 index 0b5b36c51..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/enviCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Envio de Lote CT-e para concessão de autorização - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evCCeCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evCCeCTe_v2.00.xsd deleted file mode 100755 index 2a8689560..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evCCeCTe_v2.00.xsd +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - Schema XML de validação do evento carta de correção -110110 - - - - - - Descrição do Evento - “Carta de Correção” - - - - - - - - - - - - Grupo de Informações de Correção - - - - - - Indicar o grupo de informações que pertence o campoAlterado. Ex: ide - - - - - - - - - - - - Nome do campo modificado do CT-e Original. - - - - - - - - - - - - Valor correspondente à alteração. - - - - - - - - - - - - Preencher com o indice do item alterado caso a alteração ocorra em uma lista. -OBS: O indice inicia sempre em 1 - - - - - - - - - - - - - - Condições de uso da Carta de Correção, - informar a literal :Condições de uso da Carta de Correção, informar a literal: -“A Carta de Correção é disciplinada pelo Art. 58-B do CONVÊNIO/SINIEF 06/89: Fica permitida a utilização de carta de correção, para regularização de erro ocorrido na emissão de documentos fiscais relativos à prestação de serviço de transporte, desde que o erro não esteja relacionado com: I - as variáveis que determinam o valor do imposto tais como: base de cálculo, alíquota, diferença de preço, quantidade, valor da prestação;II - a correção de dados cadastrais que implique mudança do emitente, tomador, remetente ou do destinatário;III - a data de emissão ou de saída.” (texto com acentuação) ou “A Carta de Correcao e disciplinada pelo Art. 58-B do CONVENIO/SINIEF 06/89: Fica permitida a utilizacao de carta de correcao, para regularizacao de erro ocorrido na emissao de documentos fiscais relativos a prestacao de servico de transporte, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da prestacao;II - a correcao de dados cadastrais que implique mudança do emitente, tomador, remetente ou do destinatario;III - a data de emissao ou de saida.” (texto sem acentuação) - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evCCeCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evCCeCTe_v3.00.xsd deleted file mode 100755 index 39479a1bb..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evCCeCTe_v3.00.xsd +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - Schema XML de validação do evento carta de correção -110110 - - - - - - Descrição do Evento - “Carta de Correção” - - - - - - - - - - - - Grupo de Informações de Correção - - - - - - Indicar o grupo de informações que pertence o campoAlterado. Ex: ide - - - - - - - - - - - - Nome do campo modificado do CT-e Original. - - - - - - - - - - - - Valor correspondente à alteração. - - - - - - - - - - - - Preencher com o indice do item alterado caso a alteração ocorra em uma lista. -OBS: O indice inicia sempre em 1 - - - - - - - - - - - - - - Condições de uso da Carta de Correção, - informar a literal :Condições de uso da Carta de Correção, informar a literal: -“A Carta de Correção é disciplinada pelo Art. 58-B do CONVÊNIO/SINIEF 06/89: Fica permitida a utilização de carta de correção, para regularização de erro ocorrido na emissão de documentos fiscais relativos à prestação de serviço de transporte, desde que o erro não esteja relacionado com: I - as variáveis que determinam o valor do imposto tais como: base de cálculo, alíquota, diferença de preço, quantidade, valor da prestação;II - a correção de dados cadastrais que implique mudança do emitente, tomador, remetente ou do destinatário;III - a data de emissão ou de saída.” (texto com acentuação) ou “A Carta de Correcao e disciplinada pelo Art. 58-B do CONVENIO/SINIEF 06/89: Fica permitida a utilizacao de carta de correcao, para regularizacao de erro ocorrido na emissao de documentos fiscais relativos a prestacao de servico de transporte, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da prestacao;II - a correcao de dados cadastrais que implique mudança do emitente, tomador, remetente ou do destinatario;III - a data de emissao ou de saida.” (texto sem acentuação) - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evCancCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evCancCTe_v2.00.xsd deleted file mode 100755 index dec691028..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evCancCTe_v2.00.xsd +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - Schema XML de validação do evento do cancelamento -110111 - - - - - - Descrição do Evento - “Cancelamento” - - - - - - - - - - - Número do Protocolo de Status do CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. - - - - - Justificativa do Cancelamento - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evCancCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evCancCTe_v3.00.xsd deleted file mode 100755 index 005328811..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evCancCTe_v3.00.xsd +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - Schema XML de validação do evento do cancelamento -110111 - - - - - - Descrição do Evento - “Cancelamento” - - - - - - - - - - - Número do Protocolo de Status do CT-e. 1 posição tipo de autorizador (1 – Secretaria de Fazenda Estadual, 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP ); 2 posições ano; 10 seqüencial no ano. - - - - - Justificativa do Cancelamento - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evEPECCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evEPECCTe_v2.00.xsd deleted file mode 100755 index e87601138..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evEPECCTe_v2.00.xsd +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Schema XML de validação do evento de emissão prévia de emissão em contingência -110113 - - - - - - Descrição do Evento - “EPEC” - - - - - - - - - - - Justificativa da Entrada em Contingencia - - - - - Valor do ICMS - - - - - Valor Total da Prestação do Serviço - Pode conter zeros quando o CT-e for de complemento de ICMS - - - - - Valor total da carga - Dever ser informado para todos os modais, com exceção para o Dutoviário. - - - - - Indicador do "papel" do tomador do serviço no CT-e - - - - - - Tomador do Serviço - Preencher com: -0-Remetente; -1-Expedidor;2-Recebedor;3-Destinatário -;4 - Outros - - - - - - - - - - - - - - - UF do tomador do serviço - Informar 'EX' para operações com o exterior. - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. -Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Modal - Preencher com: - -01-Rodoviário; - -02-Aéreo; -03-Aquaviário; - -04-Ferroviário; - -05-Dutoviário; -06-Multimodal; - - - - - UF do início da prestação - Informar 'EX' para operações com o exterior. - - - - - UF do término da prestação - Informar 'EX' para operações com o exterior. - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evEPECCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evEPECCTe_v3.00.xsd deleted file mode 100755 index e5f633994..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evEPECCTe_v3.00.xsd +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Schema XML de validação do evento de emissão prévia de emissão em contingência -110113 - - - - - - Descrição do Evento - “EPEC” - - - - - - - - - - - Justificativa da Entrada em Contingencia - - - - - Valor do ICMS - - - - - Valor Total da Prestação do Serviço - Pode conter zeros quando o CT-e for de complemento de ICMS - - - - - Valor total da carga - Dever ser informado para todos os modais, com exceção para o Dutoviário. - - - - - Indicador do "papel" do tomador do serviço no CT-e - - - - - - Tomador do Serviço - Preencher com: -0-Remetente; -1-Expedidor;2-Recebedor;3-Destinatário -;4 - Outros - - - - - - - - - - - - - - - UF do tomador do serviço - Informar 'EX' para operações com o exterior. - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. -Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Modal - Preencher com: - -01-Rodoviário; - -02-Aéreo; -03-Aquaviário; - -04-Ferroviário; - -05-Dutoviário; -06-Multimodal; - - - - - UF do início da prestação - Informar 'EX' para operações com o exterior. - - - - - UF do término da prestação - Informar 'EX' para operações com o exterior. - - - - - Tipo do CT-e - Aceitar apenas Tipo Normal = 0 - Preencher com: - 0 - CT-e Normal; - 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; - 3 - CT-e Substituto - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evGTV_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evGTV_v3.00.xsd deleted file mode 100755 index 8c6c20d49..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evGTV_v3.00.xsd +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - Schema XML de validação do evento informações da GTV 110170 - - - - - - Descrição do Evento - “Informações da GTV” - - - - - - - - - - - Grupo de Informações das GTV - - - - - - Número da GTV - - - - - - - - - - - Identificador para diferenciar GTV de mesmo número (Usar número do AIDF ou identificador interno da empresa), - - - - - - - - - - - Série - - - - - - - - - - - Subsérie - - - - - - - - - - - Data de Emissão - Formato AAAA-MM-DD - - - - - Número Dígito Verificador - - - - - - - - - - - Quantidade de volumes/malotes - - - - - Informações das Espécies transportadas - - - - - - Tipo da Espécie - 1 - Numerário -2 - Cheque -3 - Moeda -4 - Outros - - - - - - - - - - - - - - Valor Transportada em Espécie indicada - - - - - - - - Informações do Remetente da GTV - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do remetente ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Razão social ou nome do remetente - - - - - - - - - - - - - - Informações do Destinatário da GTV - - - - - - - Número do CNPJ - Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. - Informar os zeros não significativos. - - - - - Número do CPF - Informar os zeros não significativos. - - - - - - Inscrição Estadual - Informar a IE do destinatário ou ISENTO se remetente é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o remetente não seja contribuinte do ICMS não informar o conteúdo. - - - - - - - - Sigla da UF - Informar EX para operações com o exterior. - - - - - Razão social ou nome do destinatário - - - - - - - - - - - - - - Placa do veículo - - - - - UF em que veículo está licenciado - Sigla da UF de licenciamento do veículo. - - - - - RNTRC do transportador - - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evPrestDesacordo_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evPrestDesacordo_v3.00.xsd deleted file mode 100755 index a0a570875..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evPrestDesacordo_v3.00.xsd +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - Schema XML de validação do evento Prestação do Serviço em Desacordo 610110 - - - - - - Descrição do Evento - “Prestação do Serviço em Desacordo” - - - - - - - - - - - Indicador de operação em desacordo - - - - - - - - - - Observações do tomador - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evRegMultimodal_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evRegMultimodal_v2.00.xsd deleted file mode 100755 index 64b7f62f6..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evRegMultimodal_v2.00.xsd +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - Schema XML de validação do evento Registro Multimodal 110160 - - - - - - Descrição do Evento - “Registro Multimodal” - - - - - - - - - - - Informação complementar sobre o registro, indicação do tipo de documento utilizado e demais situações ocorridas no Multimodal (Texto Livre). - - - - - - - - - - - - - Numero do Documento lançado no CT-e Multimodal - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/evRegMultimodal_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/evRegMultimodal_v3.00.xsd deleted file mode 100755 index 108b7cfce..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/evRegMultimodal_v3.00.xsd +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - Schema XML de validação do evento Registro Multimodal 110160 - - - - - - Descrição do Evento - “Registro Multimodal” - - - - - - - - - - - Informação complementar sobre o registro, indicação do tipo de documento utilizado e demais situações ocorridas no Multimodal (Texto Livre). - - - - - - - - - - - - - Numero do Documento lançado no CT-e Multimodal - - - - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/eventoCTeTiposBasico_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/eventoCTeTiposBasico_v2.00.xsd deleted file mode 100755 index 4e88fab4d..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/eventoCTeTiposBasico_v2.00.xsd +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - Tipo Evento - - - - - - - - Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - CNPJ do emissor do evento - - - - - Chave de Acesso do CT-e vinculado ao evento - - - - - Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ss) - - - - - - - - - - - Tipo do Evento - - - - - - - - - - - Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento o autor do evento deve numerar de forma seqüencial. - - - - - - - - - - - Detalhamento do evento específico - - - - - - XML do evento -Insira neste local o XML específico do tipo de evento (cancelamento, encerramento, registro de passagem). - - - - - - - - - - - - - - - - - Identificador da TAG a ser assinada, a regra de formação do Id é: -“ID” + tpEvento + chave do CT-e + nSeqEvento - - - - - - - - - - - - - - - - Tipo retorno do Evento - - - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que recebeu o Evento - - - - - Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA - - - - - Código do status da registro do Evento - - - - - Descrição literal do status do registro do Evento - - - - - Chave de Acesso CT-e vinculado - - - - - Tipo do Evento vinculado - - - - - - - - - - - Descrição do Evento - - - - - - - - - - - Seqüencial do evento - - - - - - - - - - - Data e Hora de do recebimento do evento ou do registro do evento formato AAAA-MM-DDThh:mm:ss - - - - - - - - - - - Número do protocolo de registro do evento - - - - - - - - - - - - - - - - - - - - - - - Tipo procEvento - - - - - - - - - - Tipo Versão do Evento - - - - - - - - - Tipo Modal transporte - - - - - - - - - - - - - - Tipo número sequencial único do AN - - - - - - - - Tipo Placa - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/eventoCTeTiposBasico_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/eventoCTeTiposBasico_v3.00.xsd deleted file mode 100755 index ff000f516..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/eventoCTeTiposBasico_v3.00.xsd +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - Tipo Evento - - - - - - - - Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - CNPJ do emissor do evento - - - - - Chave de Acesso do CT-e vinculado ao evento - - - - - Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD) - - - - - Tipo do Evento - - - - - - - - - - - Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento o autor do evento deve numerar de forma seqüencial. - - - - - - - - - - - Detalhamento do evento específico - - - - - - XML do evento -Insira neste local o XML específico do tipo de evento (cancelamento, encerramento, registro de passagem). - - - - - - - - - - - - - - - - - Identificador da TAG a ser assinada, a regra de formação do Id é: -“ID” + tpEvento + chave do CT-e + nSeqEvento - - - - - - - - - - - - - - - - Tipo retorno do Evento - - - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que recebeu o Evento - - - - - Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA - - - - - Código do status da registro do Evento - - - - - Descrição literal do status do registro do Evento - - - - - Chave de Acesso CT-e vinculado - - - - - Tipo do Evento vinculado - - - - - - - - - - - Descrição do Evento - - - - - - - - - - - Seqüencial do evento - - - - - - - - - - - Data e Hora de do recebimento do evento ou do registro do evento formato AAAA-MM-DDThh:mm:ssTZD - - - - - Número do protocolo de registro do evento - - - - - - - - - - - - - - - - - - - - - - - Tipo procEvento - - - - - - - - - - - Tipo Versão do Evento - - - - - - - - - Tipo Modal transporte - - - - - - - - - - - - - - Tipo número sequencial único do AN - - - - - - - - Tipo Placa - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/eventoCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/eventoCTe_v2.00.xsd deleted file mode 100755 index b4183ee95..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/eventoCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Registro de Evento do CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/eventoCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/eventoCTe_v3.00.xsd deleted file mode 100755 index 56244d6a9..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/eventoCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Registro de Evento do CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/inutCTeTiposBasico_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/inutCTeTiposBasico_v2.00.xsd deleted file mode 100755 index 8726de820..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/inutCTeTiposBasico_v2.00.xsd +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - Tipo Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - Dados do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - Código da UF solicitada - - - - - Ano de inutilização da numeração - - - - - - - - - - CNPJ do emitente - - - - - Modelo da CT-e (57) - - - - - Série da CT-e - - - - - Número da CT-e inicial - - - - - Número da CT-e final - - - - - Justificativa do pedido de inutilização - - - - - - - - - - - - - - - - - - - - - - - Tipo retorno do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - Dados do Retorno do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a CT-e - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - - - - - - - - Código da UF solicitada - - - - - Ano de inutilização da numeração - - - - - - - - - - CNPJ do emitente - - - - - Modelo da CT-e (57) - - - - - Série da CT-e - - - - - Número da CT-e inicial - - - - - Número da CT-e final - - - - - Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização. - - - - - Número do Protocolo de Status do CT-e. 1 posição (1 – Secretaria de Fazenda Estadual , 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP); 2 - código da UF - 2 posições ano; 10 seqüencial no ano. - - - - - - - - - - - - - Tipo Pedido de inutilzação de númeração de CT-e processado - - - - - - - - - - Tipo Versão Inutilização de numeração de CT-e - 1.04 - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/inutCTeTiposBasico_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/inutCTeTiposBasico_v3.00.xsd deleted file mode 100755 index 01ebc7834..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/inutCTeTiposBasico_v3.00.xsd +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - Tipo Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - Dados do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Serviço Solicitado - - - - - Código da UF solicitada - - - - - Ano de inutilização da numeração - - - - - - - - - - CNPJ do emitente - - - - - Modelo da CT-e (57) - - - - - Série da CT-e - - - - - Número da CT-e inicial - - - - - Número da CT-e final - - - - - Justificativa do pedido de inutilização - - - - - - - - - - - - - - - - - - - - - - - Tipo retorno do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - Dados do Retorno do Pedido de Inutilização de Numeração do Conhecimento de Transporte eletrônico - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a CT-e - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - - - - - - - - Código da UF solicitada - - - - - Ano de inutilização da numeração - - - - - - - - - - CNPJ do emitente - - - - - Modelo da CT-e (57) - - - - - Série da CT-e - - - - - Número da CT-e inicial - - - - - Número da CT-e final - - - - - Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS TZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização. - - - - - Número do Protocolo de Status do CT-e. 1 posição (1 – Secretaria de Fazenda Estadual , 3 - SEFAZ Virtual RS, 5 - SEFAZ Virtual SP); 2 - código da UF - 2 posições ano; 10 seqüencial no ano. - - - - - - - - - - - - - Tipo Pedido de inutilzação de númeração de CT-e processado - - - - - - - - - - - Tipo Versão Inutilização de numeração de CT-e - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/inutCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/inutCTe_v2.00.xsd deleted file mode 100755 index ec2a4e7b7..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/inutCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Inutilização de Numeração do Conhecimento de Transportes eletrônico - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/inutCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/inutCTe_v3.00.xsd deleted file mode 100755 index 45c7e27eb..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/inutCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Inutilização de Numeração do Conhecimento de Transportes eletrônico - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/leiauteConsultaCadastro_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/leiauteConsultaCadastro_v2.00.xsd deleted file mode 100755 index 960108b90..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/leiauteConsultaCadastro_v2.00.xsd +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - - - Tipo Pedido de Consulta de cadastro de contribuintes - - - - - Dados do Pedido de Consulta de cadastro de contribuintes - - - - - - Serviço Solicitado - - - - - - - - - - sigla da UF consultada, utilizar SU para SUFRAMA - - - - - argumento de pesquisa - - - - Inscrição Estadual do contribuinte - - - - - CNPJ do contribuinte - - - - - CPF do contribuinte - - - - - - - - - - - - Tipo Retorno Pedido de Consulta de cadastro de contribuintes - - - - - Dados do Resultado doDados do Pedido de Consulta de cadastro de contribuintes - - - - - - Versão do Aplicativo que processou o pedido de consulta de cadastro - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - sigla da UF consultada, utilizar SU para SUFRAMA - - - - - argumento de pesquisa - - - - Inscrição Estadual do contribuinte - - - - - CNPJ do contribuinte - - - - - CPF do contribuinte - - - - - - Data da Consulta - - - - - código da UF de atendimento - - - - - Informações cadastrais do contribuinte consultado - - - - - - Número da Inscrição Estadual do contribuinte - - - - - - Número do CNPJ do contribuinte - - - - - Número do CPF do contribuinte - - - - - - Sigla da UF de localização do contribuinte. Em algumas situações, a UF de localização pode ser diferente da UF consultada. Ex. IE de Substituto Tributário. - - - - - Situação cadastral do contribuinte: -0 - não habilitado -1 - habilitado - - - - - - - - - - - Indicador de contribuinte credenciado a emitir NF-e. -0 - Não credenciado para emissão da NF-e; -1 - Credenciado; -2 - Credenciado com obrigatoriedade para todas operações; -3 - Credenciado com obrigatoriedade parcial; -4 – a SEFAZ não fornece a informação. -Este indicador significa apenas que o contribuinte é credenciado para emitir NF-e na SEFAZ consultada. - - - - - - - - - - - - - - - Indicador de contribuinte credenciado a emitir CT-e. -0 - Não credenciado para emissão da CT-e; -1 - Credenciado; -2 - Credenciado com obrigatoriedade para todas operações; -3 - Credenciado com obrigatoriedade parcial; -4 – a SEFAZ não fornece a informação. -Este indicador significa apenas que o contribuinte é credenciado para emitir CT-e na SEFAZ consultada. - - - - - - - - - - - - - - - Razão Social ou nome do contribuinte - - - - - - - - - - - Razão Social ou nome do contribuinte - - - - - - - - - - - Regime de Apuração do ICMS - - - - - - - - - - - CNAE Fiscal do contribuinte - - - - - - - - - - Data de início de atividades do contribuinte - - - - - Data da última modificação da situação cadastral do contribuinte. - - - - - Data de ocorrência da baixa do contribuinte. - - - - - Inscrição Estadual Única - - - - - Inscrição Estadual atual - - - - - Endereço - - - - - - - - - - - - - - Tipo Dados do Endereço - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. - - - - - Nome do município - - - - - - - - - - - CEP - - - - - - - - - - - - Tipo Sigla da UF consultada - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Versão do Leiaute da Consulta Cadastro 2.00 - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/procCTeOS_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/procCTeOS_v3.00.xsd deleted file mode 100755 index 87c0b5f31..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/procCTeOS_v3.00.xsd +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - CT-e OS processado - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/procCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/procCTe_v2.00.xsd deleted file mode 100755 index 2e691d68b..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/procCTe_v2.00.xsd +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - CT-e processado - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/procCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/procCTe_v3.00.xsd deleted file mode 100755 index 77bfcf61e..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/procCTe_v3.00.xsd +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - CT-e processado - - - - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/procEventoCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/procEventoCTe_v2.00.xsd deleted file mode 100755 index c018fc28b..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/procEventoCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Pedido de Registro de Eventos de CT-e processado - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/procEventoCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/procEventoCTe_v3.00.xsd deleted file mode 100755 index b6cd28b79..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/procEventoCTe_v3.00.xsd +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - Pedido de Registro de Eventos de CT-e processado - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/procInutCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/procInutCTe_v2.00.xsd deleted file mode 100755 index 220d6ae6b..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/procInutCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Pedido de inutilzação de numeração de CT-e processado - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/procInutCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/procInutCTe_v3.00.xsd deleted file mode 100755 index c335e9b97..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/procInutCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Pedido de inutilzação de numeração de CT-e processado - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retCTeOS_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retCTeOS_v3.00.xsd deleted file mode 100755 index dc18767ce..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retCTeOS_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno do recibo de envio do CT-e OS (Modelo 67) - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retConsCad_v1.01.xsd b/CTeRefatorar/Assets/Schemas.Cte/retConsCad_v1.01.xsd deleted file mode 100755 index c90420902..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retConsCad_v1.01.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno da consulta cadastro contribuintes - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retConsReciCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retConsReciCTe_v2.00.xsd deleted file mode 100755 index 1a2d438ec..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retConsReciCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno do Pedido de Consulta do Lote de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retConsReciCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retConsReciCTe_v3.00.xsd deleted file mode 100755 index 3499854c7..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retConsReciCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno do Pedido de Consulta do Lote de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retConsSitCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retConsSitCTe_v2.00.xsd deleted file mode 100755 index 72bdbe3fa..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retConsSitCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno da consulta da situação atual do CT-e. - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retConsSitCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retConsSitCTe_v3.00.xsd deleted file mode 100755 index b24571cb6..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retConsSitCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno da consulta da situação atual do CT-e. - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retConsStatServCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retConsStatServCTe_v2.00.xsd deleted file mode 100755 index e55c5527a..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retConsStatServCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Resultado da Consulta do Status do Serviço de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retConsStatServCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retConsStatServCTe_v3.00.xsd deleted file mode 100755 index e371f85c9..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retConsStatServCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Resultado da Consulta do Status do Serviço de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retEnviCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retEnviCTe_v2.00.xsd deleted file mode 100755 index 11e21d963..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retEnviCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno do recibo de envio do lote de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retEnviCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retEnviCTe_v3.00.xsd deleted file mode 100755 index c3c6d1192..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retEnviCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno do recibo de envio do lote de CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retEventoCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retEventoCTe_v2.00.xsd deleted file mode 100755 index 554ee77b2..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retEventoCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno Pedido de Evento do CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retEventoCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retEventoCTe_v3.00.xsd deleted file mode 100755 index ab1ceb2f4..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retEventoCTe_v3.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno Pedido de Evento do CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retInutCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retInutCTe_v2.00.xsd deleted file mode 100755 index c16e9ddd3..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retInutCTe_v2.00.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do retorno do Pedido de Inutilização de Numeração do CT-e - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/retInutCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/retInutCTe_v3.00.xsd deleted file mode 100755 index 20e9489d5..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/retInutCTe_v3.00.xsd +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - Schema XML de validação do retorno do Pedido de Inutilização de Numeração do CT-e - - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/tiposBasico_v1.03.xsd b/CTeRefatorar/Assets/Schemas.Cte/tiposBasico_v1.03.xsd deleted file mode 100755 index 91df3c5ff..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/tiposBasico_v1.03.xsd +++ /dev/null @@ -1,808 +0,0 @@ - - - - - - - - - - - - Tipo Código da UF da tabela do IBGE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Código do Município da tabela do IBGE - - - - - - - - - Tipo Chave da Nota Fiscal Eletrônica - - - - - - - - - Tipo Número do Protocolo de Status - - - - - - - - - Tipo Número do Recibo do envio de lote de NF-e - - - - - - - - - Tipo Código da Mensagem enviada - - - - - - - - - Tipo Número do CNPJ - - - - - - - - - Tipo Número do CNPJ tmanho varíavel (3-14) - - - - - - - - - Tipo Número do CNPJ Opcional - - - - - - - - - - Tipo Número do CPF - - - - - - - - - Tipo Número do CPF de tamanho variável (3-11) - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4decimais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com até 21 dígitos, sendo 11 de corpo e até 10 decimais // aperfeiçoamento v2.0 - - - - - - - - - Tipo Decimal com até 15 dígitos, sendo 11 de corpo e até 4 decimais // aperfeiçoamento v2.0 - - - - - - - - - Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 - - - - - - - - - Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08 - - - - - - - - - Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO - - - - - - - - - Tipo Modelo Documento Fiscal - - - - - - - - - Tipo Número do Documento Fiscal - - - - - - - - - Tipo Série do Documento Fiscal - - - - - - - - - Tipo Código do Pais -// PL_005d - 11/08/09 -eliminado: - 4235-LEBUAN, ILHAS - -acrescentado: -7200 SAO TOME E PRINCIPE, ILHAS, -8958 ZONA DO CANAL DO PANAMA -9903 PROVISAO DE NAVIOS E AERONAVES -9946 A DESIGNAR -9950 BANCOS CENTRAIS -9970 ORGANIZACOES INTERNACIONAIS - // PL_005b - 24/10/08 - // Acrescentado: - 4235 - LEBUAN,ILHAS - 4885 - MAYOTTE (ILHAS FRANCESAS) -// NT2011/004 - acrescentado a tabela de paises -//PL_006t - 21/03/2014 -acrescentado: -5780 - Palestina -7600 - Sudão do Sul - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Sigla da UF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Sigla da UF de emissor // acrescentado em 24/10/08 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Ambiente - - - - - - - - - - Tipo Versão do Aplicativo - - - - - - - - - Tipo Motivo - - - - - - - - - Tipo Justificativa - - - - - - - - - Tipo Serviço solicitado - - - - - - Tipo ano - - - - - - - - - Tipo temp médio em segundos - - - - - - - - - Tipo string genérico - - - - - - - - - Tipo data AAAA-MM-DD - - - - - - - - - Tipo hora HH:MM:SS // tipo acrescentado na v2.0 - - - - - - - - - Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v2.00-OPENSSL.xsd b/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v2.00-OPENSSL.xsd deleted file mode 100755 index c122f2f33..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v2.00-OPENSSL.xsd +++ /dev/null @@ -1,575 +0,0 @@ - - - - - Tipo Ambiente - - - - - - - - - - Tipo ano - - - - - - - - - Tipo Código da UF da tabela do IBGE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Código do Município da tabela do IBGE - - - - - - - - - Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Chave da Nota Fiscal Eletrônica - - - - - - - - - - Tipo Número do CNPJ - - - - - - - - - Tipo Número do Telefone - - - - - - - - - Tipo Número do CNPJ tamanho varíavel (3-14) - - - - - - - - - Tipo Número do CNPJ Opcional - - - - - - - - - Tipo Número do CPF - - - - - - - - - Tipo Número do CPF de tamanho variável (3-11) - - - - - - - - - Tipo data AAAA-MM-DD - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 6 dígitos, sendo 3 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 6 ou 5 dígitos, sendo 3 de corpo e 3 ou 2 decimais - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4decimais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 9 de corpo e 6 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Inscrição Estadual do Emitente - - - - - - - - - Tipo Inscrição Estadual do Destinatário - - - - - - - - - Tipo Justificativa - - - - - - - - - Tipo temp médio em segundos - - - - - - - - - Tipo Modelo Documento Fiscal - - - - - - - - - Tipo Modelo Documento Fiscal - NF Remetente - - - - - - - - - - Tipo da Unidade de Transporte - - - - - - - - - - - - - - - Tipo da Unidade de Carga - - - - - - - - - - - - Tipo Motivo - - - - - - - - - Tipo Número do Documento Fiscal - - - - - - - - - Tipo Número do Protocolo de Status - - - - - - - - - Tipo Número do Recibo do envio de lote de NF-e - - - - - - - - - Tipo Série do Documento Fiscal - - - - - - - - - Tipo Serviço solicitado - - - - - - Tipo Código da Mensagem enviada - - - - - - - - - Tipo string genérico - - - - - - - - - Tipo Sigla da UF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Sigla da UF, sem Exterior - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Versão do Aplicativo - - - - - - - - - Coordenada geográfica Latitude - - - - - - - - Coordenada geográfica Longitude - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v2.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v2.00.xsd deleted file mode 100755 index 83f1300d3..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v2.00.xsd +++ /dev/null @@ -1,575 +0,0 @@ - - - - - Tipo Ambiente - - - - - - - - - - Tipo ano - - - - - - - - - Tipo Código da UF da tabela do IBGE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Código do Município da tabela do IBGE - - - - - - - - - Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Chave da Nota Fiscal Eletrônica - - - - - - - - - - Tipo Número do CNPJ - - - - - - - - - Tipo Número do Telefone - - - - - - - - - Tipo Número do CNPJ tamanho varíavel (3-14) - - - - - - - - - Tipo Número do CNPJ Opcional - - - - - - - - - Tipo Número do CPF - - - - - - - - - Tipo Número do CPF de tamanho variável (3-11) - - - - - - - - - Tipo data AAAA-MM-DD - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 6 dígitos, sendo 3 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 6 ou 5 dígitos, sendo 3 de corpo e 3 ou 2 decimais - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4decimais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 9 de corpo e 6 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Inscrição Estadual do Emitente - - - - - - - - - Tipo Inscrição Estadual do Destinatário - - - - - - - - - Tipo Justificativa - - - - - - - - - Tipo temp médio em segundos - - - - - - - - - Tipo Modelo Documento Fiscal - - - - - - - - - Tipo Modelo Documento Fiscal - NF Remetente - - - - - - - - - - Tipo da Unidade de Transporte - - - - - - - - - - - - - - - Tipo da Unidade de Carga - - - - - - - - - - - - Tipo Motivo - - - - - - - - - Tipo Número do Documento Fiscal - - - - - - - - - Tipo Número do Protocolo de Status - - - - - - - - - Tipo Número do Recibo do envio de lote de NF-e - - - - - - - - - Tipo Série do Documento Fiscal - - - - - - - - - Tipo Serviço solicitado - - - - - - Tipo Código da Mensagem enviada - - - - - - - - - Tipo string genérico - - - - - - - - - Tipo Sigla da UF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Sigla da UF, sem Exterior - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Versão do Aplicativo - - - - - - - - - Coordenada geográfica Latitude - - - - - - - - Coordenada geográfica Longitude - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v3.00.xsd b/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v3.00.xsd deleted file mode 100755 index 3c5bb96e6..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/tiposGeralCTe_v3.00.xsd +++ /dev/null @@ -1,615 +0,0 @@ - - - - - Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) - - - - - - - - - Tipo Ambiente - - - - - - - - - - Tipo ano - - - - - - - - - Tipo Código da UF da tabela do IBGE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Código do Município da tabela do IBGE - - - - - - - - - Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 RFB) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Chave da Nota Fiscal Eletrônica - - - - - - - - - - Tipo Número do CNPJ - - - - - - - - - Tipo Número do Telefone - - - - - - - - - Tipo Número do CNPJ tamanho varíavel (3-14) - - - - - - - - - Tipo Número do CNPJ Opcional - - - - - - - - - Tipo Número do CPF - - - - - - - - - Tipo Número do CPF de tamanho variável (3-11) - - - - - - - - - Tipo data AAAA-MM-DD - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 6 dígitos, sendo 3 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 6 ou 5 dígitos, sendo 3 de corpo e 3 ou 2 decimais - - - - - - - - - Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4decimais - - - - - - - - - Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 9 de corpo e 6 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais - - - - - - - - - Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Inscrição Estadual do Emitente - - - - - - - - - - Tipo Inscrição Estadual do Destinatário - - - - - - - - - - Tipo Justificativa - - - - - - - - - Tipo temp médio em segundos - - - - - - - - - Tipo Modelo Documento Fiscal - - - - - - - - - Tipo Modelo Documento Fiscal - - - - - - - - - - Tipo Modelo Documento Fiscal - - - - - - - - - Tipo Modelo Documento Fiscal - NF Remetente - - - - - - - - - - Tipo da Unidade de Transporte - - - - - - - - - - - - - - - Tipo da Unidade de Carga - - - - - - - - - - - - Tipo Motivo - - - - - - - - - Tipo Número do Documento Fiscal - - - - - - - - - Tipo Número do Protocolo de Status - - - - - - - - - Tipo Número do Recibo do envio de lote de NF-e - - - - - - - - - Tipo Série do Documento Fiscal - - - - - - - - - Tipo Serviço solicitado - - - - - - Tipo Código da Mensagem enviada - - - - - - - - - Tipo string genérico - - - - - - - - - Tipo Sigla da UF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Sigla da UF, sem Exterior - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Versão do Aplicativo - - - - - - - - - Coordenada geográfica Latitude - - - - - - - - Coordenada geográfica Longitude - - - - - - - - Tipo IP versão 4 - - - - - - - diff --git a/CTeRefatorar/Assets/Schemas.Cte/xmldsig-core-schema_v1.01.xsd b/CTeRefatorar/Assets/Schemas.Cte/xmldsig-core-schema_v1.01.xsd deleted file mode 100755 index 76b74b38d..000000000 --- a/CTeRefatorar/Assets/Schemas.Cte/xmldsig-core-schema_v1.01.xsd +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CTeRefatorar/CTeRefatorar.csproj b/CTeRefatorar/CTeRefatorar.csproj deleted file mode 100755 index 71ca57c28..000000000 --- a/CTeRefatorar/CTeRefatorar.csproj +++ /dev/null @@ -1,370 +0,0 @@ - - - - - Debug - AnyCPU - {C1939C50-FA18-4B90-83E6-8E7721A3AC6F} - Library - Properties - CTeRefatorar - CTeRefatorar - v4.0 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - Designer - - - - - - - - \ No newline at end of file diff --git a/CTeRefatorar/Properties/AssemblyInfo.cs b/CTeRefatorar/Properties/AssemblyInfo.cs deleted file mode 100755 index 05ee23cd2..000000000 --- a/CTeRefatorar/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CTeRefatorar")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CTeRefatorar")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c1939c50-fa18-4b90-83e6-8e7721a3ac6f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/CTeRefatorar/RegrasNegocios/AutorizacaoCte.cs b/CTeRefatorar/RegrasNegocios/AutorizacaoCte.cs deleted file mode 100755 index 87e440860..000000000 --- a/CTeRefatorar/RegrasNegocios/AutorizacaoCte.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Security.Cryptography.X509Certificates; -using System.Xml; -using FusionCore.DFe.RegrasNegocios.contratos; -using FusionCore.DFe.WsdlCte.Homologacao.Helper; -using FusionCore.DFe.WsdlCte.Homologacao.Recepcao; -using FusionCore.DFe.XmlCte; - -namespace FusionCore.DFe.RegrasNegocios -{ - public class AutorizacaoCte : EnviaSefaz - { - public XmlNode Executa(XmlNode xmlEnvio, - FusionEstadoUFCTe estado, - X509Certificate2 certificado, - FusionTipoAmbienteCTe ambiente) - { - var url = UrlHelper.ObterUrl(estado, ambiente); - - var cteRecepcao = new CteRecepcao(url.CteRecepcao) - { - cteCabecMsgValue = new cteCabecMsg - { - versaoDados = "2.00", - cUF = estado.GetCodigoUF() - } - }; - - cteRecepcao.ClientCertificates.Add(certificado); - - var xml = cteRecepcao.cteRecepcaoLote(xmlEnvio); - - return xml; - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/RegrasNegocios/Chave/GerarChaveFiscal.cs b/CTeRefatorar/RegrasNegocios/Chave/GerarChaveFiscal.cs deleted file mode 100755 index 3e761c92e..000000000 --- a/CTeRefatorar/RegrasNegocios/Chave/GerarChaveFiscal.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System; -using System.Text; - -namespace FusionCore.DFe.RegrasNegocios.Chave -{ - public class GerarChaveFiscal - { - private readonly int _modeloDocumentoFiscal; - private readonly int _tipoEmissao; - private readonly long _codigoNumerico; - private readonly int _codigoIbgeUf; - private readonly long _documentoUnico; - private readonly long _numeroDocumento; - private readonly int _serie; - private readonly DateTime _dataEHoraEmissao; - public string Chave { get; private set; } - public byte DigitoVerificador { get; private set; } - - public GerarChaveFiscal(int modeloDocumentoFiscal, - int tipoEmissao, - long codigoNumerico, - int codigoIbgeUf, - DateTime dataEHoraEmissao, - long documentoUnico, - long numeroDocumento, - int serie) - { - _modeloDocumentoFiscal = modeloDocumentoFiscal; - _tipoEmissao = tipoEmissao; - _codigoNumerico = codigoNumerico; - _codigoIbgeUf = codigoIbgeUf; - _documentoUnico = documentoUnico; - _numeroDocumento = numeroDocumento; - _serie = serie; - _dataEHoraEmissao = dataEHoraEmissao; - - - GeraChave(); - } - - private void GeraChave() - { - var codigoUf = _codigoIbgeUf.ToString("D2"); - var anoMes = _dataEHoraEmissao.ToString("yyMM"); - var documentoUnico = _documentoUnico.ToString("D14"); - var modeloDocumentoFiscal = _modeloDocumentoFiscal.ToString("D2"); - var serie = _serie.ToString("D3"); - var numeroDocumento = _numeroDocumento.ToString("D9"); - var tipoEmissao = _tipoEmissao.ToString(); - var codigoNumerico = _codigoNumerico.ToString("D8"); - - var chave = new StringBuilder(); - - chave.Append(codigoUf) - .Append(anoMes) - .Append(documentoUnico) - .Append(modeloDocumentoFiscal) - .Append(serie) - .Append(numeroDocumento) - .Append(tipoEmissao) - .Append(codigoNumerico); - - var digitoVerificador = CalculaDigitoVerificador(chave.ToString()); - - chave.Append(digitoVerificador); - - Chave = chave.ToString(); - DigitoVerificador = byte.Parse(digitoVerificador); - } - - private string CalculaDigitoVerificador(string chave) - { - var soma = 0; // Vai guardar a Soma - var mod = -1; // Vai guardar o Resto da divisão - var dv = -1; // Vai guardar o DigitoVerificador - var pesso = 2; // vai guardar o pesso de multiplicacao - - //percorrendo cada caracter da chave da direita para esquerda para fazer os calculos com o pesso - for (var i = chave.Length - 1; i != -1; i--) - { - var ch = Convert.ToInt32(chave[i].ToString()); - soma += ch*pesso; - //sempre que for 9 voltamos o pesso a 2 - if (pesso < 9) - pesso += 1; - else - pesso = 2; - } - - //Agora que tenho a soma vamos pegar o resto da divisão por 11 - mod = soma%11; - //Aqui temos uma regrinha, se o resto da divisão for 0 ou 1 então o dv vai ser 0 - if (mod == 0 || mod == 1) - dv = 0; - else - dv = 11 - mod; - - return dv.ToString(); - } - - public static void ValidarChave(string chaveNfe) - { - var codifoUF = int.Parse(chaveNfe.Substring(0, 2)); - - var anoMes = chaveNfe.Substring(2, 4); - var ano = int.Parse(anoMes.Substring(0, 2)); - var mes = int.Parse(anoMes.Substring(2, 2)); - - var anoEMesData = new DateTime(ano, mes, 1); - - var cnpj = long.Parse(chaveNfe.Substring(6, 14)); - var modelo = int.Parse(chaveNfe.Substring(20, 2)); - var serie = int.Parse(chaveNfe.Substring(22, 3)); - var numeroNfe = long.Parse(chaveNfe.Substring(25, 9)); - var formaEmissao = int.Parse(chaveNfe.Substring(34, 1)); - var codigoNumerico = long.Parse(chaveNfe.Substring(35, 8)); - var digitoVerificador = chaveNfe.Substring(43, 1); - - var gerarChave = new GerarChaveFiscal(modelo, - formaEmissao, - codigoNumerico, - codifoUF, - anoEMesData, - cnpj, - numeroNfe, - serie); - - if (digitoVerificador.Equals(gerarChave.DigitoVerificador.ToString())) return; - - throw new InvalidOperationException("Chave da NF-e não é válida"); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/RegrasNegocios/Contratos/EnviaSefaz.cs b/CTeRefatorar/RegrasNegocios/Contratos/EnviaSefaz.cs deleted file mode 100755 index be5af3431..000000000 --- a/CTeRefatorar/RegrasNegocios/Contratos/EnviaSefaz.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Security.Cryptography.X509Certificates; -using System.Xml; -using FusionCore.DFe.XmlCte; - -namespace FusionCore.DFe.RegrasNegocios.contratos -{ - public interface EnviaSefaz - { - XmlNode Executa(XmlNode xmlEnvio, - FusionEstadoUFCTe estado, - X509Certificate2 certificado, - FusionTipoAmbienteCTe ambiente); - } -} \ No newline at end of file diff --git a/CTeRefatorar/RegrasNegocios/InutilizacaoCte.cs b/CTeRefatorar/RegrasNegocios/InutilizacaoCte.cs deleted file mode 100755 index 51f8f70d8..000000000 --- a/CTeRefatorar/RegrasNegocios/InutilizacaoCte.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Security.Cryptography.X509Certificates; -using System.Xml; -using FusionCore.DFe.RegrasNegocios.contratos; -using FusionCore.DFe.WsdlCte.Homologacao.Helper; -using FusionCore.DFe.WsdlCte.Homologacao.Inutilizacao; -using FusionCore.DFe.XmlCte; - -namespace FusionCore.DFe.RegrasNegocios -{ - public class InutilizacaoCte : EnviaSefaz - { - public XmlNode Executa(XmlNode xmlEnvio, - FusionEstadoUFCTe estado, - X509Certificate2 certificado, - FusionTipoAmbienteCTe ambiente) - { - var url = UrlHelper.ObterUrl(estado, ambiente); - - var wsdlInutilizacao = new CteInutilizacao(url.CteInutilizacao) - { - cteCabecMsgValue = new cteCabecMsg - { - versaoDados = "2.00", - cUF = estado.GetCodigoUF() - } - }; - - wsdlInutilizacao.ClientCertificates.Add(certificado); - - var xml = wsdlInutilizacao.cteInutilizacaoCT(xmlEnvio); - - return xml; - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/RegrasNegocios/RetornoRecepcaoCte.cs b/CTeRefatorar/RegrasNegocios/RetornoRecepcaoCte.cs deleted file mode 100755 index f7877df28..000000000 --- a/CTeRefatorar/RegrasNegocios/RetornoRecepcaoCte.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Security.Cryptography.X509Certificates; -using System.Xml; -using FusionCore.DFe.RegrasNegocios.contratos; -using FusionCore.DFe.WsdlCte.Homologacao.Helper; -using FusionCore.DFe.WsdlCte.Homologacao.RetornoRecepcao; -using FusionCore.DFe.XmlCte; - -namespace FusionCore.DFe.RegrasNegocios -{ - public class RetornoRecepcaoCte : EnviaSefaz - { - public XmlNode Executa(XmlNode xmlEnvio, - FusionEstadoUFCTe estado, - X509Certificate2 certificado, - FusionTipoAmbienteCTe ambiente) - { - var url = UrlHelper.ObterUrl(estado, ambiente); - - var cteRetRecepcao = new CteRetRecepcao(url.CteRetRecepcao) - { - cteCabecMsgValue = new cteCabecMsg - { - versaoDados = "2.00", - cUF = estado.GetCodigoUF() - } - }; - - cteRetRecepcao.ClientCertificates.Add(certificado); - - var xml = cteRetRecepcao.cteRetRecepcao(xmlEnvio); - - return xml; - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/WsdlCte/Homologacao/Evento/CteRecepcaoEvento.cs b/CTeRefatorar/WsdlCte/Homologacao/Evento/CteRecepcaoEvento.cs deleted file mode 100755 index 5c59470ce..000000000 --- a/CTeRefatorar/WsdlCte/Homologacao/Evento/CteRecepcaoEvento.cs +++ /dev/null @@ -1,167 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace FusionCore.DFe.WsdlCte.Homologacao.Evento -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="CteRecepcaoEventoSoap12", Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento")] - public partial class CteRecepcaoEvento : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private cteCabecMsg cteCabecMsgValueField; - - private System.Threading.SendOrPostCallback cteRecepcaoEventoOperationCompleted; - - /// - public CteRecepcaoEvento(string url) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = url; - } - - public cteCabecMsg cteCabecMsgValue { - get { - return this.cteCabecMsgValueField; - } - set { - this.cteCabecMsgValueField = value; - } - } - - /// - public event cteRecepcaoEventoCompletedEventHandler cteRecepcaoEventoCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("cteCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento/cteRecepcaoEvento", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento")] - public System.Xml.XmlNode cteRecepcaoEvento([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento")] System.Xml.XmlNode cteDadosMsg) { - object[] results = this.Invoke("cteRecepcaoEvento", new object[] { - cteDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BegincteRecepcaoEvento(System.Xml.XmlNode cteDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("cteRecepcaoEvento", new object[] { - cteDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndcteRecepcaoEvento(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void cteRecepcaoEventoAsync(System.Xml.XmlNode cteDadosMsg) { - this.cteRecepcaoEventoAsync(cteDadosMsg, null); - } - - /// - public void cteRecepcaoEventoAsync(System.Xml.XmlNode cteDadosMsg, object userState) { - if ((this.cteRecepcaoEventoOperationCompleted == null)) { - this.cteRecepcaoEventoOperationCompleted = new System.Threading.SendOrPostCallback(this.OncteRecepcaoEventoOperationCompleted); - } - this.InvokeAsync("cteRecepcaoEvento", new object[] { - cteDadosMsg}, this.cteRecepcaoEventoOperationCompleted, userState); - } - - private void OncteRecepcaoEventoOperationCompleted(object arg) { - if ((this.cteRecepcaoEventoCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.cteRecepcaoEventoCompleted(this, new cteRecepcaoEventoCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento", IsNullable=false)] - public partial class cteCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void cteRecepcaoEventoCompletedEventHandler(object sender, cteRecepcaoEventoCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class cteRecepcaoEventoCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal cteRecepcaoEventoCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/WsdlCte/Homologacao/Helper/UrlHelper.cs b/CTeRefatorar/WsdlCte/Homologacao/Helper/UrlHelper.cs deleted file mode 100755 index 5f11fb597..000000000 --- a/CTeRefatorar/WsdlCte/Homologacao/Helper/UrlHelper.cs +++ /dev/null @@ -1,247 +0,0 @@ -using System; -using FusionCore.DFe.XmlCte; - -namespace FusionCore.DFe.WsdlCte.Homologacao.Helper -{ - public class UrlHelper - { - public static UrlServicoSefaz ObterUrl(FusionEstadoUFCTe estado, FusionTipoAmbienteCTe ambiente) - { - switch (ambiente) - { - case FusionTipoAmbienteCTe.Homologacao: - return UrlHomologacao(estado); - case FusionTipoAmbienteCTe.Producao: - return UrlProducao(estado); - } - - throw new InvalidOperationException("Tipo ambiente inválido"); - } - - private static UrlServicoSefaz UrlProducao(FusionEstadoUFCTe estado) - { - switch (estado) - { - case FusionEstadoUFCTe.MT: - return new UrlServicoSefaz - { - CteStatusServico = "https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico", - CteRecepcao = "https://cte.sefaz.mt.gov.br/ctews/services/CteRecepcao", - CteInutilizacao = "https://cte.sefaz.mt.gov.br/ctews/services/CteInutilizacao", - CteRetRecepcao = "https://cte.sefaz.mt.gov.br/ctews/services/CteRetRecepcao", - CteRecepcaoEvento = "https://cte.sefaz.mt.gov.br/ctews2/services/CteRecepcaoEvento?wsdl" - }; - - case FusionEstadoUFCTe.MS: - return new UrlServicoSefaz - { - CteStatusServico = "https://producao.cte.ms.gov.br/ws/CteStatusServico", - CteRecepcao = "https://producao.cte.ms.gov.br/ws/CteRecepcao", - CteInutilizacao = "https://producao.cte.ms.gov.br/ws/CteInutilizacao", - CteRetRecepcao = "https://producao.cte.ms.gov.br/ws/CteRetRecepcao", - CteRecepcaoEvento = "https://producao.cte.ms.gov.br/ws/CteRecepcaoEvento" - }; - - case FusionEstadoUFCTe.MG: - return new UrlServicoSefaz - { - CteStatusServico = "https://cte.fazenda.mg.gov.br/cte/services/CteStatusServico", - CteRecepcao = "https://cte.fazenda.mg.gov.br/cte/services/CteRecepcao", - CteInutilizacao = "https://cte.fazenda.mg.gov.br/cte/services/CteInutilizacao", - CteRetRecepcao = "https://cte.fazenda.mg.gov.br/cte/services/CteRetRecepcao", - CteRecepcaoEvento = "https://cte.fazenda.mg.gov.br/cte/services/RecepcaoEvento" - }; - - case FusionEstadoUFCTe.PR: - return new UrlServicoSefaz - { - CteStatusServico = "https://cte.fazenda.pr.gov.br/cte/CteStatusServico?wsdl", - CteRecepcao = "https://cte.fazenda.pr.gov.br/cte/CteRecepcao?wsdl", - CteInutilizacao = "https://cte.fazenda.pr.gov.br/cte/CteInutilizacao?wsdl", - CteRetRecepcao = "https://cte.fazenda.pr.gov.br/cte/CteRetRecepcao?wsdl", - CteRecepcaoEvento = "https://cte.fazenda.pr.gov.br/cte/CteRecepcaoEvento?wsdl" - }; - - case FusionEstadoUFCTe.RS: - return new UrlServicoSefaz - { - CteStatusServico = "https://cte.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", - CteRecepcao = "https://cte.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", - CteInutilizacao = "https://cte.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRetRecepcao = "https://cte.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", - CteRecepcaoEvento = "https://cte.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx" - }; - - case FusionEstadoUFCTe.SP: - return new UrlServicoSefaz - { - CteStatusServico = "https://nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx", - CteRecepcao = "https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", - CteInutilizacao = "https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRetRecepcao = "https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRetRecepcao.asmx", - CteRecepcaoEvento = "https://nfe.fazenda.sp.gov.br/cteweb/services/cteRecepcaoEvento.asmx" - }; - - case FusionEstadoUFCTe.AC: - case FusionEstadoUFCTe.AL: - case FusionEstadoUFCTe.AM: - case FusionEstadoUFCTe.BA: - case FusionEstadoUFCTe.CE: - case FusionEstadoUFCTe.DF: - case FusionEstadoUFCTe.ES: - case FusionEstadoUFCTe.GO: - case FusionEstadoUFCTe.MA: - case FusionEstadoUFCTe.PA: - case FusionEstadoUFCTe.PB: - case FusionEstadoUFCTe.PI: - case FusionEstadoUFCTe.RJ: - case FusionEstadoUFCTe.RN: - case FusionEstadoUFCTe.RO: - case FusionEstadoUFCTe.SC: - case FusionEstadoUFCTe.SE: - case FusionEstadoUFCTe.TO: - return new UrlServicoSefaz - { - CteStatusServico = "https://cte.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", - CteRecepcao = "https://cte.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", - CteInutilizacao = "https://cte.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRetRecepcao = "https://cte.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", - CteRecepcaoEvento = "https://cte.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx" - }; - - case FusionEstadoUFCTe.AP: - case FusionEstadoUFCTe.PE: - case FusionEstadoUFCTe.RR: - return new UrlServicoSefaz - { - CteStatusServico = "https://nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", - CteRecepcao = "https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", - CteInutilizacao = "https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRetRecepcao = "https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", - CteRecepcaoEvento = "https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx" - }; - } - - throw new InvalidOperationException("Sigla estádo uf " + estado + " está inválido"); - } - - private static UrlServicoSefaz UrlHomologacao(FusionEstadoUFCTe estado) - { - switch (estado) - { - case FusionEstadoUFCTe.MT: - return new UrlServicoSefaz - { - CteStatusServico = "https://homologacao.sefaz.mt.gov.br/ctews/services/CteStatusServico", - CteRecepcao = "https://homologacao.sefaz.mt.gov.br/ctews/services/CteRecepcao", - CteInutilizacao = "https://homologacao.sefaz.mt.gov.br/ctews/services/CteInutilizacao", - CteRetRecepcao = "https://homologacao.sefaz.mt.gov.br/ctews/services/CteRetRecepcao", - CteRecepcaoEvento = "https://homologacao.sefaz.mt.gov.br/ctews2/services/CteRecepcaoEvento?wsdl" - }; - - case FusionEstadoUFCTe.MS: - return new UrlServicoSefaz - { - CteStatusServico = "https://homologacao.cte.ms.gov.br/ws/CteStatusServico", - CteRecepcao = "https://homologacao.cte.ms.gov.br/ws/CteRecepcao", - CteInutilizacao = "https://homologacao.cte.ms.gov.br/ws/CteInutilizacao", - CteRetRecepcao = "https://homologacao.cte.ms.gov.br/ws/CteRetRecepcao", - CteRecepcaoEvento = "https://homologacao.cte.ms.gov.br/ws/CteRecepcaoEvento" - }; - - case FusionEstadoUFCTe.MG: - return new UrlServicoSefaz - { - CteStatusServico = "https://hcte.fazenda.mg.gov.br/cte/services/CteStatusServico", - CteRecepcao = "https://hcte.fazenda.mg.gov.br/cte/services/CteRecepcao", - CteInutilizacao = "https://hcte.fazenda.mg.gov.br/cte/services/CteInutilizacao", - CteRetRecepcao = "https://hcte.fazenda.mg.gov.br/cte/services/CteRetRecepcao", - CteRecepcaoEvento = "https://hcte.fazenda.mg.gov.br/cte/services/RecepcaoEvento" - }; - - case FusionEstadoUFCTe.PR: - return new UrlServicoSefaz - { - CteStatusServico = "https://homologacao.cte.fazenda.pr.gov.br/cte/CteStatusServico?wsdl", - CteRecepcao = "https://homologacao.cte.fazenda.pr.gov.br/cte/CteRecepcao?wsdl", - CteInutilizacao = "https://homologacao.cte.fazenda.pr.gov.br/cte/CteInutilizacao?wsdl", - CteRetRecepcao = "https://homologacao.cte.fazenda.pr.gov.br/cte/CteRetRecepcao?wsdl", - CteRecepcaoEvento = "https://homologacao.cte.fazenda.pr.gov.br/cte/CteRecepcaoEvento?wsdl" - }; - - case FusionEstadoUFCTe.RS: - return new UrlServicoSefaz - { - CteStatusServico = - "https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", - CteRecepcao = "https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", - CteInutilizacao = - "https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRetRecepcao = "https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", - CteRecepcaoEvento = - "https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx" - }; - - case FusionEstadoUFCTe.SP: - return new UrlServicoSefaz - { - CteStatusServico = - "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx", - CteRecepcao = "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", - CteInutilizacao = - "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRetRecepcao = "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteRetRecepcao.asmx", - CteRecepcaoEvento = - "https://homologacao.nfe.fazenda.sp.gov.br/cteweb/services/cteRecepcaoEvento.asmx" - }; - - case FusionEstadoUFCTe.AC: - case FusionEstadoUFCTe.AL: - case FusionEstadoUFCTe.AM: - case FusionEstadoUFCTe.BA: - case FusionEstadoUFCTe.CE: - case FusionEstadoUFCTe.DF: - case FusionEstadoUFCTe.ES: - case FusionEstadoUFCTe.GO: - case FusionEstadoUFCTe.MA: - case FusionEstadoUFCTe.PA: - case FusionEstadoUFCTe.PB: - case FusionEstadoUFCTe.PI: - case FusionEstadoUFCTe.RJ: - case FusionEstadoUFCTe.RN: - case FusionEstadoUFCTe.RO: - case FusionEstadoUFCTe.SC: - case FusionEstadoUFCTe.SE: - case FusionEstadoUFCTe.TO: - return new UrlServicoSefaz - { - CteStatusServico = - "https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", - CteRecepcao = "https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", - CteInutilizacao = - "https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRetRecepcao = "https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", - CteRecepcaoEvento = - "https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx" - }; - - case FusionEstadoUFCTe.AP: - case FusionEstadoUFCTe.PE: - case FusionEstadoUFCTe.RR: - return new UrlServicoSefaz - { - CteStatusServico = - "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", - CteRecepcao = "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcao.asmx", - CteInutilizacao = - "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRetRecepcao = "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", - CteRecepcaoEvento = - "https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx" - }; - } - - throw new InvalidOperationException("Sigla estádo uf " + estado + " está inválido"); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/WsdlCte/Homologacao/Inutilizacao/CteInutilizacao.cs b/CTeRefatorar/WsdlCte/Homologacao/Inutilizacao/CteInutilizacao.cs deleted file mode 100755 index 5086de9aa..000000000 --- a/CTeRefatorar/WsdlCte/Homologacao/Inutilizacao/CteInutilizacao.cs +++ /dev/null @@ -1,167 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace FusionCore.DFe.WsdlCte.Homologacao.Inutilizacao -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="CteInutilizacaoSoap12", Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao")] - public partial class CteInutilizacao : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private cteCabecMsg cteCabecMsgValueField; - - private System.Threading.SendOrPostCallback cteInutilizacaoCTOperationCompleted; - - /// - public CteInutilizacao(string url) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = url; - } - - public cteCabecMsg cteCabecMsgValue { - get { - return this.cteCabecMsgValueField; - } - set { - this.cteCabecMsgValueField = value; - } - } - - /// - public event cteInutilizacaoCTCompletedEventHandler cteInutilizacaoCTCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("cteCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao/cteInutilizacaoCT", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao")] - public System.Xml.XmlNode cteInutilizacaoCT([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao")] System.Xml.XmlNode cteDadosMsg) { - object[] results = this.Invoke("cteInutilizacaoCT", new object[] { - cteDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BegincteInutilizacaoCT(System.Xml.XmlNode cteDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("cteInutilizacaoCT", new object[] { - cteDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndcteInutilizacaoCT(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void cteInutilizacaoCTAsync(System.Xml.XmlNode cteDadosMsg) { - this.cteInutilizacaoCTAsync(cteDadosMsg, null); - } - - /// - public void cteInutilizacaoCTAsync(System.Xml.XmlNode cteDadosMsg, object userState) { - if ((this.cteInutilizacaoCTOperationCompleted == null)) { - this.cteInutilizacaoCTOperationCompleted = new System.Threading.SendOrPostCallback(this.OncteInutilizacaoCTOperationCompleted); - } - this.InvokeAsync("cteInutilizacaoCT", new object[] { - cteDadosMsg}, this.cteInutilizacaoCTOperationCompleted, userState); - } - - private void OncteInutilizacaoCTOperationCompleted(object arg) { - if ((this.cteInutilizacaoCTCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.cteInutilizacaoCTCompleted(this, new cteInutilizacaoCTCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao", IsNullable=false)] - public partial class cteCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void cteInutilizacaoCTCompletedEventHandler(object sender, cteInutilizacaoCTCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class cteInutilizacaoCTCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal cteInutilizacaoCTCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/WsdlCte/Homologacao/Recepcao/CteRecepcao.cs b/CTeRefatorar/WsdlCte/Homologacao/Recepcao/CteRecepcao.cs deleted file mode 100755 index 1a0210633..000000000 --- a/CTeRefatorar/WsdlCte/Homologacao/Recepcao/CteRecepcao.cs +++ /dev/null @@ -1,167 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace FusionCore.DFe.WsdlCte.Homologacao.Recepcao -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="CteRecepcaoSoap12", Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao")] - public partial class CteRecepcao : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private cteCabecMsg cteCabecMsgValueField; - - private System.Threading.SendOrPostCallback cteRecepcaoLoteOperationCompleted; - - /// - public CteRecepcao(string url) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = url; - } - - public cteCabecMsg cteCabecMsgValue { - get { - return this.cteCabecMsgValueField; - } - set { - this.cteCabecMsgValueField = value; - } - } - - /// - public event cteRecepcaoLoteCompletedEventHandler cteRecepcaoLoteCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("cteCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao/cteRecepcaoLote", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao")] - public System.Xml.XmlNode cteRecepcaoLote([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao")] System.Xml.XmlNode cteDadosMsg) { - object[] results = this.Invoke("cteRecepcaoLote", new object[] { - cteDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BegincteRecepcaoLote(System.Xml.XmlNode cteDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("cteRecepcaoLote", new object[] { - cteDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndcteRecepcaoLote(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void cteRecepcaoLoteAsync(System.Xml.XmlNode cteDadosMsg) { - this.cteRecepcaoLoteAsync(cteDadosMsg, null); - } - - /// - public void cteRecepcaoLoteAsync(System.Xml.XmlNode cteDadosMsg, object userState) { - if ((this.cteRecepcaoLoteOperationCompleted == null)) { - this.cteRecepcaoLoteOperationCompleted = new System.Threading.SendOrPostCallback(this.OncteRecepcaoLoteOperationCompleted); - } - this.InvokeAsync("cteRecepcaoLote", new object[] { - cteDadosMsg}, this.cteRecepcaoLoteOperationCompleted, userState); - } - - private void OncteRecepcaoLoteOperationCompleted(object arg) { - if ((this.cteRecepcaoLoteCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.cteRecepcaoLoteCompleted(this, new cteRecepcaoLoteCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao", IsNullable=false)] - public partial class cteCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void cteRecepcaoLoteCompletedEventHandler(object sender, cteRecepcaoLoteCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class cteRecepcaoLoteCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal cteRecepcaoLoteCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/WsdlCte/Homologacao/RetornoRecepcao/CteRetRecepcao.cs b/CTeRefatorar/WsdlCte/Homologacao/RetornoRecepcao/CteRetRecepcao.cs deleted file mode 100755 index f22595062..000000000 --- a/CTeRefatorar/WsdlCte/Homologacao/RetornoRecepcao/CteRetRecepcao.cs +++ /dev/null @@ -1,167 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace FusionCore.DFe.WsdlCte.Homologacao.RetornoRecepcao -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="CteRetRecepcaoSoap12", Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao")] - public partial class CteRetRecepcao : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private cteCabecMsg cteCabecMsgValueField; - - private System.Threading.SendOrPostCallback cteRetRecepcaoOperationCompleted; - - /// - public CteRetRecepcao(string url) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = url; - } - - public cteCabecMsg cteCabecMsgValue { - get { - return this.cteCabecMsgValueField; - } - set { - this.cteCabecMsgValueField = value; - } - } - - /// - public event cteRetRecepcaoCompletedEventHandler cteRetRecepcaoCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("cteCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao/cteRetRecepcao", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao")] - public System.Xml.XmlNode cteRetRecepcao([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao")] System.Xml.XmlNode cteDadosMsg) { - object[] results = this.Invoke("cteRetRecepcao", new object[] { - cteDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BegincteRetRecepcao(System.Xml.XmlNode cteDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("cteRetRecepcao", new object[] { - cteDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndcteRetRecepcao(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void cteRetRecepcaoAsync(System.Xml.XmlNode cteDadosMsg) { - this.cteRetRecepcaoAsync(cteDadosMsg, null); - } - - /// - public void cteRetRecepcaoAsync(System.Xml.XmlNode cteDadosMsg, object userState) { - if ((this.cteRetRecepcaoOperationCompleted == null)) { - this.cteRetRecepcaoOperationCompleted = new System.Threading.SendOrPostCallback(this.OncteRetRecepcaoOperationCompleted); - } - this.InvokeAsync("cteRetRecepcao", new object[] { - cteDadosMsg}, this.cteRetRecepcaoOperationCompleted, userState); - } - - private void OncteRetRecepcaoOperationCompleted(object arg) { - if ((this.cteRetRecepcaoCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.cteRetRecepcaoCompleted(this, new cteRetRecepcaoCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao", IsNullable=false)] - public partial class cteCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void cteRetRecepcaoCompletedEventHandler(object sender, cteRetRecepcaoCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class cteRetRecepcaoCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal cteRetRecepcaoCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/WsdlCte/UrlServicoSefaz.cs b/CTeRefatorar/WsdlCte/UrlServicoSefaz.cs deleted file mode 100755 index 2c643de25..000000000 --- a/CTeRefatorar/WsdlCte/UrlServicoSefaz.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace FusionCore.DFe.WsdlCte -{ - public class UrlServicoSefaz - { - public string CteRecepcao { get; set; } - public string CteRetRecepcao { get; set; } - public string CteInutilizacao { get; set; } - public string CteStatusServico { get; set; } - public string CteRecepcaoEvento { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionAssinaturaDigital.cs b/CTeRefatorar/XmlCte/FusionAssinaturaDigital.cs deleted file mode 100755 index ebd496adc..000000000 --- a/CTeRefatorar/XmlCte/FusionAssinaturaDigital.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - [XmlRoot(Namespace = "http://www.w3.org/2000/09/xmldsig#", ElementName = "Signature")] - public class FusionAssinaturaDigital - { - [XmlElement(ElementName = "SignedInfo")] - public FusionInformacoesAssinatura InformacoesAssinatura { get; set; } - - [XmlElement(ElementName = "SignatureValue")] - public string SignatureValue { get; set; } - - [XmlElement(ElementName = "KeyInfo")] - public FusionKeyInfo KeyInfo { get; set; } - } - - [Serializable] - public class FusionKeyInfo - { - [XmlElement(ElementName = "X509Data")] - public FusionX509Data X509Data { get; set; } - - public FusionKeyInfo() - { - X509Data = new FusionX509Data(); - } - } - - [Serializable] - public class FusionX509Data - { - [XmlElement(ElementName = "X509Certificate")] - public string X509Certificate { get; set; } - } - - [Serializable] - public class FusionInformacoesAssinatura - { - [XmlElement(ElementName = "CanonicalizationMethod")] - public FusionCanonicalizationMethod CanonicalizationMethod { get; set; } - - [XmlElement(ElementName = "SignatureMethod")] - public FusionSignatureMethod SignatureMethod { get; set; } - - [XmlElement(ElementName = "Reference")] - public FusionReference Reference { get; set; } - } - - [Serializable] - public class FusionCanonicalizationMethod - { - [XmlAttribute] - public string Algorithm { get; set; } - } - - [Serializable] - public class FusionSignatureMethod - { - [XmlAttribute] - public string Algorithm { get; set; } - } - - [Serializable] - public class FusionReference - { - [XmlAttribute(AttributeName = "URI")] - public string Uri { get; set; } - - [XmlArray(ElementName = "Transforms"), XmlArrayItem(typeof (FusionTransform), ElementName = "Transform")] - public List Transforms { get; set; } - - [XmlElement(ElementName = "DigestMethod")] - public FusionDigestMethod DigestMethod { get; set; } - - [XmlElement(ElementName = "DigestValue")] - public string DigestValue { get; set; } - - public FusionReference() - { - Transforms = new List(); - } - } - - [Serializable] - [XmlRoot(ElementName = "Transform")] - public class FusionTransform - { - [XmlAttribute] - public string Algorithm { get; set; } - } - - [Serializable] - public class FusionDigestMethod - { - [XmlAttribute] - public string Algorithm { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionCte.cs b/CTeRefatorar/XmlCte/FusionCte.cs deleted file mode 100755 index 7e7489a01..000000000 --- a/CTeRefatorar/XmlCte/FusionCte.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "CTe")] - public class FusionCTe - { - [XmlElement(ElementName = "infCte")] - public FusionInformacoesCTe InformacoesCTe { get; set; } - - [XmlElement(ElementName = "Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#")] - public FusionAssinaturaDigital AssinaturaDigital { get; set; } - - public FusionCTe() - { - InformacoesCTe = new FusionInformacoesCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionDacteCTe.cs b/CTeRefatorar/XmlCte/FusionDacteCTe.cs deleted file mode 100755 index 435df26bc..000000000 --- a/CTeRefatorar/XmlCte/FusionDacteCTe.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionDacteCTe - { - [XmlEnum("1")] - Retrato = 1, - - [XmlEnum("2")] - Paisagem = 2 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionDadosComplementaresCTe.cs b/CTeRefatorar/XmlCte/FusionDadosComplementaresCTe.cs deleted file mode 100755 index 6734ef465..000000000 --- a/CTeRefatorar/XmlCte/FusionDadosComplementaresCTe.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionDadosComplementaresCTe - { - [XmlElement(ElementName = "Entrega")] - public FusionEntregaCTe Entrega { get; set; } - - [XmlElement(ElementName = "xObs")] - public string ObservacoesGerais { get; set; } - - public FusionDadosComplementaresCTe() - { - Entrega = new FusionEntregaCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionDestinatarioCTe.cs b/CTeRefatorar/XmlCte/FusionDestinatarioCTe.cs deleted file mode 100755 index b6c572b39..000000000 --- a/CTeRefatorar/XmlCte/FusionDestinatarioCTe.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionDestinatarioCTe - { - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "CPF")] - public string Cpf { get; set; } - - [XmlElement(ElementName = "IE")] - public string Ie { get; set; } - - [XmlElement(ElementName = "xNome")] - public string Nome { get; set; } - - [XmlElement(ElementName = "fone")] - public string Telefone { get; set; } - - [XmlElement(ElementName = "ISUF")] - public string InscricaoSuframa { get; set; } - - [XmlElement(ElementName = "enderDest")] - public FusionEnderecoTomadorCTe Endereco { get; set; } - - public FusionDestinatarioCTe() - { - Endereco = new FusionEnderecoTomadorCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionEmitenteCTe.cs b/CTeRefatorar/XmlCte/FusionEmitenteCTe.cs deleted file mode 100755 index 72bd9d46b..000000000 --- a/CTeRefatorar/XmlCte/FusionEmitenteCTe.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionEmitenteCTe - { - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "IE")] - public string Ie { get; set; } - - [XmlElement(ElementName = "xNome")] - public string RazaoSocialOuNome { get; set; } - - [XmlElement(ElementName = "xFant")] - public string NomeFantasia { get; set; } - - [XmlElement(ElementName = "enderEmit")] - public FusionEnderecoCTe Endereco { get; set; } - - public FusionEmitenteCTe() - { - Endereco = new FusionEnderecoCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionEnderecoCTe.cs b/CTeRefatorar/XmlCte/FusionEnderecoCTe.cs deleted file mode 100755 index c30269bc2..000000000 --- a/CTeRefatorar/XmlCte/FusionEnderecoCTe.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionEnderecoCTe - { - [XmlElement(ElementName = "xLgr")] - public string Logradouro { get; set; } - - [XmlElement(ElementName = "nro")] - public string Numero { get; set; } - - [XmlElement(ElementName = "xCpl")] - public string Complemento { get; set; } - - [XmlElement(ElementName = "xBairro")] - public string Bairro { get; set; } - - [XmlElement(ElementName = "cMun")] - public long CodigoIbgeMunicipio { get; set; } - - [XmlElement(ElementName = "xMun")] - public string NomeMunicipio { get; set; } - - [XmlElement(ElementName = "CEP")] - public string Cep { get; set; } - - [XmlElement(ElementName = "UF")] - public string SiglaUf { get; set; } - - [XmlElement(ElementName = "fone")] - public string Telefone { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionEnderecoTomadorCTe.cs b/CTeRefatorar/XmlCte/FusionEnderecoTomadorCTe.cs deleted file mode 100755 index da8716bc5..000000000 --- a/CTeRefatorar/XmlCte/FusionEnderecoTomadorCTe.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionEnderecoTomadorCTe - { - [XmlElement(ElementName = "xLgr")] - public string Logradouro { get; set; } - - [XmlElement(ElementName = "nro")] - public string Numero { get; set; } - - [XmlElement(ElementName = "xCpl")] - public string Complemento { get; set; } - - [XmlElement(ElementName = "xBairro")] - public string Bairro { get; set; } - - [XmlElement(ElementName = "cMun")] - public long CodigoIbgeMunicipio { get; set; } - - [XmlElement(ElementName = "xMun")] - public string NomeMunicipio { get; set; } - - [XmlElement(ElementName = "CEP")] - public string Cep { get; set; } - - [XmlElement(ElementName = "UF")] - public string SiglaUf { get; set; } - - [XmlElement(ElementName = "cPais")] - public string CodigoPais { get; set; } - - [XmlElement(ElementName = "xPais")] - public string NomePais { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionEntregaCTe.cs b/CTeRefatorar/XmlCte/FusionEntregaCTe.cs deleted file mode 100755 index 944f63c1e..000000000 --- a/CTeRefatorar/XmlCte/FusionEntregaCTe.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionEntregaCTe - { - [XmlElement(ElementName = "semData")] - public FusionSemDataCTe SemData { get; set; } - - [XmlElement(ElementName = "comData")] - public FusionComDataCTe ComData { get; set; } - - [XmlElement(ElementName = "noPeriodo")] - public FusionNoPeriodoCTe NoPeriodo { get; set; } - - [XmlElement(ElementName = "semHora")] - public FusionSemHoraCTe SemHora { get; set; } - - [XmlElement(ElementName = "comHora")] - public FusionComHoraCTe ComHora { get; set; } - - [XmlElement(ElementName = "noInter")] - public FusionIntervaloHora IntervaloHora { get; set; } - } - - [Serializable] - public class FusionSemDataCTe - { - [XmlElement(ElementName = "tpPer")] - public FusionTipoPeriodoDataCTe TipoPeriodoData { get; set; } - - public FusionSemDataCTe() - { - TipoPeriodoData = FusionTipoPeriodoDataCTe.SemDataDefinida; - } - } - - [Serializable] - public class FusionComDataCTe - { - [XmlElement(ElementName = "tpPer")] - public FusionTipoPeriodoDataCTe TipoPeriodoData { get; set; } - - [XmlElement(ElementName = "dProg")] - public string DataProgramada { get; set; } - } - - [Serializable] - public class FusionNoPeriodoCTe - { - [XmlElement(ElementName = "tpPer")] - public FusionTipoPeriodoDataCTe TipoPeriodoData { get; set; } - - [XmlElement(ElementName = "dIni")] - public string DataInicial { get; set; } - - [XmlElement(ElementName = "dFim")] - public string DataFinal { get; set; } - - public FusionNoPeriodoCTe() - { - TipoPeriodoData = FusionTipoPeriodoDataCTe.NoPeriodo; - } - } - - - [Serializable] - public class FusionSemHoraCTe - { - [XmlElement(ElementName = "tpHor")] - public FusionTipoPeriodoHoraCTe TipoPeriodoHora { get; set; } - - public FusionSemHoraCTe() - { - TipoPeriodoHora = FusionTipoPeriodoHoraCTe.SemHoraDefinida; - } - } - - [Serializable] - public class FusionComHoraCTe - { - [XmlElement(ElementName = "tpHor")] - public FusionTipoPeriodoHoraCTe TipoPeriodoHora { get; set; } - - [XmlElement(ElementName = "hProg")] - public string HoraProgramada { get; set; } - } - - [Serializable] - public class FusionIntervaloHora - { - [XmlElement(ElementName = "tpHor")] - public FusionTipoPeriodoHoraCTe TipoPeriodoHora { get; set; } - - [XmlElement(ElementName = "hIni")] - public string HoraInicial { get; set; } - - [XmlElement(ElementName = "hFim")] - public string HoraFinal { get; set; } - - public FusionIntervaloHora() - { - TipoPeriodoHora = FusionTipoPeriodoHoraCTe.NoIntervaloDeTempo; - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionEstadoUFCTe.cs b/CTeRefatorar/XmlCte/FusionEstadoUFCTe.cs deleted file mode 100755 index 961f1bc8c..000000000 --- a/CTeRefatorar/XmlCte/FusionEstadoUFCTe.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionEstadoUFCTe - { - [XmlEnum("12")] - AC = 12, - - [XmlEnum("27")] - AL = 27, - - [XmlEnum("16")] - AP = 16, - - [XmlEnum("13")] - AM = 13, - - [XmlEnum("29")] - BA = 29, - - [XmlEnum("23")] - CE = 23, - - [XmlEnum("53")] - DF = 53, - - [XmlEnum("32")] - ES = 32, - - [XmlEnum("52")] - GO = 52, - - [XmlEnum("21")] - MA = 21, - - [XmlEnum("51")] - MT = 51, - - [XmlEnum("50")] - MS = 50, - - [XmlEnum("31")] - MG = 31, - - [XmlEnum("15")] - PA = 15, - - [XmlEnum("25")] - PB = 25, - - [XmlEnum("41")] - PR = 41, - - [XmlEnum("26")] - PE = 26, - - [XmlEnum("22")] - PI = 22, - - [XmlEnum("33")] - RJ = 33, - - [XmlEnum("24")] - RN = 24, - - [XmlEnum("43")] - RS = 43, - - [XmlEnum("11")] - RO = 11, - - [XmlEnum("14")] - RR = 14, - - [XmlEnum("42")] - SC = 42, - - [XmlEnum("35")] - SP = 35, - - [XmlEnum("28")] - SE = 28, - - [XmlEnum("17")] - TO = 17 - } - - public static class ExtEstadoUFCTe - { - public static string GetCodigoUF(this FusionEstadoUFCTe estado) - { - var codigo = ((byte) estado).ToString(); - - return codigo; - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionExpedidorCTe.cs b/CTeRefatorar/XmlCte/FusionExpedidorCTe.cs deleted file mode 100755 index ae10c2ebe..000000000 --- a/CTeRefatorar/XmlCte/FusionExpedidorCTe.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionExpedidorCTe - { - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "CPF")] - public string Cpf { get; set; } - - [XmlElement(ElementName = "IE")] - public string Ie { get; set; } - - [XmlElement(ElementName = "xNome")] - public string Nome { get; set; } - - [XmlElement(ElementName = "fone")] - public string Telefone { get; set; } - - [XmlElement(ElementName = "enderExped")] - public FusionEnderecoTomadorCTe Endereco { get; set; } - - [XmlElement(ElementName = "email")] - public string Email { get; set; } - - public FusionExpedidorCTe() - { - Endereco = new FusionEnderecoTomadorCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionFormaPagamentoCTe.cs b/CTeRefatorar/XmlCte/FusionFormaPagamentoCTe.cs deleted file mode 100755 index 7476ecf11..000000000 --- a/CTeRefatorar/XmlCte/FusionFormaPagamentoCTe.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionFormaPagamentoCTe - { - [XmlEnum("0")] - Pago = 0, - - [XmlEnum("1")] - Apagar = 1, - - [XmlEnum("2")] - Outros = 2 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionIdentificacaoCTe.cs b/CTeRefatorar/XmlCte/FusionIdentificacaoCTe.cs deleted file mode 100755 index 4359c19c3..000000000 --- a/CTeRefatorar/XmlCte/FusionIdentificacaoCTe.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionIdentificacaoCTe - { - [XmlElement(ElementName = "cUF")] - public FusionEstadoUFCTe EstadoUF { get; set; } - - [XmlElement(ElementName = "cCT")] - public long CodigoNumerico { get; set; } - - [XmlElement(ElementName = "CFOP")] - public string Cfop { get; set; } - - [XmlElement(ElementName = "natOp")] - public string NaturezaOperacao { get; set; } - - [XmlElement(ElementName = "forPag")] - public FusionFormaPagamentoCTe FormaPagamento { get; set; } - - [XmlElement(ElementName = "mod")] - public FusionTipoDocumentoFiscalCTe TipoDocumentoFiscal { get; set; } - - [XmlElement(ElementName = "serie")] - public short Serie { get; set; } - - [XmlElement(ElementName = "nCT")] - public long NumeroDocumento { get; set; } - - [XmlElement(ElementName = "dhEmi")] - public string EmitidaEm { get; set; } - - [XmlElement(ElementName = "tpImp")] - public FusionDacteCTe FusionDacteCTe { get; set; } - - [XmlElement(ElementName = "tpEmis")] - public FusionTipoEmissaoCTe FusionTipoEmissaoCTe { get; set; } - - [XmlElement(ElementName = "cDV")] - public byte DigitoVerificador { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "tpCTe")] - public FusionTipoCTe TipoCTe { get; set; } - - [XmlElement(ElementName = "procEmi")] - public FusionTipoProcessoEmissaoCTe TipoProcessoEmissao { get; set; } - - [XmlElement(ElementName = "verProc")] - public string VersaoAplicativoEmissor { get; set; } - - [XmlElement(ElementName = "cMunEnv")] - public long CodigoIbgeMunicipioEnvio { get; set; } - - [XmlElement(ElementName = "xMunEnv")] - public string NomeMunicipioEnvio { get; set; } - - [XmlElement(ElementName = "UFEnv")] - public string SiglaDeEnvioUF { get; set; } - - [XmlElement(ElementName = "modal")] - public FusionModalCTe Modal { get; set; } - - [XmlElement(ElementName = "tpServ")] - public FusionTipoServicoCTe TipoServico { get; set; } - - [XmlElement(ElementName = "cMunIni")] - public long CodigoIbgeMunicipioInicioOperacao { get; set; } - - [XmlElement(ElementName = "xMunIni")] - public string NomeMunicipioInicioOperacao { get; set; } - - [XmlElement(ElementName = "UFIni")] - public string SiglaDeUfInicioOperacao { get; set; } - - [XmlElement(ElementName = "cMunFim")] - public long CodigoIbgeMunicipioFimOperacao { get; set; } - - [XmlElement(ElementName = "xMunFim")] - public string NomeMunicipioFimOperacao { get; set; } - - [XmlElement(ElementName = "UFFim")] - public string SiglaDeUfFimOperacao { get; set; } - - [XmlElement(ElementName = "retira")] - public FusionIndicadorRecebedorCTe IndicadorRecebedor { get; set; } - - [XmlElement(ElementName = "toma03")] - public FusionIndicadorPapelTomadorCTe IndicadorPapelTomador { get; set; } - - [XmlElement(ElementName = "toma4")] - public FusionTomadorOutrosCTe FusionTomadorOutrosCTe { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionImpostoCTe.cs b/CTeRefatorar/XmlCte/FusionImpostoCTe.cs deleted file mode 100755 index afad730f5..000000000 --- a/CTeRefatorar/XmlCte/FusionImpostoCTe.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionImpostoCTe - { - private decimal? _totalTributosFederais; - - [XmlElement(ElementName = "ICMS")] - public FusionIcmsCTe FusionIcmsCTe { get; set; } - - [XmlElement(ElementName = "vTotTrib")] - public decimal? TotalTributosFederais - { - get { return _totalTributosFederais; } - set { _totalTributosFederais = value; } - } - - public bool TotalTributosFederaisSpecified => _totalTributosFederais.HasValue; - - public FusionImpostoCTe() - { - FusionIcmsCTe = new FusionIcmsCTe(); - } - } - - [Serializable] - public class FusionIcmsCTe - { - [XmlElement(ElementName = "ICMSSN")] - public FusionIcmsSimplesNacionalCTe IcmsSimplesNacional { get; set; } - - public FusionIcmsCTe() - { - IcmsSimplesNacional = new FusionIcmsSimplesNacionalCTe(); - } - } - - [Serializable] - public class FusionIcmsSimplesNacionalCTe - { - [XmlElement(ElementName = "indSN")] - public int IndicadorSimplesNacional { get; set; } - - public FusionIcmsSimplesNacionalCTe() - { - IndicadorSimplesNacional = 1; - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionIndicadorPapelTomadorCTe.cs b/CTeRefatorar/XmlCte/FusionIndicadorPapelTomadorCTe.cs deleted file mode 100755 index 2a81d6911..000000000 --- a/CTeRefatorar/XmlCte/FusionIndicadorPapelTomadorCTe.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionIndicadorPapelTomadorCTe - { - [XmlElement(ElementName = "toma")] - public FusionTipoTomadorCTe TipoTomador { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionIndicadorRecebedorCTe.cs b/CTeRefatorar/XmlCte/FusionIndicadorRecebedorCTe.cs deleted file mode 100755 index a01c3d799..000000000 --- a/CTeRefatorar/XmlCte/FusionIndicadorRecebedorCTe.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionIndicadorRecebedorCTe - { - [XmlEnum("0")] - Sim, - - [XmlEnum("1")] - Nao - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionInformacaoCTeNormalCTe.cs b/CTeRefatorar/XmlCte/FusionInformacaoCTeNormalCTe.cs deleted file mode 100755 index 5fb4b2610..000000000 --- a/CTeRefatorar/XmlCte/FusionInformacaoCTeNormalCTe.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionInformacaoCTeNormalCTe - { - [XmlElement(ElementName = "infCarga")] - public FusionInformacaoCargaCTe InformacaoCarga { get; set; } - - [XmlElement(ElementName = "infDoc")] - public FusionInformacaoDocumentoCTe InformacaoDocumento { get; set; } - - [XmlElement(ElementName = "seg")] - public List InfoSeguroDaCarga { get; set; } - - [XmlElement(ElementName = "infModal")] - public FusionInformacaoModalCTe Modal { get; set; } - - [XmlElement(ElementName = "peri")] - public List ProdutosPerigosos { get; set; } - - [XmlElement(ElementName = "veicNovos")] - public List VeiculosTransportados { get; set; } - - public FusionInformacaoCTeNormalCTe() - { - InformacaoCarga = new FusionInformacaoCargaCTe(); - InformacaoDocumento = new FusionInformacaoDocumentoCTe(); - InfoSeguroDaCarga = new List(); - Modal = new FusionInformacaoModalCTe(); - ProdutosPerigosos = new List(); - VeiculosTransportados = new List(); - } - } - - [Serializable] - public class FusionInformacaoCargaCTe - { - private string _outrasCaracteristicas; - private decimal? _valorTotalCarga; - - [XmlElement(ElementName = "vCarga")] - public decimal? ValorTotalCarga - { - get { return _valorTotalCarga; } - set { _valorTotalCarga = value; } - } - - [XmlElement(ElementName = "proPred")] - public string NomeProdutoPredominante { get; set; } - - [XmlElement(ElementName = "xOutCat")] - public string OutrasCaracteristicas - { - get { return _outrasCaracteristicas; } - set { _outrasCaracteristicas = value; } - } - - [XmlElement(ElementName = "infQ")] - public List InformacoesQuantidadeDaCarga { get; set; } - - public bool OutrasCaracteristicasSpecified - { - get { return !string.IsNullOrEmpty(_outrasCaracteristicas); } - } - - public bool ValorTotalCargaSpecified => _valorTotalCarga.HasValue; - - public FusionInformacaoCargaCTe() - { - InformacoesQuantidadeDaCarga = new List(); - } - } - - [Serializable] - public class FusionInformacoesQuantidadeDaCargaCTe - { - [XmlElement(ElementName = "cUnid")] - public FusionUnidadeMedidaCTe UnidadeMedida { get; set; } - - [XmlElement(ElementName = "tpMed")] - public string DescricaoMedida { get; set; } - - [XmlElement(ElementName = "qCarga")] - public decimal Quantidade { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionInformacaoDocumentoCTe.cs b/CTeRefatorar/XmlCte/FusionInformacaoDocumentoCTe.cs deleted file mode 100755 index 882616c33..000000000 --- a/CTeRefatorar/XmlCte/FusionInformacaoDocumentoCTe.cs +++ /dev/null @@ -1,143 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionInformacaoDocumentoCTe - { - [XmlElement(ElementName = "infNFe")] - public List DocumentosNFe { get; set; } - - [XmlElement(ElementName = "infOutros")] - public List DocumentosOutros { get; set; } - - [XmlElement(ElementName = "infNF")] - public List DocumentosImpressos { get; set; } - - public FusionInformacaoDocumentoCTe() - { - DocumentosNFe = new List(); - DocumentosOutros = new List(); - DocumentosImpressos = new List(); - } - } - - [Serializable] - public class FusionDocumentoImpressoCTe - { - [XmlElement(ElementName = "nRoma")] - public string NumeroRomaneiro { get; set; } - - [XmlElement(ElementName = "nPed")] - public string NumeroPedido { get; set; } - - [XmlElement(ElementName = "mod")] - public FusionModeloNotaFiscalCTe ModeloNotaFiscal { get; set; } - - [XmlElement(ElementName = "serie")] - public short Serie { get; set; } - - [XmlElement(ElementName = "nDoc")] - public string Numero { get; set; } - - [XmlIgnore] - public DateTime DataEmissao { get; set; } - - [XmlElement(ElementName = "dEmi")] - public string ProxyDataEmissao - { - get { return DataEmissao.ToString("yyyy-MM-dd"); } - set { DataEmissao = DateTime.Parse(value); } - } - - [XmlElement(ElementName = "vBC")] - public decimal BaseCacluloIcms { get; set; } - - [XmlElement(ElementName = "vICMS")] - public decimal IcmsTotal { get; set; } - - [XmlElement(ElementName = "vBCST")] - public decimal BaseCalculoIcmsSt { get; set; } - - [XmlElement(ElementName = "vST")] - public decimal IcmsStTotal { get; set; } - - [XmlElement(ElementName = "vProd")] - public decimal ValorTotalProdutos { get; set; } - - [XmlElement(ElementName = "vNF")] - public decimal ValorTotalNF { get; set; } - - [XmlElement(ElementName = "nCFOP")] - public string CfopPredominante { get; set; } - - [XmlElement(ElementName = "nPeso")] - public decimal? PesoTotalEmKg { get; set; } - - [XmlElement(ElementName = "PIN")] - public string PinSuframa { get; set; } - - [XmlIgnore] - public DateTime? DataPrevista { get; set; } - - [XmlElement(ElementName = "dPrev")] - public string ProxyDataPrevista - { - get { return DataPrevista?.ToString("yyyy-MM-dd"); } - set { DataPrevista = DateTime.Parse(value); } - } - - public bool PesoTotalEmKgSpecified => PesoTotalEmKg.HasValue; - } - - [Serializable] - public class FusionDocuemntoOutroCTe - { - [XmlIgnore] - public DateTime? DataEmissao { get; set; } - - [XmlIgnore] - public DateTime? DataPrevisaoEntrega { get; set; } - - [XmlElement(ElementName = "tpDoc")] - public FusionTipoDocumentoOriginarioCTe TipoDocumentoOriginario { get; set; } - - [XmlElement(ElementName = "descOutros")] - public string DescricaoOutros { get; set; } - - [XmlElement(ElementName = "nDoc")] - public string Numero { get; set; } - - [XmlElement(ElementName = "dEmi")] - public string ProxyDataEmissao - { - get { return DataEmissao?.ToString("yyyy-MM-dd"); } - set { DataEmissao = DateTime.Parse(value); } - } - - [XmlElement(ElementName = "vDocFisc")] - public decimal Valor { get; set; } - - [XmlElement(ElementName = "dPrev")] - public string ProxyDataPrevisaoEntrega - { - get { return DataPrevisaoEntrega?.ToString("yyyy-MM-dd"); } - set { DataPrevisaoEntrega = DateTime.Parse(value); } - } - } - - [Serializable] - public class FusionDocumentosNFe - { - [XmlElement(ElementName = "chave")] - public string Chave { get; set; } - - [XmlElement(ElementName = "PIN")] - public string PinSuframa { get; set; } - - [XmlElement(ElementName = "dPrev")] - public string DataPrevistaEntrega { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionInformacaoModalCTe.cs b/CTeRefatorar/XmlCte/FusionInformacaoModalCTe.cs deleted file mode 100755 index f2fe8eccd..000000000 --- a/CTeRefatorar/XmlCte/FusionInformacaoModalCTe.cs +++ /dev/null @@ -1,209 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionInformacaoModalCTe - { - [XmlAttribute(AttributeName = "versaoModal")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "rodo")] - public FusionRodoviarioCTe Rodoviario { get; set; } - - public FusionInformacaoModalCTe() - { - Rodoviario = new FusionRodoviarioCTe(); - } - } - - [Serializable] - public class FusionRodoviarioCTe - { - [XmlElement(ElementName = "RNTRC")] - public string Rntrc { get; set; } - - [XmlElement(ElementName = "dPrev")] - public string DataPrevisaoEntrega { get; set; } - - [XmlElement(ElementName = "lota")] - public FusionIndicadorLotacaoCTe IndicadorLotacao { get; set; } - - [XmlElement(ElementName = "CIOT")] - public string Ciot { get; set; } - - [XmlElement(ElementName = "veic")] - public List VeiculosRodoviarios { get; set; } - - [XmlElement(ElementName = "moto")] - public List Motoristas { get; set; } - - public FusionRodoviarioCTe() - { - VeiculosRodoviarios = new List(); - Motoristas = new List(); - } - } - - [Serializable] - public class FusionMotoristaRodoviarioCTe - { - [XmlElement(ElementName = "xNome")] - public string Nome { get; set; } - - [XmlElement(ElementName = "CPF")] - public string Cpf { get; set; } - } - - [Serializable] - public enum FusionIndicadorLotacaoCTe - { - [XmlEnum("0")] - Nao, - - [XmlEnum("1")] - Sim - } - - [Serializable] - public class FusionVeiculoRodoviarioCTe - { - [XmlElement(ElementName = "cInt")] - public string CodigoInterno { get; set; } - - [XmlElement(ElementName = "RENAVAM")] - public string Renavam { get; set; } - - [XmlElement(ElementName = "placa")] - public string Placa { get; set; } - - [XmlElement(ElementName = "tara")] - public int Tara { get; set; } - - [XmlElement(ElementName = "capKG")] - public int CapacidadeEmKg { get; set; } - - [XmlElement(ElementName = "capM3")] - public short CapacidadeEmM3 { get; set; } - - [XmlElement(ElementName = "tpProp")] - public FusionProprietarioVeiculoCTe Proprietario { get; set; } - - [XmlElement(ElementName = "tpVeic")] - public FusionTipoVeiculoCTe TipoVeiculo { get; set; } - - [XmlElement(ElementName = "tpRod")] - public FusionRodadoCTe TipoRodado { get; set; } - - [XmlElement(ElementName = "tpCar")] - public FusionTipoCarroceriaCTe TipoCarroceria { get; set; } - - [XmlElement(ElementName = "UF")] - public string SiglaUF { get; set; } - - [XmlElement(ElementName = "prop")] - public FusionProprietarioVeiculoRodoviarioCTe ProprietarioVeiculo { get; set; } - } - - [Serializable] - public class FusionProprietarioVeiculoRodoviarioCTe - { - [XmlElement(ElementName = "CPF")] - public string Cpf { get; set; } - - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "RNTRC")] - public string Rntrc { get; set; } - - [XmlElement(ElementName = "xNome")] - public string Nome { get; set; } - - [XmlElement(ElementName = "IE")] - public string InscricaoEstadual { get; set; } - - [XmlElement(ElementName = "UF")] - public string SiglaUf { get; set; } - - [XmlElement(ElementName = "tpProp")] - public FusionTipoProprietarioCTe TipoProprietario { get; set; } - } - - public enum FusionProprietarioVeiculoCTe - { - [XmlEnum("P")] - Proprietario, - - [XmlEnum("T")] - Terceiro - } - - public enum FusionTipoVeiculoCTe - { - [XmlEnum("0")] - Tracao, - - [XmlEnum("1")] - Reboque - } - - public enum FusionRodadoCTe - { - [XmlEnum("00")] - NaoAplicavel, - - [XmlEnum("01")] - Truck, - - [XmlEnum("02")] - Toco, - - [XmlEnum("03")] - CavaloMecanico, - - [XmlEnum("04")] - Van, - - [XmlEnum("05")] - Utilitario, - - [XmlEnum("06")] - Outro - } - - public enum FusionTipoCarroceriaCTe - { - [XmlEnum("00")] - NaoAplicavel, - - [XmlEnum("01")] - Aberta, - - [XmlEnum("02")] - FechadaBau, - - [XmlEnum("03")] - Granelera, - - [XmlEnum("04")] - PortaContainer, - - [XmlEnum("05")] - Sider - } - - public enum FusionTipoProprietarioCTe - { - [XmlEnum("0")] - TacAgregado, - - [XmlEnum("1")] - TacIndependente, - - [XmlEnum("2")] - Outros - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionInformacoesCte.cs b/CTeRefatorar/XmlCte/FusionInformacoesCte.cs deleted file mode 100755 index 73b851a50..000000000 --- a/CTeRefatorar/XmlCte/FusionInformacoesCte.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionInformacoesCTe - { - private string _id; - private string _versao; - - [XmlAttribute("Id")] - public string Id - { - get { return _id; } - set { _id = value.Replace(" ", "").Trim(); } - } - - [XmlAttribute("versao")] - public string Versao - { - get { return _versao; } - set { _versao = value.Trim(); } - } - - [XmlElement(ElementName = "ide")] - public FusionIdentificacaoCTe Identificacao { get; set; } - - [XmlElement(ElementName = "compl")] - public FusionDadosComplementaresCTe DadosComplementares { get; set; } - - [XmlElement(ElementName = "emit")] - public FusionEmitenteCTe Emitente { get; set; } - - [XmlElement(ElementName = "rem")] - public FusionRemetenteCTe Remetente { get; set; } - - [XmlElement(ElementName = "exped")] - public FusionExpedidorCTe Expedidor { get; set; } - - [XmlElement(ElementName = "receb")] - public FusionRecebedorCTe Recebedor { get; set; } - - [XmlElement(ElementName = "dest")] - public FusionDestinatarioCTe Destinatario { get; set; } - - [XmlElement(ElementName = "vPrest")] - public FusionValoresPrestacaoServicoCTe ValoresPrestacaoServico { get; set; } - - [XmlElement(ElementName = "imp")] - public FusionImpostoCTe Imposto { get; set; } - - [XmlElement(ElementName = "infCTeNorm")] - public FusionInformacaoCTeNormalCTe InformacoesCTeNormal { get; set; } - - public FusionInformacoesCTe() - { - Identificacao = new FusionIdentificacaoCTe(); - DadosComplementares = new FusionDadosComplementaresCTe(); - Emitente = new FusionEmitenteCTe(); - Remetente = new FusionRemetenteCTe(); - Destinatario = new FusionDestinatarioCTe(); - ValoresPrestacaoServico = new FusionValoresPrestacaoServicoCTe(); - Imposto = new FusionImpostoCTe(); - InformacoesCTeNormal = new FusionInformacaoCTeNormalCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionModalCTe.cs b/CTeRefatorar/XmlCte/FusionModalCTe.cs deleted file mode 100755 index b612b7ef6..000000000 --- a/CTeRefatorar/XmlCte/FusionModalCTe.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionModalCTe - { - [XmlEnum("01")] - Rodoviario = 01, - - [XmlEnum("02")] - Aereo = 02, - - [XmlEnum("03")] - Aquaviario = 03, - - [XmlEnum("04")] - Ferroviario = 04, - - [XmlEnum("05")] - Dutoviario = 05, - - [XmlEnum("06")] - Multimodal = 06 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionModeloNotaFiscalCTe.cs b/CTeRefatorar/XmlCte/FusionModeloNotaFiscalCTe.cs deleted file mode 100755 index d727e9791..000000000 --- a/CTeRefatorar/XmlCte/FusionModeloNotaFiscalCTe.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionModeloNotaFiscalCTe - { - [XmlEnum("01")] - NFModelo011AeAvulsa = 01, - - [XmlEnum("04")] - NFdeProdutor = 04 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionProdutoPerigosoCTe.cs b/CTeRefatorar/XmlCte/FusionProdutoPerigosoCTe.cs deleted file mode 100755 index a2f363ef4..000000000 --- a/CTeRefatorar/XmlCte/FusionProdutoPerigosoCTe.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionProdutoPerigosoCTe - { - [XmlElement(ElementName = "nONU")] - public string NumeroOnuUn { get; set; } - - [XmlElement(ElementName = "xNomeAE")] - public string NomeApropriado { get; set; } - - [XmlElement(ElementName = "xClaRisco")] - public string ClasseRisco { get; set; } - - [XmlElement(ElementName = "grEmb")] - public string GrupoEmbalagem { get; set; } - - [XmlElement(ElementName = "qTotProd")] - public string QuantidadeTotalPorProduto { get; set; } - - [XmlElement(ElementName = "qVolTipo")] - public string QuantidadeETiposVolume { get; set; } - - [XmlElement(ElementName = "pontoFulgor")] - public string PontoFulgor { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionRecebedorCTe.cs b/CTeRefatorar/XmlCte/FusionRecebedorCTe.cs deleted file mode 100755 index fe3da4a7d..000000000 --- a/CTeRefatorar/XmlCte/FusionRecebedorCTe.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionRecebedorCTe - { - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "CPF")] - public string Cpf { get; set; } - - [XmlElement(ElementName = "IE")] - public string Ie { get; set; } - - [XmlElement(ElementName = "xNome")] - public string Nome { get; set; } - - [XmlElement(ElementName = "fone")] - public string Telefone { get; set; } - - [XmlElement(ElementName = "enderReceb")] - public FusionEnderecoTomadorCTe Endereco { get; set; } - - [XmlElement(ElementName = "email")] - public string Email { get; set; } - - public FusionRecebedorCTe() - { - Endereco = new FusionEnderecoTomadorCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionRemetenteCTe.cs b/CTeRefatorar/XmlCte/FusionRemetenteCTe.cs deleted file mode 100755 index 4097cff54..000000000 --- a/CTeRefatorar/XmlCte/FusionRemetenteCTe.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionRemetenteCTe - { - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "CPF")] - public string Cpf { get; set; } - - [XmlElement(ElementName = "IE")] - public string Ie { get; set; } - - [XmlElement(ElementName = "xNome")] - public string Nome { get; set; } - - [XmlElement(ElementName = "xFant")] - public string NomeFantasia { get; set; } - - [XmlElement(ElementName = "fone")] - public string Telefone { get; set; } - - [XmlElement(ElementName = "enderReme")] - public FusionEnderecoTomadorCTe Endereco { get; set; } - - public FusionRemetenteCTe() - { - Endereco = new FusionEnderecoTomadorCTe(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionResponsavelSeguroCTe.cs b/CTeRefatorar/XmlCte/FusionResponsavelSeguroCTe.cs deleted file mode 100755 index ee06591a5..000000000 --- a/CTeRefatorar/XmlCte/FusionResponsavelSeguroCTe.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionResponsavelSeguroCTe - { - [XmlEnum("0")] - Remetente, - - [XmlEnum("1")] - Expedidor, - - [XmlEnum("2")] - Recebedor, - - [XmlEnum("3")] - Destinatario, - - [XmlEnum("4")] - Emitente, - - [XmlEnum("5")] - Tomador - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionSeguroCTe.cs b/CTeRefatorar/XmlCte/FusionSeguroCTe.cs deleted file mode 100755 index 374ce701b..000000000 --- a/CTeRefatorar/XmlCte/FusionSeguroCTe.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionSeguroCTe - { - [XmlElement(ElementName = "respSeg")] - public FusionResponsavelSeguroCTe ResponsavelSeguro { get; set; } - - [XmlElement(ElementName = "xSeg")] - public string NomeSeguradora { get; set; } - - [XmlElement(ElementName = "nApol")] - public string NumeroApolice { get; set; } - - [XmlElement(ElementName = "nAver")] - public string NumeroAverbacao { get; set; } - - [XmlElement(ElementName = "vCarga")] - public decimal? ValorCarga { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoAmbienteCTe.cs b/CTeRefatorar/XmlCte/FusionTipoAmbienteCTe.cs deleted file mode 100755 index 11d5c2ff3..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoAmbienteCTe.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoAmbienteCTe - { - [XmlEnum("1")] - Producao = 1, - - [XmlEnum("2")] - Homologacao = 2 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoCTe.cs b/CTeRefatorar/XmlCte/FusionTipoCTe.cs deleted file mode 100755 index 1f1548220..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoCTe.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoCTe - { - [XmlEnum("0")] - Normal = 0, - - [XmlEnum("1")] - ComplementoDeValores = 1, - - [XmlEnum("2")] - Anulacao = 2, - - [XmlEnum("3")] - Substituto = 3 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoDocumentoFiscalCTe.cs b/CTeRefatorar/XmlCte/FusionTipoDocumentoFiscalCTe.cs deleted file mode 100755 index 816594c42..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoDocumentoFiscalCTe.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoDocumentoFiscalCTe - { - [XmlEnum("57")] - CTe = 57 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoDocumentoOriginarioCTe.cs b/CTeRefatorar/XmlCte/FusionTipoDocumentoOriginarioCTe.cs deleted file mode 100755 index 9b24e27fb..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoDocumentoOriginarioCTe.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoDocumentoOriginarioCTe - { - [XmlEnum("00")] - Declaracao, - - [XmlEnum("10")] - Dutoviario, - - [XmlEnum("99")] - Outros - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoEmissaoCTe.cs b/CTeRefatorar/XmlCte/FusionTipoEmissaoCTe.cs deleted file mode 100755 index 942cdef1c..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoEmissaoCTe.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoEmissaoCTe - { - [XmlEnum("1")] - Normal = 1, - - [XmlEnum("4")] - EpecPelaSvc = 4, - - [XmlEnum("5")] - ContingenciaFsda = 5, - - [XmlEnum("7")] - AutorizacaoSvcRs = 7, - - [XmlEnum("8")] - AutorizacaoSvcSp = 8 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoPeriodoDataCTe.cs b/CTeRefatorar/XmlCte/FusionTipoPeriodoDataCTe.cs deleted file mode 100755 index b1275b766..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoPeriodoDataCTe.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoPeriodoDataCTe - { - [XmlEnum("0")] - SemDataDefinida, - - [XmlEnum("1")] - NaData, - - [XmlEnum("2")] - AteAData, - - [XmlEnum("3")] - APartirDaData, - - [XmlEnum("4")] - NoPeriodo - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoPeriodoHoraCTe.cs b/CTeRefatorar/XmlCte/FusionTipoPeriodoHoraCTe.cs deleted file mode 100755 index 4614c0da4..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoPeriodoHoraCTe.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoPeriodoHoraCTe - { - [XmlEnum("0")] - SemHoraDefinida, - - [XmlEnum("1")] - NoHorario, - - [XmlEnum("2")] - AteOHorario, - - [XmlEnum("3")] - APartirDoHorario, - - [XmlEnum("4")] - NoIntervaloDeTempo - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoProcessoEmissaoCTe.cs b/CTeRefatorar/XmlCte/FusionTipoProcessoEmissaoCTe.cs deleted file mode 100755 index dac646743..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoProcessoEmissaoCTe.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoProcessoEmissaoCTe - { - [XmlEnum("0")] - EmissaoAplicativoContribuinte = 0, - - [XmlEnum("1")] - EmissaoAvulsaPeloFisco = 1, - - [XmlEnum("2")] - EmissaoAvulsaContribuinteCertificadoSite = 2, - - [XmlEnum("3")] - EmissaoPeloContribuinteAplicativoFornecidoFisco = 3 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoServicoCTe.cs b/CTeRefatorar/XmlCte/FusionTipoServicoCTe.cs deleted file mode 100755 index f213d692b..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoServicoCTe.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoServicoCTe - { - [XmlEnum("0")] - Normal = 0, - - [XmlEnum("1")] - Subcontratacao = 1, - - [XmlEnum("2")] - Redespacho = 2, - - [XmlEnum("3")] - RedespachoIntermediario = 3, - - [XmlEnum("4")] - ServicoVinculadoAMultimodal = 4 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTipoTomadorCTe.cs b/CTeRefatorar/XmlCte/FusionTipoTomadorCTe.cs deleted file mode 100755 index 907962f91..000000000 --- a/CTeRefatorar/XmlCte/FusionTipoTomadorCTe.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionTipoTomadorCTe - { - [XmlEnum("0")] - Remetente = 0, - - [XmlEnum("1")] - Expedidor = 1, - - [XmlEnum("2")] - Recebedor = 2, - - [XmlEnum("3")] - Destinatario = 3, - - [XmlEnum("4")] - Outro = 4 - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionTomadorOutrosCTe.cs b/CTeRefatorar/XmlCte/FusionTomadorOutrosCTe.cs deleted file mode 100755 index bf3a4df0b..000000000 --- a/CTeRefatorar/XmlCte/FusionTomadorOutrosCTe.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionTomadorOutrosCTe - { - [XmlElement(ElementName = "toma")] - public FusionTipoTomadorCTe TipoTomador { get; set; } - - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "CPF")] - public string Cpf { get; set; } - - [XmlElement(ElementName = "IE")] - public string IE { get; set; } - - [XmlElement(ElementName = "xNome")] - public string Nome { get; set; } - - [XmlElement(ElementName = "xFant")] - public string Fantasia { get; set; } - - [XmlElement(ElementName = "fone")] - public string Telefone { get; set; } - - [XmlElement(ElementName = "email")] - public string Email { get; set; } - - [XmlElement(ElementName = "enderToma")] - public FusionEnderecoTomadorCTe EnderecoTomador { get; set; } - - public FusionTomadorOutrosCTe() - { - EnderecoTomador = new FusionEnderecoTomadorCTe(); - TipoTomador = FusionTipoTomadorCTe.Outro; - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionUnidadeMedidaCTe.cs b/CTeRefatorar/XmlCte/FusionUnidadeMedidaCTe.cs deleted file mode 100755 index 3a5374da3..000000000 --- a/CTeRefatorar/XmlCte/FusionUnidadeMedidaCTe.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - public enum FusionUnidadeMedidaCTe - { - [XmlEnum("00")] - M3, - - [XmlEnum("01")] - Kg, - - [XmlEnum("02")] - Ton, - - [XmlEnum("03")] - Unidade, - - [XmlEnum("04")] - Litros, - - [XmlEnum("05")] - Mmbtu - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionValoresPrestacaoServicoCTe.cs b/CTeRefatorar/XmlCte/FusionValoresPrestacaoServicoCTe.cs deleted file mode 100755 index b471308f3..000000000 --- a/CTeRefatorar/XmlCte/FusionValoresPrestacaoServicoCTe.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionValoresPrestacaoServicoCTe - { - [XmlElement(ElementName = "vTPrest")] - public decimal ValorTotal { get; set; } - - [XmlElement(ElementName = "vRec")] - public decimal ValorAReceber { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/FusionVeiculoTransportadoCTe.cs b/CTeRefatorar/XmlCte/FusionVeiculoTransportadoCTe.cs deleted file mode 100755 index ee90fd0b8..000000000 --- a/CTeRefatorar/XmlCte/FusionVeiculoTransportadoCTe.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte -{ - [Serializable] - public class FusionVeiculoTransportadoCTe - { - [XmlElement(ElementName = "chassi")] - public string Chassi { get; set; } - - [XmlElement(ElementName = "cCor")] - public string CodigoCor { get; set; } - - [XmlElement(ElementName = "xCor")] - public string DescricaoCor { get; set; } - - [XmlElement(ElementName = "cMod")] - public string CodigoMarcaModelo { get; set; } - - [XmlElement(ElementName = "vUnit")] - public decimal ValorUnitario { get; set; } - - [XmlElement(ElementName = "vFrete")] - public decimal FreteUnitario { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.ConsultaProtocolo/FusionConsultaProtocoloCTe.cs b/CTeRefatorar/XmlCte/XmlCte.ConsultaProtocolo/FusionConsultaProtocoloCTe.cs deleted file mode 100755 index 76d99eb9d..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.ConsultaProtocolo/FusionConsultaProtocoloCTe.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.ConsultaProtocolo -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "consSitCTe")] - public class FusionConsultaProtocoloCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "xServ")] - public string ServicoSolicitado { get; set; } = "CONSULTAR"; - - [XmlElement(ElementName = "chCTe")] - public string Chave { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.ConsultaProtocolo/FusionRetornoConsultaProtocoloCTe.cs b/CTeRefatorar/XmlCte/XmlCte.ConsultaProtocolo/FusionRetornoConsultaProtocoloCTe.cs deleted file mode 100755 index 3e7868861..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.ConsultaProtocolo/FusionRetornoConsultaProtocoloCTe.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.ConsultaProtocolo -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "retConsSitCTe")] - public class FusionRetornoConsultaProtocoloCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicacao { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatus { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "cUF")] - public byte CodigoEstadoUf { get; set; } - - [XmlElement(ElementName = "protCTe")] - public FusionProtocoloAutorizacaoOuDenegacaoCTe ProtocoloAutorizacaoOuDenegacao { get; set; } - } - - [Serializable] - public class FusionProtocoloAutorizacaoOuDenegacaoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "CTe")] - public FusionCTe CTe { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatus/FusionConsultaStatusCTe.cs b/CTeRefatorar/XmlCte/XmlCte.ConsultaStatus/FusionConsultaStatusCTe.cs deleted file mode 100755 index 06791a485..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatus/FusionConsultaStatusCTe.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.ConsultaStatus -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "consStatServCte")] - public class FusionConsultaStatusCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "xServ")] - public string ServicoSolicitado { get; set; } = "STATUS"; - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatus/FusionRetornoConsultaStatusCTe.cs b/CTeRefatorar/XmlCte/XmlCte.ConsultaStatus/FusionRetornoConsultaStatusCTe.cs deleted file mode 100755 index 007846b79..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatus/FusionRetornoConsultaStatusCTe.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.ConsultaStatus -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "retConsStatServCte")] - public class FusionRetornoConsultaStatusCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicacao { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatus { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "cUF")] - public byte CodigoEstadoUf { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public DateTime RecebeuEm { get; set; } - - [XmlElement(ElementName = "tMed")] - public int? TempoMedio { get; set; } - - [XmlElement(ElementName = "dhRetorno")] - public DateTime? PrevisaoRetornoEm { get; set; } - - [XmlElement(ElementName = "xObs")] - public string Observacao { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatusServico/FusionConsultaStatusServicoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.ConsultaStatusServico/FusionConsultaStatusServicoCTe.cs deleted file mode 100755 index b0ee1ea58..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatusServico/FusionConsultaStatusServicoCTe.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.ConsultaStatusServico -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "consStatServCte")] - public class FusionConsultaStatusServicoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "xServ")] - public string ServicoSolicitado { get; set; } = "STATUS"; - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatusServico/FusionRetornoConsultaStatusServicoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.ConsultaStatusServico/FusionRetornoConsultaStatusServicoCTe.cs deleted file mode 100755 index ef8233515..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.ConsultaStatusServico/FusionRetornoConsultaStatusServicoCTe.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.ConsultaStatusServico -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "retConsStatServCte")] - public class FusionRetornoConsultaStatusServicoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicacao { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatus { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "cUF")] - public byte CodigoEstadoUf { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public DateTime DataEHoraRecebimento { get; set; } - - [XmlElement(ElementName = "tMed")] - public int? TempoMedioResposta { get; set; } - - [XmlElement(ElementName = "dhRetorno")] - public DateTime? DataEHoraRetorno { get; set; } - - [XmlElement(ElementName = "xObs")] - public string InformacoesAdicionais { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.Inutilizacao/FusionInutilizacaoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.Inutilizacao/FusionInutilizacaoCTe.cs deleted file mode 100755 index f996f682d..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.Inutilizacao/FusionInutilizacaoCTe.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.Inutilizacao -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "inutCTe")] - public class FusionInutilizacaoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "infInut")] - public FusionDadosDoPedidoCTe DadosDoPedido { get; set; } - - [XmlElement(ElementName = "Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#")] - public FusionAssinaturaDigital AssinaturaDigital { get; set; } - - public FusionInutilizacaoCTe() - { - DadosDoPedido = new FusionDadosDoPedidoCTe(); - } - } - - [Serializable] - public class FusionDadosDoPedidoCTe - { - [XmlAttribute(AttributeName = "Id")] - public string Id { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "xServ")] - public string Servico { get; set; } = "INUTILIZAR"; - - [XmlElement(ElementName = "cUF")] - public byte CodigoEstadoUf { get; set; } - - [XmlElement(ElementName = "ano")] - public byte Ano { get; set; } - - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "mod")] - public FusionTipoDocumentoFiscalCTe TipoDocumentoFiscal { get; set; } - - [XmlElement(ElementName = "serie")] - public short Serie { get; set; } - - [XmlElement(ElementName = "nCTIni")] - public long NumeroInicial { get; set; } - - [XmlElement(ElementName = "nCTFin")] - public long NumeroFinal { get; set; } - - [XmlElement(ElementName = "xJust")] - public string Justificativa { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.Inutilizacao/FustionRetornoInutilizacaoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.Inutilizacao/FustionRetornoInutilizacaoCTe.cs deleted file mode 100755 index 44a203cc0..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.Inutilizacao/FustionRetornoInutilizacaoCTe.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.Inutilizacao -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "retInutCTe")] - public class FustionRetornoInutilizacaoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "infInut")] - public FusionDadosRetornoCTe DadosRetorno { get; set; } - - [XmlElement(ElementName = "Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#")] - public FusionAssinaturaDigital AssinaturaDigital { get; set; } - } - - [Serializable] - public class FusionDadosRetornoCTe - { - [XmlAttribute(AttributeName = "Id")] - public string Id { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicativo { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatus { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "cUF")] - public byte CodigoEstadoUf { get; set; } - - [XmlElement(ElementName = "ano")] - public byte Ano { get; set; } - - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "mod")] - public FusionTipoDocumentoFiscalCTe DocumentoFiscal { get; set; } - - [XmlElement(ElementName = "serie")] - public short Serie { get; set; } - - [XmlElement(ElementName = "nCTIni")] - public long NumeroInicial { get; set; } - - [XmlElement(ElementName = "nCTFin")] - public long NumeroFinal { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public DateTime? ProcessadoEm { get; set; } - - [XmlElement(ElementName = "nPort")] - public string Protocolo { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.LoteEnvio/FusionEnvioCTe.cs b/CTeRefatorar/XmlCte/XmlCte.LoteEnvio/FusionEnvioCTe.cs deleted file mode 100755 index cb03b1d2b..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.LoteEnvio/FusionEnvioCTe.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.LoteEnvio -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "enviCTe")] - public class FusionEnvioCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "idLote")] - public string IdLote { get; set; } - - [XmlElement(ElementName = "CTe")] - public List FusionCTes { get; set; } - - public FusionEnvioCTe() - { - FusionCTes = new List(); - } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.Processada/FusionCTeProcessadaCTe.cs b/CTeRefatorar/XmlCte/XmlCte.Processada/FusionCTeProcessadaCTe.cs deleted file mode 100755 index 8da379a6b..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.Processada/FusionCTeProcessadaCTe.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.Processada -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "cteProc")] - public class FusionCTeProcessadaCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "CTe")] - public FusionCTe CTe { get; set; } - - [XmlElement(ElementName = "protCTe")] - public FusionCteProcessadoCTe ProcessadoCTe { get; set; } - - public FusionCTeProcessadaCTe() - { - ProcessadoCTe = new FusionCteProcessadoCTe(); - } - } - - [Serializable] - public class FusionCteProcessadoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicativo { get; set; } - - [XmlElement(ElementName = "chCTe")] - public string Chave { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public string RecebidaEm { get; set; } - - [XmlElement(ElementName = "nProt")] - public string Protocolo { get; set; } - - [XmlElement(ElementName = "digVal")] - public string DigestValue { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatus { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRegistroEventoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRegistroEventoCTe.cs deleted file mode 100755 index ef4eca0c5..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRegistroEventoCTe.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.RegistroEventos -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "eventoCTe")] - public class FusionRegistroEventoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "infEvento")] - public FusionInformacaoEventoCTe InformacaoEvento { get; set; } - - [XmlElement(ElementName = "Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#")] - public FusionAssinaturaDigital AssinaturaDigital { get; set; } - - public FusionRegistroEventoCTe() - { - InformacaoEvento = new FusionInformacaoEventoCTe(); - } - } - - [Serializable] - public class FusionInformacaoEventoCTe - { - [XmlAttribute(AttributeName = "Id")] - public string Id { get; set; } - - [XmlElement(ElementName = "cOrgao")] - public byte CodigoOrgao { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "CNPJ")] - public string Cnpj { get; set; } - - [XmlElement(ElementName = "chCTe")] - public string Chave { get; set; } - - [XmlElement(ElementName = "dhEvento")] - public string HoraEvento { get; set; } - - [XmlElement(ElementName = "tpEvento")] - public int TipoEvento { get; set; } - - [XmlElement(ElementName = "nSeqEvento")] - public byte SequencialEvento { get; set; } - - [XmlElement(ElementName = "detEvento")] - public FusionDetalheEventoCTe DetalheEvento { get; set; } - - public FusionInformacaoEventoCTe() - { - DetalheEvento = new FusionDetalheEventoCTe(); - } - } - - [Serializable] - public class FusionDetalheEventoCTe - { - [XmlAttribute(AttributeName = "versaoEvento")] - public string VersaoEvento { get; set; } - - [XmlElement(ElementName = "evCancCTe")] - public FusionEventoCancelamentoCTe EventoCancelamento { get; set; } - - [XmlElement(ElementName = "evCCeCTe")] - public FusionEventoCartaCorrecaoCTe EventoCartaCorrecao { get; set; } - } - - [Serializable] - public class FusionEventoCancelamentoCTe - { - [XmlElement(ElementName = "descEvento")] - public string DescricaoEvento { get; set; } = "Cancelamento"; - - [XmlElement(ElementName = "nProt")] - public string NumeroProtocolo { get; set; } - - [XmlElement(ElementName = "xJust")] - public string Justificativa { get; set; } - } - - [Serializable] - public class FusionEventoCartaCorrecaoCTe - { - [XmlElement(ElementName = "descEvento")] - public string DescricaoEvento { get; set; } = "Carta de Correcao"; - - [XmlElement(ElementName = "infCorrecao")] - public List InfoCorrrecoes { get; set; } - - [XmlElement(ElementName = "xCondUso")] - public string CondicaoUso { get; set; } = - @"A Carta de Correcao e disciplinada pelo Art. 58-B do CONVENIO/SINIEF 06/89: Fica permitida a utilizacao de carta de correcao, para regularizacao de erro ocorrido na emissao de documentos fiscais relativos a prestacao de servico de transporte, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da prestacao;II - a correcao de dados cadastrais que implique mudanca do emitente, tomador, remetente ou do destinatario;III - a data de emissao ou de saida." - ; - - public FusionEventoCartaCorrecaoCTe() - { - InfoCorrrecoes = new List(); - } - } - - [Serializable] - public class FusionInfoCorrecaoCTe - { - [XmlElement(ElementName = "grupoAlterado")] - public string GrupoAlterado { get; set; } - - [XmlElement(ElementName = "campoAlterado")] - public string CampoAlterado { get; set; } - - [XmlElement(ElementName = "valorAlterado")] - public string ValorAlterado { get; set; } - - [XmlElement(ElementName = "nroItemAlterado")] - public string NumeroItem { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRetornoEventoCancelamentoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRetornoEventoCancelamentoCTe.cs deleted file mode 100755 index 2435af794..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRetornoEventoCancelamentoCTe.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.RegistroEventos -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "retEventoCTe")] - public class FusionRetornoEventoCancelamentoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "infEvento")] - public FusionInfoEventoCancelamentoCTe FusionInfoEventoCancelamentoCTe { get; set; } - } - - public class FusionInfoEventoCancelamentoCTe - { - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRetornoRegistroEventoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRetornoRegistroEventoCTe.cs deleted file mode 100755 index 4cfa0cdb9..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.RegistroEventos/FusionRetornoRegistroEventoCTe.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.RegistroEventos -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "retEventoCTe")] - public class FusionRetornoRegistroEventoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "infEvento")] - public FusionRetornoInformacaoEventoCTe RetornoInformacaoEvento { get; set; } - - [XmlElement(ElementName = "Signature")] - public FusionAssinaturaDigital AssinaturaDigital { get; set; } - } - - [Serializable] - public class FusionRetornoInformacaoEventoCTe - { - [XmlAttribute(AttributeName = "Id")] - public string Id { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicacao { get; set; } - - [XmlElement(ElementName = "cOrgao")] - public byte OrgaoEmissor { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatus { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "chCTe")] - public string Chave { get; set; } - - [XmlElement(ElementName = "tpEvento")] - public int TipoEvento { get; set; } - - [XmlElement(ElementName = "xEvento")] - public string DescricaoEvento { get; set; } - - [XmlElement(ElementName = "nSeqEvento")] - public byte SequencialEvento { get; set; } - - [XmlElement(ElementName = "dhRegEvento")] - public DateTime? DataEHoraRegistroEvento { get; set; } - - [XmlElement(ElementName = "nProt")] - public string NumeroProtocolo { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.Retorno/FusionRetornoEnvioCTe.cs b/CTeRefatorar/XmlCte/XmlCte.Retorno/FusionRetornoEnvioCTe.cs deleted file mode 100755 index 09196a1d8..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.Retorno/FusionRetornoEnvioCTe.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.Retorno -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", - ElementName = "retEnviCte")] - public class FusionRetornoEnvioCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "cUF")] - public byte CodigoEstadoUf { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicativo { get; set; } - - [XmlElement(ElementName = "cStat")] - public short StatusResposta { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "infRec")] - public FusionDadosReciboCTe DadosRecibo { get; set; } - } - - [Serializable] - public class FusionDadosReciboCTe - { - [XmlElement(ElementName = "nRec")] - public string Numero { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public DateTime? RecebidoEm { get; set; } - - [XmlElement(ElementName = "tMed")] - public string TempoMedioResposta { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionCteProcessadoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionCteProcessadoCTe.cs deleted file mode 100755 index a2c4afff8..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionCteProcessadoCTe.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.RetornoRecepcao -{ - [Serializable] - public class FusionCteProcessadoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "infProt")] - public FusionInformacaoProcessadaCTe Informacoes { get; set; } - } - - [Serializable] - public class FusionInformacaoProcessadaCTe - { - [XmlAttribute(AttributeName = "Id")] - public string Id { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicativo { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public DateTime? ProcessadoEm { get; set; } - - [XmlElement(ElementName = "nProt")] - public string NumeroProtocolo { get; set; } - - [XmlElement(ElementName = "digVal")] - public string DigestVal { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatusResposta { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "Signature")] - public FusionAssinaturaDigital AssinaturaDigital { get; set; } - - public bool Autorizado => CodigoStatusResposta == 100; - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionResultadoEnvioLoteCTe.cs b/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionResultadoEnvioLoteCTe.cs deleted file mode 100755 index 21525daed..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionResultadoEnvioLoteCTe.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.RetornoRecepcao -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", ElementName = "retConsReciCTe")] - public class FusionResultadoEnvioLoteCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "verAplic")] - public string VersaoAplicativo { get; set; } - - [XmlElement(ElementName = "nRec")] - public string NumeroRecibo { get; set; } - - [XmlElement(ElementName = "cStat")] - public short CodigoStatusResposta { get; set; } - - [XmlElement(ElementName = "xMotivo")] - public string Motivo { get; set; } - - [XmlElement(ElementName = "cUF")] - public byte CodigoUfAtendeuSolicitacao { get; set; } - - [XmlElement(ElementName = "protCTe")] - public List CteProcessado { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionRetornoRecepcaoCTe.cs b/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionRetornoRecepcaoCTe.cs deleted file mode 100755 index 7bdd7b766..000000000 --- a/CTeRefatorar/XmlCte/XmlCte.RetornoRecepcao/FusionRetornoRecepcaoCTe.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace FusionCore.DFe.XmlCte.XmlCte.RetornoRecepcao -{ - [Serializable] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", ElementName = "consReciCTe")] - public class FusionRetornoRecepcaoCTe - { - [XmlAttribute(AttributeName = "versao")] - public string Versao { get; set; } = "2.00"; - - [XmlElement(ElementName = "tpAmb")] - public FusionTipoAmbienteCTe Ambiente { get; set; } - - [XmlElement(ElementName = "nRec")] - public string NumeroRecibo { get; set; } - } -} \ No newline at end of file diff --git a/CTeRefatorar/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/CTeRefatorar/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100755 index 2d1084087..000000000 Binary files a/CTeRefatorar/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and /dev/null differ diff --git a/CTeRefatorar/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/CTeRefatorar/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs deleted file mode 100755 index e69de29bb..000000000 diff --git a/CTeRefatorar/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/CTeRefatorar/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs deleted file mode 100755 index e69de29bb..000000000 diff --git a/CTeRefatorar/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/CTeRefatorar/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs deleted file mode 100755 index e69de29bb..000000000 diff --git a/DFe.Classes.Standard/DFe.Classes.Standard.csproj b/DFe.Classes.Standard/DFe.Classes.Standard.csproj deleted file mode 100644 index 84fa104b3..000000000 --- a/DFe.Classes.Standard/DFe.Classes.Standard.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - netstandard2.0 - - - - - diff --git a/Shared.DFe.Classes/Assinatura/CanonicalizationMethod.cs b/DFe.Classes/Assinatura/CanonicalizationMethod.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/CanonicalizationMethod.cs rename to DFe.Classes/Assinatura/CanonicalizationMethod.cs diff --git a/Shared.DFe.Classes/Assinatura/DigestMethod.cs b/DFe.Classes/Assinatura/DigestMethod.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/DigestMethod.cs rename to DFe.Classes/Assinatura/DigestMethod.cs diff --git a/Shared.DFe.Classes/Assinatura/KeyInfo.cs b/DFe.Classes/Assinatura/KeyInfo.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/KeyInfo.cs rename to DFe.Classes/Assinatura/KeyInfo.cs diff --git a/Shared.DFe.Classes/Assinatura/Reference.cs b/DFe.Classes/Assinatura/Reference.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/Reference.cs rename to DFe.Classes/Assinatura/Reference.cs diff --git a/Shared.DFe.Classes/Assinatura/Signature.cs b/DFe.Classes/Assinatura/Signature.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/Signature.cs rename to DFe.Classes/Assinatura/Signature.cs diff --git a/Shared.DFe.Classes/Assinatura/SignatureMethod.cs b/DFe.Classes/Assinatura/SignatureMethod.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/SignatureMethod.cs rename to DFe.Classes/Assinatura/SignatureMethod.cs diff --git a/Shared.DFe.Classes/Assinatura/SignedInfo.cs b/DFe.Classes/Assinatura/SignedInfo.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/SignedInfo.cs rename to DFe.Classes/Assinatura/SignedInfo.cs diff --git a/Shared.DFe.Classes/Assinatura/Transform.cs b/DFe.Classes/Assinatura/Transform.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/Transform.cs rename to DFe.Classes/Assinatura/Transform.cs diff --git a/Shared.DFe.Classes/Assinatura/X509Data.cs b/DFe.Classes/Assinatura/X509Data.cs similarity index 100% rename from Shared.DFe.Classes/Assinatura/X509Data.cs rename to DFe.Classes/Assinatura/X509Data.cs diff --git a/DFe.Classes/DFe.Classes.csproj b/DFe.Classes/DFe.Classes.csproj index 9c1c86ba3..1805692b9 100755 --- a/DFe.Classes/DFe.Classes.csproj +++ b/DFe.Classes/DFe.Classes.csproj @@ -1,57 +1,8 @@ - - - + + - Debug - AnyCPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - Library - Properties - DFe.Classes - DFe.Classes - v4.5 - 512 - - SAK - SAK - SAK - SAK + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - \ No newline at end of file + + diff --git a/DFe.Classes/DFe.Classes.csproj.DotSettings b/DFe.Classes/DFe.Classes.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/DFe.Classes/DFe.Classes.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/DFe.Classes/DFe.Classes.csproj.vspscc b/DFe.Classes/DFe.Classes.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/DFe.Classes/DFe.Classes.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Shared.DFe.Classes/Entidades/Estado.cs b/DFe.Classes/Entidades/Estado.cs similarity index 98% rename from Shared.DFe.Classes/Entidades/Estado.cs rename to DFe.Classes/Entidades/Estado.cs index 4461718d1..27c38adb2 100644 --- a/Shared.DFe.Classes/Entidades/Estado.cs +++ b/DFe.Classes/Entidades/Estado.cs @@ -204,6 +204,12 @@ public enum Estado [XmlEnum("91")] AN = 91, + /// + /// SVRS + /// + [XmlEnum("92")] + SVRS = 92, + /// /// Exterior /// diff --git a/Shared.DFe.Classes/Extensoes/ExtEstadoUF.cs b/DFe.Classes/Extensoes/ExtEstadoUF.cs similarity index 100% rename from Shared.DFe.Classes/Extensoes/ExtEstadoUF.cs rename to DFe.Classes/Extensoes/ExtEstadoUF.cs diff --git a/Shared.DFe.Classes/Extensoes/ExtVersaoServico.cs b/DFe.Classes/Extensoes/ExtVersaoServico.cs similarity index 100% rename from Shared.DFe.Classes/Extensoes/ExtVersaoServico.cs rename to DFe.Classes/Extensoes/ExtVersaoServico.cs diff --git a/DFe.Classes/Extensoes/Valor.cs b/DFe.Classes/Extensoes/Valor.cs new file mode 100644 index 000000000..b28c23519 --- /dev/null +++ b/DFe.Classes/Extensoes/Valor.cs @@ -0,0 +1,21 @@ +using System; +using System.Globalization; + +namespace DFe.Classes +{ + public static class Valor + { + public static decimal Arredondar(this decimal valor, int casasDecimais) + { + var valorArredondado = decimal.Round(valor, casasDecimais, MidpointRounding.ToEven); + var valorArredondadoFormatado = valorArredondado.ToString("F" + casasDecimais, CultureInfo.CurrentCulture); + return decimal.Parse(valorArredondadoFormatado); + } + + public static decimal? Arredondar(this decimal? valor, int casasDecimais) + { + if (valor == null) return null; + return Arredondar(valor.Value, casasDecimais); + } + } +} diff --git a/Shared.DFe.Classes/Flags/ModeloDocumento.cs b/DFe.Classes/Flags/ModeloDocumento.cs similarity index 100% rename from Shared.DFe.Classes/Flags/ModeloDocumento.cs rename to DFe.Classes/Flags/ModeloDocumento.cs diff --git a/Shared.DFe.Classes/Flags/TipoAmbiente.cs b/DFe.Classes/Flags/TipoAmbiente.cs similarity index 100% rename from Shared.DFe.Classes/Flags/TipoAmbiente.cs rename to DFe.Classes/Flags/TipoAmbiente.cs diff --git a/Shared.DFe.Classes/Flags/VersaoServico.cs b/DFe.Classes/Flags/VersaoServico.cs similarity index 100% rename from Shared.DFe.Classes/Flags/VersaoServico.cs rename to DFe.Classes/Flags/VersaoServico.cs diff --git a/DFe.Classes/Properties/AssemblyInfo.cs b/DFe.Classes/Properties/AssemblyInfo.cs deleted file mode 100755 index 25cc9d84d..000000000 --- a/DFe.Classes/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DFe.Classes")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DFe.Classes")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9984ec15-18e1-4a87-b4db-18ac913dc4e8")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/DFe.Testes/DFe.Testes.csproj b/DFe.Testes/DFe.Testes.csproj new file mode 100644 index 000000000..cc90271e4 --- /dev/null +++ b/DFe.Testes/DFe.Testes.csproj @@ -0,0 +1,25 @@ + + + + net6.0 + false + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/NFe.Testes/Gerais/NFeTestes.cs b/DFe.Testes/Gerais/NFeTestes.cs similarity index 99% rename from NFe.Testes/Gerais/NFeTestes.cs rename to DFe.Testes/Gerais/NFeTestes.cs index de3560f9b..1877fe483 100644 --- a/NFe.Testes/Gerais/NFeTestes.cs +++ b/DFe.Testes/Gerais/NFeTestes.cs @@ -1,13 +1,13 @@ using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Collections.Generic; +using System.Linq; +using System.Threading; using System.Threading.Tasks; using DFe.Classes.Entidades; +using Microsoft.VisualStudio.TestTools.UnitTesting; using NFe.Utils; -using System.Threading; -using System.Collections.Generic; -using System.Linq; -namespace NFe.Testes.Gerais +namespace DFe.Testes.Gerais { [TestClass] public class NFeTestes diff --git a/NFe.Testes/Impostos/COFINSGeral__Teste.cs b/DFe.Testes/Impostos/COFINSGeral__Teste.cs similarity index 98% rename from NFe.Testes/Impostos/COFINSGeral__Teste.cs rename to DFe.Testes/Impostos/COFINSGeral__Teste.cs index 81f98514c..5012f3948 100644 --- a/NFe.Testes/Impostos/COFINSGeral__Teste.cs +++ b/DFe.Testes/Impostos/COFINSGeral__Teste.cs @@ -1,10 +1,10 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; using NFe.Utils.Tributacao.Federal; -using System; -namespace NFe.Testes.Impostos +namespace DFe.Testes.Impostos { [TestClass] public class COFINSGeral_Teste diff --git a/DFe.Testes/Impostos/DadosDeTeste/ICMSGeralDadosDeTeste.cs b/DFe.Testes/Impostos/DadosDeTeste/ICMSGeralDadosDeTeste.cs new file mode 100644 index 000000000..24e83fafc --- /dev/null +++ b/DFe.Testes/Impostos/DadosDeTeste/ICMSGeralDadosDeTeste.cs @@ -0,0 +1,49 @@ +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using NFe.Classes.Informacoes.Emitente; +using System.Collections.Generic; + +namespace DFe.Testes.Impostos.DadosDeTeste +{ + public class ICMSGeralDadosDeTeste + { + public static IEnumerable ObterRegimesTributariosParaCst61() + { + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmNacional, 1000, 18, 180 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraImportacaoDireta, 1001, 180, 18 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, 1000, 180, 10 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmNacionalConteudoImportacaoSuperior40, 1200, 18, 180 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmNacionalProcessosBasicos, 1100, 18, 180 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmNacionalConteudoImportacaoInferiorIgual40, 1010, 12, 10 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraImportacaoDiretaSemSimilar, 101, 17, 11 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasilSemSimilar, 105, 19, 15 }; + yield return new object[] { CRT.RegimeNormal, OrigemMercadoria.OmNacionalConteudoImportacaoSuperior70, 103, 18, 15 }; + + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmNacional, 1000, 18, 180 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmEstrangeiraImportacaoDireta, 1001, 180, 18 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, 1000, 180, 10 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmNacionalConteudoImportacaoSuperior40, 1200, 18, 180 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmNacionalProcessosBasicos, 1100, 18, 180 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmNacionalConteudoImportacaoInferiorIgual40, 1010, 12, 10 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmEstrangeiraImportacaoDiretaSemSimilar, 101, 17, 11 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmEstrangeiraAdquiridaBrasilSemSimilar, 105, 19, 15 }; + yield return new object[] { CRT.SimplesNacional, OrigemMercadoria.OmNacionalConteudoImportacaoSuperior70, 103, 18, 15 }; + + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmNacional, 1000, 18, 180 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmEstrangeiraImportacaoDireta, 1001, 180, 18 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, 1000, 180, 10 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmNacionalConteudoImportacaoSuperior40, 1200, 18, 180 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmNacionalProcessosBasicos, 1100, 18, 180 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmNacionalConteudoImportacaoInferiorIgual40, 1010, 12, 10 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmEstrangeiraImportacaoDiretaSemSimilar, 101, 17, 11 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmEstrangeiraAdquiridaBrasilSemSimilar, 105, 19, 15 }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite, OrigemMercadoria.OmNacionalConteudoImportacaoSuperior70, 103, 18, 15 }; + } + + public static IEnumerable ObterRegimesTributarios() + { + yield return new object[] { CRT.SimplesNacional }; + yield return new object[] { CRT.SimplesNacionalExcessoSublimite }; + yield return new object[] { CRT.RegimeNormal }; + } + } +} diff --git a/DFe.Testes/Impostos/ICMSGeral_Teste.cs b/DFe.Testes/Impostos/ICMSGeral_Teste.cs new file mode 100644 index 000000000..6ec8792d2 --- /dev/null +++ b/DFe.Testes/Impostos/ICMSGeral_Teste.cs @@ -0,0 +1,367 @@ +using System; +using System.ComponentModel; +using System.IO; +using System.Xml.Serialization; +using DFe.Testes.Impostos.DadosDeTeste; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using NFe.Classes.Informacoes.Emitente; +using NFe.Utils.Tributacao.Estadual; + +namespace DFe.Testes.Impostos +{ + [TestClass] + public class ICMSGeral_Teste + { + #region CRT - Normal + + [TestMethod] + [DataTestMethod] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, null, null)] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasilSemSimilar, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, 0, 0)] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraImportacaoDireta, DeterminacaoBaseIcms.DbiValorOperacao, 1000, 18, 180, 0, 0)] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraImportacaoDiretaSemSimilar, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, null, null)] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmNacional, DeterminacaoBaseIcms.DbiPrecoTabelado, 1000, 18, 180, null, null)] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmNacionalConteudoImportacaoInferiorIgual40, DeterminacaoBaseIcms.DbiPauta, 1000, 18, 180, 0, 0)] + public void ObterICMSBasico_ICMS00_Teste(CRT crt, OrigemMercadoria origem, DeterminacaoBaseIcms modBC, object vBC, object pICMS, object vICMS, object pFCP, object vFCP) + { + /** 1) Preparação **/ + var icmsGeral = new ICMSGeral() + { + orig = origem, + CST = Csticms.Cst00, + modBC = modBC, + vBC = Convert.ToDecimal(vBC), + pICMS = Convert.ToDecimal(pICMS), + vICMS = Convert.ToDecimal(vICMS), + pFCP = Convert.ToDecimal(pFCP), + vFCP = Convert.ToDecimal(vFCP) + }; + + /** 2) Execução **/ + var tagGerada = icmsGeral.ObterICMSBasico(crt); + + /** 2) Veerificação **/ + /** 2.1) Garante que o tipo da classe gerada foi correta**/ + Assert.IsInstanceOfType(tagGerada, typeof(ICMS00)); + + /** 2.2) Garante que o conteúdo repassado para as propriedades estejam corretos **/ + var tagICMSGerada = (tagGerada as ICMS00); + Assert.AreEqual(origem, tagICMSGerada.orig); + Assert.AreEqual(Csticms.Cst00, tagICMSGerada.CST); + Assert.AreEqual(modBC, tagICMSGerada.modBC); + Assert.AreEqual(Convert.ToDecimal(vBC), tagICMSGerada.vBC); + Assert.AreEqual(Convert.ToDecimal(pICMS), tagICMSGerada.pICMS); + Assert.AreEqual(Convert.ToDecimal(vICMS), tagICMSGerada.vICMS); + Assert.AreEqual(Convert.ToDecimal(pFCP), tagICMSGerada.pFCP); + Assert.AreEqual(Convert.ToDecimal(vFCP), tagICMSGerada.vFCP); + } + + [TestMethod] + [DataTestMethod] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, 0, 0, 0, DeterminacaoBaseIcmsSt.DbisListaNegativa, 15, 2, 1000, 18, 25, 0, 0, 0)] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasilSemSimilar, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, 0, 0, 0, DeterminacaoBaseIcmsSt.DbisListaNegativa, 15, 2, 1000, 18, 25, 100, 10, 10)] + [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmNacionalConteudoImportacaoInferiorIgual40, DeterminacaoBaseIcms.DbiMargemValorAgregado, 100, 18, 18, 0, 0, 0, DeterminacaoBaseIcmsSt.DbisListaNegativa, 15, 2, 1000, 18, 25, 0, 0, 0)] + public void ObterICMSBasico_ICMS10_Teste(CRT crt, OrigemMercadoria origem, DeterminacaoBaseIcms modBC, object vBC, object pICMS, object vICMS, object vBCFCP, object pFCP, object vFCP, DeterminacaoBaseIcmsSt modBCST, object pMVAST, object pRedBCST, object vBCST, object pICMSST, object vICMSST, object vBCFCPST, object pFCPST, object vFCPST) + { + /** 1) Preparação **/ + var icmsGeral = new ICMSGeral() + { + orig = origem, + CST = Csticms.Cst10, + modBC = modBC, + vBC = Convert.ToDecimal(vBC), + pICMS = Convert.ToDecimal(pICMS), + vICMS = Convert.ToDecimal(vICMS), + pFCP = Convert.ToDecimal(pFCP), + vFCP = Convert.ToDecimal(vFCP), + vBCFCP = Convert.ToDecimal(vBCFCP), + modBCST = modBCST, + pMVAST = Convert.ToDecimal(pMVAST), + pRedBCST = Convert.ToDecimal(pRedBCST), + vBCST = Convert.ToDecimal(vBCST), + pICMSST = Convert.ToDecimal(pICMSST), + vICMSST = Convert.ToDecimal(vICMSST), + vBCFCPST = Convert.ToDecimal(vBCFCPST), + pFCPST = Convert.ToDecimal(pFCPST), + vFCPST = Convert.ToDecimal(vFCPST) + }; + + /** 2) Execução **/ + var tagGerada = icmsGeral.ObterICMSBasico(crt); + + /** 2) Veerificação **/ + /** 2.1) Garante que o tipo da classe gerada foi correta**/ + Assert.IsInstanceOfType(tagGerada, typeof(ICMS10)); + + /** 2.2) Garante que o conteúdo repassado para as propriedades estejam corretos **/ + var tagICMSGerada = (tagGerada as ICMS10); + Assert.AreEqual(origem, tagICMSGerada.orig); + Assert.AreEqual(Csticms.Cst10, tagICMSGerada.CST); + Assert.AreEqual(modBC, tagICMSGerada.modBC); + Assert.AreEqual(Convert.ToDecimal(vBC), tagICMSGerada.vBC); + Assert.AreEqual(Convert.ToDecimal(pICMS), tagICMSGerada.pICMS); + Assert.AreEqual(Convert.ToDecimal(vICMS), tagICMSGerada.vICMS); + Assert.AreEqual(Convert.ToDecimal(pFCP), tagICMSGerada.pFCP); + Assert.AreEqual(Convert.ToDecimal(vFCP), tagICMSGerada.vFCP); + Assert.AreEqual(Convert.ToDecimal(vBCFCP), tagICMSGerada.vBCFCP); + Assert.AreEqual(modBCST, tagICMSGerada.modBCST); + Assert.AreEqual(Convert.ToDecimal(pMVAST), tagICMSGerada.pMVAST); + Assert.AreEqual(Convert.ToDecimal(pRedBCST), tagICMSGerada.pRedBCST); + Assert.AreEqual(Convert.ToDecimal(vBCST), tagICMSGerada.vBCST); + Assert.AreEqual(Convert.ToDecimal(pICMSST), tagICMSGerada.pICMSST); + Assert.AreEqual(Convert.ToDecimal(vICMSST), tagICMSGerada.vICMSST); + Assert.AreEqual(Convert.ToDecimal(vBCFCPST), tagICMSGerada.vBCFCPST); + Assert.AreEqual(Convert.ToDecimal(pFCPST), tagICMSGerada.pFCPST); + Assert.AreEqual(Convert.ToDecimal(vFCPST), tagICMSGerada.vFCPST); + } + + [TestMethod] + public void ObterICMSBasico_ICMS90ComDiferimento_Teste() + { + var icmsGeral = new ICMSGeral() + { + orig = OrigemMercadoria.OmNacional, + CST = Csticms.Cst90, + modBC = DeterminacaoBaseIcms.DbiValorOperacao, + vBC = 1000, + pRedBC = 10, + cBenefRBC = "ABC12345", + pICMS = 18, + vICMSOp = 180, + pDif = 50, + vICMSDif = 90, + vICMS = 90, + vBCFCP = 1000, + pFCP = 2, + vFCP = 20, + pFCPDif = 50, + vFCPDif = 10, + vFCPEfet = 10 + }; + + var tagGerada = icmsGeral.ObterICMSBasico(CRT.RegimeNormal); + + Assert.IsInstanceOfType(tagGerada, typeof(ICMS90)); + var tagICMSGerada = tagGerada as ICMS90; + Assert.AreEqual(Csticms.Cst90, tagICMSGerada.CST); + Assert.AreEqual("ABC12345", tagICMSGerada.cBenefRBC); + Assert.AreEqual(180m, tagICMSGerada.vICMSOp); + Assert.AreEqual(50m, tagICMSGerada.pDif); + Assert.AreEqual(90m, tagICMSGerada.vICMSDif); + Assert.AreEqual(50m, tagICMSGerada.pFCPDif); + Assert.AreEqual(10m, tagICMSGerada.vFCPDif); + Assert.AreEqual(10m, tagICMSGerada.vFCPEfet); + + var xml = Serializar(tagICMSGerada, "ICMS90"); + StringAssert.Contains(xml, "ABC12345"); + StringAssert.Contains(xml, "180.00"); + StringAssert.Contains(xml, "50.0000"); + StringAssert.Contains(xml, "90.00"); + StringAssert.Contains(xml, "50.0000"); + StringAssert.Contains(xml, "10.00"); + StringAssert.Contains(xml, "10.00"); + } + + [TestMethod] + public void ObterICMSBasico_ICMSPartCst20ComDesoneracao_Teste() + { + var icmsGeral = new ICMSGeral() + { + orig = OrigemMercadoria.OmNacional, + CST = Csticms.CstPart20, + modBC = DeterminacaoBaseIcms.DbiValorOperacao, + vBC = 1000, + pRedBC = 10, + pICMS = 18, + vICMS = 90, + modBCST = DeterminacaoBaseIcmsSt.DbisValordaOperacao, + vBCST = 1000, + pICMSST = 18, + vICMSST = 180, + pBCOp = 100, + UFST = "SP", + vICMSDeson = 10, + motDesICMS = MotivoDesoneracaoIcms.MdiDeficienteCondutor, + indDeduzDeson = DeduzDesoneracaoNoProduto.Deduz + }; + + var tagGerada = icmsGeral.ObterICMSBasico(CRT.RegimeNormal); + + Assert.IsInstanceOfType(tagGerada, typeof(ICMSPart)); + var tagICMSGerada = tagGerada as ICMSPart; + Assert.AreEqual(Csticms.CstPart20, tagICMSGerada.CST); + Assert.AreEqual(10m, tagICMSGerada.vICMSDeson); + Assert.AreEqual(MotivoDesoneracaoIcms.MdiDeficienteCondutor, tagICMSGerada.motDesICMS); + Assert.AreEqual(DeduzDesoneracaoNoProduto.Deduz, tagICMSGerada.indDeduzDeson); + + var xml = Serializar(tagICMSGerada, "ICMSPart"); + StringAssert.Contains(xml, "20"); + StringAssert.Contains(xml, "10.00"); + StringAssert.Contains(xml, "10"); + StringAssert.Contains(xml, "1"); + } + + private static string Serializar(T objeto, string raiz) + { + var serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(raiz)); + using (var writer = new StringWriter()) + { + serializer.Serialize(writer, objeto); + return writer.ToString(); + } + } + + //TODO: Falta criar os métodos de testes dos demais CSTs do ICMS (CTR = Normal) + + #endregion + + #region CRT - Simples + + [TestMethod] + [DataTestMethod] + [DataRow(CRT.SimplesNacional, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, 100, 18)] + public void ObterICMSBasico_CSOSN101_Teste(CRT crt, OrigemMercadoria origem, object pCredSN, object vCredICMSSN) + { + /** 1) Preparação **/ + var icmsGeral = new ICMSGeral() + { + orig = origem, + CSOSN = Csosnicms.Csosn101, + pCredSN = Convert.ToDecimal(pCredSN), + vCredICMSSN = Convert.ToDecimal(vCredICMSSN) + }; + + /** 2) Execução **/ + var tagGerada = icmsGeral.ObterICMSBasico(crt); + + /** 2) Veerificação **/ + /** 2.1) Garante que o tipo da classe gerada foi correta**/ + Assert.IsInstanceOfType(tagGerada, typeof(ICMSSN101)); + + /** 2.2) Garante que o conteúdo repassado para as propriedades estejam corretos **/ + var tagICMSGerada = (tagGerada as ICMSSN101); + Assert.AreEqual(origem, tagICMSGerada.orig); + Assert.AreEqual(Csosnicms.Csosn101, tagICMSGerada.CSOSN); + Assert.AreEqual(Convert.ToDecimal(pCredSN), tagICMSGerada.pCredSN); + Assert.AreEqual(Convert.ToDecimal(vCredICMSSN), tagICMSGerada.vCredICMSSN); + } + + //TODO: Falta criar os métodos de testes dos demais CSOSNs do ICMS (CTR = Simples) + + #endregion + + #region CST 61 - Tributação Monofásica Sobre os Combustíveis + + [TestMethod] + [DynamicData(nameof(ICMSGeralDadosDeTeste.ObterRegimesTributariosParaCst61), typeof(ICMSGeralDadosDeTeste), DynamicDataSourceType.Method)] + [DisplayName("Dado CST 61 quando obter ICMS então ICMS deve conter campos de tributação monofásica sobre combustíveis preenchidos")] + public void DadoCST61QuandoObterICMSEntaoICMSDeveConterCamposDeTributacaoMonofasicaSobreCombustiveisPreenchidos(CRT crt, OrigemMercadoria origem, object vICMSMonoRet, object adRemICMSRet, object qBCMonoRet) + { + /** 1) Preparação **/ + var icmsGeral = new ICMSGeral() + { + orig = origem, + CST = Csticms.Cst61, + vICMSMonoRet = Convert.ToDecimal(vICMSMonoRet), + adRemICMSRet = Convert.ToDecimal(adRemICMSRet), + qBCMonoRet = Convert.ToDecimal(qBCMonoRet) + }; + + /** 2) Execução **/ + var tagGerada = icmsGeral.ObterICMSBasico(crt); + + /** 2) Veerificação **/ + /** 2.1) Garante que o tipo da classe gerada foi correta**/ + Assert.IsInstanceOfType(tagGerada, typeof(ICMS61)); + + /** 2.2) Garante que o conteúdo repassado para as propriedades estejam corretos **/ + var tagICMSGerada = (tagGerada as ICMS61); + Assert.AreEqual(origem, tagICMSGerada.orig); + Assert.AreEqual(Csticms.Cst61, tagICMSGerada.CST); + Assert.AreEqual(Convert.ToDecimal(vICMSMonoRet), tagICMSGerada.vICMSMonoRet); + Assert.AreEqual(Convert.ToDecimal(adRemICMSRet), tagICMSGerada.adRemICMSRet); + Assert.AreEqual(Convert.ToDecimal(qBCMonoRet), tagICMSGerada.qBCMonoRet); + } + + [TestMethod] + [DynamicData(nameof(ICMSGeralDadosDeTeste.ObterRegimesTributariosParaCst61), typeof(ICMSGeralDadosDeTeste), DynamicDataSourceType.Method)] + [DisplayName("Dado CST 61 quando obter ICMS então ICMS não deve ter campos que não sejam da tributação monofásica sobre combustíveis preenchidos")] + public void DadoCST61QuandoObterIcmsEntaoIcmsNaoDeveTerCamposQueNaoSejamDaTributacaoMonofasicaSobreCombustiveisPreenchidos(CRT crt, OrigemMercadoria origem, object vICMSMonoRet, object adRemICMSRet, object qBCMonoRet) + { + /** 1) Preparação **/ + var icmsGeral = new ICMSGeral() + { + orig = origem, + CST = Csticms.Cst61, + vICMSMonoRet = Convert.ToDecimal(vICMSMonoRet), + adRemICMSRet = Convert.ToDecimal(adRemICMSRet), + qBCMonoRet = Convert.ToDecimal(qBCMonoRet) + }; + + /** 2) Execução **/ + icmsGeral.ObterICMSBasico(crt); + + /** 2) Verificação **/ + VerificarSeNaoFoiPreenchidaOutroCampoQueNaoSejaCamposDaCst61(icmsGeral); + } + + private void VerificarSeNaoFoiPreenchidaOutroCampoQueNaoSejaCamposDaCst61(ICMSGeral icmsGeral) + { + Assert.AreEqual(icmsGeral.pCredSN, 0); + Assert.AreEqual(icmsGeral.vCredICMSSN, 0); + Assert.AreEqual(icmsGeral.vBC, 0); + Assert.AreEqual(icmsGeral.pICMS, 0); + Assert.AreEqual(icmsGeral.vICMS, 0); + Assert.IsNull(icmsGeral.pFCP); + Assert.IsNull(icmsGeral.vFCP); + Assert.IsNull(icmsGeral.vBCFCP); + } + + [TestMethod] + [DynamicData(nameof(ICMSGeralDadosDeTeste.ObterRegimesTributarios), typeof(ICMSGeralDadosDeTeste), DynamicDataSourceType.Method)] + [DisplayName("Dado CST 61 quando gerar ICMS então ICMS deve ser do tipo ICMS 61 e nenhum outro")] + public void DadoCST61QuandoGerarICMSEntaoICMSDeveSerDoTipoICMS61ENenhumOutro(CRT crt) + { + /** 1) Preparação **/ + var icmsGeral = new ICMSGeral() + { + CST = Csticms.Cst61 + }; + + /** 2) Execução **/ + var tagGerada = icmsGeral.ObterICMSBasico(crt); + + /** 2) Verificação **/ + VerificarSeFoiGeradoIcms61(tagGerada); + } + + private void VerificarSeFoiGeradoIcms61(ICMSBasico tagGerada) + { + Assert.IsInstanceOfType(tagGerada, typeof(ICMS61)); + + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS00)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS02)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS10)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS15)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS20)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS30)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS40)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS51)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS53)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS51)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS60)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS70)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMS90)); + + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMSSN101)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMSSN102)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMSSN201)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMSSN202)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMSSN500)); + Assert.IsNotInstanceOfType(tagGerada, typeof(ICMSSN900)); + } + #endregion + } +} diff --git a/NFe.Testes/Impostos/IPIGeral_Teste.cs b/DFe.Testes/Impostos/IPIGeral_Teste.cs similarity index 97% rename from NFe.Testes/Impostos/IPIGeral_Teste.cs rename to DFe.Testes/Impostos/IPIGeral_Teste.cs index 139111e28..04aeef4dc 100644 --- a/NFe.Testes/Impostos/IPIGeral_Teste.cs +++ b/DFe.Testes/Impostos/IPIGeral_Teste.cs @@ -1,10 +1,10 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; using NFe.Utils.Tributacao.Federal; -using System; -namespace NFe.Testes.Impostos +namespace DFe.Testes.Impostos { [TestClass] public class IPIGeral_Teste diff --git a/NFe.Testes/Impostos/PISGeral_Teste.cs b/DFe.Testes/Impostos/PISGeral_Teste.cs similarity index 98% rename from NFe.Testes/Impostos/PISGeral_Teste.cs rename to DFe.Testes/Impostos/PISGeral_Teste.cs index d7312f4e2..1bd6a8074 100644 --- a/NFe.Testes/Impostos/PISGeral_Teste.cs +++ b/DFe.Testes/Impostos/PISGeral_Teste.cs @@ -1,10 +1,10 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; using NFe.Utils.Tributacao.Federal; -using System; -namespace NFe.Testes.Impostos +namespace DFe.Testes.Impostos { [TestClass] public class PISGeral_Teste diff --git a/DFe.Testes/Utils/Assinatura/AssinaturaDigitalTesteUnitario.cs b/DFe.Testes/Utils/Assinatura/AssinaturaDigitalTesteUnitario.cs new file mode 100644 index 000000000..570b4bba6 --- /dev/null +++ b/DFe.Testes/Utils/Assinatura/AssinaturaDigitalTesteUnitario.cs @@ -0,0 +1,48 @@ +using System.Security.Cryptography; +using System.Text; +using DadosDeTestes.AssinaturaDigital; +using DFe.Utils.Assinatura; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace DFe.Testes.Utils.Assinatura; + +[TestClass] +public class AssinaturaDigitalTesteUnitario +{ + [TestMethod(displayName: "Dado dados para geração do hash sha1 bytes, quando obter hash sha1 bytes, então deve obter hash sha1 em bytes igual do SHA1CryptoServiceProvider.")] + [DynamicData(nameof(AssinaturaDigitalTesteDados.ObterDadosParaGeracaoDoHashSha1Bytes), typeof(AssinaturaDigitalTesteDados), DynamicDataSourceType.Method)] + public void DadoDadosParaGeracaoDoHashSha1BytesQuandoObterHashSha1BytesEntaoDeveObterHashSha1EmBytesIgualDoSha1CryptoServiceProvider(string dadosEmString) + { + // Arrange + var dadosEmBytes = Encoding.UTF8.GetBytes(dadosEmString); + var bytesEsperados = ObterHashSha1BytesUsandoSha1CryptoServiceProvider(dadosEmBytes); + + // Act + var bytesRetornado = AssinaturaDigital.ObterHashSha1Bytes(dadosEmBytes); + + // Assert + CollectionAssert.AreEqual(bytesEsperados, bytesRetornado); + } + + [TestMethod(displayName: "Dado dados para geração do hash sha1 bytes, quando obter hash sha1 bytes, então deve obter hash sha1 em bytes.")] + [DynamicData(nameof(AssinaturaDigitalTesteDados.ObterDadosParaGeracaoDoHashSha1BytesEValorEsperado), typeof(AssinaturaDigitalTesteDados), DynamicDataSourceType.Method)] + public void DadoDadosParaGeracaoDoHashSha1BytesQuandoObterHashSha1BytesEntaoDeveObterHashSha1EmBytes(string dadosEmString, byte[] bytesEsperados) + { + // Arrange + var dadosEmBytes = Encoding.UTF8.GetBytes(dadosEmString); + + // Act + var bytesRetornado = AssinaturaDigital.ObterHashSha1Bytes(dadosEmBytes); + + // Assert + CollectionAssert.AreEqual(bytesEsperados, bytesRetornado); + } + + private byte[] ObterHashSha1BytesUsandoSha1CryptoServiceProvider(byte[] dados) + { + var sha1 = new SHA1CryptoServiceProvider(); + var hashSha1Bytes = sha1.ComputeHash(dados); + + return hashSha1Bytes; + } +} \ No newline at end of file diff --git a/DFe.Testes/Valores/ValorTesteUnitario.cs b/DFe.Testes/Valores/ValorTesteUnitario.cs new file mode 100644 index 000000000..7faa587eb --- /dev/null +++ b/DFe.Testes/Valores/ValorTesteUnitario.cs @@ -0,0 +1,30 @@ +using DadosDeTestes; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Valor = DFe.Classes.Valor; + +namespace DFe.Testes.Valores +{ + [TestClass] + public class ValorTesteUnitario + { + // Normativa ABNT NBR5891 + [TestMethod(displayName: "Dado valor para arredondamento, quando o arredondar, então deve retornar o valor arredondado seguindo as normas da ABNT.")] + [DynamicData(nameof(ValorDadosDeTeste.ObterValoresParaArredondamentoSegundoNormativaAbnt), typeof(ValorDadosDeTeste), DynamicDataSourceType.Method)] + public void DadoValorParaArredondamentoQuandoArredondarEntaoDeveRetornarOValorArredondadoSeguindoAsNormasDaAbnt(decimal valor, decimal valorEsperado) + { + var casasDecimaisParaArredondamento = 2; + var valorArredondadoDfe = Valor.Arredondar(valor,casasDecimaisParaArredondamento); + + Assert.AreEqual(valorArredondadoDfe, valorEsperado); + } + + [TestMethod(displayName: "Dado valor para arredondamento nulo, quando o arredondar, então deve retornar nulo.")] + public void DadoValorParaArredondamentoQuandoArredondarEntaoOValorArredondadoDeveSeguirAsNormasDaAbnt() + { + var casasDecimaisParaArredondamento = 2; + var valorArredondadoDfe = Valor.Arredondar(null,casasDecimaisParaArredondamento); + + Assert.IsNull(valorArredondadoDfe); + } + } +} diff --git a/DFe.Utils.Standard/CertificadoDigitaoUtil.cs b/DFe.Utils.Standard/CertificadoDigitaoUtil.cs deleted file mode 100644 index 910a012ce..000000000 --- a/DFe.Utils.Standard/CertificadoDigitaoUtil.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.IO; -using System.Security; -using System.Security.Cryptography.X509Certificates; - -namespace DFe.Utils.Standard -{ - public class CertificadoDigitaoUtil - { - /// - /// Retorna o certificado que está no caminho especificado - /// - /// Caminho do certificado (.pfx) - /// string representando a senha do certificado - public static X509Certificate2 ObterDoCaminho(string caminho, string password) - { - caminho = ArrumaCaminho(caminho); - SecureString stringSegura = null; - try - { - stringSegura = new SecureString(); - if ((password.Length > 0)) - { - foreach (Char caractere in password.ToCharArray()) - { - stringSegura.AppendChar(caractere); - } - } - return ObterDoCaminho(caminho, stringSegura); - } - catch - { - throw; - } - } - - /// - /// Retorna o certificado que está no caminho especificado - /// - /// Caminho do certificado (.pfx) - /// SecureString representando a senha do certificado - /// - public static X509Certificate2 ObterDoCaminho(string caminho, SecureString password) - { - caminho = ArrumaCaminho(caminho); - if (!caminho.ToLower().EndsWith(".pfx")) - { - throw new Exception("Caminho do certificado deve terminar com '.pfx'"); - } - - if (!File.Exists(caminho)) - { - throw new Exception("Certificado não se encontra no caminho especificado"); - } - - var cert = new X509Certificate2(caminho, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); - return cert; - } - - /// - /// Retorna o certificado que está em bytes - /// - /// array de byte do certificado - /// string representando a senha do certificado - /// - public static X509Certificate2 ObterDosBytes(byte[] bytes, string password) - { - SecureString stringSegura = null; - try - { - stringSegura = new SecureString(); - if ((password.Length > 0)) - { - foreach (Char caractere in password.ToCharArray()) - { - stringSegura.AppendChar(caractere); - } - } - - return ObterDosBytes(bytes, stringSegura); - } - catch - { - throw; - } - } - - /// - /// Retorna o certificado que está em bytes - /// - /// array de byte do certificado - /// SecureString senha do certificado - /// - public static X509Certificate2 ObterDosBytes(byte[] bytes, SecureString password) - { - var cert = new X509Certificate2(bytes, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); - return cert; - } - - /// - /// Arruma o path caso tenha sido escrito incorretamente - /// - /// Caminho do arquivo + pastas - /// - private static string ArrumaCaminho(string caminho) - { - caminho = caminho.Replace(@"\\", @"\"); - caminho = caminho.Replace(@"//", @"/"); - caminho = caminho.Replace("\"", ""); //remove " - caminho = caminho.Replace("\'", ""); //remove ' - caminho = caminho.Replace(@"/", Path.DirectorySeparatorChar.ToString()); - caminho = caminho.Replace(@"\", Path.DirectorySeparatorChar.ToString()); - - return caminho; - } - } -} diff --git a/DFe.Utils.Standard/DFe.Utils.Standard.csproj b/DFe.Utils.Standard/DFe.Utils.Standard.csproj deleted file mode 100644 index 1e7a75c79..000000000 --- a/DFe.Utils.Standard/DFe.Utils.Standard.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - netstandard2.0 - 1.0.0.742 - - - - - - - - - - - - - diff --git a/DFe.Utils/Assinatura/AssinaturaDigital.cs b/DFe.Utils/Assinatura/AssinaturaDigital.cs new file mode 100644 index 000000000..5102e3875 --- /dev/null +++ b/DFe.Utils/Assinatura/AssinaturaDigital.cs @@ -0,0 +1,133 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusDFe */ +/* Biblioteca C# para auxiliar no desenvolvimento das demais bibliotecas DFe */ +/* */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Security.Cryptography.Xml; +using System.Xml; +using Shared.DFe.Utils; +using SignatureZeus = DFe.Classes.Assinatura.Signature; + +namespace DFe.Utils.Assinatura +{ + public class AssinaturaDigital + { + public static SignatureZeus Assina(T objeto, string id, X509Certificate2 certificado, + string signatureMethod = "http://www.w3.org/2000/09/xmldsig#rsa-sha1", + string digestMethod = "http://www.w3.org/2000/09/xmldsig#sha1", + bool cfgServicoRemoverAcentos = false) where T : class + { + var objetoLocal = objeto; + if (id == null) + throw new Exception("Não é possível assinar um objeto evento sem sua respectiva Id!"); + + var documento = new XmlDocument { PreserveWhitespace = true }; + + documento.LoadXml(cfgServicoRemoverAcentos + ? FuncoesXml.ClasseParaXmlString(objetoLocal).RemoverAcentos() + : FuncoesXml.ClasseParaXmlString(objetoLocal)); + + var docXml = new SignedXml(documento) { SigningKey = certificado.GetRSAPrivateKey() }; + + docXml.SignedInfo.SignatureMethod = signatureMethod; + var reference = new Reference { Uri = "#" + id, DigestMethod = digestMethod }; + + // adicionando EnvelopedSignatureTransform a referencia + var envelopedSigntature = new XmlDsigEnvelopedSignatureTransform(); + reference.AddTransform(envelopedSigntature); + + var c14Transform = new XmlDsigC14NTransform(); + reference.AddTransform(c14Transform); + + docXml.AddReference(reference); + + // carrega o certificado em KeyInfoX509Data para adicionar a KeyInfo + var keyInfo = new KeyInfo(); + keyInfo.AddClause(new KeyInfoX509Data(certificado)); + + docXml.KeyInfo = keyInfo; + docXml.ComputeSignature(); + + //// recuperando a representacao do XML assinado + var xmlDigitalSignature = docXml.GetXml(); + var assinatura = FuncoesXml.XmlStringParaClasse(xmlDigitalSignature.OuterXml); + return assinatura; + } + + /// + /// Gera uma assinatura digital no formato PKCS1 utilizando o algoritmo RSA com SHA-1. + /// + /// Certificado digital com chave privada usada para assinar. + /// Dados a serem assinados em formato de array de bytes. + /// Assinatura digital como um array de bytes. + public static byte[] CriarAssinaturaPkcs1(X509Certificate2 certificado, byte[] valor) + { + var rsa = certificado.GetRSAPrivateKey(); + + var rsaFormatter = new RSAPKCS1SignatureFormatter(rsa); + rsaFormatter.SetHashAlgorithm("SHA1"); + + var hashSha1Bytes = ObterHashSha1Bytes(valor); + + var assinatura = rsaFormatter.CreateSignature(hashSha1Bytes); + + return assinatura; + } + + /// + /// Obtém o hash SHA-1 em formato byte array a partir de um array de bytes informado. + /// + public static byte[] ObterHashSha1Bytes(byte[] dados) + { + using (var sha1 = SHA1.Create()) + { + var sha1HashBytes = sha1.ComputeHash(dados); + + return sha1HashBytes; + } + } + + /// + /// Obtém a assinatura do certificado digital no formato PKCS#1, baseado em um array de bytes passado como Argumento [value]. + /// + /// + /// + /// + public static byte[] ObterAssinaturaPkcs1(ConfiguracaoCertificado configuracaoCertificado, byte[] value) + { + X509Certificate2 certificado = CertificadoDigital.ObterCertificado(configuracaoCertificado); + using (RSA rsa = certificado.GetRSAPrivateKey()) + return rsa.SignData(value, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + } + } +} \ No newline at end of file diff --git a/Shared.DFe.Utils/Assinatura/CertificadoDigital.cs b/DFe.Utils/Assinatura/CertificadoDigital.cs similarity index 76% rename from Shared.DFe.Utils/Assinatura/CertificadoDigital.cs rename to DFe.Utils/Assinatura/CertificadoDigital.cs index 682964396..8104d944d 100644 --- a/Shared.DFe.Utils/Assinatura/CertificadoDigital.cs +++ b/DFe.Utils/Assinatura/CertificadoDigital.cs @@ -32,7 +32,7 @@ /********************************************************************************/ using System; -using System.Collections.Generic; +using System.Collections.Concurrent; using System.IO; using System.Runtime.InteropServices; using System.Security.Cryptography; @@ -43,7 +43,7 @@ namespace DFe.Utils.Assinatura { public static class CertificadoDigital { - private static readonly Dictionary CacheCertificado = new Dictionary(); + private static readonly ConcurrentDictionary CacheCertificado = new ConcurrentDictionary(); #region Métodos privados @@ -67,14 +67,14 @@ public static X509Store ObterX509Store(OpenFlags openFlags) /// Arquivo do certificado digital /// Senha do certificado digital /// - private static X509Certificate2 ObterDeArquivo(string arquivo, string senha) + private static X509Certificate2 ObterDeArquivo(string arquivo, string senha, X509KeyStorageFlags keyStorageFlag) { if (!File.Exists(arquivo)) { throw new Exception(string.Format("Certificado digital {0} não encontrado!", arquivo)); } - var certificado = new X509Certificate2(arquivo, senha, X509KeyStorageFlags.MachineKeySet); + var certificado = new X509Certificate2(arquivo, senha, keyStorageFlag); return certificado; } @@ -85,11 +85,11 @@ private static X509Certificate2 ObterDeArquivo(string arquivo, string senha) /// Array de bytes do certificado digital /// Senha do certificado digital /// - private static X509Certificate2 ObterDoArrayBytes(byte[] arrayBytes, string senha) + private static X509Certificate2 ObterDoArrayBytes(byte[] arrayBytes, string senha, X509KeyStorageFlags keyStorageFlag) { try { - var certificado = new X509Certificate2(arrayBytes, senha, X509KeyStorageFlags.MachineKeySet); + var certificado = new X509Certificate2(arrayBytes, senha, keyStorageFlag); return certificado; } catch (Exception ex) @@ -148,24 +148,34 @@ private static X509Certificate2 ObterDoRepositorioPassandoPin(string serial, str /// private static void DefinirPinParaChavePrivada(this X509Certificate2 certificado, string pin) { - if (certificado == null) throw new ArgumentNullException("certificado"); - var key = (RSACryptoServiceProvider)certificado.PrivateKey; - - var providerHandle = IntPtr.Zero; - var pinBuffer = Encoding.ASCII.GetBytes(pin); - - MetodosNativos.Executar(() => MetodosNativos.CryptAcquireContext(ref providerHandle, - key.CspKeyContainerInfo.KeyContainerName, - key.CspKeyContainerInfo.ProviderName, - key.CspKeyContainerInfo.ProviderType, - MetodosNativos.CryptContextFlags.Silent)); - MetodosNativos.Executar(() => MetodosNativos.CryptSetProvParam(providerHandle, - MetodosNativos.CryptParameter.KeyExchangePin, - pinBuffer, 0)); - MetodosNativos.Executar(() => MetodosNativos.CertSetCertificateContextProperty( - certificado.Handle, - MetodosNativos.CertificateProperty.CryptoProviderHandle, - 0, providerHandle)); + /// Suprimindo o aviso CA1416 para esta região de código específica +#pragma warning disable CA1416 + if (Environment.OSVersion.Platform == PlatformID.Win32NT || Environment.OSVersion.Platform == PlatformID.Win32Windows || Environment.OSVersion.Platform == PlatformID.Win32S) + { + if (certificado == null) throw new ArgumentNullException("certificado"); + var key = (RSACryptoServiceProvider)certificado.PrivateKey; + + var providerHandle = IntPtr.Zero; + var pinBuffer = Encoding.ASCII.GetBytes(pin); + + MetodosNativos.Executar(() => MetodosNativos.CryptAcquireContext(ref providerHandle, + key.CspKeyContainerInfo.KeyContainerName, + key.CspKeyContainerInfo.ProviderName, + key.CspKeyContainerInfo.ProviderType, + MetodosNativos.CryptContextFlags.Silent)); + MetodosNativos.Executar(() => MetodosNativos.CryptSetProvParam(providerHandle, + MetodosNativos.CryptParameter.KeyExchangePin, + pinBuffer, 0)); + MetodosNativos.Executar(() => MetodosNativos.CertSetCertificateContextProperty( + certificado.Handle, + MetodosNativos.CertificateProperty.CryptoProviderHandle, + 0, providerHandle)); + } + else + { + throw new NotSupportedException("Metodo DefinirPinParaChavePrivada com suporte apenas no Windows atualmente!"); + } +#pragma warning restore CA1416 } /// @@ -179,9 +189,9 @@ private static X509Certificate2 ObterDadosCertificado(ConfiguracaoCertificado co case TipoCertificado.A1Repositorio: return ObterDoRepositorio(configuracaoCertificado.Serial, OpenFlags.MaxAllowed); case TipoCertificado.A1ByteArray: - return ObterDoArrayBytes(configuracaoCertificado.ArrayBytesArquivo, configuracaoCertificado.Senha); + return ObterDoArrayBytes(configuracaoCertificado.ArrayBytesArquivo, configuracaoCertificado.Senha, configuracaoCertificado.KeyStorageFlags); case TipoCertificado.A1Arquivo: - return ObterDeArquivo(configuracaoCertificado.Arquivo, configuracaoCertificado.Senha); + return ObterDeArquivo(configuracaoCertificado.Arquivo, configuracaoCertificado.Senha, configuracaoCertificado.KeyStorageFlags); case TipoCertificado.A3: return ObterDoRepositorioPassandoPin(configuracaoCertificado.Serial, configuracaoCertificado.Senha); default: @@ -194,8 +204,8 @@ private static X509Certificate2 ObterDadosCertificado(ConfiguracaoCertificado co /// /// Obtém um objeto contendo o certificado digital /// Se for informado , - /// o certificado digital será obtido pelo método , - /// senão será obtido pelo método + /// o certificado digital será obtido pelo método , + /// senão será obtido pelo método /// Para liberar os recursos do certificado, após seu uso, invoque o método /// public static X509Certificate2 ObterCertificado(ConfiguracaoCertificado configuracaoCertificado) @@ -203,20 +213,20 @@ public static X509Certificate2 ObterCertificado(ConfiguracaoCertificado configur if (!configuracaoCertificado.ManterDadosEmCache) return ObterDadosCertificado(configuracaoCertificado); - if (!string.IsNullOrEmpty(configuracaoCertificado.CacheId) && CacheCertificado.ContainsKey(configuracaoCertificado.CacheId)) - return CacheCertificado[configuracaoCertificado.CacheId]; + if (!string.IsNullOrWhiteSpace(configuracaoCertificado.CacheId) && CacheCertificado.TryGetValue(configuracaoCertificado.CacheId, out var certificadoEmCache)) + return certificadoEmCache; var certificado = ObterDadosCertificado(configuracaoCertificado); - var keyCertificado = string.IsNullOrEmpty(configuracaoCertificado.CacheId) + var keyCertificado = string.IsNullOrWhiteSpace(configuracaoCertificado.CacheId) ? certificado.SerialNumber : configuracaoCertificado.CacheId; configuracaoCertificado.CacheId = keyCertificado; + + var certificadoDoCache = CacheCertificado.GetOrAdd(keyCertificado, certificado); - CacheCertificado.Add(keyCertificado, certificado); - - return CacheCertificado[keyCertificado]; + return certificadoDoCache; } public static void ClearCache() @@ -294,7 +304,7 @@ public static void VerificaValidade(this X509Certificate2 x509Certificate2) throw new ArgumentException("Certificado digital vencido na data => " + dataExpiracao); } } - + /// /// Extensão para retornar o número de dias válidos do certificado /// @@ -321,22 +331,33 @@ public static bool IsA3(this X509Certificate2 x509Certificate2) bool result = false; - try + /// Suprimindo o aviso CA1416 para esta região de código específica +#pragma warning disable CA1416 + if (Environment.OSVersion.Platform == PlatformID.Win32NT || Environment.OSVersion.Platform == PlatformID.Win32Windows || Environment.OSVersion.Platform == PlatformID.Win32S) { - RSACryptoServiceProvider service = x509Certificate2.PrivateKey as RSACryptoServiceProvider; - if (service != null) + try + { + RSACryptoServiceProvider service = x509Certificate2.PrivateKey as RSACryptoServiceProvider; + + if (service != null) + { + if (service.CspKeyContainerInfo.Removable && + service.CspKeyContainerInfo.HardwareDevice) + result = true; + } + } + catch { - if (service.CspKeyContainerInfo.Removable && - service.CspKeyContainerInfo.HardwareDevice) - result = true; + //assume que é false + result = false; } } - catch + else { - //assume que é false - result = false; + throw new NotSupportedException("Metodo IsA3 com suporte apenas no Windows atualmente!"); } +#pragma warning restore CA1416 return result; } diff --git a/DFe.Utils/CertificadoDigitalUtils.cs b/DFe.Utils/CertificadoDigitalUtils.cs index 757da8af8..178f71ea8 100644 --- a/DFe.Utils/CertificadoDigitalUtils.cs +++ b/DFe.Utils/CertificadoDigitalUtils.cs @@ -1,11 +1,17 @@ using System; using System.Security.Cryptography.X509Certificates; +#if !(NETSTANDARD || NETCOREAPP) using DFe.Utils.Assinatura; +#endif +using System.Security; +using System.IO; namespace DFe.Utils { public class CertificadoDigitalUtils { +#if !(NETSTANDARD || NETCOREAPP) + /// /// Exibe a lista de certificados instalados no PC e devolve o certificado selecionado /// @@ -26,5 +32,113 @@ public static X509Certificate2 ListareObterDoRepositorio() store.Close(); return scollection[0]; } +#endif + + /// + /// Retorna o certificado que está no caminho especificado + /// + /// Caminho do certificado (.pfx) + /// string representando a senha do certificado + public static X509Certificate2 ObterDoCaminho(string caminho, string password) + { + caminho = ArrumaCaminho(caminho); + SecureString stringSegura = null; + try + { + stringSegura = new SecureString(); + if ((password.Length > 0)) + { + foreach (Char caractere in password.ToCharArray()) + { + stringSegura.AppendChar(caractere); + } + } + return ObterDoCaminho(caminho, stringSegura); + } + catch + { + throw; + } + } + + /// + /// Retorna o certificado que está no caminho especificado + /// + /// Caminho do certificado (.pfx) + /// SecureString representando a senha do certificado + /// + public static X509Certificate2 ObterDoCaminho(string caminho, SecureString password) + { + caminho = ArrumaCaminho(caminho); + if (!caminho.ToLower().EndsWith(".pfx")) + { + throw new Exception("Caminho do certificado deve terminar com '.pfx'"); + } + + if (!File.Exists(caminho)) + { + throw new Exception("Certificado não se encontra no caminho especificado"); + } + + var cert = new X509Certificate2(caminho, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); + return cert; + } + + /// + /// Retorna o certificado que está em bytes + /// + /// array de byte do certificado + /// string representando a senha do certificado + /// + public static X509Certificate2 ObterDosBytes(byte[] bytes, string password, X509KeyStorageFlags? keyStorageFlags) + { + SecureString stringSegura = null; + try + { + stringSegura = new SecureString(); + if ((password.Length > 0)) + { + foreach (Char caractere in password.ToCharArray()) + { + stringSegura.AppendChar(caractere); + } + } + + return ObterDosBytes(bytes, stringSegura, keyStorageFlags); + } + catch + { + throw; + } + } + + /// + /// Retorna o certificado que está em bytes + /// + /// array de byte do certificado + /// SecureString senha do certificado + /// + public static X509Certificate2 ObterDosBytes(byte[] bytes, SecureString password, X509KeyStorageFlags? keyStorageFlags) + { + var cert = new X509Certificate2(bytes, password, keyStorageFlags ?? (X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable)); + return cert; + } + + /// + /// Arruma o path caso tenha sido escrito incorretamente + /// + /// Caminho do arquivo + pastas + /// + private static string ArrumaCaminho(string caminho) + { + caminho = caminho.Replace(@"\\", @"\"); + caminho = caminho.Replace(@"//", @"/"); + caminho = caminho.Replace("\"", ""); //remove " + caminho = caminho.Replace("\'", ""); //remove ' + caminho = caminho.Replace(@"/", Path.DirectorySeparatorChar.ToString()); + caminho = caminho.Replace(@"\", Path.DirectorySeparatorChar.ToString()); + + return caminho; + } } } \ No newline at end of file diff --git a/Shared.DFe.Utils/ChaveFiscal.cs b/DFe.Utils/ChaveFiscal.cs similarity index 88% rename from Shared.DFe.Utils/ChaveFiscal.cs rename to DFe.Utils/ChaveFiscal.cs index 3b6356cff..30c7ed088 100644 --- a/Shared.DFe.Utils/ChaveFiscal.cs +++ b/DFe.Utils/ChaveFiscal.cs @@ -59,14 +59,19 @@ public static DadosChaveFiscal ObterChave(Estado ufEmitente, DateTimeOffset data { var chave = new StringBuilder(); + if (cnpjEmitente.Length < 14) + { + cnpjEmitente = cnpjEmitente.PadLeft(14, '0'); + } + chave.Append(((int)ufEmitente).ToString("D2")) - .Append(dataEmissao.ToString("yyMM")) - .Append(cnpjEmitente) - .Append(((int)modelo).ToString("D2")) - .Append(serie.ToString("D3")) - .Append(numero.ToString("D9")) - .Append(tipoEmissao.ToString()) - .Append(cNf.ToString("D8")); + .Append(dataEmissao.ToString("yyMM")) + .Append(cnpjEmitente) + .Append(((int)modelo).ToString("D2")) + .Append(serie.ToString("D3")) + .Append(numero.ToString("D9")) + .Append(tipoEmissao.ToString()) + .Append(cNf.ToString("D8")); var digitoVerificador = ObterDigitoVerificador(chave.ToString()); @@ -90,8 +95,8 @@ private static string ObterDigitoVerificador(string chave) //percorrendo cada caractere da chave da direita para esquerda para fazer os cálculos com o peso for (var i = chave.Length - 1; i != -1; i--) { - var ch = Convert.ToInt32(chave[i].ToString()); - soma += ch*peso; + var valorCaractere = ObterValorDoCaractere(chave[i]); + soma += valorCaractere * peso; //sempre que for 9 voltamos o peso a 2 if (peso < 9) peso += 1; @@ -110,6 +115,18 @@ private static string ObterDigitoVerificador(string chave) return dv.ToString(); } + /// + /// Obtem o valor de um caractere + /// + /// + /// + internal static int ObterValorDoCaractere(char caractere) + { + const int zeroASCII = 48; + var valor = caractere - zeroASCII; + return valor; + } + /// /// Informa se a chave de um DF-e é válida /// diff --git a/Shared.DFe.Utils/ConfiguracaoCertificado.cs b/DFe.Utils/ConfiguracaoCertificado.cs similarity index 93% rename from Shared.DFe.Utils/ConfiguracaoCertificado.cs rename to DFe.Utils/ConfiguracaoCertificado.cs index d0622f432..158e28bf5 100644 --- a/Shared.DFe.Utils/ConfiguracaoCertificado.cs +++ b/DFe.Utils/ConfiguracaoCertificado.cs @@ -33,6 +33,7 @@ using System; using System.ComponentModel; +using System.Security.Cryptography.X509Certificates; namespace DFe.Utils { @@ -59,9 +60,11 @@ public class ConfiguracaoCertificado private TipoCertificado _tipoCertificado; private string _cacheId; private byte[] _arrayBytesArquivo; + private X509KeyStorageFlags _keyStorageFlags; public ConfiguracaoCertificado() { + KeyStorageFlags = X509KeyStorageFlags.MachineKeySet; SignatureMethodSignedXml = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"; DigestMethodReference = "http://www.w3.org/2000/09/xmldsig#sha1"; } @@ -179,5 +182,18 @@ public string CacheId /// URI para DigestMethod na Classe Reference para auxiliar para a assinatura (Padrao: http://www.w3.org/2000/09/xmldsig#sha1) /// public string DigestMethodReference { get; set; } + + /// + /// + /// + public X509KeyStorageFlags KeyStorageFlags + { + get { return _keyStorageFlags; } + set + { + if (value == _keyStorageFlags) return; + _keyStorageFlags = value; + } + } } } diff --git a/DFe.Utils/DFe.Utils.csproj b/DFe.Utils/DFe.Utils.csproj old mode 100755 new mode 100644 index 0d28a05a6..1c59a4fa6 --- a/DFe.Utils/DFe.Utils.csproj +++ b/DFe.Utils/DFe.Utils.csproj @@ -1,65 +1,16 @@ - - - - - Debug - AnyCPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - Library - Properties - DFe.Utils - DFe.Utils - v4.5 - 512 - - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} - DFe.Classes - - - - - - \ No newline at end of file + + + + net462;netstandard2.0;net6.0 + + + + + + + + + + + + diff --git a/DFe.Utils/DFe.Utils.csproj.DotSettings b/DFe.Utils/DFe.Utils.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/DFe.Utils/DFe.Utils.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/DFe.Utils/DFe.Utils.csproj.vspscc b/DFe.Utils/DFe.Utils.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/DFe.Utils/DFe.Utils.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Shared.DFe.Utils/DataHora.cs b/DFe.Utils/DataHora.cs similarity index 93% rename from Shared.DFe.Utils/DataHora.cs rename to DFe.Utils/DataHora.cs index 4a3ccf436..7951ed586 100644 --- a/Shared.DFe.Utils/DataHora.cs +++ b/DFe.Utils/DataHora.cs @@ -58,6 +58,18 @@ public static string ParaDataString(this DateTime? data) return data == DateTime.MinValue ? null : data.Value.ToString("yyyy-MM-dd"); } + + /// + /// Retorna uma string no formato AAAA-MM + /// + /// + /// + public static string ParaDataAnoEMesString(this DateTime? data) + { + if (data == null) return null; + + return data == DateTime.MinValue ? null : data.Value.ToString("yyyy-MM"); + } /// /// Retorna uma string no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) diff --git a/Shared.DFe.Utils/DataHoraOffSet.cs b/DFe.Utils/DataHoraOffSet.cs similarity index 100% rename from Shared.DFe.Utils/DataHoraOffSet.cs rename to DFe.Utils/DataHoraOffSet.cs diff --git a/Shared.DFe.Utils/EnumExt.cs b/DFe.Utils/EnumExt.cs similarity index 100% rename from Shared.DFe.Utils/EnumExt.cs rename to DFe.Utils/EnumExt.cs diff --git a/DFe.Utils/ExtXmlSerializerFactory.cs b/DFe.Utils/ExtXmlSerializerFactory.cs new file mode 100644 index 000000000..67ec93748 --- /dev/null +++ b/DFe.Utils/ExtXmlSerializerFactory.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace DFe.Utils { + + public abstract class XmlOrderFreeSerializerFactory { + // Referência https://stackoverflow.com/a/33508815 + readonly static XmlAttributeOverrides overrides = new XmlAttributeOverrides(); + readonly static object locker = new object(); + readonly static Dictionary serializers = new Dictionary(); + static HashSet overridesAdded = new HashSet(); + + static void AddOverrideAttributes(Type type, XmlAttributeOverrides overrides) { + + if (type == null || type == typeof(object) || type.IsPrimitive || type == typeof(string) || type == typeof(DateTime)) { + return; + } + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { + AddOverrideAttributes(type.GetGenericArguments()[0], overrides); + return; + } + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { + AddOverrideAttributes(type.GetGenericArguments()[0], overrides); + return; + } + + var mask = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public; + foreach (var member in type.GetProperties(mask).Cast().Union(type.GetFields(mask))) { + var otTag = $"{type.Name}_{member.Name}"; + if (overridesAdded.Contains(otTag)) { + continue; + } + XmlAttributes overrideAttr = null; + foreach (var attr in member.GetCustomAttributes()) { + overrideAttr = overrideAttr ?? new XmlAttributes(); + var overrideElt = new XmlElementAttribute(attr.ElementName, attr.Type) { DataType = attr.DataType, ElementName = attr.ElementName, Form = attr.Form, Namespace = attr.Namespace, Type = attr.Type }; + if(attr.IsNullable) { + // Isso aqui deve ter uma logica personalizada no setter, colocar ali em cima causa erro + overrideElt.IsNullable = true; + } + overrideAttr.XmlElements.Add(overrideElt); + if(attr.Type != null) { + AddOverrideAttributes(attr.Type, overrides); + } + } + foreach (var attr in member.GetCustomAttributes()) { + overrideAttr = overrideAttr ?? new XmlAttributes(); + overrideAttr.XmlArray = new XmlArrayAttribute { ElementName = attr.ElementName, Form = attr.Form, IsNullable = attr.IsNullable, Namespace = attr.Namespace }; + } + foreach (var attr in member.GetCustomAttributes()) { + overrideAttr = overrideAttr ?? new XmlAttributes(); + overrideAttr.XmlArrayItems.Add(attr); + } + foreach (var attr in member.GetCustomAttributes()) { + overrideAttr = overrideAttr ?? new XmlAttributes(); + overrideAttr.XmlAnyElements.Add(new XmlAnyElementAttribute { Name = attr.Name, Namespace = attr.Namespace }); + } + if (overrideAttr != null) { + overridesAdded.Add(otTag); + overrides.Add(type, member.Name, overrideAttr); + } + var mType = (member is PropertyInfo pi ? pi.PropertyType : member is FieldInfo fi ? fi.FieldType : null); + AddOverrideAttributes(mType, overrides); + } + } + + public static XmlSerializer GetSerializer(Type type) { + if (type == null) + throw new ArgumentNullException("type"); + lock (locker) { + XmlSerializer serializer; + if (!serializers.TryGetValue(type, out serializer)) { + AddOverrideAttributes(type, overrides); + serializers[type] = serializer = new XmlSerializer(type, overrides); + } + return serializer; + } + } + + } + + public static class TypeExtensions { + public static IEnumerable BaseTypesAndSelf(this Type type) { + while (type != null) { + yield return type; + type = type.BaseType; + } + } + } +} diff --git a/DFe.Utils/FrxFileHelper.cs b/DFe.Utils/FrxFileHelper.cs new file mode 100644 index 000000000..131133c84 --- /dev/null +++ b/DFe.Utils/FrxFileHelper.cs @@ -0,0 +1,28 @@ +using System; +using System.IO; +using System.Reflection; + +namespace DFe.Utils +{ + public static class FrxFileHelper + { + public static byte[] TryGetFrxFile(string caminho) + { + try + { + if (!caminho.EndsWith(".frx")) + { + caminho += ".frx"; + } + + var path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new InvalidOperationException("Erro no Zeus. Assembly de relatório nao encontrado"), caminho); + var bytes = File.ReadAllBytes(path); + return bytes.Length == 0 ? null : bytes; + } + catch (Exception) + { + return null; + } + } + } +} diff --git a/Shared.DFe.Utils/FuncoesXml.cs b/DFe.Utils/FuncoesXml.cs similarity index 89% rename from Shared.DFe.Utils/FuncoesXml.cs rename to DFe.Utils/FuncoesXml.cs index 1bd534d27..839f1d882 100644 --- a/Shared.DFe.Utils/FuncoesXml.cs +++ b/DFe.Utils/FuncoesXml.cs @@ -1,4 +1,4 @@ -/********************************************************************************/ +/********************************************************************************/ /* Projeto: Biblioteca ZeusDFe */ /* Biblioteca C# para auxiliar no desenvolvimento das demais bibliotecas DFe */ /* */ @@ -77,14 +77,21 @@ public static string ClasseParaXmlString(T objeto) /// /// /// + /// true caso o XML possa conter elementos fora de ordem /// - public static T XmlStringParaClasse(string input) where T : class + public static T XmlStringParaClasse(string input, bool ignorarOrdenacaoElementos = false) where T : class { var keyNomeClasseEmUso = typeof(T).FullName; - var ser = BuscarNoCache(keyNomeClasseEmUso, typeof(T)); + + XmlSerializer serializador; + if(ignorarOrdenacaoElementos) { + serializador = XmlOrderFreeSerializerFactory.GetSerializer(typeof(T)); + } else { + serializador = BuscarNoCache(keyNomeClasseEmUso, typeof(T)); + } using (var sr = new StringReader(input)) - return (T)ser.Deserialize(sr); + return (T)serializador.Deserialize(sr); } /// @@ -94,7 +101,7 @@ public static T XmlStringParaClasse(string input) where T : class /// Classe /// Arquivo XML /// Retorna a classe - public static T ArquivoXmlParaClasse(string arquivo) where T : class + public static T ArquivoXmlParaClasse(string arquivo, bool ignorarOrdenacaoElementos = false) where T : class { if (!File.Exists(arquivo)) { @@ -102,7 +109,19 @@ public static T ArquivoXmlParaClasse(string arquivo) where T : class } var keyNomeClasseEmUso = typeof(T).FullName; - var serializador = BuscarNoCache(keyNomeClasseEmUso, typeof(T)); + + XmlSerializer serializador; + if (ignorarOrdenacaoElementos) { + serializador = XmlOrderFreeSerializerFactory.GetSerializer(typeof(T)); + } else { + serializador = BuscarNoCache(keyNomeClasseEmUso, typeof(T)); + } + + if(arquivo.Contains("../") || arquivo.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + var stream = new FileStream(arquivo, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); try { diff --git a/DFe.Utils/Properties/AssemblyInfo.cs b/DFe.Utils/Properties/AssemblyInfo.cs old mode 100755 new mode 100644 index 46febe98e..9d397211c --- a/DFe.Utils/Properties/AssemblyInfo.cs +++ b/DFe.Utils/Properties/AssemblyInfo.cs @@ -1,35 +1,3 @@ -using System.Reflection; -using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DFe.Utils")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DFe.Utils")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("b4e1a7a6-5d66-4326-8a8d-39338e6fc84c")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] +[assembly: InternalsVisibleTo("NFe.Utils.Testes")] diff --git a/Shared.DFe.Utils/Reflexao.cs b/DFe.Utils/Reflexao.cs similarity index 100% rename from Shared.DFe.Utils/Reflexao.cs rename to DFe.Utils/Reflexao.cs diff --git a/DFe.Utils/StringExtencoes.cs b/DFe.Utils/StringExtencoes.cs new file mode 100644 index 000000000..db3b56047 --- /dev/null +++ b/DFe.Utils/StringExtencoes.cs @@ -0,0 +1,43 @@ +using System; +using System.Text.RegularExpressions; + +namespace Shared.DFe.Utils +{ + public static class StringExtensoes + { + public static string RemoverAcentos(this string valor) + { + if (string.IsNullOrEmpty(valor)) + return valor; + + valor = Regex.Replace(valor, "[áàâãª]", "a"); + valor = Regex.Replace(valor, "[ÁÀÂÃÄ]", "A"); + valor = Regex.Replace(valor, "[éèêë]", "e"); + valor = Regex.Replace(valor, "[ÉÈÊË]", "E"); + valor = Regex.Replace(valor, "[íìîï]", "i"); + valor = Regex.Replace(valor, "[ÍÌÎÏ]", "I"); + valor = Regex.Replace(valor, "[óòôõöº]", "o"); + valor = Regex.Replace(valor, "[ÓÒÔÕÖ]", "O"); + valor = Regex.Replace(valor, "[úùûü]", "u"); + valor = Regex.Replace(valor, "[ÚÙÛÜ]", "U"); + valor = Regex.Replace(valor, "[Ç]", "C"); + valor = Regex.Replace(valor, "[ç]", "c"); + + return valor; + } + + public static string RemoverDeclaracaoXml(this string xml) + { + if (string.IsNullOrEmpty(xml)) + return xml; + + var posIni = xml.IndexOf("", StringComparison.Ordinal); + return posFinal < 0 ? xml : xml.Remove(posIni, (posFinal + 2) - posIni); + } + + } +} diff --git a/Shared.DFe.Utils/Utils/Compressao.cs b/DFe.Utils/Utils/Compressao.cs similarity index 100% rename from Shared.DFe.Utils/Utils/Compressao.cs rename to DFe.Utils/Utils/Compressao.cs diff --git a/DFe.Wsdl.Standard/DFe.Wsdl.Standard.csproj b/DFe.Wsdl.Standard/DFe.Wsdl.Standard.csproj deleted file mode 100644 index 92ecb1f5d..000000000 --- a/DFe.Wsdl.Standard/DFe.Wsdl.Standard.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - netstandard2.0 - - - - - - - - - - diff --git a/Shared.DFe.Wsdl/Cabecalho/ITagCabecalho.cs b/DFe.Wsdl/Cabecalho/ITagCabecalho.cs similarity index 100% rename from Shared.DFe.Wsdl/Cabecalho/ITagCabecalho.cs rename to DFe.Wsdl/Cabecalho/ITagCabecalho.cs diff --git a/Shared.DFe.Wsdl/Cabecalho/NfeTagCabecalho.cs b/DFe.Wsdl/Cabecalho/NfeTagCabecalho.cs similarity index 100% rename from Shared.DFe.Wsdl/Cabecalho/NfeTagCabecalho.cs rename to DFe.Wsdl/Cabecalho/NfeTagCabecalho.cs diff --git a/Shared.DFe.Wsdl/Cabecalho/TagCabecalhoVazia.cs b/DFe.Wsdl/Cabecalho/TagCabecalhoVazia.cs similarity index 100% rename from Shared.DFe.Wsdl/Cabecalho/TagCabecalhoVazia.cs rename to DFe.Wsdl/Cabecalho/TagCabecalhoVazia.cs diff --git a/Shared.DFe.Wsdl/Common/CommonResponseBody.cs b/DFe.Wsdl/Common/CommonResponseBody.cs similarity index 100% rename from Shared.DFe.Wsdl/Common/CommonResponseBody.cs rename to DFe.Wsdl/Common/CommonResponseBody.cs diff --git a/Shared.DFe.Wsdl/Common/CommonResponseHead.cs b/DFe.Wsdl/Common/CommonResponseHead.cs similarity index 100% rename from Shared.DFe.Wsdl/Common/CommonResponseHead.cs rename to DFe.Wsdl/Common/CommonResponseHead.cs diff --git a/Shared.DFe.Wsdl/Common/CommonSOAPEnvelope.cs b/DFe.Wsdl/Common/CommonSOAPEnvelope.cs similarity index 100% rename from Shared.DFe.Wsdl/Common/CommonSOAPEnvelope.cs rename to DFe.Wsdl/Common/CommonSOAPEnvelope.cs diff --git a/DFe.Wsdl/Common/ConfiguracaoServicoWSDL.cs b/DFe.Wsdl/Common/ConfiguracaoServicoWSDL.cs new file mode 100644 index 000000000..5b192c3ea --- /dev/null +++ b/DFe.Wsdl/Common/ConfiguracaoServicoWSDL.cs @@ -0,0 +1,26 @@ +using System; + +namespace DFe.Wsdl.Common +{ + public static class ConfiguracaoServicoWSDL + { + public static bool ValidarCertificadoDoServidorNetCore { get; set; } + private static Func _requestSefazFactory; + + public static void SetRequestSefazFactory(Func factory) + { + _requestSefazFactory = factory; + } + + public static IRequestSefaz GetRequestSefaz() + { + return _requestSefazFactory(); + } + + static ConfiguracaoServicoWSDL() + { + ValidarCertificadoDoServidorNetCore = true; + SetRequestSefazFactory(() => new RequestSefazDefault()); + } + } +} \ No newline at end of file diff --git a/DFe.Wsdl/Common/IRequestSefaz.cs b/DFe.Wsdl/Common/IRequestSefaz.cs new file mode 100644 index 000000000..909b8eb7d --- /dev/null +++ b/DFe.Wsdl/Common/IRequestSefaz.cs @@ -0,0 +1,18 @@ +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using System.Xml; +using CTe.CTeOSDocumento.Common; + +namespace DFe.Wsdl.Common +{ + public interface IRequestSefaz + { + XmlDocument SerealizeDocument(T soapEnvelope); + + Task SendRequestAsync(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, + int timeOut, TipoEvento? tipoEvento = null, string actionUrn = ""); + + string SendRequest(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, + TipoEvento? tipoEvento = null, string actionUrn = ""); + } +} \ No newline at end of file diff --git a/Shared.DFe.Wsdl/Common/RequestBuilderAndSender.cs b/DFe.Wsdl/Common/RequestBuilderAndSender.cs similarity index 97% rename from Shared.DFe.Wsdl/Common/RequestBuilderAndSender.cs rename to DFe.Wsdl/Common/RequestBuilderAndSender.cs index 9e910572c..a723721cc 100644 --- a/Shared.DFe.Wsdl/Common/RequestBuilderAndSender.cs +++ b/DFe.Wsdl/Common/RequestBuilderAndSender.cs @@ -73,7 +73,7 @@ public static XmlNode Execute(TCommonSoapEnvelope soapEnvel string tes = soapUtils.SendRequest(xmlEnvelop, configuration.CertificadoDigital, configuration.Url, configuration.TimeOut, actionUrn: actionUrn); xmlResult.LoadXml(tes); - return xmlResult.GetElementsByTagName(responseElementName)[0]; + return xmlResult.SelectSingleNode($"//*[local-name()='{responseElementName}']"); } } } \ No newline at end of file diff --git a/DFe.Wsdl/Common/RequestSefazDefault.cs b/DFe.Wsdl/Common/RequestSefazDefault.cs new file mode 100644 index 000000000..92d470983 --- /dev/null +++ b/DFe.Wsdl/Common/RequestSefazDefault.cs @@ -0,0 +1,143 @@ +using System; +using System.IO; +using System.Net; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; +using CTe.CTeOSDocumento.Soap; +using DFe.Http.Ext; + +namespace DFe.Wsdl.Common +{ + public class RequestSefazDefault : IRequestSefaz + { + /// + /// Serializa a estrutura do envelope contida no objeto para um XmlDocument. + /// + /// + /// + /// + public XmlDocument SerealizeDocument(T soapEnvelope) + { + // instancia do objeto responsável pela serialização + XmlSerializer soapserializer = new XmlSerializer(typeof(T)); + + // Armazena os dados em memória para manipulação + MemoryStream memoryStream = new MemoryStream(); + XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); + + //Serializa o objeto de acordo com o formato + soapserializer.Serialize(xmlTextWriter, soapEnvelope); + xmlTextWriter.Formatting = Formatting.None; + + XmlDocument xmlDocument = new XmlDocument(); + + //Remove o caractere especial BOM (byte order mark) + string output = Encoding.UTF8.GetString(memoryStream.ToArray()); + string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); + if (output.StartsWith(_byteOrderMarkUtf8)) + { + output = output.Remove(0, _byteOrderMarkUtf8.Length); + } + + //Carrega os dados na instancia do XmlDocument + xmlDocument.LoadXml(output); + + return xmlDocument; + } + + /// + /// Cria e envia a requisição HttpClient, retornando a resposta obtida do WebService. + /// + /// + /// + /// + /// + /// + /// + public async Task SendRequestAsync(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, TipoEvento? tipoEvento = null, string actionUrn = "") + { + //verifica se pelo menos uma das 2 propriedades obrigatorias estão definidas + if (!tipoEvento.HasValue && string.IsNullOrWhiteSpace(actionUrn)) + { + throw new ArgumentNullException("Pelo menos uma das propriedades tipoEvento ou actionUrl devem ser definidos para executar a action na requisição soap"); + } + + //caso o tipoevento esteja definido, pega a url do evento + if (tipoEvento.HasValue) + { + actionUrn = new SoapUrls().GetSoapUrl(tipoEvento.Value); + } + + string xmlSoap = xmlEnvelop.InnerXml; + HttpWebRequest httpWr = (HttpWebRequest)WebRequest.Create(new Uri(url)); + + if (ConfiguracaoServicoWSDL.ValidarCertificadoDoServidorNetCore == false) + { + httpWr.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true; + } + + httpWr.Timeout = timeOut == 0 ? 2000 : timeOut; + httpWr.ContentLength = Encoding.UTF8.GetBytes(xmlSoap).Length; + httpWr.ClientCertificates.Add(certificadoDigital); + httpWr.ComposeContentType("application/soap+xml", Encoding.UTF8, actionUrn); + httpWr.Method = "POST"; + + StreamWriter streamWriter = new StreamWriter(httpWr.GetRequestStream()); + + streamWriter.Write(xmlSoap, 0, Encoding.UTF8.GetBytes(xmlSoap).Length); + streamWriter.Close(); + + using (HttpWebResponse httpResponse = (HttpWebResponse)httpWr.GetResponse()) + using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) + { + string xmlRetorno = streamReader.ReadToEnd(); + return await Task.FromResult(xmlRetorno); + } + } + + public string SendRequest(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, TipoEvento? tipoEvento = null, string actionUrn = "") + { + //verifica se pelo menos uma das 2 propriedades obrigatorias estão definidas + if (!tipoEvento.HasValue && string.IsNullOrWhiteSpace(actionUrn)) + { + throw new ArgumentNullException("Pelo menos uma das propriedades tipoEvento ou actionUrl devem ser definidos para executar a action na requisição soap"); + } + + //caso o tipoevento esteja definido, pega a url do evento + if (tipoEvento.HasValue) + { + actionUrn = new SoapUrls().GetSoapUrl(tipoEvento.Value); + } + + string xmlSoap = xmlEnvelop.InnerXml; + HttpWebRequest httpWr = (HttpWebRequest)WebRequest.Create(new Uri(url)); + + if (ConfiguracaoServicoWSDL.ValidarCertificadoDoServidorNetCore == false) + { + httpWr.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true; + } + + httpWr.Timeout = timeOut == 0 ? 2000 : timeOut; + httpWr.ContentLength = Encoding.UTF8.GetBytes(xmlSoap).Length; + httpWr.ClientCertificates.Add(certificadoDigital); + httpWr.ComposeContentType("application/soap+xml", Encoding.UTF8, actionUrn); + httpWr.Method = "POST"; + + StreamWriter streamWriter = new StreamWriter(httpWr.GetRequestStream()); + + streamWriter.Write(xmlSoap, 0, Encoding.UTF8.GetBytes(xmlSoap).Length); + streamWriter.Close(); + + using (HttpWebResponse httpResponse = (HttpWebResponse)httpWr.GetResponse()) + using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) + { + string xmlRetorno = streamReader.ReadToEnd(); + return xmlRetorno; + } + } + } +} \ No newline at end of file diff --git a/DFe.Wsdl/Common/RequestSefazHttpClientHandler.cs b/DFe.Wsdl/Common/RequestSefazHttpClientHandler.cs new file mode 100644 index 000000000..1a84ad7d6 --- /dev/null +++ b/DFe.Wsdl/Common/RequestSefazHttpClientHandler.cs @@ -0,0 +1,127 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; +using CTe.CTeOSDocumento.Soap; + +namespace DFe.Wsdl.Common +{ + public class RequestSefazHttpClientHandler : IRequestSefaz + { + public XmlDocument SerealizeDocument(T soapEnvelope) + { + // instancia do objeto responsável pela serialização + XmlSerializer soapserializer = new XmlSerializer(typeof(T)); + + // Armazena os dados em memória para manipulação + MemoryStream memoryStream = new MemoryStream(); + XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); + + //Serializa o objeto de acordo com o formato + soapserializer.Serialize(xmlTextWriter, soapEnvelope); + xmlTextWriter.Formatting = Formatting.None; + + XmlDocument xmlDocument = new XmlDocument(); + + //Remove o caractere especial BOM (byte order mark) + string output = Encoding.UTF8.GetString(memoryStream.ToArray()); + string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); + if (output.StartsWith(_byteOrderMarkUtf8)) + { + output = output.Remove(0, _byteOrderMarkUtf8.Length); + } + + //Carrega os dados na instancia do XmlDocument + xmlDocument.LoadXml(output); + + return xmlDocument; + } + + public async Task SendRequestAsync(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, + string url, int timeOut, + TipoEvento? tipoEvento = null, string actionUrn = "") + { + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + if (!tipoEvento.HasValue && string.IsNullOrWhiteSpace(actionUrn)) + { + throw new ArgumentNullException( + "Pelo menos uma das propriedades tipoEvento ou actionUrl devem ser definidos para executar a action na requisição soap"); + } + + if (tipoEvento.HasValue) + { + actionUrn = new SoapUrls().GetSoapUrl(tipoEvento.Value); + } + + string xmlSoap = xmlEnvelop.InnerXml; + + using (HttpClientHandler handler = new HttpClientHandler()) + { + handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; + handler.ClientCertificates.Add(certificadoDigital); + + using (HttpClient client = new HttpClient(handler)) + { + client.Timeout = TimeSpan.FromMilliseconds(timeOut == 0 ? 2000 : timeOut); + + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url); + request.Content = new StringContent(xmlSoap, Encoding.UTF8, "application/soap+xml"); + request.Headers.Add("SOAPAction", actionUrn); + + HttpResponseMessage response = await client.SendAsync(request); + + response.EnsureSuccessStatusCode(); + + return await response.Content.ReadAsStringAsync(); + } + } + + } + + public string SendRequest(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, + TipoEvento? tipoEvento = null, string actionUrn = "") + { + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + if (!tipoEvento.HasValue && string.IsNullOrWhiteSpace(actionUrn)) + { + throw new ArgumentNullException( + "Pelo menos uma das propriedades tipoEvento ou actionUrl devem ser definidos para executar a action na requisição soap"); + } + + if (tipoEvento.HasValue) + { + actionUrn = new SoapUrls().GetSoapUrl(tipoEvento.Value); + } + + string xmlSoap = xmlEnvelop.InnerXml; + + using (HttpClientHandler handler = new HttpClientHandler()) + { + handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; + handler.ClientCertificates.Add(certificadoDigital); + + using (HttpClient client = new HttpClient(handler)) + { + client.Timeout = TimeSpan.FromMilliseconds(timeOut == 0 ? 2000 : timeOut); + + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url); + request.Content = new StringContent(xmlSoap, Encoding.UTF8, "application/soap+xml"); + request.Headers.Add("SOAPAction", actionUrn); + + HttpResponseMessage response = client.SendAsync(request).Result; + + response.EnsureSuccessStatusCode(); + + return response.Content.ReadAsStringAsync().Result; + } + } + + } + } +} \ No newline at end of file diff --git a/DFe.Wsdl/Common/SoapUrls.cs b/DFe.Wsdl/Common/SoapUrls.cs new file mode 100644 index 000000000..b18a093c3 --- /dev/null +++ b/DFe.Wsdl/Common/SoapUrls.cs @@ -0,0 +1,55 @@ +using System; +using CTe.CTeOSDocumento.Common; + +namespace CTe.CTeOSDocumento.Soap +{ + public class SoapUrls + { + public string GetSoapUrl(TipoEvento tipoEvento) + { + switch (tipoEvento) + { + case TipoEvento.CTeConsulta: + return "http://www.portalfiscal.inf.br/cte/wsdl/CteConsulta"; + case TipoEvento.CTeDistribuicaoDFe: + return "http://www.portalfiscal.inf.br/cte/wsdl/CTeDistribuicaoDFe/cteDistDFeInteresse"; + case TipoEvento.CTeRecepcaoEvento: + return "http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento"; + case TipoEvento.CTeRecepcaoEventoV4: + return "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoEventoV4/cteRecepcaoEvento"; + case TipoEvento.CTeInutilizacao: + return "http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao"; + case TipoEvento.CTeRecepcao: + return "http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao"; + case TipoEvento.CTeRecepcaoV4: + return "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoSincV4/cteRecepcao"; + case TipoEvento.CTeRetRecepcao: + return "http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao"; + case TipoEvento.CTeStatusServico: + return "http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico"; + case TipoEvento.CTeStatusServicoV4: + return "http://www.portalfiscal.inf.br/cte/wsdl/CTeStatusServicoV4/cteStatusServicoCT"; + case TipoEvento.MDFeStatusServico: + return "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico"; + case TipoEvento.MDFeRecepcao: + return "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao"; + case TipoEvento.MDFeRecepcaoSinc: + return "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc"; + case TipoEvento.MDFeRetRecepcao: + return "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao"; + case TipoEvento.MDFeNaoEncerrado: + return "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc"; + case TipoEvento.MDFeConsulta: + return "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta"; + case TipoEvento.MDFeEvento: + return "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento"; + case TipoEvento.CTeConsultaV4: + return "http://www.portalfiscal.inf.br/cte/wsdl/CTeConsultaV4/cteConsultaCT"; + case TipoEvento.CTeRecepcaoOSV4: + return "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoOSV4/cteRecepcaoOS"; + default: + throw new ArgumentOutOfRangeException(nameof(tipoEvento), tipoEvento, null); + } + } + } +} \ No newline at end of file diff --git a/DFe.Wsdl/Common/SoapUtils.cs b/DFe.Wsdl/Common/SoapUtils.cs new file mode 100644 index 000000000..53e4360cd --- /dev/null +++ b/DFe.Wsdl/Common/SoapUtils.cs @@ -0,0 +1,59 @@ +using CTe.CTeOSDocumento.Common; +using DFe.Http.Ext; +using DFe.Wsdl.Common; +using System; +using System.IO; +using System.Net; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; + +namespace CTe.CTeOSDocumento.Soap +{ + /// + /// Classe utilitária resposável pela serialização das classes em um envelope do tipo + /// SOAP e envio das requisições para os respectivos Web Services. + /// + public class SoapUtils + { + private IRequestSefaz _requestSefaz; + + public SoapUtils() + { + _requestSefaz = ConfiguracaoServicoWSDL.GetRequestSefaz(); + } + + /// + /// Serializa a estrutura do envelope contida no objeto para um XmlDocument. + /// + /// + /// + /// + public XmlDocument SerealizeDocument(T soapEnvelope) + { + return _requestSefaz.SerealizeDocument(soapEnvelope); + } + + /// + /// Cria e envia a requisição HttpClient, retornando a resposta obtida do WebService. + /// + /// + /// + /// + /// + /// + /// + public async Task SendRequestAsync(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, TipoEvento? tipoEvento = null, string actionUrn = "") + { + return await _requestSefaz.SendRequestAsync(xmlEnvelop, certificadoDigital, url, timeOut, tipoEvento, actionUrn); + } + + public string SendRequest(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, TipoEvento? tipoEvento = null, string actionUrn = "") + { + return _requestSefaz.SendRequest(xmlEnvelop, certificadoDigital, url, timeOut, tipoEvento, actionUrn); + } + } + +} diff --git a/DFe.Wsdl/Common/TipoEvento.cs b/DFe.Wsdl/Common/TipoEvento.cs new file mode 100644 index 000000000..7fe85bc66 --- /dev/null +++ b/DFe.Wsdl/Common/TipoEvento.cs @@ -0,0 +1,29 @@ +namespace CTe.CTeOSDocumento.Common +{ + public enum TipoEvento + { + CTeConsulta, + + CTeDistribuicaoDFe, + CTeRecepcaoEvento, + CTeInutilizacao, + CTeRecepcao, + CTeRetRecepcao, + CTeStatusServico, + + MDFeStatusServico, + MDFeRecepcao, + MDFeRecepcaoSinc, + MDFeRetRecepcao, + MDFeNaoEncerrado, + MDFeConsulta, + MDFeEvento, + + CTeConsultaV4, + CTeRecepcaoV4, + CTeRecepcaoOSV4, + CTeStatusServicoV4, + CTeDistribuicaoDFeV4, + CTeRecepcaoEventoV4, + } +} \ No newline at end of file diff --git a/Shared.DFe.Wsdl/Common/WsdlConfiguracao.cs b/DFe.Wsdl/Common/WsdlConfiguracao.cs similarity index 100% rename from Shared.DFe.Wsdl/Common/WsdlConfiguracao.cs rename to DFe.Wsdl/Common/WsdlConfiguracao.cs diff --git a/Shared.DFe.Wsdl/Common/cteCabecMsg.cs b/DFe.Wsdl/Common/cteCabecMsg.cs similarity index 100% rename from Shared.DFe.Wsdl/Common/cteCabecMsg.cs rename to DFe.Wsdl/Common/cteCabecMsg.cs diff --git a/DFe.Wsdl/Common/mdfeCabMsg.cs b/DFe.Wsdl/Common/mdfeCabMsg.cs new file mode 100644 index 000000000..b0044b4f3 --- /dev/null +++ b/DFe.Wsdl/Common/mdfeCabMsg.cs @@ -0,0 +1,20 @@ +namespace DFe.Wsdl.Common +{ + public class mdfeCabMsg + { + private string cUFField; + private string versaoDadosField; + + public string cUF + { + get { return cUFField; } + set { cUFField = value; } + } + + public string versaoDados + { + get { return versaoDadosField; } + set { versaoDadosField = value; } + } + } +} \ No newline at end of file diff --git a/DFe.Wsdl/Common/mdfeCabecMsg.cs b/DFe.Wsdl/Common/mdfeCabecMsg.cs new file mode 100644 index 000000000..821cd6bd5 --- /dev/null +++ b/DFe.Wsdl/Common/mdfeCabecMsg.cs @@ -0,0 +1,20 @@ +namespace CTe.CTeOSDocumento.Common +{ + public class mdfeCabecMsg + { + private string cUFField; + private string versaoDadosField; + + public string cUF + { + get { return cUFField; } + set { cUFField = value; } + } + + public string versaoDados + { + get { return versaoDadosField; } + set { versaoDadosField = value; } + } + } +} \ No newline at end of file diff --git a/Shared.DFe.Wsdl/Corpo/ExtTagCorpoParametroEntrada.cs b/DFe.Wsdl/Corpo/ExtTagCorpoParametroEntrada.cs similarity index 100% rename from Shared.DFe.Wsdl/Corpo/ExtTagCorpoParametroEntrada.cs rename to DFe.Wsdl/Corpo/ExtTagCorpoParametroEntrada.cs diff --git a/Shared.DFe.Wsdl/Corpo/ITagCorpo.cs b/DFe.Wsdl/Corpo/ITagCorpo.cs similarity index 100% rename from Shared.DFe.Wsdl/Corpo/ITagCorpo.cs rename to DFe.Wsdl/Corpo/ITagCorpo.cs diff --git a/Shared.DFe.Wsdl/Corpo/NfeTagCorpo.cs b/DFe.Wsdl/Corpo/NfeTagCorpo.cs similarity index 100% rename from Shared.DFe.Wsdl/Corpo/NfeTagCorpo.cs rename to DFe.Wsdl/Corpo/NfeTagCorpo.cs diff --git a/DFe.Wsdl/DFe.Wsdl.csproj b/DFe.Wsdl/DFe.Wsdl.csproj index 477db1add..b45c81ef0 100644 --- a/DFe.Wsdl/DFe.Wsdl.csproj +++ b/DFe.Wsdl/DFe.Wsdl.csproj @@ -1,58 +1,17 @@ - - - + + - Debug - AnyCPU - {DBEE88E7-6003-436E-9810-9ACC662F5851} - Library - Properties - DFe.Wsdl - DFe.Wsdl - v4.5 - 512 - true + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - + - + + - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {b4e1a7a6-5d66-4326-8a8d-39338e6fc84c} - DFe.Utils - + + - - - \ No newline at end of file + + diff --git a/Shared.DFe.Wsdl/DFeCabecalho.cs b/DFe.Wsdl/DFeCabecalho.cs similarity index 100% rename from Shared.DFe.Wsdl/DFeCabecalho.cs rename to DFe.Wsdl/DFeCabecalho.cs diff --git a/Shared.DFe.Wsdl/DFeCorpo.cs b/DFe.Wsdl/DFeCorpo.cs similarity index 100% rename from Shared.DFe.Wsdl/DFeCorpo.cs rename to DFe.Wsdl/DFeCorpo.cs diff --git a/Shared.DFe.Wsdl/DFeSoapConfig.cs b/DFe.Wsdl/DFeSoapConfig.cs similarity index 100% rename from Shared.DFe.Wsdl/DFeSoapConfig.cs rename to DFe.Wsdl/DFeSoapConfig.cs diff --git a/Shared.DFe.Wsdl/DFeSoapHttpClientProtocol.cs b/DFe.Wsdl/DFeSoapHttpClientProtocol.cs similarity index 100% rename from Shared.DFe.Wsdl/DFeSoapHttpClientProtocol.cs rename to DFe.Wsdl/DFeSoapHttpClientProtocol.cs diff --git a/Shared.DFe.Wsdl/Http/Envelope.cs b/DFe.Wsdl/Http/Envelope.cs similarity index 100% rename from Shared.DFe.Wsdl/Http/Envelope.cs rename to DFe.Wsdl/Http/Envelope.cs diff --git a/Shared.DFe.Wsdl/Http/Ext/ExtHttpWebRequest.cs b/DFe.Wsdl/Http/Ext/ExtHttpWebRequest.cs similarity index 100% rename from Shared.DFe.Wsdl/Http/Ext/ExtHttpWebRequest.cs rename to DFe.Wsdl/Http/Ext/ExtHttpWebRequest.cs diff --git a/Shared.DFe.Wsdl/Http/RequestWS.cs b/DFe.Wsdl/Http/RequestWS.cs similarity index 100% rename from Shared.DFe.Wsdl/Http/RequestWS.cs rename to DFe.Wsdl/Http/RequestWS.cs diff --git a/DFe.Wsdl/Properties/AssemblyInfo.cs b/DFe.Wsdl/Properties/AssemblyInfo.cs deleted file mode 100644 index 7e20cd936..000000000 --- a/DFe.Wsdl/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DFeWsdl")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DFeWsdl")] -[assembly: AssemblyCopyright("Copyright © 2019")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("dbee88e7-6003-436e-9810-9acc662f5851")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/DadosDeTestes/AssinaturaDigital/AssinaturaDigitalDadosDeTeste.cs b/DadosDeTestes/AssinaturaDigital/AssinaturaDigitalDadosDeTeste.cs new file mode 100644 index 000000000..c34c52976 --- /dev/null +++ b/DadosDeTestes/AssinaturaDigital/AssinaturaDigitalDadosDeTeste.cs @@ -0,0 +1,28 @@ +using System.Security.Cryptography; + +namespace DadosDeTestes.AssinaturaDigital; + +public class AssinaturaDigitalTesteDados +{ + public static IEnumerable ObterDadosParaGeracaoDoHashSha1Bytes() + { + return new List + { + new object[] { "92037465012398765432100011223344556677889900|2|1|F1A9B237CD8800FFE234A9912B674CFA1" }, + new object[] { "87122345099887766554433221100009988776655443" }, + new object[] { "73456789101112131415161718192021222324252627" }, + new object[] { "65829374618273645564738291028374618273645564" } + }; + } + + public static IEnumerable ObterDadosParaGeracaoDoHashSha1BytesEValorEsperado() + { + return new List + { + new object[] { "92037465012398765432100011223344556677889900|2|1|F1A9B237CD8800FFE234A9912B674CFA1", new byte[] { 128, 55, 179, 49, 198, 97, 206, 43, 246, 208, 112, 183, 231, 3, 23, 105, 114, 184, 33, 153 }}, + new object[] { "87122345099887766554433221100009988776655443", new byte[] { 151, 153, 16, 228, 170, 100, 76, 248, 192, 58, 160, 126, 157, 224, 171, 233, 75, 23, 118, 67 }}, + new object[] { "73456789101112131415161718192021222324252627", new byte[] { 71, 100, 124, 212, 171, 46, 181, 47, 206, 96, 227, 230, 215, 8, 14, 131, 167, 214, 99, 181 }}, + new object[] { "65829374618273645564738291028374618273645564", new byte[] { 147, 88, 158, 178, 38, 247, 111, 70, 151, 152, 182, 14, 69, 18, 129, 97, 157, 47, 222, 50 }} + }; + } +} \ No newline at end of file diff --git a/DadosDeTestes/DadosDeTestes.csproj b/DadosDeTestes/DadosDeTestes.csproj new file mode 100644 index 000000000..eb2460e91 --- /dev/null +++ b/DadosDeTestes/DadosDeTestes.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/DadosDeTestes/NFe/Utils/ConversaoDadosDeTeste.cs b/DadosDeTestes/NFe/Utils/ConversaoDadosDeTeste.cs new file mode 100644 index 000000000..1978358b1 --- /dev/null +++ b/DadosDeTestes/NFe/Utils/ConversaoDadosDeTeste.cs @@ -0,0 +1,15 @@ +namespace DadosDeTestes.NFe.Utils; + +public class ConversaoDadosDeTeste +{ + public static IEnumerable ObterDadosParaGerarHashSha1DeStringEValorEsperado() + { + return new List + { + new object[] { "92037465012398765432100011223344556677889900|2|1|F1A9B237CD8800FFE234A9912B674CFA1", "8037b331c661ce2bf6d070b7e703176972b82199" }, + new object[] { "87122345099887766554433221100009988776655443|1|2|9CFD3321AAC4900BDEAFA1105BC088119", "5994d3d62ca107c89677e7bede2f1e6a9371d9da" }, + new object[] { "73456789101112131415161718192021222324252627|2|2|A7C44B8D56E9002FAB1133DCE5AA784C3", "ebbb014e73ff18fec652350da4a24907fad21297" }, + new object[] { "65829374618273645564738291028374618273645564|1|1|B21C9D77E04A00BBF5C21EA39988D10AA", "19f80bbd273e606d206880f79ea56a671b263586" } + }; + } +} \ No newline at end of file diff --git a/DadosDeTestes/ValorDadosDeTeste.cs b/DadosDeTestes/ValorDadosDeTeste.cs new file mode 100644 index 000000000..48ae11b40 --- /dev/null +++ b/DadosDeTestes/ValorDadosDeTeste.cs @@ -0,0 +1,54 @@ +namespace DadosDeTestes +{ + public class ValorDadosDeTeste + { + public static IEnumerable ObterValoresDecimaisParaArredondar() + { + return new List + { + new object[] { 20.35m * 15.90m, 2 }, + new object[] { 0.35m * 15.90m, 2 }, + new object[] { 3.665m, 2 }, + new object[] { 4.775m, 2 }, + + new object[] { 20.35m * 15.90m, 3 }, + new object[] { 0.35m * 15.90m, 3 }, + new object[] { 4.77575m, 4 }, + new object[] { 5.445545m, 5 } + }; + } + + public static IEnumerable ObterValoresParaArredondamentoSegundoNormativaAbnt() + { + return new List + { + new object[] { 0.342m, 0.34m }, + new object[] { 0.346m, 0.35m }, + new object[] { 0.3452m, 0.35m }, + new object[] { 0.3450m, 0.34m }, + new object[] { 0.332m, 0.33m }, + new object[] { 0.336m, 0.34m }, + new object[] { 0.3352m, 0.34m }, + new object[] { 0.3350m, 0.34m }, + new object[] { 0.3050m, 0.30m }, + new object[] { 0.3150m, 0.32m } + }; + } + + public static IEnumerable ObterValoresParaArredondamentoParaBaixo() + { + return new List + { + new object[] { 123.4567m, 2, 123.45m }, + new object[] { 123.4599m, 2, 123.45m }, + new object[] { 123.451m, 2, 123.45m }, + new object[] { 123.4001m, 3, 123.400m }, + new object[] { 123.0009m, 3, 123.000m }, + new object[] { 123.0m, 2, 123.00m }, + new object[] { 0.9999m, 3, 0.999m }, + new object[] { 0m, 2, 0.00m }, + new object[] { 987.654m, 0, 987m } + }; + } + } +} diff --git a/Dev.VersaoAssemblies/Dev.VersaoAssemblies.csproj b/Dev.VersaoAssemblies/Dev.VersaoAssemblies.csproj index 87bc58d98..b22bdb04a 100644 --- a/Dev.VersaoAssemblies/Dev.VersaoAssemblies.csproj +++ b/Dev.VersaoAssemblies/Dev.VersaoAssemblies.csproj @@ -9,7 +9,7 @@ Properties Dev.VersaoAssemblies Dev.VersaoAssemblies - v4.5 + v4.8 512 @@ -56,7 +56,6 @@ - @@ -64,6 +63,9 @@ + + + diff --git a/Dev.VersaoAssemblies/ProgramMain.cs b/Dev.VersaoAssemblies/ProgramMain.cs index 2aa1df619..bf24f0c8b 100644 --- a/Dev.VersaoAssemblies/ProgramMain.cs +++ b/Dev.VersaoAssemblies/ProgramMain.cs @@ -91,6 +91,11 @@ private static void FazerAlteracaoDasVersoes(string versaoString) private static void AlterarVersaoDoAssembly(string infoFile, string versaoString) { + if(infoFile.Contains("../") || infoFile.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + var content = File.ReadAllText(infoFile); var regexVersion = new Regex("assembly: AssemblyVersion.+\\)", RegexOptions.IgnoreCase); diff --git a/Dev.VersaoAssemblies/Properties/AssemblyInfo.cs b/Dev.VersaoAssemblies/Properties/AssemblyInfo.cs deleted file mode 100644 index 55937a9d2..000000000 --- a/Dev.VersaoAssemblies/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Utilitario - Versão Assemblies")] -[assembly: AssemblyDescription("Faz a alteração de todos os assemblies do projeto")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Zeus")] -[assembly: AssemblyProduct("Zeus")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("20b3044c-9fae-4f29-bcf4-7cc5ef94acc5")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/Dev.VersaoAssemblies/app.config b/Dev.VersaoAssemblies/app.config index 51278a456..3e0e37cfc 100644 --- a/Dev.VersaoAssemblies/app.config +++ b/Dev.VersaoAssemblies/app.config @@ -1,3 +1,3 @@ - + diff --git a/GraphicsPrinter/GraphicsPrinter.csproj b/GraphicsPrinter/GraphicsPrinter.csproj deleted file mode 100644 index 6235ceb3f..000000000 --- a/GraphicsPrinter/GraphicsPrinter.csproj +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Debug - AnyCPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC} - Library - Properties - GraphicsPrinter - GraphicsPrinter - v4.5 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - ..\NFe.Danfe.Nativo\Dlls\zxing.dll - - - ..\NFe.Danfe.Nativo\Dlls\zxing.presentation.dll - - - - - - - - - - - - - - - - {80C6093C-47D5-41A1-9FA0-E218E82FA666} - NFe.Danfe.Base - - - - - \ No newline at end of file diff --git a/GraphicsPrinter/GraphicsPrinter.csproj.DotSettings b/GraphicsPrinter/GraphicsPrinter.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/GraphicsPrinter/GraphicsPrinter.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/GraphicsPrinter/Properties/AssemblyInfo.cs b/GraphicsPrinter/Properties/AssemblyInfo.cs deleted file mode 100644 index 0418efd06..000000000 --- a/GraphicsPrinter/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("GraphicsPrinter")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("GraphicsPrinter")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3067efcc-91de-48ea-8f7e-e0d95216c6dc")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/MDFe.AppTeste/App.config b/MDFe.AppTeste/App.config index d1428ad71..4bfa00561 100755 --- a/MDFe.AppTeste/App.config +++ b/MDFe.AppTeste/App.config @@ -1,6 +1,6 @@ - + diff --git a/MDFe.AppTeste/MDFe.AppTeste.csproj b/MDFe.AppTeste/MDFe.AppTeste.csproj index 3eda7da71..78829a2e1 100755 --- a/MDFe.AppTeste/MDFe.AppTeste.csproj +++ b/MDFe.AppTeste/MDFe.AppTeste.csproj @@ -9,7 +9,7 @@ Properties MDFe.AppTeste MDFe.AppTeste - v4.5 + v4.8 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 @@ -83,9 +83,6 @@ - - Code - True True @@ -345,27 +342,34 @@ - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} + {a08ce194-9780-493d-a758-d5b3f44bd208} DFe.Classes - {b4e1a7a6-5d66-4326-8a8d-39338e6fc84c} + {97f3c222-fd10-488a-812b-e514c3a8863c} DFe.Utils - {9794cb98-4691-4218-a127-c573c2e7ff83} + {436a0bcb-3866-4969-a129-cfa03c194e1f} MDFe.Classes - {9587937a-a826-4785-9d1e-3a9f4a622b7c} + {6022bba9-15bf-4ce3-b223-90b167f053d7} MDFe.Servicos - {9c0678eb-78f2-49c6-91bf-38148fc37fbb} + {657e6e65-a138-416c-9a60-d366e68d9b6d} MDFe.Utils + + {6aa98cd9-8e71-4ac4-a3db-aef245e60096} + MDFe.Wsdl + + + + + - @@ -103,6 +104,25 @@ + + + Grupo de informações do compartilhamento do MDFe com InfraSA para geração do DTe + + + + + + Número do Protocolo de geração do DTe + + + + + Data e hora de geração do protocolo, no formato AAAA-MM-DDTHH:MM:SS TZD. + + + + + diff --git a/MDFe.AppTeste/Schemas/evAlteracaoPagtoServMDFe_v3.00.xsd b/MDFe.AppTeste/Schemas/evAlteracaoPagtoServMDFe_v3.00.xsd new file mode 100644 index 000000000..14f59ec33 --- /dev/null +++ b/MDFe.AppTeste/Schemas/evAlteracaoPagtoServMDFe_v3.00.xsd @@ -0,0 +1,257 @@ + + + + + + + Schema XML de validação do evento de alteração do pagamento do serviçp de transporte 110118 + + + + + + Descrição do Evento - “Alteração Pagamento Serviço MDFe” + + + + + + + + + + + + Número do Protocolo de Status do MDF-e. + + + + + Informações do Pagamento do Frete + + + + + + Razão social ou Nome do responsavel pelo pagamento + + + + + + + + + + + + Número do CPF do responsável pelo pgto + Informar os zeros não significativos. + + + + + Número do CNPJ do responsável pelo pgto + Informar os zeros não significativos. + + + + + Identificador do responsável pelo pgto em caso de ser estrangeiro + + + + + + + + + + + + + + Componentes do Pagamentoi do Frete + + + + + + Tipo do Componente + +01 - Vale Pedágio; +02 - Impostos, taxas e contribuições; +03 - Despesas (bancárias, meios de pagamento, outras) +04 - Frete +99 - Outros + + + + + + + + + + + + + + + Valor do componente + + + + + Descrição do componente do tipo Outros + + + + + + + + + + + + + + Valor Total do Contrato + + + + + Indicador da Forma de Pagamento:0-Pagamento à Vista;1-Pagamento à Prazo; + + + + + + + + + + + + Valor do Adiantamento (usar apenas em pagamento à Prazo + + + + + Indicador para declarar concordância em antecipar o adiantamento + Operação de transporte com utilização de veículos de frotas dedicadas ou fidelizadas. +Preencher com “1” para indicar operação de transporte de alto desempenho, demais casos não informar a tag + + + + + + + + + + + Informações do pagamento a prazo. + Informar somente se indPag for à Prazo + + + + + + Número da Parcela + + + + + + + + + + + Data de vencimento da Parcela (AAAA-MM-DD) + + + + + Valor da Parcela + + + + + + + + Tipo de Permissão em relação a antecipação das parcelas + 0 - Não permite antecipar +1 - Permite antecipar as parcelas +2 - Permite antecipar as parcelas mediante confirmação + + + + + + + + + + + + Informações bancárias + + + + + + + Número do banco + + + + + + + + + + + Número da agência bancária + + + + + + + + + + + + Número do CNPJ da Instituição de Pagamento Eletrônico do Frete + Informar os zeros não significativos. + + + + + Chave PIX + Informar a chave PIX para recebimento do frete. +Pode ser email, CPF/ CNPJ (somente numeros), Telefone com a seguinte formatação (+5599999999999) ou a chave aleatória gerada pela instituição. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MDFe.AppTeste/Schemas/evConfirmaServMDFe_v3.00.xsd b/MDFe.AppTeste/Schemas/evConfirmaServMDFe_v3.00.xsd new file mode 100644 index 000000000..90511fd58 --- /dev/null +++ b/MDFe.AppTeste/Schemas/evConfirmaServMDFe_v3.00.xsd @@ -0,0 +1,34 @@ + + + + + + + Schema XML de validação do evento de confirmação do serviço de transporte 110117 + + + + + + Descrição do Evento - “Confirmação Serviço Transporte” + + + + + + + + + + + + Número do Protocolo de Status do MDF-e. +1 posição tipo de autorizador (9 - SEFAZ Nacional ); +2 posições ano; +10 seqüencial no ano. + + + + + + diff --git a/MDFe.AppTeste/Schemas/evEncMDFe_v3.00.xsd b/MDFe.AppTeste/Schemas/evEncMDFe_v3.00.xsd index 4d0186d0f..dc69957b2 100755 --- a/MDFe.AppTeste/Schemas/evEncMDFe_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/evEncMDFe_v3.00.xsd @@ -42,6 +42,17 @@ Código do Município de Encerramento do manifesto + + + Indicador que deve ser informado quando o encerramento for registrado pelo transportador terceiro + Informar valor 1 quando o MDFe for encerrado pelo transportador terceiro, este sendo diferente do emitente do MDFe + + + + + + + diff --git a/MDFe.AppTeste/Schemas/evPagtoOperMDFe_v3.00.xsd b/MDFe.AppTeste/Schemas/evPagtoOperMDFe_v3.00.xsd index 3863ef67b..b7f4e99c6 100644 --- a/MDFe.AppTeste/Schemas/evPagtoOperMDFe_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/evPagtoOperMDFe_v3.00.xsd @@ -114,7 +114,8 @@ 01 - Vale Pedágio; 02 - Impostos, taxas e contribuições; 03 - Despesas (bancárias, meios de pagamento, outras) -; 99 - Outros +04 - Frete +99 - Outros @@ -122,6 +123,7 @@ + @@ -162,6 +164,24 @@ + + + Valor do Adiantamento (usar apenas em pagamento à Prazo + + + + + Indicador para declarar concordância em antecipar o adiantamento + Operação de transporte com utilização de veículos de frotas dedicadas ou fidelizadas. +Preencher com “1” para indicar operação de transporte de alto desempenho, demais casos não informar a tag + + + + + + + + Informações do pagamento a prazo. @@ -169,7 +189,7 @@ - + Número da Parcela @@ -180,7 +200,7 @@ - + Data de vencimento da Parcela (AAAA-MM-DD) @@ -193,6 +213,21 @@ + + + Tipo de Permissão em relação a antecipação das parcelas + 0 - Não permite antecipar +1 - Permite antecipar as parcelas +2 - Permite antecipar as parcelas mediante confirmação + + + + + + + + + Informações bancárias @@ -229,6 +264,19 @@ Informar os zeros não significativos. + + + Chave PIX + Informar a chave PIX para recebimento do frete. +Pode ser email, CPF/ CNPJ (somente numeros), Telefone com a seguinte formatação (+5599999999999) ou a chave aleatória gerada pela instituição. + + + + + + + + @@ -238,4 +286,4 @@ - + \ No newline at end of file diff --git a/MDFe.AppTeste/Schemas/eventoMDFeTiposBasico_v3.00.xsd b/MDFe.AppTeste/Schemas/eventoMDFeTiposBasico_v3.00.xsd index fc1ea1080..919701f0f 100755 --- a/MDFe.AppTeste/Schemas/eventoMDFeTiposBasico_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/eventoMDFeTiposBasico_v3.00.xsd @@ -1,5 +1,5 @@ - + @@ -13,7 +13,7 @@ - Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA, 91 para RFB, 92 para BackOffice BRId e 93 para ONE + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar SUFRAMA, 91 para RFB, 93 para ONE, 94 para SVBA @@ -36,8 +36,8 @@ CPF do Autor - Informar zeros não significativos -Usar com serie específica 920-969 para emitente pessoa física com inscrição estadual + Informar zeros não significativos. +Usar com serie específica 920-969 para emitente pessoa física com inscrição estadual, ou para emissor TAC do Regime Especial da Nota Fiscal Fácil @@ -68,7 +68,7 @@ Usar com serie específica 920-969 para emitente pessoa física com inscrição - + @@ -88,6 +88,61 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen + + + Grupo de informações do pedido de registro de evento da Nota Fiscal Fácil + + + + + + Solicitação do pedido de registro de evento da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + + + + Grupo de Informação do Provedor de Assinatura e Autorização + + + + + + CNPJ do Provedor de Assinatura e Autorização + + + + + Assinatura RSA do Emitente para DFe gerados por PAA + + + + + + Assinatura digital padrão RSA + Converter o atributo Id do DFe para array de bytes e assinar com a chave privada do RSA com algoritmo SHA1 gerando um valor no formato base64. + + + + + Chave Publica no padrão XML RSA Key + + + + + + + + @@ -96,7 +151,7 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen - + @@ -175,7 +230,7 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen - + @@ -212,7 +267,26 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen - + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + diff --git a/MDFe.AppTeste/Schemas/mdfeModalAquaviario_v3.00.xsd b/MDFe.AppTeste/Schemas/mdfeModalAquaviario_v3.00.xsd index d34a91bd6..97bd1b208 100755 --- a/MDFe.AppTeste/Schemas/mdfeModalAquaviario_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/mdfeModalAquaviario_v3.00.xsd @@ -268,6 +268,19 @@ + + + Maritime Mobile Service Identify + Preencher com o MMSI (Maritime Mobile Service Identify) fornecido pela ANATEL ou autoridade de telecomunicações de origem da embarcação + + + + + + + + + diff --git a/MDFe.AppTeste/Schemas/mdfeModalFerroviario_v3.00.xsd b/MDFe.AppTeste/Schemas/mdfeModalFerroviario_v3.00.xsd index cf259de7e..6f043e0f6 100755 --- a/MDFe.AppTeste/Schemas/mdfeModalFerroviario_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/mdfeModalFerroviario_v3.00.xsd @@ -1,4 +1,5 @@ + @@ -126,11 +127,14 @@ - + Tonelada Útil Unidade de peso referente à carga útil (apenas o peso da carga transportada), expressa em toneladas. + + + diff --git a/MDFe.AppTeste/Schemas/mdfeModalRodoviario_v3.00.xsd b/MDFe.AppTeste/Schemas/mdfeModalRodoviario_v3.00.xsd index b384d44d4..f0d38621e 100755 --- a/MDFe.AppTeste/Schemas/mdfeModalRodoviario_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/mdfeModalRodoviario_v3.00.xsd @@ -1,12 +1,12 @@ - + Tipo RNTRC - Registro Nacional Transportadores Rodoviários de Carga - + @@ -15,7 +15,7 @@ Tipo CIOT - Código Identificador da Operação de Transporte - + @@ -45,7 +45,7 @@ - + Código Identificador da Operação de Transporte Também Conhecido como conta frete @@ -109,10 +109,9 @@ - + - Número do comprovante de compra - Número de ordem do comprovante de compra do Vale-Pedágio fornecido para cada veículo ou combinação veicular, por viagem. + Identificador do vale pedagio obrigatório - IDVPO @@ -123,12 +122,58 @@ Valor do Vale-Pedagio - Número de ordem do comprovante de compra do Vale-Pedágio fornecido para cada veículo ou combinação veicular, por viagem. + Valor do Vale-Pedágio obrigatório necessário à livre circulação, desde a origem da operação de transporte até o destino, do transportador contratado. + + + Tipo do Vale Pedagio + +01 - TAG; 04 - Leitura de placa (pela placa de identificação veicular) + + + + + + + + + + + + Categoria de Combinação Veicular + Preencher com: + +02 Veículo Comercial 2 eixos;0 +4 Veículo Comercial 3 eixos; +06 Veículo Comercial 4 eixos;0 +7 Veículo Comercial 5 eixos; 0 +8 Veículo Comercial 6 eixos; +10 Veículo Comercial 7 eixos; +11 Veículo Comercial 8 eixos; +12 Veículo Comercial 9 eixos; +13 Veículo Comercial 10 eixos; +14 Veículo Comercial Acima de 10 eixos; + + + + + + + + + + + + + + + + + @@ -152,7 +197,7 @@ - Número do CPF do contratente do serviço + Número do CPF do contratante do serviço Informar os zeros não significativos. @@ -171,17 +216,43 @@ - + + + + Grupo de informações do contrato entre transportador e contratante + + + + + + Número do contrato do transportador com o contratante quando este existir para prestações continuadas + + + + + + + + + + + + Valor global do contrato + + + + + - Informações do Pagamento do Frete + Informações do Pagamento do Contrato @@ -225,7 +296,7 @@ - Componentes do Pagamentoi do Frete + Componentes do Pagamentoi do Contrato @@ -233,10 +304,12 @@ Tipo do Componente +Preencher com: 01 - Vale Pedágio; 02 - Impostos, taxas e contribuições; -03 - Despesas (bancárias, meios de pagamento, outras) -; 99 - Outros +03 - Despesas (bancárias, meios de pagamento, outras); +04 - Frete +99 - Outros @@ -244,6 +317,7 @@ + @@ -272,6 +346,19 @@ Valor Total do Contrato + + + Indicador de operação de transporte de alto desempenho + Operação de transporte com utilização de veículos de frotas dedicadas ou fidelizadas. +Preencher com “1” para indicar operação de transporte de alto desempenho, demais casos não informar a tag + + + + + + + + Indicador da Forma de Pagamento:0-Pagamento à Vista;1-Pagamento à Prazo; @@ -284,6 +371,22 @@ + + + Valor do Adiantamento (usar apenas em pagamento à Prazo + + + + + Indicador para declarar concordância em antecipar o adiantamento + Informar a tag somente se for autorizado antecipar o adiantamento + + + + + + + Informações do pagamento a prazo. @@ -291,7 +394,7 @@ - + Número da Parcela @@ -302,7 +405,7 @@ - + Data de vencimento da Parcela (AAAA-MM-DD) @@ -315,6 +418,23 @@ + + + Tipo de Permissão em relação a antecipação das parcelas + 0 - Não permite antecipar + +1 - Permite antecipar as parcelas + +2 - Permite antecipar as parcelas mediante confirmação + + + + + + + + + Informações bancárias @@ -351,6 +471,19 @@ Informar os zeros não significativos. + + + Chave PIX + Informar a chave PIX para recebimento do frete. +Pode ser email, CPF/ CNPJ (somente numeros), Telefone com a seguinte formatação (+5599999999999) ou a chave aleatória gerada pela instituição. + + + + + + + + @@ -431,7 +564,7 @@ - Proprietários do Veículo. + Proprietário ou possuidor do Veículo. Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e @@ -484,7 +617,7 @@ Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e - Tipo Proprietário + Tipo Proprietário ou possuidor Preencher com: 0-TAC Agregado; 1-TAC Independente; @@ -573,7 +706,7 @@ Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e - + UF em que veículo está licenciado Sigla da UF de licenciamento do veículo. @@ -654,7 +787,7 @@ Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e - Proprietários do Veículo. + Proprietários ou possuidor do Veículo. Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e @@ -707,7 +840,7 @@ Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e - Tipo Proprietário + Tipo Proprietário ou possuidor Preencher com: 0-TAC Agregado; 1-TAC Independente; @@ -748,7 +881,7 @@ Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e - + UF em que veículo está licenciado Sigla da UF de licenciamento do veículo. diff --git a/MDFe.AppTeste/Schemas/mdfeTiposBasico_v3.00.xsd b/MDFe.AppTeste/Schemas/mdfeTiposBasico_v3.00.xsd index 1945ff8ff..3dccc2d3a 100755 --- a/MDFe.AppTeste/Schemas/mdfeTiposBasico_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/mdfeTiposBasico_v3.00.xsd @@ -112,15 +112,16 @@ Série na faixa [920-969]: Reservada para emissão por contribuinte pessoa físi - Forma de emissão do Manifesto (Normal ou Contingência) + Forma de emissão do Manifesto 1 - Normal -; 2 - Contingência +; 2 - Contingência; 3-Regime Especial NFF + @@ -246,11 +247,12 @@ Informar 'EX' para operações com o exterior. CPF do emitente Informar zeros não significativos. -Usar com série específica 920-969 para emitente pessoa física com inscrição estadual +Usar com série específica 920-969 para emitente pessoa física com inscrição estadual. +Poderá ser usado também para emissão do Regime Especial da Nota Fiscal Fácil - + Inscrição Estadual do emitemte @@ -353,7 +355,7 @@ Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.00 será - + Conhecimentos de Tranporte - usar este grupo quando for prestador de serviço de transporte @@ -487,10 +489,37 @@ Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.00 será + + + + Indicador de Prestação parcial + + + + + + + + + + + Grupo de informações das NFe que foram entregues do CTe relacionado + + + + + + Nota Fiscal Eletrônica + + + + + + - + Nota Fiscal Eletronica @@ -608,7 +637,7 @@ Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.00 será - + Manifesto Eletrônico de Documentos Fiscais. Somente para modal Aquaviário (vide regras MOC) @@ -833,7 +862,7 @@ Dados obrigatórios apenas no modal Rodoviário, depois da lei 11.442/07. Para o Produto predominante - Informar a descrição do produto predominante + Informar a descrição do produto predominante, conforme o item de maior valor financeiro conforme Resolução ANTT n° 5.867 de 2020). @@ -852,7 +881,8 @@ Dados obrigatórios apenas no modal Rodoviário, depois da lei 11.442/07. Para o 08-Perigosa (granel líquido); 09-Perigosa (carga frigorificada); 10-Perigosa (conteinerizada); -11-Perigosa (carga geral). +11-Perigosa (carga geral). +12-Granel pressurizada @@ -868,6 +898,7 @@ Dados obrigatórios apenas no modal Rodoviário, depois da lei 11.442/07. Para o + @@ -1126,6 +1157,61 @@ Dados obrigatórios apenas no modal Rodoviário, depois da lei 11.442/07. Para o Informações do Responsável Técnico pela emissão do DF-e + + + Grupo de informações do pedido de emissão da Nota Fiscal Fácil + + + + + + Solicitação do pedido de emissão da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + + + + Grupo de Informação do Provedor de Assinatura e Autorização + + + + + + CNPJ do Provedor de Assinatura e Autorização + + + + + Assinatura RSA do Emitente para DFe gerados por PAA + + + + + + Assinatura digital padrão RSA + Converter o atributo Id do DFe para array de bytes e assinar com a chave privada do RSA com algoritmo SHA1 gerando um valor no formato base64. + + + + + Chave Publica no padrão XML RSA Key + + + + + + + + @@ -1161,7 +1247,7 @@ Dados obrigatórios apenas no modal Rodoviário, depois da lei 11.442/07. Para o - + @@ -2436,4 +2522,4 @@ Observação: 28 caracteres são representados no schema como 20 bytes do tipo b - + \ No newline at end of file diff --git a/MDFe.AppTeste/Schemas/procMDFe_v3.00.xsd b/MDFe.AppTeste/Schemas/procMDFe_v3.00.xsd index b4aadcaaf..9b0c8f35f 100755 --- a/MDFe.AppTeste/Schemas/procMDFe_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/procMDFe_v3.00.xsd @@ -12,7 +12,26 @@ - + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + diff --git a/MDFe.AppTeste/Schemas/tiposGeralMDFe_v3.00.xsd b/MDFe.AppTeste/Schemas/tiposGeralMDFe_v3.00.xsd index 234855bdf..ff639b4fa 100755 --- a/MDFe.AppTeste/Schemas/tiposGeralMDFe_v3.00.xsd +++ b/MDFe.AppTeste/Schemas/tiposGeralMDFe_v3.00.xsd @@ -1,5 +1,5 @@ - + @@ -91,6 +91,7 @@ + @@ -136,7 +137,7 @@ - + @@ -146,7 +147,7 @@ - + @@ -156,7 +157,7 @@ - + @@ -191,7 +192,7 @@ - + @@ -200,16 +201,7 @@ - - - - - - Tipo Número do CNPJ tamanho varíavel (3-14) - - - - + @@ -218,7 +210,7 @@ - + @@ -634,6 +626,15 @@ + + + Tipo que representa uma chave publica padrão RSA + + + + + + Tipo Placa diff --git a/MDFe.Classes/Contratos/MDFeModalContainer.cs b/MDFe.Classes/Contratos/MDFeModalContainer.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Extensoes/ExtMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFe.cs index c3a8f1578..71a8a3327 100644 --- a/MDFe.Classes/Extensoes/ExtMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFe.cs @@ -31,11 +31,6 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using System; -using System.IO; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; -using System.Text; using DFe.Classes.Entidades; using DFe.Utils; using DFe.Utils.Assinatura; @@ -44,80 +39,85 @@ using MDFe.Utils.Configuracoes; using MDFe.Utils.Flags; using MDFe.Utils.Validacao; +using System; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Text; using MDFEletronico = MDFe.Classes.Informacoes.MDFe; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFe { - public static MDFEletronico Valida(this MDFEletronico mdfe) + public static MDFEletronico Valida(this MDFEletronico mdfe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + if (mdfe == null) throw new ArgumentException("Erro de assinatura, MDFe esta null"); var xmlMdfe = FuncoesXml.ClasseParaXmlString(mdfe); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlMdfe, "MDFe_v1.00.xsd"); + Validador.Valida(xmlMdfe, "mdfe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlMdfe, "MDFe_v3.00.xsd"); + Validador.Valida(xmlMdfe, "mdfe_v3.00.xsd", config); break; } var tipoModal = mdfe.InfMDFe.InfModal.Modal.GetType(); var xmlModal = FuncoesXml.ClasseParaXmlString(mdfe.InfMDFe.InfModal); - if (tipoModal == typeof (MDFeRodo)) { - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlModal, "MDFeModalRodoviario_v1.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalRodoviario_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlModal, "MDFeModalRodoviario_v3.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalRodoviario_v3.00.xsd", config); break; } } if (tipoModal == typeof (MDFeAereo)) { - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlModal, "MDFeModalAereo_v1.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalAereo_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlModal, "MDFeModalAereo_v3.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalAereo_v3.00.xsd", config); break; } } if (tipoModal == typeof (MDFeAquav)) { - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlModal, "MDFeModalAquaviario_v1.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalAquaviario_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlModal, "MDFeModalAquaviario_v3.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalAquaviario_v3.00.xsd", config); break; } } if (tipoModal == typeof (MDFeFerrov)) { - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlModal, "MDFeModalFerroviario_v1.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalFerroviario_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlModal, "MDFeModalFerroviario_v3.00.xsd"); + Validador.Valida(xmlModal, "mdfeModalFerroviario_v3.00.xsd", config); break; } } @@ -125,10 +125,12 @@ public static MDFEletronico Valida(this MDFEletronico mdfe) return mdfe; } - public static MDFEletronico Assina(this MDFEletronico mdfe, EventHandler eventHandlerChaveMdfe = null, object quemInvocouEventoChaveMDFe = null) + public static MDFEletronico Assina(this MDFEletronico mdfe, EventHandler eventHandlerChaveMdfe = null, object quemInvocouEventoChaveMDFe = null, MDFeConfiguracao cfgMdfe = null) { if(mdfe == null) throw new ArgumentException("Erro de assinatura, MDFe esta null"); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var modeloDocumentoFiscal = mdfe.InfMDFe.Ide.Mod; var tipoEmissao = (int) mdfe.InfMDFe.Ide.TpEmis; var codigoNumerico = mdfe.InfMDFe.Ide.CMDF; @@ -138,7 +140,6 @@ public static MDFEletronico Assina(this MDFEletronico mdfe, EventHandler var numeroDocumento = mdfe.InfMDFe.Ide.NMDF; int serie = mdfe.InfMDFe.Ide.Serie; - if (cnpj == null) { cnpj = mdfe.InfMDFe.Emit.CPF.PadLeft(14, '0'); @@ -151,10 +152,19 @@ public static MDFEletronico Assina(this MDFEletronico mdfe, EventHandler if (eventHandlerChaveMdfe != null) eventHandlerChaveMdfe.Invoke(quemInvocouEventoChaveMDFe, dadosChave.Chave); - mdfe.InfMDFe.Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout; + mdfe.InfMDFe.Versao = config.VersaoWebService.VersaoLayout; mdfe.InfMDFe.Ide.CDV = dadosChave.DigitoVerificador; - var assinatura = AssinaturaDigital.Assina(mdfe, mdfe.InfMDFe.Id, MDFeConfiguracao.X509Certificate2); + mdfe.InfMDFeSupl = new MdfeInfMDFeSupl(); + mdfe.InfMDFeSupl.QrCodMDFe = MdfeInfMDFeSupl.GerarQrCode(dadosChave.Chave, mdfe.InfMDFe.Ide.TpAmb); + if (mdfe.InfMDFe.Ide.TpEmis == MDFeTipoEmissao.Contingencia) + { + var encoding = Encoding.UTF8; + var sign = Convert.ToBase64String(AssinaturaDigital.CriarAssinaturaPkcs1(config.X509Certificate2, encoding.GetBytes(mdfe.Chave()))); + mdfe.InfMDFeSupl.QrCodMDFe += "&sign=" + sign; + } + + var assinatura = AssinaturaDigital.Assina(mdfe, mdfe.InfMDFe.Id, config.X509Certificate2); mdfe.Signature = assinatura; @@ -166,12 +176,14 @@ public static string XmlString(this MDFEletronico mdfe) return FuncoesXml.ClasseParaXmlString(mdfe); } - public static void SalvarXmlEmDisco(this MDFEletronico mdfe, string nomeArquivo = null) + public static void SalvarXmlEmDisco(this MDFEletronico mdfe, string nomeArquivo = null, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + if (config.NaoSalvarXml()) return; if (string.IsNullOrEmpty(nomeArquivo)) - nomeArquivo = Path.Combine(MDFeConfiguracao.CaminhoSalvarXml, mdfe.Chave() + "-mdfe.xml"); + nomeArquivo = Path.Combine(config.CaminhoSalvarXml, mdfe.Chave() + "-mdfe.xml"); FuncoesXml.ClasseParaArquivoXml(mdfe, nomeArquivo); } @@ -226,7 +238,7 @@ public static long CodigoIbgeMunicipioEmitente(this MDFEletronico mdfe) return codigo; } - public static infMDFeSupl QrCode(this MDFEletronico mdfe, X509Certificate2 certificadoDigital, + public static MdfeInfMDFeSupl QrCode(this MDFEletronico mdfe, X509Certificate2 certificadoDigital, Encoding encoding = null) { if (encoding == null) @@ -241,35 +253,16 @@ public static infMDFeSupl QrCode(this MDFEletronico mdfe, X509Certificate2 certi switch (mdfe.InfMDFe.Ide.TpEmis) { case MDFeTipoEmissao.Contingencia: - var assinatura = Convert.ToBase64String(CreateSignaturePkcs1(certificadoDigital, encoding.GetBytes(mdfe.Chave()))); + var assinatura = Convert.ToBase64String(AssinaturaDigital.CriarAssinaturaPkcs1(certificadoDigital, encoding.GetBytes(mdfe.Chave()))); qrCode.Append("&sign="); qrCode.Append(assinatura); break; } - return new infMDFeSupl + return new MdfeInfMDFeSupl { - qrCodMDFe = qrCode.ToString() + QrCodMDFe = qrCode.ToString() }; } - - private static byte[] CreateSignaturePkcs1(X509Certificate2 certificado, byte[] Value) - - { - RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)certificado.PrivateKey; - - RSAPKCS1SignatureFormatter rsaF = new RSAPKCS1SignatureFormatter(rsa); - - SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); - - byte[] hash = null; - - hash = sha1.ComputeHash(Value); - - rsaF.SetHashAlgorithm("SHA1"); - - return rsaF.CreateSignature(hash); - - } } } diff --git a/MDFe.Classes/Extensoes/ExtMDFeConsReciMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeConsReciMDFe.cs index ff464a5b2..173921f26 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeConsReciMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeConsReciMDFe.cs @@ -31,29 +31,31 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using System.IO; -using System.Xml; using DFe.Utils; using MDFe.Classes.Informacoes.RetRecepcao; using MDFe.Utils.Configuracoes; using MDFe.Utils.Flags; using MDFe.Utils.Validacao; +using System.IO; +using System.Xml; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeConsReciMDFe { - public static void ValidaSchema(this MDFeConsReciMDFe consReciMDFe) + public static void ValidaSchema(this MDFeConsReciMDFe consReciMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlValidacao = consReciMDFe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlValidacao, "consReciMdfe_v1.00.xsd"); + Validador.Valida(xmlValidacao, "consReciMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlValidacao, "consReciMdfe_v3.00.xsd"); + Validador.Valida(xmlValidacao, "consReciMDFe_v3.00.xsd", config); break; } } @@ -71,11 +73,13 @@ public static XmlDocument CriaRequestWs(this MDFeConsReciMDFe consReciMDFe) return request; } - public static void SalvarXmlEmDisco(this MDFeConsReciMDFe consReciMDFe) + public static void SalvarXmlEmDisco(this MDFeConsReciMDFe consReciMDFe, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + if (config.NaoSalvarXml()) return; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, consReciMDFe.NRec + "-ped-rec.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeConsSitMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeConsSitMDFe.cs index 222cdc99b..326ae9068 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeConsSitMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeConsSitMDFe.cs @@ -31,29 +31,31 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using System.IO; -using System.Xml; using DFe.Utils; using MDFe.Classes.Informacoes.ConsultaProtocolo; using MDFe.Utils.Configuracoes; using MDFe.Utils.Flags; using MDFe.Utils.Validacao; +using System.IO; +using System.Xml; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeConsSitMDFe { - public static void ValidarSchema(this MDFeConsSitMDFe consSitMdfe) + public static void ValidarSchema(this MDFeConsSitMDFe consSitMdfe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlEnvio = consSitMdfe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlEnvio, "consSitMdfe_v1.00.xsd"); + Validador.Valida(xmlEnvio, "consSitMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlEnvio, "consSitMdfe_v3.00.xsd"); + Validador.Valida(xmlEnvio, "consSitMDFe_v3.00.xsd", config); break; } } @@ -71,11 +73,13 @@ public static XmlDocument CriaRequestWs(this MDFeConsSitMDFe consSitMdfe) return request; } - public static void SalvarXmlEmDisco(this MDFeConsSitMDFe consSitMdfe) + public static void SalvarXmlEmDisco(this MDFeConsSitMDFe consSitMdfe, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + if (config.NaoSalvarXml()) return; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, consSitMdfe.ChMDFe + "-ped-sit.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeConsStatServMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeConsStatServMDFe.cs index bd4a31bf0..403519b67 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeConsStatServMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeConsStatServMDFe.cs @@ -39,21 +39,23 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeConsStatServMDFe { - public static void ValidarSchema(this MDFeConsStatServMDFe consStatServMDFe) + public static void ValidarSchema(this MDFeConsStatServMDFe consStatServMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlValidacao = consStatServMDFe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlValidacao, "consStatServMDFe_v1.00.xsd"); + Validador.Valida(xmlValidacao, "consStatServMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlValidacao, "consStatServMDFe_v3.00.xsd"); + Validador.Valida(xmlValidacao, "consStatServMDFe_v3.00.xsd", config); break; } } @@ -71,11 +73,13 @@ public static XmlDocument CriaRequestWs(this MDFeConsStatServMDFe consStatServMd return request; } - public static void SalvarXmlEmDisco(this MDFeConsStatServMDFe consStatServMdFe) + public static void SalvarXmlEmDisco(this MDFeConsStatServMDFe consStatServMdFe, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + if (config.NaoSalvarXml()) return; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, "-pedido-status-servico.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeCosMDFeNaoEnc.cs b/MDFe.Classes/Extensoes/ExtMDFeCosMDFeNaoEnc.cs index 004fe50ef..491a098cf 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeCosMDFeNaoEnc.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeCosMDFeNaoEnc.cs @@ -39,7 +39,7 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeCosMDFeNaoEnc { @@ -48,17 +48,19 @@ public static string XmlString(this MDFeCosMDFeNaoEnc consMDFeNaoEnc) return FuncoesXml.ClasseParaXmlString(consMDFeNaoEnc); } - public static void ValidarSchema(this MDFeCosMDFeNaoEnc consMdFeNaoEnc) + public static void ValidarSchema(this MDFeCosMDFeNaoEnc consMdFeNaoEnc, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlValidacao = consMdFeNaoEnc.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlValidacao, "consMDFeNaoEnc_v1.00.xsd"); + Validador.Valida(xmlValidacao, "consMDFeNaoEnc_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlValidacao, "consMDFeNaoEnc_v3.00.xsd"); + Validador.Valida(xmlValidacao, "consMDFeNaoEnc_v3.00.xsd", config); break; } } @@ -71,11 +73,13 @@ public static XmlDocument CriaRequestWs(this MDFeCosMDFeNaoEnc cosMdFeNaoEnc) return request; } - public static void SalvarXmlEmDisco(this MDFeCosMDFeNaoEnc cosMdFeNaoEnc) + public static void SalvarXmlEmDisco(this MDFeCosMDFeNaoEnc cosMdFeNaoEnc, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + if (config.NaoSalvarXml()) return; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, cosMdFeNaoEnc.CNPJ + "-ped-sit.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeEnviMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeEnviMDFe.cs index 389acec4a..77e29cb7d 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeEnviMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeEnviMDFe.cs @@ -40,27 +40,29 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeEnviMDFe { - public static void Valida(this MDFeEnviMDFe enviMDFe) + public static void Valida(this MDFeEnviMDFe enviMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + if (enviMDFe == null) throw new ArgumentException("Erro de assinatura, EnviMDFe esta null"); var xmlMdfe = FuncoesXml.ClasseParaXmlString(enviMDFe); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlMdfe, "enviMDFe_v1.00.xsd"); + Validador.Valida(xmlMdfe, "enviMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlMdfe, "enviMDFe_v3.00.xsd"); + Validador.Valida(xmlMdfe, "enviMDFe_v3.00.xsd", config); break; } - enviMDFe.MDFe.Valida(); + enviMDFe.MDFe.Valida(config); } public static XmlDocument CriaXmlRequestWs(this MDFeEnviMDFe enviMDFe) @@ -71,6 +73,14 @@ public static XmlDocument CriaXmlRequestWs(this MDFeEnviMDFe enviMDFe) return dadosEnvio; } + public static XmlDocument CriaXmlRequestWs(this Informacoes.MDFe mdfe) + { + var dadosEnvio = new XmlDocument(); + dadosEnvio.LoadXml(mdfe.XmlString()); + + return dadosEnvio; + } + public static string XmlString(this MDFeEnviMDFe enviMDFe) { var xmlString = FuncoesXml.ClasseParaXmlString(enviMDFe); @@ -78,17 +88,19 @@ public static string XmlString(this MDFeEnviMDFe enviMDFe) return xmlString; } - public static void SalvarXmlEmDisco(this MDFeEnviMDFe enviMDFe) + public static void SalvarXmlEmDisco(this MDFeEnviMDFe enviMDFe, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + if (config.NaoSalvarXml()) return; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, enviMDFe.MDFe.Chave() + "-completo-mdfe.xml"); FuncoesXml.ClasseParaArquivoXml(enviMDFe, arquivoSalvar); - enviMDFe.MDFe.SalvarXmlEmDisco(); + enviMDFe.MDFe.SalvarXmlEmDisco(null, config); } } } \ No newline at end of file diff --git a/MDFe.Classes/Extensoes/ExtMDFeEvCancMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeEvCancMDFe.cs index 18e1980d9..3adbbf565 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeEvCancMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeEvCancMDFe.cs @@ -37,21 +37,23 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeEvCancMDFe { - public static void ValidaSchema(this MDFeEvCancMDFe evCancMDFe) + public static void ValidaSchema(this MDFeEvCancMDFe evCancMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlCancelamento = evCancMDFe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlCancelamento, "evCancMDFe_v1.00.xsd"); + Validador.Valida(xmlCancelamento, "evCancMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlCancelamento, "evCancMDFe_v3.00.xsd"); + Validador.Valida(xmlCancelamento, "evCancMDFe_v3.00.xsd", config); break; } } diff --git a/MDFe.Classes/Extensoes/ExtMDFeEvEncMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeEvEncMDFe.cs index e0b32c485..e87e5090e 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeEvEncMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeEvEncMDFe.cs @@ -37,21 +37,23 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeEvEncMDFe { - public static void ValidaSchema(this MDFeEvEncMDFe evEncMDFe) + public static void ValidaSchema(this MDFeEvEncMDFe evEncMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlEncerramento = evEncMDFe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlEncerramento, "evEncMDFe_v1.00.xsd"); + Validador.Valida(xmlEncerramento, "evEncMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlEncerramento, "evEncMDFe_v3.00.xsd"); + Validador.Valida(xmlEncerramento, "evEncMDFe_v3.00.xsd", config); break; } } diff --git a/MDFe.Classes/Extensoes/ExtMDFeEvIncCondutorMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeEvIncCondutorMDFe.cs index 1d6c8361c..2eaec8a35 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeEvIncCondutorMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeEvIncCondutorMDFe.cs @@ -37,21 +37,23 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeEvIncCondutorMDFe { - public static void ValidaSchema(this MDFeEvIncCondutorMDFe evIncCondutorMDFe) + public static void ValidaSchema(this MDFeEvIncCondutorMDFe evIncCondutorMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlIncluirCondutor = evIncCondutorMDFe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlIncluirCondutor, "evIncCondutorMDFe_v1.00.xsd"); + Validador.Valida(xmlIncluirCondutor, "evIncCondutorMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlIncluirCondutor, "evIncCondutorMDFe_v3.00.xsd"); + Validador.Valida(xmlIncluirCondutor, "evIncCondutorMDFe_v3.00.xsd", config); break; } } diff --git a/MDFe.Classes/Extensoes/ExtMDFeEvIncDFeMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeEvIncDFeMDFe.cs index 022dd0745..7137232ce 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeEvIncDFeMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeEvIncDFeMDFe.cs @@ -37,18 +37,20 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeEvIncDFeMDFe { - public static void ValidaSchema(this MDFeEvIncDFeMDFe evIncDFeMDFe) + public static void ValidaSchema(this MDFeEvIncDFeMDFe evIncDFeMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlIncluirDFe = evIncDFeMDFe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao300: - Validador.Valida(xmlIncluirDFe, "evInclusaoDFeMDFe_v3.00.xsd"); + Validador.Valida(xmlIncluirDFe, "evInclusaoDFeMDFe_v3.00.xsd", config); break; } } diff --git a/MDFe.Classes/Extensoes/ExtMDFeEventoMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeEventoMDFe.cs index 580ea22c3..f6d460da6 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeEventoMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeEventoMDFe.cs @@ -41,21 +41,23 @@ using System.IO; using System.Xml; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeEventoMDFe { - public static void ValidarSchema(this MDFeEventoMDFe evento) + public static void ValidarSchema(this MDFeEventoMDFe evento, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var xmlValido = evento.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: - Validador.Valida(xmlValido, "eventoMDFe_v1.00.xsd"); + Validador.Valida(xmlValido, "eventoMDFe_v1.00.xsd", config); break; case VersaoServico.Versao300: - Validador.Valida(xmlValido, "eventoMDFe_v3.00.xsd"); + Validador.Valida(xmlValido, "eventoMDFe_v3.00.xsd", config); break; } @@ -64,35 +66,35 @@ public static void ValidarSchema(this MDFeEventoMDFe evento) if (tipoEvento == typeof(MDFeEvCancMDFe)) { var objetoXml = (MDFeEvCancMDFe)evento.InfEvento.DetEvento.EventoContainer; - objetoXml.ValidaSchema(); + objetoXml.ValidaSchema(config); } if (tipoEvento == typeof(MDFeEvEncMDFe)) { var objetoXml = (MDFeEvEncMDFe)evento.InfEvento.DetEvento.EventoContainer; - objetoXml.ValidaSchema(); + objetoXml.ValidaSchema(config); } if (tipoEvento == typeof(MDFeEvIncCondutorMDFe)) { var objetoXml = (MDFeEvIncCondutorMDFe)evento.InfEvento.DetEvento.EventoContainer; - objetoXml.ValidaSchema(); + objetoXml.ValidaSchema(config); } if (tipoEvento == typeof(MDFeEvIncDFeMDFe)) { var objetoXml = (MDFeEvIncDFeMDFe)evento.InfEvento.DetEvento.EventoContainer; - objetoXml.ValidaSchema(); + objetoXml.ValidaSchema(config); } - if (tipoEvento == typeof(evPagtoOperMDFe)) + if (tipoEvento == typeof(MDFeEvPagtoOperMDFe)) { - var objetoXml = (evPagtoOperMDFe)evento.InfEvento.DetEvento.EventoContainer; + var objetoXml = (MDFeEvPagtoOperMDFe)evento.InfEvento.DetEvento.EventoContainer; - objetoXml.ValidaSchema(); + objetoXml.ValidaSchema(config); } } @@ -109,17 +111,21 @@ public static string XmlString(this MDFeEventoMDFe evento) return FuncoesXml.ClasseParaXmlString(evento); } - public static void Assinar(this MDFeEventoMDFe evento) + public static void Assinar(this MDFeEventoMDFe evento, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + evento.Signature = AssinaturaDigital.Assina(evento, evento.InfEvento.Id, - MDFeConfiguracao.X509Certificate2); + config.X509Certificate2); } - public static void SalvarXmlEmDisco(this MDFeEventoMDFe evento, string chave) + public static void SalvarXmlEmDisco(this MDFeEventoMDFe evento, string chave, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + if (config.NaoSalvarXml()) return; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, chave + "-ped-eve.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeRetConsMDFeNao.cs b/MDFe.Classes/Extensoes/ExtMDFeRetConsMDFeNao.cs index e3945835b..b9ff916d3 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeRetConsMDFeNao.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeRetConsMDFeNao.cs @@ -36,15 +36,17 @@ using MDFe.Classes.Retorno.MDFeConsultaNaoEncerrado; using MDFe.Utils.Configuracoes; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeRetConsMDFeNao { - public static void SalvarXmlEmDisco(this MDFeRetConsMDFeNao retConsMdFeNao, string cnpj) + public static void SalvarXmlEmDisco(this MDFeRetConsMDFeNao retConsMdFeNao, string cnpj, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + if (config.NaoSalvarXml()) return; + + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, cnpj + "-sit.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeRetConsReciMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeRetConsReciMDFe.cs index 9c904032b..8846136d9 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeRetConsReciMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeRetConsReciMDFe.cs @@ -36,15 +36,17 @@ using MDFe.Classes.Retorno.MDFeRetRecepcao; using MDFe.Utils.Configuracoes; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeRetConsReciMDFe { - public static void SalvarXmlEmDisco(this MDFeRetConsReciMDFe consReciMdFe) + public static void SalvarXmlEmDisco(this MDFeRetConsReciMDFe consReciMdFe, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + if (config.NaoSalvarXml()) return; + + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, consReciMdFe.NRec + "-pro-rec.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeRetConsSitMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeRetConsSitMDFe.cs index 71d6371ac..f5551c731 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeRetConsSitMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeRetConsSitMDFe.cs @@ -36,17 +36,19 @@ using MDFe.Classes.Retorno.MDFeConsultaProtocolo; using MDFe.Utils.Configuracoes; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeRetConsSitMDFe { - public static void SalvarXmlEmDisco(this MDFeRetConsSitMDFe retConsSitMdFe, string chave) + public static void SalvarXmlEmDisco(this MDFeRetConsSitMDFe retConsSitMdFe, string chave, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + if (config.NaoSalvarXml()) return; - var arquivoSalvar = Path.Combine(caminhoXml, chave + "-sit.xml"); + var caminhoXml = config.CaminhoSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, chave + "-sit.xml"); FuncoesXml.ClasseParaArquivoXml(retConsSitMdFe, arquivoSalvar); } diff --git a/MDFe.Classes/Extensoes/ExtMDFeRetConsStatServ.cs b/MDFe.Classes/Extensoes/ExtMDFeRetConsStatServ.cs index 968a24057..398e911e2 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeRetConsStatServ.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeRetConsStatServ.cs @@ -36,15 +36,17 @@ using MDFe.Classes.Retorno.MDFeStatusServico; using MDFe.Utils.Configuracoes; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeRetConsStatServ { - public static void SalvarXmlEmDisco(this MDFeRetConsStatServ retConsStatServ) + public static void SalvarXmlEmDisco(this MDFeRetConsStatServ retConsStatServ, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + if (config.NaoSalvarXml()) return; + + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, "-retorno-status-servico.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeRetEnviMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeRetEnviMDFe.cs index 80acf48c7..4f255e81e 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeRetEnviMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeRetEnviMDFe.cs @@ -36,15 +36,17 @@ using MDFe.Classes.Retorno.MDFeRecepcao; using MDFe.Utils.Configuracoes; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeRetEnviMDFe { - public static void SalvarXmlEmDisco(this MDFeRetEnviMDFe retEnviMDFe) + public static void SalvarXmlEmDisco(this MDFeRetEnviMDFe retEnviMDFe, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + if (config.NaoSalvarXml()) return; + + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, retEnviMDFe.InfRec.NRec + "-rec.xml"); diff --git a/MDFe.Classes/Extensoes/ExtMDFeRetEventoMDFe.cs b/MDFe.Classes/Extensoes/ExtMDFeRetEventoMDFe.cs index 1fe6c4911..a0af8f548 100644 --- a/MDFe.Classes/Extensoes/ExtMDFeRetEventoMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtMDFeRetEventoMDFe.cs @@ -36,15 +36,17 @@ using MDFe.Classes.Retorno.MDFeEvento; using MDFe.Utils.Configuracoes; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtMDFeRetEventoMDFe { - public static void SalvarXmlEmDisco(this MDFeRetEventoMDFe retEvento, string chave) + public static void SalvarXmlEmDisco(this MDFeRetEventoMDFe retEvento, string chave, MDFeConfiguracao cfgMdfe = null) { - if (MDFeConfiguracao.NaoSalvarXml()) return; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var caminhoXml = MDFeConfiguracao.CaminhoSalvarXml; + if (config.NaoSalvarXml()) return; + + var caminhoXml = config.CaminhoSalvarXml; var arquivoSalvar = Path.Combine(caminhoXml, chave + "-env.xml"); diff --git a/MDFe.Classes/Extensoes/ExtVersaoServico.cs b/MDFe.Classes/Extensoes/ExtVersaoServico.cs index 93cf49e32..4fafad483 100644 --- a/MDFe.Classes/Extensoes/ExtVersaoServico.cs +++ b/MDFe.Classes/Extensoes/ExtVersaoServico.cs @@ -33,7 +33,7 @@ using MDFe.Utils.Flags; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtVersaoServico { diff --git a/MDFe.Classes/Extensoes/ExtevPagtoOperMDFe.cs b/MDFe.Classes/Extensoes/ExtevPagtoOperMDFe.cs index ad04e149f..e2712abc1 100644 --- a/MDFe.Classes/Extensoes/ExtevPagtoOperMDFe.cs +++ b/MDFe.Classes/Extensoes/ExtevPagtoOperMDFe.cs @@ -4,23 +4,25 @@ using MDFe.Utils.Flags; using MDFe.Utils.Validacao; -namespace MDFe.Classes.Extencoes +namespace MDFe.Classes.Extensoes { public static class ExtevPagtoOperMDFe { - public static void ValidaSchema(this evPagtoOperMDFe evIncDFeMDFe) + public static void ValidaSchema(this MDFeEvPagtoOperMDFe evIncDFeMDFe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var ev = evIncDFeMDFe.XmlString(); - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao300: - Validador.Valida(ev, "evPagtoOperMDFe_v3.00.xsd"); + Validador.Valida(ev, "evPagtoOperMDFe_v3.00.xsd", config); break; } } - public static string XmlString(this evPagtoOperMDFe evIncDFeMDFe) + public static string XmlString(this MDFeEvPagtoOperMDFe evIncDFeMDFe) { return FuncoesXml.ClasseParaXmlString(evIncDFeMDFe); } diff --git a/MDFe.Classes/Flags/MDFeCUnid.cs b/MDFe.Classes/Flags/MDFeCUnid.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeCategCombVeic.cs b/MDFe.Classes/Flags/MDFeCategCombVeic.cs new file mode 100644 index 000000000..8ecd8e1eb --- /dev/null +++ b/MDFe.Classes/Flags/MDFeCategCombVeic.cs @@ -0,0 +1,37 @@ +using System.Xml.Serialization; + +namespace MDFe.Classes.Flags +{ + public enum MDFeCategCombVeic + { + [XmlEnum("02")] + VeiculoComercial2Eixos = 02, + + [XmlEnum("04")] + VeiculoComercial3Eixos = 03, + + [XmlEnum("06")] + VeiculoComercial4Eixos = 04, + + [XmlEnum("07")] + VeiculoComercial5Eixos = 05, + + [XmlEnum("08")] + VeiculoComercial6Eixos = 06, + + [XmlEnum("10")] + VeiculoComercial7Eixos = 07, + + [XmlEnum("11")] + VeiculoComercial8Eixos = 08, + + [XmlEnum("12")] + VeiculoComercial9Eixos = 09, + + [XmlEnum("13")] + VeiculoComercial10Eixos = 10, + + [XmlEnum("14")] + VeiculoComercialAcimaDe10Eixos = 14 + } +} \ No newline at end of file diff --git a/MDFe.Classes/Flags/MDFeIdentificacaoProcessoEmissao.cs b/MDFe.Classes/Flags/MDFeIdentificacaoProcessoEmissao.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeIndAltoDesemp.cs b/MDFe.Classes/Flags/MDFeIndAltoDesemp.cs new file mode 100644 index 000000000..5403b2d95 --- /dev/null +++ b/MDFe.Classes/Flags/MDFeIndAltoDesemp.cs @@ -0,0 +1,12 @@ +using System.Xml.Serialization; + +namespace MDFe.Classes.Flags +{ + public enum MDFeIndAltoDesemp + { + [XmlEnum("0")] + NaoAltoDesempenho = 0, + [XmlEnum("1")] + AltoDesempenho = 1 + } +} diff --git a/MDFe.Classes/Flags/MDFeIndPag.cs b/MDFe.Classes/Flags/MDFeIndPag.cs new file mode 100644 index 000000000..71e870574 --- /dev/null +++ b/MDFe.Classes/Flags/MDFeIndPag.cs @@ -0,0 +1,12 @@ +using System.Xml.Serialization; + +namespace MDFe.Classes.Flags +{ + public enum MDFeIndPag + { + [XmlEnum("0")] + PagamentoVista = 0, + [XmlEnum("1")] + PagamentoPrazo = 1 + } +} diff --git a/MDFe.Classes/Flags/MDFeModal.cs b/MDFe.Classes/Flags/MDFeModal.cs old mode 100755 new mode 100644 index fd4550609..51fcb092b --- a/MDFe.Classes/Flags/MDFeModal.cs +++ b/MDFe.Classes/Flags/MDFeModal.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ +using System.ComponentModel; using System.Xml.Serialization; namespace MDFe.Classes.Flags @@ -37,12 +38,16 @@ namespace MDFe.Classes.Flags public enum MDFeModal { [XmlEnum("1")] + [Description("Rodoviário")] Rodoviario = 1, [XmlEnum("2")] + [Description("Aéreo")] Aereo = 2, [XmlEnum("3")] + [Description("Aquaviário")] Aquaviario = 3, [XmlEnum("4")] - Ferroviari = 4 + [Description("Ferroviário")] + Ferroviario = 4 } } \ No newline at end of file diff --git a/MDFe.Classes/Flags/MDFeTipoEmissao.cs b/MDFe.Classes/Flags/MDFeTipoEmissao.cs old mode 100755 new mode 100644 index 7b0b7ae1b..fd92cda97 --- a/MDFe.Classes/Flags/MDFeTipoEmissao.cs +++ b/MDFe.Classes/Flags/MDFeTipoEmissao.cs @@ -39,6 +39,8 @@ public enum MDFeTipoEmissao [XmlEnum("1")] Normal = 1, [XmlEnum("2")] - Contingencia = 2 + Contingencia = 2, + [XmlEnum("3")] + RegimeEspecialNFF = 3 } } \ No newline at end of file diff --git a/MDFe.Classes/Flags/MDFeTipoEmitente.cs b/MDFe.Classes/Flags/MDFeTipoEmitente.cs old mode 100755 new mode 100644 index 47a76ba2a..d351d7431 --- a/MDFe.Classes/Flags/MDFeTipoEmitente.cs +++ b/MDFe.Classes/Flags/MDFeTipoEmitente.cs @@ -39,6 +39,8 @@ public enum MDFeTipoEmitente [XmlEnum("1")] PrestadorServicoDeTransporte = 1, [XmlEnum("2")] - TransportadorCargaPropria = 2 + TransportadorCargaPropria = 2, + [XmlEnum("3")] + PrestadorServicoDeTransporteCTeGlobalizado = 3 } } \ No newline at end of file diff --git a/MDFe.Classes/Flags/MDFeTpCar.cs b/MDFe.Classes/Flags/MDFeTpCar.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeTpCarga.cs b/MDFe.Classes/Flags/MDFeTpCarga.cs new file mode 100644 index 000000000..1781b6bd7 --- /dev/null +++ b/MDFe.Classes/Flags/MDFeTpCarga.cs @@ -0,0 +1,43 @@ +using System.Xml.Serialization; + +namespace MDFe.Classes.Flags +{ + public enum MDFeTpCarga + { + [XmlEnum("01")] + GranelSolido = 01, + + [XmlEnum("02")] + GranelLiquido = 02, + + [XmlEnum("03")] + Frigorificada = 03, + + [XmlEnum("04")] + Conteinerizada = 04, + + [XmlEnum("05")] + CargaGeral = 05, + + [XmlEnum("06")] + Neogranel = 06, + + [XmlEnum("07")] + PerigosaGranelSolido = 07, + + [XmlEnum("08")] + PerigosaGranelLiquido = 08, + + [XmlEnum("09")] + PerigosaCargaFrigorificada = 09, + + [XmlEnum("10")] + PerigosaCargaConteinerizada = 10, + + [XmlEnum("11")] + PerigosaCargaGeral = 11, + + [XmlEnum("12")] + GranelPressurizada = 12 + } +} \ No newline at end of file diff --git a/MDFe.Classes/Flags/MDFeTpComp.cs b/MDFe.Classes/Flags/MDFeTpComp.cs new file mode 100644 index 000000000..ef6bc8992 --- /dev/null +++ b/MDFe.Classes/Flags/MDFeTpComp.cs @@ -0,0 +1,22 @@ +using System.Xml.Serialization; + +namespace MDFe.Classes.Flags +{ + public enum MDFeTpComp + { + [XmlEnum("01")] + ValePedagio = 01, + + [XmlEnum("02")] + ImpostosTaxasEContribuicoes = 02, + + [XmlEnum("03")] + DespesasBancariasEMeiosDePagamentoOutras = 03, + + [XmlEnum("04")] + Frete = 04, + + [XmlEnum("99")] + Outros = 99 + } +} \ No newline at end of file diff --git a/MDFe.Classes/Flags/MDFeTpProp.cs b/MDFe.Classes/Flags/MDFeTpProp.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeTpRod.cs b/MDFe.Classes/Flags/MDFeTpRod.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeTpUnidCarga.cs b/MDFe.Classes/Flags/MDFeTpUnidCarga.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeTpUnidCargaVazia.cs b/MDFe.Classes/Flags/MDFeTpUnidCargaVazia.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeTpUnidTransp.cs b/MDFe.Classes/Flags/MDFeTpUnidTransp.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Flags/MDFeVersaoModal.cs b/MDFe.Classes/Flags/MDFeVersaoModal.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/Comp.cs b/MDFe.Classes/Informacoes/Comp.cs deleted file mode 100644 index 8bd242160..000000000 --- a/MDFe.Classes/Informacoes/Comp.cs +++ /dev/null @@ -1,24 +0,0 @@ -using DFe.Classes; -using System; -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class Comp - { - public tpComp tpComp { get; set; } - - [XmlIgnore] - public decimal vComp { get; set; } - - [XmlElement("vComp")] - public decimal vCompProxy - { - get { return vComp.Arredondar(2); } - set { vComp = value.Arredondar(2); } - } - - public string xComp { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/ConsultaNaoEncerrados/MDFeCosMDFeNaoEnc.cs b/MDFe.Classes/Informacoes/ConsultaNaoEncerrados/MDFeCosMDFeNaoEnc.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/ConsultaProtocolo/MDFeConsSitMDFe.cs b/MDFe.Classes/Informacoes/ConsultaProtocolo/MDFeConsSitMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvCancMDFe.cs b/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvCancMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvEncMDFe.cs b/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvEncMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvIncCondutorMDFe.cs b/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvIncCondutorMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvPagtoOperMDFe.cs b/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvPagtoOperMDFe.cs new file mode 100644 index 000000000..01a100836 --- /dev/null +++ b/MDFe.Classes/Informacoes/Evento/CorpoEvento/MDFeEvPagtoOperMDFe.cs @@ -0,0 +1,72 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes.Evento.CorpoEvento +{ + [Serializable] + public class MDFeEvPagtoOperMDFe : MDFeEventoContainer + { + public MDFeEvPagtoOperMDFe() + { + DescEvento = "Pagamento Operacao MDF-e"; + } + + /// + /// 1 - Descrição do evento + /// + [XmlElement("descEvento")] + public string DescEvento { get; set; } + + /// + /// 1 - Número do protocolo de autorização do MDF-e + /// + [XmlElement("nProt")] + public string NProt { get; set; } + + /// + /// 1 - Informações do total de viagens acobertadas pelo Evento “pagamento do frete” + /// + [XmlElement("infViagens")] + public MDFeInfViagens InfViagens { get; set; } + + /// + /// 1 - Grupo de Informações dos pgto do MDF-e + /// + [XmlElement(ElementName = "infPag")] + public List InfPag { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/Evento/CorpoEvento/evPagtoOperMDFe.cs b/MDFe.Classes/Informacoes/Evento/CorpoEvento/evPagtoOperMDFe.cs deleted file mode 100644 index 4bc01bb2d..000000000 --- a/MDFe.Classes/Informacoes/Evento/CorpoEvento/evPagtoOperMDFe.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes.Evento.CorpoEvento -{ - [Serializable] - public class evPagtoOperMDFe : MDFeEventoContainer - { - public evPagtoOperMDFe() - { - descEvento = "Pagamento Operacao MDF-e"; - } - - public string descEvento { get; set; } - - public string nProt { get; set; } - - public infViagens infViagens { get; set; } - - [XmlElement(ElementName = "infPag")] - public List infPag { get; set; } - } - - [Serializable] - public class infViagens - { - [XmlIgnore] - public int qtdViagens { get; set; } - - [XmlElement("qtdViagens")] - public string qtdViagensProxy - { - get { return qtdViagens.ToString("D5"); } - set { qtdViagens = int.Parse(value); } - } - - [XmlIgnore] - public int nroViagem { get; set; } - - [XmlElement("nroViagem")] - public string nroViagemProxy - { - get { return nroViagem.ToString("D5"); } - set { nroViagem = int.Parse(value); } - } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/Evento/Flags/MDFeTipoEvento.cs b/MDFe.Classes/Informacoes/Evento/Flags/MDFeTipoEvento.cs old mode 100755 new mode 100644 index 59425616c..5d6c4dff2 --- a/MDFe.Classes/Informacoes/Evento/Flags/MDFeTipoEvento.cs +++ b/MDFe.Classes/Informacoes/Evento/Flags/MDFeTipoEvento.cs @@ -50,5 +50,7 @@ public enum MDFeTipoEvento RegistroDePassagemAutomatico = 510620, [XmlEnum("110116")] PagamentoOperacaoMDFe = 110116, + [XmlEnum("310112")] + EncerramentoFisco = 310112 } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/Evento/MDFeDetEvento.cs b/MDFe.Classes/Informacoes/Evento/MDFeDetEvento.cs old mode 100755 new mode 100644 index cd745363b..d42823310 --- a/MDFe.Classes/Informacoes/Evento/MDFeDetEvento.cs +++ b/MDFe.Classes/Informacoes/Evento/MDFeDetEvento.cs @@ -52,7 +52,7 @@ public MDFeDetEvento() [XmlElement("evEncMDFe", typeof(MDFeEvEncMDFe), Namespace = "http://www.portalfiscal.inf.br/mdfe")] [XmlElement("evIncCondutorMDFe", typeof(MDFeEvIncCondutorMDFe), Namespace = "http://www.portalfiscal.inf.br/mdfe")] [XmlElement("evIncDFeMDFe", typeof(MDFeEvIncDFeMDFe), Namespace = "http://www.portalfiscal.inf.br/mdfe")] - [XmlElement("evPagtoOperMDFe", typeof(evPagtoOperMDFe), Namespace = "http://www.portalfiscal.inf.br/mdfe")] + [XmlElement("evPagtoOperMDFe", typeof(MDFeEvPagtoOperMDFe), Namespace = "http://www.portalfiscal.inf.br/mdfe")] public MDFeEventoContainer EventoContainer { get; set; } } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/Evento/MDFeEventoContainer.cs b/MDFe.Classes/Informacoes/Evento/MDFeEventoContainer.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/Evento/MDFeEventoMDFe.cs b/MDFe.Classes/Informacoes/Evento/MDFeEventoMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/Evento/MDFeInfEvento.cs b/MDFe.Classes/Informacoes/Evento/MDFeInfEvento.cs old mode 100755 new mode 100644 index a4298f59c..9c2bdf845 --- a/MDFe.Classes/Informacoes/Evento/MDFeInfEvento.cs +++ b/MDFe.Classes/Informacoes/Evento/MDFeInfEvento.cs @@ -45,8 +45,20 @@ namespace MDFe.Classes.Informacoes.Evento [Serializable] public class MDFeInfEvento { + /// + /// Construtor para serialização + /// + private MDFeInfEvento() + { + } + + public MDFeInfEvento(VersaoServico? versaoServico = null) + { + _versaoServico = versaoServico ?? MDFeConfiguracao.Instancia.VersaoWebService.VersaoLayout; + } + [XmlIgnore] - private readonly VersaoServico _versaoServico = MDFeConfiguracao.VersaoWebService.VersaoLayout; + private readonly VersaoServico _versaoServico; [XmlAttribute(AttributeName = "Id")] public string Id { get; set; } diff --git a/MDFe.Classes/Informacoes/MDFe.cs b/MDFe.Classes/Informacoes/MDFe.cs old mode 100755 new mode 100644 index e2b802bfd..ccc462c5d --- a/MDFe.Classes/Informacoes/MDFe.cs +++ b/MDFe.Classes/Informacoes/MDFe.cs @@ -51,7 +51,7 @@ public MDFe() public MDFeInfMDFe InfMDFe { get; set; } [XmlElement(ElementName = "infMDFeSupl")] - public infMDFeSupl infMDFeSupl { get; set; } + public MdfeInfMDFeSupl InfMDFeSupl { get; set; } [XmlElement(ElementName = "Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#")] public Signature Signature { get; set; } diff --git a/MDFe.Classes/Informacoes/MDFeAereo.cs b/MDFe.Classes/Informacoes/MDFeAereo.cs old mode 100755 new mode 100644 index f087f7239..8ffd73335 --- a/MDFe.Classes/Informacoes/MDFeAereo.cs +++ b/MDFe.Classes/Informacoes/MDFeAereo.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Utils; diff --git a/MDFe.Classes/Informacoes/MDFeAquav.cs b/MDFe.Classes/Informacoes/MDFeAquav.cs old mode 100755 new mode 100644 index bbeaf2d92..d16e5e4d4 --- a/MDFe.Classes/Informacoes/MDFeAquav.cs +++ b/MDFe.Classes/Informacoes/MDFeAquav.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; @@ -109,11 +110,18 @@ public class MDFeAquav : MDFeModalContainer public List InfEmbCombs { get; set; } /// - /// 1 - Informações das Undades de Carga vazias + /// 1 - Informações das Unidades de Carga vazias /// [XmlElement(ElementName = "infUnidCargaVazia")] public List InfUnidCargaVazias { get; set; } + /// + /// 1 - Informações das Unidades de Transporte vazias + /// public List infUnidTranspVazia { get; set; } - } + + /// + /// 1 - Maritime Mobile Service Identify + /// + public string MMSI { get; set; } } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeAutXML.cs b/MDFe.Classes/Informacoes/MDFeAutXML.cs old mode 100755 new mode 100644 index 8b23734bd..d2c908015 --- a/MDFe.Classes/Informacoes/MDFeAutXML.cs +++ b/MDFe.Classes/Informacoes/MDFeAutXML.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeComp.cs b/MDFe.Classes/Informacoes/MDFeComp.cs new file mode 100644 index 000000000..5cd0fd5ac --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeComp.cs @@ -0,0 +1,69 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; +using MDFe.Classes.Flags; +using System; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeComp + { + /// + /// 1 - Tipo do Componente. + /// + [XmlElement(ElementName = "tpComp")] + public MDFeTpComp TpComp { get; set; } + + [XmlIgnore] + private decimal _vComp { get; set; } + + /// + /// 1 - Valor do Componente. + /// + [XmlElement(ElementName = "vComp")] + public decimal VComp + { + get { return _vComp.Arredondar(2); } + set { _vComp = value.Arredondar(2); } + } + + /// + /// 1 - Descrição do Componente tipo Outros. + /// + [XmlElement(ElementName = "xComp")] + public string XComp { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeCondutor.cs b/MDFe.Classes/Informacoes/MDFeCondutor.cs old mode 100755 new mode 100644 index fa2dbad40..eb55e654f --- a/MDFe.Classes/Informacoes/MDFeCondutor.cs +++ b/MDFe.Classes/Informacoes/MDFeCondutor.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeDisp.cs b/MDFe.Classes/Informacoes/MDFeDisp.cs old mode 100755 new mode 100644 index 3a3148bae..91f86a26b --- a/MDFe.Classes/Informacoes/MDFeDisp.cs +++ b/MDFe.Classes/Informacoes/MDFeDisp.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes; @@ -42,29 +43,44 @@ public class MDFeDisp private decimal _vValePed; /// - /// 3 - CNPJ da empresa fornecedora do ValePedágio + /// 4 - CNPJ da empresa fornecedora do ValePedágio /// [XmlElement(ElementName = "CNPJForn")] public string CNPJForn { get; set; } /// - /// 3 - CNPJ do responsável pelo pagamento do Vale-Pedágio + /// 4 - CNPJ do responsável pelo pagamento do Vale-Pedágio /// [XmlElement(ElementName = "CNPJPg")] public string CNPJPg { get; set; } + /// + /// 4 - CNPJ do responsável pelo pagamento do Vale-Pedágio + /// public string CPFPg { get; set; } /// - /// 3 - Número do comprovante de compra + /// 4 - Número do comprovante de compra /// [XmlElement(ElementName = "nCompra")] public string NCompra { get; set; } - public decimal vValePed + /// + /// 4 - Valor do Vale-Pedagio + /// + [XmlElement(ElementName = "vValePed")] + public decimal VValePed { get { return _vValePed.Arredondar(2); } set { _vValePed = value.Arredondar(2); } } + + /// + /// Tipo do Vale Pedágio + /// + [XmlElement(ElementName = "tpValePed")] + public MDFeTpValePed? TpValePed { get; set; } + + public bool TpValePedSpecified => TpValePed.HasValue; } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeEmit.cs b/MDFe.Classes/Informacoes/MDFeEmit.cs old mode 100755 new mode 100644 index 8f6fd2fb3..1850966fd --- a/MDFe.Classes/Informacoes/MDFeEmit.cs +++ b/MDFe.Classes/Informacoes/MDFeEmit.cs @@ -51,6 +51,10 @@ public MDFeEmit() [XmlElement(ElementName = "CNPJ")] public string CNPJ { get; set; } + /// + /// 2 - CPF do emitente + /// + [XmlElement(ElementName = "CPF")] public string CPF { get; set; } /// @@ -59,6 +63,11 @@ public MDFeEmit() [XmlElement(ElementName = "IE")] public string IE { get; set; } + public bool ShouldSerializeIE() + { + return !string.IsNullOrEmpty(IE); + } + /// /// 2 - Razão social ou Nome do emitente /// diff --git a/MDFe.Classes/Informacoes/MDFeFerrov.cs b/MDFe.Classes/Informacoes/MDFeFerrov.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Informacoes/MDFeIde.cs b/MDFe.Classes/Informacoes/MDFeIde.cs old mode 100755 new mode 100644 index 974a556f9..55455e917 --- a/MDFe.Classes/Informacoes/MDFeIde.cs +++ b/MDFe.Classes/Informacoes/MDFeIde.cs @@ -46,12 +46,20 @@ namespace MDFe.Classes.Informacoes [Serializable] public class MDFeIde { - public MDFeIde() + private MDFeIde() { InfMunCarrega = new List(); InfPercurso = new List(); } + public MDFeIde(VersaoServico? versaoServico = null) : this() + { + _versaoServico = versaoServico ?? MDFeConfiguracao.Instancia.VersaoWebService.VersaoLayout; + } + + [XmlIgnore] + private readonly VersaoServico? _versaoServico; + /// /// 2 - Código da UF do emitente do MDF-e. /// @@ -140,7 +148,8 @@ public string ProxyDhEmi { get { - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + var versaoLayout = _versaoServico ?? MDFeConfiguracao.Instancia.VersaoWebService.VersaoLayout; + switch (versaoLayout) { case VersaoServico.Versao100: return DhEmi.ParaDataHoraStringSemUtc(); @@ -226,11 +235,41 @@ public string ProxyUFFim /// Proxy para dhIniViagem /// [XmlElement(ElementName = "dhIniViagem")] - public string ProxyDhIniViagem { get; set; } + public string ProxyDhIniViagem + { + get + { + var versaoLayout = _versaoServico ?? MDFeConfiguracao.Instancia.VersaoWebService.VersaoLayout; + switch (versaoLayout) + { + case VersaoServico.Versao100: + return DhIniViagem.ParaDataHoraStringSemUtc(); + case VersaoServico.Versao300: + return DhIniViagem.ParaDataHoraStringUtc(); + default: + throw new InvalidOperationException("Versão Inválida para MDF-e"); + } + } + set + { + if (value is null) + DhIniViagem = null; + else + DhIniViagem = DateTime.Parse(value); + } + } + + /// + /// Indicador de participação do Canal Verde. + /// [XmlElement(ElementName = "indCanalVerde")] public string IndCanalVerde { get; set; } + /// + /// Indicador de MDF-e com inclusão da Carga posterior + /// a emissão por evento de inclusão de DF-e. + /// [XmlElement(ElementName = "indCarregaPosterior")] public string IndCarregaPosterior { get; set; } } diff --git a/MDFe.Classes/Informacoes/MDFeInfANTT.cs b/MDFe.Classes/Informacoes/MDFeInfANTT.cs new file mode 100644 index 000000000..561f646ef --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfANTT.cs @@ -0,0 +1,73 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfANTT + { + /// + /// 2 - Registro Nacional de Transportadores Rodoviários de Carga + /// + [XmlElement(ElementName = "RNTRC")] + public string RNTRC { get; set; } + + /// + /// 2 - Dados do CIOT + /// + [XmlElement(ElementName = "infCIOT")] + public List InfCIOT { get; set; } + + /// + /// 2 - Informações de Vale Pedágio + /// + [XmlElement(ElementName = "valePed")] + public MDFeValePed ValePed { get; set; } + + /// + /// 2 - Grupo de informações dos contratantes do serviço de transporte + /// + [XmlElement(ElementName = "infContratante")] + public List InfContratante { get; set; } + + /// + /// 2 - Informações do Pagamento do Frete + /// + [XmlElement(ElementName = "infPag")] + public List InfPag { get; set; } + } +} diff --git a/MDFe.Classes/Informacoes/MDFeInfAdic.cs b/MDFe.Classes/Informacoes/MDFeInfAdic.cs old mode 100755 new mode 100644 index e0a2aec81..d3e4a7297 --- a/MDFe.Classes/Informacoes/MDFeInfAdic.cs +++ b/MDFe.Classes/Informacoes/MDFeInfAdic.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfBanc.cs b/MDFe.Classes/Informacoes/MDFeInfBanc.cs new file mode 100644 index 000000000..689d4ae05 --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfBanc.cs @@ -0,0 +1,36 @@ +using System; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfBanc + { + /// + /// 1 - Número do Banco. + /// + [XmlElement(ElementName = "codBanco")] + public string CodBanco { get; set; } + + /// + /// 1 - Número da Agência. + /// + [XmlElement(ElementName = "codAgencia")] + public string CodAgencia { get; set; } + + /// + /// 1 -´Número do CNPJ da Instituição de + /// pagamento Eletrônico do frete. + /// + [XmlElement(ElementName = "CNPJIPEF")] + public string CNPJIPEF { get; set; } + + /// + /// 1 -Informar a chave PIX para recebimento do frete. + /// Pode ser email, CPF/ CNPJ (somente numeros), Telefone com a seguinte formatação + /// (+5599999999999) ou a chave aleatória gerada pela instituição. + /// + [XmlElement(ElementName = "PIX")] + public string PIX { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfCTe.cs b/MDFe.Classes/Informacoes/MDFeInfCTe.cs old mode 100755 new mode 100644 index 0739b7958..fdaaff399 --- a/MDFe.Classes/Informacoes/MDFeInfCTe.cs +++ b/MDFe.Classes/Informacoes/MDFeInfCTe.cs @@ -72,6 +72,11 @@ public class MDFeInfCTe [XmlElement(ElementName = "peri")] public List Peri { get; set; } - public infEntregaParcial infEntregaParcial { get; set; } + /// + /// Grupo de informações da Entrega Parcial (Corte de Voo). + /// MDF-e 3.0 + /// + [XmlElement(ElementName = "infEntregaParcial")] + public MDFeInfEntregaParcial InfEntregaParcial { get; set; } } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfContratante.cs b/MDFe.Classes/Informacoes/MDFeInfContratante.cs new file mode 100644 index 000000000..40839b96a --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfContratante.cs @@ -0,0 +1,33 @@ +using System; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfContratante + { + /// + /// 3 - Razão social ou Nome do contratante + /// + [XmlElement(ElementName = "xNome")] + public string XNome { get; set; } + + /// + /// 3 - Número do CPF do contratante do serviço + /// + [XmlElement(ElementName = "CPF")] + public string CPF { get; set; } + + /// + /// 3 - Número do CNPJ do contratante serviço + /// + [XmlElement(ElementName = "CNPJ")] + public string CNPJ { get; set; } + + /// + /// 3 - Identificador do contratante em caso de contratante estrangeiro + /// + [XmlElement(ElementName = "idEstrangeiro")] + public string IdEstrangeiro { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfDoc.cs b/MDFe.Classes/Informacoes/MDFeInfDoc.cs old mode 100755 new mode 100644 index b7cdc632a..f320e95d3 --- a/MDFe.Classes/Informacoes/MDFeInfDoc.cs +++ b/MDFe.Classes/Informacoes/MDFeInfDoc.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfEmbComb.cs b/MDFe.Classes/Informacoes/MDFeInfEmbComb.cs old mode 100755 new mode 100644 index 12006e513..9fddb53f9 --- a/MDFe.Classes/Informacoes/MDFeInfEmbComb.cs +++ b/MDFe.Classes/Informacoes/MDFeInfEmbComb.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; @@ -44,6 +45,10 @@ public class MDFeInfEmbComb [XmlElement(ElementName = "cEmbComb")] public string CEmbComb { get; set; } - public string xBalsa { get; set; } + /// + /// 2 - Código da embarcação do comboio + /// + [XmlElement(ElementName = "xBalsa")] + public string XBalsa { get; set; } } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfEntregaParcial.cs b/MDFe.Classes/Informacoes/MDFeInfEntregaParcial.cs new file mode 100644 index 000000000..36b39d2cf --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfEntregaParcial.cs @@ -0,0 +1,19 @@ +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + public class MDFeInfEntregaParcial + { + /// + /// 5 - Quantidade total de volumes + /// /// + [XmlElement(ElementName = "qtdTotal")] + public decimal QtdTotal { get; set; } + + /// + /// 5 - Quantidade de volumes enviados no MDF-e + /// + [XmlElement(ElementName = "qtdParcial")] + public decimal QtdParcial { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfLocalCarrega.cs b/MDFe.Classes/Informacoes/MDFeInfLocalCarrega.cs new file mode 100644 index 000000000..0aca2ab3e --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfLocalCarrega.cs @@ -0,0 +1,98 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfLocalCarrega + { + /// + /// 1 - Cep onde foi carregado o MDF-e. + /// + [XmlElement(ElementName = "CEP")] + public string CEP { get; set; } + + [XmlIgnore] + private decimal? _latitude { get; set; } + + /// + /// 1- Latitude do ponto geográfico onde foi carregado o MDF-e. + /// + [XmlElement("latitude")] + public string LatitudeProxy + { + get + { + if (_latitude == null) return null; + return _latitude.ToString(); + } + set + { + if (value == null) + { + _latitude = null; + return; + } + _latitude = decimal.Parse(value); + } + } + + [XmlIgnore] + private decimal? _longitude { get; set; } + + /// + /// 1 - Longitude do ponto geográfico onde foi carregado o MDF-e. + /// + [XmlElement("longitude")] + public string LongitudeProxy + { + get + { + if (_longitude == null) return null; + return _longitude.ToString(); + } + set + { + if (value == null) + { + _longitude = null; + return; + } + _longitude = decimal.Parse(value); + } + } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfLocalDescarrega.cs b/MDFe.Classes/Informacoes/MDFeInfLocalDescarrega.cs new file mode 100644 index 000000000..976eab2d7 --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfLocalDescarrega.cs @@ -0,0 +1,99 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfLocalDescarrega + { + /// + /// 1 - Cep onde foi descarregado o MDF-e. + /// + public string CEP { get; set; } + + [XmlIgnore] + private decimal? _latitude { get; set; } + + /// + /// 1- Latitude do ponto geográfico onde foi + /// descarregado o MDF-e. + /// + [XmlElement("latitude")] + public string LatitudeProxy + { + get + { + if (_latitude == null) return null; + return _latitude.ToString(); + } + set + { + if (value == null) + { + _latitude = null; + return; + } + _latitude = decimal.Parse(value); + } + } + + [XmlIgnore] + private decimal? _longitude { get; set; } + + /// + /// 1 - Longitude do ponto geográfico onde foi + /// descarregado o MDF-e. + /// + [XmlElement("longitude")] + public string LongitudeProxy + { + get + { + if (_longitude == null) return null; + return _longitude.ToString(); + } + set + { + if (value == null) + { + _longitude = null; + return; + } + _longitude = decimal.Parse(value); + } + } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfLotacao.cs b/MDFe.Classes/Informacoes/MDFeInfLotacao.cs new file mode 100644 index 000000000..68c78f43e --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfLotacao.cs @@ -0,0 +1,63 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfLotacao + { + public MDFeInfLotacao() + { + InfLocalCarrega = new MDFeInfLocalCarrega(); + InfLocalDescarrega = new MDFeInfLocalDescarrega(); + } + + /// + /// 1 - Informações da localização do + /// carregamento do MDF-e de carga lotação + /// + [XmlElement(ElementName = "infLocalCarrega")] + public MDFeInfLocalCarrega InfLocalCarrega { get; set; } + + /// + /// 1 - Informações da localização do + /// descarregamento do MDF-e de carga + /// lotação + /// + [XmlElement(ElementName = "infLocalDescarrega")] + public MDFeInfLocalDescarrega InfLocalDescarrega { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfMDFe.cs b/MDFe.Classes/Informacoes/MDFeInfMDFe.cs old mode 100755 new mode 100644 index 9d0ddca4d..a9b9704f9 --- a/MDFe.Classes/Informacoes/MDFeInfMDFe.cs +++ b/MDFe.Classes/Informacoes/MDFeInfMDFe.cs @@ -49,6 +49,7 @@ public MDFeInfMDFe() Tot = new MDFeTot(); Versao = VersaoServico.Versao100; } + /// /// 1 - Versão do leiaute /// @@ -94,8 +95,11 @@ public MDFeInfMDFe() [XmlElement(ElementName = "seg")] public List Seg { get; set; } + /// + /// 1 - Grupo de informações do Produto predominante da carga do MDF-e + /// [XmlElement(ElementName = "prodPred")] - public prodPred prodPred { get; set; } + public MDFeProdPred ProdPred { get; set; } /// /// 1 - Totalizadores da carga transportada e seus documentos fiscais @@ -121,7 +125,10 @@ public MDFeInfMDFe() [XmlElement(ElementName = "infAdic")] public MDFeInfAdic InfAdic { get; set; } + /// + /// 1 - Informações do Responsável Técnico pela emissão do DF-e. + /// [XmlElement(ElementName = "infRespTec")] - public infRespTec infRespTec { get; set; } + public MDFeInfRespTec InfRespTec { get; set; } } } diff --git a/MDFe.Classes/Informacoes/MDFeInfMDFeTransp.cs b/MDFe.Classes/Informacoes/MDFeInfMDFeTransp.cs old mode 100755 new mode 100644 index 7bfbf100d..104b6b4bc --- a/MDFe.Classes/Informacoes/MDFeInfMDFeTransp.cs +++ b/MDFe.Classes/Informacoes/MDFeInfMDFeTransp.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfModal.cs b/MDFe.Classes/Informacoes/MDFeInfModal.cs old mode 100755 new mode 100644 index 5c4d38941..805d4233b --- a/MDFe.Classes/Informacoes/MDFeInfModal.cs +++ b/MDFe.Classes/Informacoes/MDFeInfModal.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using MDFe.Classes.Contratos; @@ -42,7 +43,7 @@ public class MDFeInfModal { public MDFeInfModal() { - VersaoModal = MDFeVersaoModal.Versao100; + VersaoModal = MDFeVersaoModal.Versao300; } /// diff --git a/MDFe.Classes/Informacoes/MDFeInfMunCarrega.cs b/MDFe.Classes/Informacoes/MDFeInfMunCarrega.cs old mode 100755 new mode 100644 index 47edd4572..25c4fb3b1 --- a/MDFe.Classes/Informacoes/MDFeInfMunCarrega.cs +++ b/MDFe.Classes/Informacoes/MDFeInfMunCarrega.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfMunDescarga.cs b/MDFe.Classes/Informacoes/MDFeInfMunDescarga.cs old mode 100755 new mode 100644 index 84d8b0a72..5f2cd87af --- a/MDFe.Classes/Informacoes/MDFeInfMunDescarga.cs +++ b/MDFe.Classes/Informacoes/MDFeInfMunDescarga.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfNFe.cs b/MDFe.Classes/Informacoes/MDFeInfNFe.cs old mode 100755 new mode 100644 index bab4f0b4b..bc83e8fb3 --- a/MDFe.Classes/Informacoes/MDFeInfNFe.cs +++ b/MDFe.Classes/Informacoes/MDFeInfNFe.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfPag.cs b/MDFe.Classes/Informacoes/MDFeInfPag.cs new file mode 100644 index 000000000..bbdcfec4a --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfPag.cs @@ -0,0 +1,124 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes; +using MDFe.Classes.Flags; +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfPag + { + public MDFeInfPag() + { + InfPrazo = new List(); + } + + /// + /// 3 - Nome do responsável pelo pagamento. + /// + [XmlElement(ElementName = "xNome")] + public string XNome { get; set; } + + /// + /// 3 - Número do CPF do responsável pelo pagamento. + /// + [XmlElement(ElementName = "CPF")] + public string CPF { get; set; } + + /// + /// 3 - Número do CNPJ do responsável pelo pagamento. + /// + [XmlElement(ElementName = "CNPJ")] + public string CNPJ { get; set; } + + /// + /// 3 - Identificador do responsável pelo pagamento + /// em caso de ser estrangeiro. + /// + [XmlElement(ElementName = "idEstrangeiro")] + public string IdEstrangeiro { get; set; } + + /// + /// 3 - Componentes do pagamento do frete. + /// + [XmlElement(ElementName = "Comp")] + public List Comp { get; set; } + + [XmlIgnore] + private decimal _vContrato { get; set; } + + /// + /// 3 - Valor total do Contrato. + /// + [XmlElement("vContrato")] + public decimal VContratoProxy + { + get { return _vContrato.Arredondar(2); } + set { _vContrato = value.Arredondar(2); } + } + + /// + /// 3 - Indicador da forma de pagamento. + /// + [XmlElement(ElementName = "indPag")] + public MDFeIndPag IndPag { get; set; } + + /// + /// 3 - Informações do pagamento a prazo. Informar somente se indPag for à Prazo. + /// + [XmlElement(ElementName = "infPrazo")] + public List InfPrazo { get; set; } + + /// + /// 3 - Informações Bancárias. + /// + [XmlElement(ElementName = "infBanc")] + public MDFeInfBanc InfBanc { get; set; } + + /// + /// 3 - Indicador de operação de transporte de + /// alto desempenho + /// + [XmlElement(ElementName = "indAltoDesemp")] + public MDFeIndAltoDesemp IndAltoDesemp { get; set; } + + public bool ShouldSerializeIndAltoDesemp() + { + return IndAltoDesemp == MDFeIndAltoDesemp.AltoDesempenho; + } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfPercurso.cs b/MDFe.Classes/Informacoes/MDFeInfPercurso.cs old mode 100755 new mode 100644 index 735796666..b3c5199f7 --- a/MDFe.Classes/Informacoes/MDFeInfPercurso.cs +++ b/MDFe.Classes/Informacoes/MDFeInfPercurso.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Xml.Serialization; using DFe.Classes.Entidades; using DFe.Classes.Extensoes; @@ -45,14 +46,13 @@ public class MDFeInfPercurso public Estado UFPer { get; set; } /// - /// Proxy para UFPer + /// Proxy para sigla das Unidades da Federação do percurso do veículo /// [XmlElement(ElementName = "UFPer")] - public string ProxyUFPer { + public string ProxyUFPer + { get { return UFPer.GetSiglaUfString(); } set { UFPer = UFPer.SiglaParaEstado(value); } } - - } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfPrazo.cs b/MDFe.Classes/Informacoes/MDFeInfPrazo.cs new file mode 100644 index 000000000..7974a2e8d --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfPrazo.cs @@ -0,0 +1,83 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; +using DFe.Classes; +using DFe.Utils; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfPrazo + { + [XmlIgnore] + private short _nParcela { get; set; } + + /// + /// 1 - Número da parcela. + /// + [XmlElement("nParcela")] + public string NParcelaProxy + { + get { return _nParcela.ToString("D3"); } + set { _nParcela = short.Parse(value); } + } + + [XmlIgnore] + private DateTime _dVenc { get; set; } + + /// + /// Proxy para Data de Vencimento da parcela. + /// + [XmlElement("dVenc")] + public string DVencProxy + { + get { return _dVenc.ParaDataString(); } + set { _dVenc = DateTime.Parse(value); } + } + + [XmlIgnore] + private decimal _vParcela { get; set; } + + /// + /// 1 - Valor da parcela. + /// + [XmlElement("vParcela")] + public decimal VParcelaProxy + { + get { return _vParcela.Arredondar(2); } + set { _vParcela = value.Arredondar(2); } + } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfRespTec.cs b/MDFe.Classes/Informacoes/MDFeInfRespTec.cs new file mode 100644 index 000000000..6251f3df7 --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfRespTec.cs @@ -0,0 +1,90 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + public class MDFeInfRespTec + { + /// + /// 2 - CNPJ da pessoa jurídica responsável técnica pelo sistema + /// utilizado na emissão do documento fiscal eletrônico + /// + [XmlElement(ElementName = "CNPJ")] + public string CNPJ { get; set; } + + /// + /// 2 - Nome da pessoa a ser contatada + /// + [XmlElement(ElementName = "xContato")] + public string XContato { get; set; } + + /// + /// 2 - E-mail da pessoa jurídica a ser contatada + /// + [XmlElement(ElementName = "email")] + public string Email { get; set; } + + /// + /// 2 - Telefone da pessoa jurídica a ser contatada + /// + [XmlElement(ElementName = "fone")] + public string Fone { get; set; } + + [XmlIgnore] + private int? IdCSRT { get; set; } + + public bool IdCSRTSpecified + { + get { return IdCSRT.HasValue; } + } + + /// + /// 2 - Identificador do código de segurança do responsável técnico + /// + [XmlElement(ElementName = "idCSRT")] + public string ProxyIdCSRT + { + get { return IdCSRT != null ? IdCSRT.Value.ToString("D3") : null; } + set { IdCSRT = int.Parse(value); } + } + + /// + /// 2 - Hash do token do código de segurança do responsável técnico + /// + [XmlElement(ElementName = "hashCSRT")] + public string HashCSRT { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeInfTermCarreg.cs b/MDFe.Classes/Informacoes/MDFeInfTermCarreg.cs old mode 100755 new mode 100644 index 1c876c2a9..2c9c9d898 --- a/MDFe.Classes/Informacoes/MDFeInfTermCarreg.cs +++ b/MDFe.Classes/Informacoes/MDFeInfTermCarreg.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfTermDescarreg.cs b/MDFe.Classes/Informacoes/MDFeInfTermDescarreg.cs old mode 100755 new mode 100644 index 650402c83..ec9044ab0 --- a/MDFe.Classes/Informacoes/MDFeInfTermDescarreg.cs +++ b/MDFe.Classes/Informacoes/MDFeInfTermDescarreg.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfUnidCarga.cs b/MDFe.Classes/Informacoes/MDFeInfUnidCarga.cs old mode 100755 new mode 100644 index b98218d3a..1c6b4d215 --- a/MDFe.Classes/Informacoes/MDFeInfUnidCarga.cs +++ b/MDFe.Classes/Informacoes/MDFeInfUnidCarga.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfUnidCargaVazia.cs b/MDFe.Classes/Informacoes/MDFeInfUnidCargaVazia.cs old mode 100755 new mode 100644 index cf36498c3..053da34e4 --- a/MDFe.Classes/Informacoes/MDFeInfUnidCargaVazia.cs +++ b/MDFe.Classes/Informacoes/MDFeInfUnidCargaVazia.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Xml.Serialization; using MDFe.Classes.Flags; diff --git a/MDFe.Classes/Informacoes/MDFeInfUnidTransp.cs b/MDFe.Classes/Informacoes/MDFeInfUnidTransp.cs old mode 100755 new mode 100644 index 9287d5dd6..f662c24ae --- a/MDFe.Classes/Informacoes/MDFeInfUnidTransp.cs +++ b/MDFe.Classes/Informacoes/MDFeInfUnidTransp.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeInfViagens.cs b/MDFe.Classes/Informacoes/MDFeInfViagens.cs new file mode 100644 index 000000000..7b7497d4e --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeInfViagens.cs @@ -0,0 +1,68 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; +using System; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeInfViagens + { + [XmlIgnore] + private int _qtdViagens { get; set; } + + /// + /// 2 - Proxy para quantidade total de viagens realizadas com o pagamento do frete. + /// + [XmlElement("qtdViagens")] + public string QtdViagensProxy + { + get { return _qtdViagens.ToString("D5"); } + set { _qtdViagens = int.Parse(value); } + } + + [XmlIgnore] + private int _nroViagem { get; set; } + + /// + /// 2 - Proxy para número de referência da viagem do MDF-e referenciado. + /// + [XmlElement("nroViagem")] + public string NroViagemProxy + { + get { return _nroViagem.ToString("D5"); } + set { _nroViagem = int.Parse(value); } + } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeLacUnidCarga.cs b/MDFe.Classes/Informacoes/MDFeLacUnidCarga.cs old mode 100755 new mode 100644 index 2ead7e9c8..6a8f591fc --- a/MDFe.Classes/Informacoes/MDFeLacUnidCarga.cs +++ b/MDFe.Classes/Informacoes/MDFeLacUnidCarga.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeLacUnidTransp.cs b/MDFe.Classes/Informacoes/MDFeLacUnidTransp.cs old mode 100755 new mode 100644 index 9e09d0b20..d51d79411 --- a/MDFe.Classes/Informacoes/MDFeLacUnidTransp.cs +++ b/MDFe.Classes/Informacoes/MDFeLacUnidTransp.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeLacre.cs b/MDFe.Classes/Informacoes/MDFeLacre.cs old mode 100755 new mode 100644 index f422b0199..28c7057bc --- a/MDFe.Classes/Informacoes/MDFeLacre.cs +++ b/MDFe.Classes/Informacoes/MDFeLacre.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; diff --git a/MDFe.Classes/Informacoes/MDFeProdPred.cs b/MDFe.Classes/Informacoes/MDFeProdPred.cs new file mode 100644 index 000000000..aa02fe6ca --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeProdPred.cs @@ -0,0 +1,74 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; +using MDFe.Classes.Flags; + +namespace MDFe.Classes.Informacoes +{ + [Serializable] + public class MDFeProdPred + { + /// + /// 1 - Tipo da Carga. + /// Conforme Rosulação ANTT + /// + [XmlElement(ElementName = "tpCarga")] + public MDFeTpCarga TpCarga { get; set; } + + /// + /// 1 - Descrição do produto predominante. + /// + [XmlElement(ElementName = "xProd")] + public string XProd { get; set; } + + /// + /// 1- GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras. + /// + [XmlElement(ElementName = "cEAN")] + public string CEan { get; set; } + + /// + /// 1 - Código NCM + /// + [XmlElement(ElementName = "NCM")] + public string Ncm { get; set; } + + /// + /// 1 - Informações da carga lotação. Informar somente quando MDF-e for de carga lotação + /// + [XmlElement(ElementName = "infLotacao")] + public MDFeInfLotacao InfLotacao { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeProp.cs b/MDFe.Classes/Informacoes/MDFeProp.cs old mode 100755 new mode 100644 index 9496eda9f..f1a58cae8 --- a/MDFe.Classes/Informacoes/MDFeProp.cs +++ b/MDFe.Classes/Informacoes/MDFeProp.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes.Entidades; @@ -91,7 +92,7 @@ public string ProxyUF } /// - /// 3 - Tipo Proprietário + /// 3 - Tipo Proprietário ou possuidor /// [XmlElement(ElementName = "tpProp")] public MDFeTpProp MDFeTpProp { get; set; } diff --git a/MDFe.Classes/Informacoes/MDFeRodo.cs b/MDFe.Classes/Informacoes/MDFeRodo.cs old mode 100755 new mode 100644 index 90d1a594d..5b39f5c07 --- a/MDFe.Classes/Informacoes/MDFeRodo.cs +++ b/MDFe.Classes/Informacoes/MDFeRodo.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; @@ -41,7 +42,7 @@ namespace MDFe.Classes.Informacoes public class MDFeRodo : MDFeModalContainer { [XmlElement(ElementName = "infANTT")] - public MDFeInfANTT infANTT { get; set; } + public MDFeInfANTT InfANTT { get; set; } /// /// 1 - Registro Nacional de Transportadores Rodoviários de Carga @@ -79,25 +80,10 @@ public class MDFeRodo : MDFeModalContainer [XmlElement(ElementName = "codAgPorto")] public string CodAgPorto { get; set; } + /// + /// 1 - Lacres + /// [XmlElement(ElementName = "lacRodo")] - public List lacRodo { get; set; } - } - - [Serializable] - public class MDFeInfANTT - { - [XmlElement(ElementName = "RNTRC")] - public string RNTRC { get; set; } - - [XmlElement(ElementName = "infCIOT")] - public List infCIOT { get; set; } - - public MDFeValePed valePed { get; set; } - - [XmlElement(ElementName = "infContratante")] - public List infContratante { get; set; } - - [XmlElement(ElementName = "infPag")] - public List infPag { get; set; } + public List LacRodo { get; set; } } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeTot.cs b/MDFe.Classes/Informacoes/MDFeTot.cs old mode 100755 new mode 100644 index 6af9c9813..f5d89b0bc --- a/MDFe.Classes/Informacoes/MDFeTot.cs +++ b/MDFe.Classes/Informacoes/MDFeTot.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes; diff --git a/MDFe.Classes/Informacoes/MDFeTpValePed.cs b/MDFe.Classes/Informacoes/MDFeTpValePed.cs new file mode 100644 index 000000000..eb65b16ae --- /dev/null +++ b/MDFe.Classes/Informacoes/MDFeTpValePed.cs @@ -0,0 +1,52 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace MDFe.Classes.Informacoes +{ + public enum MDFeTpValePed + { + [XmlEnum("01")] + Tag = 01, + + [XmlEnum("02")] + Cupom = 02, + + [XmlEnum("03")] + Cartao = 03, + + [XmlEnum("04")] + LeituraDePlaca = 04 + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeTrem.cs b/MDFe.Classes/Informacoes/MDFeTrem.cs old mode 100755 new mode 100644 index 830e13241..7195c1099 --- a/MDFe.Classes/Informacoes/MDFeTrem.cs +++ b/MDFe.Classes/Informacoes/MDFeTrem.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Utils; diff --git a/MDFe.Classes/Informacoes/MDFeVag.cs b/MDFe.Classes/Informacoes/MDFeVag.cs old mode 100755 new mode 100644 index 16333678e..3b6e87196 --- a/MDFe.Classes/Informacoes/MDFeVag.cs +++ b/MDFe.Classes/Informacoes/MDFeVag.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes; diff --git a/MDFe.Classes/Informacoes/MDFeValePed.cs b/MDFe.Classes/Informacoes/MDFeValePed.cs old mode 100755 new mode 100644 index acdae4a6b..2687d82d7 --- a/MDFe.Classes/Informacoes/MDFeValePed.cs +++ b/MDFe.Classes/Informacoes/MDFeValePed.cs @@ -30,9 +30,11 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; +using MDFe.Classes.Flags; namespace MDFe.Classes.Informacoes { @@ -44,5 +46,16 @@ public class MDFeValePed /// [XmlElement(ElementName = "disp")] public List Disp { get; set; } + + /// + /// 3 - Categoria de Combinação Veicular + /// + [XmlElement(ElementName = "categCombVeic", IsNullable = true)] + public MDFeCategCombVeic? CategCombVeic { get; set; } + + public bool CategCombVeicSpecified => CategCombVeic.HasValue; + + public bool ShouldSerializeCategCombVeic() => CategCombVeicSpecified; + } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeVeicReboque.cs b/MDFe.Classes/Informacoes/MDFeVeicReboque.cs old mode 100755 new mode 100644 index 30a39eb5c..b930cb80e --- a/MDFe.Classes/Informacoes/MDFeVeicReboque.cs +++ b/MDFe.Classes/Informacoes/MDFeVeicReboque.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes.Entidades; @@ -87,16 +88,26 @@ public class MDFeVeicReboque public MDFeTpCar TpCar { get; set; } [XmlIgnore] - public Estado UF { get; set; } + public Estado? UF { get; set; } [XmlElement(ElementName = "UF")] public string ProxyUF { get { - return UF.GetSiglaUfString(); + return UF.HasValue ? UF.Value.GetSiglaUfString() : null; + } + set + { + if (!string.IsNullOrEmpty(value)) + UF = new Estado().SiglaParaEstado(value); + else + UF = null; } - set { UF = UF.SiglaParaEstado(value); } } + + public bool TaraSpecified { get { return Tara.HasValue; } } + public bool CapKGSpecified { get { return CapKG.HasValue; } } + public bool CapM3Specified { get { return CapM3.HasValue; } } } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MDFeVeicTracao.cs b/MDFe.Classes/Informacoes/MDFeVeicTracao.cs old mode 100755 new mode 100644 index 53de797e0..ddb570534 --- a/MDFe.Classes/Informacoes/MDFeVeicTracao.cs +++ b/MDFe.Classes/Informacoes/MDFeVeicTracao.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Collections.Generic; using System.Xml.Serialization; @@ -79,7 +80,7 @@ public class MDFeVeicTracao public int? CapM3 { get; set; } /// - /// 2 - Proprietários do Veículo. Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e + /// 2 - Proprietário ou possuidor do Veículo. Só preenchido quando o veículo não pertencer à empresa emitente do MDF-e /// [XmlElement(ElementName = "prop")] public MDFeProp Prop { get; set; } @@ -103,10 +104,10 @@ public class MDFeVeicTracao public MDFeTpCar TpCar { get; set; } /// - /// 2 - UF em que veículo está licenciado + /// 3 - UF em que veículo está licenciado /// [XmlIgnore] - public Estado UF { get; set; } + public Estado? UF { get; set; } /// /// Proxy para obter a sigla uf @@ -116,12 +117,19 @@ public string ProxyUF { get { - return UF.GetSiglaUfString(); + return UF.HasValue ? UF.Value.GetSiglaUfString() : null; + } + set + { + if (!string.IsNullOrEmpty(value)) + UF = new Estado().SiglaParaEstado(value); + else + UF = null; } - set { UF = UF.SiglaParaEstado(value); } } public bool CapKGSpecified { get { return CapKG.HasValue; } } public bool CapM3Specified { get { return CapM3.HasValue; } } + public bool TaraSpecified { get { return Tara.HasValue; } } } } \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/MdfeInfMDFeSupl.cs b/MDFe.Classes/Informacoes/MdfeInfMDFeSupl.cs new file mode 100644 index 000000000..d714f4200 --- /dev/null +++ b/MDFe.Classes/Informacoes/MdfeInfMDFeSupl.cs @@ -0,0 +1,54 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Text; +using System.Xml.Serialization; +using DFe.Classes.Flags; + +namespace MDFe.Classes.Informacoes +{ + public class MdfeInfMDFeSupl + { + /// + /// 1 - Texto com o QR-Code para consulta do MDF-e + /// + [XmlElement(ElementName = "qrCodMDFe")] + public string QrCodMDFe { get; set; } + + public static string GerarQrCode(string chave, TipoAmbiente tipoAmbiente) + { + var qrCode = new StringBuilder(@"https://dfe-portal.svrs.rs.gov.br/mdfe/qrCode"); + return qrCode.Append("?").Append("chMDFe=").Append(chave).Append("&").Append("tpAmb=").Append((int)tipoAmbiente).ToString(); + } + } +} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/RetRecepcao/MDFeConsReciMDFe.cs b/MDFe.Classes/Informacoes/RetRecepcao/MDFeConsReciMDFe.cs old mode 100755 new mode 100644 index ca6b09ad9..53ea62dd5 --- a/MDFe.Classes/Informacoes/RetRecepcao/MDFeConsReciMDFe.cs +++ b/MDFe.Classes/Informacoes/RetRecepcao/MDFeConsReciMDFe.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes.Flags; diff --git a/MDFe.Classes/Informacoes/StatusServico/MDFeConsStatServMDFe.cs b/MDFe.Classes/Informacoes/StatusServico/MDFeConsStatServMDFe.cs old mode 100755 new mode 100644 index 68d59015d..719abd940 --- a/MDFe.Classes/Informacoes/StatusServico/MDFeConsStatServMDFe.cs +++ b/MDFe.Classes/Informacoes/StatusServico/MDFeConsStatServMDFe.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes.Flags; diff --git a/MDFe.Classes/Informacoes/indPag.cs b/MDFe.Classes/Informacoes/indPag.cs deleted file mode 100644 index 22b9f3502..000000000 --- a/MDFe.Classes/Informacoes/indPag.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - public enum indPag - { - [XmlEnum("0")] - PagamentoAVista = 0, - - [XmlEnum("1")] - PagamentoAPrazo = 1 - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infBanc.cs b/MDFe.Classes/Informacoes/infBanc.cs deleted file mode 100644 index 80472a474..000000000 --- a/MDFe.Classes/Informacoes/infBanc.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class infBanc - { - public string codBanco { get; set; } - public string codAgencia { get; set; } - public string CNPJIPEF { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infContratante.cs b/MDFe.Classes/Informacoes/infContratante.cs deleted file mode 100644 index 7a71f9962..000000000 --- a/MDFe.Classes/Informacoes/infContratante.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MDFe.Classes.Informacoes -{ - public class infContratante - { - public string xNome { get; set; } - public string CPF { get; set; } - public string CNPJ { get; set; } - public string idEstrangeiro { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infEntregaParcial.cs b/MDFe.Classes/Informacoes/infEntregaParcial.cs deleted file mode 100644 index 6864c8b42..000000000 --- a/MDFe.Classes/Informacoes/infEntregaParcial.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MDFe.Classes.Informacoes -{ - public class infEntregaParcial - { - public decimal qtdTotal { get; set; } - - public decimal qtdParcial { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infLocalCarrega.cs b/MDFe.Classes/Informacoes/infLocalCarrega.cs deleted file mode 100644 index 06bc77ad1..000000000 --- a/MDFe.Classes/Informacoes/infLocalCarrega.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class infLocalCarrega - { - public string CEP { get; set; } - - [XmlIgnore] - public decimal? latitude { get; set; } - - [XmlElement("latitude")] - public string latitudeProxy - { - get - { - if (latitude == null) return null; - return latitude.ToString(); - } - set { latitude = decimal.Parse(value); } - } - - [XmlIgnore] - public decimal? Longitude { get; set; } - - [XmlElement("Longitude")] - public string LongitudeProxy - { - get - { - if (Longitude == null) return null; - return Longitude.ToString(); - } - set { Longitude = decimal.Parse(value); } - } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infLocalDescarrega.cs b/MDFe.Classes/Informacoes/infLocalDescarrega.cs deleted file mode 100644 index 9f551140d..000000000 --- a/MDFe.Classes/Informacoes/infLocalDescarrega.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class infLocalDescarrega - { - public string CEP { get; set; } - - [XmlIgnore] - public decimal? latitude { get; set; } - - [XmlElement("latitude")] - public string latitudeProxy - { - get - { - if (latitude == null) return null; - return latitude.ToString(); - } - set { latitude = decimal.Parse(value); } - } - - [XmlIgnore] - public decimal? Longitude { get; set; } - - [XmlElement("Longitude")] - public string LongitudeProxy - { - get - { - if (Longitude == null) return null; - return Longitude.ToString(); - } - set { Longitude = decimal.Parse(value); } - } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infLotacao.cs b/MDFe.Classes/Informacoes/infLotacao.cs deleted file mode 100644 index df5f77d05..000000000 --- a/MDFe.Classes/Informacoes/infLotacao.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class infLotacao - { - public infLocalCarrega infLocalCarrega { get; set; } - - public infLocalDescarrega infLocalDescarrega { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infMDFeSupl.cs b/MDFe.Classes/Informacoes/infMDFeSupl.cs deleted file mode 100644 index 7be54e4aa..000000000 --- a/MDFe.Classes/Informacoes/infMDFeSupl.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MDFe.Classes.Informacoes -{ - public class infMDFeSupl - { - public string qrCodMDFe { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infPag.cs b/MDFe.Classes/Informacoes/infPag.cs deleted file mode 100644 index 254df6b9e..000000000 --- a/MDFe.Classes/Informacoes/infPag.cs +++ /dev/null @@ -1,36 +0,0 @@ -using DFe.Classes; -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class infPag - { - public string xNome { get; set; } - public string CPF { get; set; } - public string CNPJ { get; set; } - public string idEstrangeiro { get; set; } - - [XmlElement(ElementName = "Comp")] - public List Comp { get; set; } - - [XmlIgnore] - public decimal vContrato { get; set; } - - [XmlElement("vContrato")] - public decimal vContratoProxy - { - get { return vContrato.Arredondar(2); } - set { vContrato = value.Arredondar(2); } - } - - public indPag indPag { get; set; } - - [XmlElement(ElementName = "infPrazo")] - public List infPrazo { get; set; } - - public infBanc infBanc { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infPrazo.cs b/MDFe.Classes/Informacoes/infPrazo.cs deleted file mode 100644 index 6278fcfc4..000000000 --- a/MDFe.Classes/Informacoes/infPrazo.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Xml.Serialization; -using DFe.Classes; -using DFe.Utils; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class infPrazo - { - [XmlIgnore] - public short nParcela { get; set; } - - [XmlElement("nParcela")] - public string nParcelaProxy - { - get { return nParcela.ToString("D3"); } - set { nParcela = short.Parse(value); } - } - - [XmlIgnore] - public DateTime dVenc { get; set; } - - [XmlElement("dVenc")] - public string dVencProxy - { - get { return dVenc.ParaDataString(); } - set { dVenc = DateTime.Parse(value); } - } - - [XmlIgnore] - public decimal vParcela { get; set; } - - [XmlElement("vParcela")] - public decimal vParcelaProxy - { - get { return vParcela.Arredondar(2); } - set { vParcela = value.Arredondar(2); } - } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/infRespTec.cs b/MDFe.Classes/Informacoes/infRespTec.cs deleted file mode 100644 index 9138322a0..000000000 --- a/MDFe.Classes/Informacoes/infRespTec.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - public class infRespTec - { - public string CNPJ { get; set; } - public string xContato { get; set; } - public string email { get; set; } - public string fone { get; set; } - - [XmlIgnore] - public int? idCSRT { get; set; } - public bool idCSRTSpecified - { - get { return idCSRT.HasValue; } - } - - - [XmlElement(ElementName = "idCSRT")] - public string ProxyidCSRT - { - get { return idCSRT != null ? idCSRT.Value.ToString("D3") : null; } - set { idCSRT = int.Parse(value); } - } - - public string hashCSRT { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/prodPred.cs b/MDFe.Classes/Informacoes/prodPred.cs deleted file mode 100644 index 3a9003256..000000000 --- a/MDFe.Classes/Informacoes/prodPred.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; - -namespace MDFe.Classes.Informacoes -{ - [Serializable] - public class prodPred - { - public tpCarga tpCarga { get; set; } - - public string xProd { get; set; } - - public string cEAN { get; set; } - - public string NCM { get; set; } - - public infLotacao infLotacao { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/tpCarga.cs b/MDFe.Classes/Informacoes/tpCarga.cs deleted file mode 100644 index 080d96136..000000000 --- a/MDFe.Classes/Informacoes/tpCarga.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - public enum tpCarga - { - [XmlEnum("01")] - GranelSolido = 01, - - [XmlEnum("02")] - GranelLiquido = 02, - - [XmlEnum("03")] - Frigorificada = 03, - - [XmlEnum("04")] - Conteinerizada = 04, - - [XmlEnum("05")] - CargaGeral = 05, - - [XmlEnum("06")] - Neogranel = 06, - - [XmlEnum("07")] - PerigosaGranelSolido = 07, - - [XmlEnum("08")] - PerigosaGranelLiquido = 08, - - [XmlEnum("09")] - PerigosaCargaFrigorificada = 09, - - [XmlEnum("10")] - PerigosaCargaConteinerizada = 10, - - [XmlEnum("11")] - PerigosaCargaGeral = 11, - } -} \ No newline at end of file diff --git a/MDFe.Classes/Informacoes/tpComp.cs b/MDFe.Classes/Informacoes/tpComp.cs deleted file mode 100644 index a1d20bd47..000000000 --- a/MDFe.Classes/Informacoes/tpComp.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Xml.Serialization; - -namespace MDFe.Classes.Informacoes -{ - public enum tpComp - { - [XmlEnum("01")] - ValePedagio = 01, - - [XmlEnum("02")] - ImpostosTaxasEContribuicoes = 02, - - [XmlEnum("03")] - DespesasBancariasEmiosDePagamentoOutras = 03, - - [XmlEnum("99")] - Outros = 99 - } -} \ No newline at end of file diff --git a/MDFe.Classes/MDFe.Classes.csproj b/MDFe.Classes/MDFe.Classes.csproj index 5d04bbe9c..8869b4349 100755 --- a/MDFe.Classes/MDFe.Classes.csproj +++ b/MDFe.Classes/MDFe.Classes.csproj @@ -1,184 +1,12 @@ - - - + + - Debug - AnyCPU - {9794CB98-4691-4218-A127-C573C2E7FF83} - Library - Properties - MDFe.Classes - MDFe.Classes - v4.5 - 512 - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} - DFe.Classes - - - {b4e1a7a6-5d66-4326-8a8d-39338e6fc84c} - DFe.Utils - - - {9C0678EB-78F2-49C6-91BF-38148FC37FBB} - MDFe.Utils - + - - - - \ No newline at end of file + + diff --git a/MDFe.Classes/MDFe.Classes.csproj.DotSettings b/MDFe.Classes/MDFe.Classes.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/MDFe.Classes/MDFe.Classes.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/MDFe.Classes/Properties/AssemblyInfo.cs b/MDFe.Classes/Properties/AssemblyInfo.cs deleted file mode 100755 index 351b771d3..000000000 --- a/MDFe.Classes/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MDFe.Classes")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MDFe.Classes")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9794cb98-4691-4218-a127-c573c2e7ff83")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/MDFe.Classes/Retorno/MDFeConsultaNaoEncerrado/MDFeRetConsMDFeNao.cs b/MDFe.Classes/Retorno/MDFeConsultaNaoEncerrado/MDFeRetConsMDFeNao.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeConsultaProtocolo/MDFeRetConsSitMDFe.cs b/MDFe.Classes/Retorno/MDFeConsultaProtocolo/MDFeRetConsSitMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeEvento/MDFeRetEventoMDFe.cs b/MDFe.Classes/Retorno/MDFeEvento/MDFeRetEventoMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeEvento/MDFeRetInfEvento.cs b/MDFe.Classes/Retorno/MDFeEvento/MDFeRetInfEvento.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeProcEventoMDFe.cs b/MDFe.Classes/Retorno/MDFeProcEventoMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeProcMDFe.cs b/MDFe.Classes/Retorno/MDFeProcMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeRecepcao/MDFeRetEnviMDFe.cs b/MDFe.Classes/Retorno/MDFeRecepcao/MDFeRetEnviMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeInfProtMDFe.cs b/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeInfProtMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeProtMDFe.cs b/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeProtMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeRetConsReciMDFe.cs b/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeRetConsReciMDFe.cs old mode 100755 new mode 100644 index e3a61c2bd..7c3a5186c --- a/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeRetConsReciMDFe.cs +++ b/MDFe.Classes/Retorno/MDFeRetRecepcao/MDFeRetConsReciMDFe.cs @@ -30,6 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Xml.Serialization; using DFe.Classes.Entidades; @@ -77,7 +78,7 @@ public string CUFProxy } [XmlElement(ElementName = "protMDFe")] - public MDFeProtMDFe ProtMdFe { get; set; } + public MDFeProtMDFe ProtMDFe { get; set; } public static MDFeRetConsReciMDFe LoadXml(string xml) { diff --git a/MDFe.Classes/Retorno/MDFeRetRecepcao/Sincrono/MDFeRetMDFe.cs b/MDFe.Classes/Retorno/MDFeRetRecepcao/Sincrono/MDFeRetMDFe.cs new file mode 100644 index 000000000..8aeca30d8 --- /dev/null +++ b/MDFe.Classes/Retorno/MDFeRetRecepcao/Sincrono/MDFeRetMDFe.cs @@ -0,0 +1,64 @@ +using DFe.Classes.Entidades; +using DFe.Classes.Extensoes; +using DFe.Classes.Flags; +using DFe.Utils; +using System; +using System.Xml.Serialization; + +namespace MDFe.Classes.Retorno.MDFeRetRecepcao.Sincrono +{ + [Serializable] + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/mdfe", + ElementName = "retMDFe")] + public class MDFeRetMDFe: RetornoBase + { + [XmlAttribute(AttributeName = "versao")] + public string Versao { get; set; } + + [XmlElement(ElementName = "tpAmb")] + public TipoAmbiente TpAmb { get; set; } + + [XmlElement(ElementName = "verAplic")] + public string VerAplic { get; set; } + + [XmlElement(ElementName = "nRec")] + public string NRec { get; set; } + + [XmlElement(ElementName = "cStat")] + public short CStat { get; set; } + + [XmlElement(ElementName = "xMotivo")] + public string XMotivo { get; set; } + + [XmlIgnore] + public Estado CUF { get; set; } + + [XmlElement(ElementName = "cUF")] + public string CUFProxy + { + get + { + return CUF.GetCodigoIbgeEmString(); + } + set { CUF = CUF.CodigoIbgeParaEstado(value); } + } + + [XmlElement(ElementName = "protMDFe")] + public MDFeProtMDFe ProtMdFe { get; set; } + + public static MDFeRetMDFe LoadXml(string xml) + { + var retorno = FuncoesXml.XmlStringParaClasse(xml); + retorno.RetornoXmlString = xml; + + return retorno; + } + public static MDFeRetMDFe LoadXml(string xml, Informacoes.MDFe mdfe) + { + var retorno = LoadXml(xml); + retorno.EnvioXmlString = FuncoesXml.ClasseParaXmlString(mdfe); + + return retorno; + } + } +} diff --git a/MDFe.Classes/Retorno/MDFeStatusServico/MDFeRetConsStatServ.cs b/MDFe.Classes/Retorno/MDFeStatusServico/MDFeRetConsStatServ.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Retorno/RetornoBase.cs b/MDFe.Classes/Retorno/RetornoBase.cs old mode 100755 new mode 100644 diff --git a/MDFe.Classes/Servicos/Autorizacao/MDFeEnviMDFe.cs b/MDFe.Classes/Servicos/Autorizacao/MDFeEnviMDFe.cs old mode 100755 new mode 100644 diff --git a/MDFe.Damdfe.AppTeste/App.config b/MDFe.Damdfe.AppTeste/App.config index d1428ad71..4bfa00561 100755 --- a/MDFe.Damdfe.AppTeste/App.config +++ b/MDFe.Damdfe.AppTeste/App.config @@ -1,6 +1,6 @@ - + diff --git a/MDFe.Damdfe.AppTeste/MDFe.Damdfe.AppTeste.csproj b/MDFe.Damdfe.AppTeste/MDFe.Damdfe.AppTeste.csproj index 5544150dc..8362b80b5 100755 --- a/MDFe.Damdfe.AppTeste/MDFe.Damdfe.AppTeste.csproj +++ b/MDFe.Damdfe.AppTeste/MDFe.Damdfe.AppTeste.csproj @@ -9,7 +9,7 @@ Properties MDFe.Damdfe.AppTeste MDFe.Damdfe.AppTeste - v4.5 + v4.8 512 true @@ -55,7 +55,6 @@ Form1.cs - Form1.cs @@ -84,11 +83,11 @@ - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} + {97f3c222-fd10-488a-812b-e514c3a8863c} DFe.Utils - {9794CB98-4691-4218-A127-C573C2E7FF83} + {436a0bcb-3866-4969-a129-cfa03c194e1f} MDFe.Classes @@ -96,7 +95,7 @@ MDFe.Damdfe.Base - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A} + {b16beabd-ccc2-4779-bcae-3f55c43c98ac} MDFe.Damdfe.Fast diff --git a/MDFe.Damdfe.AppTeste/Properties/AssemblyInfo.cs b/MDFe.Damdfe.AppTeste/Properties/AssemblyInfo.cs deleted file mode 100755 index 447916baf..000000000 --- a/MDFe.Damdfe.AppTeste/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MDFe.Damdfe.AppTeste")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MDFe.Damdfe.AppTeste")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e34320d9-c822-41cf-b11d-c4b64001748b")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/MDFe.Damdfe.AppTeste/Properties/Resources.Designer.cs b/MDFe.Damdfe.AppTeste/Properties/Resources.Designer.cs index 59d10553c..d66daedc7 100755 --- a/MDFe.Damdfe.AppTeste/Properties/Resources.Designer.cs +++ b/MDFe.Damdfe.AppTeste/Properties/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// O código foi gerado por uma ferramenta. +// Versão de Tempo de Execução:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se +// o código for gerado novamente. // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace MDFe.Damdfe.AppTeste.Properties { /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// Uma classe de recurso de tipo de alta segurança, para pesquisar cadeias de caracteres localizadas etc. /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + // Essa classe foi gerada automaticamente pela classe StronglyTypedResourceBuilder + // através de uma ferramenta como ResGen ou Visual Studio. + // Para adicionar ou remover um associado, edite o arquivo .ResX e execute ResGen novamente + // com a opção /str, ou recrie o projeto do VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -33,7 +33,7 @@ internal Resources() { } /// - /// Returns the cached ResourceManager instance used by this class. + /// Retorna a instância de ResourceManager armazenada em cache usada por essa classe. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resources() { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// Substitui a propriedade CurrentUICulture do thread atual para todas as + /// pesquisas de recursos que usam essa classe de recurso de tipo de alta segurança. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { diff --git a/MDFe.Damdfe.AppTeste/Properties/Settings.Designer.cs b/MDFe.Damdfe.AppTeste/Properties/Settings.Designer.cs index bfa4d2b3d..103fb593e 100755 --- a/MDFe.Damdfe.AppTeste/Properties/Settings.Designer.cs +++ b/MDFe.Damdfe.AppTeste/Properties/Settings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// O código foi gerado por uma ferramenta. +// Versão de Tempo de Execução:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se +// o código for gerado novamente. // //------------------------------------------------------------------------------ @@ -12,7 +12,7 @@ namespace MDFe.Damdfe.AppTeste.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/MDFe.Damdfe.Base/ConfiguracaoDamdfe.cs b/MDFe.Damdfe.Base/ConfiguracaoDamdfe.cs index 13796047c..78843daaf 100755 --- a/MDFe.Damdfe.Base/ConfiguracaoDamdfe.cs +++ b/MDFe.Damdfe.Base/ConfiguracaoDamdfe.cs @@ -40,12 +40,36 @@ public class ConfiguracaoDamdfe { public ConfiguracaoDamdfe() { - this.Logomarca = null; - this.DocumentoCancelado = false; - this.DocumentoEncerrado = false; - this.QuebrarLinhasObservacao = false; + Logomarca = null; + DocumentoCancelado = false; + DocumentoEncerrado = false; + QuebrarLinhasObservacao = false; + MargemDireita = 6; + MargemEsquerda = 6; + MargemSuperior = 8; + MargemInferior = 8; } + /// + /// Margem direita da página em MM + /// + public float MargemDireita { get; set; } + + /// + /// Margem esquerda da página em MM + /// + public float MargemEsquerda { get; set; } + + /// + /// Margem superior da página em MM + /// + public float MargemSuperior { get; set; } + + /// + /// Margem inferior da página em MM + /// + public float MargemInferior { get; set; } + /// /// Logomarca do emitente a ser impressa no DAMDFe do MDFe /// @@ -83,5 +107,18 @@ public Image ObterLogo() var image = Image.FromStream(ms); return image; } + + /// + /// Retorna um objeto do tipo MemoryStream a partir da logo armazenada na propriedade Logomarca + /// + /// + public MemoryStream ObterLogoMemory() + { + if (Logomarca == null) + return new MemoryStream(); + var ms = new MemoryStream(Logomarca); + + return ms; + } } } \ No newline at end of file diff --git a/MDFe.Damdfe.Base/MDFe.Damdfe.Base.csproj b/MDFe.Damdfe.Base/MDFe.Damdfe.Base.csproj index 966a0d84d..3492e9013 100755 --- a/MDFe.Damdfe.Base/MDFe.Damdfe.Base.csproj +++ b/MDFe.Damdfe.Base/MDFe.Damdfe.Base.csproj @@ -1,57 +1,24 @@ - - - + + - Debug - AnyCPU - {2419900B-1E90-4181-9338-3E84237C3B00} - Library - Properties - MDFe.Damdfe.Base - MDFe.Damdfe.Base - v4.5 - 512 - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + 6.0.0 + + + + + + + + + + Always + + + + diff --git a/MDFe.Damdfe.Base/MDFe.Damdfe.Base.csproj.DotSettings b/MDFe.Damdfe.Base/MDFe.Damdfe.Base.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/MDFe.Damdfe.Base/MDFe.Damdfe.Base.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/MDFe.Damdfe.Base/MDFe/MDFeRetrato.frx b/MDFe.Damdfe.Base/MDFe/MDFeRetrato.frx new file mode 100644 index 000000000..42c85e14a --- /dev/null +++ b/MDFe.Damdfe.Base/MDFe/MDFeRetrato.frx @@ -0,0 +1,801 @@ + + + using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using System.Text.RegularExpressions; + +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; + +using DFe.Classes.Flags; +using DFe.Classes.Entidades; +using MDFe.Classes.Informacoes; +using MDFe.Classes.Flags; +using MDFe.Utils.Flags; + +using VersaoServico = MDFe.Utils.Flags.VersaoServico; + +namespace FastReport +{ + public class ReportScript + { + private void Page1_StartPage(object sender, EventArgs e) + { + Overlay1.Height = 945f; + + Overlay1.Visible = ((TipoAmbiente)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Ide.TpAmb")) == TipoAmbiente.Homologacao; + } + + private string ObterSiglaDeUF(string codigoUF) + { + Estado estado = (Estado)System.Enum.Parse(typeof(Estado), codigoUF); + return estado.ToString(); + } + + private string FormatarCampo(long valor, char format) + { + return FormatarCampo(valor.ToString(), format); + } + + private string FormatarCampo(string valor, char format) + { + if (valor == null) return string.Empty; + + switch (format) + { + case 'c': //CEP + if (valor.Length == 8) + valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); + break; + case 'f': //Telefone /celular + if (valor.Length == 10) + valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); + else if (valor.Length == 11) + valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); + break; + case 'd': //cpf / cnpj + if (valor.Length == 11) + valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); + else if (valor.Length == 14) + valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); + break; + case 'p': + if (valor.Length == 7) + valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); + break; + case 'z': + var chaveFormatada = ""; + for (int i = 0; i < valor.Length; i += 4) + chaveFormatada = chaveFormatada + valor.Substring(i, 4) + " "; + valor = chaveFormatada; + break; + } + return valor; + } + + private int? qtdeCTe = 0; + private int? qtdeNFe = 0; + private int? qtdeMDFe = 0; + + private void PageHeader1_BeforePrint(object sender, EventArgs e) + { + var chave = Substring((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Id"), 4); + if (!string.IsNullOrEmpty(chave) & chave.Length == 44) + { + var chaveFormatada = ""; + for (int i = 0; i < chave.Length; i += 4) + chaveFormatada = chaveFormatada + chave.Substring(i, 4) + " "; + txtChaveMDFe.Text = chaveFormatada; + } + + bool versao300 = (VersaoServico)Report.GetColumnValue("MDFeProcMDFe.Versao") == VersaoServico.Versao300; + + if (versao300) + { + var infSupl = ((MdfeInfMDFeSupl)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFeSupl")); + Barcode1.Visible = false; + + if (infSupl != null) + { + Barcode1.Visible = true; + } + } + + BarcodeChave.Text = chave; + + //Veiculos e Reboques + txtPlaca.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Placa")); + + txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Prop.RNTRC")); + if ( string.IsNullOrEmpty(txtRntrc.Text) ) + { + if (versao300) + txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.RNTRC")); + else + txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.RNTRC")); + } + + var veic = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque"); + veic.Init(); + while (veic.HasMoreRows) + { + //txtPlaca.Text += Environment.NewLine + ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque.Placa")); + txtPlaca.Text += ((String)Report.GetParameterValue("NewLine")) + ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque.Placa")); + string rntrc = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque.Prop.RNTRC")); + if ( string.IsNullOrEmpty(rntrc) ) + rntrc = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.RNTRC")); + txtRntrc.Text += ((String)Report.GetParameterValue("NewLine")) + rntrc; + + veic.Next(); + } + + //Condutores + txtCpf.Text = ""; + txtNome.Text = ""; + var moto = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor"); + moto.Init(); + while (moto.HasMoreRows) + { + txtCpf.Text += FormatarCampo((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor.CPF"), 'd') + ((String)Report.GetParameterValue("NewLine")); + txtNome.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor.XNome")) + ((String)Report.GetParameterValue("NewLine")); + moto.Next(); + } + + DefinirDocumentosFiscais(); + + //Vales Pedágio + txtCnpjResp.Text = ""; + txtCnpjFornec.Text = ""; + txtNumComprovante.Text = ""; + var vale = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp"); + vale.Init(); + while (vale.HasMoreRows) + { + txtCnpjResp.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.CNPJPg")), 'd') + ((String)Report.GetParameterValue("NewLine")); + txtCnpjFornec.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.CNPJForn")), 'd') + ((String)Report.GetParameterValue("NewLine")); + txtNumComprovante.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.NCompra")) + ((String)Report.GetParameterValue("NewLine")); + vale.Next(); + } + + if (versao300) + { + txtCnpjResp.Text = ""; + txtCnpjFornec.Text = ""; + txtNumComprovante.Text = ""; + var valePed = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp"); + valePed.Init(); + while (valePed.HasMoreRows) + { + + var cnpj = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.CNPJPg")); + var cpf = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.CPFPg")); + + txtCnpjResp.Text += FormatarCampo(cpf != null && cpf != string.Empty ? cpf : cnpj, 'd') + ((String)Report.GetParameterValue("NewLine")); + txtCnpjFornec.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.CNPJForn")), 'd') + ((String)Report.GetParameterValue("NewLine")); + txtNumComprovante.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.NCompra")) + ((String)Report.GetParameterValue("NewLine")); + valePed.Next(); + } + } + + //Seguros + if (versao300) + { + txtSeguroResponsavel.Text = ""; + txtSeguroSeguradora.Text = ""; + txtSeguroApolice.Text = ""; + var seguros = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.Seg"); + seguros.Init(); + while (seguros.HasMoreRows) + { + string seguradora = (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.InfSeg.XSeg"); + if (seguradora.Length > 30) + seguradora = seguradora.Substring(0,30); + + string apolice = (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.NApol"); + if (apolice.Length > 20) + apolice = apolice.Substring(0,20); + + txtSeguroResponsavel.Text += ((MDFeRespSeg)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.InfResp.RespSeg") == MDFeRespSeg.EmitenteDoMDFe ? "1 - EMITENTE" :"2 - CONTRATANTE") + ((String)Report.GetParameterValue("NewLine")); + txtSeguroSeguradora.Text += seguradora + ((String)Report.GetParameterValue("NewLine")); + txtSeguroApolice.Text += apolice + ((String)Report.GetParameterValue("NewLine")); + + seguros.Next(); + } + + txtContratantes.Text = ""; + var contratantes = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.InfANTT.InfContratante"); + contratantes.Init(); + while (contratantes.HasMoreRows) + { + var infContratante = (MDFeInfContratante)contratantes.CurrentRow; + string cnpj = infContratante.CNPJ; + string cpf = infContratante.CPF; + + txtContratantes.Text += FormatarCampo(cpf != null && cpf != string.Empty ? cpf : cnpj, 'd') + ((String)Report.GetParameterValue("NewLine")); + + contratantes.Next(); + } + } + + //Totais + qtdeCTe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QCTe")); + qtdeCTe = qtdeCTe ?? 0; + Text38.Text = qtdeCTe.ToString(); + + qtdeNFe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QNFe")); + qtdeNFe = qtdeNFe ?? 0; + Text39.Text = qtdeNFe.ToString(); + + qtdeMDFe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QMDFe")); + qtdeMDFe = qtdeMDFe ?? 0; + Text40.Text = qtdeMDFe.ToString(); + + DataDocumentoCancelado.Visible = ((Boolean)Report.GetParameterValue("DocumentoCancelado")) || ((Boolean)Report.GetParameterValue("DocumentoEncerrado")); + Text60.Text = ((Boolean)Report.GetParameterValue("DocumentoEncerrado")) ? "DOCUMENTO ENCERRADO" : "DOCUMENTO CANCELADO"; + + if ((Boolean)Report.GetParameterValue("QuebrarLinhasObservacao")) + Text57.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfAdic.InfCpl")).Replace(";",((String)Report.GetParameterValue("NewLine"))); + } + + private void DefinirDocumentosFiscais() + { + txtDocumentosFiscais.Text = ""; + var infMunDescargas = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga"); + infMunDescargas.Init(); + while(infMunDescargas.HasMoreRows){ + var uf = (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.CMunDescarga"); + uf = ObterSiglaDeUF(uf.Substring(0, 2)); + + var infNfes = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.InfNFe"); + var infCtes = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.InfCTe"); + var infMdfes = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.InfMdFeTransps"); + + infNfes.Init(); + infCtes.Init(); + infMdfes.Init(); + + if (infNfes.RowCount > 0 || infCtes.RowCount > 0 || infMdfes.RowCount > 0) + { + txtDocumentosFiscais.Text += (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.XMunDescarga") + + "/" + uf + + " - " + (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.CMunDescarga") + ((String)Report.GetParameterValue("NewLine")); + + while(infNfes.HasMoreRows){ + var chNfe = FormatarCampo((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.InfNFe.ChNFe"), 'z'); + if(chNfe != null) + txtDocumentosFiscais.Text += "NFe - " + chNfe + ((String)Report.GetParameterValue("NewLine")); + infNfes.Next(); + } + + while(infCtes.HasMoreRows){ + var chCte = FormatarCampo((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.InfCTe.ChCTe"), 'z'); + if(chCte != null) + txtDocumentosFiscais.Text += "CTe - " + chCte + ((String)Report.GetParameterValue("NewLine")); + infCtes.Next(); + } + + while(infMdfes.HasMoreRows){ + var chMdfe = FormatarCampo((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfDoc.InfMunDescarga.InfMdFeTransps.ChMDFe"), 'z'); + if(chMdfe != null) + txtDocumentosFiscais.Text += "MDFe - " + chMdfe + ((String)Report.GetParameterValue("NewLine")); + infMdfes.Next(); + } + + txtDocumentosFiscais.Text += ((String)Report.GetParameterValue("NewLine")); + } + + infMunDescargas.Next(); + } + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MDFe.Damdfe.Base/Properties/AssemblyInfo.cs b/MDFe.Damdfe.Base/Properties/AssemblyInfo.cs deleted file mode 100755 index 4699122b1..000000000 --- a/MDFe.Damdfe.Base/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MDFe.Damdfe.Base")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MDFe.Damdfe.Base")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2419900b-1e90-4181-9338-3e84237c3b00")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/MDFe.Damdfe.Fast/DamdfeFrMDFe.cs b/MDFe.Damdfe.Fast/DamdfeFrMDFe.cs index f17259980..a1509ae6d 100755 --- a/MDFe.Damdfe.Fast/DamdfeFrMDFe.cs +++ b/MDFe.Damdfe.Fast/DamdfeFrMDFe.cs @@ -32,11 +32,13 @@ /********************************************************************************/ using System.IO; +using System; +using DFe.Utils; using FastReport; +using FastReport.Export.Html; using FastReport.Export.Pdf; -using MDFe.Damdfe.Base; using MDFe.Classes.Retorno; -using System; +using MDFe.Damdfe.Base; namespace MDFe.Damdfe.Fast { @@ -48,11 +50,19 @@ public DamdfeFrMDFe(MDFeProcMDFe proc, ConfiguracaoDamdfe config, string arquivo { Relatorio = new Report(); RegisterData(proc); - if (!string.IsNullOrEmpty(arquivoRelatorio)) - Relatorio.Load(arquivoRelatorio); + + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"MDFe\MDFeRetrato.frx"; + var frx = FrxFileHelper.TryGetFrxFile(caminho); + Relatorio.Load(new MemoryStream(frx)); + } else - Relatorio.Load(new MemoryStream(Properties.Resources.MDFeRetrato)); - Configurar(config); + { + Relatorio.Load(arquivoRelatorio); + } + + Configurar(config); } public DamdfeFrMDFe() @@ -64,17 +74,17 @@ public void RegisterData(MDFeProcMDFe proc) { Relatorio.RegisterData(new[] { proc }, "MDFeProcMDFe", 20); Relatorio.GetDataSource("MDFeProcMDFe").Enabled = true; - } - + } + public void Configurar(ConfiguracaoDamdfe config) { - Relatorio.SetParameterValue("DoocumentoCancelado", config.DocumentoCancelado); + Relatorio.SetParameterValue("DocumentoCancelado", config.DocumentoCancelado); Relatorio.SetParameterValue("DocumentoEncerrado", config.DocumentoEncerrado); Relatorio.SetParameterValue("Desenvolvedor", config.Desenvolvedor); Relatorio.SetParameterValue("QuebrarLinhasObservacao", config.QuebrarLinhasObservacao); ((PictureObject)Relatorio.FindObject("poEmitLogo")).Image = config.ObterLogo(); } - + /// /// Abre a janela de visualização do DAMDFe /// @@ -155,5 +165,80 @@ public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase export Relatorio.Export(exportBase, outputStream); outputStream.Position = 0; } + + /// + /// Converte o DAMDFe para HTML e salva-o no caminho/arquivo indicado + /// + public MemoryStream ExportarPdf() + { + Relatorio.DoublePass = true; + Relatorio.SmoothGraphics = false; + FastReport.Utils.Config.WebMode = true; + Relatorio.Prepare(); + + var pdfExport = new PDFExport(); + + var stream = new MemoryStream(); + Relatorio.Report.Export(pdfExport, stream); + //pdfExport.Export(Relatorio, stream); + Relatorio.Dispose(); + pdfExport.Dispose(); + + stream.Position = 0; + + return stream; + } + + /// + /// Converte o DAMDFe para HTML e salva-o no caminho/arquivo indicado + /// + public Stream ObterHTML() + { + Relatorio.DoublePass = true; + Relatorio.SmoothGraphics = false; + Relatorio.Prepare(); + + using (var html = new HTMLExport()) + { + html.EmbedPictures = true; + html.SinglePage = false; + html.SubFolder = false; + html.Layers = true; + html.Navigator = false; + html.Pictures = true; + html.EnableMargins = true; + html.SaveStreams = true; + html.Wysiwyg = true; + + var stream = new MemoryStream(); + Relatorio.Export(html, stream); + + return stream; + } + } + + /// + /// Converte o DAMDFe para HTML e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o HTML do DAMDFe + public void ExportarHTML(string arquivo) + { + Relatorio.Prepare(); + + var html = new HTMLExport + { + EmbedPictures = true, + SinglePage = true, + EnableVectorObjects = true, + Wysiwyg = true, + SubFolder = false, + Layers = true, + Navigator = false, + Pictures = true, + EnableMargins = true + }; + + Relatorio.Export(html, arquivo); + } } } \ No newline at end of file diff --git a/MDFe.Damdfe.Fast/Dlls/FastReport.Bars.dll b/MDFe.Damdfe.Fast/Dlls/FastReport.Bars.dll index f02708d20..b87e4f0df 100755 Binary files a/MDFe.Damdfe.Fast/Dlls/FastReport.Bars.dll and b/MDFe.Damdfe.Fast/Dlls/FastReport.Bars.dll differ diff --git a/MDFe.Damdfe.Fast/Dlls/FastReport.Editor.dll b/MDFe.Damdfe.Fast/Dlls/FastReport.Editor.dll index 32de88aa0..1f7146fb5 100755 Binary files a/MDFe.Damdfe.Fast/Dlls/FastReport.Editor.dll and b/MDFe.Damdfe.Fast/Dlls/FastReport.Editor.dll differ diff --git a/MDFe.Damdfe.Fast/Dlls/FastReport.dll b/MDFe.Damdfe.Fast/Dlls/FastReport.dll index f20ad7ab4..f73bc2fca 100755 Binary files a/MDFe.Damdfe.Fast/Dlls/FastReport.dll and b/MDFe.Damdfe.Fast/Dlls/FastReport.dll differ diff --git a/MDFe.Damdfe.Fast/MDFe.Damdfe.Fast.csproj b/MDFe.Damdfe.Fast/MDFe.Damdfe.Fast.csproj index e35b0b378..98fff2bf9 100755 --- a/MDFe.Damdfe.Fast/MDFe.Damdfe.Fast.csproj +++ b/MDFe.Damdfe.Fast/MDFe.Damdfe.Fast.csproj @@ -1,95 +1,20 @@ - - - - - Debug - AnyCPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A} - Library - Properties - MDFe.Damdfe.Fast - MDFe.Damdfe.Fast - v4.5 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - False - Dlls\FastReport.dll - - - False - Dlls\FastReport.Bars.dll - - - False - Dlls\FastReport.Editor.dll - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - {9794CB98-4691-4218-A127-C573C2E7FF83} - MDFe.Classes - - - {2419900b-1e90-4181-9338-3e84237c3b00} - MDFe.Damdfe.Base - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - - - - \ No newline at end of file + + + + net462 + + + + + + + + + + + + + + + + diff --git a/MDFe.Damdfe.Fast/MDFe.Damdfe.Fast.csproj.DotSettings b/MDFe.Damdfe.Fast/MDFe.Damdfe.Fast.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/MDFe.Damdfe.Fast/MDFe.Damdfe.Fast.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/MDFe.Damdfe.Fast/MDFeRetrato.frx b/MDFe.Damdfe.Fast/MDFeRetrato.frx deleted file mode 100755 index 798cdb549..000000000 --- a/MDFe.Damdfe.Fast/MDFeRetrato.frx +++ /dev/null @@ -1,663 +0,0 @@ - - - using System; -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Data; - -using FastReport; -using FastReport.Data; -using FastReport.Dialog; -using FastReport.Barcode; -using FastReport.Table; -using FastReport.Utils; - -using DFe.Classes.Flags; -using MDFe.Classes.Informacoes; -using MDFe.Classes.Flags; -using MDFe.Utils.Flags; - -using VersaoServico = MDFe.Utils.Flags.VersaoServico; - -namespace FastReport -{ - public class ReportScript - { - private string FormatarCampo(long valor, char format) - { - return FormatarCampo(valor.ToString(), format); - } - - private string FormatarCampo(string valor, char format) - { - switch (format) - { - case 'c': //CEP - if (valor.Length == 8) - valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); - break; - case 'f': //Telefone /celular - if (valor.Length == 10) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); - else if (valor.Length == 11) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); - break; - case 'd': //cpf / cnpj - if (valor.Length == 11) - valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); - else if (valor.Length == 14) - valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); - break; - case 'p': - if (valor.Length == 7) - valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); - break; - case 'z': - var mask = new MaskedTextProvider("0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000", new System.Globalization.CultureInfo("pt-BR", false)); - mask.Add(valor); - valor = mask.ToString(); - break; - } - return valor; - } - - private int? qtdeCTe = 0; - private int? qtdeNFe = 0; - private int? qtdeMDFe = 0; - - private void PageHeader1_BeforePrint(object sender, EventArgs e) - { - var chave = Substring((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Id"), 4); - if (!string.IsNullOrEmpty(chave) & chave.Length == 44) - { - var chaveFormatada = ""; - for (int i = 0; i < chave.Length; i += 4) - chaveFormatada = chaveFormatada + chave.Substring(i, 4) + " "; - txtChaveMDFe.Text = chaveFormatada; - } - - bool versao300 = (VersaoServico)Report.GetColumnValue("MDFeProcMDFe.Versao") == VersaoServico.Versao300; - - if (versao300) - { - var infSupl = ((infMDFeSupl)Report.GetColumnValue("MDFeProcMDFe.MDFe.infMDFeSupl")); - Barcode1.Visible = false; - - if (infSupl != null) - { - Barcode1.Visible = true; - } - } - - BarcodeChave.Text = "[Substring( [MDFeProcMDFe.MDFe.InfMDFe.Id], 4)]"; - - //Veiculos e Reboques - txtPlaca.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Placa")); - - txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Prop.RNTRC")); - if ( string.IsNullOrEmpty(txtRntrc.Text) ) - { - if (versao300) - txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.RNTRC")); - else - txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.RNTRC")); - } - - var veic = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque"); - veic.Init(); - while (veic.HasMoreRows) - { - txtPlaca.Text += Environment.NewLine + ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque.Placa")); - string rntrc = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque.Prop.RNTRC")); - if ( string.IsNullOrEmpty(rntrc) ) - rntrc = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.RNTRC")); - txtRntrc.Text += Environment.NewLine + rntrc; - - veic.Next(); - } - - //Condutores - txtCpf.Text = ""; - txtNome.Text = ""; - var moto = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor"); - moto.Init(); - while (moto.HasMoreRows) - { - txtCpf.Text += FormatarCampo((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor.CPF"), 'd') + Environment.NewLine; - txtNome.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor.XNome")) + Environment.NewLine; - moto.Next(); - } - - //Vales Pedágio - txtCnpjResp.Text = ""; - txtCnpjFornec.Text = ""; - txtNumComprovante.Text = ""; - var vale = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp"); - vale.Init(); - while (vale.HasMoreRows) - { - txtCnpjResp.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.CNPJPg")), 'd') + Environment.NewLine; - txtCnpjFornec.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.CNPJForn")), 'd') + Environment.NewLine; - txtNumComprovante.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.NCompra")) + Environment.NewLine; - vale.Next(); - } - - //Seguros - if (versao300) - { - var seguros = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.Seg"); - seguros.Init(); - while (seguros.HasMoreRows) - { - string seguradora = (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.InfSeg.XSeg"); - if (seguradora.Length > 30) - seguradora = seguradora.Substring(0,30); - - string apolice = (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.NApol"); - if (apolice.Length > 20) - apolice = apolice.Substring(0,20); - - txtSeguroResponsavel.Text += ((MDFeRespSeg)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.InfResp.RespSeg") == MDFeRespSeg.EmitenteDoMDFe ? "1 - EMITENTE" :"2 - CONTRATANTE") + Environment.NewLine; - txtSeguroSeguradora.Text += seguradora + Environment.NewLine; - txtSeguroApolice.Text += apolice + Environment.NewLine; - - seguros.Next(); - } - - var contratantes = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante"); - contratantes.Init(); - while (contratantes.HasMoreRows) - { - string cnpj = string.IsNullOrEmpty((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante.CNPJ")) ? - ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante.CPF")) : - ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante.CNPJ")); - - txtContratantes.Text = FormatarCampo(cnpj, 'd') + Environment.NewLine; - contratantes.Next(); - } - } - - //Totais - qtdeCTe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QCTe")); - qtdeCTe = qtdeCTe ?? 0; - Text38.Text = qtdeCTe.ToString(); - - qtdeNFe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QNFe")); - qtdeNFe = qtdeNFe ?? 0; - Text39.Text = qtdeNFe.ToString(); - - qtdeMDFe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QMDFe")); - qtdeMDFe = qtdeMDFe ?? 0; - Text40.Text = qtdeMDFe.ToString(); - - DataDocumentoCancelado.Visible = ((Boolean)Report.GetParameterValue("DoocumentoCancelado")) || ((Boolean)Report.GetParameterValue("DocumentoEncerrado")); - Text60.Text = ((Boolean)Report.GetParameterValue("DocumentoEncerrado")) ? "DOCUMENTO ENCERRADO" : "DOCUMENTO CANCELADO"; - Text61.Visible = ((TipoAmbiente)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Ide.TpAmb")) == TipoAmbiente.Homologacao; - - if ((Boolean)Report.GetParameterValue("QuebrarLinhasObservacao")) - Text57.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfAdic.InfCpl")).Replace(";",Environment.NewLine); - } - - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MDFe.Damdfe.Fast/Properties/AssemblyInfo.cs b/MDFe.Damdfe.Fast/Properties/AssemblyInfo.cs deleted file mode 100755 index d4265d87e..000000000 --- a/MDFe.Damdfe.Fast/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MDFe.Damdfe.Fast")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MDFe.Damdfe.Fast")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("730d4787-c8cf-4fa1-b9f5-dc814dbeab7a")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/MDFe.Damdfe.Fast/Properties/Resources.Designer.cs b/MDFe.Damdfe.Fast/Properties/Resources.Designer.cs deleted file mode 100755 index ac5f97a1c..000000000 --- a/MDFe.Damdfe.Fast/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MDFe.Damdfe.Fast.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MDFe.Damdfe.Fast.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] MDFeRetrato { - get { - object obj = ResourceManager.GetObject("MDFeRetrato", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/MDFe.Damdfe.Fast/Properties/Resources.resx b/MDFe.Damdfe.Fast/Properties/Resources.resx deleted file mode 100755 index dd0b13d4c..000000000 --- a/MDFe.Damdfe.Fast/Properties/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\MDFeRetrato.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/MDFe.Damdfe.Fast/Resources/MDFeRetrato.frx b/MDFe.Damdfe.Fast/Resources/MDFeRetrato.frx deleted file mode 100644 index 01ec22ec8..000000000 --- a/MDFe.Damdfe.Fast/Resources/MDFeRetrato.frx +++ /dev/null @@ -1,754 +0,0 @@ - - - using System; -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Data; - -using FastReport; -using FastReport.Data; -using FastReport.Dialog; -using FastReport.Barcode; -using FastReport.Table; -using FastReport.Utils; - -using DFe.Classes.Flags; -using MDFe.Classes.Informacoes; -using MDFe.Classes.Flags; -using MDFe.Utils.Flags; - -using VersaoServico = MDFe.Utils.Flags.VersaoServico; - -namespace FastReport -{ - public class ReportScript - { - private string FormatarCampo(long valor, char format) - { - return FormatarCampo(valor.ToString(), format); - } - - private string FormatarCampo(string valor, char format) - { - switch (format) - { - case 'c': //CEP - if (valor.Length == 8) - valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); - break; - case 'f': //Telefone /celular - if (valor.Length == 10) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); - else if (valor.Length == 11) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); - break; - case 'd': //cpf / cnpj - if (valor.Length == 11) - valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); - else if (valor.Length == 14) - valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); - break; - case 'p': - if (valor.Length == 7) - valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); - break; - case 'z': - var mask = new MaskedTextProvider("0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000", new System.Globalization.CultureInfo("pt-BR", false)); - mask.Add(valor); - valor = mask.ToString(); - break; - } - return valor; - } - - private int? qtdeCTe = 0; - private int? qtdeNFe = 0; - private int? qtdeMDFe = 0; - - private void PageHeader1_BeforePrint(object sender, EventArgs e) - { - var chave = Substring((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Id"), 4); - if (!string.IsNullOrEmpty(chave) & chave.Length == 44) - { - var chaveFormatada = ""; - for (int i = 0; i < chave.Length; i += 4) - chaveFormatada = chaveFormatada + chave.Substring(i, 4) + " "; - txtChaveMDFe.Text = chaveFormatada; - } - - bool versao300 = (VersaoServico)Report.GetColumnValue("MDFeProcMDFe.Versao") == VersaoServico.Versao300; - - if (versao300) - { - var infSupl = ((infMDFeSupl)Report.GetColumnValue("MDFeProcMDFe.MDFe.infMDFeSupl")); - Barcode1.Visible = false; - - if (infSupl != null) - { - Barcode1.Visible = true; - } - } - - BarcodeChave.Text = "[Substring( [MDFeProcMDFe.MDFe.InfMDFe.Id], 4)]"; - - //Veiculos e Reboques - txtPlaca.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Placa")); - - txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Prop.RNTRC")); - if ( string.IsNullOrEmpty(txtRntrc.Text) ) - { - if (versao300) - txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.RNTRC")); - else - txtRntrc.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.RNTRC")); - } - - var veic = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque"); - veic.Init(); - while (veic.HasMoreRows) - { - txtPlaca.Text += Environment.NewLine + ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque.Placa")); - string rntrc = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicReboque.Prop.RNTRC")); - if ( string.IsNullOrEmpty(rntrc) ) - rntrc = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.RNTRC")); - txtRntrc.Text += Environment.NewLine + rntrc; - - veic.Next(); - } - - //Condutores - txtCpf.Text = ""; - txtNome.Text = ""; - var moto = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor"); - moto.Init(); - while (moto.HasMoreRows) - { - txtCpf.Text += FormatarCampo((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor.CPF"), 'd') + Environment.NewLine; - txtNome.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.VeicTracao.Condutor.XNome")) + Environment.NewLine; - moto.Next(); - } - - //Vales Pedágio - txtCnpjResp.Text = ""; - txtCnpjFornec.Text = ""; - txtNumComprovante.Text = ""; - var vale = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp"); - vale.Init(); - while (vale.HasMoreRows) - { - txtCnpjResp.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.CNPJPg")), 'd') + Environment.NewLine; - txtCnpjFornec.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.CNPJForn")), 'd') + Environment.NewLine; - txtNumComprovante.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.ValePed.Disp.NCompra")) + Environment.NewLine; - vale.Next(); - } - - if (versao300) - { - txtCnpjResp.Text = ""; - txtCnpjFornec.Text = ""; - txtNumComprovante.Text = ""; - var valePed = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp"); - valePed.Init(); - while (valePed.HasMoreRows) - { - - var cnpj = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.CNPJPg")); - var cpf = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.CPFPg")); - - txtCnpjResp.Text += FormatarCampo(cpf != null && cpf != string.Empty ? cpf : cnpj, 'd') + Environment.NewLine; - txtCnpjFornec.Text += FormatarCampo(((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.CNPJForn")), 'd') + Environment.NewLine; - txtNumComprovante.Text += ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.valePed.Disp.NCompra")) + Environment.NewLine; - valePed.Next(); - } - } - - //Seguros - if (versao300) - { - var seguros = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.Seg"); - seguros.Init(); - while (seguros.HasMoreRows) - { - string seguradora = (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.InfSeg.XSeg"); - if (seguradora.Length > 30) - seguradora = seguradora.Substring(0,30); - - string apolice = (String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.NApol"); - if (apolice.Length > 20) - apolice = apolice.Substring(0,20); - - txtSeguroResponsavel.Text += ((MDFeRespSeg)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Seg.InfResp.RespSeg") == MDFeRespSeg.EmitenteDoMDFe ? "1 - EMITENTE" :"2 - CONTRATANTE") + Environment.NewLine; - txtSeguroSeguradora.Text += seguradora + Environment.NewLine; - txtSeguroApolice.Text += apolice + Environment.NewLine; - - seguros.Next(); - } - - var contratantes = Report.GetDataSource("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante"); - contratantes.Init(); - while (contratantes.HasMoreRows) - { - string cnpj = string.IsNullOrEmpty((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante.CNPJ")) ? - ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante.CPF")) : - ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfModal.Modal.infANTT.infContratante.CNPJ")); - - txtContratantes.Text = FormatarCampo(cnpj, 'd') + Environment.NewLine; - contratantes.Next(); - } - } - - //Totais - qtdeCTe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QCTe")); - qtdeCTe = qtdeCTe ?? 0; - Text38.Text = qtdeCTe.ToString(); - - qtdeNFe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QNFe")); - qtdeNFe = qtdeNFe ?? 0; - Text39.Text = qtdeNFe.ToString(); - - qtdeMDFe = ((Nullable<Int32>)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Tot.QMDFe")); - qtdeMDFe = qtdeMDFe ?? 0; - Text40.Text = qtdeMDFe.ToString(); - - DataDocumentoCancelado.Visible = ((Boolean)Report.GetParameterValue("DoocumentoCancelado")) || ((Boolean)Report.GetParameterValue("DocumentoEncerrado")); - Text60.Text = ((Boolean)Report.GetParameterValue("DocumentoEncerrado")) ? "DOCUMENTO ENCERRADO" : "DOCUMENTO CANCELADO"; - Text61.Visible = ((TipoAmbiente)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.Ide.TpAmb")) == TipoAmbiente.Homologacao; - - if ((Boolean)Report.GetParameterValue("QuebrarLinhasObservacao")) - Text57.Text = ((String)Report.GetColumnValue("MDFeProcMDFe.MDFe.InfMDFe.InfAdic.InfCpl")).Replace(";",Environment.NewLine); - } - - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MDFe.Damdfe.OpenFast/DamdfeFrMDFe.cs b/MDFe.Damdfe.OpenFast/DamdfeFrMDFe.cs new file mode 100644 index 000000000..b4baec28d --- /dev/null +++ b/MDFe.Damdfe.OpenFast/DamdfeFrMDFe.cs @@ -0,0 +1,196 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.IO; +using DFe.Utils; +using FastReport; +using FastReport.Export.Html; +using FastReport.Export.PdfSimple; +using MDFe.Classes.Retorno; +using MDFe.Damdfe.Base; + +namespace MDFe.Damdfe.OpenFast +{ + public class DamdfeFrMDFe + { + protected Report Relatorio; + + public DamdfeFrMDFe(MDFeProcMDFe proc, ConfiguracaoDamdfe config, string arquivoRelatorio = null) + { + Relatorio = new Report(); + RegisterData(proc); + + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"MDFe\MDFeRetrato.frx"; + var frx = FrxFileHelper.TryGetFrxFile(caminho); + Relatorio.Load(new MemoryStream(frx)); + } + else + { + Relatorio.Load(arquivoRelatorio); + } + + Configurar(config); + } + + public DamdfeFrMDFe() + { + Relatorio = new Report(); + } + + public void RegisterData(MDFeProcMDFe proc) + { + Relatorio.RegisterData(new[] { proc }, "MDFeProcMDFe", 20); + Relatorio.GetDataSource("MDFeProcMDFe").Enabled = true; + } + + public void Configurar(ConfiguracaoDamdfe config) + { + Relatorio.SetParameterValue("NewLine", Environment.NewLine); + Relatorio.SetParameterValue("Tabulation", "\t"); + Relatorio.SetParameterValue("DocumentoCancelado", config.DocumentoCancelado); + Relatorio.SetParameterValue("DocumentoEncerrado", config.DocumentoEncerrado); + Relatorio.SetParameterValue("Desenvolvedor", config.Desenvolvedor); + Relatorio.SetParameterValue("QuebrarLinhasObservacao", config.QuebrarLinhasObservacao); + ((PictureObject)Relatorio.FindObject("poEmitLogo")).Image = config.ObterLogo(); + ((ReportPage)Relatorio.FindObject("Page1")).LeftMargin = config.MargemEsquerda; + ((ReportPage)Relatorio.FindObject("Page1")).RightMargin = config.MargemDireita; + ((ReportPage)Relatorio.FindObject("Page1")).TopMargin = config.MargemSuperior; + ((ReportPage)Relatorio.FindObject("Page1")).BottomMargin = config.MargemInferior; + } + + /// + /// Converte o DAMDFe para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DAMDFe + public void ExportarPdf(string arquivo) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), arquivo); + } + + /// + /// Converte o DAMDFe para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + public void ExportarPdf(Stream outputStream) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), outputStream); + outputStream.Position = 0; + } + + /// + /// Converte o DAMDFe para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DAMDFe + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(string arquivo, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, arquivo); + } + + /// + /// Converte o DAMDFe para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, outputStream); + outputStream.Position = 0; + } + + /// + /// Converte o DAMDFe para HTML e salva-o no caminho/arquivo indicado + /// + public MemoryStream ExportarPdf() + { + Relatorio.DoublePass = true; + Relatorio.SmoothGraphics = false; + FastReport.Utils.Config.WebMode = true; + + Relatorio.Prepare(); + + var pdfExport = new PDFSimpleExport(); + + var stream = new MemoryStream(); + Relatorio.Report.Export(pdfExport, stream); + //pdfExport.Export(Relatorio, stream); + Relatorio.Dispose(); + pdfExport.Dispose(); + + stream.Position = 0; + + return stream; + } + + /// + /// Converte o DAMDFe para HTML e salva-o no caminho/arquivo indicado + /// + public Stream ObterHTML() + { + Relatorio.DoublePass = true; + Relatorio.SmoothGraphics = false; + Relatorio.Prepare(); + + using (var html = new HTMLExport()) + { + html.EmbedPictures = true; + html.SinglePage = false; + html.SubFolder = false; + html.Layers = true; + html.Navigator = false; + html.Pictures = true; + html.EnableMargins = true; + html.SaveStreams = true; + html.Wysiwyg = true; + + var stream = new MemoryStream(); + Relatorio.Export(html, stream); + + return stream; + } + } + } +} \ No newline at end of file diff --git a/MDFe.Damdfe.OpenFast/MDFe.Damdfe.OpenFast.csproj b/MDFe.Damdfe.OpenFast/MDFe.Damdfe.OpenFast.csproj new file mode 100644 index 000000000..5cc9fd5ba --- /dev/null +++ b/MDFe.Damdfe.OpenFast/MDFe.Damdfe.OpenFast.csproj @@ -0,0 +1,23 @@ + + + net462;netstandard2.0;net6.0 + openfastreport + + + + + + + + + + + + + + + + + + + diff --git a/MDFe.Servicos/ConsultaNaoEncerradosMDFe/ServicoMDFeConsultaNaoEncerrados.cs b/MDFe.Servicos/ConsultaNaoEncerradosMDFe/ServicoMDFeConsultaNaoEncerrados.cs old mode 100755 new mode 100644 index 97397aaa5..ee8fbab58 --- a/MDFe.Servicos/ConsultaNaoEncerradosMDFe/ServicoMDFeConsultaNaoEncerrados.cs +++ b/MDFe.Servicos/ConsultaNaoEncerradosMDFe/ServicoMDFeConsultaNaoEncerrados.cs @@ -31,25 +31,26 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Classes.Retorno.MDFeConsultaNaoEncerrado; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; namespace MDFe.Servicos.ConsultaNaoEncerradosMDFe { public class ServicoMDFeConsultaNaoEncerrados { - public MDFeRetConsMDFeNao MDFeConsultaNaoEncerrados(string cnpjCpf) + public MDFeRetConsMDFeNao MDFeConsultaNaoEncerrados(string cnpjCpf, MDFeConfiguracao cfgMdfe = null) { - var consMDFeNaoEnc = ClassesFactory.CriarConsMDFeNaoEnc(cnpjCpf); - consMDFeNaoEnc.ValidarSchema(); - consMDFeNaoEnc.SalvarXmlEmDisco(); + var consMDFeNaoEnc = ClassesFactory.CriarConsMDFeNaoEnc(cnpjCpf, cfgMdfe); + consMDFeNaoEnc.ValidarSchema(cfgMdfe); + consMDFeNaoEnc.SalvarXmlEmDisco(cfgMdfe); - var webService = WsdlFactory.CriaWsdlMDFeConsNaoEnc(); + var webService = WsdlFactory.CriaWsdlMDFeConsNaoEnc(cfgMdfe); var retornoXml = webService.mdfeConsNaoEnc(consMDFeNaoEnc.CriaRequestWs()); var retorno = MDFeRetConsMDFeNao.LoadXmlString(retornoXml.OuterXml, consMDFeNaoEnc); - retorno.SalvarXmlEmDisco(cnpjCpf); + retorno.SalvarXmlEmDisco(cnpjCpf, cfgMdfe); return retorno; } diff --git a/MDFe.Servicos/ConsultaProtocoloMDFe/ServicoMDFeConsultaProtocolo.cs b/MDFe.Servicos/ConsultaProtocoloMDFe/ServicoMDFeConsultaProtocolo.cs old mode 100755 new mode 100644 index fd0d579d0..8259c8d9c --- a/MDFe.Servicos/ConsultaProtocoloMDFe/ServicoMDFeConsultaProtocolo.cs +++ b/MDFe.Servicos/ConsultaProtocoloMDFe/ServicoMDFeConsultaProtocolo.cs @@ -31,25 +31,27 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Classes.Retorno.MDFeConsultaProtocolo; using MDFe.Servicos.Factory; +using MDFe.Servicos.Interfaces; +using MDFe.Utils.Configuracoes; namespace MDFe.Servicos.ConsultaProtocoloMDFe { - public class ServicoMDFeConsultaProtocolo + public class ServicoMDFeConsultaProtocolo : IServicoMDFeConsultaProtocolo { - public MDFeRetConsSitMDFe MDFeConsultaProtocolo(string chave) + public MDFeRetConsSitMDFe MDFeConsultaProtocolo(string chave, MDFeConfiguracao cfgMdfe = null) { - var consSitMdfe = ClassesFactory.CriarConsSitMDFe(chave); - consSitMdfe.ValidarSchema(); - consSitMdfe.SalvarXmlEmDisco(); + var consSitMdfe = ClassesFactory.CriarConsSitMDFe(chave, cfgMdfe); + consSitMdfe.ValidarSchema(cfgMdfe); + consSitMdfe.SalvarXmlEmDisco(cfgMdfe); - var webService = WsdlFactory.CriaWsdlMDFeConsulta(); + var webService = WsdlFactory.CriaWsdlMDFeConsulta(cfgMdfe); var retornoXml = webService.mdfeConsultaMDF(consSitMdfe.CriaRequestWs()); var retorno = MDFeRetConsSitMDFe.LoadXml(retornoXml.OuterXml, consSitMdfe); - retorno.SalvarXmlEmDisco(chave); + retorno.SalvarXmlEmDisco(chave, cfgMdfe); return retorno; } diff --git a/MDFe.Servicos/Enderecos/Helper/UrlHelper.cs b/MDFe.Servicos/Enderecos/Helper/UrlHelper.cs old mode 100755 new mode 100644 index 681a5c52b..da0aba437 --- a/MDFe.Servicos/Enderecos/Helper/UrlHelper.cs +++ b/MDFe.Servicos/Enderecos/Helper/UrlHelper.cs @@ -49,7 +49,8 @@ public static UrlMDFe ObterUrlServico(TipoAmbiente ambiente) MDFeRetRecepcao = "https://mdfe.svrs.rs.gov.br/ws/MDFeRetRecepcao/MDFeRetRecepcao.asmx", MDFeConsulta = "https://mdfe.svrs.rs.gov.br/ws/MDFeConsulta/MDFeConsulta.asmx", MDFeRecepcaoEvento = "https://mdfe.svrs.rs.gov.br/ws/MDFeRecepcaoEvento/MDFeRecepcaoEvento.asmx", - MDFeRecepcao = "https://mdfe.svrs.rs.gov.br/ws/MDFerecepcao/MDFeRecepcao.asmx" + MDFeRecepcao = "https://mdfe.svrs.rs.gov.br/ws/MDFerecepcao/MDFeRecepcao.asmx", + MDFeRecepcaoSinc = "https://mdfe.svrs.rs.gov.br/ws/MDFeRecepcaoSinc/MDFeRecepcaoSinc.asmx" }; case TipoAmbiente.Homologacao: return new UrlMDFe @@ -59,7 +60,8 @@ public static UrlMDFe ObterUrlServico(TipoAmbiente ambiente) MDFeRecepcao = "https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFerecepcao/MDFeRecepcao.asmx", MDFeRecepcaoEvento = "https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFeRecepcaoEvento/MDFeRecepcaoEvento.asmx", MDFeRetRecepcao = "https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFeRetRecepcao/MDFeRetRecepcao.asmx", - MDFeStatusServico = "https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFeStatusServico/MDFeStatusServico.asmx" + MDFeStatusServico = "https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFeStatusServico/MDFeStatusServico.asmx", + MDFeRecepcaoSinc = "https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFeRecepcaoSinc/MDFeRecepcaoSinc.asmx" }; } diff --git a/MDFe.Servicos/Enderecos/UrlMDFe.cs b/MDFe.Servicos/Enderecos/UrlMDFe.cs old mode 100755 new mode 100644 index 2f456aa20..68864d448 --- a/MDFe.Servicos/Enderecos/UrlMDFe.cs +++ b/MDFe.Servicos/Enderecos/UrlMDFe.cs @@ -36,6 +36,7 @@ public class UrlMDFe { public string MDFeRecepcao { get; set; } public string MDFeRetRecepcao { get; set; } + public string MDFeRecepcaoSinc { get; set; } public string MDFeRecepcaoEvento { get; set; } public string MDFeConsulta { get; set; } public string MDFeStatusServico { get; set; } diff --git a/MDFe.Servicos/EventosMDFe/Contratos/IServicoController.cs b/MDFe.Servicos/EventosMDFe/Contratos/IServicoController.cs old mode 100755 new mode 100644 index d5be00246..161ea4685 --- a/MDFe.Servicos/EventosMDFe/Contratos/IServicoController.cs +++ b/MDFe.Servicos/EventosMDFe/Contratos/IServicoController.cs @@ -30,15 +30,17 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using MDFe.Classes.Informacoes.Evento; using MDFe.Classes.Informacoes.Evento.Flags; using MDFe.Classes.Retorno.MDFeEvento; +using MDFe.Utils.Configuracoes; using MDFeEletronico = MDFe.Classes.Informacoes.MDFe; namespace MDFe.Servicos.EventosMDFe.Contratos { public interface IServicoController { - MDFeRetEventoMDFe Executar(MDFeEletronico mdfe, byte sequenciaEvento, MDFeEventoContainer eventoContainer, MDFeTipoEvento tipoEvento); + MDFeRetEventoMDFe Executar(MDFeEletronico mdfe, byte sequenciaEvento, MDFeEventoContainer eventoContainer, MDFeTipoEvento tipoEvento, MDFeConfiguracao cfgMdfe = null); } } \ No newline at end of file diff --git a/MDFe.Servicos/EventosMDFe/EventoCancelar.cs b/MDFe.Servicos/EventosMDFe/EventoCancelar.cs old mode 100755 new mode 100644 index c2d395ffd..4a9f55e5c --- a/MDFe.Servicos/EventosMDFe/EventoCancelar.cs +++ b/MDFe.Servicos/EventosMDFe/EventoCancelar.cs @@ -34,17 +34,20 @@ using MDFe.Classes.Informacoes.Evento.Flags; using MDFe.Classes.Retorno.MDFeEvento; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; using MDFeEletronico = MDFe.Classes.Informacoes.MDFe; namespace MDFe.Servicos.EventosMDFe { public class EventoCancelar { - public MDFeRetEventoMDFe MDFeEventoCancelar(MDFeEletronico mdfe, byte sequenciaEvento, string protocolo, string justificativa) + public MDFeRetEventoMDFe MDFeEventoCancelar(MDFeEletronico mdfe, byte sequenciaEvento, string protocolo, string justificativa, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var cancelamento = ClassesFactory.CriaEvCancMDFe(protocolo, justificativa); - var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, cancelamento, MDFeTipoEvento.Cancelamento); + var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, cancelamento, MDFeTipoEvento.Cancelamento, config); return retorno; } diff --git a/MDFe.Servicos/EventosMDFe/EventoEncerramento.cs b/MDFe.Servicos/EventosMDFe/EventoEncerramento.cs old mode 100755 new mode 100644 index 6db3608d8..e7de8b41c --- a/MDFe.Servicos/EventosMDFe/EventoEncerramento.cs +++ b/MDFe.Servicos/EventosMDFe/EventoEncerramento.cs @@ -31,31 +31,35 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ - using DFe.Classes.Entidades; using MDFe.Classes.Informacoes.Evento.Flags; using MDFe.Classes.Retorno.MDFeEvento; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; using MDFeEletronico = MDFe.Classes.Informacoes.MDFe; namespace MDFe.Servicos.EventosMDFe { public class EventoEncerramento { - public MDFeRetEventoMDFe MDFeEventoEncerramento(MDFeEletronico mdfe, byte sequenciaEvento, string protocolo) + public MDFeRetEventoMDFe MDFeEventoEncerramento(MDFeEletronico mdfe, byte sequenciaEvento, string protocolo, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var encerramento = ClassesFactory.CriaEvEncMDFe(mdfe, protocolo); - var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, encerramento, MDFeTipoEvento.Encerramento); + var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, encerramento, MDFeTipoEvento.Encerramento, config); return retorno; } - public MDFeRetEventoMDFe MDFeEventoEncerramento(MDFeEletronico mdfe, Estado estadoEncerramento, long codigoMunicipioEncerramento, byte sequenciaEvento, string protocolo) + public MDFeRetEventoMDFe MDFeEventoEncerramento(MDFeEletronico mdfe, Estado estadoEncerramento, long codigoMunicipioEncerramento, byte sequenciaEvento, string protocolo, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var encerramento = ClassesFactory.CriaEvEncMDFe(estadoEncerramento, codigoMunicipioEncerramento, protocolo); - var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, encerramento, MDFeTipoEvento.Encerramento); + var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, encerramento, MDFeTipoEvento.Encerramento, config); return retorno; } diff --git a/MDFe.Servicos/EventosMDFe/EventoInclusaoCondutor.cs b/MDFe.Servicos/EventosMDFe/EventoInclusaoCondutor.cs old mode 100755 new mode 100644 index 9fd492106..32d640724 --- a/MDFe.Servicos/EventosMDFe/EventoInclusaoCondutor.cs +++ b/MDFe.Servicos/EventosMDFe/EventoInclusaoCondutor.cs @@ -34,17 +34,20 @@ using MDFe.Classes.Informacoes.Evento.Flags; using MDFe.Classes.Retorno.MDFeEvento; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; using MDFeEletronico = MDFe.Classes.Informacoes.MDFe; namespace MDFe.Servicos.EventosMDFe { public class EventoInclusaoCondutor { - public MDFeRetEventoMDFe MDFeEventoIncluirCondutor(MDFeEletronico mdfe, byte sequenciaEvento, string nome, string cpf) + public MDFeRetEventoMDFe MDFeEventoIncluirCondutor(MDFeEletronico mdfe, byte sequenciaEvento, string nome, string cpf, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var incluirCodutor = ClassesFactory.CriaEvIncCondutorMDFe(nome, cpf); - var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, incluirCodutor, MDFeTipoEvento.InclusaoDeCondutor); + var retorno = new ServicoController().Executar(mdfe, sequenciaEvento, incluirCodutor, MDFeTipoEvento.InclusaoDeCondutor, config); return retorno; } diff --git a/MDFe.Servicos/EventosMDFe/EventoInclusaoDFe.cs b/MDFe.Servicos/EventosMDFe/EventoInclusaoDFe.cs index f4a924289..9dd35c33c 100644 --- a/MDFe.Servicos/EventosMDFe/EventoInclusaoDFe.cs +++ b/MDFe.Servicos/EventosMDFe/EventoInclusaoDFe.cs @@ -36,6 +36,7 @@ using MDFe.Classes.Retorno.MDFeEvento; using MDFe.Servicos.Factory; using System.Collections.Generic; +using MDFe.Utils.Configuracoes; using MDFeEletronico = MDFe.Classes.Informacoes.MDFe; namespace MDFe.Servicos.EventosMDFe @@ -43,11 +44,13 @@ namespace MDFe.Servicos.EventosMDFe public class EventoInclusaoDFe { public MDFeRetEventoMDFe MDFeEventoIncluirDFe(MDFeEletronico mdfe, byte sequenciaEvento, string protocolo, - string codigoMunicipioCarregamento, string nomeMunicipioCarregamento, List informacoesDocumentos) + string codigoMunicipioCarregamento, string nomeMunicipioCarregamento, List informacoesDocumentos, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var inclusao = ClassesFactory.CriaEvIncDFeMDFe(protocolo, codigoMunicipioCarregamento, nomeMunicipioCarregamento, informacoesDocumentos); - return new ServicoController().Executar(mdfe, sequenciaEvento, inclusao, MDFeTipoEvento.InclusaoDFe); + return new ServicoController().Executar(mdfe, sequenciaEvento, inclusao, MDFeTipoEvento.InclusaoDFe, config); } } } \ No newline at end of file diff --git a/MDFe.Servicos/EventosMDFe/EventoPagamentoOperacao.cs b/MDFe.Servicos/EventosMDFe/EventoPagamentoOperacao.cs index cb72cae21..26e27ef71 100644 --- a/MDFe.Servicos/EventosMDFe/EventoPagamentoOperacao.cs +++ b/MDFe.Servicos/EventosMDFe/EventoPagamentoOperacao.cs @@ -1,24 +1,61 @@ -using System.Collections.Generic; +/********************************************************************************/ +/* Projeto: Biblioteca ZeusMDFe */ +/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ +/* (https://mdfe-portal.sefaz.rs.gov.br/ */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco José da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Collections.Generic; using MDFe.Classes.Informacoes; -using MDFe.Classes.Informacoes.Evento.CorpoEvento; using MDFe.Classes.Informacoes.Evento.Flags; using MDFe.Classes.Retorno.MDFeEvento; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; namespace MDFe.Servicos.EventosMDFe { public class EventoPagamentoOperacao { public MDFeRetEventoMDFe MDFeEventoPagamentoOperacao(Classes.Informacoes.MDFe mdfe, byte sequencia, - string protocolo, infViagens infViagens, List infPagamentos) + string protocolo, MDFeInfViagens infViagens, List infPagamentos, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoPagamento = ClassesFactory.CriaEvPagtoOperMDFe( - protocolo - , infViagens - , infPagamentos + protocolo, + infViagens, + infPagamentos ); - return new ServicoController().Executar(mdfe, sequencia, eventoPagamento, MDFeTipoEvento.PagamentoOperacaoMDFe); + var retorno = new ServicoController().Executar(mdfe, sequencia, eventoPagamento, MDFeTipoEvento.PagamentoOperacaoMDFe, config); + + return retorno; } } } \ No newline at end of file diff --git a/MDFe.Servicos/EventosMDFe/FactoryEvento.cs b/MDFe.Servicos/EventosMDFe/FactoryEvento.cs old mode 100755 new mode 100644 index 44f325230..f566c4bf0 --- a/MDFe.Servicos/EventosMDFe/FactoryEvento.cs +++ b/MDFe.Servicos/EventosMDFe/FactoryEvento.cs @@ -32,7 +32,7 @@ /********************************************************************************/ using System; -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Classes.Informacoes.Evento; using MDFe.Classes.Informacoes.Evento.Flags; using MDFe.Utils.Configuracoes; @@ -42,20 +42,22 @@ namespace MDFe.Servicos.EventosMDFe { public static class FactoryEvento { - public static MDFeEventoMDFe CriaEvento(MDFeEletronico MDFe, MDFeTipoEvento tipoEvento, byte sequenciaEvento, MDFeEventoContainer evento) + public static MDFeEventoMDFe CriaEvento(MDFeEletronico MDFe, MDFeTipoEvento tipoEvento, byte sequenciaEvento, MDFeEventoContainer evento, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoMDFe = new MDFeEventoMDFe { - Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout, - InfEvento = new MDFeInfEvento + Versao = config.VersaoWebService.VersaoLayout, + InfEvento = new MDFeInfEvento(config.VersaoWebService.VersaoLayout) { Id = "ID" + (long)tipoEvento + MDFe.Chave() + sequenciaEvento.ToString("D2"), - TpAmb = MDFeConfiguracao.VersaoWebService.TipoAmbiente, + TpAmb = config.VersaoWebService.TipoAmbiente, COrgao = MDFe.UFEmitente(), ChMDFe = MDFe.Chave(), DetEvento = new MDFeDetEvento { - VersaoServico = MDFeConfiguracao.VersaoWebService.VersaoLayout, + VersaoServico = config.VersaoWebService.VersaoLayout, EventoContainer = evento }, DhEvento = DateTime.Now, @@ -72,7 +74,7 @@ public static MDFeEventoMDFe CriaEvento(MDFeEletronico MDFe, MDFeTipoEvento tipo eventoMDFe.InfEvento.CPF = cpfEmitente; } - eventoMDFe.Assinar(); + eventoMDFe.Assinar(config); return eventoMDFe; } diff --git a/MDFe.Servicos/EventosMDFe/ServicoController.cs b/MDFe.Servicos/EventosMDFe/ServicoController.cs old mode 100755 new mode 100644 index f48723b49..72bf4a0c7 --- a/MDFe.Servicos/EventosMDFe/ServicoController.cs +++ b/MDFe.Servicos/EventosMDFe/ServicoController.cs @@ -31,36 +31,39 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Classes.Informacoes.Evento; using MDFe.Classes.Informacoes.Evento.Flags; using MDFe.Classes.Retorno.MDFeEvento; using MDFe.Servicos.EventosMDFe.Contratos; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; using MDFeEletronico = MDFe.Classes.Informacoes.MDFe; namespace MDFe.Servicos.EventosMDFe { public class ServicoController : IServicoController { - public MDFeRetEventoMDFe Executar(MDFeEletronico mdfe, byte sequenciaEvento, MDFeEventoContainer eventoContainer, MDFeTipoEvento tipoEvento) + public MDFeRetEventoMDFe Executar(MDFeEletronico mdfe, byte sequenciaEvento, MDFeEventoContainer eventoContainer, MDFeTipoEvento tipoEvento, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var evento = FactoryEvento.CriaEvento(mdfe, tipoEvento, sequenciaEvento, - eventoContainer); - + eventoContainer, + config); string chave = mdfe.Chave(); - evento.ValidarSchema(); - evento.SalvarXmlEmDisco(chave); + evento.ValidarSchema(config); + evento.SalvarXmlEmDisco(chave, config); - var webService = WsdlFactory.CriaWsdlMDFeRecepcaoEvento(); + var webService = WsdlFactory.CriaWsdlMDFeRecepcaoEvento(config); var retornoXml = webService.mdfeRecepcaoEvento(evento.CriaXmlRequestWs()); var retorno = MDFeRetEventoMDFe.LoadXml(retornoXml.OuterXml, evento); - retorno.SalvarXmlEmDisco(chave); + retorno.SalvarXmlEmDisco(chave, config); return retorno; } diff --git a/MDFe.Servicos/EventosMDFe/ServicoMDFeEvento.cs b/MDFe.Servicos/EventosMDFe/ServicoMDFeEvento.cs old mode 100755 new mode 100644 index 8a175dc84..653dae482 --- a/MDFe.Servicos/EventosMDFe/ServicoMDFeEvento.cs +++ b/MDFe.Servicos/EventosMDFe/ServicoMDFeEvento.cs @@ -28,13 +28,15 @@ /* */ /* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ /* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/* Rua Comendador Francisco José da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using MDFe.Classes.Informacoes.Evento.CorpoEvento; using MDFe.Classes.Retorno.MDFeEvento; using System.Collections.Generic; using DFe.Classes.Entidades; using MDFe.Classes.Informacoes; +using MDFe.Utils.Configuracoes; using MDFeEletronica = MDFe.Classes.Informacoes.MDFe; namespace MDFe.Servicos.EventosMDFe @@ -43,51 +45,65 @@ public class ServicoMDFeEvento { public MDFeRetEventoMDFe MDFeEventoIncluirCondutor( MDFeEletronica mdfe, byte sequenciaEvento, string nome, - string cpf) + string cpf, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoIncluirCondutor = new EventoInclusaoCondutor(); - return eventoIncluirCondutor.MDFeEventoIncluirCondutor(mdfe, sequenciaEvento, nome, cpf); + return eventoIncluirCondutor.MDFeEventoIncluirCondutor(mdfe, sequenciaEvento, nome, cpf, config); } public MDFeRetEventoMDFe MDFeEventoIncluirDFe( MDFeEletronica mdfe, byte sequenciaEvento, string protocolo, - string codigoMunicipioCarregamento, string nomeMunicipioCarregamento, List informacoesDocumentos) + string codigoMunicipioCarregamento, string nomeMunicipioCarregamento, List informacoesDocumentos, + MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoIncluirDFe = new EventoInclusaoDFe(); - return eventoIncluirDFe.MDFeEventoIncluirDFe(mdfe, sequenciaEvento, protocolo, codigoMunicipioCarregamento, nomeMunicipioCarregamento, informacoesDocumentos); + return eventoIncluirDFe.MDFeEventoIncluirDFe(mdfe, sequenciaEvento, protocolo, codigoMunicipioCarregamento, nomeMunicipioCarregamento, informacoesDocumentos, config); } - public MDFeRetEventoMDFe MDFeEventoEncerramentoMDFeEventoEncerramento(MDFeEletronica mdfe, byte sequenciaEvento, string protocolo) + public MDFeRetEventoMDFe MDFeEventoEncerramentoMDFeEventoEncerramento(MDFeEletronica mdfe, byte sequenciaEvento, string protocolo, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoEncerramento = new EventoEncerramento(); - return eventoEncerramento.MDFeEventoEncerramento(mdfe, sequenciaEvento, protocolo); + return eventoEncerramento.MDFeEventoEncerramento(mdfe, sequenciaEvento, protocolo, config); } - public MDFeRetEventoMDFe MDFeEventoEncerramentoMDFeEventoEncerramento(MDFeEletronica mdfe, Estado estadoEncerramento, long codigoMunicipioEncerramento, byte sequenciaEvento, string protocolo) + public MDFeRetEventoMDFe MDFeEventoEncerramentoMDFeEventoEncerramento(MDFeEletronica mdfe, Estado estadoEncerramento, + long codigoMunicipioEncerramento, byte sequenciaEvento, string protocolo, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoEncerramento = new EventoEncerramento(); - return eventoEncerramento.MDFeEventoEncerramento(mdfe, estadoEncerramento, codigoMunicipioEncerramento, sequenciaEvento, protocolo); + return eventoEncerramento.MDFeEventoEncerramento(mdfe, estadoEncerramento, codigoMunicipioEncerramento, sequenciaEvento, protocolo, config); } public MDFeRetEventoMDFe MDFeEventoCancelar(MDFeEletronica mdfe, byte sequenciaEvento, string protocolo, - string justificativa) + string justificativa, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoCancelamento = new EventoCancelar(); - return eventoCancelamento.MDFeEventoCancelar(mdfe, sequenciaEvento, protocolo, justificativa); + return eventoCancelamento.MDFeEventoCancelar(mdfe, sequenciaEvento, protocolo, justificativa, config); } public MDFeRetEventoMDFe MDFeEventoPagamentoOperacaoTransporte(MDFeEletronica mdfe, byte sequenciaEvneto, - string protocolo, infViagens infViagens, List infPagamentos) + string protocolo, MDFeInfViagens infViagens, List infPagamentos, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var eventoPagamentoOperacao = new EventoPagamentoOperacao(); return eventoPagamentoOperacao.MDFeEventoPagamentoOperacao(mdfe, sequenciaEvneto, protocolo, - infViagens, infPagamentos); + infViagens, infPagamentos, config); } } } \ No newline at end of file diff --git a/MDFe.Servicos/Factory/ClassesFactory.cs b/MDFe.Servicos/Factory/ClassesFactory.cs old mode 100755 new mode 100644 index ba7819ee3..b395f7461 --- a/MDFe.Servicos/Factory/ClassesFactory.cs +++ b/MDFe.Servicos/Factory/ClassesFactory.cs @@ -30,7 +30,8 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using MDFe.Classes.Extencoes; + +using MDFe.Classes.Extensoes; using MDFe.Classes.Informacoes.ConsultaNaoEncerrados; using MDFe.Classes.Informacoes.ConsultaProtocolo; using MDFe.Classes.Informacoes.Evento.CorpoEvento; @@ -48,25 +49,25 @@ namespace MDFe.Servicos.Factory { public static class ClassesFactory { - public static MDFeCosMDFeNaoEnc CriarConsMDFeNaoEnc(string cnpjCpf) + public static MDFeCosMDFeNaoEnc CriarConsMDFeNaoEnc(string documento, MDFeConfiguracao cfgMdfe = null) { - var documentoUnico = cnpjCpf; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; var consMDFeNaoEnc = new MDFeCosMDFeNaoEnc { - TpAmb = MDFeConfiguracao.VersaoWebService.TipoAmbiente, - Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout, + TpAmb = config.VersaoWebService.TipoAmbiente, + Versao = config.VersaoWebService.VersaoLayout, XServ = "CONSULTAR NÃO ENCERRADOS" }; - if (documentoUnico.Length == 11) + if (documento.Length == 11) { - consMDFeNaoEnc.CPF = cnpjCpf; + consMDFeNaoEnc.CPF = documento; } - if (documentoUnico.Length == 14) + if (documento.Length == 14) { - consMDFeNaoEnc.CNPJ = cnpjCpf; + consMDFeNaoEnc.CNPJ = documento; } return consMDFeNaoEnc; @@ -83,12 +84,14 @@ public static MDFeEvIncDFeMDFe CriaEvIncDFeMDFe(string protocolo, string codigoM }; } - public static MDFeConsSitMDFe CriarConsSitMDFe(string chave) + public static MDFeConsSitMDFe CriarConsSitMDFe(string chave, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var consSitMdfe = new MDFeConsSitMDFe { - Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout, - TpAmb = MDFeConfiguracao.VersaoWebService.TipoAmbiente, + Versao = config.VersaoWebService.VersaoLayout, + TpAmb = config.VersaoWebService.TipoAmbiente, XServ = "CONSULTAR", ChMDFe = chave }; @@ -153,47 +156,53 @@ public static MDFeEvIncCondutorMDFe CriaEvIncCondutorMDFe(string nome, string cp return incluirCodutor; } - public static MDFeEnviMDFe CriaEnviMDFe(long lote, MDFeEletronico mdfe) + public static MDFeEnviMDFe CriaEnviMDFe(long lote, MDFeEletronico mdfe, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var enviMdfe = new MDFeEnviMDFe { MDFe = mdfe, IdLote = lote.ToString(), - Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout + Versao = config.VersaoWebService.VersaoLayout }; return enviMdfe; } - public static MDFeConsReciMDFe CriaConsReciMDFe(string numeroRecibo) + public static MDFeConsReciMDFe CriaConsReciMDFe(string numeroRecibo, MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var consReciMDFe = new MDFeConsReciMDFe { - Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout, - TpAmb = MDFeConfiguracao.VersaoWebService.TipoAmbiente, + Versao = config.VersaoWebService.VersaoLayout, + TpAmb = config.VersaoWebService.TipoAmbiente, NRec = numeroRecibo }; return consReciMDFe; } - public static MDFeConsStatServMDFe CriaConsStatServMDFe() + public static MDFeConsStatServMDFe CriaConsStatServMDFe(MDFeConfiguracao cfgMdfe = null) { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + return new MDFeConsStatServMDFe { - TpAmb = MDFeConfiguracao.VersaoWebService.TipoAmbiente, - Versao = MDFeConfiguracao.VersaoWebService.VersaoLayout, + TpAmb = config.VersaoWebService.TipoAmbiente, + Versao = config.VersaoWebService.VersaoLayout, XServ = "STATUS" }; } - public static evPagtoOperMDFe CriaEvPagtoOperMDFe(string protocolo, infViagens infViagens, List infPagamentos) + public static MDFeEvPagtoOperMDFe CriaEvPagtoOperMDFe(string protocolo, MDFeInfViagens infViagens, List infPagamentos) { - return new evPagtoOperMDFe + return new MDFeEvPagtoOperMDFe { - infViagens = infViagens, - nProt = protocolo, - infPag = infPagamentos + InfViagens = infViagens, + NProt = protocolo, + InfPag = infPagamentos }; } } diff --git a/MDFe.Servicos/Factory/WsdlFactory.cs b/MDFe.Servicos/Factory/WsdlFactory.cs old mode 100755 new mode 100644 index 610f6619d..8bb927104 --- a/MDFe.Servicos/Factory/WsdlFactory.cs +++ b/MDFe.Servicos/Factory/WsdlFactory.cs @@ -31,85 +31,113 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ +using CTe.CTeOSDocumento.Common; using DFe.Classes.Extensoes; -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Servicos.Enderecos.Helper; using MDFe.Utils.Configuracoes; -using MDFe.Wsdl.Configuracao; -using MDFe.Wsdl.Gerado.MDFeConsultaNaoEncerrados; -using MDFe.Wsdl.Gerado.MDFeConsultaProtoloco; -using MDFe.Wsdl.Gerado.MDFeRecepcao; -using MDFe.Wsdl.Gerado.MDFeRetRecepcao; using MDFe.Wsdl.Gerado.MDFeStatusServico; +using MDFe.Wsdl.MDFeConsultaNaoEncerrados; +using MDFe.Wsdl.MDFeConsultaProtoloco; +using MDFe.Wsdl.MDFeEventos; +using MDFe.Wsdl.MDFeRecepcao; +using MDFe.Wsdl.MDFeRecepcao.Sincrono; +using MDFe.Wsdl.MDFeRetRecepcao; namespace MDFe.Servicos.Factory { public static class WsdlFactory { - public static MDFeConsNaoEnc CriaWsdlMDFeConsNaoEnc() + public static MDFeConsNaoEnc CriaWsdlMDFeConsNaoEnc(MDFeConfiguracao cfgMdfe = null) { - var url = UrlHelper.ObterUrlServico(MDFeConfiguracao.VersaoWebService.TipoAmbiente).MDFeConsNaoEnc; - var versao = MDFeConfiguracao.VersaoWebService.VersaoLayout.GetVersaoString(); - var configuracaoWsdl = CriaConfiguracao(url, versao); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + var url = UrlHelper.ObterUrlServico(config.VersaoWebService.TipoAmbiente).MDFeConsNaoEnc; + var versao = config.VersaoWebService.VersaoLayout.GetVersaoString(); + var configuracaoWsdl = CriaConfiguracao(url, versao, config); var ws = new MDFeConsNaoEnc(configuracaoWsdl); return ws; } - public static MDFeConsulta CriaWsdlMDFeConsulta() + public static MDFeConsulta CriaWsdlMDFeConsulta(MDFeConfiguracao cfgMdfe = null) { - var url = UrlHelper.ObterUrlServico(MDFeConfiguracao.VersaoWebService.TipoAmbiente).MDFeConsulta; - var versao = MDFeConfiguracao.VersaoWebService.VersaoLayout.GetVersaoString(); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + var url = UrlHelper.ObterUrlServico(config.VersaoWebService.TipoAmbiente).MDFeConsulta; + var versao = config.VersaoWebService.VersaoLayout.GetVersaoString(); - var configuracaoWsdl = CriaConfiguracao(url, versao); + var configuracaoWsdl = CriaConfiguracao(url, versao, config); return new MDFeConsulta(configuracaoWsdl); } - public static MDFeRecepcaoEvento CriaWsdlMDFeRecepcaoEvento() + public static MDFeRecepcaoEvento CriaWsdlMDFeRecepcaoEvento(MDFeConfiguracao cfgMdfe = null) { - var url = UrlHelper.ObterUrlServico(MDFeConfiguracao.VersaoWebService.TipoAmbiente).MDFeRecepcaoEvento; - var versao = MDFeConfiguracao.VersaoWebService.VersaoLayout.GetVersaoString(); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var configuracaoWsdl = CriaConfiguracao(url, versao); + var url = UrlHelper.ObterUrlServico(config.VersaoWebService.TipoAmbiente).MDFeRecepcaoEvento; + var versao = config.VersaoWebService.VersaoLayout.GetVersaoString(); + + var configuracaoWsdl = CriaConfiguracao(url, versao, config); return new MDFeRecepcaoEvento(configuracaoWsdl); } - public static MDFeRecepcao CriaWsdlMDFeRecepcao() + public static MDFeRecepcao CriaWsdlMDFeRecepcao(MDFeConfiguracao cfgMdfe = null) { - var url = UrlHelper.ObterUrlServico(MDFeConfiguracao.VersaoWebService.TipoAmbiente).MDFeRecepcao; - var versaoServico = MDFeConfiguracao.VersaoWebService.VersaoLayout.GetVersaoString(); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + var url = UrlHelper.ObterUrlServico(config.VersaoWebService.TipoAmbiente).MDFeRecepcao; + var versaoServico = config.VersaoWebService.VersaoLayout.GetVersaoString(); - var configuracaoWsdl = CriaConfiguracao(url, versaoServico); + var configuracaoWsdl = CriaConfiguracao(url, versaoServico, config); - return new MDFeRecepcao(configuracaoWsdl); ; + return new MDFeRecepcao(configuracaoWsdl); } - public static MDFeRetRecepcao CriaWsdlMDFeRetRecepcao() + public static MDFeRecepcaoSinc CriaWsdlMDFeRecepcaoSinc(MDFeConfiguracao cfgMdfe = null) { - var url = UrlHelper.ObterUrlServico(MDFeConfiguracao.VersaoWebService.TipoAmbiente).MDFeRetRecepcao; - var versao = MDFeConfiguracao.VersaoWebService.VersaoLayout.GetVersaoString(); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var configuracaoWsdl = CriaConfiguracao(url, versao); + var url = UrlHelper.ObterUrlServico(config.VersaoWebService.TipoAmbiente).MDFeRecepcaoSinc; + var versaoServico = config.VersaoWebService.VersaoLayout.GetVersaoString(); + + var configuracaoWsdl = CriaConfiguracao(url, versaoServico, config); + + return new MDFeRecepcaoSinc(configuracaoWsdl); + } + + public static MDFeRetRecepcao CriaWsdlMDFeRetRecepcao(MDFeConfiguracao cfgMdfe = null) + { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + var url = UrlHelper.ObterUrlServico(config.VersaoWebService.TipoAmbiente).MDFeRetRecepcao; + var versao = config.VersaoWebService.VersaoLayout.GetVersaoString(); + + var configuracaoWsdl = CriaConfiguracao(url, versao, config); return new MDFeRetRecepcao(configuracaoWsdl); } - public static MDFeStatusServico CriaWsdlMDFeStatusServico() + public static MDFeStatusServico CriaWsdlMDFeStatusServico(MDFeConfiguracao cfgMdfe = null) { - var url = UrlHelper.ObterUrlServico(MDFeConfiguracao.VersaoWebService.TipoAmbiente).MDFeStatusServico; - var versao = MDFeConfiguracao.VersaoWebService.VersaoLayout.GetVersaoString(); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + var url = UrlHelper.ObterUrlServico(config.VersaoWebService.TipoAmbiente).MDFeStatusServico; + var versao = config.VersaoWebService.VersaoLayout.GetVersaoString(); - var configuracaoWsdl = CriaConfiguracao(url, versao); + var configuracaoWsdl = CriaConfiguracao(url, versao, config); return new MDFeStatusServico(configuracaoWsdl); } - private static WsdlConfiguracao CriaConfiguracao(string url, string versao) + private static WsdlConfiguracao CriaConfiguracao(string url, string versao, MDFeConfiguracao cfgMdfe = null) { - var codigoEstado = MDFeConfiguracao.VersaoWebService.UfEmitente.GetCodigoIbgeEmString(); - var certificadoDigital = MDFeConfiguracao.X509Certificate2; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + var codigoEstado = config.VersaoWebService.UfEmitente.GetCodigoIbgeEmString(); + var certificadoDigital = config.X509Certificate2; return new WsdlConfiguracao { @@ -117,7 +145,7 @@ private static WsdlConfiguracao CriaConfiguracao(string url, string versao) Versao = versao, CodigoIbgeEstado = codigoEstado, Url = url, - TimeOut = MDFeConfiguracao.VersaoWebService.TimeOut + TimeOut = config.VersaoWebService.TimeOut }; } } diff --git a/MDFe.Servicos/Interfaces/IServicoMDFeConsultaProtocolo.cs b/MDFe.Servicos/Interfaces/IServicoMDFeConsultaProtocolo.cs new file mode 100644 index 000000000..6347bf5da --- /dev/null +++ b/MDFe.Servicos/Interfaces/IServicoMDFeConsultaProtocolo.cs @@ -0,0 +1,10 @@ +using MDFe.Classes.Retorno.MDFeConsultaProtocolo; +using MDFe.Utils.Configuracoes; + +namespace MDFe.Servicos.Interfaces +{ + public interface IServicoMDFeConsultaProtocolo + { + MDFeRetConsSitMDFe MDFeConsultaProtocolo(string chave, MDFeConfiguracao cfgMdfe); + } +} diff --git a/MDFe.Servicos/MDFe.Servicos.csproj b/MDFe.Servicos/MDFe.Servicos.csproj index 2ee42e375..28828422e 100755 --- a/MDFe.Servicos/MDFe.Servicos.csproj +++ b/MDFe.Servicos/MDFe.Servicos.csproj @@ -1,94 +1,13 @@ - - - + + - Debug - AnyCPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C} - Library - Properties - MDFe.Servicos - MDFe.Servicos - v4.5 - 512 - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} - DFe.Classes - - - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - DFe.Utils - - - {9794cb98-4691-4218-a127-c573c2e7ff83} - MDFe.Classes - - - {9c0678eb-78f2-49c6-91bf-38148fc37fbb} - MDFe.Utils - - - {81b3bc65-a499-4e19-8ab4-09c6d874c540} - MDFe.Wsdl - + + - - - - \ No newline at end of file + + diff --git a/MDFe.Servicos/MDFe.Servicos.csproj.DotSettings b/MDFe.Servicos/MDFe.Servicos.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/MDFe.Servicos/MDFe.Servicos.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/MDFe.Servicos/Properties/AssemblyInfo.cs b/MDFe.Servicos/Properties/AssemblyInfo.cs deleted file mode 100755 index 0392307f0..000000000 --- a/MDFe.Servicos/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MDFe.Servicos")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MDFe.Servicos")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9587937a-a826-4785-9d1e-3a9f4a622b7c")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/MDFe.Servicos/RecepcaoMDFe/ServicoMDFeRecepcao.cs b/MDFe.Servicos/RecepcaoMDFe/ServicoMDFeRecepcao.cs old mode 100755 new mode 100644 index 00f99740e..26de0ff81 --- a/MDFe.Servicos/RecepcaoMDFe/ServicoMDFeRecepcao.cs +++ b/MDFe.Servicos/RecepcaoMDFe/ServicoMDFeRecepcao.cs @@ -28,14 +28,15 @@ /* */ /* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ /* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/* Rua Comendador Francisco José da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using System; using DFe.Utils; -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Classes.Flags; using MDFe.Classes.Retorno.MDFeRecepcao; +using MDFe.Classes.Retorno.MDFeRetRecepcao.Sincrono; using MDFe.Classes.Servicos.Autorizacao; using MDFe.Servicos.Factory; using MDFe.Utils.Configuracoes; @@ -49,11 +50,13 @@ public class ServicoMDFeRecepcao public event EventHandler AntesDeEnviar; public event EventHandler GerouChave; - public MDFeRetEnviMDFe MDFeRecepcao(long lote, MDFeEletronico mdfe) + public MDFeRetEnviMDFe MDFeRecepcao(long lote, MDFeEletronico mdfe, MDFeConfiguracao cfgMdfe = null) { - var enviMDFe = ClassesFactory.CriaEnviMDFe(lote, mdfe); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - switch (MDFeConfiguracao.VersaoWebService.VersaoLayout) + var enviMDFe = ClassesFactory.CriaEnviMDFe(lote, mdfe, config); + + switch (config.VersaoWebService.VersaoLayout) { case VersaoServico.Versao100: mdfe.InfMDFe.InfModal.VersaoModal = MDFeVersaoModal.Versao100; @@ -65,28 +68,55 @@ public MDFeRetEnviMDFe MDFeRecepcao(long lote, MDFeEletronico mdfe) break; } - enviMDFe.MDFe.Assina(GerouChave, this); + enviMDFe.MDFe.Assina(GerouChave, this, config); - if (MDFeConfiguracao.IsAdicionaQrCode && MDFeConfiguracao.VersaoWebService.VersaoLayout == VersaoServico.Versao300) + if (config.IsAdicionaQrCode && config.VersaoWebService.VersaoLayout == VersaoServico.Versao300) { - mdfe.infMDFeSupl = mdfe.QrCode(MDFeConfiguracao.X509Certificate2); + mdfe.InfMDFeSupl = mdfe.QrCode(config.X509Certificate2); } - enviMDFe.Valida(); - enviMDFe.SalvarXmlEmDisco(); + enviMDFe.Valida(config); + enviMDFe.SalvarXmlEmDisco(config); - var webService = WsdlFactory.CriaWsdlMDFeRecepcao(); + var webService = WsdlFactory.CriaWsdlMDFeRecepcao(config); OnAntesDeEnviar(enviMDFe); var retornoXml = webService.mdfeRecepcaoLote(enviMDFe.CriaXmlRequestWs()); var retorno = MDFeRetEnviMDFe.LoadXml(retornoXml.OuterXml, enviMDFe); - retorno.SalvarXmlEmDisco(); + retorno.SalvarXmlEmDisco(config); return retorno; } + public MDFeRetMDFe MDFeRecepcaoSinc(MDFeEletronico mdfe, MDFeConfiguracao cfgMdfe = null) + { + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + + mdfe.InfMDFe.InfModal.VersaoModal = MDFeVersaoModal.Versao300; + mdfe.InfMDFe.Ide.ProxyDhIniViagem = mdfe.InfMDFe.Ide.DhIniViagem.ParaDataHoraStringUtc(); + mdfe.Assina(GerouChave, this, config); + + if (config.IsAdicionaQrCode) + { + mdfe.InfMDFeSupl = mdfe.QrCode(config.X509Certificate2); + } + + mdfe.Valida(config); + mdfe.SalvarXmlEmDisco(null, config); + + var webService = WsdlFactory.CriaWsdlMDFeRecepcaoSinc(config); + + var enviMDFe = ClassesFactory.CriaEnviMDFe(lote: 1, mdfe, config); + OnAntesDeEnviar(enviMDFe); + + var retornoXml = webService.mdfeRecepcao(mdfe.CriaXmlRequestWs()); + + var retorno = MDFeRetMDFe.LoadXml(retornoXml.OuterXml, mdfe); + return retorno; + } + protected virtual void OnAntesDeEnviar(MDFeEnviMDFe enviMdfe) { var handler = AntesDeEnviar; diff --git a/MDFe.Servicos/RetRecepcaoMDFe/ServicoMDFeRetRecepcao.cs b/MDFe.Servicos/RetRecepcaoMDFe/ServicoMDFeRetRecepcao.cs old mode 100755 new mode 100644 index 443da825d..744547f4f --- a/MDFe.Servicos/RetRecepcaoMDFe/ServicoMDFeRetRecepcao.cs +++ b/MDFe.Servicos/RetRecepcaoMDFe/ServicoMDFeRetRecepcao.cs @@ -28,28 +28,31 @@ /* */ /* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ /* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/* Rua Comendador Francisco José da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Classes.Retorno.MDFeRetRecepcao; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; namespace MDFe.Servicos.RetRecepcaoMDFe { public class ServicoMDFeRetRecepcao { - public MDFeRetConsReciMDFe MDFeRetRecepcao(string numeroRecibo) + public MDFeRetConsReciMDFe MDFeRetRecepcao(string numeroRecibo, MDFeConfiguracao cfgMdfe = null) { - var consReciMdfe = ClassesFactory.CriaConsReciMDFe(numeroRecibo); - consReciMdfe.ValidaSchema(); - consReciMdfe.SalvarXmlEmDisco(); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var webService = WsdlFactory.CriaWsdlMDFeRetRecepcao(); + var consReciMdfe = ClassesFactory.CriaConsReciMDFe(numeroRecibo, config); + consReciMdfe.ValidaSchema(config); + consReciMdfe.SalvarXmlEmDisco(config); + + var webService = WsdlFactory.CriaWsdlMDFeRetRecepcao(config); var retornoXml = webService.mdfeRetRecepcao(consReciMdfe.CriaRequestWs()); var retorno = MDFeRetConsReciMDFe.LoadXml(retornoXml.OuterXml, consReciMdfe); - retorno.SalvarXmlEmDisco(); + retorno.SalvarXmlEmDisco(config); return retorno; } diff --git a/MDFe.Servicos/StatusServicoMDFe/ServicoMDFeStatusServico.cs b/MDFe.Servicos/StatusServicoMDFe/ServicoMDFeStatusServico.cs old mode 100755 new mode 100644 index 7d73b02ce..9d50f7491 --- a/MDFe.Servicos/StatusServicoMDFe/ServicoMDFeStatusServico.cs +++ b/MDFe.Servicos/StatusServicoMDFe/ServicoMDFeStatusServico.cs @@ -28,28 +28,31 @@ /* */ /* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ /* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/* Rua Comendador Francisco José da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using MDFe.Classes.Extencoes; +using MDFe.Classes.Extensoes; using MDFe.Classes.Retorno.MDFeStatusServico; using MDFe.Servicos.Factory; +using MDFe.Utils.Configuracoes; namespace MDFe.Servicos.StatusServicoMDFe { public class ServicoMDFeStatusServico { - public MDFeRetConsStatServ MDFeStatusServico() + public MDFeRetConsStatServ MDFeStatusServico(MDFeConfiguracao cfgMdfe = null) { - var consStatServMDFe = ClassesFactory.CriaConsStatServMDFe(); - consStatServMDFe.ValidarSchema(); - consStatServMDFe.SalvarXmlEmDisco(); + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; - var webService = WsdlFactory.CriaWsdlMDFeStatusServico(); + var consStatServMDFe = ClassesFactory.CriaConsStatServMDFe(config); + consStatServMDFe.ValidarSchema(config); + consStatServMDFe.SalvarXmlEmDisco(config); + + var webService = WsdlFactory.CriaWsdlMDFeStatusServico(config); var retornoXml = webService.mdfeStatusServicoMDF(consStatServMDFe.CriaRequestWs()); var retorno = MDFeRetConsStatServ.LoadXml(retornoXml.OuterXml, consStatServMDFe); - retorno.SalvarXmlEmDisco(); + retorno.SalvarXmlEmDisco(config); return retorno; diff --git a/MDFe.Utils/Configuracoes/MDFeConfiguracao.cs b/MDFe.Utils/Configuracoes/MDFeConfiguracao.cs old mode 100755 new mode 100644 index fca3252a6..cea76dd05 --- a/MDFe.Utils/Configuracoes/MDFeConfiguracao.cs +++ b/MDFe.Utils/Configuracoes/MDFeConfiguracao.cs @@ -32,92 +32,178 @@ /********************************************************************************/ using System.Security.Cryptography.X509Certificates; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; using DFe.Utils; using DFe.Utils.Assinatura; using System; -using VersaoServico = MDFe.Utils.Flags.VersaoServico; +using System.ComponentModel; +using System.IO; +using System.Runtime.CompilerServices; +using NFe.Utils.Annotations; namespace MDFe.Utils.Configuracoes { - public class MDFeConfiguracao : IDisposable + public class MDFeConfiguracao : IDisposable, INotifyPropertyChanged { - private static MDFeVersaoWebService _versaoWebService; + private static volatile MDFeConfiguracao _instancia; + private static readonly object SyncRoot = new object(); + + private string _caminhoSchemas; + private bool _deveSalvarXmls; + private MDFeVersaoWebService _versaoWebService; + private X509Certificate2 _certificado; public MDFeConfiguracao() { VersaoWebService = new MDFeVersaoWebService(); + ConfiguracaoCertificado = new ConfiguracaoCertificado(); + } + + static MDFeConfiguracao() + { + } + + public ConfiguracaoCertificado ConfiguracaoCertificado { get; set; } + + /// + /// Informar se a biblioteca deve salvar o xml de envio e de retorno + /// + public bool IsSalvarXml + { + get { return _deveSalvarXmls; } + set + { + if (!value) + CaminhoSalvarXml = ""; + _deveSalvarXmls = value; + } + } + + /// + /// Diretório onde estão armazenados os schemas para validação + /// + public string CaminhoSchemas + { + get { return _caminhoSchemas; } + set + { + if (!string.IsNullOrEmpty(value) && !Directory.Exists(value)) + throw new Exception("Diretório " + value + " não encontrado!"); + _caminhoSchemas = value; + } } - public static ConfiguracaoCertificado ConfiguracaoCertificado { get; set; } + /// + /// Diretório onde os xmls de envio/retorno devem ser salvos + /// + public string CaminhoSalvarXml { get; set; } - public static bool IsSalvarXml { get; set; } - public static string CaminhoSchemas { get; set; } - public static string CaminhoSalvarXml { get; set; } - public static bool IsAdicionaQrCode { get; set; } + public bool IsAdicionaQrCode { get; set; } - public static MDFeVersaoWebService VersaoWebService + public MDFeVersaoWebService VersaoWebService { get { return GetMdfeVersaoWebService(); } set { _versaoWebService = value; } } - private static MDFeVersaoWebService GetMdfeVersaoWebService() + private MDFeVersaoWebService GetMdfeVersaoWebService() { - if(_versaoWebService == null) + if (_versaoWebService == null) _versaoWebService = new MDFeVersaoWebService(); return _versaoWebService; } - - private static X509Certificate2 _certificado = null; - public static X509Certificate2 X509Certificate2 + + public X509Certificate2 X509Certificate2 { get { - if (_certificado != null) - if (!ConfiguracaoCertificado.ManterDadosEmCache) - _certificado.Reset(); + if (_certificado != null && !DeveManterCertificadoEmCache()) + _certificado.Reset(); + _certificado = ObterCertificado(); return _certificado; } } - public static bool NaoSalvarXml() + public bool NaoSalvarXml() { return !IsSalvarXml; } - private static X509Certificate2 ObterCertificado() + private X509Certificate2 ObterCertificado() { return CertificadoDigital.ObterCertificado(ConfiguracaoCertificado); } - public void Dispose() + /// + /// Instância do Singleton de MDFeConfiguracao + /// + public static MDFeConfiguracao Instancia { - if (!ConfiguracaoCertificado.ManterDadosEmCache && _certificado != null) + get + { + if (_instancia != null) return _instancia; + lock (SyncRoot) + { + if (_instancia != null) return _instancia; + _instancia = new MDFeConfiguracao(); + } + + return _instancia; + } + set { - _certificado.Reset(); - _certificado = null; + lock (SyncRoot) + { + if (value != null) + _instancia = value; + } } } + /// + /// Limpa a instancia atual caso exista + /// + public static void LimparInstancia() + { + _instancia = null; + } + + public event PropertyChangedEventHandler PropertyChanged; + + [NotifyPropertyChangedInvocator] + private void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + var handler = PropertyChanged; + if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); + } + + public void Dispose() + { + LimparCertificado(); + } + ~MDFeConfiguracao() { - if (!ConfiguracaoCertificado.ManterDadosEmCache && _certificado != null) - { - _certificado.Reset(); - _certificado = null; - } + LimparCertificado(); } - } - public class MDFeVersaoWebService - { - public int TimeOut { get; set; } - public Estado UfEmitente { get; set; } - public TipoAmbiente TipoAmbiente { get; set; } - public VersaoServico VersaoLayout { get; set; } + private void LimparCertificado() + { + if (DeveManterCertificadoEmCache()) + return; + + _certificado.Reset(); + _certificado = null; + } + + private bool DeveManterCertificadoEmCache() + { + var deveManterCertificadoEmCache = _certificado == null || + ConfiguracaoCertificado == null || + ConfiguracaoCertificado.ManterDadosEmCache; + + return deveManterCertificadoEmCache; + } } } diff --git a/MDFe.Utils/Configuracoes/MDFeVersaoWebService.cs b/MDFe.Utils/Configuracoes/MDFeVersaoWebService.cs new file mode 100644 index 000000000..7feabba9a --- /dev/null +++ b/MDFe.Utils/Configuracoes/MDFeVersaoWebService.cs @@ -0,0 +1,14 @@ +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using VersaoServico = MDFe.Utils.Flags.VersaoServico; + +namespace MDFe.Utils.Configuracoes +{ + public class MDFeVersaoWebService + { + public int TimeOut { get; set; } + public Estado UfEmitente { get; set; } + public TipoAmbiente TipoAmbiente { get; set; } + public VersaoServico VersaoLayout { get; set; } + } +} diff --git a/MDFe.Utils/MDFe.Utils.csproj b/MDFe.Utils/MDFe.Utils.csproj index 9c376d5ff..c75c15535 100755 --- a/MDFe.Utils/MDFe.Utils.csproj +++ b/MDFe.Utils/MDFe.Utils.csproj @@ -1,65 +1,15 @@ - - - + + - Debug - AnyCPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB} - Library - Properties - MDFe.Utils - MDFe.Utils - v4.5 - 512 - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - + - - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} - DFe.Classes - - - {b4e1a7a6-5d66-4326-8a8d-39338e6fc84c} - DFe.Utils - + + + + - - - - \ No newline at end of file + + diff --git a/MDFe.Utils/MDFe.Utils.csproj.DotSettings b/MDFe.Utils/MDFe.Utils.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/MDFe.Utils/MDFe.Utils.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/MDFe.Utils/Properties/AssemblyInfo.cs b/MDFe.Utils/Properties/AssemblyInfo.cs deleted file mode 100755 index 4858d7a5b..000000000 --- a/MDFe.Utils/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MDFe.Utils")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MDFe.Utils")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9c0678eb-78f2-49c6-91bf-38148fc37fbb")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/MDFe.Utils/Validacao/Validador.cs b/MDFe.Utils/Validacao/Validador.cs old mode 100755 new mode 100644 index b1ca4ea2c..fa566f4b4 --- a/MDFe.Utils/Validacao/Validador.cs +++ b/MDFe.Utils/Validacao/Validador.cs @@ -28,39 +28,49 @@ /* */ /* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ /* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/* Rua Comendador Francisco José da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + +using MDFe.Utils.Configuracoes; using System; using System.IO; using System.Xml; using System.Xml.Schema; -using MDFe.Utils.Configuracoes; namespace MDFe.Utils.Validacao { public class Validador { - public static void Valida(string xml, string schema) + public static void Valida(string xml, string schema, MDFeConfiguracao cfgMdfe = null) { - var pathSchema = MDFeConfiguracao.CaminhoSchemas; + var config = cfgMdfe ?? MDFeConfiguracao.Instancia; + var pathSchema = config.CaminhoSchemas; if (!Directory.Exists(pathSchema)) throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); - var arquivoSchema = pathSchema + @"\" + schema; + var arquivoSchema = Path.Combine(pathSchema, schema); // Define o tipo de validação var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; + // Previne ataques XXE: nao permite resolver recursos externos + cfg.DtdProcessing = DtdProcessing.Prohibit; + cfg.XmlResolver = null; + // Carrega o arquivo de esquema var schemas = new XmlSchemaSet(); + schemas.XmlResolver = new XmlUrlResolver(); cfg.Schemas = schemas; + // Quando carregar o eschema, especificar o namespace que ele valida // e a localização do arquivo schemas.Add(null, arquivoSchema); + // Especifica o tratamento de evento para os erros de validacao cfg.ValidationEventHandler += ValidationEventHandler; - // cria um leitor para validação + + // Cria um leitor para validação var validator = XmlReader.Create(new StringReader(xml), cfg); try { diff --git a/MDFe.Wsdl/Configuracao/WsdlConfiguracao.cs b/MDFe.Wsdl/Configuracao/WsdlConfiguracao.cs deleted file mode 100755 index c819c4996..000000000 --- a/MDFe.Wsdl/Configuracao/WsdlConfiguracao.cs +++ /dev/null @@ -1,45 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusMDFe */ -/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ -/* (https://mdfe-portal.sefaz.rs.gov.br/ */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Security.Cryptography.X509Certificates; - -namespace MDFe.Wsdl.Configuracao -{ - public class WsdlConfiguracao - { - public string Url { get; set; } - public string CodigoIbgeEstado { get; set; } - public string Versao { get; set; } - public X509Certificate2 CertificadoDigital { get; set; } - public int TimeOut { get; set; } - } -} \ No newline at end of file diff --git a/MDFe.Wsdl/Gerado/MDFeConsultaNaoEncerrados/MDFeConsNaoEnc.cs b/MDFe.Wsdl/Gerado/MDFeConsultaNaoEncerrados/MDFeConsNaoEnc.cs deleted file mode 100755 index 9a0b6745f..000000000 --- a/MDFe.Wsdl/Gerado/MDFeConsultaNaoEncerrados/MDFeConsNaoEnc.cs +++ /dev/null @@ -1,207 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusMDFe */ -/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ -/* (https://mdfe-portal.sefaz.rs.gov.br/ */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using MDFe.Wsdl.Configuracao; - -namespace MDFe.Wsdl.Gerado.MDFeConsultaNaoEncerrados -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="MDFeConsNaoEncSoap12", Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc")] - public partial class MDFeConsNaoEnc : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private mdfeCabecMsg mdfeCabecMsgValueField; - - private System.Threading.SendOrPostCallback mdfeConsNaoEncOperationCompleted; - - /// - public MDFeConsNaoEnc(WsdlConfiguracao configuracao) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = configuracao.Url; - this.mdfeCabecMsgValue = new mdfeCabecMsg - { - cUF = configuracao.CodigoIbgeEstado, - versaoDados = configuracao.Versao - }; - this.ClientCertificates.Add(configuracao.CertificadoDigital); - Timeout = configuracao.TimeOut; - } - - public mdfeCabecMsg mdfeCabecMsgValue { - get { - return this.mdfeCabecMsgValueField; - } - set { - this.mdfeCabecMsgValueField = value; - } - } - - /// - public event mdfeConsNaoEncCompletedEventHandler mdfeConsNaoEncCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("mdfeCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc/mdfeConsNaoEnc", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc")] - public System.Xml.XmlNode mdfeConsNaoEnc([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc")] System.Xml.XmlNode mdfeDadosMsg) { - object[] results = this.Invoke("mdfeConsNaoEnc", new object[] { - mdfeDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BeginmdfeConsNaoEnc(System.Xml.XmlNode mdfeDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("mdfeConsNaoEnc", new object[] { - mdfeDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndmdfeConsNaoEnc(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void mdfeConsNaoEncAsync(System.Xml.XmlNode mdfeDadosMsg) { - this.mdfeConsNaoEncAsync(mdfeDadosMsg, null); - } - - /// - public void mdfeConsNaoEncAsync(System.Xml.XmlNode mdfeDadosMsg, object userState) { - if ((this.mdfeConsNaoEncOperationCompleted == null)) { - this.mdfeConsNaoEncOperationCompleted = new System.Threading.SendOrPostCallback(this.OnmdfeConsNaoEncOperationCompleted); - } - this.InvokeAsync("mdfeConsNaoEnc", new object[] { - mdfeDadosMsg}, this.mdfeConsNaoEncOperationCompleted, userState); - } - - private void OnmdfeConsNaoEncOperationCompleted(object arg) { - if ((this.mdfeConsNaoEncCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.mdfeConsNaoEncCompleted(this, new mdfeConsNaoEncCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc", IsNullable=false)] - public partial class mdfeCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void mdfeConsNaoEncCompletedEventHandler(object sender, mdfeConsNaoEncCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class mdfeConsNaoEncCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal mdfeConsNaoEncCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/MDFe.Wsdl/Gerado/MDFeConsultaProtoloco/MDFeConsulta.cs b/MDFe.Wsdl/Gerado/MDFeConsultaProtoloco/MDFeConsulta.cs deleted file mode 100755 index f13b89321..000000000 --- a/MDFe.Wsdl/Gerado/MDFeConsultaProtoloco/MDFeConsulta.cs +++ /dev/null @@ -1,207 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusMDFe */ -/* Biblioteca C# para emisso de Manifesto Eletrnico Fiscal de Documentos */ -/* (https://mdfe-portal.sefaz.rs.gov.br/ */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Voc pode obter a ltima verso desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca software livre; voc pode redistribu-la e/ou modific-la */ -/* sob os termos da Licena Pblica Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a verso 2.1 da Licena, ou (a seu critrio) */ -/* qualquer verso posterior. */ -/* */ -/* Esta biblioteca distribuda na expectativa de que seja til, porm, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implcita de COMERCIABILIDADE OU */ -/* ADEQUAO A UMA FINALIDADE ESPECFICA. Consulte a Licena Pblica Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENA.TXT ou LICENSE.TXT) */ -/* */ -/* Voc deve ter recebido uma cpia da Licena Pblica Geral Menor do GNU junto*/ -/* com esta biblioteca; se no, escreva para a Free Software Foundation, Inc., */ -/* no endereo 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Voc tambm pode obter uma copia da licena em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco jos da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using MDFe.Wsdl.Configuracao; - -namespace MDFe.Wsdl.Gerado.MDFeConsultaProtoloco -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="MDFeConsultaSoap12", Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta")] - public partial class MDFeConsulta : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private mdfeCabecMsg mdfeCabecMsgValueField; - - private System.Threading.SendOrPostCallback mdfeConsultaMDFOperationCompleted; - - /// - public MDFeConsulta(WsdlConfiguracao configuracao) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = configuracao.Url; - this.mdfeCabecMsgValue = new mdfeCabecMsg - { - cUF = configuracao.CodigoIbgeEstado, - versaoDados = configuracao.Versao - }; - this.ClientCertificates.Add(configuracao.CertificadoDigital); - this.Timeout = configuracao.TimeOut; - } - - public mdfeCabecMsg mdfeCabecMsgValue { - get { - return this.mdfeCabecMsgValueField; - } - set { - this.mdfeCabecMsgValueField = value; - } - } - - /// - public event mdfeConsultaMDFCompletedEventHandler mdfeConsultaMDFCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("mdfeCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta/mdfeConsultaMDF", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta")] - public System.Xml.XmlNode mdfeConsultaMDF([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta")] System.Xml.XmlNode mdfeDadosMsg) { - object[] results = this.Invoke("mdfeConsultaMDF", new object[] { - mdfeDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BeginmdfeConsultaMDF(System.Xml.XmlNode mdfeDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("mdfeConsultaMDF", new object[] { - mdfeDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndmdfeConsultaMDF(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void mdfeConsultaMDFAsync(System.Xml.XmlNode mdfeDadosMsg) { - this.mdfeConsultaMDFAsync(mdfeDadosMsg, null); - } - - /// - public void mdfeConsultaMDFAsync(System.Xml.XmlNode mdfeDadosMsg, object userState) { - if ((this.mdfeConsultaMDFOperationCompleted == null)) { - this.mdfeConsultaMDFOperationCompleted = new System.Threading.SendOrPostCallback(this.OnmdfeConsultaMDFOperationCompleted); - } - this.InvokeAsync("mdfeConsultaMDF", new object[] { - mdfeDadosMsg}, this.mdfeConsultaMDFOperationCompleted, userState); - } - - private void OnmdfeConsultaMDFOperationCompleted(object arg) { - if ((this.mdfeConsultaMDFCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.mdfeConsultaMDFCompleted(this, new mdfeConsultaMDFCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta", IsNullable=false)] - public partial class mdfeCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void mdfeConsultaMDFCompletedEventHandler(object sender, mdfeConsultaMDFCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class mdfeConsultaMDFCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal mdfeConsultaMDFCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/MDFe.Wsdl/Gerado/MDFeEventos/MDFeRecepcaoEvento.cs b/MDFe.Wsdl/Gerado/MDFeEventos/MDFeRecepcaoEvento.cs deleted file mode 100755 index 8565d1cef..000000000 --- a/MDFe.Wsdl/Gerado/MDFeEventos/MDFeRecepcaoEvento.cs +++ /dev/null @@ -1,212 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusMDFe */ -/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ -/* (https://mdfe-portal.sefaz.rs.gov.br/ */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System; -using System.ComponentModel; -using System.Diagnostics; -using System.Security.Cryptography.X509Certificates; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using MDFe.Wsdl.Configuracao; - -// -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - -/// -[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] -[System.Diagnostics.DebuggerStepThroughAttribute()] -[System.ComponentModel.DesignerCategoryAttribute("code")] -[System.Web.Services.WebServiceBindingAttribute(Name="MDFeRecepcaoEventoSoap12", Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento")] -public partial class MDFeRecepcaoEvento : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private mdfeCabecMsg mdfeCabecMsgValueField; - - private System.Threading.SendOrPostCallback mdfeRecepcaoEventoOperationCompleted; - - /// - public MDFeRecepcaoEvento(WsdlConfiguracao configuracao) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = configuracao.Url; - this.mdfeCabecMsgValue = new mdfeCabecMsg - { - cUF = configuracao.CodigoIbgeEstado, - versaoDados = configuracao.Versao - }; - this.ClientCertificates.Add(configuracao.CertificadoDigital); - this.Timeout = configuracao.TimeOut; - } - - public mdfeCabecMsg mdfeCabecMsgValue { - get { - return this.mdfeCabecMsgValueField; - } - set { - this.mdfeCabecMsgValueField = value; - } - } - - /// - public event mdfeRecepcaoEventoCompletedEventHandler mdfeRecepcaoEventoCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("mdfeCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento/mdfeRecepcaoEvento", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento")] - public System.Xml.XmlNode mdfeRecepcaoEvento([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento")] System.Xml.XmlNode mdfeDadosMsg) { - object[] results = this.Invoke("mdfeRecepcaoEvento", new object[] { - mdfeDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BeginmdfeRecepcaoEvento(System.Xml.XmlNode mdfeDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("mdfeRecepcaoEvento", new object[] { - mdfeDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndmdfeRecepcaoEvento(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void mdfeRecepcaoEventoAsync(System.Xml.XmlNode mdfeDadosMsg) { - this.mdfeRecepcaoEventoAsync(mdfeDadosMsg, null); - } - - /// - public void mdfeRecepcaoEventoAsync(System.Xml.XmlNode mdfeDadosMsg, object userState) { - if ((this.mdfeRecepcaoEventoOperationCompleted == null)) { - this.mdfeRecepcaoEventoOperationCompleted = new System.Threading.SendOrPostCallback(this.OnmdfeRecepcaoEventoOperationCompleted); - } - this.InvokeAsync("mdfeRecepcaoEvento", new object[] { - mdfeDadosMsg}, this.mdfeRecepcaoEventoOperationCompleted, userState); - } - - private void OnmdfeRecepcaoEventoOperationCompleted(object arg) { - if ((this.mdfeRecepcaoEventoCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.mdfeRecepcaoEventoCompleted(this, new mdfeRecepcaoEventoCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } -} - -/// -[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] -[System.SerializableAttribute()] -[System.Diagnostics.DebuggerStepThroughAttribute()] -[System.ComponentModel.DesignerCategoryAttribute("code")] -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento")] -[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento", IsNullable=false)] -public partial class mdfeCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } -} - -/// -[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] -public delegate void mdfeRecepcaoEventoCompletedEventHandler(object sender, mdfeRecepcaoEventoCompletedEventArgs e); - -/// -[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] -[System.Diagnostics.DebuggerStepThroughAttribute()] -[System.ComponentModel.DesignerCategoryAttribute("code")] -public partial class mdfeRecepcaoEventoCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal mdfeRecepcaoEventoCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } -} diff --git a/MDFe.Wsdl/Gerado/MDFeRecepcao/MDFeRecepcao.cs b/MDFe.Wsdl/Gerado/MDFeRecepcao/MDFeRecepcao.cs deleted file mode 100755 index 51507d49e..000000000 --- a/MDFe.Wsdl/Gerado/MDFeRecepcao/MDFeRecepcao.cs +++ /dev/null @@ -1,208 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusMDFe */ -/* Biblioteca C# para emissão de Manifesto Eletrônico Fiscal de Documentos */ -/* (https://mdfe-portal.sefaz.rs.gov.br/ */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Security.Cryptography.X509Certificates; -using MDFe.Wsdl.Configuracao; - -namespace MDFe.Wsdl.Gerado.MDFeRecepcao -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="MDFeRecepcaoSoap12", Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao")] - public partial class MDFeRecepcao : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private mdfeCabecMsg mdfeCabecMsgValueField; - - private System.Threading.SendOrPostCallback mdfeRecepcaoLoteOperationCompleted; - - /// - public MDFeRecepcao(WsdlConfiguracao configuracao) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = configuracao.Url; - this.mdfeCabecMsgValue = new mdfeCabecMsg - { - cUF = configuracao.CodigoIbgeEstado, - versaoDados = configuracao.Versao - }; - this.ClientCertificates.Add(configuracao.CertificadoDigital); - this.Timeout = configuracao.TimeOut; - } - - public mdfeCabecMsg mdfeCabecMsgValue { - get { - return this.mdfeCabecMsgValueField; - } - set { - this.mdfeCabecMsgValueField = value; - } - } - - /// - public event mdfeRecepcaoLoteCompletedEventHandler mdfeRecepcaoLoteCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("mdfeCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao/mdfeRecepcaoLote", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao")] - public System.Xml.XmlNode mdfeRecepcaoLote([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao")] System.Xml.XmlNode mdfeDadosMsg) { - object[] results = this.Invoke("mdfeRecepcaoLote", new object[] { - mdfeDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BeginmdfeRecepcaoLote(System.Xml.XmlNode mdfeDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("mdfeRecepcaoLote", new object[] { - mdfeDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndmdfeRecepcaoLote(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void mdfeRecepcaoLoteAsync(System.Xml.XmlNode mdfeDadosMsg) { - this.mdfeRecepcaoLoteAsync(mdfeDadosMsg, null); - } - - /// - public void mdfeRecepcaoLoteAsync(System.Xml.XmlNode mdfeDadosMsg, object userState) { - if ((this.mdfeRecepcaoLoteOperationCompleted == null)) { - this.mdfeRecepcaoLoteOperationCompleted = new System.Threading.SendOrPostCallback(this.OnmdfeRecepcaoLoteOperationCompleted); - } - this.InvokeAsync("mdfeRecepcaoLote", new object[] { - mdfeDadosMsg}, this.mdfeRecepcaoLoteOperationCompleted, userState); - } - - private void OnmdfeRecepcaoLoteOperationCompleted(object arg) { - if ((this.mdfeRecepcaoLoteCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.mdfeRecepcaoLoteCompleted(this, new mdfeRecepcaoLoteCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao", IsNullable=false)] - public partial class mdfeCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void mdfeRecepcaoLoteCompletedEventHandler(object sender, mdfeRecepcaoLoteCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class mdfeRecepcaoLoteCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal mdfeRecepcaoLoteCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/MDFe.Wsdl/Gerado/MDFeRetRecepcao/MDFeRetRecepcao.cs b/MDFe.Wsdl/Gerado/MDFeRetRecepcao/MDFeRetRecepcao.cs deleted file mode 100755 index efb4d9607..000000000 --- a/MDFe.Wsdl/Gerado/MDFeRetRecepcao/MDFeRetRecepcao.cs +++ /dev/null @@ -1,208 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusMDFe */ -/* Biblioteca C# para emisso de Manifesto Eletrnico Fiscal de Documentos */ -/* (https://mdfe-portal.sefaz.rs.gov.br/ */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Voc pode obter a ltima verso desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca software livre; voc pode redistribu-la e/ou modific-la */ -/* sob os termos da Licena Pblica Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a verso 2.1 da Licena, ou (a seu critrio) */ -/* qualquer verso posterior. */ -/* */ -/* Esta biblioteca distribuda na expectativa de que seja til, porm, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implcita de COMERCIABILIDADE OU */ -/* ADEQUAO A UMA FINALIDADE ESPECFICA. Consulte a Licena Pblica Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENA.TXT ou LICENSE.TXT) */ -/* */ -/* Voc deve ter recebido uma cpia da Licena Pblica Geral Menor do GNU junto*/ -/* com esta biblioteca; se no, escreva para a Free Software Foundation, Inc., */ -/* no endereo 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Voc tambm pode obter uma copia da licena em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco jos da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Security.Cryptography.X509Certificates; -using MDFe.Wsdl.Configuracao; - -namespace MDFe.Wsdl.Gerado.MDFeRetRecepcao -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="MDFeRetRecepcaoSoap12", Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao")] - public partial class MDFeRetRecepcao : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private mdfeCabecMsg mdfeCabecMsgValueField; - - private System.Threading.SendOrPostCallback mdfeRetRecepcaoOperationCompleted; - - /// - public MDFeRetRecepcao(WsdlConfiguracao configuracao) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = configuracao.Url; - mdfeCabecMsgValue = new mdfeCabecMsg - { - versaoDados = configuracao.Versao, - cUF = configuracao.CodigoIbgeEstado - }; - this.ClientCertificates.Add(configuracao.CertificadoDigital); - this.Timeout = configuracao.TimeOut; - } - - public mdfeCabecMsg mdfeCabecMsgValue { - get { - return this.mdfeCabecMsgValueField; - } - set { - this.mdfeCabecMsgValueField = value; - } - } - - /// - public event mdfeRetRecepcaoCompletedEventHandler mdfeRetRecepcaoCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("mdfeCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao/mdfeRetRecepcao", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao")] - public System.Xml.XmlNode mdfeRetRecepcao([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao")] System.Xml.XmlNode mdfeDadosMsg) { - object[] results = this.Invoke("mdfeRetRecepcao", new object[] { - mdfeDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BeginmdfeRetRecepcao(System.Xml.XmlNode mdfeDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("mdfeRetRecepcao", new object[] { - mdfeDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndmdfeRetRecepcao(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void mdfeRetRecepcaoAsync(System.Xml.XmlNode mdfeDadosMsg) { - this.mdfeRetRecepcaoAsync(mdfeDadosMsg, null); - } - - /// - public void mdfeRetRecepcaoAsync(System.Xml.XmlNode mdfeDadosMsg, object userState) { - if ((this.mdfeRetRecepcaoOperationCompleted == null)) { - this.mdfeRetRecepcaoOperationCompleted = new System.Threading.SendOrPostCallback(this.OnmdfeRetRecepcaoOperationCompleted); - } - this.InvokeAsync("mdfeRetRecepcao", new object[] { - mdfeDadosMsg}, this.mdfeRetRecepcaoOperationCompleted, userState); - } - - private void OnmdfeRetRecepcaoOperationCompleted(object arg) { - if ((this.mdfeRetRecepcaoCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.mdfeRetRecepcaoCompleted(this, new mdfeRetRecepcaoCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao", IsNullable=false)] - public partial class mdfeCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void mdfeRetRecepcaoCompletedEventHandler(object sender, mdfeRetRecepcaoCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class mdfeRetRecepcaoCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal mdfeRetRecepcaoCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/MDFe.Wsdl/Gerado/MDFeStatusServico/MDFeStatusServico.cs b/MDFe.Wsdl/Gerado/MDFeStatusServico/MDFeStatusServico.cs deleted file mode 100755 index 1f4521842..000000000 --- a/MDFe.Wsdl/Gerado/MDFeStatusServico/MDFeStatusServico.cs +++ /dev/null @@ -1,208 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusMDFe */ -/* Biblioteca C# para emisso de Manifesto Eletrnico Fiscal de Documentos */ -/* (https://mdfe-portal.sefaz.rs.gov.br/ */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Voc pode obter a ltima verso desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca software livre; voc pode redistribu-la e/ou modific-la */ -/* sob os termos da Licena Pblica Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a verso 2.1 da Licena, ou (a seu critrio) */ -/* qualquer verso posterior. */ -/* */ -/* Esta biblioteca distribuda na expectativa de que seja til, porm, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implcita de COMERCIABILIDADE OU */ -/* ADEQUAO A UMA FINALIDADE ESPECFICA. Consulte a Licena Pblica Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENA.TXT ou LICENSE.TXT) */ -/* */ -/* Voc deve ter recebido uma cpia da Licena Pblica Geral Menor do GNU junto*/ -/* com esta biblioteca; se no, escreva para a Free Software Foundation, Inc., */ -/* no endereo 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Voc tambm pode obter uma copia da licena em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco jos da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Security.Cryptography.X509Certificates; -using MDFe.Wsdl.Configuracao; - -namespace MDFe.Wsdl.Gerado.MDFeStatusServico -{ // -// This source code was auto-generated by wsdl, Version=4.6.1055.0. -// - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name="MDFeStatusServicoSoap12", Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico")] - public partial class MDFeStatusServico : System.Web.Services.Protocols.SoapHttpClientProtocol { - - private mdfeCabecMsg mdfeCabecMsgValueField; - - private System.Threading.SendOrPostCallback mdfeStatusServicoMDFOperationCompleted; - - /// - public MDFeStatusServico(WsdlConfiguracao configuracao) { - this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; - this.Url = configuracao.Url; - this.mdfeCabecMsgValue = new mdfeCabecMsg - { - cUF = configuracao.CodigoIbgeEstado, - versaoDados = configuracao.Versao - }; - this.ClientCertificates.Add(configuracao.CertificadoDigital); - this.Timeout = configuracao.TimeOut; - } - - public mdfeCabecMsg mdfeCabecMsgValue { - get { - return this.mdfeCabecMsgValueField; - } - set { - this.mdfeCabecMsgValueField = value; - } - } - - /// - public event mdfeStatusServicoMDFCompletedEventHandler mdfeStatusServicoMDFCompleted; - - /// - [System.Web.Services.Protocols.SoapHeaderAttribute("mdfeCabecMsgValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico/mdfeStatusServicoMDF", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico")] - public System.Xml.XmlNode mdfeStatusServicoMDF([System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico")] System.Xml.XmlNode mdfeDadosMsg) { - object[] results = this.Invoke("mdfeStatusServicoMDF", new object[] { - mdfeDadosMsg}); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public System.IAsyncResult BeginmdfeStatusServicoMDF(System.Xml.XmlNode mdfeDadosMsg, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("mdfeStatusServicoMDF", new object[] { - mdfeDadosMsg}, callback, asyncState); - } - - /// - public System.Xml.XmlNode EndmdfeStatusServicoMDF(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((System.Xml.XmlNode)(results[0])); - } - - /// - public void mdfeStatusServicoMDFAsync(System.Xml.XmlNode mdfeDadosMsg) { - this.mdfeStatusServicoMDFAsync(mdfeDadosMsg, null); - } - - /// - public void mdfeStatusServicoMDFAsync(System.Xml.XmlNode mdfeDadosMsg, object userState) { - if ((this.mdfeStatusServicoMDFOperationCompleted == null)) { - this.mdfeStatusServicoMDFOperationCompleted = new System.Threading.SendOrPostCallback(this.OnmdfeStatusServicoMDFOperationCompleted); - } - this.InvokeAsync("mdfeStatusServicoMDF", new object[] { - mdfeDadosMsg}, this.mdfeStatusServicoMDFOperationCompleted, userState); - } - - private void OnmdfeStatusServicoMDFOperationCompleted(object arg) { - if ((this.mdfeStatusServicoMDFCompleted != null)) { - System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.mdfeStatusServicoMDFCompleted(this, new mdfeStatusServicoMDFCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); - } - } - - /// - public new void CancelAsync(object userState) { - base.CancelAsync(userState); - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico")] - [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico", IsNullable=false)] - public partial class mdfeCabecMsg : System.Web.Services.Protocols.SoapHeader { - - private string cUFField; - - private string versaoDadosField; - - private System.Xml.XmlAttribute[] anyAttrField; - - /// - public string cUF { - get { - return this.cUFField; - } - set { - this.cUFField = value; - } - } - - /// - public string versaoDados { - get { - return this.versaoDadosField; - } - set { - this.versaoDadosField = value; - } - } - - /// - [System.Xml.Serialization.XmlAnyAttributeAttribute()] - public System.Xml.XmlAttribute[] AnyAttr { - get { - return this.anyAttrField; - } - set { - this.anyAttrField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - public delegate void mdfeStatusServicoMDFCompletedEventHandler(object sender, mdfeStatusServicoMDFCompletedEventArgs e); - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class mdfeStatusServicoMDFCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { - - private object[] results; - - internal mdfeStatusServicoMDFCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) { - this.results = results; - } - - /// - public System.Xml.XmlNode Result { - get { - this.RaiseExceptionIfNecessary(); - return ((System.Xml.XmlNode)(this.results[0])); - } - } - } -} \ No newline at end of file diff --git a/MDFe.Wsdl/MDFe.Wsdl.csproj b/MDFe.Wsdl/MDFe.Wsdl.csproj index 150504771..2c60a1325 100755 --- a/MDFe.Wsdl/MDFe.Wsdl.csproj +++ b/MDFe.Wsdl/MDFe.Wsdl.csproj @@ -1,59 +1,12 @@ - - - + + - Debug - AnyCPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540} - Library - Properties - MDFe.Wsdl - MDFe.Wsdl - v4.5 - 512 - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - + - - - - - - - - + - - - \ No newline at end of file + + diff --git a/MDFe.Wsdl/MDFe.Wsdl.csproj.DotSettings b/MDFe.Wsdl/MDFe.Wsdl.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/MDFe.Wsdl/MDFe.Wsdl.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/MDFe.Wsdl/MDFeConsultaNaoEncerrados/MDFeConsNaoEnc.cs b/MDFe.Wsdl/MDFeConsultaNaoEncerrados/MDFeConsNaoEnc.cs new file mode 100644 index 000000000..8cf05de12 --- /dev/null +++ b/MDFe.Wsdl/MDFeConsultaNaoEncerrados/MDFeConsNaoEnc.cs @@ -0,0 +1,90 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace MDFe.Wsdl.MDFeConsultaNaoEncerrados +{ + public class MDFeConsNaoEnc + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao WsdlConfiguracao; + + public MDFeConsNaoEnc(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + WsdlConfiguracao = configuracao; + soapEnvelope = new SoapEnvelope + { + head = new ResponseHead + { + mdfeCabecMsg = new CTe.CTeOSDocumento.Common.mdfeCabecMsg + { + versaoDados = configuracao.Versao, + cUF = configuracao.CodigoIbgeEstado + } + } + }; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public async Task mdfeConsNaoEncAsync(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeNaoEncerrado, "retConsMDFeNaoEnc"); + } + + public XmlNode mdfeConsNaoEnc(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeNaoEncerrado, "retConsMDFeNaoEnc"); + } + + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc")] + public T mdfeCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsNaoEnc")] + public T mdfeDadosMsg { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Wsdl/MDFeConsultaProtoloco/MDFeConsulta.cs b/MDFe.Wsdl/MDFeConsultaProtoloco/MDFeConsulta.cs new file mode 100644 index 000000000..69cc2f93e --- /dev/null +++ b/MDFe.Wsdl/MDFeConsultaProtoloco/MDFeConsulta.cs @@ -0,0 +1,90 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace MDFe.Wsdl.MDFeConsultaProtoloco +{ + public class MDFeConsulta + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao WsdlConfiguracao; + + public MDFeConsulta(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + WsdlConfiguracao = configuracao; + soapEnvelope = new SoapEnvelope + { + head = new ResponseHead + { + mdfeCabecMsg = new CTe.CTeOSDocumento.Common.mdfeCabecMsg + { + versaoDados = configuracao.Versao, + cUF = configuracao.CodigoIbgeEstado + } + } + }; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public async Task mdfeConsultaMDFAsync(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeConsulta, "retConsSitMDFe"); + } + + public XmlNode mdfeConsultaMDF(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeConsulta, "retConsSitMDFe"); + } + + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta")] + public T mdfeCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta")] + public T mdfeDadosMsg { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Wsdl/MDFeEventos/MDFeRecepcaoEvento.cs b/MDFe.Wsdl/MDFeEventos/MDFeRecepcaoEvento.cs new file mode 100644 index 000000000..ef6af2fa3 --- /dev/null +++ b/MDFe.Wsdl/MDFeEventos/MDFeRecepcaoEvento.cs @@ -0,0 +1,90 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace MDFe.Wsdl.MDFeEventos +{ + public class MDFeRecepcaoEvento + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao WsdlConfiguracao; + + public MDFeRecepcaoEvento(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + WsdlConfiguracao = configuracao; + soapEnvelope = new SoapEnvelope + { + head = new ResponseHead + { + mdfeCabecMsg = new CTe.CTeOSDocumento.Common.mdfeCabecMsg + { + versaoDados = configuracao.Versao, + cUF = configuracao.CodigoIbgeEstado + } + } + }; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public async Task mdfeRecepcaoEventoAsync(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeEvento, "retEventoMDFe"); + } + + public XmlNode mdfeRecepcaoEvento(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeEvento, "retEventoMDFe"); + } + + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento")] + public T mdfeCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoEvento")] + public T mdfeDadosMsg { get; set; } + } +} diff --git a/MDFe.Wsdl/MDFeRecepcao/MDFeRecepcao.cs b/MDFe.Wsdl/MDFeRecepcao/MDFeRecepcao.cs new file mode 100644 index 000000000..d92b4c221 --- /dev/null +++ b/MDFe.Wsdl/MDFeRecepcao/MDFeRecepcao.cs @@ -0,0 +1,90 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace MDFe.Wsdl.MDFeRecepcao +{ + public class MDFeRecepcao + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao configuracao; + + + public MDFeRecepcao(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + this.configuracao = configuracao; + soapEnvelope = new SoapEnvelope + { + head = new ResponseHead + { + mdfeCabecMsg = new CTe.CTeOSDocumento.Common.mdfeCabecMsg + { + versaoDados = configuracao.Versao, + cUF = configuracao.CodigoIbgeEstado + } + } + }; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public XmlNode mdfeRecepcaoLote(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, TipoEvento.MDFeRecepcao, "retEnviMDFe"); + } + + public async Task mdfeRecepcaoLoteAsync(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, configuracao, TipoEvento.MDFeRecepcao, "retEnviMDFe"); + } + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao")] + public T mdfeCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcao")] + public T mdfeDadosMsg { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Wsdl/MDFeRecepcao/Sincrono/MDFeRecepcaoSinc.cs b/MDFe.Wsdl/MDFeRecepcao/Sincrono/MDFeRecepcaoSinc.cs new file mode 100644 index 000000000..a673160bc --- /dev/null +++ b/MDFe.Wsdl/MDFeRecepcao/Sincrono/MDFeRecepcaoSinc.cs @@ -0,0 +1,65 @@ +using CTe.CTeOSDocumento.Common; +using DFe.Utils; +using System; +using System.Net; +using System.Xml; +using System.Xml.Serialization; + +namespace MDFe.Wsdl.MDFeRecepcao.Sincrono +{ + public class MDFeRecepcaoSinc + { + private readonly SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private readonly WsdlConfiguracao configuracao; + + /// + /// Cria o cabeçalho do envelope a ser enviado e atribui as configurações do WSDL. + /// + /// + public MDFeRecepcaoSinc(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + this.configuracao = configuracao; + soapEnvelope = new SoapEnvelope(); + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public XmlNode mdfeRecepcao(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = Convert.ToBase64String(Compressao.Zip(mdfeDadosMsg.OuterXml)) + }; + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, TipoEvento.MDFeRecepcaoSinc, "retMDFe"); + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRecepcaoSinc")] + public T mdfeDadosMsg { get; set; } + } + } +} diff --git a/MDFe.Wsdl/MDFeRetRecepcao/MDFeRetRecepcao.cs b/MDFe.Wsdl/MDFeRetRecepcao/MDFeRetRecepcao.cs new file mode 100644 index 000000000..82d86cc53 --- /dev/null +++ b/MDFe.Wsdl/MDFeRetRecepcao/MDFeRetRecepcao.cs @@ -0,0 +1,89 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace MDFe.Wsdl.MDFeRetRecepcao +{ + public class MDFeRetRecepcao + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao WsdlConfiguracao; + + public MDFeRetRecepcao(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + WsdlConfiguracao = configuracao; + soapEnvelope = new SoapEnvelope + { + head = new ResponseHead + { + mdfeCabecMsg = new CTe.CTeOSDocumento.Common.mdfeCabecMsg + { + versaoDados = configuracao.Versao, + cUF = configuracao.CodigoIbgeEstado + } + } + }; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public async Task mdfeRetRecepcaoAsync(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeRetRecepcao, "retConsReciMDFe"); + } + + public XmlNode mdfeRetRecepcao(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeRetRecepcao, "retConsReciMDFe"); + } + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao")] + public T mdfeCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeRetRecepcao")] + public T mdfeDadosMsg { get; set; } + } +} \ No newline at end of file diff --git a/MDFe.Wsdl/MDFeSatusServico/MDFeStatusServico.cs b/MDFe.Wsdl/MDFeSatusServico/MDFeStatusServico.cs new file mode 100644 index 000000000..f1f02f1ec --- /dev/null +++ b/MDFe.Wsdl/MDFeSatusServico/MDFeStatusServico.cs @@ -0,0 +1,90 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace MDFe.Wsdl.Gerado.MDFeStatusServico +{ + public class MDFeStatusServico + { + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private WsdlConfiguracao WsdlConfiguracao; + + public MDFeStatusServico(WsdlConfiguracao configuracao) + { + if (configuracao == null) + throw new ArgumentNullException(); + + WsdlConfiguracao = configuracao; + soapEnvelope = new SoapEnvelope + { + head = new ResponseHead + { + mdfeCabecMsg = new CTe.CTeOSDocumento.Common.mdfeCabecMsg + { + versaoDados = configuracao.Versao, + cUF = configuracao.CodigoIbgeEstado + } + } + }; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + } + + /// + /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. + /// + /// + /// XmlNode + public async Task mdfeStatusServicoMDFAsync(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeStatusServico, "retConsStatServMDFe"); + } + + public XmlNode mdfeStatusServicoMDF(XmlNode mdfeDadosMsg) + { + soapEnvelope.body = new ResponseBody + { + mdfeDadosMsg = mdfeDadosMsg + }; + return RequestBuilderAndSender.Execute(soapEnvelope, WsdlConfiguracao, TipoEvento.MDFeStatusServico, "retConsStatServMDFe"); + } + + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseHead head { get; set; } + + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + public class ResponseHead : CommonResponseHead + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico")] + public T mdfeCabecMsg { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico")] + public T mdfeDadosMsg { get; set; } + } +} diff --git a/MDFe.Wsdl/Properties/AssemblyInfo.cs b/MDFe.Wsdl/Properties/AssemblyInfo.cs deleted file mode 100755 index 25a4f660f..000000000 --- a/MDFe.Wsdl/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MDFe.Wsdl")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MDFe.Wsdl")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("81b3bc65-a499-4e19-8ab4-09c6d874c540")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/NFe.AppTeste.NetCore/NFe.AppTeste.NetCore.csproj b/NFe.AppTeste.NetCore/NFe.AppTeste.NetCore.csproj index 7a9801892..d332300a6 100644 --- a/NFe.AppTeste.NetCore/NFe.AppTeste.NetCore.csproj +++ b/NFe.AppTeste.NetCore/NFe.AppTeste.NetCore.csproj @@ -1,31 +1,32 @@  - - Exe - netcoreapp2.2 - + + Exe + net6.0 + + false + - - - - - - - + + + + + + - - - True - True - Resources.resx - - + + + True + True + Resources.resx + + - - - ResXFileCodeGenerator - Resources.Designer.cs - - + + + ResXFileCodeGenerator + Resources.Designer.cs + + diff --git a/NFe.AppTeste.NetCore/Program.cs b/NFe.AppTeste.NetCore/Program.cs index 9b9afa91e..31ee942e2 100644 --- a/NFe.AppTeste.NetCore/Program.cs +++ b/NFe.AppTeste.NetCore/Program.cs @@ -1,7 +1,7 @@ using DFe.Classes.Flags; using DFe.Utils; using DFe.Utils.Assinatura; -using DFe.Utils.Standard; +using DFe.Utils; using NFe.Classes; using NFe.Classes.Informacoes; using NFe.Classes.Informacoes.Cobranca; @@ -49,7 +49,7 @@ private static void Main(string[] args) Console.WriteLine("Bem vindo ao demo do projeto NF-e com suporte ao NetStandard 2.0!"); Console.WriteLine("Este exemplo necessita do arquivo Configuração.xml já criado."); Console.WriteLine("Caso necessite criar, utilize o app 'NFe.AppTeste'. e clique em 'Salvar Configuração para Arquivo'"); - Console.WriteLine("Em seguida copie o 'configuração.xml' para a pasta bin\\Debug\\netcoreapp2.2 deste projeto.\n"); + Console.WriteLine("Em seguida copie o 'configuração.xml' para a pasta bin\\Debug\\net5 deste projeto.\n"); Console.ReadKey(); //inicializa configuracoes bases (podem ser carregadas novas aqui posteriormente com a opção 99) @@ -150,7 +150,7 @@ private static async Task CarregaDadosCertificado() string password = Console.ReadLine(); Console.Clear(); - var cert = CertificadoDigitaoUtil.ObterDoCaminho(caminho, password); + var cert = CertificadoDigitalUtils.ObterDoCaminho(caminho, password); _configuracoes.CfgServico.Certificado.Serial = cert.SerialNumber; Console.WriteLine("Certificado encontrado e carregado..."); Console.WriteLine("Issuer: " + cert.IssuerName); @@ -698,7 +698,7 @@ private static det GetDetalhe(int i, CRT crt, ModeloDocumento modelo) //Caso você resolva utilizar método ObterIcmsBasico(), comente esta proxima linha TipoICMS = - crt == CRT.SimplesNacional + crt == CRT.SimplesNacional || crt == CRT.SimplesNacionalMei ? InformarCSOSN(Csosnicms.Csosn102) : InformarICMS(Csticms.Cst00, VersaoServico.Versao310) }, @@ -1033,8 +1033,8 @@ private static List GetPagamento(ICMSTot icmsTot, VersaoServico versao) { detPag = new List { - new detPag {tPag = FormaPagamento.fpCreditoLoja, vPag = valorPagto}, - new detPag {tPag = FormaPagamento.fpCreditoLoja, vPag = icmsTot.vNF - valorPagto} + new detPag {tPag = FormaPagamento.fpCreditoEmLoja, vPag = valorPagto}, + new detPag {tPag = FormaPagamento.fpCreditoEmLoja, vPag = icmsTot.vNF - valorPagto} } } }; diff --git a/NFe.AppTeste/ConfiguracaoApp.cs b/NFe.AppTeste/ConfiguracaoApp.cs index abe9c8b40..4871a1505 100644 --- a/NFe.AppTeste/ConfiguracaoApp.cs +++ b/NFe.AppTeste/ConfiguracaoApp.cs @@ -60,6 +60,7 @@ public ConfiguracaoApp() ConfiguracaoEmail = new ConfiguracaoEmail("email@dominio.com", "senha", "Envio de NFE", Resources.MensagemHtml, "smtp.dominio.com", 587, true, true); ConfiguracaoCsc = new ConfiguracaoCsc("000001", ""); ConfiguracaoDanfeNfce = new ConfiguracaoDanfeNfce(NfceDetalheVendaNormal.UmaLinha, NfceDetalheVendaContigencia.UmaLinha); + // todo ConfiguracaoUrls.FactoryUrl = FactoryUrlCearaMudanca.CriaFactoryUrl(); } public ConfiguracaoServico CfgServico @@ -82,6 +83,8 @@ public ConfiguracaoServico CfgServico public ConfiguracaoCsc ConfiguracaoCsc { get; set; } public ConfiguracaoDanfeNfce ConfiguracaoDanfeNfce { get; set; } + public bool EnviarTributacaoIbsCbsIs { get; set; } + /// /// Salva os dados de CfgServico em um arquivo XML /// diff --git a/NFe.AppTeste/MainWindow.xaml b/NFe.AppTeste/MainWindow.xaml index ea1e212a1..b7811b2dd 100644 --- a/NFe.AppTeste/MainWindow.xaml +++ b/NFe.AppTeste/MainWindow.xaml @@ -1,58 +1,59 @@  + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + ObjectType="{x:Type sys:Enum}" + x:Key="Estados"> - + - + - + - + @@ -61,110 +62,166 @@ - - + + - - [XmlElement(Order = 13)] + [XmlElement(Order = 14)] public decimal? vFCP { get { return _vFcp.Arredondar(2); } @@ -184,6 +193,54 @@ public bool vFCPSpecified get { return vFCP.HasValue; } } + /// + /// N17d - Percentual do diferimento do ICMS relativo ao Fundo de Combate à Pobreza(FCP) + /// Versão 4.00 + /// + [XmlElement(Order = 15)] + public decimal? pFCPDif + { + get { return _pFCPDif.Arredondar(4); } + set { _pFCPDif = value.Arredondar(4); } + } + + public bool ShouldSerializepFCPDif() + { + return pFCPDif.HasValue; + } + + /// + /// N17e - Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) diferido + /// Versão 4.00 + /// + [XmlElement(Order = 16)] + public decimal? vFCPDif + { + get { return _vFCPDif.Arredondar(2); } + set { _vFCPDif = value.Arredondar(2); } + } + + public bool ShouldSerializevFCPDif() + { + return vFCPDif.HasValue; + } + + /// + /// N17f - Valor efetivo do ICMS relativo ao Fundo de Combate à Pobreza(FCP) + /// Versão 4.00 + /// + [XmlElement(Order = 17)] + public decimal? vFCPEfet + { + get { return _vFCPEfet.Arredondar(2); } + set { _vFCPEfet = value.Arredondar(2); } + } + + public bool ShouldSerializevFCPEfet() + { + return vFCPEfet.HasValue; + } + public bool ShouldSerializemodBC() { return modBC.HasValue; diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS53.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS53.cs new file mode 100644 index 000000000..b7cb06633 --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS53.cs @@ -0,0 +1,176 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual +{ + public class ICMS53 : ICMSBasico + { + private decimal? _qBCMono; + private decimal? _adRemICMS; + private decimal? _vICMSMonoOp; + private decimal? _pDif; + private decimal? _vICMSMono; + private decimal? _qBCMonoDif; + private decimal? _adRemICMSDif; + private decimal? _vICMSMonoDif; + + /// + /// N11 - Origem da Mercadoria + /// + [XmlElement(Order = 1)] + public OrigemMercadoria orig { get; set; } + + /// + /// N12- Situação Tributária + /// + [XmlElement(Order = 2)] + public Csticms CST { get; set; } + + /// + /// N37a - Quantidade Tributada + /// + [XmlElement(Order = 3)] + public decimal? qBCMono + { + get { return _qBCMono.Arredondar(4); } + set { _qBCMono = value.Arredondar(4); } + } + public bool ShouldSerializeqBCMono() + { + return qBCMono.HasValue; + } + + /// + /// N38 - Alíquota adRem do imposto + /// + [XmlElement(Order = 4)] + public decimal? adRemICMS + { + get { return _adRemICMS.Arredondar(4); } + set { _adRemICMS = value.Arredondar(4); } + } + public bool ShouldSerializeadRemICMS() + { + return adRemICMS.HasValue; + } + + /// + /// N41a - Valor do ICMS da operação + /// + [XmlElement(Order = 5)] + public decimal? vICMSMonoOp + { + get { return _vICMSMonoOp.Arredondar(2); } + set { _vICMSMonoOp = value.Arredondar(2); } + } + public bool ShouldSerializevICMSMonoOp() + { + return vICMSMonoOp.HasValue; + } + + /// + /// N42 - Percentual do diferimento + /// + [XmlElement(Order = 6)] + public decimal? pDif + { + get { return _pDif.Arredondar(4); } + set { _pDif = value.Arredondar(4); } + } + public bool ShouldSerializepDif() + { + return pDif.HasValue; + } + + /// + /// N43 - Valor do ICMS diferido + /// + [XmlElement(Order = 7)] + public decimal? vICMSMonoDif + { + get { return _vICMSMonoDif.Arredondar(2); } + set { _vICMSMonoDif = value.Arredondar(2); } + } + public bool ShouldSerializevICMSMonoDif() + { + return vICMSMonoDif.HasValue; + } + + /// + /// N39 - Valor do ICMS próprio devido + /// + [XmlElement(Order = 8)] + public decimal? vICMSMono + { + get { return _vICMSMono.Arredondar(2); } + set { _vICMSMono = value.Arredondar(2); } + } + public bool ShouldSerializevICMSMono() + { + return vICMSMono.HasValue; + } + + /// + /// N41a - Quantidade tributada diferida + /// Campo removido na NT 2023.001 v1.20 - Informar nulo para novos documentos. + /// + [XmlElement(Order = 9)] + public decimal? qBCMonoDif + { + get { return _qBCMonoDif.Arredondar(4); } + set { _qBCMonoDif = value.Arredondar(4); } + } + public bool ShouldSerializeqBCMonoDif() + { + return qBCMonoDif.HasValue; + } + + /// + /// N42 - Alíquota ad rem do imposto diferido + /// Campo removido na NT 2023.001 v1.20 - Informar nulo para novos documentos. + /// + [XmlElement(Order = 10)] + public decimal? adRemICMSDif + { + get { return _adRemICMSDif.Arredondar(4); } + set { _adRemICMSDif = value.Arredondar(4); } + } + public bool ShouldSerializeadRemICMSDif() + { + return adRemICMSDif.HasValue; + } + + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS60.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS60.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS60.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS60.cs diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS61.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS61.cs new file mode 100644 index 000000000..cc31c57ba --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS61.cs @@ -0,0 +1,92 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual +{ + public class ICMS61 : ICMSBasico + { + private decimal? _qBCMonoRet; + private decimal? _adRemICMSRet; + private decimal? _vICMSMonoRet; + + /// + /// N11 - Origem da Mercadoria + /// + [XmlElement(Order = 1)] + public OrigemMercadoria orig { get; set; } + + /// + /// N12- Situação Tributária + /// + [XmlElement(Order = 2)] + public Csticms CST { get; set; } + + /// + /// N43a - Quantidade tributada retida anteriormente + /// + [XmlElement(Order = 3)] + public decimal? qBCMonoRet + { + get { return _qBCMonoRet.Arredondar(4); } + set { _qBCMonoRet = value.Arredondar(4); } + } + + public bool ShouldSerializeqBCMonoRet() + { + return qBCMonoRet.HasValue; + } + + /// + /// N44 - Alíquota ad rem do imposto retido anteriormente + /// + [XmlElement(Order = 4)] + public decimal? adRemICMSRet + { + get { return _adRemICMSRet.Arredondar(4); } + set { _adRemICMSRet = value.Arredondar(4); } + } + + /// + /// N45 - Valor do ICMS retido anteriormente + /// + [XmlElement(Order = 5)] + public decimal? vICMSMonoRet + { + get { return _vICMSMonoRet.Arredondar(2); } + set { _vICMSMonoRet = value.Arredondar(2); } + } + + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS70.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS70.cs similarity index 88% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS70.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS70.cs index 26814692c..ea570f874 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS70.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS70.cs @@ -53,6 +53,7 @@ public class ICMS70 : ICMSBasico private decimal? _vBcfcpst; private decimal? _pFcpst; private decimal? _vFcpst; + private decimal? _vICMSSTDeson; /// /// N11 - Origem da Mercadoria @@ -255,8 +256,8 @@ public bool pFCPSTSpecified [XmlElement(Order = 19)] public decimal? vFCPST { - get { return _vFcpst; } - set { _vFcpst = value; } + get { return _vFcpst.Arredondar(2); } + set { _vFcpst = value.Arredondar(2); } } public bool vFCPSTSpecified @@ -279,6 +280,41 @@ public decimal? vICMSDeson /// [XmlElement(Order = 21)] public MotivoDesoneracaoIcms? motDesICMS { get; set; } + + /// + /// N28b - Indica se o valor do ICMS desonerado (vICMSDeson) deduz + /// do valor do item (vProd). (NT 2023.004) + /// + [XmlElement(Order = 22)] + public DeduzDesoneracaoNoProduto? indDeduzDeson { get; set; } + + /// + /// N33a - Valor do ICMS- ST desonerado + /// Versão 4.00 + /// + [XmlElement(Order = 23)] + public decimal? vICMSSTDeson + { + get { return _vICMSSTDeson.Arredondar(2); } + set { _vICMSSTDeson = value.Arredondar(2); } + } + + public bool ShouldSerializevICMSSTDeson() + { + return vICMSSTDeson.HasValue; + } + + /// + /// N33b - Motivo da desoneração do ICMS- ST + /// Versão 4.00 + /// + [XmlElement(Order = 24)] + public MotivoDesoneracaoIcmsSt? motDesICMSST { get; set; } + + public bool ShouldSerializemotDesICMSST() + { + return motDesICMSST.HasValue; + } public bool ShouldSerializepMVAST() { @@ -299,5 +335,10 @@ public bool ShouldSerializemotDesICMS() { return motDesICMS.HasValue; } + + public bool ShouldSerializeindDeduzDeson() + { + return indDeduzDeson.HasValue; + } } } \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS90.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS90.cs new file mode 100644 index 000000000..b721dabdd --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS90.cs @@ -0,0 +1,494 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual +{ + public class ICMS90 : ICMSBasico + { + private decimal? _vBc; + private decimal? _pRedBc; + private decimal? _pIcms; + private decimal? _vIcmsOp; + private decimal? _pDif; + private decimal? _vIcmsDif; + private decimal? _vIcms; + private decimal? _pMvast; + private decimal? _pRedBcst; + private decimal? _vBcst; + private decimal? _pIcmsst; + private decimal? _vIcmsst; + private decimal? _vIcmsDeson; + private decimal? _vBcfcp; + private decimal? _pFcp; + private decimal? _vFcp; + private decimal? _pFCPDif; + private decimal? _vFCPDif; + private decimal? _vFCPEfet; + private decimal? _vBcfcpst; + private decimal? _pFcpst; + private decimal? _vFcpst; + private decimal? _vICMSSTDeson; + + /// + /// N11 - Origem da Mercadoria + /// + [XmlElement(Order = 1)] + public OrigemMercadoria orig { get; set; } + + /// + /// N12- Situação Tributária + /// + [XmlElement(Order = 2)] + public Csticms CST { get; set; } + + /// + /// N13 - Modalidade de determinação da BC do ICMS + /// + [XmlElement(Order = 3)] + public DeterminacaoBaseIcms? modBC { get; set; } + + /// + /// N15 - Valor da BC do ICMS + /// + [XmlElement(Order = 4)] + public decimal? vBC + { + get { return _vBc.Arredondar(2); } + set { _vBc = value.Arredondar(2); } + } + + /// + /// N14 - Percentual de redução da BC + /// + [XmlElement(Order = 5)] + public decimal? pRedBC + { + get { return _pRedBc.Arredondar(4); } + set { _pRedBc = value.Arredondar(4); } + } + + /// + /// N14a - Código de Benefício Fiscal na UF aplicado ao item quando houver RBC. + /// + [XmlElement(Order = 6)] + public string cBenefRBC { get; set; } + + /// + /// N16 - Alíquota do imposto + /// + [XmlElement(Order = 7)] + public decimal? pICMS + { + get { return _pIcms.Arredondar(4); } + set { _pIcms = value.Arredondar(4); } + } + + /// + /// N16b - Valor do ICMS da Operação + /// + [XmlElement(Order = 8)] + public decimal? vICMSOp + { + get { return _vIcmsOp.Arredondar(2); } + set { _vIcmsOp = value.Arredondar(2); } + } + + /// + /// N16c - Percentual do diferimento + /// + [XmlElement(Order = 9)] + public decimal? pDif + { + get { return _pDif.Arredondar(4); } + set { _pDif = value.Arredondar(4); } + } + + /// + /// N16d - Valor do ICMS diferido + /// + [XmlElement(Order = 10)] + public decimal? vICMSDif + { + get { return _vIcmsDif.Arredondar(2); } + set { _vIcmsDif = value.Arredondar(2); } + } + + /// + /// N17 - Valor do ICMS + /// + [XmlElement(Order = 11)] + public decimal? vICMS + { + get { return _vIcms.Arredondar(2); } + set { _vIcms = value.Arredondar(2); } + } + + /// + /// N17a - Valor da Base de Cálculo do FCP + /// Versão 4.00 + /// + [XmlElement(Order = 12)] + public decimal? vBCFCP + { + get { return _vBcfcp.Arredondar(2); } + set { _vBcfcp = value.Arredondar(2); } + } + + public bool vBCFCPSpecified + { + get { return vBCFCP.HasValue; } + } + + /// + /// N17b - Percentual do Fundo de Combate à Pobreza (FCP) + /// Versão 4.00 + /// + [XmlElement(Order = 13)] + public decimal? pFCP + { + get { return _pFcp.Arredondar(4); } + set { _pFcp = value.Arredondar(4); } + } + + public bool pFCPSpecified + { + get { return pFCP.HasValue; } + } + + /// + /// N17c - Valor do Fundo de Combate à Pobreza (FCP) + /// Versão 4.00 + /// + [XmlElement(Order = 14)] + public decimal? vFCP + { + get { return _vFcp.Arredondar(2); } + set { _vFcp = value.Arredondar(2); } + } + + public bool vFCPSpecified + { + get { return vFCP.HasValue; } + } + + /// + /// N17d - Percentual do diferimento do ICMS relativo ao Fundo de Combate à Pobreza (FCP) + /// Versão 4.00 + /// + [XmlElement(Order = 15)] + public decimal? pFCPDif + { + get { return _pFCPDif.Arredondar(4); } + set { _pFCPDif = value.Arredondar(4); } + } + + /// + /// N17e - Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) diferido + /// Versão 4.00 + /// + [XmlElement(Order = 16)] + public decimal? vFCPDif + { + get { return _vFCPDif.Arredondar(2); } + set { _vFCPDif = value.Arredondar(2); } + } + + /// + /// N17f - Valor efetivo do ICMS relativo ao Fundo de Combate à Pobreza (FCP) + /// Versão 4.00 + /// + [XmlElement(Order = 17)] + public decimal? vFCPEfet + { + get { return _vFCPEfet.Arredondar(2); } + set { _vFCPEfet = value.Arredondar(2); } + } + + /// + /// N18 - Modalidade de determinação da BC do ICMS ST + /// + [XmlElement(Order = 18)] + public DeterminacaoBaseIcmsSt? modBCST { get; set; } + + /// + /// N19 - Percentual da margem de valor Adicionado do ICMS ST + /// + [XmlElement(Order = 19)] + public decimal? pMVAST + { + get { return _pMvast.Arredondar(4); } + set { _pMvast = value.Arredondar(4); } + } + + /// + /// N20 - Percentual da Redução de BC do ICMS ST + /// + [XmlElement(Order = 20)] + public decimal? pRedBCST + { + get { return _pRedBcst.Arredondar(4); } + set { _pRedBcst = value.Arredondar(4); } + } + + /// + /// N21 - Valor da BC do ICMS ST + /// + [XmlElement(Order = 21)] + public decimal? vBCST + { + get { return _vBcst.Arredondar(2); } + set { _vBcst = value.Arredondar(2); } + } + + /// + /// N22 - Alíquota do imposto do ICMS ST + /// + [XmlElement(Order = 22)] + public decimal? pICMSST + { + get { return _pIcmsst.Arredondar(4); } + set { _pIcmsst = value.Arredondar(4); } + } + + /// + /// N23 - Valor do ICMS ST + /// + [XmlElement(Order = 23)] + public decimal? vICMSST + { + get { return _vIcmsst.Arredondar(2); } + set { _vIcmsst = value.Arredondar(2); } + } + + /// + /// N23a - Valor da Base de Cálculo do FCP retido por Substituição Tributária + /// Versão 4.00 + /// + [XmlElement(Order = 24)] + public decimal? vBCFCPST + { + get { return _vBcfcpst.Arredondar(2); } + set { _vBcfcpst = value.Arredondar(2); } + } + + public bool vBCFCPSTSpecified + { + get { return vBCFCPST.HasValue; } + } + + /// + /// N23b - Percentual do FCP retido por Substituição Tributária + /// Versão 4.00 + /// + [XmlElement(Order = 25)] + public decimal? pFCPST + { + get { return _pFcpst.Arredondar(4); } + set { _pFcpst = value.Arredondar(4); } + } + + public bool pFCPSTSpecified + { + get { return pFCPST.HasValue; } + } + + /// + /// N23d - Valor do FCP retido por Substituição Tributária + /// Versão 4.00 + /// + [XmlElement(Order = 26)] + public decimal? vFCPST + { + get { return _vFcpst.Arredondar(2); } + set { _vFcpst = value.Arredondar(2); } + } + + public bool vFCPSTSpecified + { + get { return vFCPST.HasValue; } + } + + /// + /// N27a - Valor do ICMS desonerado + /// + [XmlElement(Order = 27)] + public decimal? vICMSDeson + { + get { return _vIcmsDeson.Arredondar(2); } + set { _vIcmsDeson = value.Arredondar(2); } + } + + /// + /// N28 - Motivo da desoneração do ICMS + /// + [XmlElement(Order = 28)] + public MotivoDesoneracaoIcms? motDesICMS { get; set; } + + /// + /// N28b - Indica se o valor do ICMS desonerado (vICMSDeson) deduz + /// do valor do item (vProd). (NT 2023.004) + /// + [XmlElement(Order = 29)] + public DeduzDesoneracaoNoProduto? indDeduzDeson { get; set; } + + /// + /// N33a - Valor do ICMS- ST desonerado + /// Versão 4.00 + /// + [XmlElement(Order = 30)] + public decimal? vICMSSTDeson + { + get { return _vICMSSTDeson.Arredondar(2); } + set { _vICMSSTDeson = value.Arredondar(2); } + } + + public bool ShouldSerializevICMSSTDeson() + { + return vICMSSTDeson.HasValue; + } + + /// + /// N33b - Motivo da desoneração do ICMS- ST + /// Versão 4.00 + /// + [XmlElement(Order = 31)] + public MotivoDesoneracaoIcmsSt? motDesICMSST { get; set; } + + public bool ShouldSerializemotDesICMSST() + { + return motDesICMSST.HasValue; + } + + public bool ShouldSerializemodBC() + { + return modBC.HasValue; + } + + public bool ShouldSerializevBC() + { + return vBC.HasValue; + } + + public bool ShouldSerializepRedBC() + { + return pRedBC.HasValue; + } + + public bool ShouldSerializepICMS() + { + return pICMS.HasValue; + } + + public bool ShouldSerializevICMSOp() + { + return vICMSOp.HasValue; + } + + public bool ShouldSerializepDif() + { + return pDif.HasValue; + } + + public bool ShouldSerializevICMSDif() + { + return vICMSDif.HasValue; + } + + public bool ShouldSerializevICMS() + { + return vICMS.HasValue; + } + + public bool ShouldSerializepFCPDif() + { + return pFCPDif.HasValue; + } + + public bool ShouldSerializevFCPDif() + { + return vFCPDif.HasValue; + } + + public bool ShouldSerializevFCPEfet() + { + return vFCPEfet.HasValue; + } + + public bool ShouldSerializemodBCST() + { + return modBCST.HasValue; + } + + public bool ShouldSerializepMVAST() + { + return pMVAST.HasValue; + } + + public bool ShouldSerializepRedBCST() + { + return pRedBCST.HasValue; + } + + public bool ShouldSerializevBCST() + { + return vBCST.HasValue; + } + + public bool ShouldSerializepICMSST() + { + return pICMSST.HasValue; + } + + public bool ShouldSerializevICMSST() + { + return vICMSST.HasValue; + } + + public bool ShouldSerializevICMSDeson() + { + return vICMSDeson.HasValue; + } + + public bool ShouldSerializemotDesICMS() + { + return motDesICMS.HasValue; + } + + public bool ShouldSerializeindDeduzDeson() + { + return indDeduzDeson.HasValue; + } + } +} diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSPart.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSPart.cs similarity index 75% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSPart.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSPart.cs index 17a7dea27..39c73c8be 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSPart.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSPart.cs @@ -46,7 +46,11 @@ public class ICMSPart : ICMSBasico private decimal _vBcst; private decimal _pIcmsst; private decimal _vIcmsst; + private decimal? _vBCFCPST; + private decimal? _pFCPST; + private decimal? _vFCPST; private decimal _pBcOp; + private decimal? _vIcmsDeson; /// /// N11 - Origem da Mercadoria @@ -163,9 +167,39 @@ public decimal vICMSST } /// - /// N25 - Percentual da BC operação própria + /// N23.a - Valor da Base de Cálculo do FCP ST /// [XmlElement(Order = 14)] + public decimal? vBCFCPST + { + get { return _vBCFCPST; } + set { _vBCFCPST = value.Arredondar(2); } + } + + /// + /// N23.b - Percentual do FCP ST + /// + [XmlElement(Order = 15)] + public decimal? pFCPST + { + get { return _pFCPST; } + set { _pFCPST = value.Arredondar(4); } + } + + /// + /// N23.c - Valor do FCP ST + /// + [XmlElement(Order = 16)] + public decimal? vFCPST + { + get { return _vFCPST; } + set { _vFCPST = value.Arredondar(2); } + } + + /// + /// N25 - Percentual da BC operação própria + /// + [XmlElement(Order = 17)] public decimal pBCOp { get { return _pBcOp; } @@ -175,9 +209,32 @@ public decimal pBCOp /// /// N24 - UF para qual é devido o ICMS ST /// - [XmlElement(Order = 15)] + [XmlElement(Order = 18)] public string UFST { get; set; } + /// + /// N28a - Valor do ICMS desonerado + /// + [XmlElement(Order = 19)] + public decimal? vICMSDeson + { + get { return _vIcmsDeson.Arredondar(2); } + set { _vIcmsDeson = value.Arredondar(2); } + } + + /// + /// N28 - Motivo da desoneração do ICMS + /// + [XmlElement(Order = 20)] + public MotivoDesoneracaoIcms? motDesICMS { get; set; } + + /// + /// N28b - Indica se o valor do ICMS desonerado (vICMSDeson) deduz + /// do valor do item (vProd). (NT 2023.004) + /// + [XmlElement(Order = 21)] + public DeduzDesoneracaoNoProduto? indDeduzDeson { get; set; } + public bool ShouldSerializepRedBC() { return pRedBC.HasValue; @@ -192,5 +249,36 @@ public bool ShouldSerializepRedBCST() { return pRedBCST.HasValue; } + + public bool ShouldSerializevBCFCPST() + { + return vBCFCPST.HasValue; + } + + public bool ShouldSerializepFCPST() + { + return pFCPST.HasValue; + } + + public bool ShouldSerializevFCPST() + { + return vFCPST.HasValue; + } + + public bool ShouldSerializevICMSDeson() + { + return vICMSDeson.HasValue; + } + + public bool ShouldSerializemotDesICMS() + { + return motDesICMS.HasValue; + } + + public bool ShouldSerializeindDeduzDeson() + { + return indDeduzDeson.HasValue; + } + } -} \ No newline at end of file +} diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN101.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN101.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN101.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN101.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN102.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN102.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN102.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN102.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN201.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN201.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN201.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN201.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN202.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN202.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN202.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN202.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN500.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN500.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN500.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN500.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN900.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN900.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN900.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSSN900.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSST.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSST.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSST.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSST.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSUFDest.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSUFDest.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSUFDest.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMSUFDest.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSBasico.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSBasico.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSBasico.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSBasico.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSTipos.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSTipos.cs similarity index 85% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSTipos.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSTipos.cs index 5d71ebad5..9b01c2c7d 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSTipos.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/Tipos/ICMSTipos.cs @@ -121,14 +121,18 @@ public enum OrigemMercadoria /// /// 00 - Tributada integralmente + /// 02 - Tributação monofásica própria sobre combustíveis /// 10 - Tributada e com cobrança do ICMS por substituição tributária + /// 15 - Tributação monofásica própria e com responsabilidade pela retenção sobre combustíveis /// 20 - Com redução de base de cálculo /// 30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária /// 40 - Isenta /// 41 - Não tributada /// 50 - Suspensão /// 51 - Diferimento + /// 53 - Tributação monofásica sobre combustíveis com recolhimento diferido /// 60 - ICMS cobrado anteriormente por substituição tributária + /// 61 - Tributação monofásica sobre combustíveis cobrada anteriormente /// 70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária /// 90 - Outras /// @@ -141,6 +145,13 @@ public enum Csticms [XmlEnum("00")] Cst00, + /// + /// 02 - Tributação monofásica própria sobre combustíveis + /// + [Description("Tributação monofásica própria sobre combustíveis")] + [XmlEnum("02")] + Cst02, + /// /// 10 - Tributada e com cobrança do ICMS por substituição tributária /// @@ -148,6 +159,13 @@ public enum Csticms [XmlEnum("10")] Cst10, + /// + /// 15 - Tributação monofásica própria e com responsabilidade pela retenção sobre combustíveis + /// + [Description("Tributação monofásica própria e com responsabilidade pela retenção sobre combustíveis")] + [XmlEnum("15")] + Cst15, + /// /// 10 - Tributada e com cobrança do ICMS por substituição tributária /// @@ -162,6 +180,13 @@ public enum Csticms [XmlEnum("20")] Cst20, + /// + /// 20 - Com redução de base de cálculo + /// + [Description("Com redução de base de cálculo")] + [XmlEnum("20")] + CstPart20, + /// /// 30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária /// @@ -204,6 +229,13 @@ public enum Csticms [XmlEnum("51")] Cst51, + /// + /// 53 - Tributação monofásica sobre combustíveis com recolhimento diferido + /// + [Description("Tributação monofásica sobre combustíveis com recolhimento diferido")] + [XmlEnum("53")] + Cst53, + /// /// 60 - ICMS cobrado anteriormente por substituição tributária /// @@ -216,6 +248,13 @@ public enum Csticms /// [XmlEnum("60")] CstRep60, + /// + /// 61 - Tributação monofásica sobre combustíveis cobrada anteriormente + /// + [Description("Tributação monofásica sobre combustíveis cobrada anteriormente")] + [XmlEnum("61")] + Cst61, + /// /// 70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária /// @@ -555,4 +594,59 @@ public enum MotivoDesoneracaoIcms } #endregion + + #region Indicação do valor do ICMS desonerado deduz ou não no produto NT 2023.004 + + /// + /// 0 - alor do ICMS desonerado (vICMSDeson) não deduz do valor do item (vProd) / total da NF-e + /// 1 - Valor do ICMS desonerado (vICMSDeson) deduz do valor do item (vProd) / total da NF-e + /// + public enum DeduzDesoneracaoNoProduto + { + /// + /// 0 - Valor do ICMS desonerado (vICMSDeson) não deduz do + /// valor do item (vProd) / total da NF-e. (NT 2023.004) + /// + [Description("Não deduz do valor do item")] + [XmlEnum("0")] + NaoDeduz, + + /// + /// 1 - Valor do ICMS desonerado (vICMSDeson) deduz do valor + /// do item (vProd) / total da NF-e. (NT 2023.004) + /// + [Description("Deduz do Valor do Iem")] + [XmlEnum("1")] + Deduz, + } + + #endregion + /// + /// 3 – Uso na agropecuária; + /// 9 – Outros. (v2.0) + /// 12 – Órgão de fomento e desenvolvimento agropecuário + /// + public enum MotivoDesoneracaoIcmsSt + { + /// + /// 3 – Uso na agropecuária + /// + [Description("Uso na agropecuária")] + [XmlEnum("3")] + MdiProdutorAgropecuario = 3, + + /// + /// 9 – Outros. (v2.0) + /// + [Description("Outros")] + [XmlEnum("9")] + MdiOutros = 9, + + /// + /// 12 – Fomento agropecuário + /// + [Description("Órgão de fomento e desenvolvimento agropecuário")] + [XmlEnum("12")] + MdiFomentoAgropecuario = 12, + } } diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/Extensions.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Extensions.cs new file mode 100644 index 000000000..2b9e1f412 --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Extensions.cs @@ -0,0 +1,133 @@ +using System; +using System.Reflection; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; + +namespace NFe.Classes.Informacoes.Detalhe.Tributacao +{ + public static class Extensions + { + public static OrigemMercadoria GetIcmsOrig(this ICMSBasico icms) + { + return GetPropOrigemMercadoriaValue(icms, "orig"); + } + + public static Csosnicms GetIcmsCsosn(this ICMSBasico icms) + { + return GetPropCsosnicmsValue(icms, "CSOSN"); + } + + public static Csticms GetIcmsCst(this ICMSBasico icms) + { + return GetPropCsticmsValue(icms, "CST"); + } + + public static decimal GetIcmsPercent(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pICMS"); + } + + public static decimal GetIcmsBcValue(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBC"); + } + + public static decimal GetIcmsBcStValue(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBCST"); + } + + public static decimal GetIcmsDesonValue(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSDeson"); + } + + public static decimal GetIcmsValue(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMS"); + } + + public static decimal GetIcmsStValue(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSST"); + } + + public static decimal GetIpiPercent(this IPIBasico ipi) + { + return GetPropDecimalValue(ipi, "pIPI"); + } + + public static decimal GetIpiValue(this IPIBasico ipi) + { + return GetPropDecimalValue(ipi, "vIPI"); + } + + public static decimal GetPisValue(this PISBasico pis) + { + return GetPropDecimalValue(pis, "vPIS"); + } + + public static decimal GetCofinsValue(this COFINSBasico cofins) + { + return GetPropDecimalValue(cofins, "vCOFINS"); + } + + private static OrigemMercadoria GetPropOrigemMercadoriaValue(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + return (OrigemMercadoria) (property != null ? (OrigemMercadoria?) property.GetValue(instance, null) : OrigemMercadoria.OmNacional); + } + catch (Exception) + { + return OrigemMercadoria.OmNacional; + } + } + + private static Csticms GetPropCsticmsValue(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + return (Csticms) (property != null ? (Csticms?) property.GetValue(instance, null) : Csticms.Cst90); + } + catch (Exception) + { + return Csticms.Cst90; + } + } + + private static Csosnicms GetPropCsosnicmsValue(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + return (Csosnicms) (property != null ? (Csosnicms?) property.GetValue(instance, null) : Csosnicms.Csosn900); + } + catch (Exception) + { + return Csosnicms.Csosn900; + } + } + + private static decimal GetPropDecimalValue(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + + if (property != null) + { + return (decimal?)property.GetValue(instance, null) ?? 0M; + } + + return 0M; + } + catch (Exception) + { + return 0M; + } + } + } +} diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINS.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINS.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINS.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINS.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSAliq.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSAliq.cs similarity index 94% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSAliq.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSAliq.cs index 165b0f99f..ea3c9f2c6 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSAliq.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSAliq.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -43,11 +44,15 @@ public class COFINSAliq : COFINSBasico /// /// S06 - Código de Situação Tributária da COFINS /// + /// + [XmlElement(Order = 1)] public CSTCOFINS CST { get; set; } /// /// S07 - Valor da Base de Cálculo da COFINS /// + /// + [XmlElement(Order = 2)] public decimal vBC { get { return _vBc; } @@ -57,6 +62,8 @@ public decimal vBC /// /// S08 - Alíquota da COFINS (em percentual) /// + /// + [XmlElement(Order = 3)] public decimal pCOFINS { get { return _pCofins; } @@ -66,6 +73,8 @@ public decimal pCOFINS /// /// S09 - Valor da COFINS /// + /// + [XmlElement(Order = 4)] public decimal vCOFINS { get { return _vCofins; } diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSNT.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSNT.cs similarity index 97% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSNT.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSNT.cs index 4a6e705ae..8c036997f 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSNT.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSNT.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -39,6 +40,8 @@ public class COFINSNT : COFINSBasico /// /// S06 - Código de Situação Tributária da COFINS /// + /// + [XmlElement(Order = 1)] public CSTCOFINS CST { get; set; } } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSOutr.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSOutr.cs similarity index 94% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSOutr.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSOutr.cs index 7013a8037..56c5f6143 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSOutr.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSOutr.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -45,11 +46,16 @@ public class COFINSOutr : COFINSBasico /// /// S06 - Código de Situação Tributária da COFINS /// + /// + + [XmlElement(Order = 1)] public CSTCOFINS CST { get; set; } /// /// S07 - Valor da Base de Cálculo da COFINS /// + /// + [XmlElement(Order = 2)] public decimal? vBC { get { return _vBc.Arredondar(2); } @@ -59,6 +65,8 @@ public decimal? vBC /// /// S08 - Alíquota da COFINS (em percentual) /// + /// + [XmlElement(Order = 3)] public decimal? pCOFINS { get { return _pCofins.Arredondar(4); } @@ -68,6 +76,8 @@ public decimal? pCOFINS /// /// S09 - Quantidade Vendida /// + /// + [XmlElement(Order = 4)] public decimal? qBCProd { get { return _qBcProd.Arredondar(4); } @@ -77,6 +87,8 @@ public decimal? qBCProd /// /// S10 - Alíquota da COFINS (em reais) /// + /// + [XmlElement(Order = 5)] public decimal? vAliqProd { get { return _vAliqProd.Arredondar(4); } @@ -86,6 +98,8 @@ public decimal? vAliqProd /// /// S11 - Valor da COFINS /// + /// + [XmlElement(Order = 6)] public decimal? vCOFINS { get { return _vCofins.Arredondar(2); } diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSQtde.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSQtde.cs similarity index 94% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSQtde.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSQtde.cs index eae320ea8..3febac288 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSQtde.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSQtde.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -43,11 +44,15 @@ public class COFINSQtde : COFINSBasico /// /// S06 - Código de Situação Tributária da COFINS /// + /// + [XmlElement(Order = 1)] public CSTCOFINS CST { get; set; } /// /// S09 - Quantidade Vendida /// + /// + [XmlElement(Order = 2)] public decimal qBCProd { get { return _qBcProd; } @@ -57,6 +62,8 @@ public decimal qBCProd /// /// S10 - Alíquota da COFINS (em reais) /// + /// + [XmlElement(Order = 3)] public decimal vAliqProd { get { return _vAliqProd; } @@ -66,6 +73,8 @@ public decimal vAliqProd /// /// S11 - Valor da COFINS /// + /// + [XmlElement(Order = 4)] public decimal vCOFINS { get { return _vCofins; } diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSST.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSST.cs similarity index 88% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSST.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSST.cs index 0cab27167..a4e725927 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSST.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/COFINSST.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -45,6 +46,8 @@ public class COFINSST : COFINSBasico /// /// T02 - Valor da Base de Cálculo da COFINS /// + /// + [XmlElement(Order = 1)] public decimal? vBC { get { return _vBc.Arredondar(2); } @@ -54,6 +57,8 @@ public decimal? vBC /// /// T03 - Alíquota da COFINS (em percentual) /// + /// + [XmlElement(Order = 2)] public decimal? pCOFINS { get { return _pCofins.Arredondar(4); } @@ -63,6 +68,8 @@ public decimal? pCOFINS /// /// T04 - Quantidade Vendida /// + /// + [XmlElement(Order = 3)] public decimal? qBCProd { get { return _qBcProd.Arredondar(4); } @@ -72,6 +79,8 @@ public decimal? qBCProd /// /// T05 - Alíquota da COFINS (em reais) /// + /// + [XmlElement(Order = 4)] public decimal? vAliqProd { get { return _vAliqProd.Arredondar(4); } @@ -81,12 +90,25 @@ public decimal? vAliqProd /// /// T06 - Valor da COFINS /// + /// + [XmlElement(Order = 5)] public decimal? vCOFINS { get { return _vCofins.Arredondar(2); } set { _vCofins = value.Arredondar(2); } } + /// + /// T07 - Indica se o valor da COFINSST compõe o valor total da NF-e + /// + [XmlElement(Order = 6)] + public IndSomaCOFINSST? indSomaCOFINSST { get; set; } + + public bool ShouldSerializeindSomaCOFINSST() + { + return indSomaCOFINSST.HasValue; + } + public bool ShouldSerializevBC() { return vBC.HasValue; diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/II.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/II.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/II.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/II.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPI.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPI.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPI.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPI.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPINT.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPINT.cs similarity index 97% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPINT.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPINT.cs index ad72130d7..44d68f4a9 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPINT.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPINT.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -39,6 +40,8 @@ public class IPINT : IPIBasico /// /// O09 - Código da Situação Tributária do IPI: /// + /// + [XmlElement(Order = 1)] public CSTIPI CST { get; set; } } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPITrib.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPITrib.cs similarity index 94% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPITrib.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPITrib.cs index 1da769d2e..ef0ea45aa 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPITrib.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IPITrib.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -45,11 +46,15 @@ public class IPITrib : IPIBasico /// /// O09 - Código da Situação Tributária do IPI: /// + /// + [XmlElement(Order = 1)] public CSTIPI CST { get; set; } /// /// O10 - Valor da BC do IPI /// + /// + [XmlElement(Order = 2)] public decimal? vBC { get { return _vBc.Arredondar(2); } @@ -59,6 +64,8 @@ public decimal? vBC /// /// O13 - Alíquota do IPI /// + /// + [XmlElement(Order = 3)] public decimal? pIPI { get { return _pIpi.Arredondar(4); } @@ -68,6 +75,8 @@ public decimal? pIPI /// /// O11 - Quantidade total na unidade padrão para tributação (somente para os produtos tributados por unidade) /// + /// + [XmlElement(Order = 4)] public decimal? qUnid { get { return _qUnid.Arredondar(4); } @@ -77,6 +86,8 @@ public decimal? qUnid /// /// O12 - Valor por Unidade Tributável /// + /// + [XmlElement(Order = 5)] public decimal? vUnid { get { return _vUnid.Arredondar(4); } @@ -86,6 +97,8 @@ public decimal? vUnid /// /// O14 - Valor do IPI /// + /// + [XmlElement(Order = 6)] public decimal? vIPI { get { return _vIpi.Arredondar(2); } diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IS.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IS.cs new file mode 100644 index 000000000..951d93b15 --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/IS.cs @@ -0,0 +1,117 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; + +namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal +{ + public class IS + { + private decimal _vBcIs; + private decimal _pIs; + private decimal? _pIsEspec; + private decimal _qTrib; + private decimal _vIs; + + /// + /// UB02 - Código de Situação Tributária do Imposto Seletivo + /// + [XmlElement(Order = 1)] + public string CSTIS { get; set; } + + /// + /// UB03 - Código de Classificação Tributária do Imposto Seletivo + /// + [XmlElement(Order = 2)] + public string cClassTribIS { get; set; } + + /// + /// UB05 - Valor da Base de Cálculo do Imposto Seletivo + /// + [XmlElement(Order = 3)] + public decimal vBCIS + { + get => _vBcIs.Arredondar(2); + set => _vBcIs = value.Arredondar(2); + } + + /// + /// UB06 - Alíquota do Imposto Seletivo (em percentual) + /// + [XmlElement(Order = 4)] + public decimal pIS + { + get => _pIs.Arredondar(4); + set => _pIs = value.Arredondar(4); + } + + /// + /// UB07 - Alíquota específica por unidade de medida apropriada (em percentual) + /// + [XmlElement(Order = 5)] + public decimal? pISEspec + { + get => _pIsEspec.Arredondar(4); + set => _pIsEspec = value.Arredondar(4); + } + + /// + /// UB09 - Unidade de Medida Tributável + /// + [XmlElement(Order = 6)] + public string uTrib { get; set; } + + /// + /// UB10 - Quantidade Tributável + /// + [XmlElement(Order = 7)] + public decimal qTrib + { + get => _qTrib.Arredondar(4); + set => _qTrib = value.Arredondar(4); + } + + /// + /// UB11 - Valor do Imposto Seletivo + /// + [XmlElement(Order = 8)] + public decimal vIS + { + get => _vIs.Arredondar(2); + set => _vIs = value.Arredondar(2); + } + + public bool ShouldSerializepISEspec() => pISEspec.HasValue; + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PIS.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PIS.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PIS.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PIS.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISAliq.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISAliq.cs similarity index 94% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISAliq.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISAliq.cs index a661d2d5f..81c382de4 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISAliq.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISAliq.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -43,11 +44,15 @@ public class PISAliq : PISBasico /// /// Q06 - Código de Situação Tributária do PIS /// + /// + [XmlElement(Order = 1)] public CSTPIS CST { get; set; } /// /// Q07 - Valor da Base de Cálculo do PIS /// + /// + [XmlElement(Order = 2)] public decimal vBC { get { return _vBc; } @@ -57,6 +62,8 @@ public decimal vBC /// /// Q08 - Alíquota do PIS (em percentual) /// + /// + [XmlElement(Order = 3)] public decimal pPIS { get { return _pPis; } @@ -66,6 +73,8 @@ public decimal pPIS /// /// Q09 - Valor do PIS /// + /// + [XmlElement(Order = 4)] public decimal vPIS { get { return _vPis; } diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISNT.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISNT.cs similarity index 97% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISNT.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISNT.cs index 7b32b2908..832c33817 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISNT.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISNT.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -39,6 +40,8 @@ public class PISNT : PISBasico /// /// Q06 - Código de Situação Tributária do PIS /// + /// + [XmlElement(Order = 1)] public CSTPIS CST { get; set; } } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISOutr.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISOutr.cs similarity index 94% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISOutr.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISOutr.cs index d505ef0b8..848460316 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISOutr.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISOutr.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -45,11 +46,17 @@ public class PISOutr : PISBasico /// /// Q06 - Código de Situação Tributária do PIS /// + /// + + [XmlElement(Order = 1)] public CSTPIS CST { get; set; } /// /// Q07 - Valor da Base de Cálculo do PIS /// + /// + + [XmlElement(Order = 2)] public decimal? vBC { get { return _vBc.Arredondar(2); } @@ -59,6 +66,9 @@ public decimal? vBC /// /// Q08 - Alíquota do PIS (em percentual) /// + /// + + [XmlElement(Order = 3)] public decimal? pPIS { get { return _pPis.Arredondar(4); } @@ -68,6 +78,9 @@ public decimal? pPIS /// /// Q10 - Quantidade Vendida /// + /// + + [XmlElement(Order = 4)] public decimal? qBCProd { get { return _qBcProd.Arredondar(4); } @@ -77,6 +90,8 @@ public decimal? qBCProd /// /// Q11 - Alíquota do PIS (em reais) /// + /// + [XmlElement(Order = 5)] public decimal? vAliqProd { get { return _vAliqProd.Arredondar(4); } @@ -86,6 +101,8 @@ public decimal? vAliqProd /// /// Q09 - Valor do PIS /// + /// + [XmlElement(Order = 6)] public decimal? vPIS { get { return _vPis.Arredondar(2); } diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISQtde.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISQtde.cs similarity index 94% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISQtde.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISQtde.cs index 9979dfc7c..b25096359 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISQtde.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISQtde.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -43,11 +44,17 @@ public class PISQtde : PISBasico /// /// Q06 - Código de Situação Tributária do PIS /// + /// + + [XmlElement(Order = 1)] public CSTPIS CST { get; set; } /// /// Q10 - Quantidade Vendida /// + /// + + [XmlElement(Order = 2)] public decimal qBCProd { get { return _qBcProd; } @@ -57,6 +64,8 @@ public decimal qBCProd /// /// Q11 - Alíquota do PIS (em reais) /// + /// + [XmlElement(Order = 3)] public decimal vAliqProd { get { return _vAliqProd; } @@ -66,6 +75,8 @@ public decimal vAliqProd /// /// Q09 - Valor do PIS /// + /// + [XmlElement(Order = 4)] public decimal vPIS { get { return _vPis; } diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISST.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISST.cs similarity index 88% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISST.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISST.cs index dbf4b78b3..509b6648f 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISST.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/PISST.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using System.Xml.Serialization; namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal { @@ -45,6 +46,9 @@ public class PISST : PISBasico /// /// R02 - Valor da Base de Cálculo do PIS /// + /// + + [XmlElement(Order = 1)] public decimal? vBC { get { return _vBc.Arredondar(2); } @@ -54,6 +58,8 @@ public decimal? vBC /// /// R03 - Alíquota do PIS (em percentual) /// + /// + [XmlElement(Order = 2)] public decimal? pPIS { get { return _pPis.Arredondar(4); } @@ -63,6 +69,8 @@ public decimal? pPIS /// /// R04 - Quantidade Vendida /// + /// + [XmlElement(Order = 3)] public decimal? qBCProd { get { return _qBcProd.Arredondar(4); } @@ -72,6 +80,8 @@ public decimal? qBCProd /// /// R05 - Alíquota do PIS (em reais) /// + /// + [XmlElement(Order = 4)] public decimal? vAliqProd { get { return _vAliqProd.Arredondar(4); } @@ -81,11 +91,24 @@ public decimal? vAliqProd /// /// R06 - Valor do PIS /// + /// + [XmlElement(Order = 5)] public decimal? vPIS { get { return _vPis.Arredondar(2); } set { _vPis = value.Arredondar(2); } } + + /// + /// R07 - Indica se o valor do PISST compõe o valor total da NF-e + /// + [XmlElement(Order = 6)] + public IndSomaPISST? indSomaPISST { get; set; } + + public bool ShouldSerializeindSomaPISST() + { + return indSomaPISST.HasValue; + } public bool ShouldSerializevBC() { diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSBasico.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSBasico.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSBasico.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSBasico.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSTipos.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSTipos.cs similarity index 96% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSTipos.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSTipos.cs index 614b4a33d..9b45a75cf 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSTipos.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/COFINSTipos.cs @@ -303,4 +303,21 @@ public enum CSTCOFINS [XmlEnum("99")] cofins99 = 99 } + + public enum IndSomaCOFINSST + { + /// + /// Valor do COFINSST não compõe o valor total da NF-e + /// + [Description("Valor do COFINSST não compõe o valor total da NF-e")] + [XmlEnum("0")] + NaoCompoe = 0, + + /// + /// N – Produzido em Escala NÃO Relevante + /// + [Description("Valor do COFINSST compõe o valor total da NF-e")] + [XmlEnum("1")] + Compoe = 1 + } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPIBasico.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPIBasico.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPIBasico.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPIBasico.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPITipos.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPITipos.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPITipos.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/IPITipos.cs diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/ISTipos.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/ISTipos.cs new file mode 100644 index 000000000..7c55e04f0 --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/ISTipos.cs @@ -0,0 +1,53 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.ComponentModel; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos +{ + /// + /// CST para o Imposto Seletivo (IS) + /// Tabela ainda não publicada oficialmente pela SEFAZ. Fonte: NT 2025.002-RTC + /// Enum sem utilização até a publicação da tabela oficial. + /// + public enum CSTIS + { + /// + /// 000 - Tributada integralmente + /// + [Description("Tributada integralmente")] + [XmlEnum("000")] + Is000 + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISBasico.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISBasico.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISBasico.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISBasico.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISTipos.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISTipos.cs similarity index 97% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISTipos.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISTipos.cs index 1a0a4bbce..9c6552ef4 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISTipos.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/Federal/Tipos/PISTipos.cs @@ -304,4 +304,21 @@ public enum CSTPIS [XmlEnum("99")] pis99 = 99 } + + public enum IndSomaPISST + { + /// + /// Valor do PISST não compõe o valor total da NF-e + /// + [Description("Valor do PISST não compõe o valor total da NF-e")] + [XmlEnum("0")] + NaoCompoe = 0, + + /// + /// N – Produzido em Escala NÃO Relevante + /// + [Description("Valor do PISST compõe o valor total da NF-e")] + [XmlEnum("1")] + Compoe = 1 + } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQN.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQN.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQN.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQN.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQNTipos.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQNTipos.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQNTipos.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/Municipal/ISSQNTipos.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/imposto.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/imposto.cs similarity index 90% rename from Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/imposto.cs rename to NFe.Classes/Informacoes/Detalhe/Tributacao/imposto.cs index eff1126e2..b667a2f41 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/imposto.cs +++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/imposto.cs @@ -30,6 +30,8 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + +using NFe.Classes.Informacoes.Detalhe.Tributacao.Compartilhado; using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal; using NFe.Classes.Informacoes.Detalhe.Tributacao.Municipal; @@ -90,9 +92,19 @@ public decimal? vTotTrib public COFINSST COFINSST { get; set; } /// - /// NA01 - Informação do ICMS Interestadua + /// NA01 - Informação do ICMS Interestadua /// public ICMSUFDest ICMSUFDest { get; set; } + + /// + /// UB01 - Informações do Imposto Seletivo + /// + public IS IS { get; set; } + + /// + /// UB12 - Informações do Imposto de Bens e Serviços - IBS e da Contribuição de Bens e Serviços - CBS + /// + public IBSCBS IBSCBS { get; set; } public bool ShouldSerializevTotTrib() { diff --git a/NFe.Classes/Informacoes/Detalhe/det.cs b/NFe.Classes/Informacoes/Detalhe/det.cs new file mode 100644 index 000000000..7b91d42a5 --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/det.cs @@ -0,0 +1,91 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System.Xml.Serialization; +using NFe.Classes.Informacoes.Detalhe.Observacao; +using NFe.Classes.Informacoes.Detalhe.Tributacao; + +namespace NFe.Classes.Informacoes.Detalhe +{ + public class det + { + private decimal? _vItem; + + /// + /// H02 - Número do item do NF + /// + [XmlAttribute] + public int nItem { get; set; } + + /// + /// I01 - Detalhamento de Produtos e Serviços + /// + public prod prod { get; set; } + + /// + /// M01 - Tributos incidentes no Produto ou Serviço + /// + public imposto imposto { get; set; } + + /// + /// UA01 - Informação do Imposto devolvido + /// + public impostoDevol impostoDevol { get; set; } + + /// + /// V01 - Informações Adicionais do Produto + /// + public string infAdProd { get; set; } + + /// + /// VA01 - Grupo de observações de uso livre (para o item da NF-e) + /// + [XmlElement(nameof(obsItem))] + public obsItem obsItem { get; set; } + + /// + /// VB01 - Valor Total do Item da NF-e + /// + public decimal? vItem + { + get => _vItem; + set => _vItem = value.Arredondar(2); + } + + /// + /// VC01 - Documento Fiscal Eletrônico Referenciado + /// + public DFeReferenciado DFeReferenciado { get; set; } + + public bool ShouldSerializevItem() => vItem.HasValue; + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Detalhe/gCred.cs b/NFe.Classes/Informacoes/Detalhe/gCred.cs new file mode 100644 index 000000000..e4945858a --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/gCred.cs @@ -0,0 +1,41 @@ +namespace NFe.Classes.Informacoes.Detalhe +{ + public class gCred + { + private decimal? _pCredPresumido; + private decimal? _vCredPresumido; + + /// + /// I05h - Código de Benefício Fiscal de Crédito Presumido na UF aplicado ao item + /// + public string cCredPresumido { get; set; } + + /// + /// I05i - Percentual do Crédito Presumido + /// + public decimal? pCredPresumido + { + get { return _pCredPresumido; } + set { _pCredPresumido = value.Arredondar(4); } + } + + /// + /// I05j - Valor do Crédito Presumido + /// + public decimal? vCredPresumido + { + get { return _vCredPresumido; } + set { _vCredPresumido = value.Arredondar(2); } + } + + public bool ShouldSerializepCredPresumido() + { + return _pCredPresumido.HasValue; + } + + public bool ShouldSerializevCredPresumido() + { + return _vCredPresumido.HasValue; + } + } +} diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/impostoDevol.cs b/NFe.Classes/Informacoes/Detalhe/impostoDevol.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/impostoDevol.cs rename to NFe.Classes/Informacoes/Detalhe/impostoDevol.cs diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/prod.cs b/NFe.Classes/Informacoes/Detalhe/prod.cs similarity index 89% rename from Shared.NFe.Classes/Informacoes/Detalhe/prod.cs rename to NFe.Classes/Informacoes/Detalhe/prod.cs index 7c47a3f6c..7ddcdd50d 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/prod.cs +++ b/NFe.Classes/Informacoes/Detalhe/prod.cs @@ -47,7 +47,7 @@ public prod() } private string _nRecopi; - private ProdutoEspecifico _produtoEspecifico; + private List _produtoEspecifico; private decimal _qcom; private decimal _qtrib; private decimal _vprod; @@ -74,6 +74,11 @@ public string cEAN set { _cEan = value ?? string.Empty; } } + /// + /// I03a - Código de barras diferente do padrão GTIN + /// + public string cBarra { get; set; } + /// /// I04 - Descrição do produto ou serviço /// @@ -118,11 +123,23 @@ public bool indEscalaSpecified /// /// Versão 4.00 - /// Código de Benefício fiscal utilizado pela UF, aplicado ao item. Obs: Deve ser utilizado o mesmo código adotado na EFD e outras + /// I05f Código de Benefício fiscal utilizado pela UF, aplicado ao item. Obs: Deve ser utilizado o mesmo código adotado na EFD e outras /// declarações, nas UF que o exigem. /// public string cBenef { get; set; } + /// + /// I05G - Grupo de Informações sobre o Crédito Presumido + /// Versão 4.00 - NT 2019.001 + /// + [XmlElement("gCred")] + public List gCred { get; set; } + + /// + /// I05K - Classificação para subapuração do IBS na ZFM + /// + public tpCredPresIBSZFM? tpCredPresIBSZFM { get; set; } + /// /// I06 - Código EX TIPI (3 posições) /// @@ -174,6 +191,11 @@ public string cEANTrib set { _cEanTrib = value ?? string.Empty; } } + /// + /// I12a - Código de Barras da unidade tributável que seja diferente do padrão GTIN + /// + public string cBarraTrib { get; set; } + /// /// I13 - Unidade Tributável /// @@ -238,6 +260,11 @@ public decimal? vOutro /// public IndicadorTotal indTot { get; set; } + /// + /// I17c - Indicador de fornecimento de bem móvel usado + /// + public IndBemMovelUsado? indBemMovelUsado { get; set; } + /// /// I18 - Declaração de Importação /// @@ -282,7 +309,7 @@ public decimal? vOutro [XmlElement("med", typeof(med))] [XmlElement("arma", typeof(arma))] [XmlElement("comb", typeof(comb))] - public ProdutoEspecifico ProdutoEspecifico + public List ProdutoEspecifico { get { return _produtoEspecifico; } set @@ -330,6 +357,9 @@ public bool ShouldSerializevOutro() { return vOutro.HasValue && vOutro > 0; } - + + public bool ShouldSerializeindBemMovelUsado() => indBemMovelUsado.HasValue; + + public bool ShouldSerializetpCredPresIBSZFM() => tpCredPresIBSZFM.HasValue; } -} \ No newline at end of file +} diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/prodTipos.cs b/NFe.Classes/Informacoes/Detalhe/prodTipos.cs similarity index 87% rename from Shared.NFe.Classes/Informacoes/Detalhe/prodTipos.cs rename to NFe.Classes/Informacoes/Detalhe/prodTipos.cs index 87f365fab..c6b6fd337 100644 --- a/Shared.NFe.Classes/Informacoes/Detalhe/prodTipos.cs +++ b/NFe.Classes/Informacoes/Detalhe/prodTipos.cs @@ -67,6 +67,7 @@ public enum IndicadorTotal /// 8=Conduto / Rede Transmissão; /// 9=Meios Próprios; /// 10=Entrada / Saída ficta; 11=Courier; 12=Handcarry. (NT 2013/005 v 1.10). + /// 13=Por reboque; (NT 2013/004). /// public enum TipoTransporteInternacional { @@ -152,7 +153,14 @@ public enum TipoTransporteInternacional /// [Description("Handcarry")] [XmlEnum("12")] - Handcarry = 12 + Handcarry = 12, + + /// + /// 13=Handcarry (NT 2013/004) + /// + [Description("Por Reboque")] + [XmlEnum("13")] + PorReboque = 13 } /// @@ -368,4 +376,46 @@ public enum indEscala [XmlEnum("N")] N = 'N' } + + /// + /// Indicador de fornecimento de bem móvel usado + /// 1 - Bem Móvel Usado + /// + public enum IndBemMovelUsado + { + [Description("Bem Móvel Usado")] + [XmlEnum("1")] + BemMovelUsado + } + + /// + /// Classificação para subapuração do IBS na ZFM. Classificação conforme percentuais definidos no art. 450, § 1º, da LC 214/25 para o cálculo do crédito presumido + /// 0 - Sem Crédito Presumido> + /// 1 - Bens de consumo final (55%)> + /// 2 - Bens de capital (75%)> + /// 3 - Bens intermediários (90,25%)> + /// 4 - Bens de informática e outros definidos em legislação (100%)> + /// + public enum tpCredPresIBSZFM + { + [Description("Sem Crédito Presumido")] + [XmlEnum("0")] + SemCreditoPresumido, + + [Description("Bens de consumo final (55%)")] + [XmlEnum("1")] + BensDeConsumoFinal, + + [Description("Bens de capital (75%)")] + [XmlEnum("2")] + BensDeCapital, + + [Description("Bens intermediários (90,25%)")] + [XmlEnum("3")] + BensIntermediarios, + + [Description("Bens de informática e outros definidos em legislação (100%)")] + [XmlEnum("4")] + BensDeInformaticaEOutros + } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/rastro.cs b/NFe.Classes/Informacoes/Detalhe/rastro.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Detalhe/rastro.cs rename to NFe.Classes/Informacoes/Detalhe/rastro.cs diff --git a/NFe.Classes/Informacoes/Emitente/emit.cs b/NFe.Classes/Informacoes/Emitente/emit.cs new file mode 100644 index 000000000..238d8f5c4 --- /dev/null +++ b/NFe.Classes/Informacoes/Emitente/emit.cs @@ -0,0 +1,138 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Text.RegularExpressions; + +namespace NFe.Classes.Informacoes.Emitente +{ + public class emit + { + private const string ErroCpfCnpjPreenchidos = "Somente preencher um dos campos: CNPJ ou CPF, para um objeto do tipo emit!"; + private string _cnpj; + private string _cpf; + + /// + /// C02 - CNPJ do emitente + /// + public string CNPJ + { + get { return _cnpj; } + set + { + if (string.IsNullOrEmpty(value)) return; + if (string.IsNullOrEmpty(_cpf)) + _cnpj = Regex.Match(value, @"[0-9A-Z]+").Value; + + else + { + throw new ArgumentException(ErroCpfCnpjPreenchidos); + } + } + } + + /// + /// C02a - CPF do remetente + /// + public string CPF + { + get { return _cpf; } + set + { + if (string.IsNullOrEmpty(value)) return; + if (string.IsNullOrEmpty(_cnpj)) + _cpf = Regex.Match(value, @"\d+").Value; + else + { + throw new ArgumentException(ErroCpfCnpjPreenchidos); + } + } + } + + /// + /// C03 - Razão Social ou Nome do emitente + /// + public string xNome { get; set; } + + /// + /// C04 - Nome fantasia + /// + public string xFant { get; set; } + + /// + /// C05 - Grupo do Endereço do emitente + /// + public enderEmit enderEmit { get; set; } + + /// + /// C17 - Inscrição Estadual + /// Campo de informação obrigatória nos casos de emissão própria (procEmi = 0, 2 ou 3). + /// + /// A IE deve ser informada apenas com algarismos para destinatários contribuintes do ICMS, sem caracteres de + /// formatação (ponto, barra, hífen, etc.); + /// + /// + /// O literal “ISENTO” deve ser informado apenas para contribuintes do ICMS que são isentos de inscrição no + /// cadastro de contribuintes do ICMS e estejam emitindo NF-e avulsa; + /// + /// + public string IE { get; set; } + + /// + /// C18 - IE do Substituto Tributário + /// Informar a IE do ST da UF de destino da mercadoria, quando houver a retenção do ICMS ST para a UF de destino. + /// + public string IEST { get; set; } + + /// + /// C19 - Inscrição Municipal + /// + /// Este campo deve ser informado, quando ocorrer a emissão de NF-e conjugada, com prestação de serviços sujeitos + /// ao ISSQN e fornecimento de peças sujeitos ao ICMS. + /// + /// + public string IM { get; set; } + + /// + /// C20 - CNAE fiscal + /// Este campo deve ser informado quando o campo IM (C19) for informado. + /// + public string CNAE { get; set; } + + /// + /// C21 - Código de Regime Tributário + /// + public CRT CRT { get; set; } + + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Emitente/emitTipos.cs b/NFe.Classes/Informacoes/Emitente/emitTipos.cs new file mode 100644 index 000000000..89f78b118 --- /dev/null +++ b/NFe.Classes/Informacoes/Emitente/emitTipos.cs @@ -0,0 +1,74 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System.ComponentModel; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Emitente +{ + /// + /// 1 – Simples Nacional; + /// 2 – Simples Nacional – excesso de sublimite de receita bruta; + /// 3 – Regime Normal. (v2.0). + /// 4 – Simples Nacional MEI; + /// + public enum CRT + { + /// + /// 1 – Simples Nacional + /// + [Description("Simples Nacional")] + [XmlEnum("1")] + SimplesNacional = 1, + + /// + /// 2 – Simples Nacional – excesso de sublimite de receita bruta + /// + [Description("Simples Nacional – excesso de sublimite de receita bruta")] + [XmlEnum("2")] + SimplesNacionalExcessoSublimite = 2, + + /// + /// 3 – Regime Normal + /// + [Description("Regime Normal")] + [XmlEnum("3")] + RegimeNormal = 3, + + /// + /// 4 – Simples Nacional MEI + /// + [Description("Simples Nacional MEI")] + [XmlEnum("4")] + SimplesNacionalMei = 4 + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Emitente/enderEmit.cs b/NFe.Classes/Informacoes/Emitente/enderEmit.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Emitente/enderEmit.cs rename to NFe.Classes/Informacoes/Emitente/enderEmit.cs diff --git a/Shared.NFe.Classes/Informacoes/Identificacao/NFref.cs b/NFe.Classes/Informacoes/Identificacao/NFref.cs similarity index 95% rename from Shared.NFe.Classes/Informacoes/Identificacao/NFref.cs rename to NFe.Classes/Informacoes/Identificacao/NFref.cs index 6461595fa..0a6b1328f 100644 --- a/Shared.NFe.Classes/Informacoes/Identificacao/NFref.cs +++ b/NFe.Classes/Informacoes/Identificacao/NFref.cs @@ -39,6 +39,11 @@ public class NFref /// public string refNFe { get; set; } + /// + /// BA02a - Chave da NF-e com o código numérico zerado + /// + public string refNFeSig { get; set; } + /// /// BA03 - Informação da NF modelo 1/1A referenciada /// diff --git a/Shared.NFe.Classes/Informacoes/Identificacao/Tipos/ideTipos.cs b/NFe.Classes/Informacoes/Identificacao/Tipos/ideTipos.cs similarity index 76% rename from Shared.NFe.Classes/Informacoes/Identificacao/Tipos/ideTipos.cs rename to NFe.Classes/Informacoes/Identificacao/Tipos/ideTipos.cs index 94e7c09b6..065164a7e 100644 --- a/Shared.NFe.Classes/Informacoes/Identificacao/Tipos/ideTipos.cs +++ b/NFe.Classes/Informacoes/Identificacao/Tipos/ideTipos.cs @@ -271,6 +271,8 @@ public enum TipoEmissao /// 2 - NFe complementar /// 3 - NFe de ajuste /// 4 - Devolução de mercadoria + /// 5 - Nota de crédito + /// 6 - Nota de débito /// public enum FinalidadeNFe { @@ -300,7 +302,21 @@ public enum FinalidadeNFe /// [Description("Devolução de mercadoria")] [XmlEnum("4")] - fnDevolucao = 4 + fnDevolucao = 4, + + /// + /// 5 - Nota de crédito + /// + [Description("Nota de crédito")] + [XmlEnum("5")] + fnCredito = 5, + + /// + /// 6 - Nota de débito + /// + [Description("Nota de débito")] + [XmlEnum("6")] + fnDebito = 6 } /// @@ -498,4 +514,147 @@ public enum refMod [XmlEnum("02")] modelo2 = 2 } + + /// + /// Tipo de Nota de Débito + /// 1 - Transferência de créditos para Cooperativas + /// 2 - Anulação de Crédito por Saídas Imunes/Isentas + /// 3 - Débitos de notas fiscais não processadas na apuração + /// 4 - Multa e juros + /// 5 - Transferência de crédito na sucessão + /// 6 - Pagamento antecipado + /// 7 - Perda em estoque + /// 8 - Desenquadramento do SN + /// + public enum TpNotaDebito + { + /// + /// 01 - Transferência de créditos para Cooperativas + /// + [Description("Transferência de créditos para Cooperativas")] + [XmlEnum("01")] + TfCreditoCooperativa, + + /// + /// 02 - Anulação de Crédito por Saídas Imunes/Isentas + /// + [Description("Anulação de Crédito por Saídas Imunes/Isentas")] + [XmlEnum("02")] + AnulaCreditoSaidasImunesIsentas, + + /// + /// 03 - Débitos de notas fiscais não processadas na apuração + /// + [Description("Débitos de notas fiscais não processadas na apuração")] + [XmlEnum("03")] + DebitosNfNaoProcessadas, + + /// + /// 04 - Multa e juros + /// + [Description("Multa e juros")] + [XmlEnum("04")] + MultaJuros, + + /// + /// 05 - Transferência de crédito na sucessão + /// + [Description("Transferência de crédito na sucessão")] + [XmlEnum("05")] + TfCreditoSucessao, + + /// + /// 06 - Pagamento antecipado + /// + [Description("Pagamento antecipado")] + [XmlEnum("06")] + PagamentoAntecipado, + + /// + /// 07 - Perda em estoque + /// + [Description("Perda em estoque")] + [XmlEnum("07")] + PerdaEstoque, + + /// + /// 08 - Desenquadramento do SN + /// + [Description("Desenquadramento do SN")] + [XmlEnum("08")] + DesenquadramentoSn + } + + /// + /// Tipo de Nota de Crédito + /// 01 - Multa e juros + /// 02 - Apropriação de crédito presumido de IBS sobre o saldo devedor na ZFM (art. 450, § 1º, LC 214/25) + /// 03 - Retorno por recusa na entrega ou por não localização do destinatário na tentativa de entrega + /// 04 - Redução de valores + /// 05 - Transferência de crédito na sucessão; + /// + public enum TpNotaCredito + { + [Description("Multa e juros")] + [XmlEnum("01")] + MultaJuros, + + [Description("Apropriação de crédito presumido de IBS sobre o saldo devedor na ZFM (art. 450, § 1º, LC 214/25)")] + [XmlEnum("02")] + ApropriacaoDeCredito, + + [Description("Retorno por recusa na entrega ou por não localização do destinatário na tentativa de entrega")] + [XmlEnum("03")] + RetornoPorRecusaOuNaoLocalizacaoDoDestinatario, + + [Description("Redução de valores")] + [XmlEnum("04")] + ReducaoDeValores, + + [Description("Transferência de crédito na sucessão;")] + [XmlEnum("05")] + TfCreditoSucessao + } + + /// + /// Tipo de ente governamental + /// 1 - União + /// 2 - Estado + /// 3 - Distrito Federal + /// 4 - Município + /// + public enum TpEnteGov + { + [Description("União")] + [XmlEnum("1")] + Uniao, + + [Description("Estado")] + [XmlEnum("2")] + Estado, + + [Description("Distrito Federal")] + [XmlEnum("3")] + DistritoFederal, + + [Description("Município")] + [XmlEnum("4")] + Municipio + } + + /// + /// Tipo de operação com o ente governamental + /// 1 - Fornecimento + /// 2 - Recebimento do pagamento, conforme fato gerador do IBS/CBS definido no Art. 10 § 2º + /// + public enum TpOperGov + { + [Description("Fornecimento")] + [XmlEnum("1")] + Fornecimento, + + [Description("Recebimento do pagamento, conforme fato gerador do IBS/CBS definido no Art. 10 § 2º")] + [XmlEnum("2")] + RecebimentoPagamento + } } \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Identificacao/gCompraGov.cs b/NFe.Classes/Informacoes/Identificacao/gCompraGov.cs new file mode 100644 index 000000000..80756e0ac --- /dev/null +++ b/NFe.Classes/Informacoes/Identificacao/gCompraGov.cs @@ -0,0 +1,61 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using NFe.Classes.Informacoes.Identificacao.Tipos; + +namespace NFe.Classes.Informacoes.Identificacao +{ + public class gCompraGov + { + private decimal _pRedutor; + + /// + /// B32 - Tipo de ente governamental + /// + public TpEnteGov tpEnteGov { get; set; } + + /// + /// B33 - Percentual de redução de alíquota em compra governamental + /// + public decimal pRedutor + { + get => _pRedutor.Arredondar(4); + set => _pRedutor = value.Arredondar(4); + } + + /// + /// B34 - Tipo de operação com o ente governamental + /// + public TpOperGov tpOperGov { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Identificacao/gPagAntecipado.cs b/NFe.Classes/Informacoes/Identificacao/gPagAntecipado.cs new file mode 100644 index 000000000..69bf81fc3 --- /dev/null +++ b/NFe.Classes/Informacoes/Identificacao/gPagAntecipado.cs @@ -0,0 +1,50 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Identificacao +{ + /// + /// BB01 - Grupo de notas de antecipação de pagamento + /// + public class gPagAntecipado + { + /// + /// BB02 - Chave de acesso da NF-e de antecipação de pagamento + /// + [XmlElement("refNFe")] + public List refNFe { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Identificacao/ide.cs b/NFe.Classes/Informacoes/Identificacao/ide.cs new file mode 100644 index 000000000..2e0d77a09 --- /dev/null +++ b/NFe.Classes/Informacoes/Identificacao/ide.cs @@ -0,0 +1,317 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using DFe.Utils; +using NFe.Classes.Informacoes.Identificacao.Tipos; + +namespace NFe.Classes.Informacoes.Identificacao +{ + public class ide + { + /// + /// B02 - Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + /// + public Estado cUF { get; set; } + + /// + /// B03 - Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e. + /// + public string cNF { get; set; } + + /// + /// B04 - Descrição da Natureza da Operação + /// + public string natOp { get; set; } + + /// + /// B05 - Indicador da forma de pagamento + /// Versão 3.10 + /// Versão 4.00 removido + /// + public IndicadorPagamento? indPag { get; set; } + + public bool indPagSpecified + { + get { return indPag.HasValue; } + } + + /// + /// B06 - Modelo do Documento Fiscal + /// + public ModeloDocumento mod { get; set; } + + /// + /// B07 - Série do Documento Fiscal + /// série normal 0-889 + /// Avulsa Fisco 890-899 + /// SCAN 900-999 + /// + public int serie { get; set; } + + /// + /// B08 - Número do Documento Fiscal + /// + public long nNF { get; set; } + + /// + /// B09 - Data de emissão do Documento Fiscal - V2.00 + /// + [XmlIgnore] + public DateTime dEmi { get; set; } //V2.00 + + /// + /// Proxy para dEmi no formato AAAA-MM-DD + /// + [XmlElement(ElementName = "dEmi")] + public string ProxydEmi + { + get { return dEmi.ParaDataString(); } + set { dEmi = DateTime.Parse(value); } + } + + /// + /// B10 - Data de Saída ou da Entrada da Mercadoria/Produto - V2.00 + /// + [XmlIgnore] + public DateTime dSaiEnt { get; set; } //V2.00 + + /// + /// Proxy para dSaiEnt no formato AAAA-MM-DD + /// + [XmlElement(ElementName = "dSaiEnt")] + public string ProxydSaiEnt + { + get { return dSaiEnt.ParaDataString(); } + set { dSaiEnt = DateTime.Parse(value); } + } + + /// + /// B09 - Data e Hora de emissão do Documento Fiscal + /// + [XmlIgnore] + public DateTimeOffset dhEmi { get; set; } + + /// + /// Proxy para dhEmi no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhEmi")] + public string ProxyDhEmi + { + get { return dhEmi.ParaDataHoraStringUtc(); } + set { dhEmi = DateTimeOffset.Parse(value); } + } + + /// + /// B10 - Data e Hora da saída ou de entrada da mercadoria / produto + /// + [XmlIgnore] + public DateTimeOffset? dhSaiEnt { get; set; } + + /// + /// Proxy para dhSaiEnt no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhSaiEnt")] + public string ProxydhSaiEnt + { + get { return dhSaiEnt.ParaDataHoraStringUtc(); } + set { dhSaiEnt = DateTimeOffset.Parse(value); } + } + + /// + /// B10a - Data da previsão de entrega ou disponibilização do bem. + /// + [XmlIgnore] + public DateTime? dPrevEntrega { get; set; } + + /// + /// Proxy para dPrevEntrega no formato AAAA-MM-DD (somente data) + /// + [XmlElement(ElementName = "dPrevEntrega")] + public string ProxydPrevEntrega + { + get => dPrevEntrega.ParaDataString(); + set => dPrevEntrega = DateTime.Parse(value); + } + + /// + /// B11 - Tipo do Documento Fiscal + /// + public TipoNFe tpNF { get; set; } + + /// + /// B11a - Identificador de Local de destino da operação + /// + public DestinoOperacao? idDest { get; set; } //Nulable por conta da v2.00 + + /// + /// B12 - Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) + /// + public long cMunFG { get; set; } + + /// + /// B12a - Código do Município de consumo, fato gerador do IBS / CBS + /// + public long? cMunFGIBS { get; set; } + + /// + /// B21 - Formato de impressão do DANFE + /// + public TipoImpressao tpImp { get; set; } + + /// + /// B22 - Tipo de Emissão da NF-e + /// + public TipoEmissao tpEmis { get; set; } + + /// + /// B23 - Digito Verificador da Chave de Acesso da NF-e + /// + public int cDV { get; set; } + + /// + /// B24 - Identificação do Ambiente + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// B25 - Finalidade da emissão da NF-e + /// + public FinalidadeNFe finNFe { get; set; } + + /// + /// B25.1 - Tipo de Nota de Débito + /// + public TpNotaDebito? tpNFDebito { get; set; } + + /// + /// B25.2 - Tipo de Nota de Crédito + /// + public TpNotaCredito? tpNFCredito { get; set; } + + /// + /// B25a - Indica operação com consumidor final + /// + public ConsumidorFinal? indFinal { get; set; } //Nullable por conta da v2.00 + + /// + /// B25b - Indicador de presença do comprador no estabelecimento comercial no momento da operação + /// + public PresencaComprador? indPres { get; set; } //Nulable por conta da v2.00 + + /// + /// B25c - Indicador de intermediador/marketplace + /// + public IndicadorIntermediador? indIntermed { get; set; } + + public bool indIntermedSpecified + { + get { return indIntermed.HasValue; } + } + + /// + /// B26 - Processo de emissão utilizado com a seguinte codificação: + /// + public ProcessoEmissao procEmi { get; set; } + + /// + /// B27 - versão do aplicativo utilizado no processo de emissão + /// + public string verProc { get; set; } + + /// + /// B28 - Informar apenas para tpEmis diferente de 1 + /// + /// Informar a data e hora de entrada em contingência + /// + /// + [XmlIgnore] + public DateTimeOffset dhCont { get; set; } + + /// + /// Proxy para dhCont no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhCont")] + public string ProxydhCont + { + get { return dhCont.ParaDataHoraStringUtc(); } + set { dhCont = DateTimeOffset.Parse(value); } + } + + /// + /// B29 - Informar a Justificativa da entrada + /// + public string xJust { get; set; } + + /// + /// BA01 - Informação de Documentos Fiscais referenciados + /// + [XmlElement("NFref")] + public List NFref { get; set; } + + /// + /// B31 - Grupo de Compra Governamental + /// + public gCompraGov gCompraGov { get; set; } + + /// + /// BB01 - Grupo de notas de antecipação de pagamento + /// + public gPagAntecipado gPagAntecipado { get; set; } + + public bool ShouldSerializeidDest() + { + return idDest.HasValue; + } + + public bool ShouldSerializeindFinal() + { + return indFinal.HasValue; + } + + public bool ShouldSerializeindPres() + { + return indPres.HasValue; + } + + public bool ShouldSerializetpNFDebito() => tpNFDebito.HasValue; + + public bool ShouldSerializetpNFCredito() => tpNFCredito.HasValue; + + public bool ShouldSerializecMunFGIBS() => cMunFGIBS.HasValue; + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Identificacao/refECF.cs b/NFe.Classes/Informacoes/Identificacao/refECF.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Identificacao/refECF.cs rename to NFe.Classes/Informacoes/Identificacao/refECF.cs diff --git a/Shared.NFe.Classes/Informacoes/Identificacao/refNF.cs b/NFe.Classes/Informacoes/Identificacao/refNF.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Identificacao/refNF.cs rename to NFe.Classes/Informacoes/Identificacao/refNF.cs diff --git a/Shared.NFe.Classes/Informacoes/Identificacao/refNFP.cs b/NFe.Classes/Informacoes/Identificacao/refNFP.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Identificacao/refNFP.cs rename to NFe.Classes/Informacoes/Identificacao/refNFP.cs diff --git a/Shared.NFe.Classes/Informacoes/InfRespTec/infRespTec.cs b/NFe.Classes/Informacoes/InfRespTec/infRespTec.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/InfRespTec/infRespTec.cs rename to NFe.Classes/Informacoes/InfRespTec/infRespTec.cs diff --git a/Shared.NFe.Classes/Informacoes/Intermediador/infIntermed.cs b/NFe.Classes/Informacoes/Intermediador/infIntermed.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Intermediador/infIntermed.cs rename to NFe.Classes/Informacoes/Intermediador/infIntermed.cs diff --git a/Shared.NFe.Classes/Informacoes/Observacoes/infAdic.cs b/NFe.Classes/Informacoes/Observacoes/infAdic.cs similarity index 96% rename from Shared.NFe.Classes/Informacoes/Observacoes/infAdic.cs rename to NFe.Classes/Informacoes/Observacoes/infAdic.cs index 944684bcf..78423317f 100644 --- a/Shared.NFe.Classes/Informacoes/Observacoes/infAdic.cs +++ b/NFe.Classes/Informacoes/Observacoes/infAdic.cs @@ -50,27 +50,27 @@ public class infAdic public bool ShouldSerializeinfCpl() { return !string.IsNullOrEmpty(infCpl); - } + } /// /// Z04 - Grupo Campo de uso livre do contribuinte /// Ocorrência: 0-10 /// - [XmlElement("obsCont")] + [XmlElement(ElementName = nameof(obsCont))] public List obsCont { get; set; } /// /// Z07 - Grupo Campo de uso livre do Fisco /// Ocorrência: 0-10 /// - [XmlElement("obsFisco")] + [XmlElement(ElementName = nameof(obsFisco))] public List obsFisco { get; set; } /// /// Z10 - Grupo Processo referenciado /// Ocorrência: 0-100 /// - [XmlElement("procRef")] + [XmlElement(nameof(procRef))] public List procRef { get; set; } } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Observacoes/obsCont.cs b/NFe.Classes/Informacoes/Observacoes/obsCont.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Observacoes/obsCont.cs rename to NFe.Classes/Informacoes/Observacoes/obsCont.cs diff --git a/Shared.NFe.Classes/Informacoes/Observacoes/obsFisco.cs b/NFe.Classes/Informacoes/Observacoes/obsFisco.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Observacoes/obsFisco.cs rename to NFe.Classes/Informacoes/Observacoes/obsFisco.cs diff --git a/Shared.NFe.Classes/Informacoes/Observacoes/procRef.cs b/NFe.Classes/Informacoes/Observacoes/procRef.cs similarity index 92% rename from Shared.NFe.Classes/Informacoes/Observacoes/procRef.cs rename to NFe.Classes/Informacoes/Observacoes/procRef.cs index 8e1a9dbe3..87d11d5bf 100644 --- a/Shared.NFe.Classes/Informacoes/Observacoes/procRef.cs +++ b/NFe.Classes/Informacoes/Observacoes/procRef.cs @@ -43,5 +43,15 @@ public class procRef /// Z12 - Indicador da origem do processo /// public IndicadorProcesso indProc { get; set; } + + /// + /// Z13 - Tipo do ato concessório + /// + public TipoAtoConcessorio? tpAto { get; set; } + + public bool ShouldSerializetpAto() + { + return tpAto.HasValue; + } } } \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Observacoes/procRefTipos.cs b/NFe.Classes/Informacoes/Observacoes/procRefTipos.cs new file mode 100644 index 000000000..18ace9443 --- /dev/null +++ b/NFe.Classes/Informacoes/Observacoes/procRefTipos.cs @@ -0,0 +1,137 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System.ComponentModel; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Observacoes +{ + /// + /// Indicador da origem do processo + /// 0 - SEFAZ; + /// 1 - Justiça Federal; + /// 2 - Justiça Estadual; + /// 3 - Secex/RFB; + /// 4 - CONFAZ; + /// 9 - Outros + /// + public enum IndicadorProcesso + { + /// + /// 0 - SEFAZ + /// + [Description("SEFAZ")] + [XmlEnum("0")] + ipSEFAZ = 0, + + /// + /// 1 - Justiça Federal + /// + [Description("Justiça Federal")] + [XmlEnum("1")] + ipJusticaFederal = 1, + + /// + /// 2 - Justiça Estadual + /// + [Description("Justiça Estadual")] + [XmlEnum("2")] + ipJusticaEstadual = 2, + + /// + /// 3 - Secex/RFB + /// + [Description("Secex/RFB")] + [XmlEnum("3")] + ipSecexRFB = 3, + + /// + /// 4 - CONFAZ + /// + [Description("CONFAZ")] + [XmlEnum("4")] + ipCONFAZ = 4, + + /// + /// 9 - Outros + /// + [Description("Outros")] + [XmlEnum("9")] + ipOutros = 9 + } + + /// + /// Para origem do Processo na SEFAZ (indProc=0), informar o tipo de ato concessório + /// 08 - Termo de Acordo + /// 10 - Regime Especia + /// 12 - Autorização específica + /// 14 - Ajuste SINIEF (NT2023.004) + /// 15 - Convênio ICMS (NT2023.004) + /// + public enum TipoAtoConcessorio + { + /// + /// 08 - Termo de Acordo + /// + [Description("Termo de Acordo")] + [XmlEnum("08")] + tpTermoAcordo = 8, + + /// + /// 10 - Regime Especial + /// + [Description("Regime Especial")] + [XmlEnum("10")] + tpRegimeEspecial= 10, + + /// + /// 12 - Autorização Específica + /// + [Description("Autorização Específica")] + [XmlEnum("12")] + tpAutorizacaoEspecifica = 12, + + /// + /// 14 - Ajuste SINIEF (NT2023.004) + /// + [Description("Ajuste SINIEF")] + [XmlEnum("14")] + tpAjusteSINIEF = 14, + + /// + /// 15 - Convênio ICMS (NT2023.004) + /// + [Description("Convênio ICMS")] + [XmlEnum("15")] + tpConvenioICMS = 15, + } +} diff --git a/Shared.NFe.Classes/Informacoes/Pagamento/card.cs b/NFe.Classes/Informacoes/Pagamento/card.cs similarity index 91% rename from Shared.NFe.Classes/Informacoes/Pagamento/card.cs rename to NFe.Classes/Informacoes/Pagamento/card.cs index eda1bc052..64d84bac1 100644 --- a/Shared.NFe.Classes/Informacoes/Pagamento/card.cs +++ b/NFe.Classes/Informacoes/Pagamento/card.cs @@ -64,5 +64,15 @@ public bool ShouldSerializetBand() /// YA07 - Número de autorização da operação cartão de crédito e/ou débito /// public string cAut { get; set; } + + /// + /// YA07a - CNPJ do estabelecimento beneficiário do pagamento + /// + public string CNPJReceb { get; set; } + + /// + /// YA07b - Identificador do terminal em que foi realizado o pagamento + /// + public string idTermPag { get; set; } } -} \ No newline at end of file +} diff --git a/NFe.Classes/Informacoes/Pagamento/detPag.cs b/NFe.Classes/Informacoes/Pagamento/detPag.cs new file mode 100644 index 000000000..35728cd8e --- /dev/null +++ b/NFe.Classes/Informacoes/Pagamento/detPag.cs @@ -0,0 +1,74 @@ +using DFe.Utils; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using System; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Pagamento +{ + public class detPag + { + private decimal _vPag; + + /// + /// YA01b - Indicador da Forma de Pagamento + /// + public IndicadorPagamentoDetalhePagamento? indPag { get; set; } + + public bool indPagSpecified { get { return indPag.HasValue; } } + + /// + /// YA02 - Meio de pagamento + /// + public FormaPagamento tPag { get; set; } + + /// + /// YA02a - Descrição do Meio de Pagamento + /// + public string xPag { get; set; } + + /// + /// YA03 - Valor do Pagamento + /// + public decimal vPag + { + get { return _vPag.Arredondar(2); } + set { _vPag = value.Arredondar(2); } + } + + /// + /// YA03a - Data do Pagamento (NT 2023.004) + /// + [XmlIgnore] + public DateTime? dPag { get; set; } + + /// + /// Proxy para dPag no formato AAAA-MM-DD + /// + [XmlElement(ElementName = "dPag")] + public string ProxydPag + { + get { return dPag.ParaDataString(); } + set { dPag = DateTime.Parse(value); } + } + + /// + /// YA03c - CNPJ transacional do pagamento (NT 2023.004) + /// + public string CNPJPag { get; set; } + + /// + /// YA03d - UF do CNPJ do estabelecimento onde o pagamento foi processado/transacionado/recebido(NT 2023.004) + /// + public string UFPag { get; set; } + + /// + /// YA04 - Grupo de Cartões + /// + public card card { get; set; } + + public bool ShouldSerializedPag() + { + return dPag.HasValue; + } + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Pagamento/pag.cs b/NFe.Classes/Informacoes/Pagamento/pag.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Pagamento/pag.cs rename to NFe.Classes/Informacoes/Pagamento/pag.cs diff --git a/NFe.Classes/Informacoes/Pagamento/pagTipos.cs b/NFe.Classes/Informacoes/Pagamento/pagTipos.cs new file mode 100644 index 000000000..c45cf4d88 --- /dev/null +++ b/NFe.Classes/Informacoes/Pagamento/pagTipos.cs @@ -0,0 +1,402 @@ + +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.ComponentModel; +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Pagamento +{ + /// + /// Meio de pagamento + /// 01 - Dinheiro + /// 02 - Cheque + /// 03 - Cartão de Crédito + /// 04 - Cartão de Débito + /// 05 - Cartão da Loja + /// 10 - Vale Alimentação + /// 11 - Vale Refeição + /// 12 - Vale Presente + /// 13 - Vale Combustível + /// 14 - Duplicata Mercantil (versão 4.00) + /// 15 - Boleto Bancário (versão 4.00) + /// 16 - Depósito Bancário (versão 4.00) + /// 17 - Pagamento Instantâneo (PIX) dinâmico (versão 4.00) + /// 18 - TED (Transferência Eletrônica Disponível) (versão 4.00) + /// 19 - Programa de fidelidade, Cashback, Crédito Virtual (versão 4.00) + /// 20 - Pagamento Instantâneo (PIX) estático + /// 21 - Crédito em loja + /// 22 - Pagamento eletrônico não informado - falha de hardware do sistema emissor + /// 23 - Pagamento Instantâneo (PIX) automático + /// 24 - TEF – 'Book Transfer' + /// 90 - Sem pagamento (versão 4.00) + /// 91 - Pagamento posterior (versão 4.00) + /// 99 - Outros + /// + public enum FormaPagamento + { + /// + /// 01 - Dinheiro + /// + [Description("Dinheiro")] + [XmlEnum("01")] + fpDinheiro = 01, + + /// + /// 02 - Cheque + /// + [Description("Cheque")] + [XmlEnum("02")] + fpCheque = 02, + + /// + /// 03 - Cartão de Crédito + /// + [Description("Cartão de Crédito")] + [XmlEnum("03")] + fpCartaoCredito = 03, + + /// + /// 04 - Cartão de Débito + /// + [Description("Cartão de Débito")] + [XmlEnum("04")] + fpCartaoDebito = 04, + + /// + /// 05 - Cartão da Loja + /// + [Description("Cartão da Loja")] + [XmlEnum("05")] + fpCartaoDaLoja = 05, + + /// + /// 10 - Vale Alimentação + /// + [Description("Vale Alimentação")] + [XmlEnum("10")] + fpValeAlimentacao = 10, + + /// + /// 11 - Vale Refeição + /// + [Description("Vale Refeição")] + [XmlEnum("11")] + fpValeRefeicao = 11, + + /// + /// 12 -Vale Presente + /// + [Description("Vale Presente")] + [XmlEnum("12")] + fpValePresente = 12, + + /// + /// 13 - Vale Combustível + /// + [Description("Vale Combustível")] + [XmlEnum("13")] + fpValeCombustivel = 13, + + /// + /// 14 - Duplicata Mercantil + /// Na NT2016.002 (v1.50), foi excluída esta forma de pagamento na emissão de NFC-e (modelo 65), + /// porém para NFe (modelo 55) a SEFAZ, até o momento, ainda permite o seu uso. + /// + /// + [Description("Duplicata Mercantil")] + [XmlEnum("14")] + fpDuplicataMercantil = 14, + + /// + /// 15 - Boleto Bancário + /// + [Description("Boleto Bancário")] + [XmlEnum("15")] fpBoletoBancario = 15, + + /// + /// 16 - Depósito Bancário + /// + [Description("=Depósito Bancário")] + [XmlEnum("16")] fpDepositoBancario = 16, + + /// + /// 17 - Pagamento Instantâneo (PIX) dinâmico + /// + [Description("Pagamento Instantâneo (PIX) dinâmico")] + [XmlEnum("17")] fpPagamentoInstantaneoPIXDinamico = 17, + + /// + /// 18 - TED (Transferência Eletrônica Disponível) + /// + [Description("TED (Transferência Eletrônica Disponível)")] + [XmlEnum("18")] fpTed = 18, + + /// + /// 19 - Programa de fidelidade, Cashback, Crédito Virtual + /// + [Description("Programa de fidelidade, Cashback, Crédito Virtual")] + [XmlEnum("19")] fpProgramadefidelidade = 19, + + /// + /// 20 - Pagamento Instantâneo (PIX) estático + /// + [Description("Pagamento Instantâneo (PIX) estático")] + [XmlEnum("20")] fpPagamentoInstantaneoPIXEstatico = 20, + + /// + /// 21 - Crédito em loja + /// + [Description("Crédito em loja")] + [XmlEnum("21")] fpCreditoEmLoja = 21, + + /// + /// 22 - Pagamento eletrônico não informado - falha de hardware do sistema emissor + /// + [Description("Pagamento eletrônico não informado")] + [XmlEnum("22")] fpPagamentoEletronicoNaoInformado = 22, + + /// + /// 23 - Pagamento Instantâneo (PIX) automático + /// + [Description("Pagamento Instantâneo (PIX) automático")] + [XmlEnum("23")] fpPagamentoInstantaneoPixAutomatico = 23, + + /// + /// 24 - TEF – 'Book Transfer' + /// + [Description("TEF – 'Book Transfer'")] + [XmlEnum("24")] fpPagamentoTefBookTransfer = 24, + + /// + /// 90 - Sem pagamento + /// + [Description("Sem pagamento")] + [XmlEnum("90")] + fpSemPagamento = 90, + + /// + /// 91 - Pagamento Posterior + /// + [Description("Pagamento Posterior")] + [XmlEnum("91")] + fpPagamentoPosterior = 91, + + /// + /// 99 - Outros + /// + [Description("Outros")] + [XmlEnum("99")] + fpOutro = 99 + } + + /// + /// Bandeira da operadora de cartão de crédito e/ou débito + /// 01 - Visa + /// 02 - Mastercard + /// 03 - American Express + /// 04 - Sorocred + /// 05 - Diners Club (versão 4.00) + /// 06 - Elo (versão 4.00) + /// 07 - Hipercard (versão 4.00) + /// 08 - Aura (versão 4.00) + /// 09 - Cabal (versão 4.00) + /// 99 - Outros + /// + public enum BandeiraCartao + { + /// + /// >01 - Visa + /// + [Description("Visa")] + [XmlEnum("01")] + bcVisa = 01, + + /// + /// 02 - Mastercard + /// + [Description("Mastercard")] + [XmlEnum("02")] + bcMasterCard = 02, + + /// + /// 03 - American Express + /// + [Description("American Express")] + [XmlEnum("03")] + bcAmericanExpress = 03, + + /// + /// 04 - Sorocred + /// + [Description("Sorocred")] + [XmlEnum("04")] + bcSorocred = 04, + + /// + /// 05 - Diners Club (versão 4.00) + /// + [Description("Diners Club")] + [XmlEnum("05")] + bcDinersClub = 05, + + /// + /// 06 - Elo (versão 4.00) + /// + [Description("Elo")] + [XmlEnum("06")] + Elo = 06, + + /// + /// 07 - Hipercard (versão 4.00) + /// + [Description("Hipercard")] + [XmlEnum("07")] + Hipercard = 07, + + /// + /// 08 - Aura (versão 4.00) + /// + [Description("Aura")] + [XmlEnum("08")] + Aura = 08, + + /// + /// 09 - Cabal (versão 4.00) + /// + [Description("Cabal")] + [XmlEnum("09")] + Cabal = 09, + + [Description("Alelo")] + [XmlEnum("10")] + Alelo = 10, + + [Description("Banes Card")] + [XmlEnum("11")] + BanesCard = 11, + + [Description("CalCard")] + [XmlEnum("12")] + CalCard = 12, + + [Description("Credz")] + [XmlEnum("13")] + Credz = 13, + + [Description("Discover")] + [XmlEnum("14")] + Discover = 14, + + [Description("GoodCard")] + [XmlEnum("15")] + GoodCard = 15, + + [Description("GreenCard")] + [XmlEnum("16")] + GreenCard = 16, + + [Description("Hiper")] + [XmlEnum("17")] + Hiper = 17, + + [Description("JcB")] + [XmlEnum("18")] + JcB = 18, + + [Description("Mais")] + [XmlEnum("19")] + Mais = 19, + + [Description("MaxVan")] + [XmlEnum("20")] + MaxVan = 20, + + [Description("Policard")] + [XmlEnum("21")] + Policard = 21, + + [Description("RedeCompras")] + [XmlEnum("22")] + RedeCompras = 22, + + [Description("Sodexo")] + [XmlEnum("23")] + Sodexo = 23, + + [Description("ValeCard")] + [XmlEnum("24")] + ValeCard = 24, + + [Description("Verocheque")] + [XmlEnum("25")] + Verocheque = 25, + + [Description("VR")] + [XmlEnum("26")] + VR = 26, + + [Description("Ticket")] + [XmlEnum("27")] + Ticket = 27, + + /// + /// 99 - Outros + /// + [Description("Outros")] + [XmlEnum("99")] + bcOutros = 99 + } + + /// + /// Tipo de Integração para pagamento + /// 1 - Pagamento integrado com o sistema de automação da empresa(Ex.: equipamento TEF, Comércio Eletrônico); + /// 2 - Pagamento não integrado com o sistema de automação da empresa(Ex.: equipamento POS); + /// + public enum TipoIntegracaoPagamento + { + /// + /// 1 - Pagamento integrado com o sistema de automação da empresa(Ex.: equipamento TEF, Comércio Eletrônico) + /// + [Description("Pagamento integrado com o sistema de automação da empresa(Ex.: equipamento TEF, Comércio Eletrônico)")] + [XmlEnum("1")] + TipIntegradoAutomacao = 1, + + /// + /// 2 - Pagamento não integrado com o sistema de automação da empresa(Ex.: equipamento POS) + /// + [Description("Pagamento não integrado com o sistema de automação da empresa(Ex.: equipamento POS)")] + [XmlEnum("2")] + TipNaoIntegrado = 2 + } +} diff --git a/Shared.NFe.Classes/Informacoes/Total/ICMSTot.cs b/NFe.Classes/Informacoes/Total/ICMSTot.cs similarity index 78% rename from Shared.NFe.Classes/Informacoes/Total/ICMSTot.cs rename to NFe.Classes/Informacoes/Total/ICMSTot.cs index 45063aabb..bbdcfdc73 100644 --- a/Shared.NFe.Classes/Informacoes/Total/ICMSTot.cs +++ b/NFe.Classes/Informacoes/Total/ICMSTot.cs @@ -49,7 +49,7 @@ public class ICMSTot private decimal _vCofins; private decimal _vOutro; private decimal _vNf; - private decimal _vTotTrib; + private decimal? _vTotTrib; private decimal? _vFcpufDest; private decimal? _vIcmsufDest; private decimal? _vIcmsufRemet; @@ -57,6 +57,12 @@ public class ICMSTot private decimal? _vFcpst; private decimal? _vFcpstRet; private decimal? _vIpiDevol; + private decimal? _qBCMono; + private decimal? _vICMSMono; + private decimal? _qBCMonoReten; + private decimal? _vICMSMonoReten; + private decimal? _qBCMonoRet; + private decimal? _vICMSMonoRet; /// /// W03 - Base de Cálculo do ICMS @@ -195,6 +201,90 @@ public bool vFCPSTRetSpecified get { return vFCPSTRet.HasValue; } } + /// + /// W06b.1 - Valor total da quantidade tributada do ICMS monofásico próprio + /// + public decimal? qBCMono + { + get { return _qBCMono.Arredondar(2); } + set { _qBCMono = value.Arredondar(2); } + } + + public bool ShouldSerializeqBCMono() + { + return qBCMono.HasValue; + } + + /// + /// W06c - Valor total do ICMS monofásico próprio + /// + public decimal? vICMSMono + { + get { return _vICMSMono.Arredondar(2); } + set { _vICMSMono = value.Arredondar(2); } + } + + public bool ShouldSerializevICMSMono() + { + return vICMSMono.HasValue; + } + + /// + /// W06c.1 - Valor total da quantidade tributada do ICMS monofásico sujeito a retenção + /// + public decimal? qBCMonoReten + { + get { return _qBCMonoReten.Arredondar(2); } + set { _qBCMonoReten = value.Arredondar(2); } + } + + public bool ShouldSerializeqBCMonoReten() + { + return qBCMonoReten.HasValue; + } + + /// + /// W06d - Valor total do ICMS monofásico sujeito a retenção + /// + public decimal? vICMSMonoReten + { + get { return _vICMSMonoReten.Arredondar(2); } + set { _vICMSMonoReten = value.Arredondar(2); } + } + + public bool ShouldSerializevICMSMonoReten() + { + return vICMSMonoReten.HasValue; + } + + /// + /// W06d.1 - Valor total da quantidade tributada do ICMS monofásico retido anteriormente + /// + public decimal? qBCMonoRet + { + get { return _qBCMonoRet.Arredondar(2); } + set { _qBCMonoRet = value.Arredondar(2); } + } + + public bool ShouldSerializeqBCMonoRet() + { + return qBCMonoRet.HasValue; + } + + /// + /// W06e - Valor total do ICMS monofásico retido anteriormente + /// + public decimal? vICMSMonoRet + { + get { return _vICMSMonoRet.Arredondar(2); } + set { _vICMSMonoRet = value.Arredondar(2); } + } + + public bool ShouldSerializevICMSMonoRet() + { + return vICMSMonoRet.HasValue; + } + /// /// W07 - Valor Total dos produtos e serviços /// @@ -303,11 +393,15 @@ public decimal vNF /// /// W16a - Valor aproximado total de tributos federais, estaduais e municipais. /// - public decimal vTotTrib + public decimal? vTotTrib { get { return _vTotTrib.Arredondar(2); } set { _vTotTrib = value.Arredondar(2); } } + public bool ShouldSerializevTotTrib() + { + return vTotTrib.HasValue; + } } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Total/ISSQNtot.cs b/NFe.Classes/Informacoes/Total/ISSQNtot.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Total/ISSQNtot.cs rename to NFe.Classes/Informacoes/Total/ISSQNtot.cs diff --git a/Shared.NFe.Classes/Informacoes/Total/ISSQNtotTipos.cs b/NFe.Classes/Informacoes/Total/ISSQNtotTipos.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Total/ISSQNtotTipos.cs rename to NFe.Classes/Informacoes/Total/ISSQNtotTipos.cs diff --git a/NFe.Classes/Informacoes/Total/ISTot.cs b/NFe.Classes/Informacoes/Total/ISTot.cs new file mode 100644 index 000000000..895b1470d --- /dev/null +++ b/NFe.Classes/Informacoes/Total/ISTot.cs @@ -0,0 +1,49 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Informacoes.Total +{ + public class ISTot + { + private decimal _vIS; + + /// + /// W33 - Total do imposto seletivo + /// + public decimal vIS + { + get => _vIS; + set => _vIS = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Total/IbsCbs/Cbs/gCBSTotal.cs b/NFe.Classes/Informacoes/Total/IbsCbs/Cbs/gCBSTotal.cs new file mode 100644 index 000000000..7aaebe31f --- /dev/null +++ b/NFe.Classes/Informacoes/Total/IbsCbs/Cbs/gCBSTotal.cs @@ -0,0 +1,89 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Informacoes.Total.IbsCbs.Cbs +{ + public class gCBSTotal + { + private decimal _vDif; + private decimal _vDevTrib; + private decimal _vCBS; + private decimal _vCredPres; + private decimal _vCredPresCondSus; + + /// + /// W53 - Valor total do diferimento + /// + public decimal vDif + { + get => _vDif; + set => _vDif = value.Arredondar(2); + } + + /// + /// W54 - Valor total de devolução de tributos + /// + public decimal vDevTrib + { + get => _vDevTrib; + set => _vDevTrib = value.Arredondar(2); + } + + /// + /// W56 - Valor total do CBS + /// + public decimal vCBS + { + get => _vCBS; + set => _vCBS = value.Arredondar(2); + } + + /// + /// W56a - Valor total do crédito presumido + /// + public decimal vCredPres + { + get => _vCredPres; + set => _vCredPres = value.Arredondar(2); + } + + /// + /// W56b - Valor total do crédito presumido em condição suspensiva + /// + public decimal vCredPresCondSus + { + get => _vCredPresCondSus; + set => _vCredPresCondSus = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Total/IbsCbs/IBSCBSTot.cs b/NFe.Classes/Informacoes/Total/IbsCbs/IBSCBSTot.cs new file mode 100644 index 000000000..40b5c5d9d --- /dev/null +++ b/NFe.Classes/Informacoes/Total/IbsCbs/IBSCBSTot.cs @@ -0,0 +1,76 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; +using NFe.Classes.Informacoes.Total.IbsCbs.Cbs; +using NFe.Classes.Informacoes.Total.IbsCbs.Ibs; +using NFe.Classes.Informacoes.Total.IbsCbs.Monofasica; + +namespace NFe.Classes.Informacoes.Total.IbsCbs +{ + public class IBSCBSTot + { + private decimal _vBCIBSCBS; + + /// + /// W35 - Valor total da BC do IBS e da CBS + /// + public decimal vBCIBSCBS + { + get => _vBCIBSCBS; + set => _vBCIBSCBS = value.Arredondar(2); + } + + /// + /// W36 - Grupo total do IBS + /// + public gIBS gIBS { get; set; } + + /// + /// W50 - Grupo total do CBS + /// + [XmlElement("gCBS")] + public gCBSTotal gCBS { get; set; } + + /// + /// W57 - Grupo total da Monofasia + /// + public gMono gMono { get; set; } + + /// + /// W59e - Grupo total do Estorno de Crédito + /// + [XmlElement("gEstornoCred")] + public gEstornoCredTotal gEstornoCred { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBS.cs b/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBS.cs new file mode 100644 index 000000000..67496f123 --- /dev/null +++ b/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBS.cs @@ -0,0 +1,83 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Informacoes.Total.IbsCbs.Ibs +{ + public class gIBS + { + private decimal _vIBS; + private decimal _vCredPres; + private decimal _vCredPresCondSus; + + /// + /// W37 - Grupo total do IBS da UF + /// + [XmlElement("gIBSUF")] + public gIBSUFTotal gIBSUF { get; set; } + + /// + /// W42 - Grupo total do IBS do Município + /// + [XmlElement("gIBSMun")] + public gIBSMunTotal gIBSMun { get; set; } + + /// + /// W47 - Valor total do IBS + /// + public decimal vIBS + { + get => _vIBS; + set => _vIBS = value.Arredondar(2); + } + + /// + /// W48 - Valor total do crédito presumido + /// + public decimal vCredPres + { + get => _vCredPres; + set => _vCredPres = value.Arredondar(2); + } + + /// + /// W49 - Valor total do crédito presumido em condição suspensiva + /// + public decimal vCredPresCondSus + { + get => _vCredPresCondSus; + set => _vCredPresCondSus = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBSMunTotal.cs b/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBSMunTotal.cs new file mode 100644 index 000000000..833da3761 --- /dev/null +++ b/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBSMunTotal.cs @@ -0,0 +1,69 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Informacoes.Total.IbsCbs.Ibs +{ + public class gIBSMunTotal + { + private decimal _vDif; + private decimal _vDevTrib; + private decimal _vIBSMun; + + /// + /// W43 - Valor total do diferimento + /// + public decimal vDif + { + get => _vDif; + set => _vDif = value.Arredondar(2); + } + + /// + /// W44 - Valor total de devolução de tributos + /// + public decimal vDevTrib + { + get => _vDevTrib; + set => _vDevTrib = value.Arredondar(2); + } + + /// + /// W46 - Valor total do IBS do Município + /// + public decimal vIBSMun + { + get => _vIBSMun; + set => _vIBSMun = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBSUFTotal.cs b/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBSUFTotal.cs new file mode 100644 index 000000000..e007530b6 --- /dev/null +++ b/NFe.Classes/Informacoes/Total/IbsCbs/Ibs/gIBSUFTotal.cs @@ -0,0 +1,69 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Informacoes.Total.IbsCbs.Ibs +{ + public class gIBSUFTotal + { + private decimal _vDif; + private decimal _vDevTrib; + private decimal _vIBSUF; + + /// + /// W38 - Valor total do diferimento + /// + public decimal vDif + { + get => _vDif; + set => _vDif = value.Arredondar(2); + } + + /// + /// W39 - Valor total de devolução de tributos + /// + public decimal vDevTrib + { + get => _vDevTrib; + set => _vDevTrib = value.Arredondar(2); + } + + /// + /// W41 - Valor total do IBS da UF + /// + public decimal vIBSUF + { + get => _vIBSUF; + set => _vIBSUF = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Total/IbsCbs/Monofasica/gMono.cs b/NFe.Classes/Informacoes/Total/IbsCbs/Monofasica/gMono.cs new file mode 100644 index 000000000..19f56c73b --- /dev/null +++ b/NFe.Classes/Informacoes/Total/IbsCbs/Monofasica/gMono.cs @@ -0,0 +1,99 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Informacoes.Total.IbsCbs.Monofasica +{ + public class gMono + { + private decimal _vIBSMono; + private decimal _vCBSMono; + private decimal _vIBSMonoReten; + private decimal _vCBSMonoReten; + private decimal _vIBSMonoRet; + private decimal _vCBSMonoRet; + + /// + /// W58 - Total do IBS monofásico + /// + public decimal vIBSMono + { + get => _vIBSMono; + set => _vIBSMono = value.Arredondar(2); + } + + /// + /// W59 - Total da CBS monofásica + /// + public decimal vCBSMono + { + get => _vCBSMono; + set => _vCBSMono = value.Arredondar(2); + } + + /// + /// W59a - Total do IBS monofásico sujeito a retenção + /// + public decimal vIBSMonoReten + { + get => _vIBSMonoReten; + set => _vIBSMonoReten = value.Arredondar(2); + } + + /// + /// W59b - Total da CBS monofásica sujeita a retenção + /// + public decimal vCBSMonoReten + { + get => _vCBSMonoReten; + set => _vCBSMonoReten = value.Arredondar(2); + } + + /// + /// W59c - Total do IBS monofásico retido anteriormente + /// + public decimal vIBSMonoRet + { + get => _vIBSMonoRet; + set => _vIBSMonoRet = value.Arredondar(2); + } + + /// + /// W59d - Total da CBS monofásica retida anteriormente + /// + public decimal vCBSMonoRet + { + get => _vCBSMonoRet; + set => _vCBSMonoRet = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Total/IbsCbs/gEstornoCredTotal.cs b/NFe.Classes/Informacoes/Total/IbsCbs/gEstornoCredTotal.cs new file mode 100644 index 000000000..68a9e9f55 --- /dev/null +++ b/NFe.Classes/Informacoes/Total/IbsCbs/gEstornoCredTotal.cs @@ -0,0 +1,59 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Informacoes.Total.IbsCbs +{ + public class gEstornoCredTotal + { + private decimal _vIBSEstCred; + private decimal _vCBSEstCred; + + /// + /// W59F - Valor total do IBS estornado + /// + public decimal vIBSEstCred + { + get => _vIBSEstCred.Arredondar(2); + set => _vIBSEstCred = value; + } + + /// + /// W59G - Valor total do CBS estornado + /// + public decimal vCBSEstCred + { + get => _vCBSEstCred.Arredondar(2); + set => _vCBSEstCred = value; + } + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Total/retTrib.cs b/NFe.Classes/Informacoes/Total/retTrib.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Total/retTrib.cs rename to NFe.Classes/Informacoes/Total/retTrib.cs diff --git a/Shared.NFe.Classes/Informacoes/Total/total.cs b/NFe.Classes/Informacoes/Total/total.cs similarity index 82% rename from Shared.NFe.Classes/Informacoes/Total/total.cs rename to NFe.Classes/Informacoes/Total/total.cs index 3d444214a..7eed93f4b 100644 --- a/Shared.NFe.Classes/Informacoes/Total/total.cs +++ b/NFe.Classes/Informacoes/Total/total.cs @@ -30,10 +30,15 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + +using NFe.Classes.Informacoes.Total.IbsCbs; + namespace NFe.Classes.Informacoes.Total { public class total { + private decimal? _vNFTot; + /// /// W02 - Grupo Totais referentes ao ICMS /// @@ -48,5 +53,26 @@ public class total /// W23 - Grupo Retenções de Tributos /// public retTrib retTrib { get; set; } + + /// + /// W31 - Grupo total do imposto seletivo + /// + public ISTot ISTot { get; set; } + + /// + /// W34 - Totais da NF-e com IBS e CBS + /// + public IBSCBSTot IBSCBSTot { get; set; } + + /// + /// W60 - Valor total da NF-e com IBS / CBS / IS + /// + public decimal? vNFTot + { + get => _vNFTot; + set => _vNFTot = value.Arredondar(2); + } + + public bool ShouldSerializevNFTot() => vNFTot.HasValue; } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Transporte/lacres.cs b/NFe.Classes/Informacoes/Transporte/lacres.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/lacres.cs rename to NFe.Classes/Informacoes/Transporte/lacres.cs diff --git a/Shared.NFe.Classes/Informacoes/Transporte/reboque.cs b/NFe.Classes/Informacoes/Transporte/reboque.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/reboque.cs rename to NFe.Classes/Informacoes/Transporte/reboque.cs diff --git a/Shared.NFe.Classes/Informacoes/Transporte/retTransp.cs b/NFe.Classes/Informacoes/Transporte/retTransp.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/retTransp.cs rename to NFe.Classes/Informacoes/Transporte/retTransp.cs diff --git a/Shared.NFe.Classes/Informacoes/Transporte/transp.cs b/NFe.Classes/Informacoes/Transporte/transp.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/transp.cs rename to NFe.Classes/Informacoes/Transporte/transp.cs diff --git a/Shared.NFe.Classes/Informacoes/Transporte/transpTipos.cs b/NFe.Classes/Informacoes/Transporte/transpTipos.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/transpTipos.cs rename to NFe.Classes/Informacoes/Transporte/transpTipos.cs diff --git a/Shared.NFe.Classes/Informacoes/Transporte/transporta.cs b/NFe.Classes/Informacoes/Transporte/transporta.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/transporta.cs rename to NFe.Classes/Informacoes/Transporte/transporta.cs diff --git a/Shared.NFe.Classes/Informacoes/Transporte/veicTransp.cs b/NFe.Classes/Informacoes/Transporte/veicTransp.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/veicTransp.cs rename to NFe.Classes/Informacoes/Transporte/veicTransp.cs diff --git a/Shared.NFe.Classes/Informacoes/Transporte/vol.cs b/NFe.Classes/Informacoes/Transporte/vol.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/Transporte/vol.cs rename to NFe.Classes/Informacoes/Transporte/vol.cs diff --git a/Shared.NFe.Classes/Informacoes/autXML.cs b/NFe.Classes/Informacoes/autXML.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/autXML.cs rename to NFe.Classes/Informacoes/autXML.cs diff --git a/Shared.NFe.Classes/Informacoes/avulsa.cs b/NFe.Classes/Informacoes/avulsa.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/avulsa.cs rename to NFe.Classes/Informacoes/avulsa.cs diff --git a/Shared.NFe.Classes/Informacoes/compra.cs b/NFe.Classes/Informacoes/compra.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/compra.cs rename to NFe.Classes/Informacoes/compra.cs diff --git a/Shared.NFe.Classes/Informacoes/entrega.cs b/NFe.Classes/Informacoes/entrega.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/entrega.cs rename to NFe.Classes/Informacoes/entrega.cs diff --git a/Shared.NFe.Classes/Informacoes/exporta.cs b/NFe.Classes/Informacoes/exporta.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/exporta.cs rename to NFe.Classes/Informacoes/exporta.cs diff --git a/NFe.Classes/Informacoes/infNFe.cs b/NFe.Classes/Informacoes/infNFe.cs new file mode 100644 index 000000000..3d3b8d699 --- /dev/null +++ b/NFe.Classes/Informacoes/infNFe.cs @@ -0,0 +1,172 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System.Collections.Generic; +using System.Xml.Serialization; +using NFe.Classes.Informacoes.Agropecuario; +using NFe.Classes.Informacoes.Cana; +using NFe.Classes.Informacoes.Cobranca; +using NFe.Classes.Informacoes.Destinatario; +using NFe.Classes.Informacoes.Detalhe; +using NFe.Classes.Informacoes.Emitente; +using NFe.Classes.Informacoes.Identificacao; +using NFe.Classes.Informacoes.Observacoes; +using NFe.Classes.Informacoes.Pagamento; +using NFe.Classes.Informacoes.Total; +using NFe.Classes.Informacoes.Transporte; +using Shared.NFe.Classes.Informacoes.InfRespTec; +using Shared.NFe.Classes.Informacoes.Intermediador; + +namespace NFe.Classes.Informacoes +{ + public class infNFe + { + public infNFe() + { + det = new List(); + } + + /// + /// A02 - Versão do leiaute da NFe (2.0, 3.1, etc) + /// + [XmlAttribute] + public string versao { get; set; } + + /// + /// A03 - Identificador da TAG a ser assinada + /// informar a chave de acesso da NF-e precedida do literal "NFe", acrescentada a validação do formato (v2.0). + /// + [XmlAttribute] + public string Id { get; set; } + + /// + /// B01 - Identificação da NF-e + /// + public ide ide { get; set; } + + /// + /// C01 - Grupo de identificação do emitente da NF-e + /// + public emit emit { get; set; } + + /// + /// D01 - Informações do fisco emitente (uso exclusivo do fisco) + /// + public avulsa avulsa { get; set; } + + /// + /// E01 - Grupo de identificação do Destinatário da NF-e + /// + public dest dest { get; set; } + + /// + /// F01 - Identificação do Local de retirada + /// + public retirada retirada { get; set; } + + /// + /// G01 - Identificação do Local de entrega + /// + public entrega entrega { get; set; } + + /// + /// GA01 - Pessoas autorizadas a acessar o XML da NF-e + /// Ocorrência: 0-10 + /// + [XmlElement("autXML")] + public List autXML { get; set; } + + /// + /// H01 - Dados dos detalhes da NF-e + /// Ocorrência: 1-990 + /// + [XmlElement("det")] + public List det { get; set; } + + /// + /// W01 - Grupo Totais da NF-e + /// + public total total { get; set; } + + /// + /// X01 - Grupo Informações do Transporte + /// + public transp transp { get; set; } + + /// + /// Y01 - Grupo Cobrança + /// + public cobr cobr { get; set; } + + /// + /// YA01 - Grupo de Formas de Pagamento + /// Ocorrência: 0-100 + /// + [XmlElement("pag")] + public List pag { get; set; } + + /// + /// YB01 - Grupo de Informações do Intermediador da Transação + /// + public infIntermed infIntermed { get; set; } + + /// + /// Z01 - Grupo de Informações Adicionais + /// + public infAdic infAdic { get; set; } + + /// + /// ZA01 - Grupo Exportação + /// + public exporta exporta { get; set; } + + /// + /// ZB01 - Grupo Compra + /// + public compra compra { get; set; } + + /// + /// ZC01 - Grupo Cana + /// + public cana cana { get; set; } + + /// + /// ZD01 - Grupo do Responsável Técnico + /// + public infRespTec infRespTec { get; set; } + + /// + /// ZF01 - Grupo de produtos da agricultura, pecuária e produção Florestal + /// + public agropecuario agropecuario { get; set; } + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/retirada.cs b/NFe.Classes/Informacoes/retirada.cs similarity index 100% rename from Shared.NFe.Classes/Informacoes/retirada.cs rename to NFe.Classes/Informacoes/retirada.cs diff --git a/NFe.Classes/NFe.Classes.csproj b/NFe.Classes/NFe.Classes.csproj index 6d8613a50..dd08bae95 100755 --- a/NFe.Classes/NFe.Classes.csproj +++ b/NFe.Classes/NFe.Classes.csproj @@ -1,72 +1,16 @@ - - - + + - Debug - AnyCPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984} - Library - Properties - NFe.Classes - NFe.Classes - v4.5 - 512 - - - SAK - SAK - SAK - SAK - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - + - + + - - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} - DFe.Classes - - - {b4e1a7a6-5d66-4326-8a8d-39338e6fc84c} - DFe.Utils - + - - - - \ No newline at end of file + + diff --git a/NFe.Classes/NFe.Classes.csproj.DotSettings b/NFe.Classes/NFe.Classes.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/NFe.Classes/NFe.Classes.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/NFe.Classes/NFe.Classes.csproj.user b/NFe.Classes/NFe.Classes.csproj.user deleted file mode 100644 index ca1d04b08..000000000 --- a/NFe.Classes/NFe.Classes.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - ProjectFiles - - \ No newline at end of file diff --git a/NFe.Classes/NFe.Classes.csproj.vspscc b/NFe.Classes/NFe.Classes.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/NFe.Classes/NFe.Classes.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Shared.NFe.Classes/NFe.cs b/NFe.Classes/NFe.cs similarity index 100% rename from Shared.NFe.Classes/NFe.cs rename to NFe.Classes/NFe.cs diff --git a/NFe.Classes/Properties/AssemblyInfo.cs b/NFe.Classes/Properties/AssemblyInfo.cs deleted file mode 100644 index af7e04619..000000000 --- a/NFe.Classes/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,71 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Reflection; -using System.Runtime.InteropServices; - -// Informações gerais sobre um assembly são controladas através do seguinte -// conjunto de atributos. Altere o valor destes atributos para modificar a informação -// associada a um assembly. - -[assembly: AssemblyTitle("NFe.Classes")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Classes")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Definir ComVisible como false torna os tipos neste assembly não visíveis -// para componentes COM. Caso precise acessar um tipo neste assembly a partir de -// COM, defina o atributo ComVisible como true nesse tipo. - -[assembly: ComVisible(false)] - -// O GUID a seguir é para o ID da typelib se este projeto for exposto para COM - -[assembly: Guid("9eb04c4c-00c0-4298-a099-de0cc2cf9815")] - -// Informações de Versão para um assembly consistem nos quatro valores a seguir: -// -// Versão Principal -// Versão Secundária -// Número da Versão -// Revisão -// -// É possível especificar todos os valores ou usar o padrão de Números de Compilação e Revisão -// utilizando o '*' como mostrado abaixo: -// [assembly: AssemblyVersion("1.0.0.772")] - -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/Shared.NFe.Classes/Protocolo/infProt.cs b/NFe.Classes/Protocolo/infProt.cs similarity index 100% rename from Shared.NFe.Classes/Protocolo/infProt.cs rename to NFe.Classes/Protocolo/infProt.cs diff --git a/Shared.NFe.Classes/Protocolo/protNFe.cs b/NFe.Classes/Protocolo/protNFe.cs similarity index 100% rename from Shared.NFe.Classes/Protocolo/protNFe.cs rename to NFe.Classes/Protocolo/protNFe.cs diff --git a/Shared.NFe.Classes/Servicos/AdmCsc/admCscNFCe.cs b/NFe.Classes/Servicos/AdmCsc/admCscNFCe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/AdmCsc/admCscNFCe.cs rename to NFe.Classes/Servicos/AdmCsc/admCscNFCe.cs diff --git a/Shared.NFe.Classes/Servicos/AdmCsc/dadosCsc.cs b/NFe.Classes/Servicos/AdmCsc/dadosCsc.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/AdmCsc/dadosCsc.cs rename to NFe.Classes/Servicos/AdmCsc/dadosCsc.cs diff --git a/Shared.NFe.Classes/Servicos/AdmCsc/retAdmCscNFCe.cs b/NFe.Classes/Servicos/AdmCsc/retAdmCscNFCe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/AdmCsc/retAdmCscNFCe.cs rename to NFe.Classes/Servicos/AdmCsc/retAdmCscNFCe.cs diff --git a/Shared.NFe.Classes/Servicos/Autorizacao/enviNFe3.cs b/NFe.Classes/Servicos/Autorizacao/enviNFe3.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Autorizacao/enviNFe3.cs rename to NFe.Classes/Servicos/Autorizacao/enviNFe3.cs diff --git a/Shared.NFe.Classes/Servicos/Autorizacao/enviNFe4.cs b/NFe.Classes/Servicos/Autorizacao/enviNFe4.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Autorizacao/enviNFe4.cs rename to NFe.Classes/Servicos/Autorizacao/enviNFe4.cs diff --git a/Shared.NFe.Classes/Servicos/Consulta/consSitNFe.cs b/NFe.Classes/Servicos/Consulta/consSitNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Consulta/consSitNFe.cs rename to NFe.Classes/Servicos/Consulta/consSitNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Consulta/procEventoNFe.cs b/NFe.Classes/Servicos/Consulta/procEventoNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Consulta/procEventoNFe.cs rename to NFe.Classes/Servicos/Consulta/procEventoNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Consulta/retConsSitNFe.cs b/NFe.Classes/Servicos/Consulta/retConsSitNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Consulta/retConsSitNFe.cs rename to NFe.Classes/Servicos/Consulta/retConsSitNFe.cs diff --git a/Shared.NFe.Classes/Servicos/ConsultaCadastro/ConsCad.cs b/NFe.Classes/Servicos/ConsultaCadastro/ConsCad.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/ConsultaCadastro/ConsCad.cs rename to NFe.Classes/Servicos/ConsultaCadastro/ConsCad.cs diff --git a/Shared.NFe.Classes/Servicos/ConsultaCadastro/ConsultaCadastroTipos.cs b/NFe.Classes/Servicos/ConsultaCadastro/ConsultaCadastroTipos.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/ConsultaCadastro/ConsultaCadastroTipos.cs rename to NFe.Classes/Servicos/ConsultaCadastro/ConsultaCadastroTipos.cs diff --git a/Shared.NFe.Classes/Servicos/ConsultaCadastro/ender.cs b/NFe.Classes/Servicos/ConsultaCadastro/ender.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/ConsultaCadastro/ender.cs rename to NFe.Classes/Servicos/ConsultaCadastro/ender.cs diff --git a/Shared.NFe.Classes/Servicos/ConsultaCadastro/infCad.cs b/NFe.Classes/Servicos/ConsultaCadastro/infCad.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/ConsultaCadastro/infCad.cs rename to NFe.Classes/Servicos/ConsultaCadastro/infCad.cs diff --git a/Shared.NFe.Classes/Servicos/ConsultaCadastro/infConsEnv.cs b/NFe.Classes/Servicos/ConsultaCadastro/infConsEnv.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/ConsultaCadastro/infConsEnv.cs rename to NFe.Classes/Servicos/ConsultaCadastro/infConsEnv.cs diff --git a/Shared.NFe.Classes/Servicos/ConsultaCadastro/infConsRet.cs b/NFe.Classes/Servicos/ConsultaCadastro/infConsRet.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/ConsultaCadastro/infConsRet.cs rename to NFe.Classes/Servicos/ConsultaCadastro/infConsRet.cs diff --git a/Shared.NFe.Classes/Servicos/ConsultaCadastro/retConsCad.cs b/NFe.Classes/Servicos/ConsultaCadastro/retConsCad.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/ConsultaCadastro/retConsCad.cs rename to NFe.Classes/Servicos/ConsultaCadastro/retConsCad.cs diff --git a/NFe.Classes/Servicos/ConsultaGtin/consGTIN.cs b/NFe.Classes/Servicos/ConsultaGtin/consGTIN.cs new file mode 100644 index 000000000..89a6f2995 --- /dev/null +++ b/NFe.Classes/Servicos/ConsultaGtin/consGTIN.cs @@ -0,0 +1,13 @@ +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.ConsultaGtin +{ + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe")] + public class consGTIN + { + [XmlAttribute] + public string versao { get; set; } + + public string GTIN { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/ConsultaGtin/retConsGTIN.cs b/NFe.Classes/Servicos/ConsultaGtin/retConsGTIN.cs new file mode 100644 index 000000000..b5d939788 --- /dev/null +++ b/NFe.Classes/Servicos/ConsultaGtin/retConsGTIN.cs @@ -0,0 +1,22 @@ +using System; +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.ConsultaGtin +{ + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe")] + public class retConsGTIN : IRetornoServico + { + [XmlAttribute] + public string versao { get; set; } + public string verAplic { get; set; } + public int cStat { get; set; } + public string xMotivo { get; set; } + public DateTime dhResp { get; set; } + public string GTIN { get; set; } + public string tpGTIN { get; set; } + public string xProd { get; set; } + public string NCM { get; set; } + public string CEST { get; set; } + } +} + diff --git a/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs new file mode 100644 index 000000000..a75338e72 --- /dev/null +++ b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs @@ -0,0 +1,175 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes.Entidades; +using DFe.Utils; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Servicos.Evento; +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.DistribuicaoDFe.Schemas +{ + [Serializable()] + [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] + public class detEvento + { + /// + /// HP18 - Versão do Pedido de Cancelamento, da carta de correção ou EPEC, deve ser informado com a mesma informação da + /// tag verEvento (HP16) + /// + [XmlAttribute] + public string versao { get; set; } + + /// + /// HP19 - "Cancelamento", "Carta de Correção", "Carta de Correcao" ou "EPEC" + /// + public string descEvento { get; set; } + + #region Carta de Correção + + /// + /// HP20 - Correção a ser considerada, texto livre. A correção mais recente substitui as anteriores. + /// + public string xCorrecao { get; set; } + + /// + /// HP20a - Condições de uso da Carta de Correção + /// + public string xCondUso { get; set; } + + #endregion + + #region EPEC + + /// + /// P20 - Código do Órgão do Autor do Evento. + /// Nota: Informar o código da UF do Emitente para este evento. + /// + public Estado? cOrgaoAutor { get; set; } + + /// + /// P21 - Informar "1=Empresa Emitente" para este evento. + /// Nota: 1=Empresa Emitente; 2=Empresa Destinatária; + /// 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos. + /// + public TipoAutor? tpAutor { get; set; } + + /// + /// P22 - Versão do aplicativo do Autor do Evento. + /// + public string verAplic { get; set; } + + /// + /// P23 - Data e hora + /// + [XmlIgnore] + public DateTimeOffset? dhEmi { get; set; } + + /// + /// Proxy para dhEmi no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhEmi")] + public string ProxyDhEmi + { + get { return dhEmi.ParaDataHoraStringUtc(); } + set { dhEmi = DateTimeOffset.Parse(value); } + } + + /// + /// P24 - 0=Entrada; 1=Saída; + /// + public TipoNFe? tpNF { get; set; } + + /// + /// P25 - IE do Emitente + /// + public string IE { get; set; } + + /// + /// P26 + /// + public dest dest { get; set; } + + public bool ShouldSerializecOrgaoAutor() + { + return cOrgaoAutor.HasValue; + } + + public bool ShouldSerializetpAutor() + { + return tpAutor.HasValue; + } + + public bool ShouldSerializetpNF() + { + return tpNF.HasValue; + } + + #endregion + + #region Cancelamento + + /// + /// HP20 - Informar o número do Protocolo de Autorização da NF-e a ser Cancelada. + /// + public string nProt { get; set; } + + /// + /// HP21 - Informar a justificativa do cancelamento + /// + public string xJust { get; set; } + + #endregion + + #region Cancelamento por substituição + + /// + /// P31 - Chave de acesso da NF-e substituta da NF-e a ser cancelada + /// + public string chNFeRef { get; set; } + + #endregion + + #region Averbação para Exportação + [XmlElement("itensAverbados")] + public List ItensAverbados { get; set; } + + public bool ShouldSerializeItensAverbados() + { + return ItensAverbados != null; + } + #endregion + } +} diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/evento.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/evento.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/evento.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/evento.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/eventoInfEvento.cs diff --git a/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/infProt.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/infProt.cs new file mode 100644 index 000000000..303273be5 --- /dev/null +++ b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/infProt.cs @@ -0,0 +1,75 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Utils; +using System; +using System.ComponentModel; +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.DistribuicaoDFe.Schemas +{ + [Serializable()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe", IsNullable = false)] + public class infProt + { + + public byte tpAmb { get; set; } + + public string verAplic { get; set; } + + public string chNFe { get; set; } + + [XmlIgnore] + public DateTimeOffset dhRecbto { get; set; } + + [XmlElement(ElementName = "dhRecbto")] + public string ProxyDhRecbto + { + get { return dhRecbto.ParaDataHoraStringUtc(); } + set { dhRecbto = DateTimeOffset.Parse(value); } + } + + public ulong nProt { get; set; } + + public string digVal { get; set; } + + public int cStat { get; set; } + + public string xMotivo { get; set; } + + [XmlAttribute()] + public string Id { get; set; } + } +} diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/nfeProc.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/nfeProc.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/nfeProc.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/nfeProc.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoNFe.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoNFe.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/procEventoNFe.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/protNFe.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/protNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/protNFe.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/protNFe.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resEvento.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resEvento.cs similarity index 98% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resEvento.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resEvento.cs index 72e83ef09..0cb7b1e40 100644 --- a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resEvento.cs +++ b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resEvento.cs @@ -59,7 +59,7 @@ public class resEvento /// /// D04 - CNPJ do Emitente /// - public ulong CNPJ { get; set; } + public string CNPJ { get; set; } /// /// D05 - CPF do Emitente @@ -69,7 +69,6 @@ public class resEvento /// /// D06 - Chave de acesso da NF-e /// - [XmlElement(DataType = "integer")] public string chNFe { get; set; } /// diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resNFe.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resNFe.cs similarity index 99% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resNFe.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resNFe.cs index 3c610803a..c682287ab 100644 --- a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resNFe.cs +++ b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/resNFe.cs @@ -53,7 +53,6 @@ public class resNFe /// /// C03 - Chave de acesso da NF-e /// - [XmlElement(DataType = "integer")] public string chNFe { get; set; } /// diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retEvento.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retEvento.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retEvento.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retEvento.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs b/NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/Schemas/retInfEvento.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/consChNFe.cs b/NFe.Classes/Servicos/DistribuicaoDFe/consChNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/consChNFe.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/consChNFe.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/consNSU.cs b/NFe.Classes/Servicos/DistribuicaoDFe/consNSU.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/consNSU.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/consNSU.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs b/NFe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs similarity index 97% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs index 1be5f36a0..8015a9795 100644 --- a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs +++ b/NFe.Classes/Servicos/DistribuicaoDFe/distDFeInt.cs @@ -1,117 +1,117 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.Xml.Serialization; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; - -namespace NFe.Classes.Servicos.DistribuicaoDFe -{ - [Serializable()] - [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] - [XmlRoot("distDFeInt", Namespace = "http://www.portalfiscal.inf.br/nfe", IsNullable = false)] - public class distDFeInt - { - private const string ErroCpfCnpjPreenchidos = "Somente preencher um dos campos: CNPJ ou CPF, para um objeto do tipo dest!"; - private string _cNPJ; - private string _cPF; - - /// - /// A02 - Versão do leiaute - /// - [XmlAttribute()] - public string versao { get; set; } - - /// - /// A03 - Identificação do Ambiente: 1=Produção /2=Homologação - /// - public TipoAmbiente tpAmb { get; set; } - - /// - /// A04 - Código da UF do Autor - /// - public Estado cUFAutor { get; set; } - - /// - /// A05 - CNPJ do interessado no DF-e - /// - public string CNPJ - { - get { return _cNPJ; } - set - { - if (string.IsNullOrEmpty(value)) return; - if (string.IsNullOrEmpty(_cPF)) - _cNPJ = value; - else - { - throw new ArgumentException(ErroCpfCnpjPreenchidos); - } - } - } - - /// - /// A06 - CPF do interessado no DF-e - /// - public string CPF - { - get { return _cPF; } - set - { - if (string.IsNullOrEmpty(value)) return; - if (string.IsNullOrEmpty(_cNPJ)) - _cPF = value; - else - { - throw new ArgumentException(ErroCpfCnpjPreenchidos); - } - } - } - - /// - /// A07 - Grupo para distribuir DF-e de interesse - /// - public distNSU distNSU { get; set; } - - /// - /// A09 - Grupo para consultar um DF-e a partir de um NSU específico - /// - public consNSU consNSU { get; set; } - - /// - /// A11 - Grupo para consultar uma NF-e pela chave de acesso - /// - public consChNFe consChNFe { get; set; } - } -} +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; + +namespace NFe.Classes.Servicos.DistribuicaoDFe +{ + [Serializable()] + [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] + [XmlRoot("distDFeInt", Namespace = "http://www.portalfiscal.inf.br/nfe", IsNullable = false)] + public class distDFeInt + { + private const string ErroCpfCnpjPreenchidos = "Somente preencher um dos campos: CNPJ ou CPF, para um objeto do tipo dest!"; + private string _cNPJ; + private string _cPF; + + /// + /// A02 - Versão do leiaute + /// + [XmlAttribute()] + public string versao { get; set; } + + /// + /// A03 - Identificação do Ambiente: 1=Produção /2=Homologação + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// A04 - Código da UF do Autor + /// + public Estado cUFAutor { get; set; } + + /// + /// A05 - CNPJ do interessado no DF-e + /// + public string CNPJ + { + get { return _cNPJ; } + set + { + if (string.IsNullOrEmpty(value)) return; + if (string.IsNullOrEmpty(_cPF)) + _cNPJ = value; + else + { + throw new ArgumentException(ErroCpfCnpjPreenchidos); + } + } + } + + /// + /// A06 - CPF do interessado no DF-e + /// + public string CPF + { + get { return _cPF; } + set + { + if (string.IsNullOrEmpty(value)) return; + if (string.IsNullOrEmpty(_cNPJ)) + _cPF = value; + else + { + throw new ArgumentException(ErroCpfCnpjPreenchidos); + } + } + } + + /// + /// A07 - Grupo para distribuir DF-e de interesse + /// + public distNSU distNSU { get; set; } + + /// + /// A09 - Grupo para consultar um DF-e a partir de um NSU específico + /// + public consNSU consNSU { get; set; } + + /// + /// A11 - Grupo para consultar uma NF-e pela chave de acesso + /// + public consChNFe consChNFe { get; set; } + } +} diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/distNSU.cs b/NFe.Classes/Servicos/DistribuicaoDFe/distNSU.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/distNSU.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/distNSU.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs b/NFe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/loteDistDFeInt.cs diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs b/NFe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs rename to NFe.Classes/Servicos/DistribuicaoDFe/retDistDFeInt.cs diff --git a/Shared.NFe.Classes/Servicos/Download/downloadNFe.cs b/NFe.Classes/Servicos/Download/downloadNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Download/downloadNFe.cs rename to NFe.Classes/Servicos/Download/downloadNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Download/procNFe.cs b/NFe.Classes/Servicos/Download/procNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Download/procNFe.cs rename to NFe.Classes/Servicos/Download/procNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Download/procNFeGrupoZip.cs b/NFe.Classes/Servicos/Download/procNFeGrupoZip.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Download/procNFeGrupoZip.cs rename to NFe.Classes/Servicos/Download/procNFeGrupoZip.cs diff --git a/Shared.NFe.Classes/Servicos/Download/retDownloadNFe.cs b/NFe.Classes/Servicos/Download/retDownloadNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Download/retDownloadNFe.cs rename to NFe.Classes/Servicos/Download/retDownloadNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Download/retNFe.cs b/NFe.Classes/Servicos/Download/retNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Download/retNFe.cs rename to NFe.Classes/Servicos/Download/retNFe.cs diff --git a/NFe.Classes/Servicos/Evento/Informacoes/CreditoBensServicos/gCredito.cs b/NFe.Classes/Servicos/Evento/Informacoes/CreditoBensServicos/gCredito.cs new file mode 100644 index 000000000..580b43884 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/CreditoBensServicos/gCredito.cs @@ -0,0 +1,67 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.CreditoBensServicos +{ + public class gCredito + { + private decimal _vCredIBS; + private decimal _vCredCBS; + + /// + /// P24 - Corresponde ao atributo “nItem” do elemento “det” do documento referenciado. + /// + [XmlAttribute] + public int nItem { get; set; } + + /// + /// P25 - Valor da solicitação de crédito a ser apropriado de IBS + /// + public decimal vCredIBS + { + get => _vCredIBS; + set => _vCredIBS = value.Arredondar(2); + } + + /// + /// P26 - Valor da solicitação de crédito a ser apropriado de CBS + /// + public decimal vCredCBS + { + get => _vCredCBS; + set => _vCredCBS = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/CreditoCombustivel/gConsumoComb.cs b/NFe.Classes/Servicos/Evento/Informacoes/CreditoCombustivel/gConsumoComb.cs new file mode 100644 index 000000000..00da22246 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/CreditoCombustivel/gConsumoComb.cs @@ -0,0 +1,73 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.CreditoCombustivel +{ + public class gConsumoComb + { + private decimal _vIBS; + private decimal _vCBS; + + /// + /// P24 - Corresponde ao atributo “nItem” do elemento “det” do documento referenciado. + /// + [XmlAttribute] + public int nItem { get; set; } + + /// + /// P25 - Valor do IBS relativo ao consumo de combustível na nota de aquisição + /// + public decimal vIBS + { + get => _vIBS; + set => _vIBS = value.Arredondar(2); + } + + /// + /// P26 - Valor da CBS relativo ao consumo de combustível na nota de aquisição + /// + public decimal vCBS + { + get => _vCBS; + set => _vCBS = value.Arredondar(2); + } + + /// + /// P27 - Informações de quantidade por item + /// + [XmlElement(ElementName = "gControleEstoque")] + public gControleEstoqueCredComb gControleEstoque { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/CreditoCombustivel/gControleEstoqueCredComb.cs b/NFe.Classes/Servicos/Evento/Informacoes/CreditoCombustivel/gControleEstoqueCredComb.cs new file mode 100644 index 000000000..aeaa34777 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/CreditoCombustivel/gControleEstoqueCredComb.cs @@ -0,0 +1,54 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Servicos.Evento.Informacoes.CreditoCombustivel +{ + public class gControleEstoqueCredComb + { + private decimal _qComb; + + /// + /// P28 - Informar a quantidade de consumo do item + /// + public decimal qComb + { + get => _qComb; + set => _qComb = value.Arredondar(4); + } + + /// + /// P29 - Informar a unidade relativa ao campo qComb + /// + public string uComb { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gCBS.cs b/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gCBS.cs new file mode 100644 index 000000000..9b5b0f3e1 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gCBS.cs @@ -0,0 +1,66 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using NFe.Classes.Informacoes.Detalhe; + +namespace NFe.Classes.Servicos.Evento.Informacoes.CreditoPresumido +{ + public class gCBS + { + private decimal _pCredPres; + private decimal _vCredPres; + + /// + /// P31 - Código de Classificação do Crédito presumido, conforme tabela cCredPres (Anexo IV) + /// + public CCredPres cCredPres { get; set; } + + /// + /// P32 - Percentual do Crédito Presumido + /// + public decimal pCredPres + { + get => _pCredPres.Arredondar(4); + set => _pCredPres = value.Arredondar(4); + } + + /// + /// P33 - Valor do Crédito Presumido + /// + public decimal vCredPres + { + get => _vCredPres.Arredondar(2); + set => _vCredPres = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gCredPres.cs b/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gCredPres.cs new file mode 100644 index 000000000..db3b9a357 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gCredPres.cs @@ -0,0 +1,61 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.CreditoPresumido +{ + public class gCredPres + { + /// + /// P24 - Corresponde ao atributo “nItem” do elemento “det” do documento referenciado + /// + [XmlAttribute("nItem")] + public int nItem { get; set; } + + /// + /// P25 - Valor do base de cálculo do item + /// + public int vBC { get; set; } + + /// + /// P26 - Grupo de Informações do Crédito Presumido do IBS + /// + public gIBS gIBS { get; set; } + + /// + /// P30 - Grupo de Informações do Crédito Presumido da CBS + /// + public gCBS gCBS { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gIBS.cs b/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gIBS.cs new file mode 100644 index 000000000..d7bd88d74 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/CreditoPresumido/gIBS.cs @@ -0,0 +1,66 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using NFe.Classes.Informacoes.Detalhe; + +namespace NFe.Classes.Servicos.Evento.Informacoes.CreditoPresumido +{ + public class gIBS + { + private decimal _pCredPres; + private decimal _vCredPres; + + /// + /// P27 - Código de Classificação do Crédito presumido, conforme tabela cCredPres (Anexo IV) + /// + public CCredPres cCredPres { get; set; } + + /// + /// P28 - Percentual do Crédito Presumido + /// + public decimal pCredPres + { + get => _pCredPres.Arredondar(4); + set => _pCredPres = value.Arredondar(4); + } + + /// + /// P29 - Valor do Crédito Presumido + /// + public decimal vCredPres + { + get => _vCredPres.Arredondar(2); + set => _vCredPres = value.Arredondar(2); + } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/Imobilizacao/gControleEstoqueImobilizacao.cs b/NFe.Classes/Servicos/Evento/Informacoes/Imobilizacao/gControleEstoqueImobilizacao.cs new file mode 100644 index 000000000..3015f13ea --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/Imobilizacao/gControleEstoqueImobilizacao.cs @@ -0,0 +1,54 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Servicos.Evento.Informacoes.Imobilizacao +{ + public class gControleEstoqueImobilizacao + { + private decimal _qImobilizado; + + /// + /// P28 - Informar a quantidade do item a ser imobilizado + /// + public decimal qImobilizado + { + get => _qImobilizado.Arredondar(4); + set => _qImobilizado = value.Arredondar(4); + } + + /// + /// P29 - Informar a unidade relativa ao campo qImobilizado + /// + public string uImobilizado { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/Imobilizacao/gImobilizacao.cs b/NFe.Classes/Servicos/Evento/Informacoes/Imobilizacao/gImobilizacao.cs new file mode 100644 index 000000000..7510bcf83 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/Imobilizacao/gImobilizacao.cs @@ -0,0 +1,72 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.Imobilizacao +{ + public class gImobilizacao + { + private decimal _vIBS; + private decimal _vCBS; + + /// + /// P24 - Corresponde ao atributo “nItem” do elemento “det” do documento referenciado. + /// + [XmlAttribute] + public int nItem { get; set; } + + /// + /// P25 - Valor do IBS relativo à imobilização + /// + public decimal vIBS + { + get => _vIBS; + set => _vIBS = value.Arredondar(2); + } + + /// + /// P26 - Valor da CBS relativo à imobilização + /// + public decimal vCBS + { + get => _vCBS; + set => _vCBS = value.Arredondar(2); + } + + /// + /// P27 - Informações de crédito presumido por item + /// + public gControleEstoqueImobilizacao gControleEstoque { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/DFeReferenciado.cs b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/DFeReferenciado.cs new file mode 100644 index 000000000..822c72dda --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/DFeReferenciado.cs @@ -0,0 +1,48 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Servicos.Evento.Informacoes.ItemConsumo +{ + public class DFeReferenciado + { + /// + /// P31 - Informa a chave da nota (NFe ou NFCe) emitida para o fornecimento nos casos em que a legislação obriga a emissão de documento fiscal. + /// + public string chaveAcesso { get; set; } + + /// + /// P32 - Corresponde ao “nItem” do DFeReferenciado + /// + public int nItem { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gConsumo.cs b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gConsumo.cs new file mode 100644 index 000000000..ff797aab0 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gConsumo.cs @@ -0,0 +1,77 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.ItemConsumo +{ + public class gConsumo + { + private decimal _vIbs; + private decimal _vCbs; + + /// + /// P24 - Corresponde ao atributo “nItem” do elemento “det” da NF-e de aquisição + /// + [XmlAttribute("nItem")] + public int nItem { get; set; } + + /// + /// P25 - Valor do IBS na nota de aquisição correspondente à quantidade destinada a uso e consumo pessoal + /// + public decimal vIBS + { + get => _vIbs.Arredondar(2); + set => _vIbs = value.Arredondar(2); + } + /// + /// P26 - Valor da CBS na nota de aquisição correspondente à quantidade destinada a uso e consumo pessoal + /// + public decimal vCBS + { + get => _vCbs.Arredondar(2); + set => _vCbs = value.Arredondar(2); + } + + /// + /// P27 - Informações de quantidade de estoque influenciadas pelo evento + /// + [XmlElement(ElementName = "gControleEstoque")] + public gControleEstoque gControleEstoque { get; set; } + + /// + /// P30 - Informações por item da NF-e de Uso e Consumo Pessoal + /// + public DFeReferenciado DFeReferenciado { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gControleEstoque.cs b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gControleEstoque.cs new file mode 100644 index 000000000..5ff28fb6b --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gControleEstoque.cs @@ -0,0 +1,77 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Servicos.Evento.Informacoes.ItemConsumo +{ + public class gControleEstoque + { + private decimal? _qConsumo; + private decimal? _qtde; + + /// + /// P28 - Informar a quantidade para consumo de pessoa física. + /// Use para o evento do tipo "Destinação de item para consumo pessoal". + /// + public decimal? qConsumo + { + get => _qConsumo.Arredondar(4); + set => _qConsumo = value.Arredondar(4); + } + + /// + /// P28 - Informar a quantidade que não atendeu os requisitos para a conversão em isenção. + /// Use para o evento do tipo "Importação em ALC/ZFM não convertida em isenção". + /// + public decimal? qtde + { + get => _qtde.Arredondar(4); + set => _qtde = value.Arredondar(4); + } + + /// + /// P29 - Informar a unidade relativa ao campo gConsumo. + /// Use para o evento do tipo "Destinação de item para consumo pessoal". + /// + public string uConsumo { get; set; } + + /// + /// P29 - Informar a unidade relativa ao campo gConsumo. + /// Use para o evento do tipo "Importação em ALC/ZFM não convertida em isenção". + /// + public string unidade { get; set; } + + public bool ShouldSerializeqConsumo() => qConsumo.HasValue; + + public bool ShouldSerializeqtde() => qtde.HasValue; + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/ItemNaoFornecido/gControleEstoqueItemNaoFornecido.cs b/NFe.Classes/Servicos/Evento/Informacoes/ItemNaoFornecido/gControleEstoqueItemNaoFornecido.cs new file mode 100644 index 000000000..a2e779985 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/ItemNaoFornecido/gControleEstoqueItemNaoFornecido.cs @@ -0,0 +1,54 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +namespace NFe.Classes.Servicos.Evento.Informacoes.ItemNaoFornecido +{ + public class gControleEstoqueItemNaoFornecido + { + private decimal _qNaoFornecida; + + /// + /// P28 - Informar a quantidade que não foi fornecida e teve o imposto antecipado + /// + public decimal qNaoFornecida + { + get => _qNaoFornecida.Arredondar(4); + set => _qNaoFornecida = value.Arredondar(4); + } + + /// + /// P29 - Informar a unidade relativa ao campo qNaoFornecida + /// + public string uNaoFornecida { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/ItemNaoFornecido/gItemNaoFornecido.cs b/NFe.Classes/Servicos/Evento/Informacoes/ItemNaoFornecido/gItemNaoFornecido.cs new file mode 100644 index 000000000..a83d4d9ad --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/ItemNaoFornecido/gItemNaoFornecido.cs @@ -0,0 +1,73 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.ItemNaoFornecido +{ + public class gItemNaoFornecido + { + private decimal _vIBS; + private decimal _vCBS; + + /// + /// P24 - Corresponde ao atributo “nItem” do elemento “det” do documento referenciado + /// + [XmlAttribute] + public int nItem { get; set; } + + /// + /// P25 - Valor do IBS na nota de débito de pagamento antecipado correspondente à quantidade que não foi fornecida + /// + public decimal vIBS + { + get => _vIBS; + set => _vIBS = value.Arredondar(2); + } + + /// + /// P26 - Valor da CBS na nota de débito de pagamento antecipado correspondente à quantidade que não foi fornecida + /// + public decimal vCBS + { + get => _vCBS; + set => _vCBS = value.Arredondar(2); + } + + /// + /// P27 - Informações de quantidade de estoque influenciadas pelo evento + /// + [XmlElement("gControleEstoque")] + public gControleEstoqueItemNaoFornecido gControleEstoque { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/Perecimento/gControleEstoquePerecimento.cs b/NFe.Classes/Servicos/Evento/Informacoes/Perecimento/gControleEstoquePerecimento.cs new file mode 100644 index 000000000..fada487c9 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/Perecimento/gControleEstoquePerecimento.cs @@ -0,0 +1,86 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.Perecimento +{ + public class gControleEstoquePerecimento + { + private decimal _qPerecimento; + private decimal? _vIBS; + private decimal? _vCBS; + + /// + /// P28 - Informar a quantidade que foi objeto de roubo, perda, furto ou perecimento + /// + [XmlElement(Order = 1)] + public decimal qPerecimento + { + get => _qPerecimento.Arredondar(4); + set => _qPerecimento = value.Arredondar(4); + } + + /// + /// P29 - Informar a unidade relativa ao campo qPerecimento + /// + [XmlElement(Order = 2)] + public string uPerecimento { get; set; } + + /// + /// P31 - Valor do crédito IBS referente às aquisições a ser estornado correspondente à quantidade que foi objeto de roubo, perda, furto ou perecimento + /// Evento: perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor + /// + [XmlElement(Order = 3)] + public decimal? vIBS + { + get => _vIBS; + set => _vIBS = value.Arredondar(2); + } + + /// + /// P32 - Valor do crédito CBS referente às aquisições a ser estornado correspondente à quantidade que foi objeto de roubo, perda, furto ou perecimento + /// Evento: perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor + /// + [XmlElement(Order = 4)] + public decimal? vCBS + { + get => _vCBS; + set => _vCBS = value.Arredondar(2); + } + + public bool ShouldSerializevIBS() => vIBS.HasValue; + + public bool ShouldSerializevCBS() => vCBS.HasValue; + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/Informacoes/Perecimento/gPerecimento.cs b/NFe.Classes/Servicos/Evento/Informacoes/Perecimento/gPerecimento.cs new file mode 100644 index 000000000..d1edb1f8e --- /dev/null +++ b/NFe.Classes/Servicos/Evento/Informacoes/Perecimento/gPerecimento.cs @@ -0,0 +1,73 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento.Informacoes.Perecimento +{ + public class gPerecimento + { + private decimal _vIBS; + private decimal _vCBS; + + /// + /// P24 - Corresponde ao atributo “nItem” do elemento “det” do documento referenciado + /// + [XmlAttribute] + public int nItem { get; set; } + + /// + /// P25 - Valor do IBS na Nota de Aquisição correspondente à quantidade que foi objeto de roubo, perda, furto ou perecimento + /// + public decimal vIBS + { + get => _vIBS; + set => _vIBS = value.Arredondar(2); + } + + /// + /// P26 - Valor da CBS na Nota de Aquisição correspondente à quantidade que foi objeto de roubo, perda, furto ou perecimento + /// + public decimal vCBS + { + get => _vCBS; + set => _vCBS = value.Arredondar(2); + } + + /// + /// P27 - Informações de quantidade de estoque influenciadas pelo evento + /// + [XmlElement("gControleEstoque")] + public gControleEstoquePerecimento gControleEstoque { get; set; } + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Servicos/Evento/dest.cs b/NFe.Classes/Servicos/Evento/dest.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Evento/dest.cs rename to NFe.Classes/Servicos/Evento/dest.cs diff --git a/NFe.Classes/Servicos/Evento/detEvento.cs b/NFe.Classes/Servicos/Evento/detEvento.cs new file mode 100644 index 000000000..99fc664da --- /dev/null +++ b/NFe.Classes/Servicos/Evento/detEvento.cs @@ -0,0 +1,563 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using DFe.Classes.Entidades; +using DFe.Utils; +using NFe.Classes.Informacoes; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Servicos.Evento.Informacoes.CreditoBensServicos; +using NFe.Classes.Servicos.Evento.Informacoes.CreditoCombustivel; +using NFe.Classes.Servicos.Evento.Informacoes.CreditoPresumido; +using NFe.Classes.Servicos.Evento.Informacoes.Imobilizacao; +using NFe.Classes.Servicos.Evento.Informacoes.ItemConsumo; +using NFe.Classes.Servicos.Evento.Informacoes.ItemNaoFornecido; +using NFe.Classes.Servicos.Evento.Informacoes.Perecimento; + +namespace NFe.Classes.Servicos.Evento +{ + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe")] + [XmlType(Namespace = "http://www.portalfiscal.inf.br/nfe")] + public class detEvento + { + /// + /// HP18 - Versão do Pedido de Cancelamento, da carta de correção ou EPEC, deve ser informado com a mesma informação da + /// tag verEvento (HP16) + /// + [XmlAttribute] + public string versao { get; set; } + + /// + /// HP19 - "Cancelamento", "Carta de Correção", "Carta de Correcao" ou "EPEC" + /// + public string descEvento { get; set; } + + #region EPEC + + /// + /// P20 - Código do Órgão do Autor do Evento. + /// Nota: Informar o código da UF do Emitente para este evento. + /// + public Estado? cOrgaoAutor { get; set; } + + /// + /// P21 - Informar "1=Empresa Emitente" para este evento. + /// Nota: 1=Empresa Emitente; 2=Empresa Destinatária; + /// 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos. + /// + public TipoAutor? tpAutor { get; set; } + + /// + /// P22 - Versão do aplicativo do Autor do Evento. + /// + public string verAplic { get; set; } + + /// + /// P23 - Data e hora + /// + [XmlIgnore] + public DateTimeOffset? dhEmi { get; set; } + + /// + /// Proxy para dhEmi no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhEmi")] + public string ProxyDhEmi + { + get { return dhEmi.ParaDataHoraStringUtc(); } + set { dhEmi = DateTimeOffset.Parse(value); } + } + + /// + /// P24 - 0=Entrada; 1=Saída; + /// + public TipoNFe? tpNF { get; set; } + + /// + /// P25 - IE do Emitente + /// + public string IE { get; set; } + + /// + /// P26 + /// + public dest dest { get; set; } + + public bool ShouldSerializecOrgaoAutor() + { + return cOrgaoAutor.HasValue; + } + + public bool ShouldSerializetpAutor() + { + return tpAutor.HasValue; + } + + public bool ShouldSerializetpNF() + { + return tpNF.HasValue; + } + + #endregion + + #region Cancelamento + + /// + /// HP20 - Informar o número do Protocolo de Autorização da NF-e a ser Cancelada. + /// + public string nProt { get; set; } + + /// + /// HP21 - Informar a justificativa do cancelamento + /// + public string xJust { get; set; } + + #endregion + + #region Cancelamento por substituição + + /// + /// P31 - Chave de acesso da NF-e substituta da NF-e a ser cancelada + /// + public string chNFeRef { get; set; } + + #endregion + + #region Averbação para Exportação + [XmlElement("itensAverbados")] + public List ItensAverbados { get; set; } + + public bool ShouldSerializeItensAverbados() + { + return ItensAverbados != null; + } + #endregion + + #region RFC - Cancelamento Evento + + /// + /// P23 - Código do evento autorizado a ser cancelado + /// + public string tpEventoAut {get; set;} + + #endregion + + #region Cancelamento Insucesso/Comprovante de Entrega NFe/ Cancelamento Evento + + /// + /// P22 - Informar o número do Protocolo de Autorização do + /// Evento da NF-e a que se refere este cancelamento. + /// + public string nProtEvento { get; set; } + + #endregion + + #region Insucesso NFe + [XmlIgnore] + public DateTimeOffset? dhTentativaEntrega { get; set; } + + /// + /// Proxy para dhTentativaEntrega no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhTentativaEntrega")] + public string ProxyDhTentativaEntrega + { + get { return dhTentativaEntrega.ParaDataHoraStringUtc(); } + set { dhTentativaEntrega = DateTimeOffset.Parse(value); } + } + + /// + /// P31 - Número da tentativa de entrega que não teve sucesso + /// + public int? nTentativa { get; set; } + + /// + /// P32 - Motivo do insucesso + /// + public MotivoInsucesso? tpMotivo { get; set; } + + /// + /// P33 - Justificativa do motivo do insucesso. Informar apenas para tpMotivo = + /// + public string xJustMotivo { get; set; } + + /// + /// P33 - Latitude do ponto de entrega + /// + public decimal? latGPS { get; set; } + + /// + /// P34 - Longitude do ponto de entrega + /// + public decimal? longGPS { get; set; } + + /// + /// P35 - Hash SHA-1, no formato Base64, resultante da concatenação de: Chave de Acesso da NF-e + Base64 + /// da imagem capturada na tentativa da entrega(ex: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc). + /// + public string hashTentativaEntrega { get; set; } + + /// + /// Data e hora da geração do hash da tentativa de entrega. Formato AAAA-MMDDThh:mm:ssTZD. + /// + [XmlIgnore] + public DateTimeOffset? dhHashTentativaEntrega { get; set; } + + /// + /// Proxy para dhHashTentativaEntrega no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhHashTentativaEntrega")] + public string ProxyDhHashTentativaEntrega + { + get { return dhHashTentativaEntrega.ParaDataHoraStringUtc(); } + set { dhHashTentativaEntrega = DateTimeOffset.Parse(value); } + } + + public bool ShouldSerializenTentativa() + { + return nTentativa.HasValue; + } + + public bool ShouldSerializetpMotivo() + { + return tpMotivo.HasValue; + } + + public bool ShouldSerializelatGPS() + { + return latGPS.HasValue; + } + + public bool ShouldSerializelongGPS() + { + return longGPS.HasValue; + } + + #endregion + + #region Comprovante Entrega NFe + + /// + /// P30 - Data e hora do final da entrega + /// + [XmlIgnore] + public DateTimeOffset? dhEntrega { get; set; } + + /// + /// Proxy para dhEntrega no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhEntrega")] + public string ProxyDhEntrega + { + get { return dhEntrega.ParaDataHoraStringUtc(); } + set { dhEntrega = DateTimeOffset.Parse(value); } + } + + /// + /// P31 - Número do documento de identificação da pessoa que assinou o Comprovante de Entrega da NF-e/> + /// + public string nDoc { get; set; } + + /// + /// P32 - Nome da pessoa que assinou o Comprovante de Entrega da NF-e/> + /// + public string xNome { get; set; } + + /// + /// P35 - Hash SHA-1, no formato Base64, resultante da concatenação de: Chave de Acesso da NF-e + Base64 + /// da imagem capturada do Comprovante de Entrega da NFe (ex: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc). + /// + public string hashComprovante { get; set; } + + /// + /// P36 - Data e hora da geração do hash da tentativa de entrega. Formato AAAA-MMDDThh:mm:ssTZD. + /// + [XmlIgnore] + public DateTimeOffset? dhHashComprovante { get; set; } + + /// + /// Proxy para dhHashComprovante no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhHashComprovante")] + public string ProxyDhHashComprovante + { + get { return dhHashComprovante.ParaDataHoraStringUtc(); } + set { dhHashComprovante = DateTimeOffset.Parse(value); } + } + + #endregion + + #region Conciliação Financeira + + /// + /// P21 - Grupo de detalhamento do pagamento + /// + [XmlElement("detPag")] + public List detPag { get; set; } + + public bool ShouldSerializedetPag() + { + return detPag != null; + } + + #endregion + + #region Ator Interessado NFe + /// + /// P23 - Pessoas autorizadas a acessar o XML da NF-e + /// + [XmlElement("autXML")] + public List autXML { get; set; } + + /// + /// P26 - 0 = Não permite; + /// 1 = Permite o transportador autorizado pelo + /// emitente ou destinatário autorizar outros + /// transportadores para ter acesso ao download da + /// NF-e + /// + public TipoAutorizacao? tpAutorizacao { get; set; } + + public bool ShouldSerializetpAutorizacao() + { + return tpAutorizacao != null; + } + + #endregion + + #region Carta de Correção + + /// + /// HP20 - Correção a ser considerada, texto livre. A correção mais recente substitui as anteriores. + /// + public string xCorrecao { get; set; } + + /// + /// HP20a - Condições de uso da Carta de Correção. + /// P27 - Condição de uso do tipo de autorização para o transportador. + /// + public string xCondUso { get; set; } + + #endregion + + #region Eventos para a apuração do IBS e da CBS + + #region Informação de efetivo pagamento integral para liberar crédito presumido do adquirente + + /// + /// P23 - Indicador de efetiva quitação do pagamento integral da operação referente a NFe referenciada + /// + public IndicadorDeQuitacaoDoPagamento? indQuitacao { get; set; } + + public bool ShouldSerializeindQuitacao() + { + return indQuitacao.HasValue; + } + + #endregion + + #region Solicitação de Apropriação de crédito presumido + + /// + /// P23 - Informações de crédito presumido por item + /// + [XmlElement("gCredPres")] + public List gCredPres { get; set; } + + public bool ShouldSerializegCredPres() + { + return gCredPres != null; + } + + #endregion + + #region Destinação de item para consumo pessoal + + /// + /// P23 - Informações por item da NF-e de Aquisição + /// Evento: Destinação de item para consumo pessoal + /// P23 - Informações por item da NF-e de importação + /// Evento: Importação em ALC/ZFM não convertida em isenção + /// Nota: a quantidade de ocorrências não pode ser maior que a quantidade de itens da NF-e de aquisição + /// + [XmlElement("gConsumo")] + public List gConsumo { get; set; } + + public bool ShouldSerializegConsumo() => gConsumo != null; + + #endregion + + #region Aceite de débito na apuração por emissão de nota de crédito | Manifestação sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão | Manifestação sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão + + /// + /// Informação utilizada nos eventos "Aceite de débito na apuração por emissão de nota de crédito" e "Manifestação sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão" + /// Para evento "Aceite de débito na apuração por emissão de nota de crédito": P23 - Indicador de concordância com o valor da nota de crédito que lançaram IBS e CBS na apuração assistida + /// Para evento "Manifestação sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão": P23 - Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada + /// Para evento "Manifestação sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão": P23 - Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada + /// + public IndicadorAceitacao? indAceitacao { get; set; } + + public bool ShouldSerializeindAceitacao() + { + return indAceitacao != null; + } + + #endregion + + #region Imobilização de Item + + /// + /// P23 - Informações de itens integrados ao ativo imobilizado + /// + [XmlElement("gImobilizacao")] + public List gImobilizacao { get; set; } + + public bool ShouldSerializegImobilizacao() + { + return gImobilizacao != null; + } + + #endregion + + #region Solicitação de Apropriação de Crédito de Combustível + + /// + /// P23 - Informações de consumo de combustíveis + /// + [XmlElement("gConsumoComb")] + public List gConsumoComb { get; set; } + + public bool ShouldSerializegConsumoComb() + { + return gConsumoComb != null; + } + + #endregion + + #region Solicitação de Apropriação de Crédito para bens e serviços que dependem de atividade do adquirente + + /// + /// P23 - Informações de crédito + /// + [XmlElement("gCredito")] + public List gCredito { get; set; } + + public bool ShouldSerializegCredito() + { + return gCredito != null; + } + + #endregion + + #region Manifestação do Fisco sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão | Manifestação do Fisco sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão + + /// + /// Para ambos os eventos "Manifestação do Fisco sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão" + /// e "Manifestação do Fisco sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão" o campo representa: + /// Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada + /// + public IndicadorDeferimento? indDeferimento { get; set; } + + public bool ShouldSerializeindDeferimento() + { + return indDeferimento != null; + } + + /// + /// P24 - Motivo deferimento + /// + public MotivoDeferimento? cMotivo { get; set; } + + public bool ShouldSerializecMotivo() + { + return cMotivo != null; + } + + /// + /// P24 - Descrição deferimento + /// + public string xMotivo { get; set; } + + #endregion + + #region Perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente + + /// + /// P23 - Informações por item da Nota de Aquisição + /// (Evento: perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente). + /// P23 - Informações por item da Nota de Fornecimento + /// (Evento: perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor). + /// + [XmlElement("gPerecimento")] + public List gPerecimento { get; set; } + + public bool ShouldSerializegPerecimento() => gPerecimento != null; + + #endregion + + #region Fornecimento não realizado com pagamento antecipado + + /// + /// P23 - Informações por item da Nota de Pagamento antecipado + /// + [XmlElement("gItemNaoFornecido")] + public List gItemNaoFornecido { get; set; } + + public bool ShouldSerializegItemNaoFornecido() => gItemNaoFornecido != null; + + #endregion + + #region Atualização da Data de Previsão de Entrega + + /// + /// P23 - Data da previsão de entrega ou disponibilização do bem. Formato: “AAAA-MM-DD”. + /// + [XmlIgnore] + public DateTime? dPrevEntrega { get; set; } + + /// + /// Proxy para dPrevEntrega no formato "AAAA-MM-DD" (somente data). + /// + [XmlElement("dPrevEntrega")] + public string ProxydPrevEntrega + { + get => dPrevEntrega.ParaDataString(); + set => dPrevEntrega = DateTime.Parse(value); + } + + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/detEventoTipos.cs b/NFe.Classes/Servicos/Evento/detEventoTipos.cs new file mode 100644 index 000000000..74ac61d8d --- /dev/null +++ b/NFe.Classes/Servicos/Evento/detEventoTipos.cs @@ -0,0 +1,223 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System.ComponentModel; +using System.Runtime.ConstrainedExecution; +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento +{ + /// + /// Informar "1 - Empresa Emitente" para este evento. + /// Nota: + /// 1 - Empresa Emitente; + /// 2 - Empresa Destinatária; + /// 3 - Empresa; + /// 5 - Fisco; + /// 6 - RFB; + /// 9 - Outros Órgãos. + /// + public enum TipoAutor + { + /// + /// 1 - Empresa Emitente + /// + [Description("Empresa Emitente")] + [XmlEnum("1")] + taEmpresaEmitente = 1, + + /// + /// 2 - Empresa Destinatária + /// + [Description("Empresa Destinatária")] + [XmlEnum("2")] + taEmpresaDestinataria = 2, + + /// + /// 3 - Empresa + /// + [Description("Empresa")] + [XmlEnum("3")] + taEmpresa = 3, + + /// + /// 5 - Fisco + /// + [Description("Fisco")] + [XmlEnum("5")] + taFisco = 5, + + /// + /// 6 - RFB + /// + [Description("RFB")] + [XmlEnum("6")] + taRFB = 6, + + /// + /// 8 - Empresa sucessora + /// + [Description("Empresa sucessora")] + [XmlEnum("8")] + taEmpresaSucessora = 8, + + /// + /// 9 - Outros Órgãos + /// + [Description("Outros Órgãos")] + [XmlEnum("9")] + taOutrosOrgaos = 9 + } + + /// + /// Motivo de Insucesso. + /// Nota: + /// 1 - Recebedor não encontrado; + /// 2 - Recusa do recebedor; + /// 3 - Endereço inexistente; + /// 4 - Outros (exige informar justificativa); + /// + public enum MotivoInsucesso + { + /// + /// 1 - Recebedor não encontrado + /// + [Description("Recebedor não encontrado")] + [XmlEnum("1")] + RecebedorNaoEncontrado = 1, + + /// + /// 2 - Recusa do recebedor + /// + [Description("Recusa do recebedor")] + [XmlEnum("2")] + RecusaRecebedor = 2, + + /// + /// 3 - Endereço inexistente + /// + [Description("Endereço inexistente")] + [XmlEnum("3")] + EnderecoInexistente = 3, + + /// + /// 4 - Outros + /// + [Description("Outros")] + [XmlEnum("4")] + Outros = 4 + } + + /// + /// 0 – Não permite; + /// 1 – Permite o transportador autorizado pelo + /// emitente ou destinatário autorizar outros + /// transportadores para ter acesso ao download da + /// NF-e + /// + public enum TipoAutorizacao + { + /// + /// 0 – Não permite + /// + [Description("Não permite")] + [XmlEnum("0")] + NaoPermite = 0, + + /// + /// 1 – Permite o transportador autorizado pelo + /// emitente ou destinatário autorizar outros + /// transportadores para ter acesso ao download da + /// NF-e + /// + [Description("Permite")] + [XmlEnum("1")] + Permite = 1 + } + + /// + /// Indicador de efetiva quitação do pagamento integral referente a NFe referenciada. + /// + public enum IndicadorDeQuitacaoDoPagamento + { + /// + /// 1 – Quitado + /// Observação: Outros valores ainda não foram publicados. Revisado: 17/07/2025. Nota técnica base: NT_2025.002_v1.10_RTC_NF-e_IBS_CBS_IS + /// + [Description("Quitado")] + [XmlEnum("1")] + Quitado = 1 + } + + /// + /// Indicador de concordância com o valor da nota de crédito que lançaram IBS e CBS na apuração assistida. + /// 0 - Não aceite + /// 1 - Aceite + /// + public enum IndicadorAceitacao + { + [Description("Não aceite")] + [XmlEnum("0")] + NaoAceite = 0, + + [Description("Aceite")] + [XmlEnum("1")] + Aceite = 1 + } + + /// + /// Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada. + /// 0 - Não aceite + /// 1 - Aceite + /// + public enum IndicadorDeferimento + { + [Description("Não aceite")] + [XmlEnum("0")] + NaoAceite = 0, + + [Description("Aceite")] + [XmlEnum("1")] + Aceite = 1 + } + + public enum MotivoDeferimento + { + [Description("Falta de manifestação de todas as sucessoras")] + [XmlEnum("1")] + FaltaDeManifestacaoDeTodasSucessoras, + + [Description("Outros.")] + [XmlEnum("2")] + Outros + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Evento/detPagEvento.cs b/NFe.Classes/Servicos/Evento/detPagEvento.cs new file mode 100644 index 000000000..d390f3cf5 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/detPagEvento.cs @@ -0,0 +1,101 @@ +using System; +using DFe.Utils; +using System.Xml.Serialization; +using NFe.Classes.Informacoes.Pagamento; +using NFe.Classes.Informacoes.Identificacao.Tipos; + +namespace NFe.Classes.Servicos.Evento +{ + public sealed class detPagEvento + { + private decimal _vPag; + + /// + /// P22 - Indicador da Forma de Pagamento + /// + public IndicadorPagamentoDetalhePagamento? indPag { get; set; } + + public bool indPagSpecified { get { return indPag.HasValue; } } + + /// + /// P23 - Meio de pagamento + /// + public FormaPagamento tPag { get; set; } + + /// + /// P24 - Descrição do Meio de Pagamento + /// + public string xPag { get; set; } + + /// + /// P25 - Valor do Pagamento + /// + public decimal vPag + { + get { return _vPag.Arredondar(2); } + set { _vPag = value.Arredondar(2); } + } + + /// + /// P26 - Data do Pagamento + /// + [XmlIgnore] + public DateTime? dPag { get; set; } + + /// + /// Proxy para dPag no formato AAAA-MM-DD + /// + [XmlElement(ElementName = "dPag")] + public string ProxydPag + { + get { return dPag.ParaDataString(); } + set { dPag = DateTime.Parse(value); } + } + + /// + /// P28 - CNPJ do estabelecimento onde o pagamento foi processado/transacionado/recebido + /// quando a emissão do documento fiscal ocorrer em estabelecimento distinto + /// + public string CNPJPag { get; set; } + + /// + /// P29 - UF do CNPJ do estabelecimento onde o pagamento foi processado/transacionado/recebido + /// + public string UFPag { get; set; } + + /// + /// P30 - CNPJ da instituição financeira, de pagamento, adquirente ou subadquirente + /// + public string CNPJIF { get; set; } + + /// + /// P31 - Bandeira da operadora de cartão de crédito e/ou débito + /// + public BandeiraCartao? tBand { get; set; } + + public bool ShouldSerializetBand() + { + return tBand.HasValue; + } + + /// + /// P32 - Número de autorização da operação cartão de crédito e/ou débito + /// + public string cAut { get; set; } + + /// + /// P34 - CNPJ do estabelecimento beneficiário do pagamento + /// + public string CNPJReceb { get; set; } + + /// + /// P35 - UF do estabelecimento beneficiário do pagamento + /// + public string UFReceb { get; set; } + + public bool ShouldSerializedPag() + { + return dPag.HasValue; + } + } +} diff --git a/NFe.Classes/Servicos/Evento/enquad.cs b/NFe.Classes/Servicos/Evento/enquad.cs new file mode 100644 index 000000000..26c264e86 --- /dev/null +++ b/NFe.Classes/Servicos/Evento/enquad.cs @@ -0,0 +1,46 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Evento +{ + public class enquad + { + /// + /// P30 - Código do enquadramento + /// + [XmlElement(ElementName = "cEnq")] + public string cEnq { get; set; } + } +} \ No newline at end of file diff --git a/Shared.NFe.Classes/Servicos/Evento/envEvento.cs b/NFe.Classes/Servicos/Evento/envEvento.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Evento/envEvento.cs rename to NFe.Classes/Servicos/Evento/envEvento.cs diff --git a/Shared.NFe.Classes/Servicos/Evento/evento.cs b/NFe.Classes/Servicos/Evento/evento.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Evento/evento.cs rename to NFe.Classes/Servicos/Evento/evento.cs diff --git a/Shared.NFe.Classes/Servicos/Evento/infEventoEnv.cs b/NFe.Classes/Servicos/Evento/infEventoEnv.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Evento/infEventoEnv.cs rename to NFe.Classes/Servicos/Evento/infEventoEnv.cs diff --git a/Shared.NFe.Classes/Servicos/Evento/infEventoRet.cs b/NFe.Classes/Servicos/Evento/infEventoRet.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Evento/infEventoRet.cs rename to NFe.Classes/Servicos/Evento/infEventoRet.cs diff --git a/NFe.Classes/Servicos/Evento/itensAverbados.cs b/NFe.Classes/Servicos/Evento/itensAverbados.cs new file mode 100644 index 000000000..5739f502a --- /dev/null +++ b/NFe.Classes/Servicos/Evento/itensAverbados.cs @@ -0,0 +1,107 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System; +using System.Xml.Serialization; +using DFe.Utils; + +namespace NFe.Classes.Servicos.Evento +{ + public sealed class itensAverbados + { + /// + /// Data do Embarque no formato AAAA-MM-DDThh:mm:ssTZD + /// + [XmlIgnore] + public DateTimeOffset DhEmbarque { get; set; } + + [XmlElement(ElementName = "dhEmbarque")] + public string ProxyDhEmbarque + { + get { return DhEmbarque.ParaDataHoraStringUtc(); } + set { DhEmbarque = DateTimeOffset.Parse(value); } + } + + /// + /// Proxy Data da averbação no formato AAAA-MM-DDThh:mm:ssTZD + /// + [XmlIgnore] + public DateTimeOffset DhAverbacao { get; set; } + + [XmlElement(ElementName = "dhAverbacao")] + public string ProxyDhAverbacao + { + get { return DhAverbacao.ParaDataHoraStringUtc(); } + set { DhAverbacao = DateTimeOffset.Parse(value); } + } + + /// + /// Número Identificador da Declaração Única do Comércio Exterior associada - [0-9]{2}BR[0-9]{10} + /// + [XmlElement(ElementName = "nDue")] + public string NDue { get; set; } + + /// + /// Número do item da NF-e averbada - [0-9]{1,3} + /// + [XmlElement(ElementName = "nItem")] + public string NItem { get; set; } + + /// + /// Informação do número do item na Declaração de Exportação associada a averbação. - [0-9]{1,4} + /// + [XmlElement(ElementName = "nItemDue")] + public string NItemDue { get; set; } + + /// + /// Quantidade averbada do item na unidade tributária (campo uTrib) - TDec_1104Neg + /// + [XmlElement(ElementName = "qItem")] + public decimal QItem { get; set; } + + /// + /// Motivo da Alteração + /// 1 - Exportação Averbada; + /// 2 - Retificação da Quantidade Averbada; + /// 3 - Cancelamento da Exportação; + /// + [XmlElement(ElementName = "motAlteracao")] + public int MotAlteracao { get; set; } + + /// + /// P29 - Grupo de informações do enquadramento do item + /// + [XmlElement(ElementName = "enquad")] + public enquad Enquad { get; set; } + } +} diff --git a/Shared.NFe.Classes/Servicos/Evento/retEnvEvento.cs b/NFe.Classes/Servicos/Evento/retEnvEvento.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Evento/retEnvEvento.cs rename to NFe.Classes/Servicos/Evento/retEnvEvento.cs diff --git a/Shared.NFe.Classes/Servicos/Evento/retEvento.cs b/NFe.Classes/Servicos/Evento/retEvento.cs similarity index 89% rename from Shared.NFe.Classes/Servicos/Evento/retEvento.cs rename to NFe.Classes/Servicos/Evento/retEvento.cs index 69b2b26cd..88a3d8bc2 100644 --- a/Shared.NFe.Classes/Servicos/Evento/retEvento.cs +++ b/NFe.Classes/Servicos/Evento/retEvento.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using System.Xml.Serialization; +using DFe.Classes.Assinatura; namespace NFe.Classes.Servicos.Evento { @@ -47,5 +48,12 @@ public class retEvento /// HR11 - Grupo de informações do registro do Evento /// public infEventoRet infEvento { get; set; } + + /// + /// HR91 - Assinatura Digital do documento XML, a assinatura deverá ser aplicada no elemento infEvento. + /// A decisão de assinar a mensagem fica da critério da UF. + /// + [XmlElement(Namespace = "http://www.w3.org/2000/09/xmldsig#")] + public Signature Signature { get; set; } } } \ No newline at end of file diff --git a/Shared.NFe.Classes/Servicos/IRetornoServico.cs b/NFe.Classes/Servicos/IRetornoServico.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/IRetornoServico.cs rename to NFe.Classes/Servicos/IRetornoServico.cs diff --git a/Shared.NFe.Classes/Servicos/Inutilizacao/infInutEnv.cs b/NFe.Classes/Servicos/Inutilizacao/infInutEnv.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Inutilizacao/infInutEnv.cs rename to NFe.Classes/Servicos/Inutilizacao/infInutEnv.cs diff --git a/Shared.NFe.Classes/Servicos/Inutilizacao/infInutRet.cs b/NFe.Classes/Servicos/Inutilizacao/infInutRet.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Inutilizacao/infInutRet.cs rename to NFe.Classes/Servicos/Inutilizacao/infInutRet.cs diff --git a/Shared.NFe.Classes/Servicos/Inutilizacao/inutNFe.cs b/NFe.Classes/Servicos/Inutilizacao/inutNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Inutilizacao/inutNFe.cs rename to NFe.Classes/Servicos/Inutilizacao/inutNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Inutilizacao/procInutNFe.cs b/NFe.Classes/Servicos/Inutilizacao/procInutNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Inutilizacao/procInutNFe.cs rename to NFe.Classes/Servicos/Inutilizacao/procInutNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Inutilizacao/retInutNFe.cs b/NFe.Classes/Servicos/Inutilizacao/retInutNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Inutilizacao/retInutNFe.cs rename to NFe.Classes/Servicos/Inutilizacao/retInutNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Recepcao/Retorno/consReciNFe.cs b/NFe.Classes/Servicos/Recepcao/Retorno/consReciNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Recepcao/Retorno/consReciNFe.cs rename to NFe.Classes/Servicos/Recepcao/Retorno/consReciNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Recepcao/Retorno/retConsReciNFe.cs b/NFe.Classes/Servicos/Recepcao/Retorno/retConsReciNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Recepcao/Retorno/retConsReciNFe.cs rename to NFe.Classes/Servicos/Recepcao/Retorno/retConsReciNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Recepcao/enviNFe2.cs b/NFe.Classes/Servicos/Recepcao/enviNFe2.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Recepcao/enviNFe2.cs rename to NFe.Classes/Servicos/Recepcao/enviNFe2.cs diff --git a/Shared.NFe.Classes/Servicos/Recepcao/infRec.cs b/NFe.Classes/Servicos/Recepcao/infRec.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Recepcao/infRec.cs rename to NFe.Classes/Servicos/Recepcao/infRec.cs diff --git a/Shared.NFe.Classes/Servicos/Recepcao/retEnviNFe.cs b/NFe.Classes/Servicos/Recepcao/retEnviNFe.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Recepcao/retEnviNFe.cs rename to NFe.Classes/Servicos/Recepcao/retEnviNFe.cs diff --git a/Shared.NFe.Classes/Servicos/Status/consStatServ.cs b/NFe.Classes/Servicos/Status/consStatServ.cs similarity index 100% rename from Shared.NFe.Classes/Servicos/Status/consStatServ.cs rename to NFe.Classes/Servicos/Status/consStatServ.cs diff --git a/NFe.Classes/Servicos/Status/retConsStatServ.cs b/NFe.Classes/Servicos/Status/retConsStatServ.cs new file mode 100644 index 000000000..8ced33d53 --- /dev/null +++ b/NFe.Classes/Servicos/Status/retConsStatServ.cs @@ -0,0 +1,121 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System; +using System.Xml.Serialization; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using DFe.Utils; + +namespace NFe.Classes.Servicos.Status +{ + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe")] + public class retConsStatServ : IRetornoServico + { + /// + /// FR02 - Versão do leiaute + /// + [XmlAttribute] + public string versao { get; set; } + + /// + /// FR03 - Identificação do Ambiente: 1 – Produção / 2 - Homologação + /// + public TipoAmbiente tpAmb { get; set; } + + /// + /// FR04 - Versão do Aplicativo que processou a consulta. A versão deve ser iniciada com a sigla da UF nos casos de WS + /// próprio ou a sigla SCAN, SVAN ou SVRS nos demais casos. + /// + public string verAplic { get; set; } + + /// + /// FR05 - Código do status da resposta. + /// + public int cStat { get; set; } + + /// + /// FR06 - Descrição literal do status da resposta. + /// + public string xMotivo { get; set; } + + /// + /// FR07 - Código da UF que atendeu a solicitação + /// + public Estado cUF { get; set; } + + /// + /// FR08 - Data e hora de recebimento + /// + [XmlIgnore] + public DateTimeOffset dhRecbto { get; set; } + + [XmlElement(ElementName = "dhRecbto")] + public string ProxyDhRecbto + { + get { return dhRecbto.ParaDataHoraStringUtc(); } + set { dhRecbto = DateTimeOffset.Parse(value); } + } + + /// + /// FR09 - Tempo médio de resposta do serviço + /// + public int? tMed { get; set; } + + /// + /// FR10 - Data e hora de retorno do Web Service + /// + [XmlIgnore] + public DateTimeOffset? dhRetorno { get; set; } + + [XmlElement(ElementName = "dhRetorno")] + public string ProxydhRetorno + { + get { return dhRetorno.ParaDataHoraStringUtc(); } + set { dhRetorno = DateTimeOffset.Parse(value); } + } + + /// + /// FR11 - Informações adicionais para o Contribuinte + /// +#if NET5_0_OR_GREATER//o uso de tipos de referência anuláveis não é permitido até o C# 8.0. + + #nullable enable + + public string? xObs { get; set; } + + #nullable disable +#else + public string xObs { get; set; } +#endif + } +} \ No newline at end of file diff --git a/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs b/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs new file mode 100644 index 000000000..57d55dbad --- /dev/null +++ b/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs @@ -0,0 +1,583 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Collections.Generic; +using System.ComponentModel; +using System.Xml.Serialization; + +namespace NFe.Classes.Servicos.Tipos +{ + public enum ServicoNFe + { + /// + /// serviço destinado à recepção de mensagem do Evento de Cancelamento da NF-e + /// + RecepcaoEventoCancelmento, + + /// + /// serviço destinado à recepção de mensagem do Evento de Carta de Correção da NF-e + /// + RecepcaoEventoCartaCorrecao, + + /// + /// serviço destinado à recepção de mensagem do Evento EPEC da NF-e + /// + RecepcaoEventoEpec, + + /// + /// serviço destinado à recepção de mensagem do Evento Insucesso na Entrega da NFe + /// + RecepcaoEventoInsucessoEntregaNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento Cancelamento Insucesso na Entrega da NFe + /// + RecepcaoEventoCancInsucessoEntregaNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento Comprovante de Entrega da NFe + /// + RecepcaoEventoComprovanteEntregaNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento Cancelamento do Comprovante de Entrega da NFe + /// + RecepcaoEventoCancComprovanteEntregaNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento Conciliação Financeira da NFe + /// + RecepcaoEventoConciliacaoFinanceiraNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento Cancelamento de Conciliação Financeira da NFe + /// + RecepcaoEventoCancConciliacaoFinanceiraNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento de Manifestação do destinatário da NF-e + /// + RecepcaoEventoManifestacaoDestinatario, + + /// + /// serviço destinado à recepção de mensagem do Evento de Ator Interessado da NF-e + /// + RecepcaoEventoAtorInteressado, + + /// + /// serviço destinado à recepção de mensagens de lote de NF-e versão 2.0 + /// + NfeRecepcao, + + /// + /// serviço destinado a retornar o resultado do processamento do lote de NF-e versão 2.0 + /// + NfeRetRecepcao, + + /// + /// Serviço para consultar o cadastro de contribuintes do ICMS da unidade federada + /// + NfeConsultaCadastro, + + /// + /// serviço destinado ao atendimento de solicitações de inutilização de numeração + /// + NfeInutilizacao, + + /// + /// serviço destinado ao atendimento de solicitações de consulta da situação atual da NF-e + /// na Base de Dados do Portal da Secretaria de Fazenda Estadual + /// + NfeConsultaProtocolo, + + /// + /// serviço destinado à consulta do status do serviço prestado pelo Portal da Secretaria de Fazenda Estadual + /// + NfeStatusServico, + + /// + /// serviço destinado à recepção de mensagens de lote de NF-e versão 3.10 + /// + NFeAutorizacao, + + /// + /// serviço destinado a retornar o resultado do processamento do lote de NF-e versão 3.10 + /// + NFeRetAutorizacao, + + /// + /// Distribui documentos e informações de interesse do ator da NF-e + /// + NFeDistribuicaoDFe, + + /// + /// “Serviço de Consulta da Relação de Documentos Destinados” para um determinado CNPJ + /// de destinatário informado na NF-e. + /// + NfeConsultaDest, + + /// + /// Serviço destinado ao atendimento de solicitações de download de Notas Fiscais Eletrônicas por seus destinatários + /// + NfeDownloadNF, + + /// + /// Serviço destinado a administração do CSC. + /// + NfceAdministracaoCSC, + + ConsultaGtin, + + /// + /// Serviço destinado a permitir que o emitente da NFe informe o efetivo pagamento integral da operação a fim de liberar crédito presumido do adquirente + /// + RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente, + + /// + /// Serviço destinado a evento a ser gerado pelo destinatário da NF-e em relação às notas fiscais de aquisição de emissão de terceiros e que lhe gerem o direito à apropriação de crédito presumido + /// + RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido, + + /// + /// Serviço para permitir ao adquirente informar quando uma aquisição for destinada para o consumo de pessoa física, hipótese em que não haverá direito à + /// apropriação de crédito. Evento a ser registrado após a emissão da nota de bens destinados para uso e consumo pessoal. + /// Uma mesma NFe de aquisição pode receber vários Eventos desse tipo, com nSeqEvento diferentes (eventos cumulativos). + /// + RecepcaoEventoDestinacaoDeItemParaConsumoPessoal, + + /// + /// Serviço para Permitir ao destinatário informar que concorda com os valores constantes em nota de crédito emitida pelo fornecedor ou pelo adquirente que + /// serão lançados a débito na apuração assistida de IBS e CBS + /// + RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito, + + /// + /// Serviço para permitir ser gerado pelo adquirente de bem, quando este for integrado ao seu ativo imobilizado, a fim de viabilizar a adequada identificação, + /// pelos sistemas da administração tributária, de prazo-limite para apreciação de eventuais pedidos de ressarcimento do respectivo crédito, nos termos + /// do art. 40, I da LC 214/2025. + /// + RecepcaoEventoImobilizacaoDeItem, + + /// + /// Serviço para permitir ser gerado pelo adquirente de combustível listado no art. 172 da LC 214/2025 e que pertença à cadeia produtiva desses combustíveis, + /// para solicitar a apropriação de crédito referente à parcela que for consumida em sua atividade comercial. + /// + RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel, + + /// + /// Serviço para permitir ser gerado pelo adquirente para apropriação de crédito de bens e serviços que dependam da sua atividade + /// + RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente, + + /// + /// Serviço para permitir ser gerado pela sucessora em relação às notas fiscais de transferência de crédito de outra sucessora da mesma empresa sucedida para informar aceite da transferência de crédito de IBS. + /// + RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao, + + /// + /// Serviço para permitir ser gerado pela sucessora em relação às notas fiscais de transferência de crédito de outra sucessora da mesma empresa sucedida para informar aceite da transferência de crédito de CBS. + /// + RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao, + + /// + /// Serviço para permitir ser gerado pelo fisco em relação às notas fiscais de transferência de crédito para informar aceite ou não aceite da transferência de crédito de IBS. + /// + RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao, + + /// + /// Serviço para permitir ser gerado pelo fisco em relação às notas fiscais de transferência de crédito para informar aceite ou não aceite da transferência de crédito de CBS. + /// + RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao, + + /// + /// Serviço para permitir ser gerado para permitir que o autor de um Evento já autorizado possa proceder o seu cancelamento. + /// + RecepcaoEventoCancelamentoDeEvento, + + /// + /// Serviço para permitir que o adquirente das regiões incentivadas (ALC/ZFM) informe que a tributação na importação não se converteu em isenção de um + /// determinado item por não atender as condições da legislação + /// + RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao, + + /// + /// Serviço para permitir ao adquirente informar quando uma aquisição for objeto de roubo, perda, furto ou perecimento. + /// Observação: O evento atual está relacionado aos bens que foram objeto de perecimento, perda, roubo ou furto em trânsito, em fornecimentos com frete FOB. + /// + RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente, + + /// + /// Serviço para permitir ao fornecedor informar quando um bem for objeto de roubo, perda, furto ou perecimento antes da entrega, durante o transporte contratado pelo fornecedor. + /// Observação: O evento atual está relacionado aos bens móveis materiais que foram objeto de perecimento, perda, roubo ou furto em trânsito, em fornecimentos com frete CIF. + /// + RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor, + + /// + /// Serviço para permitir ao fornecedor informar que um pagamento antecipado não teve o respectivo fornecimento realizado + /// + RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado, + + /// + /// Serviço para permitir ao fornecedor atualizar a data da previsão de entrega ou disponibilização do bem ao adquirente, de forma a remover o débito do mês em que foi previsto inicialmente. + /// + RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega + } + + /// + /// Indicador de Sincronização: + /// 0 - Assíncrono. A resposta deve ser obtida consultando o serviço NFeRetAutorizacao, com o nº do recibo + /// 1 - Síncrono. Empresa solicita processamento síncrono do Lote de NF-e (sem a geração de Recibo para consulta futura); + /// + public enum IndicadorSincronizacao + { + /// + /// 0 - Assíncrono. A resposta deve ser obtida consultando o serviço NFeRetAutorizacao, com o nº do recibo + /// + [Description("Assíncrono. A resposta deve ser obtida consultando o serviço NFeRetAutorizacao, com o nº do recibo")] + [XmlEnum("0")] + Assincrono = 0, + + /// + /// 1 - Síncrono. Empresa solicita processamento síncrono do Lote de NF-e (sem a geração de Recibo para consulta futura) + /// + [Description("Síncrono. Empresa solicita processamento síncrono do Lote de NF-e (sem a geração de Recibo para consulta futura)")] + [XmlEnum("1")] + Sincrono = 1 + } + + /// + /// Código do Tipo do Evento. + /// 110001 - Cancelamento de Evento + /// 110110 - Carta de Correção + /// 110140 - EPEC + /// 110111 - Cancelamento + /// 110112 - Cancelamento por substituição + /// 110130 - Comprovante de Entrega da NF-e + /// 110131 - Cancelamento Comprovante de Entrega da NF-e + /// 110150 - Ator Interessado na NF-e + /// 110192 - Insucesso na Entrega da NF-e + /// 110193 - Cancelamento Insucesso na Entrega da NF-e + /// 110750 - Conciliação Financeira da NF-e + /// 110751 - Cancelamento Conciliação Financeira da NF-e + /// 112110 - Informação de efetivo pagamento integral para liberar crédito presumido do adquirente + /// 112120 - Importação em ALC/ZFM não convertida em isenção + /// 112140 - Fornecimento não realizado com pagamento antecipado + /// 112150 - Atualização da Data de Previsão de Entrega + /// 210200 – Confirmação da Operação + /// 210210 – Ciência da Emissão + /// 210220 – Desconhecimento da Operação + /// 210240 – Operação não Realizada + /// 211110 - Solicitação de Apropriação de crédito presumido + /// 211120 - Destinação de item para consumo pessoal + /// 211124 - Perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente + /// 112130 - Perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor + /// 211128 - Aceite de débito na apuração por emissão de nota de crédito + /// 211130 - Imobilização de Item + /// 211140 - Solicitação de Apropriação de Crédito de Combustível + /// 211150 - Solicitação de Apropriação de Crédito para bens e serviços que dependem de atividade do adquirente + /// 212110 - Manifestação sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão + /// 212120 - Manifestação sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão + /// 412120 - Manifestação do Fisco sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão + /// 412130 - Manifestação do Fisco sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão + /// + public enum NFeTipoEvento + { + /// + /// 110001 - Cancelamento de Evento + /// + [Description("Cancelamento de Evento")] + [XmlEnum("110001")] + TeNfeCancelamentoDeEvento = 110001, + + /// + /// 110110 - Carta de Correção + /// + [Description("Carta de Correção")] + [XmlEnum("110110")] + TeNfeCartaCorrecao = 110110, + + /// + /// 110140 - EPEC + /// + [Description("EPEC")] + [XmlEnum("110140")] + TeNfceEpec = 110140, + + /// + /// 110111 - Cancelamento + /// + [Description("Cancelamento")] + [XmlEnum("110111")] + TeNfeCancelamento = 110111, + + /// + /// 110112 - Cancelamento por substituição + /// + [Description("Cancelamento por substituicao")] + [XmlEnum("110112")] + TeNfeCancelamentoSubstituicao = 110112, + + /// + /// 110150 - Ator interessado na NF-e + /// + [Description("Ator interessado na NF-e")] + [XmlEnum("110150")] + TeNfeAtorInteressadoNFe = 110150, + + /// + /// 110192 - Insucesso na Entrega da NF-e + /// + [Description("Insucesso na Entrega da NF-e")] + [XmlEnum("110192")] + TeNfeInsucessoNaEntregadaNFe = 110192, + + /// + /// 110193 - Cancelamento Insucesso na Entrega da NF-e + /// + [Description("Cancelamento Insucesso na Entrega da NF-e")] + [XmlEnum("110193")] + TeNfeCancInsucessoNaEntregadaNFe = 110193, + + /// + /// 110130 - Comprovante de Entrega da NF-e + /// + [Description("Comprovante de Entrega da NF-e")] + [XmlEnum("110130")] + TeNfeComprovanteDeEntregadaNFe = 110130, + + /// + /// 110131 - Cancelamento Comprovante de Entrega da NF-e + /// + [Description("Cancelamento Comprovante de Entrega da NF-e")] + [XmlEnum("110131")] + TeNfeCancComprovanteDeEntregadaNFe = 110131, + + /// + /// 110750 - Conciliação Financeira da NF-e + /// + [Description("ECONF")] + [XmlEnum("110750")] + TeNfeConciliacaoFinanceiraNFe = 110750, + + /// + /// 110751 - Cancelamento Conciliação Financeira da NF-e + /// + [Description("Cancelamento Conciliação Financeira")] + [XmlEnum("110751")] + TeNfeCancConciliacaoFinanceiraNFe = 110751, + + /// + /// 112110 - Informação de efetivo pagamento integral para liberar crédito presumido do adquirente + /// + [Description("Informação de efetivo pagamento integral para liberar crédito presumido do adquirente")] + [XmlEnum("112110")] + TeNfeInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente = 112110, + + /// + /// 112120 - Importação em ALC/ZFM não convertida em isenção + /// + [Description("Importação em ALC/ZFM não convertida em isenção")] + [XmlEnum("112120")] + TeNfeImportacaoEmAlcZfmNaoConvertidaEmIsencao = 112120, + + /// + /// 112140 - Fornecimento não realizado com pagamento antecipado + /// + [Description("Fornecimento não realizado com pagamento antecipado")] + [XmlEnum("112140")] + TeNfeFornecimentoNaoRealizadoComPagamentoAntecipado = 112140, + + /// + /// 112150 - Atualização da Data de Previsão de Entrega + /// + [Description("Atualização da Data de Previsão de Entrega")] + [XmlEnum("112150")] + TeNfeAtualizacaoDaDataDePrevisaoDeEntrega = 112150, + + /// + /// 211110 - Solicitação de Apropriação de crédito presumido + /// + [Description("Solicitação de Apropriação de crédito presumido")] + [XmlEnum("211110")] + TeNfeSolicitacaoDeApropriacaoDeCreditoPresumido = 211110, + + /// + /// 211120 - Destinação de item para consumo pessoal + /// + [Description("Destinação de item para consumo pessoal")] + [XmlEnum("211120")] + TeNfeDestinacaoDeItemParaConsumoPessoal = 211120, + + /// + /// 211124 - Perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente + /// + [Description("Perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente")] + [XmlEnum("211124")] + TeNfePerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente = 211124, + + /// + /// 112130 - Perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor + /// + [Description("Perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor")] + [XmlEnum("112130")] + TeNfePerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor = 112130, + + /// + /// 211128 - Aceite de débito na apuração por emissão de nota de crédito + /// + [Description("Aceite de débito na apuração por emissão de nota de crédito")] + [XmlEnum("211128")] + TeNfeAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito = 211128, + + /// + /// 211130 - Imobilização de Item + /// + [Description("Imobilização de Item")] + [XmlEnum("211130")] + TeNfeImobilizacaoDeItem = 211130, + + /// + /// 211140 - Solicitação de Apropriação de Crédito de Combustível + /// + [Description("Solicitação de Apropriação de Crédito de Combustível")] + [XmlEnum("211140")] + TeNfeSolicitacaoApropriacaoCreditoCombustivel = 211140, + + /// + /// 211150 - Solicitação de Apropriação de Crédito para bens e serviços que dependem de atividade do adquirente + /// + [Description("Solicitação de Apropriação de Crédito para bens e serviços que dependem de atividade do adquirente")] + [XmlEnum("211150")] + TeNfeSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente = 211150, + + /// + /// 212110 - Manifestação sobre Pedido de Transferência de Crédito de IBS em Operação de Sucessão + /// + [Description("Manifestação sobre Pedido de Transferência de Crédito de IBS em Operação de Sucessão")] + [XmlEnum("212110")] + TeNfeManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao = 212110, + + /// + /// 212120 - Manifestação sobre Pedido de Transferência de Crédito de CBS em Operação de Sucessão + /// + [Description("Manifestação sobre Pedido de Transferência de Crédito de CBS em Operação de Sucessão")] + [XmlEnum("212120")] + TeNfeManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao = 212120, + + /// + /// 412120 - Manifestação do Fisco sobre Pedido de Transferência de Crédito de IBS em Operação de Sucessão + /// + [Description("Manifestação do Fisco sobre Pedido de Transferência de Crédito de IBS em Operação de Sucessão")] + [XmlEnum("412120")] + TeNfeManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao = 412120, + + /// + /// 412130 - Manifestação do Fisco sobre Pedido de Transferência de Crédito de CBS em Operação de Sucessão + /// + [Description("Manifestação do Fisco sobre Pedido de Transferência de Crédito de CBS em Operação de Sucessão")] + [XmlEnum("412130")] + TeNfeManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao = 412130, + + /// + /// 210200 – Confirmação da Operação + /// + [Description("Confirmacao da Operacao")] + [XmlEnum("210200")] + TeMdConfirmacaoDaOperacao = 210200, + + /// + /// 210210 – Ciência da Operação + /// + [Description("Ciencia da Operacao")] + [XmlEnum("210210")] + TeMdCienciaDaOperacao = 210210, + + /// + /// 210220 – Desconhecimento da Operação + /// + [Description("Desconhecimento da Operacao")] + [XmlEnum("210220")] + TeMdDesconhecimentoDaOperacao = 210220, + + /// + /// 210240 – Operação não Realizada + /// + [Description("Operacao nao Realizada")] + [XmlEnum("210240")] + TeMdOperacaoNaoRealizada = 210240, + + /// + /// 610130 – Comprovante de entrega CTe + /// + [Description("Comprovante de entrega CTe")] + [XmlEnum("610130")] + ComprovanteEntregaCTe = 610130, + + /// + /// 610131 – Cancelamento de Comprovante de entrega CTe + /// + [Description("Cancelamento de entrega CTe")] + [XmlEnum("610131")] + CancelamentoComprovanteEntregaCTe = 610131, + + /// + /// 790700 – Averbação para Exportação + /// + [Description("Averbação para Exportação")] + [XmlEnum("790700")] + TeMdAverbacaoparaExportacao = 790700 + } + + /// + /// Classe com métodos para tratamento do enum + /// + public class NFeTipoEventoUtils + { + /// + /// Devolve a lista de enums do tipo que são utilizados para manifestação do destinatário/> + /// + public static ISet NFeTipoEventoManifestacaoDestinatario = new HashSet() + { + NFeTipoEvento.TeMdConfirmacaoDaOperacao, NFeTipoEvento.TeMdCienciaDaOperacao, + NFeTipoEvento.TeMdDesconhecimentoDaOperacao, NFeTipoEvento.TeMdOperacaoNaoRealizada + }; + + /// + /// Devolve a lista de enums do tipo que são utilizados para cancelamento/> + /// + public static ISet NFeTipoEventoCancelamento = new HashSet() + { + NFeTipoEvento.TeNfeCancelamento, NFeTipoEvento.TeNfeCancelamentoSubstituicao + }; + } +} diff --git a/NFe.Classes/Valor.cs b/NFe.Classes/Valor.cs new file mode 100644 index 000000000..0bbc8ead0 --- /dev/null +++ b/NFe.Classes/Valor.cs @@ -0,0 +1,26 @@ +using System; + +namespace NFe.Classes +{ + public static class Valor + { + public static decimal Arredondar(this decimal valor, int casasDecimais) + { + var valorArredondado = DFe.Classes.Valor.Arredondar(valor, casasDecimais); + return valorArredondado; + } + + public static decimal? Arredondar(this decimal? valor, int casasDecimais) + { + if (valor == null) return null; + return Arredondar(valor.Value, casasDecimais); + } + + public static decimal ArredondarParaBaixo(this decimal valor, int casasDecimais) + { + var divisor = (decimal)Math.Pow(10, casasDecimais); + var dividendo = (long)Math.Truncate(divisor * valor); + return dividendo / divisor; + } + } +} diff --git a/Shared.NFe.Classes/infNFeSupl.cs b/NFe.Classes/infNFeSupl.cs similarity index 100% rename from Shared.NFe.Classes/infNFeSupl.cs rename to NFe.Classes/infNFeSupl.cs diff --git a/Shared.NFe.Classes/nfeProc.cs b/NFe.Classes/nfeProc.cs similarity index 100% rename from Shared.NFe.Classes/nfeProc.cs rename to NFe.Classes/nfeProc.cs diff --git a/NFe.Danfe.App.Teste.Html/App.xaml b/NFe.Danfe.App.Teste.Html/App.xaml new file mode 100644 index 000000000..dfe54cc89 --- /dev/null +++ b/NFe.Danfe.App.Teste.Html/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/NFe.Danfe.App.Teste.Html/App.xaml.cs b/NFe.Danfe.App.Teste.Html/App.xaml.cs new file mode 100644 index 000000000..9fc01b3ae --- /dev/null +++ b/NFe.Danfe.App.Teste.Html/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace NFe.Danfe.App.Teste.Html +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/NFe.Danfe.App.Teste.Html/AssemblyInfo.cs b/NFe.Danfe.App.Teste.Html/AssemblyInfo.cs new file mode 100644 index 000000000..8b5504ecf --- /dev/null +++ b/NFe.Danfe.App.Teste.Html/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/NFe.Danfe.App.Teste.Html/Funcoes.cs b/NFe.Danfe.App.Teste.Html/Funcoes.cs new file mode 100644 index 000000000..d63c1eb5a --- /dev/null +++ b/NFe.Danfe.App.Teste.Html/Funcoes.cs @@ -0,0 +1,58 @@ +using System.Windows; +using Microsoft.Win32; + +namespace NFe.Danfe.App.Teste.Html; + +public static class Funcoes +{ + /// + /// Exibe um diálogo com uma mensagem para o usuário, utilizando um ModernDialog + /// + /// + /// + /// + /// + public static void Mensagem(string mensagem, string titulo, MessageBoxButton botoes, MessageBoxImage imagem = MessageBoxImage.None) + { + MessageBox.Show(mensagem, titulo, botoes, imagem); + } + + /// + /// Abre o diálogo de busca de arquivo com o filtro configurado para arquivos do tipo ".xml" + /// + /// + public static string BuscarArquivoXml() + { + return BuscarArquivo("Selecione o arquivo XML", ".xml", "Arquivo XML (.xml)|*.xml"); + } + + /// + /// Abre o diálogo de busca de arquivo com o filtro configurado para arquivos do tipo "PNG, Bitmap, JPEG, JPG e GIF" + /// + /// + public static string BuscarImagem() + { + return BuscarArquivo("Selecione uma imagem", ".png", "PNG (*.png)|*.png|Bitmap (*.bmp)|*.bmp|JPEG (*.jpeg)|*.jpeg|JPG (*.jpg)|*.jpg|GIF (*.gif)|*.gif"); + } + + /// + /// Abre o diálogo de busca de arquivo com com os dados passados no parâmetro + /// + /// Nome do arquivo padrão a ser exibido no diálogo + /// Título do diálogo de buscar arquivo + /// Extensão de arquivo padrão a ser exibida no diálogo + /// Filtro de extensões a ser exibido no diálogo + /// + public static string BuscarArquivo(string titulo, string extensaoPadrao, string filtro, string arquivoPadrao = null) + { + var dlg = new OpenFileDialog + { + Title = titulo, + FileName = arquivoPadrao, + DefaultExt = extensaoPadrao, + Filter = filtro + }; + dlg.ShowDialog(); + return dlg.FileName; + } +} \ No newline at end of file diff --git a/NFe.Danfe.App.Teste.Html/MainWindow.xaml b/NFe.Danfe.App.Teste.Html/MainWindow.xaml new file mode 100644 index 000000000..68fa48e5b --- /dev/null +++ b/NFe.Danfe.App.Teste.Html/MainWindow.xaml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/NFe.Danfe.App.Teste.Html/MainWindow.xaml.cs b/NFe.Danfe.App.Teste.Html/MainWindow.xaml.cs new file mode 100644 index 000000000..7c6943721 --- /dev/null +++ b/NFe.Danfe.App.Teste.Html/MainWindow.xaml.cs @@ -0,0 +1,69 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Windows; +using DFe.Classes.Flags; +using NFe.Classes; +using NFe.Danfe.Html; +using NFe.Danfe.Html.CrossCutting; +using NFe.Danfe.Html.Dominio; +using NFe.Danfe.Html.Interfaces; +using NFe.Utils.NFe; + +namespace NFe.Danfe.App.Teste.Html +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + } + + + + private void DanfeA4_Click(object sender, RoutedEventArgs e) + { + try + { + var arquivoXml = Funcoes.BuscarArquivoXml(); + if (string.IsNullOrEmpty(arquivoXml)) + return; + + nfeProc proc = null; + + try + { + proc = new nfeProc().CarregarDeArquivoXml(arquivoXml); + } + catch //Carregar NFe ainda não transmitida à sefaz, como uma pré-visualização. + { + proc = new nfeProc() { NFe = new Classes.NFe().CarregarDeArquivoXml(arquivoXml), protNFe = new Classes.Protocolo.protNFe() }; + } + + if (proc.NFe.infNFe.ide.mod != ModeloDocumento.NFe) + throw new Exception("O XML informado não é um NFe!"); + + var danfe = new DanfeNFe(proc.NFe, Status.Autorizada, "55512121121211", "Emissor Fiscal DSBR Brasil - www.dsbrbrasil.com.br"); + IDanfeHtml2 d1 = new DanfeNfeHtml2(danfe); + var doc = d1.ObterDocHtmlAsync().Result; + + var nomeArquivo = $"danfe-{proc.NFe.infNFe.Id}.html"; + var dir = AppDomain.CurrentDomain.BaseDirectory; + + var caminhoCompleto = Path.Combine(dir, nomeArquivo); + + File.WriteAllText(caminhoCompleto, doc.Html); + Process.Start(caminhoCompleto); + } + catch (Exception ex) + { + if (!string.IsNullOrEmpty(ex.Message)) + Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK); + } + } + } +} diff --git a/NFe.Danfe.App.Teste.Html/NFe.Danfe.App.Teste.Html.csproj b/NFe.Danfe.App.Teste.Html/NFe.Danfe.App.Teste.Html.csproj new file mode 100644 index 000000000..e2d7fa06c --- /dev/null +++ b/NFe.Danfe.App.Teste.Html/NFe.Danfe.App.Teste.Html.csproj @@ -0,0 +1,18 @@ + + + + WinExe + net6.0-windows + enable + true + + + + + + + + + + + diff --git a/NFe.Danfe.AppTeste/App.xaml b/NFe.Danfe.AppTeste.Fast/App.xaml similarity index 100% rename from NFe.Danfe.AppTeste/App.xaml rename to NFe.Danfe.AppTeste.Fast/App.xaml diff --git a/NFe.Danfe.AppTeste/App.xaml.cs b/NFe.Danfe.AppTeste.Fast/App.xaml.cs similarity index 100% rename from NFe.Danfe.AppTeste/App.xaml.cs rename to NFe.Danfe.AppTeste.Fast/App.xaml.cs diff --git a/NFe.Danfe.AppTeste/ConfiguracaoApp.cs b/NFe.Danfe.AppTeste.Fast/ConfiguracaoApp.cs similarity index 100% rename from NFe.Danfe.AppTeste/ConfiguracaoApp.cs rename to NFe.Danfe.AppTeste.Fast/ConfiguracaoApp.cs diff --git a/NFe.Danfe.AppTeste/EnumParaBool.cs b/NFe.Danfe.AppTeste.Fast/EnumParaBool.cs similarity index 100% rename from NFe.Danfe.AppTeste/EnumParaBool.cs rename to NFe.Danfe.AppTeste.Fast/EnumParaBool.cs diff --git a/NFe.Danfe.AppTeste/Funcoes.cs b/NFe.Danfe.AppTeste.Fast/Funcoes.cs similarity index 100% rename from NFe.Danfe.AppTeste/Funcoes.cs rename to NFe.Danfe.AppTeste.Fast/Funcoes.cs diff --git a/NFe.Danfe.AppTeste.Fast/MainWindow.xaml b/NFe.Danfe.AppTeste.Fast/MainWindow.xaml new file mode 100644 index 000000000..cbd75fdf1 --- /dev/null +++ b/NFe.Danfe.AppTeste.Fast/MainWindow.xaml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.AppTeste.PdfClown/MainWindow.xaml.cs b/NFe.Danfe.AppTeste.PdfClown/MainWindow.xaml.cs new file mode 100644 index 000000000..77e82fc8d --- /dev/null +++ b/NFe.Danfe.AppTeste.PdfClown/MainWindow.xaml.cs @@ -0,0 +1,177 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using Microsoft.Win32; +using NFe.Danfe.PdfClown; +using NFe.Danfe.PdfClown.Modelo; +using System.Diagnostics; +using System.IO; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media.Imaging; + +namespace NFe.Danfe.AppTeste.PdfClown +{ + public partial class MainWindow : Window + { + private byte[]? _logoMarcaBytes; + + public MainWindow() + { + InitializeComponent(); + } + + private void BtnCarregarLogo_Click(object sender, RoutedEventArgs e) + { + var caminhoImagem = SelecionarImagem(); + if (string.IsNullOrEmpty(caminhoImagem)) + return; + + try + { + var bitmap = CarregarImagem(caminhoImagem); + LogoEmitente.Source = bitmap; + _logoMarcaBytes = ConverterParaJpegBytes(bitmap); + } + catch (Exception ex) + { + MessageBox.Show($"Erro ao carregar logomarca: {ex.Message}", "Erro", MessageBoxButton.OK, MessageBoxImage.Error); + } + } + + private void BtnRemoverLogo_Click(object sender, RoutedEventArgs e) + { + _logoMarcaBytes = null; + LogoEmitente.Source = null; + } + + private void Btn_GerarDanfe_Click(object sender, RoutedEventArgs e) + { + var caminhoXml = SelecionarXml(); + if (string.IsNullOrEmpty(caminhoXml)) + return; + + try + { + var xml = File.ReadAllText(caminhoXml); + var pdfBytes = GerarDanfeZion(xml, _logoMarcaBytes); + AbrirPdfTemporario(pdfBytes); + } + catch (Exception ex) + { + MessageBox.Show($"Erro ao gerar DANFE: {ex.Message}", "Erro", MessageBoxButton.OK, MessageBoxImage.Error); + } + } + + private static string? SelecionarImagem() + { + var dialog = new OpenFileDialog + { + Filter = "Imagens (*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg", + Title = "Selecione uma imagem para a logomarca" + }; + + var result = dialog.ShowDialog() == true ? dialog.FileName : null; + return result; + } + + private static string? SelecionarXml() + { + var dialog = new OpenFileDialog + { + Filter = "Arquivos XML (*.xml)|*.xml", + Title = "Selecione o XML da NF-e" + }; + + return dialog.ShowDialog() == true ? dialog.FileName : null; + } + + private static BitmapImage CarregarImagem(string caminho) + { + var bitmap = new BitmapImage(); + bitmap.BeginInit(); + bitmap.CacheOption = BitmapCacheOption.OnLoad; + bitmap.UriSource = new Uri(caminho); + bitmap.EndInit(); + return bitmap; + } + + private static byte[] ConverterParaJpegBytes(BitmapImage bitmap) + { + var imageControl = new Image + { + Source = bitmap, + Width = bitmap.PixelWidth, + Height = bitmap.PixelHeight + }; + + imageControl.Measure(new Size(bitmap.PixelWidth, bitmap.PixelHeight)); + imageControl.Arrange(new Rect(new Size(bitmap.PixelWidth, bitmap.PixelHeight))); + + var render = new RenderTargetBitmap(bitmap.PixelWidth, bitmap.PixelHeight, 96, 96, System.Windows.Media.PixelFormats.Pbgra32); + render.Render(imageControl); + + var encoder = new JpegBitmapEncoder { QualityLevel = 100 }; + encoder.Frames.Add(BitmapFrame.Create(render)); + + using var stream = new MemoryStream(); + encoder.Save(stream); + return stream.ToArray(); + } + + private static byte[] GerarDanfeZion(string xmlNfeProc, byte[]? logoMarca) + { + xmlNfeProc = xmlNfeProc.Replace("\u00a0", " "); + var model = DanfeViewModelCreator.CriarDeStringXml(xmlNfeProc); + + using var pdfStream = new MemoryStream(); + using var danfe = new DanfeDoc(model); + + if (logoMarca != null) + { + using var logo = new MemoryStream(logoMarca); + danfe.AdicionarLogoImagem(logo); + } + + danfe.Gerar(); + return danfe.ObterPdfBytes(pdfStream); + } + + private static void AbrirPdfTemporario(byte[] pdfBytes) + { + var caminhoTemporario = Path.Combine(Path.GetTempPath(), "danfe-nfe.pdf"); + File.WriteAllBytes(caminhoTemporario, pdfBytes); + Process.Start(new ProcessStartInfo(caminhoTemporario) { UseShellExecute = true }); + } + } +} diff --git a/NFe.Danfe.AppTeste.PdfClown/NFe.Danfe.AppTeste.PdfClown.csproj b/NFe.Danfe.AppTeste.PdfClown/NFe.Danfe.AppTeste.PdfClown.csproj new file mode 100644 index 000000000..6c8ded751 --- /dev/null +++ b/NFe.Danfe.AppTeste.PdfClown/NFe.Danfe.AppTeste.PdfClown.csproj @@ -0,0 +1,15 @@ + + + + WinExe + net6.0-windows + enable + enable + true + + + + + + + diff --git a/NFe.Danfe.AppTeste.QuestPdf/App.xaml b/NFe.Danfe.AppTeste.QuestPdf/App.xaml new file mode 100644 index 000000000..a87bffca9 --- /dev/null +++ b/NFe.Danfe.AppTeste.QuestPdf/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/NFe.Danfe.AppTeste.QuestPdf/App.xaml.cs b/NFe.Danfe.AppTeste.QuestPdf/App.xaml.cs new file mode 100644 index 000000000..adda853a1 --- /dev/null +++ b/NFe.Danfe.AppTeste.QuestPdf/App.xaml.cs @@ -0,0 +1,44 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.Windows; + +namespace NFe.Danfe.AppTeste.QuestPdf; + +/// +/// Interaction logic for App.xaml +/// +public partial class App : Application +{ +} + diff --git a/NFe.Danfe.AppTeste.QuestPdf/AssemblyInfo.cs b/NFe.Danfe.AppTeste.QuestPdf/AssemblyInfo.cs new file mode 100644 index 000000000..cc29e7f74 --- /dev/null +++ b/NFe.Danfe.AppTeste.QuestPdf/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly:ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/NFe.Danfe.AppTeste.QuestPdf/MainWindow.xaml b/NFe.Danfe.AppTeste.QuestPdf/MainWindow.xaml new file mode 100644 index 000000000..50c1b71b8 --- /dev/null +++ b/NFe.Danfe.AppTeste.QuestPdf/MainWindow.xaml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.AppTeste.QuestPdf/MainWindow.xaml.cs b/NFe.Danfe.AppTeste.QuestPdf/MainWindow.xaml.cs new file mode 100644 index 000000000..c82ffc1d0 --- /dev/null +++ b/NFe.Danfe.AppTeste.QuestPdf/MainWindow.xaml.cs @@ -0,0 +1,165 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using Microsoft.Win32; +using NFe.Danfe.QuestPdf.ImpressaoNfce; +using QuestPDF.Fluent; +using QuestPDF.Infrastructure; +using System.IO; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media.Imaging; + +namespace NFe.Danfe.AppTeste.QuestPdf +{ + public partial class MainWindow : Window + { + private byte[]? _logoMarcaBytes; + + public MainWindow() + { + InitializeComponent(); + QuestPDF.Settings.License = LicenseType.Community; + } + + private void Button_GerarDanfe_Click(object sender, RoutedEventArgs e) + { + var caminhoXml = SelecionarArquivoXml(); + if (string.IsNullOrEmpty(caminhoXml)) + return; + + var tamanho = ObterTamanhoImpressaoSelecionado(); + if (tamanho == null) + { + MessageBox.Show("Selecione um tamanho de impressão válido.", "Aviso", MessageBoxButton.OK, MessageBoxImage.Warning); + return; + } + + try + { + GerarDanfeNfce(caminhoXml, tamanho.Value); + } + catch (Exception ex) + { + MessageBox.Show($"Erro ao gerar DANFE NFC-e: {ex.Message}", "Erro", MessageBoxButton.OK, MessageBoxImage.Error); + } + } + + private void BtnCarregarLogo_Click(object sender, RoutedEventArgs e) + { + var caminhoImagem = SelecionarImagem(); + if (string.IsNullOrEmpty(caminhoImagem)) + return; + + try + { + var bitmap = CarregarImagem(caminhoImagem); + LogoEmitente.Source = bitmap; + _logoMarcaBytes = ConverterParaPngBytes(bitmap); + } + catch (Exception ex) + { + MessageBox.Show($"Erro ao carregar logomarca: {ex.Message}", "Erro", MessageBoxButton.OK, MessageBoxImage.Error); + } + } + + private void BtnRemoverLogo_Click(object sender, RoutedEventArgs e) + { + _logoMarcaBytes = null; + LogoEmitente.Source = null; + } + + private static string? SelecionarArquivoXml() + { + var dialog = new OpenFileDialog + { + Filter = "Arquivos XML (*.xml)|*.xml", + Title = "Selecione um arquivo XML da NFC-e" + }; + + var result = dialog.ShowDialog() == true ? dialog.FileName : null; + return result; + } + + private static string? SelecionarImagem() + { + var dialog = new OpenFileDialog + { + Filter = "Imagens (*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg", + Title = "Selecione uma imagem para a logomarca" + }; + + return dialog.ShowDialog() == true ? dialog.FileName : null; + } + + private static BitmapImage CarregarImagem(string caminho) + { + var bitmap = new BitmapImage(); + bitmap.BeginInit(); + bitmap.CacheOption = BitmapCacheOption.OnLoad; + bitmap.UriSource = new Uri(caminho); + bitmap.EndInit(); + return bitmap; + } + + private static byte[] ConverterParaPngBytes(BitmapImage bitmap) + { + var encoder = new PngBitmapEncoder(); + encoder.Frames.Add(BitmapFrame.Create(bitmap)); + + using var stream = new MemoryStream(); + encoder.Save(stream); + return stream.ToArray(); + } + + private TamanhoImpressao? ObterTamanhoImpressaoSelecionado() + { + var selectedItem = ComboBox_TamanhoImpressao.SelectedItem as ComboBoxItem; + var tagValue = selectedItem?.Tag?.ToString(); + + if (int.TryParse(tagValue, out int enumValue)) + return (TamanhoImpressao)enumValue; + + return null; + } + + private void GerarDanfeNfce(string caminhoXml, TamanhoImpressao tamanho) + { + var xml = File.ReadAllText(caminhoXml); + + var documento = new DanfeNfceDocument(xml, _logoMarcaBytes); + documento.TamanhoImpressao(tamanho); + documento.GeneratePdfAndShow(); + } + } +} diff --git a/NFe.Danfe.AppTeste.QuestPdf/NFe.Danfe.AppTeste.QuestPdf.csproj b/NFe.Danfe.AppTeste.QuestPdf/NFe.Danfe.AppTeste.QuestPdf.csproj new file mode 100644 index 000000000..c0381140e --- /dev/null +++ b/NFe.Danfe.AppTeste.QuestPdf/NFe.Danfe.AppTeste.QuestPdf.csproj @@ -0,0 +1,15 @@ + + + + WinExe + net6.0-windows + enable + enable + true + + + + + + + diff --git a/NFe.Danfe.AppTeste/MainWindow.xaml b/NFe.Danfe.AppTeste/MainWindow.xaml deleted file mode 100644 index eae22b124..000000000 --- a/NFe.Danfe.AppTeste/MainWindow.xaml +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - public bool DocumentoCancelado { get; set; } - - /// - /// Retorna um objeto do tipo a partir da logo armazenada na propriedade - /// - /// - public Image ObterLogo() - { - if (Logomarca == null) - return null; - var ms = new MemoryStream(Logomarca); - var image = Image.FromStream(ms); - return image; - } } } diff --git a/Shared.NFe.Danfe.Base/Enumns.cs b/NFe.Danfe.Base/Enumns.cs similarity index 97% rename from Shared.NFe.Danfe.Base/Enumns.cs rename to NFe.Danfe.Base/Enumns.cs index 3c7d05b75..20181c203 100644 --- a/Shared.NFe.Danfe.Base/Enumns.cs +++ b/NFe.Danfe.Base/Enumns.cs @@ -37,13 +37,15 @@ public enum NfceDetalheVendaNormal { NaoImprimir = 0, UmaLinha = 1, - DuasLinhas = 2 + DuasLinhas = 2, + Completo = 3 } public enum NfceDetalheVendaContigencia { UmaLinha = 1, - DuasLinhas = 2 + DuasLinhas = 2, + Completo = 3 } public enum NfceModoImpressao diff --git a/Shared.NFe.Danfe.Base/NFCe/ConfiguracaoDanfeNfce.cs b/NFe.Danfe.Base/NFCe/ConfiguracaoDanfeNfce.cs similarity index 88% rename from Shared.NFe.Danfe.Base/NFCe/ConfiguracaoDanfeNfce.cs rename to NFe.Danfe.Base/NFCe/ConfiguracaoDanfeNfce.cs index 4d99c4a30..a4c08e543 100644 --- a/Shared.NFe.Danfe.Base/NFCe/ConfiguracaoDanfeNfce.cs +++ b/NFe.Danfe.Base/NFCe/ConfiguracaoDanfeNfce.cs @@ -31,15 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using System.Drawing; -using System.Drawing.Text; -using NFe.Danfe.Base.Fontes; using NFe.Utils; -#if Standard -using NFe.Danfe.Base.Standard.Properties; -#else -using NFe.Danfe.Base.Properties; -#endif namespace NFe.Danfe.Base.NFCe { @@ -60,7 +52,6 @@ public ConfiguracaoDanfeNfce(NfceDetalheVendaNormal detalheVendaNormal, MargemDireita = margemDireita; ModoImpressao = modoImpressao; NfceLayoutQrCode = nfceLayoutQrCode; - CarregarFontePadraoNfceNativa(); VersaoQrCode = versaoQrCode; SegundaViaContingencia = true; } @@ -120,23 +111,9 @@ public ConfiguracaoDanfeNfce() /// public VersaoQrCode VersaoQrCode { get; set; } - public string FontPadraoNfceNativa { get; set; } - + /// + /// Envia segunda via de contingencia para a impressora (apenas suportado no fastreport clássico) + /// public bool SegundaViaContingencia { get; set; } - - public FontFamily CarregarFontePadraoNfceNativa(string font = null) - { - if (font != null) - { - FontPadraoNfceNativa = font; - return new FontFamily(font); - } - - - PrivateFontCollection colecaoDeFontes; //todo dispose na coleção - var openSans = Fonte.CarregarDeByteArray(Resources.OpenSans_CondBold, out colecaoDeFontes); - - return openSans; - } } } diff --git a/NFe.Danfe.Base/NFCe/NFCe.frx b/NFe.Danfe.Base/NFCe/NFCe.frx new file mode 100644 index 000000000..af072cdf6 --- /dev/null +++ b/NFe.Danfe.Base/NFCe/NFCe.frx @@ -0,0 +1,1394 @@ + + + using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; +using NFe.Classes.Informacoes.Pagamento; +using NFe.Utils; +using DFe.Utils; +using NFe.Classes.Informacoes.Destinatario; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using DFe.Classes.Flags; +using NFe.Danfe.Base; +using DFe.Classes.Entidades; +using NFe.Classes.Protocolo; + + +namespace FastReport +{ + public class ReportScript + { + + private void txtDescPagto_BeforePrint(object sender, EventArgs e) + { + if(Report.GetColumnValue("NFCe.NFe.infNFe.pag.tPag") != null) + txtDescPagto.Text = ((FormaPagamento)Report.GetColumnValue("NFCe.NFe.infNFe.pag.tPag")).Descricao(); + } + + private void txtDescDetPagto_BeforePrint(object sender, EventArgs e) + { + if(Report.GetDataSource("NFCe.NFe.infNFe.pag.detPag").RowCount != 0 && Report.GetColumnValue("NFCe.NFe.infNFe.pag.detPag.tPag") != null) + txtDescDetPagto.Text = ((FormaPagamento)Report.GetColumnValue("NFCe.NFe.infNFe.pag.detPag.tPag")).Descricao(); + } + + private void txtEmitCnpj_BeforePrint(object sender, EventArgs e) + { + var cnpj = (string)Report.GetColumnValue("NFCe.NFe.infNFe.emit.CNPJ"); + if (!string.IsNullOrEmpty(cnpj)) + txtEmitCnpj.Text = "CNPJ: " + FormatarCnpj(cnpj); + } + + private void memChaveNfe_BeforePrint(object sender, EventArgs e) + { + var chave = Substring( ((String)Report.GetColumnValue("NFCe.NFe.infNFe.Id")), 3); + if (!string.IsNullOrEmpty(chave) & chave.Length == 44) + { + var chaveFormatada = ""; + for (int i = 0; i < chave.Length; i += 4) + chaveFormatada = chaveFormatada + chave.Substring(i, 4) + " "; + memChaveNfe.Text = chaveFormatada; + } + } + + private void Destinatario_BeforePrint(object sender, EventArgs e) + { + TrataCamposDestinatario(); + dbDestinatario.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Abaixo); + } + + private void TrataCamposDestinatario(){ + if ( ((dest)Report.GetColumnValue("NFCe.NFe.infNFe.dest")) == null ) //Destinatário não informado + { + txtConsumidor.Text = "CONSUMIDOR NÃO IDENTIFICADO"; + txtConsumidor2.Text = txtConsumidor.Text; + txtDestEndereco.Text = ""; + txtDestEndereco2.Text = txtDestEndereco.Text; + txtDestNome.Text = ""; + txtDestNome2.Text = txtDestNome.Text; + } + else + { + txtDestNome.Text = ObterDocumentoDest() + ((String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.xNome")); + txtDestNome2.Text = txtDestNome.Text; + } + //Endereço do destinatário é opcional para NFCe + txtDestEndereco.Visible = ((enderDest)Report.GetColumnValue("NFCe.NFe.infNFe.dest.enderDest")) != null; + txtDestEndereco2.Visible = txtDestEndereco.Visible; + } + + private string ObterDocumentoDest(){ + var documentoDest = ""; + var cnpj = (String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.CNPJ"); + var cpf = (String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.CPF"); + var idEstrangeiro = (String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.idEstrangeiro"); + if ( !String.IsNullOrEmpty(cnpj)) documentoDest = "CNPJ: " + FormatarCnpj(cnpj) + " "; + if ( !String.IsNullOrEmpty(cpf)) documentoDest = "CPF: " + String.Format(@"{0:000\.000\.000\-00}", long.Parse(cpf)) + " "; + if ( !String.IsNullOrEmpty(idEstrangeiro)) documentoDest = "Id. Estrangeiro: " + idEstrangeiro + " "; + return documentoDest; + } + + private void dbProdutosUmaLinha_BeforePrint(object sender, EventArgs e) + { + //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" + if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) + dbProdutosUmaLinha.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.UmaLinha; + else + dbProdutosUmaLinha.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.UmaLinha; + + //Mostrar/Ocultar desconto concedido no item + txtProdutoUmaLinhaValorUnit.Text = "[NFCe.NFe.infNFe.det.prod.vUnCom]"; + txtProdutoUmaLinhaValorTotal.Text = "[NFCe.NFe.infNFe.det.prod.vProd]"; + dbProdutosUmaLinha.Border.Lines = BorderLines.Bottom; + var imprimeDesconto = dbProdutosUmaLinha.Visible & ((Boolean)Report.GetParameterValue("NfceImprimeDescontoItem")) & + ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.det.prod.vDesc")) > 0; + cbDescontoItemUmaLinha.Visible = imprimeDesconto; + if (imprimeDesconto) + dbProdutosUmaLinha.Border.Lines = BorderLines.None; + } + + private void ghbProdutosDuasLinhas_BeforePrint(object sender, EventArgs e) + { + //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" + if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) + ghbProdutosDuasLinhas.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.DuasLinhas || + ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.Completo; + else + ghbProdutosDuasLinhas.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.DuasLinhas || + ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.Completo; + } + + private void dbProdutosDuasLinhas_BeforePrint(object sender, EventArgs e) + { + //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" + if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) + dbProdutosDuasLinhas.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.DuasLinhas || + ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.Completo; + else + dbProdutosDuasLinhas.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.DuasLinhas || + ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.Completo; ; + + //Mostrar/Ocultar desconto concedido no item + txtProdutoDuasLinhasValorUnit.Text = "[NFCe.NFe.infNFe.det.prod.vUnCom]"; + txtProdutoDuasLinhasValorTotal.Text = "[NFCe.NFe.infNFe.det.prod.vProd]"; + dbProdutosDuasLinhas.Border.Lines = BorderLines.Bottom; + var imprimeDesconto = dbProdutosDuasLinhas.Visible & ((Boolean)Report.GetParameterValue("NfceImprimeDescontoItem")) & + ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.det.prod.vDesc")) > 0; + cbDescontoItemDuasLinhas.Visible = imprimeDesconto; + if (imprimeDesconto) + dbProdutosDuasLinhas.Border.Lines = BorderLines.None; + //Se possuir desconto, e estiver configurado para não exibi-lo, exibe os valores líquidos nos campos abaixo: + if (((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.det.prod.vDesc")) > 0 & !imprimeDesconto) + { + txtProdutoDuasLinhasValorUnit.Text = "[([NFCe.NFe.infNFe.det.prod.vProd] - [NFCe.NFe.infNFe.det.prod.vDesc]) / [NFCe.NFe.infNFe.det.prod.qCom]]"; + txtProdutoDuasLinhasValorTotal.Text = "[[NFCe.NFe.infNFe.det.prod.vProd] - [NFCe.NFe.infNFe.det.prod.vDesc]]"; + } + } + + private void ghbProdutosUmaLinha_BeforePrint(object sender, EventArgs e) + { + //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" + if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) + ghbProdutosUmaLinha.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.UmaLinha; + else + ghbProdutosUmaLinha.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.UmaLinha; + } + + + private void memMsgFiscal_BeforePrint(object sender, EventArgs e) + { + //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8 + string msgHomologacao = ""; + string msgContigencia = ""; + if ( ((TipoAmbiente)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpAmb")) == TipoAmbiente.Homologacao ) + msgHomologacao = "EMITIDA EM AMBIENTE DE HOMOLOGAÇÃO – SEM VALOR FISCAL" + Environment.NewLine; + if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) != TipoEmissao.teNormal ) + msgContigencia = "EMITIDA EM CONTINGÊNCIA" + Environment.NewLine; + + memMsgFiscal.Text = msgHomologacao + msgContigencia + memMsgFiscal.Text; + } + + + private void txtObs_BeforePrint(object sender, EventArgs e) + { + txtObs.Text = ((String)Report.GetColumnValue("NFCe.NFe.infNFe.infAdic.infCpl")).Replace(";", Environment.NewLine); + } + + private void PgNfce_StartPage(object sender, EventArgs e) + { + phbCancelado.Visible = ((Boolean)Report.GetParameterValue("NfceCancelado")); + + if (!Engine.FinalPass) + return; + if ( (NfceModoImpressao) ((Int32)Report.GetParameterValue("NfceModoImpressao")) != NfceModoImpressao.UnicaPagina) + return; + + CompactarTopDeDesignDasBandas(); + + PgNfce.PaperHeight = (rtbEmitLogoHeight + + phbEmitenteHeight + + ((Boolean)Report.GetParameterValue("NfceCancelado") ? phbCancelado.Height : 0)+ + ghbProdutosUmaLinhaHeight + + dbProdutosUmaLinhaHeight + + ghbProdutosDuasLinhasHeight + + dbProdutosDuasLinhasHeight + + gfbProdutosHeight + + cbDescontoHeight + + child2Height + + dbPagamentoHeight + + dbDetPagamentoHeight + + dbTrocoHeight + + dbTributosHeight + + dbObservacaoHeight + + dbInfoFiscalHeight + + dbNumeroSerieDhHeight + + dbConsultaHeight + + dbInfProtxMsgHeight + + dbDestinatarioHeight + + dbQrCodeNormalHeight + + dbQrCodeLateralHeight + + dbProtocoloHeigth + + dbTextoRodapeHeight + ) / Units.Millimeters + PgNfce.TopMargin + PgNfce.BottomMargin; + } + + /// <summary> + /// Compacta o Top de DESIGN de todas as bandas da página para ~0, preservando a ordem relativa + /// (incrementos de 0.01px). No modo de impressão em página única o PaperHeight é calculado do + /// tamanho do conteúdo e pode ficar menor que o Top de design das últimas bandas (~297mm de + /// layout empilhado no designer); nesse caso, ao calcular a altura de bandas CanShrink, o + /// FastReport aplica altura = min(alturaDoConteudo, alturaDaPagina - TopDeDesign) e o resultado + /// fica NEGATIVO, puxando as bandas seguintes para cima e desmontando o fim do cupom (QR Code, + /// protocolo, tributos e rodapé) em cupons com poucos itens. O Top de design não define a + /// posição real de impressão (as bandas fluem em sequência), então compactá-lo não altera o + /// visual e apenas elimina o recorte. + /// </summary> + private void CompactarTopDeDesignDasBandas() + { + float topCompacto = 0; + foreach (Base c in PgNfce.AllObjects) + { + BandBase b = c as BandBase; + if (b == null) + continue; + b.Top = topCompacto; + topCompacto += 0.01f; + } + } + + float dbProdutosUmaLinhaHeight; + private void dbProdutosUmaLinha_AfterPrint(object sender, EventArgs e) + { + dbProdutosUmaLinhaHeight += (dbProdutosUmaLinha.Visible ? dbProdutosUmaLinha.Height : 0) + (cbDescontoItemUmaLinha.Visible ? cbDescontoItemUmaLinha.Height : 0); + } + + float dbProdutosDuasLinhasHeight; + private void dbProdutosDuasLinhas_AfterPrint(object sender, EventArgs e) + { + dbProdutosDuasLinhasHeight += (dbProdutosDuasLinhas.Visible ?dbProdutosDuasLinhas.Height : 0) + (cbDescontoItemDuasLinhas.Visible ? cbDescontoItemDuasLinhas.Height : 0); + } + + float dbInfoFiscalHeight; + private void dbInfoFiscal_AfterPrint(object sender, EventArgs e) + { + dbInfoFiscalHeight = (dbInfoFiscal.Visible ? dbInfoFiscal.Height : 0); + } + + float dbNumeroSerieDhHeight; + private void dbNumeroSerieDh_AfterPrint(object sender, EventArgs e) + { + dbNumeroSerieDhHeight = (dbNumeroSerieDh.Visible ? dbNumeroSerieDh.Height : 0); + } + + float dbConsultaHeight; + private void dbConsulta_AfterPrint(object sender, EventArgs e) + { + dbConsultaHeight = (dbConsulta.Visible ? dbConsulta.Height : 0); + } + + float rtbEmitLogoHeight; + private void rtbEmitLogo_AfterPrint(object sender, EventArgs e) + { + rtbEmitLogoHeight = (rtbEmitLogo.Visible ? rtbEmitLogo.Height : 0); + } + + float phbEmitenteHeight; + private void phbEmitente_AfterPrint(object sender, EventArgs e) + { + phbEmitenteHeight = (phbEmitente.Visible ? phbEmitente.Height : 0); + } + + float ghbProdutosUmaLinhaHeight; + private void ghbProdutosUmaLinha_AfterPrint(object sender, EventArgs e) + { + ghbProdutosUmaLinhaHeight = (ghbProdutosUmaLinha.Visible ? ghbProdutosUmaLinha.Height : 0); + } + + float ghbProdutosDuasLinhasHeight; + private void ghbProdutosDuasLinhas_AfterPrint(object sender, EventArgs e) + { + ghbProdutosDuasLinhasHeight = (ghbProdutosDuasLinhas.Visible ? ghbProdutosDuasLinhas.Height : 0); + } + + float gfbProdutosHeight; + private void gfbProdutos_AfterPrint(object sender, EventArgs e) + { + gfbProdutosHeight = (gfbProdutos.Visible ? gfbProdutos.Height : 0); + } + + float dbPagamentoHeight; + private void dbPagamento_AfterPrint(object sender, EventArgs e) + { + dbPagamentoHeight += (dbPagamento.Visible ? dbPagamento.Height : 0); + } + + float dbDetPagamentoHeight; + private void dbDetPagamento_AfterPrint(object sender, EventArgs e) + { + dbDetPagamentoHeight += (dbDetPagamento.Visible ? dbDetPagamento.Height : 0); + } + + float dbTributosHeight; + private void dbTributos_AfterPrint(object sender, EventArgs e) + { + dbTributosHeight = (dbTributos.Visible ? dbTributos.Height : 0); + } + + float dbObservacaoHeight; + private void dbObservacao_AfterPrint(object sender, EventArgs e) + { + dbObservacaoHeight = (dbObservacao.Visible ? dbObservacao.Height : 0); + } + + float dbDestinatarioHeight; + private void dbDestinatario_AfterPrint(object sender, EventArgs e) + { + dbDestinatarioHeight = (dbDestinatario.Visible ? dbDestinatario.Height : 0); + } + + float dbQrCodeNormalHeight; + private void dbQrCode_AfterPrint(object sender, EventArgs e) + { + dbQrCodeNormalHeight = (dbQrCodeNormal.Visible ? dbQrCodeNormal.Height : 0); + } + + float dbQrCodeLateralHeight; + private void dbQrCodeLateral_AfterPrint(object sender, EventArgs e) + { + dbQrCodeLateralHeight = (dbQrCodeLateral.Visible ? dbQrCodeLateral.Height : 0); + } + + float dbProtocoloHeigth; + private void dbProtocolo_AfterPrint(object sender, EventArgs e) + { + dbProtocoloHeigth = (dbProtocolo.Visible ? dbProtocolo.Height : 0); + } + + float dbTrocoHeight; + private void dbTroco_AfterPrint(object sender, EventArgs e) + { + dbTrocoHeight = (dbTroco.Visible ? dbTroco.Height : 0); + } + + float cbDescontoHeight; + private void cbDesconto_AfterPrint(object sender, EventArgs e) + { + cbDescontoHeight = (cbDesconto.Visible ? cbDesconto.Height : 0); + } + + float child2Height; + private void Child2_AfterPrint(object sender, EventArgs e) + { + child2Height = (Child2.Visible ? Child2.Height : 0); + } + + float dbInfProtxMsgHeight; + private void dbInfProtxMsg_AfterPrint(object sender, EventArgs e) + { + dbInfProtxMsgHeight = (dbInfProtxMsg.Visible ? dbInfProtxMsg.Height : 0); + } + + float dbTextoRodapeHeight; + private void dbTextoRodape_AfterPrint(object sender, EventArgs e) + { + dbTextoRodapeHeight = (dbTextoRodape.Visible ? dbTextoRodape.Height : 0); + } + + private void cbDesconto_BeforePrint(object sender, EventArgs e) + { + cbDesconto.Visible = ((Decimal)Report.GetColumnValue("NFCe.NFe.infNFe.total.ICMSTot.vDesc")) > 0; + } + + private void txtValorTotal_BeforePrint(object sender, EventArgs e) + { + var vServ = ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.total.ISSQNtot.vServ")) == null ? 0 : ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.total.ISSQNtot.vServ")); + txtValorTotal.Text = (((Decimal)Report.GetColumnValue("NFCe.NFe.infNFe.total.ICMSTot.vProd")) + vServ).ToString(); + } + + private void dbPagamento_BeforePrint(object sender, EventArgs e) + { + dbPagamento.Visible = Report.GetColumnValue("NFCe.NFe.infNFe.pag.tPag") != null; + } + + private void dbDetPagamento_BeforePrint(object sender, EventArgs e) + { + dbDetPagamento.Visible = Report.GetDataSource("NFCe.NFe.infNFe.pag.detPag").RowCount != 0 && Report.GetColumnValue("NFCe.NFe.infNFe.pag.detPag.tPag") != null; + } + + private void dbTroco_BeforePrint(object sender, EventArgs e) + { + dbTroco.Visible = Report.GetColumnValue("NFCe.NFe.infNFe.pag.vTroco") != null; + } + + private void dbQrCodeLateral_BeforePrint(object sender, EventArgs e) + { + TrataCamposDestinatario(); + dbQrCodeLateral.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Lateral); + } + + private void dbQrCodeNormal_BeforePrint(object sender, EventArgs e) + { + dbQrCodeNormal.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Abaixo); + } + + private void dbProtocolo_BeforePrint(object sender, EventArgs e) + { + dbProtocolo.Visible = ((protNFe)Report.GetColumnValue("NFCe.protNFe")) != null; + } + + private void dbNumeroSerieDh_BeforePrint(object sender, EventArgs e) + { + dbNumeroSerieDh.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Abaixo); + } + + private void txtProdutoDuasLinhasDescricaoProduto_BeforePrint(object sender, EventArgs e) + { + bool nfceDetalheVendaNormalCompleto = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.Completo; + bool nfceDetalheVendaContingenciaCompleto = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.Completo; + + if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) + txtProdutoDuasLinhasDescricaoProduto.WordWrap = nfceDetalheVendaNormalCompleto; + else + txtProdutoDuasLinhasDescricaoProduto.WordWrap = nfceDetalheVendaContingenciaCompleto; + + if (nfceDetalheVendaNormalCompleto || nfceDetalheVendaContingenciaCompleto) + txtProdutoDuasLinhasDescricaoProduto.LineHeight = txtProdutoDuasLinhasDescricaoProduto.Height; // Ajuste de espaçamento entre linhas + } + + private string FormatarCnpj(string cnpj) + { + if (string.IsNullOrEmpty(cnpj)) return cnpj; + + return cnpj.Substring(0,2) + "." + cnpj.Substring(2,3) + "." + cnpj.Substring(5,3) + "/" + cnpj.Substring(8,4) + "-" + cnpj.Substring(12,2); + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.Base/NFe.Danfe.Base.csproj b/NFe.Danfe.Base/NFe.Danfe.Base.csproj index 733d49db7..42e09d508 100644 --- a/NFe.Danfe.Base/NFe.Danfe.Base.csproj +++ b/NFe.Danfe.Base/NFe.Danfe.Base.csproj @@ -1,71 +1,40 @@ - - - + + - Debug - AnyCPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666} - Library - Properties - NFe.Danfe.Base - NFe.Danfe.Base - v4.5 - 512 - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - + + + + 6.0.0 + + - - - True - True - Resources.resx - + + + + + - - PublicResXFileCodeGenerator - Designer - Resources.Designer.cs - + + Always + + + Always + + + Always + + + Always + + - - {e35e7c4a-5690-4979-8b43-002975b48eaa} - NFe.Utils - + - - - - \ No newline at end of file + + diff --git a/NFe.Danfe.Base/NFe.Danfe.Base.csproj.DotSettings b/NFe.Danfe.Base/NFe.Danfe.Base.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/NFe.Danfe.Base/NFe.Danfe.Base.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/Shared.NFe.Danfe.Base/NFe/ConfiguracaoDanfeNfe.cs b/NFe.Danfe.Base/NFe/ConfiguracaoDanfeNfe.cs similarity index 98% rename from Shared.NFe.Danfe.Base/NFe/ConfiguracaoDanfeNfe.cs rename to NFe.Danfe.Base/NFe/ConfiguracaoDanfeNfe.cs index e9f978cbc..e4d2a8b75 100644 --- a/Shared.NFe.Danfe.Base/NFe/ConfiguracaoDanfeNfe.cs +++ b/NFe.Danfe.Base/NFe/ConfiguracaoDanfeNfe.cs @@ -66,6 +66,7 @@ private ConfiguracaoDanfeNfe() ResumoCanhoto = string.Empty; ChaveContingencia = string.Empty; ExibeCampoFatura = false; + ExibeRetencoes = false; ImprimirISSQN = true; ImprimirDescPorc = false; ImprimirTotalLiquido = false; @@ -84,6 +85,8 @@ private ConfiguracaoDanfeNfe() public bool ExibirResumoCanhoto { get; set; } + public bool ExibeRetencoes { get; set; } + public string ResumoCanhoto { get; set; } public string ChaveContingencia { get; set; } diff --git a/NFe.Danfe.Base/NFe/NFeEvento.frx b/NFe.Danfe.Base/NFe/NFeEvento.frx new file mode 100644 index 000000000..eaec65e2b --- /dev/null +++ b/NFe.Danfe.Base/NFe/NFeEvento.frx @@ -0,0 +1,927 @@ + + + using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; +using NFe.Classes; +using NFe.Utils; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using NFe.Classes.Servicos.Tipos; + +namespace FastReport +{ + public class ReportScript + { + private string FormatarCampo(string valor, char format) + { + switch (format) + { + case 'c': //CEP + if (valor.Length == 8) + valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); + break; + case 'f': //Telefone /celular + if (valor.Length == 10) + valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); + else if (valor.Length == 11) + valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); + break; + case 'd': //cpf / cnpj + if (valor.Length == 11) + valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); + else if (valor.Length == 14) + valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); + break; + case 'p': + if (valor.Length == 7) + valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); + break; + } + return valor; + } + + + private void Memo47_BeforePrint(object sender, EventArgs e) + { + Memo47.Text = Report.GetColumnValue("NFe.NFe.infNFe.ide.serie").ToString().PadLeft(3,'0'); + Memo48.Text = Report.GetColumnValue("NFe.NFe.infNFe.ide.nNF").ToString().PadLeft(9,'0'); + try { + var value = (DateTimeOffset)Report.GetColumnValue("NFe.NFe.infNFe.ide.dhEmi"); + Memo49.Text = value.Date.Month.ToString().PadLeft(2, '0')+"/"+value.Date.Year.ToString().PadLeft(4, '0'); + } catch { + throw new Exception("Erro - dhEmi em formato incorreto."); + } + try { + Memo53.Text = DateTime.Parse(Report.GetColumnValue("procEventoNFe.evento.infEvento.dhEvento").ToString()).ToString(); + } catch{ + Memo53.Text=""; + } + if (Report.GetColumnValue("procEventoNFe.evento.infEvento.tpEvento").ToString() == "110111") + { + Memo40.Text="CANCELAMENTO DE NF-e"; + BandCondicoesUso.Visible=false; + } + else + { + Memo40.Text="CARTA DE CORREÇÃO ELETRÔNICA"; + BandCondicoesUso.Visible=true; + } + try { + Memo60.Text = DateTime.Parse(Report.GetColumnValue("procEventoNFe.retEvento.infEvento.dhRegEvento").ToString()).ToString(); + } catch{ + Memo60.Text=""; + } + Memo68.Text = FormatarCampo(((Nullable<Int64>)Report.GetColumnValue("NFe.NFe.infNFe.emit.enderEmit.fone")).ToString(),'f'); + Memo77.Text = FormatarCampo(((Nullable<Int64>)Report.GetColumnValue("NFe.NFe.infNFe.dest.enderDest.fone")).ToString(),'f'); + Memo52.Text = ((TipoAmbiente)Report.GetColumnValue("procEventoNFe.evento.infEvento.tpAmb")).TpAmbParaString(); + } + + private void memJustificativaCorrecao_BeforePrint(object sender, EventArgs e) + { +// if (Report.GetColumnValue("procEventoNFe.evento.infEvento.tpEvento").ToString() == "110111") +// +// TITULO_CONTEXTO := 'JUSTIFICATIVA'; +// TEXTO_EVENTO := <Eventos."xJust">; +// end +// else +// begin +// TITULO_CONTEXTO := 'CORREÇÃO'; +// TEXTO_EVENTO := <Eventos."xCorrecao">; +// end; + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.Base/NFe/NFeRetrato.frx b/NFe.Danfe.Base/NFe/NFeRetrato.frx new file mode 100644 index 000000000..19d2e8cca --- /dev/null +++ b/NFe.Danfe.Base/NFe/NFeRetrato.frx @@ -0,0 +1,1460 @@ + + + using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text.RegularExpressions; +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Informacoes.Detalhe.Tributacao; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using NFe.Utils.Tributacao.Estadual; +using NFe.Classes.Informacoes.Transporte; +using NFe.Classes.Protocolo; +using NFe.Classes.Informacoes.Emitente; +using NFe.Utils; +using NFe.Danfe.Base.NFe; +using NFe.Classes.Informacoes.Total; + +namespace FastReport +{ + public class ReportScript + { + private void Emitente_BeforePrint(object sender, EventArgs e) + { + var chave = Substring(((String)Report.GetColumnValue("NFe.NFe.infNFe.Id")), 3); + TextChaveAcesso.Text = Regex.Replace(chave, ".{4}", "$0 "); + BarcodeChave.Text = chave; + poEmitLogo.Image = ObterLogo(); + + var contigenciaId = (string)Report.GetParameterValue("ContingenciaID"); + BarCodeContigencia.Visible = !string.IsNullOrEmpty(contigenciaId); + if(BarCodeContigencia.Visible) BarCodeContigencia.Text = contigenciaId; + DadosISSQN.Visible = !(bool)Report.GetParameterValue("ImprimirISSQN"); + DadosRetencoes.Visible = (bool)Report.GetParameterValue("ExibeRetencoes"); + prodRow.AutoSize = (bool)Report.GetParameterValue("DuasLinhas"); + if(prodRow.AutoSize == false) prodNomeCell.WordWrap = false; + + if (Report.GetColumnValue("NFe.NFe.infNFe.emit.enderEmit.fone") != null) { + Text209.Text = FormatarCampo(Report.GetColumnValue("NFe.NFe.infNFe.emit.enderEmit.fone").ToString(), 'f'); + } + + if ((FinalidadeNFe)(Report.GetColumnValue("NFe.NFe.infNFe.ide.finNFe")) == FinalidadeNFe.fnDevolucao) + { + var ipi = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ICMSTot.vIPI")) ?? 0M; + if (ipi <= 0) + { + var ipiDevolvido = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ICMSTot.vIPIDevol")) ?? 0M; + Text163.Text = FormatNumber(ipiDevolvido,2); + } + } + + //Trato o campo de Frete + switch((int)((ModalidadeFrete)Report.GetColumnValue("NFe.NFe.infNFe.transp.modFrete"))) + { + case 0: Memo92.Text = "0 - Emit/Remet"; break; + case 1: Memo92.Text = "1 - Destinatário"; break; + case 2: Memo92.Text = "2 - Terceiros"; break; + case 3: Memo92.Text = "3 - Prop Remetente"; break; + case 4: Memo92.Text = "4 - Prop Destinatário"; break; + case 9: Memo92.Text = "9 - Sem Frete"; break; + } + + var vol = Report.GetDataSource("NFe.NFe.infNFe.transp.vol"); + vol.Init(); + int qtdeVol = 0; + + int volumes = 0; + decimal pesoL = 0; + decimal pesoB = 0; + while (vol.HasMoreRows) + { + Memo106.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.esp")); + Memo108.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.marca")); + Memo110.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.nVol")); + + volumes += ((Nullable<int>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.qVol")) ?? 0; + pesoL += ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.pesoL")) ?? 0M; + pesoB += ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.pesoB")) ?? 0M; + qtdeVol++; + vol.Next(); + } + + if (qtdeVol >= 1) + { + if (qtdeVol > 1) + { + Memo106.Text = "VOLUMES"; + Memo108.Text = ""; + Memo110.Text = ""; + } + + Memo104.Text = volumes.ToString(); + Memo112.Text = FormatNumber(pesoB,3) + " KG"; + Memo114.Text = FormatNumber(pesoL,3) + " KG"; + } + + if(Engine.FinalPass) + { + var vBC = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vBC")) ?? 0; + var vISS = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vISS")) ?? 0; + var vServ = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vServ")) ?? 0; + + DadosISSQN.Visible = !(vBC == 0 && vISS == 0 && vServ == 0); + + var retiradaCPF = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.CPF"); + var retiradaCNPJ = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.CNPJ"); + var retiradaEndereco = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xLgr"); + var retiradaNro = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.nro"); + var retiradaBairro = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xBairro"); + var retiradaMunicipio = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xMun"); + var retiradaUf = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.UF"); + + LocalRetirada.Visible = !string.IsNullOrEmpty(retiradaCPF) || !string.IsNullOrEmpty(retiradaCNPJ) || + !string.IsNullOrEmpty(retiradaEndereco) || !string.IsNullOrEmpty(retiradaNro) || + !string.IsNullOrEmpty(retiradaBairro) || !string.IsNullOrEmpty(retiradaMunicipio) || + !string.IsNullOrEmpty(retiradaUf); + + var entregaCPF = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.CPF"); + var entregaCNPJ = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.CNPJ"); + var entregaEndereco = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xLgr"); + var entregaNro = (string)Report.GetColumnValue("[NFe.NFe.infNFe.entrega.nro]"); + var entregaBairro = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xBairro"); + var entregaMunicipio = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xMun"); + var entregaUf = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.UF"); + + LocalEntrega.Visible = !string.IsNullOrEmpty(entregaCPF) || !string.IsNullOrEmpty(entregaCNPJ) || + !string.IsNullOrEmpty(entregaEndereco) || !string.IsNullOrEmpty(entregaNro) || + !string.IsNullOrEmpty(entregaBairro) || !string.IsNullOrEmpty(entregaMunicipio) || + !string.IsNullOrEmpty(entregaUf); + + + var indPagto = (IndicadorPagamento?)Report.GetColumnValue("NFe.NFe.infNFe.ide.indPag"); + var fatnFat = (string)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.nFat"); + var fatvOrig = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vOrig")) ?? 0M; + var fatvDesc = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vDesc")) ?? 0M; + var fatvLiq = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vLiq")) ?? 0M; + + Fatura.Visible = (bool)Report.GetParameterValue("ExibeCampoFatura"); + MemoFatura.Visible = !string.IsNullOrEmpty(fatnFat); + if(MemoFatura.Visible) MemoFatura.Text = string.Format("Número: {0} - Valor Original: {1:c} - Valor Desconto: {2:c} - ValorLíquido: {3:c}", + fatnFat, fatvOrig, fatvDesc, fatvLiq); + + switch(indPagto) + { + case IndicadorPagamento.ipVista: + Memo146.Text = "PAGAMENTO À VISTA"; + break; + + case IndicadorPagamento.ipPrazo: + Memo146.Text = "PAGAMENTO A PRAZO"; + break; + + case IndicadorPagamento.ipOutras: + Memo146.Text = "OUTROS"; + break; + } + } + + string infAdicionais = (string)Report.GetColumnValue("NFe.NFe.infNFe.infAdic.infCpl") + Environment.NewLine + (string)Report.GetColumnValue("NFe.NFe.infNFe.infAdic.infAdFisco"); + + infAdicionais = infAdicionais.Replace("[","[\"[").Replace("]","]\"]"); + + if((bool)Report.GetParameterValue("QuebrarLinhasObservacao")) + { + infAdicionais = infAdicionais.Replace(";", Environment.NewLine); + } + + TextInfAdicionais.Text = infAdicionais; + //memContInfAdicionais.Text = string.Empty; + + //string[] lines = infAdicionais.Split(new string[]{ Environment.NewLine, "\n" }, StringSplitOptions.None); + //pgContDadosAdicionais.Visible = lines.Length > LINHAS_DADOS_ADICIONAIS; + + //if(pgContDadosAdicionais.Visible) + //{ + // TextInfAdicionais.Text = string.Join(Environment.NewLine, lines.Take(LINHAS_DADOS_ADICIONAIS-1).ToArray()); + // memContInfAdicionais.Text = string.Join(Environment.NewLine, lines.Skip(LINHAS_DADOS_ADICIONAIS-1).ToArray()); + //} + } + + private void DadosProdutos_BeforePrint(object sender, EventArgs e) + { + var icmsBasico = (ICMSBasico)Report.GetColumnValue("NFe.NFe.infNFe.det.imposto.ICMS.TipoICMS"); + var ipiBasico = (IPIBasico)Report.GetColumnValue("NFe.NFe.infNFe.det.imposto.IPI.TipoIPI"); + + if (icmsBasico != null) + { + var orig = icmsBasico.GetIcmsOrig(); + if ((CRT)(Report.GetColumnValue("NFe.NFe.infNFe.emit.CRT")) == CRT.SimplesNacional || ((CRT)Report.GetColumnValue("NFe.NFe.infNFe.emit.CRT")) == CRT.SimplesNacionalMei) + { + if (icmsBasico.GetIcmsCst().CsticmsParaString() == "02" || icmsBasico.GetIcmsCst().CsticmsParaString() == "15" || + icmsBasico.GetIcmsCst().CsticmsParaString() == "53" || icmsBasico.GetIcmsCst().CsticmsParaString() == "61") + prodOriginCell.Text = orig.OrigemMercadoriaParaString() + icmsBasico.GetIcmsCst().CsticmsParaString(); + else + prodOriginCell.Text = orig.OrigemMercadoriaParaString() + icmsBasico.GetIcmsCsosn().CsosnicmsParaString(); + } + else + { + prodOriginCell.Text = orig.OrigemMercadoriaParaString() + icmsBasico.GetIcmsCst().CsticmsParaString(); + } + + prodBcCell.Text = FormatNumber(icmsBasico.GetIcmsBcValue(), 2); + prodICMSCell.Text = FormatNumber(icmsBasico.GetIcmsValue(), 2); + prodAlqICMSCell.Text = FormatNumber(icmsBasico.GetIcmsPercent(),2); + } + + + if(ipiBasico != null) + { + prodIPICell.Text = FormatNumber(ipiBasico.GetIpiValue(),2); + prodAlqIPICell.Text = FormatNumber(ipiBasico.GetIpiPercent(),2); + } + else + { + prodIPICell.Text = "0,00"; + prodAlqIPICell.Text = "0,00"; + } + + var imprimirUnidQtdeValor = (ImprimirUnidQtdeValor)Report.GetParameterValue("ImprimirUnidQtdeValor"); + var imprimirDescPorc = (bool)Report.GetParameterValue("ImprimirDescPorc"); + var imprimirTotalLiquido = (bool)Report.GetParameterValue("ImprimirTotalLiquido"); + + var uCom = ((String)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.uCom")); + var uTrib = ((String)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.uTrib")); + + var qCom = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.qCom")); + var qTrib = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.qTrib")); + + var vUnCom = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vUnCom")); + var vUnTrib = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vUnTrib")); + + var vProd = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vProd")); + var vDesc = (((Nullable<Decimal>)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vDesc")) ?? 0); + + if(imprimirTotalLiquido) vProd = vProd - vDesc; + if(vDesc > 0 && imprimirDescPorc) + { + vDesc = ((vDesc*100)/(vUnCom*qCom)); + } + + prodValorCell.Text = FormatNumber(vProd,2); + prodDescontoCell.Text = FormatNumber(vDesc, 2); + + var decimaisQuantidadeItem = (int)Report.GetParameterValue("DecimaisQuantidadeItem"); + var decimaisValorUnitario = (int)Report.GetParameterValue("DecimaisValorUnitario"); + + switch(imprimirUnidQtdeValor) + { + case ImprimirUnidQtdeValor.Comercial: + prodUnidadeCell.Text = uCom; + prodQtdCell.Text = FormatNumber(qCom, decimaisQuantidadeItem); + prodValorUnitarioCell.Text = FormatNumber(vUnCom, decimaisValorUnitario); + break; + + case ImprimirUnidQtdeValor.Tributavel: + prodUnidadeCell.Text = uTrib; + prodQtdCell.Text = FormatNumber(qTrib, decimaisQuantidadeItem); + prodValorUnitarioCell.Text = FormatNumber(vUnTrib, decimaisValorUnitario); + break; + + case ImprimirUnidQtdeValor.Ambos: + + var qTribFormatado = FormatNumber(qTrib, decimaisQuantidadeItem); + var qComFormatado = FormatNumber(qCom, decimaisQuantidadeItem); + var vUnComFormatado = FormatNumber(vUnCom, decimaisValorUnitario); + var vUnTribFormatado = FormatNumber(vUnTrib, decimaisValorUnitario); + + prodUnidadeCell.Text = string.Format("{0}{2}{1}", uCom, uTrib, Environment.NewLine); + prodQtdCell.Text = string.Format("{0}{2}{1}", qComFormatado, qTribFormatado, Environment.NewLine); + prodValorUnitarioCell.Text = string.Format("{0}{2}{1}", vUnComFormatado, vUnTribFormatado, Environment.NewLine); + break; + } + + if ((FinalidadeNFe)(Report.GetColumnValue("NFe.NFe.infNFe.ide.finNFe")) == FinalidadeNFe.fnDevolucao) + { + if(ipiBasico == null) + { + var DevolvidoPercentual = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.det.impostoDevol.pDevol")) ?? 0M; + var ipiDevolvidoValor = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.det.impostoDevol.IPI.vIPIDevol")) ?? 0M; + prodIPICell.Text = FormatNumber(ipiDevolvidoValor,2); + if(ipiDevolvidoValor > 0) + { + prodAlqIPICell.Text = FormatNumber(DevolvidoPercentual,2); + } + } + } + } + + private string FormatarCampo(string valor, char format) + { + if (valor == null) return string.Empty; + + switch (format) + { + case 'c': //CEP + if (valor.Length == 8) + valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); + break; + + case 'f': //Telefone /celular + if (valor.Length == 10) + valor = "(" +valor.Substring(0,2) + ") " + valor.Substring(2,4) + "-" + valor.Substring(6,4); + else if (valor.Length == 11) + valor = "(" +valor.Substring(0,2) + ") " + valor.Substring(2,5) + "-" + valor.Substring(7,4); + break; + + case 'd': //cpf / cnpj + if (valor.Length == 11) + valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); + else if (valor.Length == 14) + valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); + break; + + case 'p': + if (valor.Length == 7) + valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); + break; + } + return valor; + } + + public Image ObterLogo() + { + byte[] logomarca = Report.GetParameterValue("Logo") as byte[]; + + if (logomarca == null) return null; + + using(var ms = new MemoryStream(logomarca)) + { + var image = Image.FromStream(ms); + return image; + } + } + + private void Imposto_BeforePrint(object sender, EventArgs e) + { + bool exibirIbpt = ((Boolean?)Report.GetParameterValue("ExibirTotalTributos")) ?? false; + + QuadroVTOTTRIB.Visible = exibirIbpt; + txtIbptValor.Visible = exibirIbpt; + + if (exibirIbpt) + { + //Base ICMS + QuadroVBC.Width = 100f; + Text170.Width = QuadroVBC.Width; + + //Valor ICMS + QuadroVICMS.Width = 100f; + QuadroVICMS.Left = 100f; + Text169.Width = QuadroVICMS.Width; + Text169.Left = QuadroVICMS.Left; + + //Base Calc ICMS ST + QuadroVBCST.Text = "BASE CÁLC. ICMS SUBST."; + QuadroVBCST.Width = 100f; + QuadroVBCST.Left = 200f; + Text168.Width = QuadroVBCST.Width; + Text168.Left = QuadroVBCST.Left; + + //ICMS ST + QuadrovST.Width = 100f; + QuadrovST.Left = 300f; + Text162.Width = QuadrovST.Width; + Text162.Left = QuadrovST.Left; + + //PIS + QuadroPIS.Width = 100f; + QuadroPIS.Left = 400f; + Text160.Width = QuadroPIS.Width; + Text160.Left = QuadroPIS.Left; + + //TOTAL TRIBUTOS + QuadroVTOTTRIB.Width = 100f; + QuadroVTOTTRIB.Left = 500f; + txtIbptValor.Width = QuadroVTOTTRIB.Width; + txtIbptValor.Left = QuadroVTOTTRIB.Left; + + //Total produtos + Memo67.Left = 600f; + Memo67.Width = 144.5f; + Text159.Width = Memo67.Width; + Text159.Left = Memo67.Left; + + //Frete + Memo77.Left = 0f; + Memo77.Width = 100f; + Text167.Width = Memo77.Width; + Text167.Left = Memo77.Left; + + //Seguro + Memo75.Left = 100f; + Memo75.Width = 100f; + Text166.Width = Memo75.Width; + Text166.Left = Memo75.Left; + + //Desconto + Memo73.Left = 200f; + Memo73.Width = 100f; + Text165.Width = Memo73.Width; + Text165.Left = Memo73.Left; + + //Despesas + Memo71.Left = 300f; + Memo71.Width = 100f; + Text164.Width = Memo71.Width; + Text164.Left = Memo71.Left; + + //IPI + Memo69.Left = 400f; + Memo69.Width = 100f; + Text163.Width = Memo69.Width; + Text163.Left = Memo69.Left; + + //Valor Cofins + Text158.Left = 500f; + Text158.Width = 100f; + Text161.Width = Text158.Width; + Text161.Left = Text158.Left; + + //Total Contábil + Memo79.Left = 600f; + Memo79.Width = 144.5f; + Memo80.Width = Memo79.Width; + Memo80.Left = Memo79.Left; + } + } + + private int contadorDuplicatas =0; + private float _TamanhoDuplicatas = 0; + + private void DuplicatasHeader_BeforePrint(object sender, EventArgs e) + { + contadorDuplicatas = 0; + _TamanhoDuplicatas = 0; + } + + private void Duplicatas_BeforePrint(object sender, EventArgs e) + { + contadorDuplicatas++; + if (contadorDuplicatas == 6) + { + _TamanhoDuplicatas += Duplicatas.Height; + contadorDuplicatas = 0; + } + } + + private float _Tamanho = 0; + private float _TamanhoItens = 0; + + private void DadosProdutosHeader_BeforePrint(object sender, EventArgs e) + { + + if (((CRT)Report.GetColumnValue("NFe.NFe.infNFe.emit.CRT")) == CRT.SimplesNacional || ((CRT)Report.GetColumnValue("NFe.NFe.infNFe.emit.CRT")) == CRT.SimplesNacionalMei) { + Memo119.Text = "O/CSOSN"; + } + + _Tamanho = 0; + _TamanhoItens = 0; + + if (Canhoto.Visible) + _Tamanho += Canhoto.Height; + + if (Emitente.Visible) + _Tamanho += Emitente.Height; + + if (Destinatario.Visible) + _Tamanho += Destinatario.Height; + + if (LocalRetirada.Visible) + _Tamanho += LocalRetirada.Height; + + if (LocalEntrega.Visible) + _Tamanho += LocalEntrega.Height; + + if (Fatura.Visible) + _Tamanho += Fatura.Height; + + if (DuplicatasHeader.Visible) + _Tamanho += DuplicatasHeader.Height; + + _Tamanho += _TamanhoDuplicatas; + + if (Imposto.Visible) + _Tamanho += Imposto.Height; + + if (TransportadorVolumes.Visible) + _Tamanho += TransportadorVolumes.Height; + + if (DadosProdutosHeader.Visible) + _Tamanho += DadosProdutosHeader.Height; + + //_Tamanho += _TamanhoItens; + + if (DadosProdutosFooter.Visible) + _Tamanho += DadosProdutosFooter.Height; + + if (DadosISSQN.Visible) + _Tamanho += DadosISSQN.Height; + + if (DadosRetencoes.Visible) + _Tamanho += DadosRetencoes.Height; + + DadosAdicionais.CalcHeight(); + + if (DadosAdicionais.Visible) + _Tamanho += DadosAdicionais.Height; + + if (Rodape.Visible) + _Tamanho += Rodape.Height; + + } + + private void DadosProdutos_AfterPrint(object sender, EventArgs e) + { + DadosProdutos.StartNewPage = false; + + if (Engine.PageNo == 1) + { + _TamanhoItens += DadosProdutos.Height; + + if (_Tamanho + _TamanhoItens >= Engine.PageHeight) + { + DadosProdutos.StartNewPage = true; + _TamanhoItens = 0; + } + } + } + + + + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.Base/NFe/NFeSimplificado.frx b/NFe.Danfe.Base/NFe/NFeSimplificado.frx new file mode 100644 index 000000000..fe7e4e83c --- /dev/null +++ b/NFe.Danfe.Base/NFe/NFeSimplificado.frx @@ -0,0 +1,542 @@ + + + using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text.RegularExpressions; +using FastReport; +using FastReport.Data; +using FastReport.Dialog; +using FastReport.Barcode; +using FastReport.Table; +using FastReport.Utils; +using NFe.Classes.Informacoes.Detalhe.Tributacao; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; +using NFe.Utils.Tributacao.Estadual; +using NFe.Classes.Informacoes.Transporte; +using NFe.Classes.Protocolo; +using NFe.Classes.Informacoes.Emitente; +using NFe.Utils; +using NFe.Danfe.Base.NFe; +using NFe.Classes.Informacoes.Total; +using NFe.Classes.Informacoes.Identificacao.Tipos; + +namespace FastReport +{ + public class ReportScript + { + private string FormatarCampo(string valor, char format) + { + switch (format) + { + case 'c': //CEP + if (valor.Length == 8) + valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); + break; + + case 'f': //Telefone /celular + if (valor.Length == 10) + valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); + else if (valor.Length == 11) + valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); + else if (valor.Length == 12) //55 + 10 + valor = "(" +valor.Substring(2,2) + ")" + valor.Substring(4,5) + "-" + valor.Substring(8,4); + else if (valor.Length == 11) //55+11 + valor = "(" +valor.Substring(2,2) + ")" + valor.Substring(4,5) + "-" + valor.Substring(9,4); + break; + + case 'd': //cpf / cnpj + if (valor.Length == 11) + valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); + else if (valor.Length == 14) + valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); + break; + + case 'p': + if (valor.Length == 7) + valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); + break; + } + + + return valor; + } + + private void Data1_BeforePrint(object sender, EventArgs e) + { + TheLogotipo.Image = ObterLogo(); + + var chave = (((String)Report.GetColumnValue("NFe.NFe.infNFe.Id"))).Substring(3); + Text1.Text = Regex.Replace(chave, ".{4}", "$0 "); + + Text38.Visible = ((Boolean?)Report.GetParameterValue("EsconderValor")) != true; + Text36.Visible = ((Boolean?)Report.GetParameterValue("EsconderValor")) != true; + + var emissao = ((TipoEmissao)Report.GetColumnValue("NFe.NFe.infNFe.ide.tpEmis")); + switch (emissao) + { + case TipoEmissao.teNormal: Text33.Text = "Tipo: Normal"; break; + case TipoEmissao.teEPEC: Text33.Text = "Tipo: EPEC"; break; + case TipoEmissao.teFSDA: Text33.Text = "Tipo: FS-DA"; break; + case TipoEmissao.teFSIA: Text33.Text = "Tipo: FS-IA"; break; + case TipoEmissao.teSCAN: Text33.Text = "Tipo: SCAN"; break; + case TipoEmissao.teSVCAN: Text33.Text = "Tipo: SVC-AN"; break; + case TipoEmissao.teSVCRS: Text33.Text = "Tipo: SVC-RS"; break; + case TipoEmissao.teOffLine: Text33.Text = "Tipo: Offline"; break; + default: throw new ArgumentException("tpEmis não implementado"); + } + + var operacao = ((TipoNFe)Report.GetColumnValue("NFe.NFe.infNFe.ide.tpNF")); + switch (operacao) + { + case TipoNFe.tnEntrada : Text37.Text = "Operação: Entrada"; break; + case TipoNFe.tnSaida : Text37.Text = "Operação: Saída"; break; + default: throw new ArgumentException("tpNF não implementado"); + } + } + + public Image ObterLogo() + { + byte[] logomarca = Report.GetParameterValue("Logo") as byte[]; + + if (logomarca == null) return null; + + using(var ms = new MemoryStream(logomarca)) + { + var image = Image.FromStream(ms); + return image; + } + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.Base/Properties/AssemblyInfo.cs b/NFe.Danfe.Base/Properties/AssemblyInfo.cs deleted file mode 100644 index 455436a3c..000000000 --- a/NFe.Danfe.Base/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NFe.Danfe.Base")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Danfe.Base")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("80c6093c-47d5-41a1-9fa0-e218e82fa666")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/NFe.Danfe.Base/Properties/Resources.Designer.cs b/NFe.Danfe.Base/Properties/Resources.Designer.cs deleted file mode 100644 index daa02d6c0..000000000 --- a/NFe.Danfe.Base/Properties/Resources.Designer.cs +++ /dev/null @@ -1,103 +0,0 @@ -//------------------------------------------------------------------------------ -// -// O código foi gerado por uma ferramenta. -// Versão de Tempo de Execução:4.0.30319.42000 -// -// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se -// o código for gerado novamente. -// -//------------------------------------------------------------------------------ - -namespace NFe.Danfe.Base.Properties { - using System; - - - /// - /// Uma classe de recurso de tipo de alta segurança, para pesquisar cadeias de caracteres localizadas etc. - /// - // Essa classe foi gerada automaticamente pela classe StronglyTypedResourceBuilder - // através de uma ferramenta como ResGen ou Visual Studio. - // Para adicionar ou remover um associado, edite o arquivo .ResX e execute ResGen novamente - // com a opção /str, ou recrie o projeto do VS. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Retorna a instância de ResourceManager armazenada em cache usada por essa classe. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NFe.Danfe.Base.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Substitui a propriedade CurrentUICulture do thread atual para todas as - /// pesquisas de recursos que usam essa classe de recurso de tipo de alta segurança. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - public static byte[] OpenSans_CondBold { - get { - object obj = ResourceManager.GetObject("OpenSans_CondBold", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - public static byte[] OpenSans_CondLight { - get { - object obj = ResourceManager.GetObject("OpenSans_CondLight", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - public static byte[] OpenSans_CondLightItalic { - get { - object obj = ResourceManager.GetObject("OpenSans_CondLightItalic", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - public static byte[] UbuntuCondensed_Regular { - get { - object obj = ResourceManager.GetObject("UbuntuCondensed_Regular", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/NFe.Danfe.Base/Properties/Resources.resx b/NFe.Danfe.Base/Properties/Resources.resx deleted file mode 100644 index bce2cfe3f..000000000 --- a/NFe.Danfe.Base/Properties/Resources.resx +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\..\Shared.NFe.Danfe.Base\Fontes\OpenSans-CondBold.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\..\Shared.NFe.Danfe.Base\Fontes\OpenSans-CondLight.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\..\Shared.NFe.Danfe.Base\Fontes\OpenSans-CondLightItalic.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\..\Shared.NFe.Danfe.Base\Fontes\UbuntuCondensed-Regular.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/NFe.Danfe.Fast.Skia/DanfeFastBase.cs b/NFe.Danfe.Fast.Skia/DanfeFastBase.cs new file mode 100644 index 000000000..9c46c64b1 --- /dev/null +++ b/NFe.Danfe.Fast.Skia/DanfeFastBase.cs @@ -0,0 +1,112 @@ +using System; +using System.IO; +using FastReport; +using FastReport.Export.Html; +using FastReport.Export.Pdf; + +namespace NFe.Danfe.Fast.Skia +{ + public class DanfeFastBase + { + public Report Relatorio { get; protected set; } + + /// + /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DANFE + public void ExportarPdf(string arquivo) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFExport(), arquivo); + } + /// + /// Converte o DANFE para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + public void ExportarPdf(Stream outputStream) + { + try + { + Relatorio.Prepare(); + Relatorio.Export(new PDFExport(), outputStream); + outputStream.Position = 0; + } + catch (Exception ex) + { + throw ex; + } + } + + /// + /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DANFE + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(string arquivo, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, arquivo); + } + + /// + /// Converte o DANFE para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, outputStream); + outputStream.Position = 0; + } + + public byte[] ExportarHtml() + { + using (MemoryStream stream = new MemoryStream()) // Create a stream for the report + { + try + { + Relatorio.Prepare(); + HTMLExport html = new HTMLExport + { + SinglePage = true, // Single page report + Navigator = false, // Top navigation bar + EmbedPictures = true // Embeds images into a document + }; + Relatorio.Export(html, stream); + return stream.ToArray(); + } + catch (System.Exception ex) + { + throw ex; + } + } + } + + public void ExportarHtml(Stream outputStream) + { + try + { + Relatorio.Prepare(); + HTMLExport html = new HTMLExport + { + SinglePage = true, // Single page report + Navigator = false, // Top navigation bar + EmbedPictures = true // Embeds images into a document + }; + Relatorio.Export(html, outputStream); + outputStream.Position = 0; + } + catch (System.Exception ex) + { + throw ex; + } + } + } +} diff --git a/NFe.Danfe.Fast.Skia/Dlls/FastReport.dll b/NFe.Danfe.Fast.Skia/Dlls/FastReport.dll new file mode 100644 index 000000000..f20ad7ab4 Binary files /dev/null and b/NFe.Danfe.Fast.Skia/Dlls/FastReport.dll differ diff --git a/NFe.Danfe.Fast.Skia/NFCe/DanfeFrNfce.cs b/NFe.Danfe.Fast.Skia/NFCe/DanfeFrNfce.cs new file mode 100644 index 000000000..161c285ec --- /dev/null +++ b/NFe.Danfe.Fast.Skia/NFCe/DanfeFrNfce.cs @@ -0,0 +1,81 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFCe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.Fast.Skia.NFCe +{ + /// + /// Classe responsável pela impressão do DANFE da NFCe em Fast Reports + /// + public class DanfeFrNfce : DanfeFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports + /// + /// Objeto do tipo nfeProc + /// Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão + /// Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ + /// Código de Segurança do Contribuinte(antigo Token) + /// Caminho e arquivo frx contendo as definições do relatório personalizado + /// Texto para ser impresso no final do documento + public DanfeFrNfce(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, string arquivoRelatorio = "", string textoRodape = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFCe\NFCe.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeNfceReport(proc, configuracaoDanfeNfce, cIdToken, csc, frx, arquivoRelatorio, textoRodape); + } + + /// + /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports. + /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe + /// + /// Objeto do tipo NFe + /// Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão + /// Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ + /// Código de Segurança do Contribuinte(antigo Token) + /// Texto para ser impresso no final do documento + public DanfeFrNfce(Classes.NFe nfe, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, string textoRodape = "") : + this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfce, cIdToken, csc, arquivoRelatorio: string.Empty, textoRodape: textoRodape) + { + } + } +} diff --git a/NFe.Danfe.Fast.Skia/NFe.Danfe.Fast.Skia.csproj b/NFe.Danfe.Fast.Skia/NFe.Danfe.Fast.Skia.csproj new file mode 100644 index 000000000..cdf4a3ff7 --- /dev/null +++ b/NFe.Danfe.Fast.Skia/NFe.Danfe.Fast.Skia.csproj @@ -0,0 +1,22 @@ + + + + net6.0 + fastskia + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.Fast.Skia/NFe/DanfeFrEvento.cs b/NFe.Danfe.Fast.Skia/NFe/DanfeFrEvento.cs new file mode 100644 index 000000000..f258186c9 --- /dev/null +++ b/NFe.Danfe.Fast.Skia/NFe/DanfeFrEvento.cs @@ -0,0 +1,66 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.Fast.Skia.NFe +{ + /// + /// Classe responsável pela impressão do DANFE dos eventos da NFe, em Fast Reports + /// + public class DanfeFrEvento : DanfeFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE do evento da NFe, em Fast Reports + /// + /// Objeto do tipo + /// Objeto do tipo + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + /// Caminho e arquivo frx contendo as definições do relatório personalizado + public DanfeFrEvento(nfeProc proc, Classes.Servicos.Consulta.procEventoNFe procEventoNFe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeEvento.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeFrEventoReport(proc, procEventoNFe, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); + } + } +} diff --git a/NFe.Danfe.Fast.Skia/NFe/DanfeFrNfe.cs b/NFe.Danfe.Fast.Skia/NFe/DanfeFrNfe.cs new file mode 100644 index 000000000..ad257af58 --- /dev/null +++ b/NFe.Danfe.Fast.Skia/NFe/DanfeFrNfe.cs @@ -0,0 +1,75 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.Fast.Skia.NFe +{ + /// + /// Classe responsável pela impressão do DANFE da NFe em Fast Reports + /// + public class DanfeFrNfe : DanfeFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports + /// + /// Objeto do tipo nfeProc + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + public DanfeFrNfe(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeRetrato.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + this.Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); + } + + /// + /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports. + /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe + /// + /// Objeto do tipo + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + public DanfeFrNfe(Classes.NFe nfe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor) : this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfe, desenvolvedor) + { + } + } +} \ No newline at end of file diff --git a/NFe.Danfe.Fast.Skia/NFe/DanfeFrSimplificado.cs b/NFe.Danfe.Fast.Skia/NFe/DanfeFrSimplificado.cs new file mode 100644 index 000000000..0d2200740 --- /dev/null +++ b/NFe.Danfe.Fast.Skia/NFe/DanfeFrSimplificado.cs @@ -0,0 +1,30 @@ +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.Fast.Skia.NFe +{ + public class DanfeFrSimplificado : DanfeFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE Simplificada da NFe em Fast Reports + /// + /// Objeto do tipo nfeProc + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + /// Caminho do arquivo frx + public DanfeFrSimplificado(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeSimplificado.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); + } + + } +} diff --git a/NFe.Danfe.Fast.Standard/DanfeBase.cs b/NFe.Danfe.Fast.Standard/DanfeBase.cs deleted file mode 100644 index da7d51c04..000000000 --- a/NFe.Danfe.Fast.Standard/DanfeBase.cs +++ /dev/null @@ -1,162 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using FastReport; -using FastReport.Export.Html; -using FastReport.Export.Image; -using FastReport.Export.PdfSimple; -using Shared.NFe.Danfe.Base; -using System.IO; - -namespace NFe.Danfe.Fast.Standard -{ - public class DanfeBase : IDanfeBasico - { - public Report Relatorio { get; protected set; } - - public byte[] ExportarPdf() - { - using (MemoryStream stream = new MemoryStream()) // Create a stream for the report - { - try - { - Relatorio.Prepare(); - Relatorio.Export(new PDFSimpleExport(), stream); - return stream.ToArray(); - } - catch (System.Exception ex) - { - throw ex; - } - } - } - - public void ExportarPdf(Stream outputStream) - { - try - { - Relatorio.Prepare(); - Relatorio.Export(new PDFSimpleExport(), outputStream); - outputStream.Position = 0; - } - catch (System.Exception ex) - { - throw ex; - } - } - - public byte[] ExportarHtml() - { - using (MemoryStream stream = new MemoryStream()) // Create a stream for the report - { - try - { - Relatorio.Prepare(); - HTMLExport html = new HTMLExport - { - SinglePage = true, // Single page report - Navigator = false, // Top navigation bar - EmbedPictures = true // Embeds images into a document - }; - Relatorio.Export(html, stream); - return stream.ToArray(); - } - catch (System.Exception ex) - { - throw ex; - } - } - } - - public void ExportarHtml(Stream outputStream) - { - try - { - Relatorio.Prepare(); - HTMLExport html = new HTMLExport - { - SinglePage = true, // Single page report - Navigator = false, // Top navigation bar - EmbedPictures = true // Embeds images into a document - }; - Relatorio.Export(html, outputStream); - outputStream.Position = 0; - } - catch (System.Exception ex) - { - throw ex; - } - } - - public byte[] ExportarPng() - { - using (MemoryStream stream = new MemoryStream()) // Create a stream for the report - { - try - { - Relatorio.Prepare(); - ImageExport png = new ImageExport - { - ImageFormat = ImageExportFormat.Png, - SeparateFiles = false - }; - Relatorio.Export(png, stream); - return stream.ToArray(); - } - catch (System.Exception ex) - { - throw ex; - } - } - } - - public void ExportarPng(Stream outputStream) - { - try - { - Relatorio.Prepare(); - ImageExport png = new ImageExport - { - ImageFormat = ImageExportFormat.Png, - SeparateFiles = false - }; - Relatorio.Export(png, outputStream); - outputStream.Position = 0; - } - catch (System.Exception ex) - { - throw ex; - } - } - } -} \ No newline at end of file diff --git a/NFe.Danfe.Fast.Standard/NFCe/DanfeFrNfce.cs b/NFe.Danfe.Fast.Standard/NFCe/DanfeFrNfce.cs deleted file mode 100644 index 8e0e6b06c..000000000 --- a/NFe.Danfe.Fast.Standard/NFCe/DanfeFrNfce.cs +++ /dev/null @@ -1,73 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using NFe.Classes; -using NFe.Danfe.Base.NFCe; -using System; - -namespace NFe.Danfe.Fast.Standard.NFCe -{ - /// - /// Classe responsável pela impressão do DANFE da NFCe em Fast Reports - /// - public class DanfeFrNfce : DanfeBase - { - /// - /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports - /// - /// Objeto do tipo nfeProc - /// Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão - /// Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ - /// Código de Segurança do Contribuinte(antigo Token) - /// Caminho e arquivo frx contendo as definições do relatório personalizado - public DanfeFrNfce(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, string arquivoRelatorio = "") - { - //Relatorio = DanfeSharedHelper.GenerateDanfeNfceReport(proc, configuracaoDanfeNfce, cIdToken, csc, Standard.Properties.Resources.NFCe, arquivoRelatorio); - //A implementacao comentada acima esta funcionado, o relatório ainda não foi testado completamente mas é possivel sua conversão futuramente. - throw new NotImplementedException("NFCE ainda não implementado para .netstandard ou .netcore, apenas disponivel em .net framwork. Crie uma issue no nosso github para mais informações: https://github.com/ZeusAutomacao/DFe.NET"); - } - - /// - /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports. - /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe - /// - /// Objeto do tipo NFe - /// Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão - /// Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ - /// Código de Segurança do Contribuinte(antigo Token) - public DanfeFrNfce(Classes.NFe nfe, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc) : - this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfce, cIdToken, csc, string.Empty) - { - } - } -} diff --git a/NFe.Danfe.Fast.Standard/NFe.Danfe.Fast.Standard.csproj b/NFe.Danfe.Fast.Standard/NFe.Danfe.Fast.Standard.csproj deleted file mode 100644 index 370c5220d..000000000 --- a/NFe.Danfe.Fast.Standard/NFe.Danfe.Fast.Standard.csproj +++ /dev/null @@ -1,43 +0,0 @@ - - - - netstandard2.0 - - - - TRACE;Standard - - - - TRACE;Standard - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - diff --git a/NFe.Danfe.Fast.Standard/NFe/DanfeFrEvento.cs b/NFe.Danfe.Fast.Standard/NFe/DanfeFrEvento.cs deleted file mode 100644 index ebe886b25..000000000 --- a/NFe.Danfe.Fast.Standard/NFe/DanfeFrEvento.cs +++ /dev/null @@ -1,57 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using NFe.Classes; -using NFe.Danfe.Base.NFe; -using Shared.DFe.Danfe.Fast; - -namespace NFe.Danfe.Fast.Standard.NFe -{ - /// - /// Classe responsável pela impressão do DANFE dos eventos da NFe, em Fast Reports - /// - public class DanfeFrEvento : DanfeBase - { - /// - /// Construtor da classe responsável pela impressão do DANFE do evento da NFe, em Fast Reports - /// - /// Objeto do tipo - /// Objeto do tipo - /// Objeto do tipo contendo as definições de impressão - /// Texto do desenvolvedor a ser informado no DANFE - public DanfeFrEvento(nfeProc proc, Classes.Servicos.Consulta.procEventoNFe procEventoNFe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "") - { - Relatorio = DanfeSharedHelper.GenerateDanfeFrEventoReport(proc, procEventoNFe, configuracaoDanfeNfe, Properties.Resources.NFeEvento, desenvolvedor); - } - } -} diff --git a/NFe.Danfe.Fast.Standard/NFe/DanfeFrNfe.cs b/NFe.Danfe.Fast.Standard/NFe/DanfeFrNfe.cs deleted file mode 100644 index e79b37aeb..000000000 --- a/NFe.Danfe.Fast.Standard/NFe/DanfeFrNfe.cs +++ /dev/null @@ -1,80 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using NFe.Classes; -using NFe.Danfe.Base.NFe; -using Shared.DFe.Danfe.Fast; - -namespace NFe.Danfe.Fast.Standard.NFe -{ - /// - /// Classe responsável pela impressão do DANFE da NFe em Fast Reports - /// - public class DanfeFrNfe : DanfeBase - { - /// - /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports - /// - /// Objeto do tipo nfeProc - /// Objeto do tipo contendo as definições de impressão - /// Texto do desenvolvedor a ser informado no DANFE - /// Caminho do arquivo frx - public DanfeFrNfe(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") - { - byte[] retrato = null; - if (string.IsNullOrWhiteSpace(arquivoRelatorio)) - { - try - { - retrato = Properties.Resources.NFeRetrato; - } - catch (System.Exception ex) - { - throw new System.Exception("Não foi possivel o carregamento do Resource NFeRetrato, utilize o parametro arquivoRelatorio e passe o caminho manualmente.", ex); - } - } - this.Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, retrato, desenvolvedor, arquivoRelatorio); - } - - /// - /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports. - /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe - /// - /// Objeto do tipo - /// Objeto do tipo contendo as definições de impressão - /// Texto do desenvolvedor a ser informado no DANFE - public DanfeFrNfe(Classes.NFe nfe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor) : this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfe, desenvolvedor) - { - } - } -} \ No newline at end of file diff --git a/NFe.Danfe.Fast.Standard/NFe/NFeEvento.frx b/NFe.Danfe.Fast.Standard/NFe/NFeEvento.frx deleted file mode 100644 index c4fc44d24..000000000 --- a/NFe.Danfe.Fast.Standard/NFe/NFeEvento.frx +++ /dev/null @@ -1,925 +0,0 @@ - - - using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Data; -using FastReport; -using FastReport.Data; -using FastReport.Dialog; -using FastReport.Barcode; -using FastReport.Table; -using FastReport.Utils; -using NFe.Classes; -using NFe.Utils; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; -using NFe.Classes.Servicos.Tipos; - -namespace FastReport -{ - public class ReportScript - { - private string FormatarCampo(string valor, char format) - { - switch (format) - { - case 'c': //CEP - if (valor.Length == 8) - valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); - break; - case 'f': //Telefone /celular - if (valor.Length == 10) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); - else if (valor.Length == 11) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); - break; - case 'd': //cpf / cnpj - if (valor.Length == 11) - valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); - else if (valor.Length == 14) - valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); - break; - case 'p': - if (valor.Length == 7) - valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); - break; - } - return valor; - } - - - private void Memo47_BeforePrint(object sender, EventArgs e) - { - Memo47.Text = Report.GetColumnValue("NFe.NFe.infNFe.ide.serie").ToString().PadLeft(3,'0'); - Memo48.Text = Report.GetColumnValue("NFe.NFe.infNFe.ide.nNF").ToString().PadLeft(9,'0'); - Memo49.Text = DateTime.Parse(Report. - GetColumnValue("NFe.NFe.infNFe.ide.dhEmi").ToString()).Date.Month.ToString().PadLeft(2, '0')+"/"+ - DateTime.Parse(Report. - GetColumnValue("NFe.NFe.infNFe.ide.dhEmi").ToString()).Date.Year.ToString().PadLeft(4, '0'); - try { - Memo53.Text = DateTime.Parse(Report.GetColumnValue("procEventoNFe.evento.infEvento.dhEvento").ToString()).ToString(); - } catch{ - Memo53.Text=""; - } - if (Report.GetColumnValue("procEventoNFe.evento.infEvento.tpEvento").ToString() == "110111") - { - Memo40.Text="CANCELAMENTO DE NF-e"; - BandCondicoesUso.Visible=false; - } - else - { - Memo40.Text="CARTA DE CORREÇÃO ELETRÔNICA"; - BandCondicoesUso.Visible=true; - } - try { - Memo60.Text = DateTime.Parse(Report.GetColumnValue("procEventoNFe.retEvento.infEvento.dhRegEvento").ToString()).ToString(); - } catch{ - Memo60.Text=""; - } - Memo68.Text = FormatarCampo(((Nullable<Int64>)Report.GetColumnValue("NFe.NFe.infNFe.emit.enderEmit.fone")).ToString(),'f'); - Memo77.Text = FormatarCampo(((Nullable<Int64>)Report.GetColumnValue("NFe.NFe.infNFe.dest.enderDest.fone")).ToString(),'f'); - Memo52.Text = ((TipoAmbiente)Report.GetColumnValue("procEventoNFe.evento.infEvento.tpAmb")).TpAmbParaString(); - } - - private void memJustificativaCorrecao_BeforePrint(object sender, EventArgs e) - { -// if (Report.GetColumnValue("procEventoNFe.evento.infEvento.tpEvento").ToString() == "110111") -// -// TITULO_CONTEXTO := 'JUSTIFICATIVA'; -// TEXTO_EVENTO := <Eventos."xJust">; -// end -// else -// begin -// TITULO_CONTEXTO := 'CORREÇÃO'; -// TEXTO_EVENTO := <Eventos."xCorrecao">; -// end; - } - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NFe.Danfe.Fast.Standard/NFe/NFeRetrato.frx b/NFe.Danfe.Fast.Standard/NFe/NFeRetrato.frx deleted file mode 100644 index 710e64cd7..000000000 --- a/NFe.Danfe.Fast.Standard/NFe/NFeRetrato.frx +++ /dev/null @@ -1,1411 +0,0 @@ - - - using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text.RegularExpressions; -using FastReport; -using FastReport.Data; -using FastReport.Dialog; -using FastReport.Barcode; -using FastReport.Table; -using FastReport.Utils; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using NFe.Classes.Informacoes.Detalhe.Tributacao; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; -using NFe.Utils.Tributacao.Estadual; -using NFe.Classes.Informacoes.Transporte; -using NFe.Classes.Protocolo; -using NFe.Classes.Informacoes.Emitente; -using NFe.Utils; -using NFe.Danfe.Base.NFe; - -namespace FastReport -{ - public class ReportScript - { - - private void Emitente_BeforePrint(object sender, EventArgs e) - { - var chave = Substring(((String)Report.GetColumnValue("NFe.NFe.infNFe.Id")), 3); - TextChaveAcesso.Text = Regex.Replace(chave, ".{4}", "$0 "); - BarcodeChave.Text = chave; - poEmitLogo.Image = ObterLogo(); - - var contigenciaId = (string)Report.GetParameterValue("ContingenciaID"); - BarCodeContigencia.Visible = !string.IsNullOrEmpty(contigenciaId); - if(BarCodeContigencia.Visible) BarCodeContigencia.Text = contigenciaId; - DadosISSQN.Visible = !(bool)Report.GetParameterValue("ImprimirISSQN"); - prodRow.AutoSize = (bool)Report.GetParameterValue("DuasLinhas"); - if(prodRow.AutoSize == false) prodNomeCell.WordWrap = false; - - //Trato o campo de Frete - switch((int)((ModalidadeFrete)Report.GetColumnValue("NFe.NFe.infNFe.transp.modFrete"))) - { - case 0: Memo92.Text = "0 - Emit/Remet"; break; - case 1: Memo92.Text = "1 - Destinatário"; break; - case 2: Memo92.Text = "2 - Terceiros"; break; - case 3: Memo92.Text = "3 - Prop Remetente"; break; - case 4: Memo92.Text = "4 - Prop Destinatário"; break; - case 9: Memo92.Text = "9 - Sem Frete"; break; - } - - var vol = Report.GetDataSource("NFe.NFe.infNFe.transp.vol"); - vol.Init(); - int qtdeVol = 0; - - int volumes = 0; - decimal pesoL = 0; - decimal pesoB = 0; - while (vol.HasMoreRows) - { - Memo106.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.esp")); - Memo108.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.marca")); - Memo110.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.nVol")); - - volumes += ((Nullable<int>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.qVol")) ?? 0; - pesoL += ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.pesoL")) ?? 0M; - pesoB += ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.pesoB")) ?? 0M; - qtdeVol++; - vol.Next(); - } - - if (qtdeVol >= 1) - { - if (qtdeVol > 1) - { - Memo106.Text = "VOLUMES"; - Memo108.Text = ""; - Memo110.Text = ""; - } - - Memo104.Text = volumes.ToString(); - Memo112.Text = FormatNumber(pesoB,3) + " KG"; - Memo114.Text = FormatNumber(pesoL,3) + " KG"; - } - - if(Engine.FinalPass) - { - var vBC = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vBC")) ?? 0; - var vISS = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vISS")) ?? 0; - var vServ = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vServ")) ?? 0; - - DadosISSQN.Visible = !(vBC == 0 && vISS == 0 && vServ == 0); - - var retiradaCPF = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.CPF"); - var retiradaCNPJ = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.CNPJ"); - var retiradaEndereco = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xLgr"); - var retiradaNro = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.nro"); - var retiradaBairro = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xBairro"); - var retiradaMunicipio = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xMun"); - var retiradaUf = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.UF"); - - LocalRetirada.Visible = !string.IsNullOrEmpty(retiradaCPF) || !string.IsNullOrEmpty(retiradaCNPJ) || - !string.IsNullOrEmpty(retiradaEndereco) || !string.IsNullOrEmpty(retiradaNro) || - !string.IsNullOrEmpty(retiradaBairro) || !string.IsNullOrEmpty(retiradaMunicipio) || - !string.IsNullOrEmpty(retiradaUf); - - var entregaCPF = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.CPF"); - var entregaCNPJ = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.CNPJ"); - var entregaEndereco = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xLgr"); - var entregaNro = (string)Report.GetColumnValue("[NFe.NFe.infNFe.entrega.nro]"); - var entregaBairro = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xBairro"); - var entregaMunicipio = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xMun"); - var entregaUf = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.UF"); - - LocalEntrega.Visible = !string.IsNullOrEmpty(entregaCPF) || !string.IsNullOrEmpty(entregaCNPJ) || - !string.IsNullOrEmpty(entregaEndereco) || !string.IsNullOrEmpty(entregaNro) || - !string.IsNullOrEmpty(entregaBairro) || !string.IsNullOrEmpty(entregaMunicipio) || - !string.IsNullOrEmpty(entregaUf); - - - var indPagto = (IndicadorPagamento?)Report.GetColumnValue("NFe.NFe.infNFe.ide.indPag"); - var fatnFat = (string)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.nFat"); - var fatvOrig = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vOrig")) ?? 0M; - var fatvDesc = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vDesc")) ?? 0M; - var fatvLiq = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vLiq")) ?? 0M; - - Fatura.Visible = (bool)Report.GetParameterValue("ExibeCampoFatura"); - MemoFatura.Visible = !string.IsNullOrEmpty(fatnFat); - if(MemoFatura.Visible) MemoFatura.Text = string.Format("Número: {0} - Valor Original: {1:c} - Valor Desconto: {2:c} - ValorLíquido: {3:c}", - fatnFat, fatvOrig, fatvDesc, fatvLiq); - - switch(indPagto) - { - case IndicadorPagamento.ipVista: - Memo146.Text = "PAGAMENTO À VISTA"; - break; - - case IndicadorPagamento.ipPrazo: - Memo146.Text = "PAGAMENTO A PRAZO"; - break; - - case IndicadorPagamento.ipOutras: - Memo146.Text = "OUTROS"; - break; - } - } - - string infAdicionais = (string)Report.GetColumnValue("NFe.NFe.infNFe.infAdic.infCpl") + Environment.NewLine + (string)Report.GetColumnValue("NFe.NFe.infNFe.infAdic.infAdFisco"); - - infAdicionais = infAdicionais.Replace("[","[\"[").Replace("]","]\"]"); - - if((bool)Report.GetParameterValue("QuebrarLinhasObservacao")) - { - infAdicionais = infAdicionais.Replace(";", Environment.NewLine); - } - - TextInfAdicionais.Text = infAdicionais; - //memContInfAdicionais.Text = string.Empty; - - //string[] lines = infAdicionais.Split(new string[]{ Environment.NewLine, "\n" }, StringSplitOptions.None); - //pgContDadosAdicionais.Visible = lines.Length > LINHAS_DADOS_ADICIONAIS; - - //if(pgContDadosAdicionais.Visible) - //{ - // TextInfAdicionais.Text = string.Join(Environment.NewLine, lines.Take(LINHAS_DADOS_ADICIONAIS-1).ToArray()); - // memContInfAdicionais.Text = string.Join(Environment.NewLine, lines.Skip(LINHAS_DADOS_ADICIONAIS-1).ToArray()); - //} - } - - private void DadosProdutos_BeforePrint(object sender, EventArgs e) - { - var icmsBasico = (ICMSBasico)Report.GetColumnValue("NFe.NFe.infNFe.det.imposto.ICMS.TipoICMS"); - var ipiBasico = (IPIBasico)Report.GetColumnValue("NFe.NFe.infNFe.det.imposto.IPI.TipoIPI"); - - if (icmsBasico != null) - { - var orig = icmsBasico.GetIcmsOrig(); - if ((CRT)(Report.GetColumnValue("NFe.NFe.infNFe.emit.CRT")) == CRT.SimplesNacional) - { - prodOriginCell.Text = orig.OrigemMercadoriaParaString()+icmsBasico.GetIcmsCsosn().CsosnicmsParaString(); - } - else - { - prodOriginCell.Text = orig.OrigemMercadoriaParaString() + icmsBasico.GetIcmsCst().CsticmsParaString(); - } - - prodBcCell.Text = FormatNumber(icmsBasico.GetIcmsBcValue(), 2); - prodICMSCell.Text = FormatNumber(icmsBasico.GetIcmsValue(), 2); - prodAlqICMSCell.Text = FormatNumber(icmsBasico.GetIcmsPercent(),2); - } - - - if(ipiBasico != null) - { - prodIPICell.Text = FormatNumber(ipiBasico.GetIpiValue(),2); - prodAlqIPICell.Text = FormatNumber(ipiBasico.GetIpiPercent(),2); - } - else - { - prodIPICell.Text = "0,00"; - prodAlqIPICell.Text = "0,00"; - } - - var imprimirUnidQtdeValor = (ImprimirUnidQtdeValor)Report.GetParameterValue("ImprimirUnidQtdeValor"); - var imprimirDescPorc = (bool)Report.GetParameterValue("ImprimirDescPorc"); - var imprimirTotalLiquido = (bool)Report.GetParameterValue("ImprimirTotalLiquido"); - - var uCom = ((String)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.uCom")); - var uTrib = ((String)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.uTrib")); - - var qCom = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.qCom")); - var qTrib = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.qTrib")); - - var vUnCom = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vUnCom")); - var vUnTrib = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vUnTrib")); - - var vProd = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vProd")); - var vDesc = (((Nullable<Decimal>)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vDesc")) ?? 0); - - if(imprimirTotalLiquido) vProd = vProd - vDesc; - if(vDesc > 0 && imprimirDescPorc) - { - vDesc = ((vDesc*100)/(vUnCom*qCom)); - } - - prodValorCell.Text = FormatNumber(vProd,2); - prodDescontoCell.Text = FormatNumber(vDesc, 2); - - var decimaisQuantidadeItem = (int)Report.GetParameterValue("DecimaisQuantidadeItem"); - var decimaisValorUnitario = (int)Report.GetParameterValue("DecimaisValorUnitario"); - - switch(imprimirUnidQtdeValor) - { - case ImprimirUnidQtdeValor.Comercial: - prodUnidadeCell.Text = uCom; - prodQtdCell.Text = FormatNumber(qCom, decimaisQuantidadeItem); - prodValorUnitarioCell.Text = FormatNumber(vUnCom, decimaisValorUnitario); - break; - - case ImprimirUnidQtdeValor.Tributavel: - prodUnidadeCell.Text = uTrib; - prodQtdCell.Text = FormatNumber(qTrib, decimaisQuantidadeItem); - prodValorUnitarioCell.Text = FormatNumber(vUnTrib, decimaisValorUnitario); - break; - - case ImprimirUnidQtdeValor.Ambos: - - var qTribFormatado = FormatNumber(qTrib, decimaisQuantidadeItem); - var qComFormatado = FormatNumber(qCom, decimaisQuantidadeItem); - var vUnComFormatado = FormatNumber(vUnCom, decimaisValorUnitario); - var vUnTribFormatado = FormatNumber(vUnTrib, decimaisValorUnitario); - - prodUnidadeCell.Text = string.Format("{0}{2}{1}", uCom, uTrib, Environment.NewLine); - prodQtdCell.Text = string.Format("{0}{2}{1}", qComFormatado, qTribFormatado, Environment.NewLine); - prodValorUnitarioCell.Text = string.Format("{0}{2}{1}", vUnComFormatado, vUnTribFormatado, Environment.NewLine); - break; - } - } - - private string FormatarCampo(string valor, char format) - { - switch (format) - { - case 'c': //CEP - if (valor.Length == 8) - valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); - break; - - case 'f': //Telefone /celular - if (valor.Length == 10) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); - else if (valor.Length == 11) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); - break; - - case 'd': //cpf / cnpj - if (valor.Length == 11) - valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); - else if (valor.Length == 14) - valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); - break; - - case 'p': - if (valor.Length == 7) - valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); - break; - } - return valor; - } - - public Image ObterLogo() - { - byte[] logomarca = Report.GetParameterValue("Logo") as byte[]; - if(logomarca == null) - return null; - Stream imageStream = new MemoryStream(logomarca); //precisa ficar aberto senao causa erro gdi+ #Zeus Issue 1119, acesse a issue para mais detalhes. - var image = Image.FromStream(imageStream); - return image; - } - - private void Imposto_BeforePrint(object sender, EventArgs e) - { - bool exibirIbpt = ((Boolean?)Report.GetParameterValue("ExibirTotalTributos")) ?? false; - - QuadroVTOTTRIB.Visible = exibirIbpt; - txtIbptValor.Visible = exibirIbpt; - - if (exibirIbpt) - { - //Base ICMS - QuadroVBC.Width = 100f; - Text170.Width = QuadroVBC.Width; - - //Valor ICMS - QuadroVICMS.Width = 100f; - QuadroVICMS.Left = 100f; - Text169.Width = QuadroVICMS.Width; - Text169.Left = QuadroVICMS.Left; - - //Base Calc ICMS ST - QuadroVBCST.Text = "BASE CÁLC. ICMS SUBST."; - QuadroVBCST.Width = 100f; - QuadroVBCST.Left = 200f; - Text168.Width = QuadroVBCST.Width; - Text168.Left = QuadroVBCST.Left; - - //ICMS ST - QuadrovST.Width = 100f; - QuadrovST.Left = 300f; - Text162.Width = QuadrovST.Width; - Text162.Left = QuadrovST.Left; - - //PIS - QuadroPIS.Width = 100f; - QuadroPIS.Left = 400f; - Text160.Width = QuadroPIS.Width; - Text160.Left = QuadroPIS.Left; - - //TOTAL TRIBUTOS - QuadroVTOTTRIB.Width = 100f; - QuadroVTOTTRIB.Left = 500f; - txtIbptValor.Width = QuadroVTOTTRIB.Width; - txtIbptValor.Left = QuadroVTOTTRIB.Left; - - //Total produtos - Memo67.Left = 600f; - Memo67.Width = 144.5f; - Text159.Width = Memo67.Width; - Text159.Left = Memo67.Left; - - //Frete - Memo77.Left = 0f; - Memo77.Width = 100f; - Text167.Width = Memo77.Width; - Text167.Left = Memo77.Left; - - //Seguro - Memo75.Left = 100f; - Memo75.Width = 100f; - Text166.Width = Memo75.Width; - Text166.Left = Memo75.Left; - - //Desconto - Memo73.Left = 200f; - Memo73.Width = 100f; - Text165.Width = Memo73.Width; - Text165.Left = Memo73.Left; - - //Despesas - Memo71.Left = 300f; - Memo71.Width = 100f; - Text164.Width = Memo71.Width; - Text164.Left = Memo71.Left; - - //IPI - Memo69.Left = 400f; - Memo69.Width = 100f; - Text163.Width = Memo69.Width; - Text163.Left = Memo69.Left; - - //Valor Cofins - Text158.Left = 500f; - Text158.Width = 100f; - Text161.Width = Text158.Width; - Text161.Left = Text158.Left; - - //Total Contábil - Memo79.Left = 600f; - Memo79.Width = 144.5f; - Memo80.Width = Memo79.Width; - Memo80.Left = Memo79.Left; - } - } - - private int contadorDuplicatas =0; - private float _TamanhoDuplicatas = 0; - - private void DuplicatasHeader_BeforePrint(object sender, EventArgs e) - { - contadorDuplicatas = 0; - _TamanhoDuplicatas = 0; - } - - private void Duplicatas_BeforePrint(object sender, EventArgs e) - { - contadorDuplicatas++; - if (contadorDuplicatas == 6) - { - _TamanhoDuplicatas += Duplicatas.Height; - contadorDuplicatas = 0; - } - } - - private float _Tamanho = 0; - private float _TamanhoItens = 0; - - private void DadosProdutosHeader_BeforePrint(object sender, EventArgs e) - { - _Tamanho = 0; - _TamanhoItens = 0; - - if (Canhoto.Visible) - _Tamanho += Canhoto.Height; - - if (Emitente.Visible) - _Tamanho += Emitente.Height; - - if (Destinatario.Visible) - _Tamanho += Destinatario.Height; - - if (LocalRetirada.Visible) - _Tamanho += LocalRetirada.Height; - - if (LocalEntrega.Visible) - _Tamanho += LocalEntrega.Height; - - if (Fatura.Visible) - _Tamanho += Fatura.Height; - - if (DuplicatasHeader.Visible) - _Tamanho += DuplicatasHeader.Height; - - _Tamanho += _TamanhoDuplicatas; - - if (Imposto.Visible) - _Tamanho += Imposto.Height; - - if (TransportadorVolumes.Visible) - _Tamanho += TransportadorVolumes.Height; - - if (DadosProdutosHeader.Visible) - _Tamanho += DadosProdutosHeader.Height; - - //_Tamanho += _TamanhoItens; - - if (DadosProdutosFooter.Visible) - _Tamanho += DadosProdutosFooter.Height; - - if (DadosISSQN.Visible) - _Tamanho += DadosISSQN.Height; - - DadosAdicionais.CalcHeight(); - - if (DadosAdicionais.Visible) - _Tamanho += DadosAdicionais.Height; - - if (Rodape.Visible) - _Tamanho += Rodape.Height; - - } - - private void DadosProdutos_AfterPrint(object sender, EventArgs e) - { - DadosProdutos.StartNewPage = false; - - if (Engine.PageNo == 1) - { - _TamanhoItens += DadosProdutos.Height; - - if (_Tamanho + _TamanhoItens >= Engine.PageHeight) - { - DadosProdutos.StartNewPage = true; - _TamanhoItens = 0; - } - } - } - - - - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NFe.Danfe.Fast.Standard/Properties/Resources.Designer.cs b/NFe.Danfe.Fast.Standard/Properties/Resources.Designer.cs deleted file mode 100644 index 6f261a7e8..000000000 --- a/NFe.Danfe.Fast.Standard/Properties/Resources.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -//------------------------------------------------------------------------------ -// -// O código foi gerado por uma ferramenta. -// Versão de Tempo de Execução:4.0.30319.42000 -// -// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se -// o código for gerado novamente. -// -//------------------------------------------------------------------------------ - -namespace NFe.Danfe.Fast.Standard.Properties { - using System; - - - /// - /// Uma classe de recurso de tipo de alta segurança, para pesquisar cadeias de caracteres localizadas etc. - /// - // Essa classe foi gerada automaticamente pela classe StronglyTypedResourceBuilder - // através de uma ferramenta como ResGen ou Visual Studio. - // Para adicionar ou remover um associado, edite o arquivo .ResX e execute ResGen novamente - // com a opção /str, ou recrie o projeto do VS. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Retorna a instância de ResourceManager armazenada em cache usada por essa classe. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NFe.Danfe.Fast.Standard.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Substitui a propriedade CurrentUICulture do thread atual para todas as - /// pesquisas de recursos que usam essa classe de recurso de tipo de alta segurança. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - internal static byte[] NFeEvento { - get { - object obj = ResourceManager.GetObject("NFeEvento", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - internal static byte[] NFeRetrato { - get { - object obj = ResourceManager.GetObject("NFeRetrato", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/NFe.Danfe.Fast.Standard/Properties/Resources.resx b/NFe.Danfe.Fast.Standard/Properties/Resources.resx deleted file mode 100644 index b55b34ee0..000000000 --- a/NFe.Danfe.Fast.Standard/Properties/Resources.resx +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\NFe\NFeEvento.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\NFe\NFeRetrato.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/NFe.Danfe.Fast/DanfeBase.cs b/NFe.Danfe.Fast/DanfeBase.cs deleted file mode 100644 index 67524bc02..000000000 --- a/NFe.Danfe.Fast/DanfeBase.cs +++ /dev/null @@ -1,127 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.IO; -using FastReport; -using FastReport.Export.Pdf; -using NFe.Danfe.Base; - -namespace NFe.Danfe.Fast -{ - public class DanfeBase: IDanfe - { - public Report Relatorio { get; protected set; } - - /// - /// Abre a janela de visualização do DANFE da NFCe - /// - /// Se true, exibe a visualização em Modal. O modo modal está disponível apenas para WinForms - public void Visualizar(bool modal = true) - { - Relatorio.Show(modal); - } - - /// - /// Abre a janela de visualização do design do DANFE da NFCe. - /// Chame esse método se desja fazer alterações no design do DANFE em modo run-time - /// - /// Se true, exibe a visualização em Modal. O modo modal está disponível apenas para WinForms - public void ExibirDesign(bool modal = false) - { - Relatorio.Design(modal); - } - - /// - /// Envia a impressão do DANFE da NFCe diretamente para a impressora - /// - /// Se true exibe o diálogo Imprimindo... - /// Passe a string com o nome da impressora para imprimir diretamente em determinada impressora. Caso contrário, a impressão será feita na impressora que estiver como padrão - public void Imprimir(bool exibirDialogo = true, string impressora = "") - { - Relatorio.PrintSettings.ShowDialog = exibirDialogo; - Relatorio.PrintSettings.Printer = impressora; - Relatorio.Print(); - } - - /// - /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado - /// - /// Caminho/arquivo onde deve ser salvo o PDF do DANFE - public void ExportarPdf(string arquivo) - { - Relatorio.Prepare(); - Relatorio.Export(new PDFExport(), arquivo); - } - - /// - /// Converte o DANFE para PDF e copia para o stream - /// - /// Variável do tipo Stream para output - public void ExportarPdf(Stream outputStream) - { - Relatorio.Prepare(); - Relatorio.Export(new PDFExport(), outputStream); - outputStream.Position = 0; - } - - /// - /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado - /// - /// Caminho/arquivo onde deve ser salvo o PDF do DANFE - /// Instancia do tipo de exportacao do FastReport - public void ExportarPdf(string arquivo, FastReport.Export.ExportBase exportBase) - { - if (exportBase == null) - throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); - - Relatorio.Prepare(); - Relatorio.Export(exportBase, arquivo); - } - - /// - /// Converte o DANFE para PDF e copia para o stream - /// - /// Variável do tipo Stream para output - /// Instancia do tipo de exportacao do FastReport - public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase exportBase) - { - if (exportBase == null) - throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); - - Relatorio.Prepare(); - Relatorio.Export(exportBase, outputStream); - outputStream.Position = 0; - } - } -} \ No newline at end of file diff --git a/NFe.Danfe.Fast/DanfeFastBase.cs b/NFe.Danfe.Fast/DanfeFastBase.cs new file mode 100644 index 000000000..d3462e7a8 --- /dev/null +++ b/NFe.Danfe.Fast/DanfeFastBase.cs @@ -0,0 +1,99 @@ +using FastReport; +using FastReport.Export.Pdf; +using System; +using System.IO; + +namespace NFe.Danfe.Fast +{ + public class DanfeFastBase + { + public Report Relatorio { get; protected set; } + + /// + /// Abre a janela de visualização do DANFE da NFCe + /// + /// Se true, exibe a visualização em Modal. O modo modal está disponível apenas para WinForms + public void Visualizar(bool modal = true) + { + Relatorio.Show(modal); + } + + /// + /// Abre a janela de visualização do design do DANFE da NFCe. + /// Chame esse método se desja fazer alterações no design do DANFE em modo run-time + /// + /// Se true, exibe a visualização em Modal. O modo modal está disponível apenas para WinForms + public void ExibirDesign(bool modal = false) + { + Relatorio.Design(modal); + } + + /// + /// Envia a impressão do DANFE da NFCe diretamente para a impressora + /// + /// Se true exibe o diálogo Imprimindo... + /// Passe a string com o nome da impressora para imprimir diretamente em determinada impressora. Caso contrário, a impressão será feita na impressora que estiver como padrão + public void Imprimir(bool exibirDialogo = true, string impressora = "") + { + Relatorio.PrintSettings.ShowDialog = exibirDialogo; + Relatorio.PrintSettings.Printer = impressora; + Relatorio.Print(); + } + + /// + /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DANFE + public void ExportarPdf(string arquivo) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFExport(), arquivo); + } + /// + /// Converte o DANFE para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + public void ExportarPdf(Stream outputStream) + { + try + { + Relatorio.Prepare(); + Relatorio.Export(new PDFExport(), outputStream); + outputStream.Position = 0; + } + catch (Exception ex) + { + throw ex; + } + } + + /// + /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DANFE + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(string arquivo, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, arquivo); + } + + /// + /// Converte o DANFE para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, outputStream); + outputStream.Position = 0; + } + } +} diff --git a/NFe.Danfe.Fast/NFCe/DanfeFrNfce.cs b/NFe.Danfe.Fast/NFCe/DanfeFrNfce.cs index bc438dfce..22c32572d 100644 --- a/NFe.Danfe.Fast/NFCe/DanfeFrNfce.cs +++ b/NFe.Danfe.Fast/NFCe/DanfeFrNfce.cs @@ -31,16 +31,17 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ +using DFe.Utils; using NFe.Classes; using NFe.Danfe.Base.NFCe; -using Shared.DFe.Danfe.Fast; +using Shared.DFe.Danfe; namespace NFe.Danfe.Fast.NFCe { /// /// Classe responsável pela impressão do DANFE da NFCe em Fast Reports /// - public class DanfeFrNfce : DanfeBase + public class DanfeFrNfce : DanfeFastBase { /// /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports @@ -53,7 +54,14 @@ public class DanfeFrNfce : DanfeBase /// Texto para ser impresso no final do documento public DanfeFrNfce(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, string arquivoRelatorio = "", string textoRodape = "") { - Relatorio = DanfeSharedHelper.GenerateDanfeNfceReport(proc, configuracaoDanfeNfce, cIdToken, csc, Properties.Resources.NFCe, arquivoRelatorio); + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFCe\NFCe.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeNfceReport(proc, configuracaoDanfeNfce, cIdToken, csc, frx, arquivoRelatorio, textoRodape); } /// diff --git a/NFe.Danfe.Fast/NFCe/NFCe.frx b/NFe.Danfe.Fast/NFCe/NFCe.frx deleted file mode 100644 index b2a4c11f7..000000000 --- a/NFe.Danfe.Fast/NFCe/NFCe.frx +++ /dev/null @@ -1,1044 +0,0 @@ - - - using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Data; -using FastReport; -using FastReport.Data; -using FastReport.Dialog; -using FastReport.Barcode; -using FastReport.Table; -using FastReport.Utils; -using NFe.Classes.Informacoes.Pagamento; -using NFe.Utils; -using DFe.Utils; -using NFe.Classes.Informacoes.Destinatario; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using DFe.Classes.Flags; -using NFe.Danfe.Base; -using DFe.Classes.Entidades; -using NFe.Classes.Protocolo; - - -namespace FastReport -{ - public class ReportScript - { - - private void txtDescPagto_BeforePrint(object sender, EventArgs e) - { - if(Report.GetColumnValue("NFCe.NFe.infNFe.pag.tPag") != null) - txtDescPagto.Text = ((FormaPagamento)Report.GetColumnValue("NFCe.NFe.infNFe.pag.tPag")).Descricao(); - } - - private void txtDescDetPagto_BeforePrint(object sender, EventArgs e) - { - if(Report.GetDataSource("NFCe.NFe.infNFe.pag.detPag").RowCount != 0 && Report.GetColumnValue("NFCe.NFe.infNFe.pag.detPag.tPag") != null) - txtDescDetPagto.Text = ((FormaPagamento)Report.GetColumnValue("NFCe.NFe.infNFe.pag.detPag.tPag")).Descricao(); - } - - private void txtEmitCnpj_BeforePrint(object sender, EventArgs e) - { - var cnpj = (string)Report.GetColumnValue("NFCe.NFe.infNFe.emit.CNPJ"); - if (!string.IsNullOrEmpty(cnpj)) - txtEmitCnpj.Text = "CNPJ: " + String.Format(@"{0:00\.000\.000\/0000\-00}", long.Parse(cnpj)); - } - - private void memChaveNfe_BeforePrint(object sender, EventArgs e) - { - var chave = Substring( ((String)Report.GetColumnValue("NFCe.NFe.infNFe.Id")), 3); - if (!string.IsNullOrEmpty(chave) & chave.Length == 44) - { - var chaveFormatada = ""; - for (int i = 0; i < chave.Length; i += 4) - chaveFormatada = chaveFormatada + chave.Substring(i, 4) + " "; - memChaveNfe.Text = chaveFormatada; - } - } - - private void Destinatario_BeforePrint(object sender, EventArgs e) - { - TrataCamposDestinatario(); - dbDestinatario.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Abaixo); - } - - private void TrataCamposDestinatario(){ - if ( ((dest)Report.GetColumnValue("NFCe.NFe.infNFe.dest")) == null ) //Destinatário não informado - { - txtConsumidor.Text = "CONSUMIDOR NÃO IDENTIFICADO"; - txtConsumidor2.Text = txtConsumidor.Text; - txtDestEndereco.Text = ""; - txtDestEndereco2.Text = txtDestEndereco.Text; - txtDestNome.Text = ""; - txtDestNome2.Text = txtDestNome.Text; - } - else - { - txtDestNome.Text = ObterDocumentoDest() + ((String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.xNome")); - txtDestNome2.Text = txtDestNome.Text; - } - //Endereço do destinatário é opcional para NFCe - txtDestEndereco.Visible = ((enderDest)Report.GetColumnValue("NFCe.NFe.infNFe.dest.enderDest")) != null; - txtDestEndereco2.Visible = txtDestEndereco.Visible; - } - - private string ObterDocumentoDest(){ - var documentoDest = ""; - var cnpj = (String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.CNPJ"); - var cpf = (String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.CPF"); - var idEstrangeiro = (String)Report.GetColumnValue("NFCe.NFe.infNFe.dest.idEstrangeiro"); - if ( !String.IsNullOrEmpty(cnpj)) documentoDest = "CNPJ: " + String.Format(@"{0:00\.000\.000\/0000\-00}", long.Parse(cnpj)) + " "; - if ( !String.IsNullOrEmpty(cpf)) documentoDest = "CPF: " + String.Format(@"{0:000\.000\.000\-00}", long.Parse(cpf)) + " "; - if ( !String.IsNullOrEmpty(idEstrangeiro)) documentoDest = "Id. Estrangeiro: " + idEstrangeiro + " "; - return documentoDest; - } - - private void dbProdutosUmaLinha_BeforePrint(object sender, EventArgs e) - { - //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" - if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) - dbProdutosUmaLinha.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.UmaLinha; - else - dbProdutosUmaLinha.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.UmaLinha; - - //Mostrar/Ocultar desconto concedido no item - txtProdutoUmaLinhaValorUnit.Text = "[NFCe.NFe.infNFe.det.prod.vUnCom]"; - txtProdutoUmaLinhaValorTotal.Text = "[NFCe.NFe.infNFe.det.prod.vProd]"; - dbProdutosUmaLinha.Border.Lines = BorderLines.Bottom; - var imprimeDesconto = dbProdutosUmaLinha.Visible & ((Boolean)Report.GetParameterValue("NfceImprimeDescontoItem")) & - ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.det.prod.vDesc")) > 0; - cbDescontoItemUmaLinha.Visible = imprimeDesconto; - if (imprimeDesconto) - dbProdutosUmaLinha.Border.Lines = BorderLines.None; - } - - private void ghbProdutosDuasLinhas_BeforePrint(object sender, EventArgs e) - { - //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" - if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) - ghbProdutosDuasLinhas.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.DuasLinhas; - else - ghbProdutosDuasLinhas.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.DuasLinhas; - } - - private void dbProdutosDuasLinhas_BeforePrint(object sender, EventArgs e) - { - //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" - if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) - dbProdutosDuasLinhas.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.DuasLinhas; - else - dbProdutosDuasLinhas.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.DuasLinhas; - - //Mostrar/Ocultar desconto concedido no item - txtProdutoDuasLinhasValorUnit.Text = "[NFCe.NFe.infNFe.det.prod.vUnCom]"; - txtProdutoDuasLinhasValorTotal.Text = "[NFCe.NFe.infNFe.det.prod.vProd]"; - dbProdutosDuasLinhas.Border.Lines = BorderLines.Bottom; - var imprimeDesconto = dbProdutosDuasLinhas.Visible & ((Boolean)Report.GetParameterValue("NfceImprimeDescontoItem")) & - ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.det.prod.vDesc")) > 0; - cbDescontoItemDuasLinhas.Visible = imprimeDesconto; - if (imprimeDesconto) - dbProdutosDuasLinhas.Border.Lines = BorderLines.None; - //Se possuir desconto, e estiver configurado para não exibi-lo, exibe os valores líquidos nos campos abaixo: - if (((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.det.prod.vDesc")) > 0 & !imprimeDesconto) - { - txtProdutoDuasLinhasValorUnit.Text = "[([NFCe.NFe.infNFe.det.prod.vProd] - [NFCe.NFe.infNFe.det.prod.vDesc]) / [NFCe.NFe.infNFe.det.prod.qCom]]"; - txtProdutoDuasLinhasValorTotal.Text = "[[NFCe.NFe.infNFe.det.prod.vProd] - [NFCe.NFe.infNFe.det.prod.vDesc]]"; - } - } - - - private void ghbProdutosUmaLinha_BeforePrint(object sender, EventArgs e) - { - //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8. "No caso de emissão em contingência, é obrigatória a impressão do Detalhe da Venda e do DANFE NFC-e" - if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) == TipoEmissao.teNormal ) - ghbProdutosUmaLinha.Visible = ((NfceDetalheVendaNormal)((Int32)Report.GetParameterValue("NfceDetalheVendaNormal"))) == NfceDetalheVendaNormal.UmaLinha; - else - ghbProdutosUmaLinha.Visible = ((NfceDetalheVendaContigencia)((Int32)Report.GetParameterValue("NfceDetalheVendaContigencia"))) == NfceDetalheVendaContigencia.UmaLinha; - } - - - private void rtbTitulo_BeforePrint(object sender, EventArgs e) - { - rtbTitulo.Visible = (poEmitLogo.Image != null); - } - - - private void memMsgFiscal_BeforePrint(object sender, EventArgs e) - { - //Conforme Manual de Padrões Padrões Técnicos do DANFE-NFC-e e QR Code, página 8 - string msgHomologacao = ""; - string msgContigencia = ""; - if ( ((TipoAmbiente)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpAmb")) == TipoAmbiente.Homologacao ) - msgHomologacao = "EMITIDA EM AMBIENTE DE HOMOLOGAÇÃO – SEM VALOR FISCAL" + Environment.NewLine; - if ( ((TipoEmissao)Report.GetColumnValue("NFCe.NFe.infNFe.ide.tpEmis")) != TipoEmissao.teNormal ) - msgContigencia = "EMITIDA EM CONTINGÊNCIA" + Environment.NewLine; - - memMsgFiscal.Text = msgHomologacao + msgContigencia + memMsgFiscal.Text; - } - - - private void txtObs_BeforePrint(object sender, EventArgs e) - { - txtObs.Text = ((String)Report.GetColumnValue("NFCe.NFe.infNFe.infAdic.infCpl")).Replace(";", Environment.NewLine); - } - - private void PgNfce_StartPage(object sender, EventArgs e) - { - phbCancelado.Visible = ((Boolean)Report.GetParameterValue("NfceCancelado")); - - if (!Engine.FinalPass) - return; - if ( (NfceModoImpressao) ((Int32)Report.GetParameterValue("NfceModoImpressao")) != NfceModoImpressao.UnicaPagina) - return; - - PgNfce.PaperHeight = - (rtbTituloHeight + - phbEmitenteHeight + - ((Boolean)Report.GetParameterValue("NfceCancelado") ? phbCancelado.Height : 0)+ - ghbProdutosUmaLinhaHeight + - dbProdutosUmaLinhaHeight + - ghbProdutosDuasLinhasHeight + - dbProdutosDuasLinhasHeight + - gfbProdutosHeight + - dbPagamentoHeight + - dbDetPagamentoHeight + - dbTributosHeight + - dbObservacaoHeight + - dbInfoFiscalHeight + - dbNumeroSerieDhHeight + - dbConsultaHeight + - dbDestinatarioHeight + - dbQrCodeNormalHeight + - dbQrCodeLateralHeight + - dbProtocoloHeigth - ) / - Units.Millimeters + PgNfce.TopMargin + PgNfce.BottomMargin; - - } - - float dbProdutosUmaLinhaHeight; - private void dbProdutosUmaLinha_AfterPrint(object sender, EventArgs e) - { - dbProdutosUmaLinhaHeight += (dbProdutosUmaLinha.Visible ? dbProdutosUmaLinha.Height : 0) + (cbDescontoItemUmaLinha.Visible ? cbDescontoItemUmaLinha.Height : 0); - } - - float dbProdutosDuasLinhasHeight; - private void dbProdutosDuasLinhas_AfterPrint(object sender, EventArgs e) - { - dbProdutosDuasLinhasHeight += (dbProdutosDuasLinhas.Visible ?dbProdutosDuasLinhas.Height : 0) + (cbDescontoItemDuasLinhas.Visible ? cbDescontoItemDuasLinhas.Height : 0); - } - - float dbInfoFiscalHeight; - private void dbInfoFiscal_AfterPrint(object sender, EventArgs e) - { - dbInfoFiscalHeight = (dbInfoFiscal.Visible ? dbInfoFiscal.Height : 0); - } - - float dbNumeroSerieDhHeight; - private void dbNumeroSerieDh_AfterPrint(object sender, EventArgs e) - { - dbNumeroSerieDhHeight = (dbNumeroSerieDh.Visible ? dbNumeroSerieDh.Height : 0); - } - - float dbConsultaHeight; - private void dbConsulta_AfterPrint(object sender, EventArgs e) - { - dbConsultaHeight = (dbConsulta.Visible ? dbConsulta.Height : 0); - } - - float rtbTituloHeight; - private void rtbTitulo_AfterPrint(object sender, EventArgs e) - { - rtbTituloHeight = (rtbTitulo.Visible ? rtbTitulo.Height : 0); - } - - float phbEmitenteHeight; - private void phbEmitente_AfterPrint(object sender, EventArgs e) - { - phbEmitenteHeight = (phbEmitente.Visible ? phbEmitente.Height : 0); - } - - float ghbProdutosUmaLinhaHeight; - private void ghbProdutosUmaLinha_AfterPrint(object sender, EventArgs e) - { - ghbProdutosUmaLinhaHeight = (ghbProdutosUmaLinha.Visible ? ghbProdutosUmaLinha.Height : 0); - } - - float ghbProdutosDuasLinhasHeight; - private void ghbProdutosDuasLinhas_AfterPrint(object sender, EventArgs e) - { - ghbProdutosDuasLinhasHeight = (ghbProdutosDuasLinhas.Visible ? ghbProdutosDuasLinhas.Height : 0); - } - - float gfbProdutosHeight; - private void gfbProdutos_AfterPrint(object sender, EventArgs e) - { - gfbProdutosHeight = (gfbProdutos.Visible ? gfbProdutos.Height : 0); - } - - float dbPagamentoHeight; - private void dbPagamento_AfterPrint(object sender, EventArgs e) - { - dbPagamentoHeight = (dbPagamento.Visible ? dbPagamento.Height : 0); - } - - float dbDetPagamentoHeight; - private void dbDetPagamento_AfterPrint(object sender, EventArgs e) - { - dbDetPagamentoHeight = (dbDetPagamento.Visible ? dbDetPagamento.Height : 0); - } - - float dbTributosHeight; - private void dbTributos_AfterPrint(object sender, EventArgs e) - { - dbTributosHeight = (dbTributos.Visible ? dbTributos.Height : 0); - } - - float dbObservacaoHeight; - private void dbObservacao_AfterPrint(object sender, EventArgs e) - { - dbObservacaoHeight = (dbObservacao.Visible ? dbObservacao.Height : 0); - } - - float dbDestinatarioHeight; - private void dbDestinatario_AfterPrint(object sender, EventArgs e) - { - dbDestinatarioHeight = (dbDestinatario.Visible ? dbDestinatario.Height : 0); - } - - float dbQrCodeNormalHeight; - private void dbQrCode_AfterPrint(object sender, EventArgs e) - { - dbQrCodeNormalHeight = (dbQrCodeNormal.Visible ? dbQrCodeNormal.Height : 0); - } - - private void cbDesconto_BeforePrint(object sender, EventArgs e) - { - cbDesconto.Visible = ((Decimal)Report.GetColumnValue("NFCe.NFe.infNFe.total.ICMSTot.vDesc")) > 0; - } - - private void txtValorTotal_BeforePrint(object sender, EventArgs e) - { - var vServ = ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.total.ISSQNtot.vServ")) == null ? 0 : ((Nullable<Decimal>)Report.GetColumnValue("NFCe.NFe.infNFe.total.ISSQNtot.vServ")); - txtValorTotal.Text = (((Decimal)Report.GetColumnValue("NFCe.NFe.infNFe.total.ICMSTot.vProd")) + vServ).ToString(); - } - - private void dbPagamento_BeforePrint(object sender, EventArgs e) - { - dbPagamento.Visible = Report.GetColumnValue("NFCe.NFe.infNFe.pag.tPag") != null; - } - - private void dbDetPagamento_BeforePrint(object sender, EventArgs e) - { - dbDetPagamento.Visible = Report.GetDataSource("NFCe.NFe.infNFe.pag.detPag").RowCount != 0 && Report.GetColumnValue("NFCe.NFe.infNFe.pag.detPag.tPag") != null; - } - - private void dbTroco_BeforePrint(object sender, EventArgs e) - { - dbTroco.Visible = Report.GetColumnValue("NFCe.NFe.infNFe.pag.vTroco") != null; - } - - - private void dbQrCodeLateral_BeforePrint(object sender, EventArgs e) - { - TrataCamposDestinatario(); - dbQrCodeLateral.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Lateral); - } - - float dbQrCodeLateralHeight; - private void dbQrCodeLateral_AfterPrint(object sender, EventArgs e) - { - dbQrCodeLateralHeight = (dbQrCodeLateral.Visible ? dbQrCodeLateral.Height : 0); - } - - float dbProtocoloHeigth; - private void dbProtocolo_AfterPrint(object sender, EventArgs e) - { - dbProtocoloHeigth = (dbProtocolo.Visible ? dbProtocolo.Height : 0); - } - - private void dbQrCodeNormal_BeforePrint(object sender, EventArgs e) - { - dbQrCodeNormal.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Abaixo); - } - - private void dbProtocolo_BeforePrint(object sender, EventArgs e) - { - dbProtocolo.Visible = ((protNFe)Report.GetColumnValue("NFCe.protNFe")) != null; - } - - private void dbNumeroSerieDh_BeforePrint(object sender, EventArgs e) - { - dbNumeroSerieDh.Visible = ((NfceLayoutQrCode) Report.GetParameterValue("NfceLayoutQrCode") == NfceLayoutQrCode.Abaixo); - } - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj b/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj index 8080aea93..c63d24187 100644 --- a/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj +++ b/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj @@ -1,110 +1,22 @@ - - - - - Debug - AnyCPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510} - Library - Properties - NFe.Danfe.Fast - NFe.Danfe.Fast - v4.5 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - False - Dlls\FastReport.dll - - - False - Dlls\FastReport.Bars.dll - - - False - Dlls\FastReport.Editor.dll - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {29ca1da2-440d-484b-951a-cf1b2eb27984} - NFe.Classes - - - {80c6093c-47d5-41a1-9fa0-e218e82fa666} - NFe.Danfe.Base - - - {e35e7c4a-5690-4979-8b43-002975b48eaa} - NFe.Utils - - - - - - - - - - - \ No newline at end of file + + + + net462 + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj.DotSettings b/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj.vspscc b/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/NFe.Danfe.Fast/NFe.Danfe.Fast.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/NFe.Danfe.Fast/NFe/DanfeFrEvento.cs b/NFe.Danfe.Fast/NFe/DanfeFrEvento.cs index 8aa24a29e..2ea010ec1 100644 --- a/NFe.Danfe.Fast/NFe/DanfeFrEvento.cs +++ b/NFe.Danfe.Fast/NFe/DanfeFrEvento.cs @@ -31,16 +31,17 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ +using DFe.Utils; using NFe.Classes; using NFe.Danfe.Base.NFe; -using Shared.DFe.Danfe.Fast; +using Shared.DFe.Danfe; namespace NFe.Danfe.Fast.NFe { /// /// Classe responsável pela impressão do DANFE dos eventos da NFe, em Fast Reports /// - public class DanfeFrEvento : DanfeBase + public class DanfeFrEvento : DanfeFastBase { /// /// Construtor da classe responsável pela impressão do DANFE do evento da NFe, em Fast Reports @@ -49,9 +50,17 @@ public class DanfeFrEvento : DanfeBase /// Objeto do tipo /// Objeto do tipo contendo as definições de impressão /// Texto do desenvolvedor a ser informado no DANFE - public DanfeFrEvento(nfeProc proc, Classes.Servicos.Consulta.procEventoNFe procEventoNFe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "") + /// Caminho e arquivo frx contendo as definições do relatório personalizado + public DanfeFrEvento(nfeProc proc, Classes.Servicos.Consulta.procEventoNFe procEventoNFe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") { - Relatorio = DanfeSharedHelper.GenerateDanfeFrEventoReport(proc, procEventoNFe, configuracaoDanfeNfe, Properties.Resources.NFeEvento, desenvolvedor); + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeEvento.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeFrEventoReport(proc, procEventoNFe, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); } } } diff --git a/NFe.Danfe.Fast/NFe/DanfeFrNfe.cs b/NFe.Danfe.Fast/NFe/DanfeFrNfe.cs index 4e95d19f4..8a1cc56a8 100755 --- a/NFe.Danfe.Fast/NFe/DanfeFrNfe.cs +++ b/NFe.Danfe.Fast/NFe/DanfeFrNfe.cs @@ -31,16 +31,17 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ +using DFe.Utils; using NFe.Classes; using NFe.Danfe.Base.NFe; -using Shared.DFe.Danfe.Fast; +using Shared.DFe.Danfe; namespace NFe.Danfe.Fast.NFe { /// /// Classe responsável pela impressão do DANFE da NFe em Fast Reports /// - public class DanfeFrNfe : DanfeBase + public class DanfeFrNfe : DanfeFastBase { /// /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports @@ -50,7 +51,14 @@ public class DanfeFrNfe : DanfeBase /// Texto do desenvolvedor a ser informado no DANFE public DanfeFrNfe(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") { - Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, Properties.Resources.NFeRetrato, desenvolvedor, arquivoRelatorio); + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeRetrato.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + this.Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); } /// diff --git a/NFe.Danfe.Fast/NFe/DanfeFrSimplificado.cs b/NFe.Danfe.Fast/NFe/DanfeFrSimplificado.cs new file mode 100644 index 000000000..e2cb4c9cf --- /dev/null +++ b/NFe.Danfe.Fast/NFe/DanfeFrSimplificado.cs @@ -0,0 +1,30 @@ +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.Fast.NFe +{ + public class DanfeFrSimplificado : DanfeFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE Simplificada da NFe em Fast Reports + /// + /// Objeto do tipo nfeProc + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + /// Caminho do arquivo frx + public DanfeFrSimplificado(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeSimplificado.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); + } + + } +} diff --git a/NFe.Danfe.Fast/NFe/NFeEvento.frx b/NFe.Danfe.Fast/NFe/NFeEvento.frx deleted file mode 100644 index 1353240cc..000000000 --- a/NFe.Danfe.Fast/NFe/NFeEvento.frx +++ /dev/null @@ -1,927 +0,0 @@ - - - using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Data; -using FastReport; -using FastReport.Data; -using FastReport.Dialog; -using FastReport.Barcode; -using FastReport.Table; -using FastReport.Utils; -using NFe.Classes; -using NFe.Utils; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; -using NFe.Classes.Servicos.Tipos; - -namespace FastReport -{ - public class ReportScript - { - private string FormatarCampo(string valor, char format) - { - switch (format) - { - case 'c': //CEP - if (valor.Length == 8) - valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); - break; - case 'f': //Telefone /celular - if (valor.Length == 10) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); - else if (valor.Length == 11) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); - break; - case 'd': //cpf / cnpj - if (valor.Length == 11) - valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); - else if (valor.Length == 14) - valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); - break; - case 'p': - if (valor.Length == 7) - valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); - break; - } - return valor; - } - - - private void Memo47_BeforePrint(object sender, EventArgs e) - { - Memo47.Text = Report.GetColumnValue("NFe.NFe.infNFe.ide.serie").ToString().PadLeft(3,'0'); - Memo48.Text = Report.GetColumnValue("NFe.NFe.infNFe.ide.nNF").ToString().PadLeft(9,'0'); - try { - var value = (DateTimeOffset)Report.GetColumnValue("NFe.NFe.infNFe.ide.dhEmi"); - Memo49.Text = value.Date.Month.ToString().PadLeft(2, '0')+"/"+value.Date.Year.ToString().PadLeft(4, '0'); - } catch { - throw new Exception("Erro - dhEmi em formato incorreto."); - } - try { - Memo53.Text = DateTime.Parse(Report.GetColumnValue("procEventoNFe.evento.infEvento.dhEvento").ToString()).ToString(); - } catch{ - Memo53.Text=""; - } - if (Report.GetColumnValue("procEventoNFe.evento.infEvento.tpEvento").ToString() == "110111") - { - Memo40.Text="CANCELAMENTO DE NF-e"; - BandCondicoesUso.Visible=false; - } - else - { - Memo40.Text="CARTA DE CORREÇÃO ELETRÔNICA"; - BandCondicoesUso.Visible=true; - } - try { - Memo60.Text = DateTime.Parse(Report.GetColumnValue("procEventoNFe.retEvento.infEvento.dhRegEvento").ToString()).ToString(); - } catch{ - Memo60.Text=""; - } - Memo68.Text = FormatarCampo(((Nullable<Int64>)Report.GetColumnValue("NFe.NFe.infNFe.emit.enderEmit.fone")).ToString(),'f'); - Memo77.Text = FormatarCampo(((Nullable<Int64>)Report.GetColumnValue("NFe.NFe.infNFe.dest.enderDest.fone")).ToString(),'f'); - Memo52.Text = ((TipoAmbiente)Report.GetColumnValue("procEventoNFe.evento.infEvento.tpAmb")).TpAmbParaString(); - } - - private void memJustificativaCorrecao_BeforePrint(object sender, EventArgs e) - { -// if (Report.GetColumnValue("procEventoNFe.evento.infEvento.tpEvento").ToString() == "110111") -// -// TITULO_CONTEXTO := 'JUSTIFICATIVA'; -// TEXTO_EVENTO := <Eventos."xJust">; -// end -// else -// begin -// TITULO_CONTEXTO := 'CORREÇÃO'; -// TEXTO_EVENTO := <Eventos."xCorrecao">; -// end; - } - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NFe.Danfe.Fast/NFe/NFeRetrato.frx b/NFe.Danfe.Fast/NFe/NFeRetrato.frx deleted file mode 100644 index b37ba427f..000000000 --- a/NFe.Danfe.Fast/NFe/NFeRetrato.frx +++ /dev/null @@ -1,1397 +0,0 @@ - - - using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text.RegularExpressions; -using FastReport; -using FastReport.Data; -using FastReport.Dialog; -using FastReport.Barcode; -using FastReport.Table; -using FastReport.Utils; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using NFe.Classes.Informacoes.Detalhe.Tributacao; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; -using NFe.Utils.Tributacao.Estadual; -using NFe.Classes.Informacoes.Transporte; -using NFe.Classes.Protocolo; -using NFe.Classes.Informacoes.Emitente; -using NFe.Utils; -using NFe.Danfe.Base.NFe; - -namespace FastReport -{ - public class ReportScript - { - private void Emitente_BeforePrint(object sender, EventArgs e) - { - var chave = Substring(((String)Report.GetColumnValue("NFe.NFe.infNFe.Id")), 3); - TextChaveAcesso.Text = Regex.Replace(chave, ".{4}", "$0 "); - BarcodeChave.Text = chave; - poEmitLogo.Image = ObterLogo(); - - var contigenciaId = (string)Report.GetParameterValue("ContingenciaID"); - BarCodeContigencia.Visible = !string.IsNullOrEmpty(contigenciaId); - if(BarCodeContigencia.Visible) BarCodeContigencia.Text = contigenciaId; - DadosISSQN.Visible = !(bool)Report.GetParameterValue("ImprimirISSQN"); - prodRow.AutoSize = (bool)Report.GetParameterValue("DuasLinhas"); - if(prodRow.AutoSize == false) prodNomeCell.WordWrap = false; - - //Trato o campo de Frete - switch((int)((ModalidadeFrete)Report.GetColumnValue("NFe.NFe.infNFe.transp.modFrete"))) - { - case 0: Memo92.Text = "0 - Emit/Remet"; break; - case 1: Memo92.Text = "1 - Destinatário"; break; - case 2: Memo92.Text = "2 - Terceiros"; break; - case 3: Memo92.Text = "3 - Prop Remetente"; break; - case 4: Memo92.Text = "4 - Prop Destinatário"; break; - case 9: Memo92.Text = "9 - Sem Frete"; break; - } - - var vol = Report.GetDataSource("NFe.NFe.infNFe.transp.vol"); - vol.Init(); - int qtdeVol = 0; - - int volumes = 0; - decimal pesoL = 0; - decimal pesoB = 0; - while (vol.HasMoreRows) - { - Memo106.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.esp")); - Memo108.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.marca")); - Memo110.Text = ((String)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.nVol")); - - volumes += ((Nullable<int>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.qVol")) ?? 0; - pesoL += ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.pesoL")) ?? 0M; - pesoB += ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.transp.vol.pesoB")) ?? 0M; - qtdeVol++; - vol.Next(); - } - - if (qtdeVol >= 1) - { - if (qtdeVol > 1) - { - Memo106.Text = "VOLUMES"; - Memo108.Text = ""; - Memo110.Text = ""; - } - - Memo104.Text = volumes.ToString(); - Memo112.Text = FormatNumber(pesoB,3) + " KG"; - Memo114.Text = FormatNumber(pesoL,3) + " KG"; - } - - if(Engine.FinalPass) - { - var vBC = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vBC")) ?? 0; - var vISS = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vISS")) ?? 0; - var vServ = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.total.ISSQNtot.vServ")) ?? 0; - - DadosISSQN.Visible = !(vBC == 0 && vISS == 0 && vServ == 0); - - var retiradaCPF = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.CPF"); - var retiradaCNPJ = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.CNPJ"); - var retiradaEndereco = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xLgr"); - var retiradaNro = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.nro"); - var retiradaBairro = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xBairro"); - var retiradaMunicipio = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.xMun"); - var retiradaUf = (string)Report.GetColumnValue("NFe.NFe.infNFe.retirada.UF"); - - LocalRetirada.Visible = !string.IsNullOrEmpty(retiradaCPF) || !string.IsNullOrEmpty(retiradaCNPJ) || - !string.IsNullOrEmpty(retiradaEndereco) || !string.IsNullOrEmpty(retiradaNro) || - !string.IsNullOrEmpty(retiradaBairro) || !string.IsNullOrEmpty(retiradaMunicipio) || - !string.IsNullOrEmpty(retiradaUf); - - var entregaCPF = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.CPF"); - var entregaCNPJ = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.CNPJ"); - var entregaEndereco = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xLgr"); - var entregaNro = (string)Report.GetColumnValue("[NFe.NFe.infNFe.entrega.nro]"); - var entregaBairro = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xBairro"); - var entregaMunicipio = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.xMun"); - var entregaUf = (string)Report.GetColumnValue("NFe.NFe.infNFe.entrega.UF"); - - LocalEntrega.Visible = !string.IsNullOrEmpty(entregaCPF) || !string.IsNullOrEmpty(entregaCNPJ) || - !string.IsNullOrEmpty(entregaEndereco) || !string.IsNullOrEmpty(entregaNro) || - !string.IsNullOrEmpty(entregaBairro) || !string.IsNullOrEmpty(entregaMunicipio) || - !string.IsNullOrEmpty(entregaUf); - - - var indPagto = (IndicadorPagamento?)Report.GetColumnValue("NFe.NFe.infNFe.ide.indPag"); - var fatnFat = (string)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.nFat"); - var fatvOrig = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vOrig")) ?? 0M; - var fatvDesc = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vDesc")) ?? 0M; - var fatvLiq = ((Nullable<decimal>)Report.GetColumnValue("NFe.NFe.infNFe.cobr.fat.vLiq")) ?? 0M; - - Fatura.Visible = (bool)Report.GetParameterValue("ExibeCampoFatura"); - MemoFatura.Visible = !string.IsNullOrEmpty(fatnFat); - if(MemoFatura.Visible) MemoFatura.Text = string.Format("Número: {0} - Valor Original: {1:c} - Valor Desconto: {2:c} - ValorLíquido: {3:c}", - fatnFat, fatvOrig, fatvDesc, fatvLiq); - - switch(indPagto) - { - case IndicadorPagamento.ipVista: - Memo146.Text = "PAGAMENTO À VISTA"; - break; - - case IndicadorPagamento.ipPrazo: - Memo146.Text = "PAGAMENTO A PRAZO"; - break; - - case IndicadorPagamento.ipOutras: - Memo146.Text = "OUTROS"; - break; - } - } - - string infAdicionais = (string)Report.GetColumnValue("NFe.NFe.infNFe.infAdic.infCpl") + Environment.NewLine + (string)Report.GetColumnValue("NFe.NFe.infNFe.infAdic.infAdFisco"); - - infAdicionais = infAdicionais.Replace("[","[\"[").Replace("]","]\"]"); - - if((bool)Report.GetParameterValue("QuebrarLinhasObservacao")) - { - infAdicionais = infAdicionais.Replace(";", Environment.NewLine); - } - - TextInfAdicionais.Text = infAdicionais; - //memContInfAdicionais.Text = string.Empty; - - //string[] lines = infAdicionais.Split(new string[]{ Environment.NewLine, "\n" }, StringSplitOptions.None); - //pgContDadosAdicionais.Visible = lines.Length > LINHAS_DADOS_ADICIONAIS; - - //if(pgContDadosAdicionais.Visible) - //{ - // TextInfAdicionais.Text = string.Join(Environment.NewLine, lines.Take(LINHAS_DADOS_ADICIONAIS-1).ToArray()); - // memContInfAdicionais.Text = string.Join(Environment.NewLine, lines.Skip(LINHAS_DADOS_ADICIONAIS-1).ToArray()); - //} - } - - private void DadosProdutos_BeforePrint(object sender, EventArgs e) - { - var icmsBasico = (ICMSBasico)Report.GetColumnValue("NFe.NFe.infNFe.det.imposto.ICMS.TipoICMS"); - var ipiBasico = (IPIBasico)Report.GetColumnValue("NFe.NFe.infNFe.det.imposto.IPI.TipoIPI"); - - if (icmsBasico != null) - { - var orig = icmsBasico.GetIcmsOrig(); - if ((CRT)(Report.GetColumnValue("NFe.NFe.infNFe.emit.CRT")) == CRT.SimplesNacional) - { - prodOriginCell.Text = orig.OrigemMercadoriaParaString()+icmsBasico.GetIcmsCsosn().CsosnicmsParaString(); - } - else - { - prodOriginCell.Text = orig.OrigemMercadoriaParaString() + icmsBasico.GetIcmsCst().CsticmsParaString(); - } - - prodBcCell.Text = FormatNumber(icmsBasico.GetIcmsBcValue(), 2); - prodICMSCell.Text = FormatNumber(icmsBasico.GetIcmsValue(), 2); - prodAlqICMSCell.Text = FormatNumber(icmsBasico.GetIcmsPercent(),2); - } - - - if(ipiBasico != null) - { - prodIPICell.Text = FormatNumber(ipiBasico.GetIpiValue(),2); - prodAlqIPICell.Text = FormatNumber(ipiBasico.GetIpiPercent(),2); - } - else - { - prodIPICell.Text = "0,00"; - prodAlqIPICell.Text = "0,00"; - } - - var imprimirUnidQtdeValor = (ImprimirUnidQtdeValor)Report.GetParameterValue("ImprimirUnidQtdeValor"); - var imprimirDescPorc = (bool)Report.GetParameterValue("ImprimirDescPorc"); - var imprimirTotalLiquido = (bool)Report.GetParameterValue("ImprimirTotalLiquido"); - - var uCom = ((String)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.uCom")); - var uTrib = ((String)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.uTrib")); - - var qCom = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.qCom")); - var qTrib = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.qTrib")); - - var vUnCom = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vUnCom")); - var vUnTrib = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vUnTrib")); - - var vProd = ((Decimal)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vProd")); - var vDesc = (((Nullable<Decimal>)Report.GetColumnValue("NFe.NFe.infNFe.det.prod.vDesc")) ?? 0); - - if(imprimirTotalLiquido) vProd = vProd - vDesc; - if(vDesc > 0 && imprimirDescPorc) - { - vDesc = ((vDesc*100)/(vUnCom*qCom)); - } - - prodValorCell.Text = FormatNumber(vProd,2); - prodDescontoCell.Text = FormatNumber(vDesc, 2); - - var decimaisQuantidadeItem = (int)Report.GetParameterValue("DecimaisQuantidadeItem"); - var decimaisValorUnitario = (int)Report.GetParameterValue("DecimaisValorUnitario"); - - switch(imprimirUnidQtdeValor) - { - case ImprimirUnidQtdeValor.Comercial: - prodUnidadeCell.Text = uCom; - prodQtdCell.Text = FormatNumber(qCom, decimaisQuantidadeItem); - prodValorUnitarioCell.Text = FormatNumber(vUnCom, decimaisValorUnitario); - break; - - case ImprimirUnidQtdeValor.Tributavel: - prodUnidadeCell.Text = uTrib; - prodQtdCell.Text = FormatNumber(qTrib, decimaisQuantidadeItem); - prodValorUnitarioCell.Text = FormatNumber(vUnTrib, decimaisValorUnitario); - break; - - case ImprimirUnidQtdeValor.Ambos: - - var qTribFormatado = FormatNumber(qTrib, decimaisQuantidadeItem); - var qComFormatado = FormatNumber(qCom, decimaisQuantidadeItem); - var vUnComFormatado = FormatNumber(vUnCom, decimaisValorUnitario); - var vUnTribFormatado = FormatNumber(vUnTrib, decimaisValorUnitario); - - prodUnidadeCell.Text = string.Format("{0}{2}{1}", uCom, uTrib, Environment.NewLine); - prodQtdCell.Text = string.Format("{0}{2}{1}", qComFormatado, qTribFormatado, Environment.NewLine); - prodValorUnitarioCell.Text = string.Format("{0}{2}{1}", vUnComFormatado, vUnTribFormatado, Environment.NewLine); - break; - } - } - - private string FormatarCampo(string valor, char format) - { - switch (format) - { - case 'c': //CEP - if (valor.Length == 8) - valor = valor.Substring(0,2) + "." + valor.Substring(2,3) + "-" + valor.Substring(5,3); - break; - - case 'f': //Telefone /celular - if (valor.Length == 10) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,4) + "-" + valor.Substring(6,4); - else if (valor.Length == 11) - valor = "(" +valor.Substring(0,2) + ")" + valor.Substring(2,5) + "-" + valor.Substring(7,4); - break; - - case 'd': //cpf / cnpj - if (valor.Length == 11) - valor = valor.Substring(0,3)+"."+valor.Substring(3,3)+"."+valor.Substring(6,3)+"-"+valor.Substring(9,2); - else if (valor.Length == 14) - valor = valor.Substring(0,2)+"."+valor.Substring(2,3)+"."+valor.Substring(5,3)+"/"+valor.Substring(8,4)+"-"+valor.Substring(12,2); - break; - - case 'p': - if (valor.Length == 7) - valor = valor.Substring(0,3)+"-"+valor.Substring(3,4); - break; - } - return valor; - } - - public Image ObterLogo() - { - byte[] logomarca = Report.GetParameterValue("Logo") as byte[]; - - if (logomarca == null) return null; - - using(var ms = new MemoryStream(logomarca)) - { - var image = Image.FromStream(ms); - return image; - } - } - - private void Imposto_BeforePrint(object sender, EventArgs e) - { - bool exibirIbpt = ((Boolean?)Report.GetParameterValue("ExibirTotalTributos")) ?? false; - - QuadroVTOTTRIB.Visible = exibirIbpt; - txtIbptValor.Visible = exibirIbpt; - - if (exibirIbpt) - { - //Base ICMS - QuadroVBC.Width = 100f; - Text170.Width = QuadroVBC.Width; - - //Valor ICMS - QuadroVICMS.Width = 100f; - QuadroVICMS.Left = 100f; - Text169.Width = QuadroVICMS.Width; - Text169.Left = QuadroVICMS.Left; - - //Base Calc ICMS ST - QuadroVBCST.Text = "BASE CÁLC. ICMS SUBST."; - QuadroVBCST.Width = 100f; - QuadroVBCST.Left = 200f; - Text168.Width = QuadroVBCST.Width; - Text168.Left = QuadroVBCST.Left; - - //ICMS ST - QuadrovST.Width = 100f; - QuadrovST.Left = 300f; - Text162.Width = QuadrovST.Width; - Text162.Left = QuadrovST.Left; - - //PIS - QuadroPIS.Width = 100f; - QuadroPIS.Left = 400f; - Text160.Width = QuadroPIS.Width; - Text160.Left = QuadroPIS.Left; - - //TOTAL TRIBUTOS - QuadroVTOTTRIB.Width = 100f; - QuadroVTOTTRIB.Left = 500f; - txtIbptValor.Width = QuadroVTOTTRIB.Width; - txtIbptValor.Left = QuadroVTOTTRIB.Left; - - //Total produtos - Memo67.Left = 600f; - Memo67.Width = 144.5f; - Text159.Width = Memo67.Width; - Text159.Left = Memo67.Left; - - //Frete - Memo77.Left = 0f; - Memo77.Width = 100f; - Text167.Width = Memo77.Width; - Text167.Left = Memo77.Left; - - //Seguro - Memo75.Left = 100f; - Memo75.Width = 100f; - Text166.Width = Memo75.Width; - Text166.Left = Memo75.Left; - - //Desconto - Memo73.Left = 200f; - Memo73.Width = 100f; - Text165.Width = Memo73.Width; - Text165.Left = Memo73.Left; - - //Despesas - Memo71.Left = 300f; - Memo71.Width = 100f; - Text164.Width = Memo71.Width; - Text164.Left = Memo71.Left; - - //IPI - Memo69.Left = 400f; - Memo69.Width = 100f; - Text163.Width = Memo69.Width; - Text163.Left = Memo69.Left; - - //Valor Cofins - Text158.Left = 500f; - Text158.Width = 100f; - Text161.Width = Text158.Width; - Text161.Left = Text158.Left; - - //Total Contábil - Memo79.Left = 600f; - Memo79.Width = 144.5f; - Memo80.Width = Memo79.Width; - Memo80.Left = Memo79.Left; - } - } - - private int contadorDuplicatas =0; - private float _TamanhoDuplicatas = 0; - - private void DuplicatasHeader_BeforePrint(object sender, EventArgs e) - { - contadorDuplicatas = 0; - _TamanhoDuplicatas = 0; - } - - private void Duplicatas_BeforePrint(object sender, EventArgs e) - { - contadorDuplicatas++; - if (contadorDuplicatas == 6) - { - _TamanhoDuplicatas += Duplicatas.Height; - contadorDuplicatas = 0; - } - } - - private float _Tamanho = 0; - private float _TamanhoItens = 0; - - private void DadosProdutosHeader_BeforePrint(object sender, EventArgs e) - { - _Tamanho = 0; - _TamanhoItens = 0; - - if (Canhoto.Visible) - _Tamanho += Canhoto.Height; - - if (Emitente.Visible) - _Tamanho += Emitente.Height; - - if (Destinatario.Visible) - _Tamanho += Destinatario.Height; - - if (LocalRetirada.Visible) - _Tamanho += LocalRetirada.Height; - - if (LocalEntrega.Visible) - _Tamanho += LocalEntrega.Height; - - if (Fatura.Visible) - _Tamanho += Fatura.Height; - - if (DuplicatasHeader.Visible) - _Tamanho += DuplicatasHeader.Height; - - _Tamanho += _TamanhoDuplicatas; - - if (Imposto.Visible) - _Tamanho += Imposto.Height; - - if (TransportadorVolumes.Visible) - _Tamanho += TransportadorVolumes.Height; - - if (DadosProdutosHeader.Visible) - _Tamanho += DadosProdutosHeader.Height; - - //_Tamanho += _TamanhoItens; - - if (DadosProdutosFooter.Visible) - _Tamanho += DadosProdutosFooter.Height; - - if (DadosISSQN.Visible) - _Tamanho += DadosISSQN.Height; - - DadosAdicionais.CalcHeight(); - - if (DadosAdicionais.Visible) - _Tamanho += DadosAdicionais.Height; - - if (Rodape.Visible) - _Tamanho += Rodape.Height; - - } - - private void DadosProdutos_AfterPrint(object sender, EventArgs e) - { - DadosProdutos.StartNewPage = false; - - if (Engine.PageNo == 1) - { - _TamanhoItens += DadosProdutos.Height; - - if (_Tamanho + _TamanhoItens >= Engine.PageHeight) - { - DadosProdutos.StartNewPage = true; - _TamanhoItens = 0; - } - } - } - - - - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NFe.Danfe.Fast/Properties/AssemblyInfo.cs b/NFe.Danfe.Fast/Properties/AssemblyInfo.cs deleted file mode 100644 index 77d772ebe..000000000 --- a/NFe.Danfe.Fast/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// As informações gerais sobre um assembly são controladas por -// conjunto de atributos. Altere estes valores de atributo para modificar as informações -// associada a um assembly. -[assembly: AssemblyTitle("NFe.Danfe.Fast")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Danfe.Fast")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Definir ComVisible como false torna invisíveis os tipos neste assembly -// para componentes COM. Caso precise acessar um tipo neste assembly a partir de -// COM, defina o atributo ComVisible como true nesse tipo. -[assembly: ComVisible(false)] - -// O GUID a seguir será destinado à ID de typelib se este projeto for exposto para COM -[assembly: Guid("b7f6a2ff-fd0e-4b44-82b3-371605cd0510")] - -// As informações da versão de um assembly consistem nos quatro valores a seguir: -// -// Versão Principal -// Versão Secundária -// Número da Versão -// Revisão -// -// É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão -// utilizando o "*" como mostrado abaixo: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/NFe.Danfe.Fast/Properties/Resources.Designer.cs b/NFe.Danfe.Fast/Properties/Resources.Designer.cs deleted file mode 100644 index 9e395fc4f..000000000 --- a/NFe.Danfe.Fast/Properties/Resources.Designer.cs +++ /dev/null @@ -1,93 +0,0 @@ -//------------------------------------------------------------------------------ -// -// O código foi gerado por uma ferramenta. -// Versão de Tempo de Execução:4.0.30319.42000 -// -// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se -// o código for gerado novamente. -// -//------------------------------------------------------------------------------ - -namespace NFe.Danfe.Fast.Properties { - using System; - - - /// - /// Uma classe de recurso de tipo de alta segurança, para pesquisar cadeias de caracteres localizadas etc. - /// - // Essa classe foi gerada automaticamente pela classe StronglyTypedResourceBuilder - // através de uma ferramenta como ResGen ou Visual Studio. - // Para adicionar ou remover um associado, edite o arquivo .ResX e execute ResGen novamente - // com a opção /str, ou recrie o projeto do VS. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Retorna a instância de ResourceManager armazenada em cache usada por essa classe. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NFe.Danfe.Fast.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Substitui a propriedade CurrentUICulture do thread atual para todas as - /// pesquisas de recursos que usam essa classe de recurso de tipo de alta segurança. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - internal static byte[] NFCe { - get { - object obj = ResourceManager.GetObject("NFCe", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - internal static byte[] NFeEvento { - get { - object obj = ResourceManager.GetObject("NFeEvento", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Consulta um recurso localizado do tipo System.Byte[]. - /// - internal static byte[] NFeRetrato { - get { - object obj = ResourceManager.GetObject("NFeRetrato", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/NFe.Danfe.Fast/Properties/Resources.resx b/NFe.Danfe.Fast/Properties/Resources.resx deleted file mode 100644 index 081eb09c4..000000000 --- a/NFe.Danfe.Fast/Properties/Resources.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\NFCe\NFCe.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\NFe\NFeEvento.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\NFe\NFeRetrato.frx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/NFe.Danfe.Html/CrossCutting/Enumeradores.cs b/NFe.Danfe.Html/CrossCutting/Enumeradores.cs new file mode 100644 index 000000000..464ca1261 --- /dev/null +++ b/NFe.Danfe.Html/CrossCutting/Enumeradores.cs @@ -0,0 +1,15 @@ +namespace NFe.Danfe.Html.CrossCutting +{ + + public enum Status + { + Autorizada, + Cancelada, + NaoAuotorizada, + Negada, + Recusada, + Contingencia, + EsperandoAutorizacao + } + +} diff --git a/NFe.Danfe.Html/CrossCutting/Extensions.cs b/NFe.Danfe.Html/CrossCutting/Extensions.cs new file mode 100644 index 000000000..0e935b199 --- /dev/null +++ b/NFe.Danfe.Html/CrossCutting/Extensions.cs @@ -0,0 +1,445 @@ +using System; +using System.Reflection; +using System.Text.RegularExpressions; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; +using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; + +namespace NFe.Danfe.Html.CrossCutting +{ + internal static class Extensions + { + public static string orig(this ICMSBasico icms) + { + return GetOrigIcms(icms, "orig"); + } + + public static string Csosn(this ICMSBasico icms) + { + return GetCsosn(icms, "CSOSN"); + } + + public static string Cst(this ICMSBasico icms) + { + return GetCstIcms(icms, "CST"); + } + + public static decimal pICMS(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pICMS"); + } + + public static decimal vBC(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBC"); + } + + public static decimal vBCST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBCST"); + } + + public static decimal vICMSDeson(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSDeson"); + } + + public static decimal vICMS(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMS"); + } + + public static decimal vBCFCP(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBCFCP"); + } + + public static decimal pFCP(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pFCP"); + } + + public static decimal vFCP(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vFCP"); + } + + public static decimal vBCFCPST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBCFCPST"); + } + + public static decimal pFCPST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pFCPST"); + } + + public static decimal vFCPST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vFCPST"); + } + + public static decimal vBCFCPSTRet(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBCFCPSTRet"); + } + + public static decimal pFCPSTRet(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pFCPSTRet"); + } + + public static decimal vFCPSTRet(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vFCPSTRet"); + } + + public static decimal pST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pST"); + } + + public static string modBC(this ICMSBasico icms) + { + return GetModBC(icms, "modBC"); + } + + public static string modBCST(this ICMSBasico icms) + { + return GetModBCst(icms, "modBCST"); + } + + + public static decimal pMVAST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pMVAST"); + } + + public static decimal pRedBC(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pRedBC"); + } + + public static decimal pRedBCST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pRedBCST"); + } + + public static decimal pICMSST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pICMSST"); + } + + public static decimal vICMSST(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSST"); + } + + public static decimal vBCSTRet(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBCSTRet"); + } + + public static decimal vICMSSTRet(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSSTRet"); + } + + public static string motDesICMS(this ICMSBasico icms) + { + return GetMotDesnIcms(icms, "motDesICMS"); + } + + public static decimal pBCOp(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pBCOp"); + } + + public static string UFST(this ICMSBasico icms) + { + return GetPropStringValue(icms, "UFST"); + } + + public static decimal pCredSN(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pCredSN"); + } + + public static decimal vCredICMSSN(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vCredICMSSN"); + } + + public static decimal vICMSOp(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSOp"); + } + + public static decimal pDif(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "pDif"); + } + + public static decimal vICMSDif(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSDif"); + } + + public static decimal vBCSTDest(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vBCSTDest"); + } + + public static decimal vICMSSTDest(this ICMSBasico icms) + { + return GetPropDecimalValue(icms, "vICMSSTDest"); + } + + + public static string Cst(this IPIBasico ipi) + { + return GetCstIpi(ipi, "CST"); + } + + public static decimal vBC(this IPIBasico ipi) + { + return GetPropDecimalValue(ipi, "vBC"); + } + + public static decimal pIPI(this IPIBasico ipi) + { + return GetPropDecimalValue(ipi, "pIPI"); + } + + public static decimal vIPI(this IPIBasico ipi) + { + return GetPropDecimalValue(ipi, "vIPI"); + } + + public static decimal qUnid(this IPIBasico ipi) + { + return GetPropDecimalValue(ipi, "qUnid"); + } + + public static decimal vUnid(this IPIBasico ipi) + { + return GetPropDecimalValue(ipi, "vUnid"); + } + + + public static string Cst(this PISBasico pis) + { + return GetCstPis(pis, "CST"); + } + + public static decimal vPIS(this PISBasico pis) + { + return GetPropDecimalValue(pis, "vPIS"); + } + + public static decimal vBC(this PISBasico pis) + { + return GetPropDecimalValue(pis, "vBC"); + } + + public static decimal pPpis(this PISBasico pis) + { + return GetPropDecimalValue(pis, "pPIS"); + } + + public static decimal qBCProd(this PISBasico pis) + { + return GetPropDecimalValue(pis, "qBCProd"); + } + + public static decimal vAliqProd(this PISBasico pis) + { + return GetPropDecimalValue(pis, "vAliqProd"); + } + + + public static decimal vCOFINS(this COFINSBasico cofins) + { + return GetPropDecimalValue(cofins, "vCOFINS"); + } + + public static string Cst(this COFINSBasico cofins) + { + return GetCstCofins(cofins, "CST"); + } + + public static decimal vBC(this COFINSBasico cofins) + { + return GetPropDecimalValue(cofins, "vBC"); + } + + public static decimal pCOFINS(this COFINSBasico cofins) + { + return GetPropDecimalValue(cofins, "pCOFINS"); + } + + public static decimal qBCProd(this COFINSBasico cofins) + { + return GetPropDecimalValue(cofins, "qBCProd"); + } + + public static decimal vAliqProd(this COFINSBasico cofins) + { + return GetPropDecimalValue(cofins, "vAliqProd"); + } + + + private static string GetCstCofins(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((CSTCOFINS)property.GetValue(instance, null)).ToString() : ""; + return w != "" ? Regex.Match(w, "[0-9]+").Value : ""; + } + catch (Exception) + { + return ""; + } + } + + private static string GetCstIpi(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((CSTIPI)property.GetValue(instance, null)).ToString() : ""; + return w != "" ? Regex.Match(w, "[0-9]+").Value : ""; + } + catch (Exception) + { + return ""; + } + } + + private static string GetCstPis(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((CSTPIS)property.GetValue(instance, null)).ToString() : ""; + return w != "" ? Regex.Match(w, "[0-9]+").Value : ""; + } + catch (Exception) + { + return ""; + } + } + + private static string GetCstIcms(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((Csticms)property.GetValue(instance, null)).ToString() : ""; + return w != "" ? Regex.Match(w, "[0-9]+").Value : ""; + } + catch (Exception) + { + return ""; + } + } + + private static string GetModBCst(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((int)(DeterminacaoBaseIcmsSt)property.GetValue(instance, null)).ToString() : ""; + return w; + } + catch (Exception) + { + return ""; + } + } + + private static string GetModBC(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((int)(DeterminacaoBaseIcms)property.GetValue(instance, null)).ToString() : ""; + return w; + } + catch (Exception) + { + return ""; + } + } + + private static string GetMotDesnIcms(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((MotivoDesoneracaoIcms)property.GetValue(instance, null)).ToString() : ""; + return w != "" ? Regex.Match(w, "[0-9]+").Value : ""; + } + catch (Exception) + { + return ""; + } + } + + private static string GetCsosn(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((Csosnicms)property.GetValue(instance, null)).ToString() : ""; + return w != "" ? Regex.Match(w, "[0-9]+").Value : ""; + } + catch (Exception) + { + return ""; + } + } + + private static string GetOrigIcms(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + var w = property != null ? ((int)(OrigemMercadoria)property.GetValue(instance, null)).ToString() : ""; + return w; + } + catch (Exception) + { + return ""; + } + } + + private static decimal GetPropDecimalValue(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + if (property != null) return (decimal?)property.GetValue(instance, null) ?? 0M; + return 0M; + } + catch (Exception) + { + return 0M; + } + } + + private static string GetPropStringValue(object instance, string propName) + { + try + { + var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); + if (property != null) return (string)property.GetValue(instance, null) ?? ""; + return ""; + } + catch (Exception) + { + return ""; + } + } + } +} diff --git a/NFe.Danfe.Html/CrossCutting/Utils.cs b/NFe.Danfe.Html/CrossCutting/Utils.cs new file mode 100644 index 000000000..4bf942e5f --- /dev/null +++ b/NFe.Danfe.Html/CrossCutting/Utils.cs @@ -0,0 +1,283 @@ +using System; +using System.Collections; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml.Serialization; + +namespace NFe.Danfe.Html.CrossCutting +{ + internal static class Utils + { + + /// + /// Converter um tipo DateTime absoluto para o fuso horário do Brasil + /// + /// + /// + public static DateTime ConverterFusoHorarioBrasil(this DateTimeOffset data) + { + var utcData = data.UtcDateTime; + + return utcData.ConverterFusoHorarioBrasil(); + } + + /// + /// Obter o fuso horário do Brasil a partir de um fuso UTC + /// + /// + public static DateTime ConverterFusoHorarioBrasil(this DateTime data) + { + try + { + if (data.Kind != DateTimeKind.Utc) + return data; + + TimeZoneInfo horaBrasilia = TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time"); + return TimeZoneInfo.ConvertTimeFromUtc(data, horaBrasilia); + } + catch (Exception ex) + { + return DateTime.Now; + + } + + } + + private static readonly Hashtable CacheSerializers = new Hashtable(); + + private static XmlSerializer BuscarNoCache(string chave, Type type) + { + if (CacheSerializers.Contains(chave)) return (XmlSerializer)CacheSerializers[chave]; + var ser = XmlSerializer.FromTypes(new[] { type })[0]; + CacheSerializers.Add(chave, ser); + return ser; + } + + public static T XmlStringParaClasse(string input) where T : class + { + var keyNomeClasseEmUso = typeof(T).FullName; + var ser = BuscarNoCache(keyNomeClasseEmUso, typeof(T)); + using (var sr = new StringReader(input)) + { + return (T)ser.Deserialize(sr); + } + } + + /// + /// Deletar arquivo + /// + /// Caminho do arquivo + /// Nome do arquivo + public static void DelatarArquivo(string caminho, string nomeArquivo) + { + if(caminho.Contains("../") || caminho.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + + var c1 = Path.Combine(caminho, nomeArquivo); + File.Delete(c1); + } + + /// + /// Escrever arquivo em modo stream, assincronamente + /// + /// Caminho do arquivo + /// Nome do arquivo + /// Conteudo + public static void EscreverArquivo(string caminho, string nomeArquivo, string conteudo) + { + if (caminho == null) + throw new ArgumentNullException(nameof(caminho), "O caminho do arquivo deve ser informado"); + if (nomeArquivo == null) + throw new ArgumentNullException(nameof(nomeArquivo), "O nome do arquivo deve ser informado"); + if (conteudo == null) + throw new ArgumentNullException(nameof(conteudo), "O conteúdo do arquivo deve ser informado"); + if(caminho.Contains("../") || caminho.Contains("..\\")) + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + + CriarPastaSeNaoExistir(caminho); + var encodedText = Encoding.UTF8.GetBytes(conteudo); + var c1 = Path.Combine(caminho, nomeArquivo); // Combina caminho do arquivo como nome do arquivo + using (var sourceStream = new FileStream(c1, FileMode.Append, FileAccess.Write, FileShare.None, 4096, true)) + { + sourceStream.Write(encodedText, 0, encodedText.Length); + sourceStream.Close(); + } + } + + /// + /// Criar pasta no caminho indicador + /// + /// caminho do arquivo + public static bool CriarPasta(string caminho) + { + // Tentar criar diretorio + Directory.CreateDirectory(caminho); + return true; + } + + /// + /// Criar pasta se não existir + /// + /// Caminho do arquivo + /// + public static void CriarPastaSeNaoExistir(string caminho) + { + if (!ExisteDiretorio(caminho)) CriarPasta(caminho); + } + + /// + /// Verificar se o diretorio existe + /// + /// caminho do arquivo + /// + public static bool ExisteDiretorio(string caminho) + { + // Determinar se o diretorio existe + if (Directory.Exists(caminho)) + return true; + return false; + } + + /// + /// Obter a data do Brasil + /// + /// + public static DateTime ObterDataBrasil() + { + + CultureInfo.CurrentCulture.ClearCachedData(); + DateTime dateTime = DateTime.UtcNow; + TimeZoneInfo horaBrasilia = TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time"); + return TimeZoneInfo.ConvertTimeFromUtc(dateTime, horaBrasilia); + + } + + /// + /// + /// + /// + /// + public static string FormatarEspaco(this string text, int lengthAfterSpace) + { + var empty = string.Empty; + var num = 1; + foreach (var ch in text) + { + empty += ch.ToString(); + if (num == lengthAfterSpace) + { + empty += " "; + num = 1; + } + else + { + ++num; + } + } + + return empty.Trim(); + } + + /// + /// Formatar número de telefone + /// + /// + /// + public static string FormatarTelefone(this string numeroTelefone) + { + string numeroApenasDigitos = new string(numeroTelefone.Where(char.IsDigit).ToArray()); + + if (numeroApenasDigitos.Length == 10 || numeroApenasDigitos.Length == 11) + { + string ddd = numeroApenasDigitos.Substring(0, 2); + string numero = numeroApenasDigitos.Substring(numeroApenasDigitos.Length - 8); + + return string.Format("({0}) {1}-{2}", ddd, numero.Substring(0, 4), numero.Substring(4)); + } + + return numeroTelefone; + } + + /// + /// Formatar CNPJ ou CPF + /// + /// + /// + public static string FormatarCnpjCpf(string doc) + { + if (string.IsNullOrEmpty(doc)) + return doc; + var empty = string.Empty; + if (doc.Trim().Length < 12) + { + doc = doc.Trim(); + return Regex.Replace(doc, "(\\w{3})(\\w{3})(\\w{3})(\\w{2})", "$1.$2.$3-$4"); + } + + doc = doc.Trim(); + return Regex.Replace(doc, "(\\w{2})(\\w{3})(\\w{3})(\\w{4})(\\w{2})", "$1.$2.$3/$4-$5"); + } + + /// + /// Formatar numero + /// + /// + /// + public static string FormatarNumero(this decimal value) + { + return $"{(object)value:0.00}".Replace(",", ".").Trim(); + } + + /// + /// Formatar numero para exibição da DANFE + /// + /// + /// + public static string FormatarNumeroDanfe(this decimal value) + { + try + { + var str = FormatarNumero(value); + str = str.Replace(".", ","); + double.TryParse(str, out var result); + return result.ToString("N2", CultureInfo.GetCultureInfo("pt-br")); + } + catch (Exception) + { + return "0,00"; + } + + } + + /// + /// Trunca string + /// + /// string + /// Quantidade máxima de caracteres para exibição + /// + public static string Truncar(this string value, int maxLength) + { + if (string.IsNullOrEmpty(value)) return value; + return value.Length <= maxLength ? value : value.Substring(0, maxLength); + } + + /// + /// Formatar numero para exibição da DANFE + /// + /// + /// + public static string FormatarNumeroQuantidadeDanfe(this decimal value) + { + var str = FormatarNumero(value); + str = str.Replace(".", ","); + double.TryParse(str, out var result); + return result.ToString("#.000").Trim(); + } + + } +} diff --git a/NFe.Danfe.Html/DanfeNfeHtml2.cs b/NFe.Danfe.Html/DanfeNfeHtml2.cs new file mode 100644 index 000000000..e1e98a834 --- /dev/null +++ b/NFe.Danfe.Html/DanfeNfeHtml2.cs @@ -0,0 +1,636 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Site: www.dsbrbrasil.com.br +// Autores: Valnei Filho v_marinpietri@yahoo.com.br +// Data Criação: 05/06/2023 +// Todos os direitos reservados +// =================================================================== + + +#region + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NetBarcode; +using NFe.Danfe.Html.CrossCutting; +using NFe.Danfe.Html.Dominio; +using NFe.Danfe.Html.Interfaces; + +using Type = NetBarcode.Type; +#endregion + +namespace NFe.Danfe.Html +{ + public class DanfeNfeHtml2 : IDanfeHtml2 + { + #region Propriedades + + /// + public string TipoDanfe => "NFe"; + + #endregion + + #region Construtor + + public DanfeNfeHtml2(DanfeNFe danfe) + { + _danfe = danfe; + } + + #endregion + + public readonly DanfeNFe _danfe; + + private int _qtdLinhasPrimeiraPagina; + private int _qtdLinhasPaginaSubsequente; + + /// + public Task ObterDocHtmlAsync() + { + var task = Task.Run(() => + { + var result = MontarDanfe(_danfe); + return new Documento {Html = result}; + }); + return task; + } + + private string MontarCanhotoRecibo(DanfeNFe danfeNFe, string nfeHtml) + { var list = new Dictionary(); + list.Add("[nl_invoice]", danfeNFe.NumNota); + list.Add("[ds_invoice_serie]", danfeNFe.SerieNota); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + private string MontarCabecalho(DanfeNFe danfeNFe, string nfeHtml, string atualPage = "1", string totalPages = "1") + { + var list = new Dictionary(); + list.Add("[url_logo]", !string.IsNullOrEmpty(danfeNFe.Emitente.Logo) ? danfeNFe.Emitente.Logo : LogoNFeBase64()); + list.Add("[ds_company_issuer_name]", danfeNFe.Emitente.Nome); + var endereco = $"{danfeNFe.Emitente.Endereco.NomeEnd} {danfeNFe.Emitente.Endereco.Num}"; + var fone = string.IsNullOrWhiteSpace(danfeNFe.Emitente.Endereco.Tel) + ? "" + : $"{danfeNFe.Emitente.Endereco.Tel.FormatarTelefone()}"; + var bairro = $"{danfeNFe.Emitente.Endereco.Bairro}"; + var cep = $"{danfeNFe.Emitente.Endereco.Cep}"; + var cidade = $"{danfeNFe.Emitente.Endereco.Cidade}"; + var uf = $"{danfeNFe.Emitente.Endereco.Uf}"; + var natOper = string.IsNullOrWhiteSpace(danfeNFe.NatOperacao) ? "" : + danfeNFe.NatOperacao.Length > 55 ? danfeNFe.NatOperacao?.ToUpper().Substring(0, 55) : + danfeNFe.NatOperacao?.ToUpper(); + list.Add("[ds_company_address]", endereco); + list.Add("[ds_company_neighborhood]", bairro); + list.Add("[nu_company_cep]", cep); + list.Add("[ds_company_city_name]", cidade); + list.Add("[ds_company_uf]", uf); + list.Add("[nl_company_phone_number]", fone); + list.Add("[ds_danfe]", string.IsNullOrEmpty(danfeNFe.Chave) ? string.Empty : danfeNFe.Chave.FormatarEspaco(4)); + list.Add("[BarCode]", string.IsNullOrEmpty(danfeNFe.Chave) ? string.Empty : MontarCodigoBarras(danfeNFe.Chave)); + list.Add("[nl_invoice]", danfeNFe.NumNota); + list.Add("[ds_invoice_serie]", danfeNFe.SerieNota); + list.Add("[ds_code_operation_type]", danfeNFe.TipoOper); + list.Add("[actual_page]", atualPage); + list.Add("[total_pages]", totalPages); + list.Add("[_ds_transaction_nature]", natOper); + list.Add("[ds_protocol]", danfeNFe.ProtocoloUso ?? " - "); + list.Add("[nl_company_ie]", danfeNFe.Emitente.Ie); + list.Add("[nl_company_ie_st]", danfeNFe.IeSt ?? string.Empty); + list.Add("[nl_company_cnpj_cpf]", CrossCutting.Utils.FormatarCnpjCpf(danfeNFe.Emitente.CnpjCpf)); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + private string MontarImposto(DanfeNFe danfeNFe, string nfeHtml) + { + var list = new Dictionary(); + list.Add("[tot_bc_icms]", danfeNFe.Imposto.vBCIMS.FormatarNumeroDanfe()); + list.Add("[tot_icms]", danfeNFe.Imposto.vICMS.FormatarNumeroDanfe()); + list.Add("[tot_bc_icms_st]", danfeNFe.Imposto.vBCICMSST?.FormatarNumeroDanfe()); + list.Add("[tot_icms_st]", danfeNFe.Imposto.vICMSST?.FormatarNumeroDanfe()); + list.Add("[tot_icms_fcp]", "0"); + list.Add("[vl_total_prod]", danfeNFe.Imposto.vProd.FormatarNumeroDanfe()); + list.Add("[vl_shipping]", danfeNFe.Imposto.vFrete.FormatarNumeroDanfe()); + list.Add("[vl_insurance]", danfeNFe.Imposto.vSeg.FormatarNumeroDanfe()); + list.Add("[vl_discount]", danfeNFe.Imposto.vDesc.FormatarNumeroDanfe()); + list.Add("[vl_other_expense]", danfeNFe.Imposto.vOutro.FormatarNumeroDanfe()); + list.Add("[tot_total_ipi_tax]", danfeNFe.Imposto.vIpi.FormatarNumeroDanfe()); + list.Add("[vl_total]", danfeNFe.Imposto.vNF.FormatarNumeroDanfe()); + list.Add("[ApproximateTax]", danfeNFe.Imposto.vTotTrib.FormatarNumeroDanfe()); + list.Add("[tot_icms_pis]", danfeNFe.Imposto.vPis.FormatarNumeroDanfe()); + list.Add("[tot_icms_cofins]", danfeNFe.Imposto.vCofins.FormatarNumeroDanfe()); + list.Add("[vICMSUFRemet]", danfeNFe.Imposto.vICMSUFRemet?.FormatarNumeroDanfe()); + list.Add("[vICMSUFDest]", danfeNFe.Imposto.vICMSUFDest?.FormatarNumeroDanfe()); + list.Add("[vImport]", ""); + //ISSQN + var imIssqn = danfeNFe.ISsqn?.Im; + var totalServIssqn = danfeNFe.ISsqn?.ValorIssqn; + var baseCalcIssqn = danfeNFe.ISsqn?.BaseCalculo; + var totalIssqn = danfeNFe.ISsqn?.ValorIssqn; + list.Add("[ds_company_im]", imIssqn); + list.Add("[vl_total_serv]", totalServIssqn?.ToString()); + list.Add("[tot_bc_issqn]", baseCalcIssqn?.ToString()); + list.Add("[tot_issqn]", totalIssqn?.ToString()); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + private string MontarFaturas(DanfeNFe danfeNFe, string nfeHtml) + { + var list = new Dictionary(); + var duplicatas = MontarItensFaturas(danfeNFe); + list.Add("[duplicates]", duplicatas); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + private string MontarDestinatarioEmitente(DanfeNFe danfeNFe, string nfeHtml) + { + var list = new Dictionary(); + var endereco = $"{danfeNFe.Destinatario.Endereco.NomeEnd} {danfeNFe.Destinatario.Endereco.Num}"; + var fone = string.IsNullOrWhiteSpace(danfeNFe.Destinatario.Endereco.Tel) + ? "" + : $"{danfeNFe.Destinatario.Endereco.Tel.FormatarTelefone()}"; + var bairro = $"{danfeNFe.Destinatario.Endereco.Bairro}"; + var cep = $"{danfeNFe.Destinatario.Endereco.Cep}"; + var cidade = $"{danfeNFe.Destinatario.Endereco.Cidade}"; + var uf = $"{danfeNFe.Destinatario.Endereco.Uf}"; + var ie = $"{danfeNFe.Destinatario.Ie}"; + var horaEntrada = danfeNFe.DataEmissao.ToString("HH:mm:ss"); + var horaSaida = danfeNFe.DataEntSaida?.ToString("HH:mm:ss"); + var hora = danfeNFe.TipoOper == "0" ? horaEntrada : horaSaida; + list.Add("[ds_client_receiver_name]", danfeNFe.Destinatario.Nome?.ToUpper()); + list.Add("[nl_client_cnpj_cpf]", CrossCutting.Utils.FormatarCnpjCpf(danfeNFe.Destinatario.CnpjCpf)); + list.Add("[dt_invoice_issue]", danfeNFe.DataEmissao.ToString("dd/MM/yyyy")); + list.Add("[ds_client_address]", endereco); + list.Add("[ds_client_neighborhood]", bairro); + list.Add("[nu_client_cep]", cep); + list.Add("[dt_input_output]", danfeNFe.DataEntSaida?.ToString("dd/MM/yyyy")); + list.Add("[ds_client_city_name]", cidade); + list.Add("[nl_client_phone_number]", fone); + list.Add("[ds_client_uf]", uf); + list.Add("[ds_client_ie]", ie); + list.Add("[hr_input_output]", $"{hora}"); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + private string MontarItensFaturas(DanfeNFe danfeNFe) + { + var str = new StringBuilder(); + var pipe = danfeNFe.Faturas.Count > 1 ? " | " : ""; + foreach (var item in danfeNFe.Faturas) + { + var str1 = $"N Fat.º: {item.NumFatura}  "; + var str2 = $"Vencimento: {item.DataVencimento:dd/MM/yyyy}  "; + var str3 = $"Valor: {item.Valor.FormatarNumeroDanfe()}  "; + str.Append($"{str1} {str2} {str3} {pipe}"); + } + + return str.ToString(); + } + + private string MontarCodigoBarras(string nFeId) + { + return "data:image/png;base64, " + new Barcode(nFeId, Type.Code128).GetBase64Image(); + } + + private string MontarTransportadora(DanfeNFe danfeNFe, string nfeHtml) + { + var list = new Dictionary(); + var endereco = ""; + var tipoFrete = "0"; + var bairro = ""; + var cep = ""; + var cidade = ""; + var uf = ""; + var ie = ""; + decimal quantidade = 0; + var especie = ""; + var marca = ""; + var numeroVolume = ""; + decimal pesoBruto = 0; + decimal pesoLiquido = 0; + if (danfeNFe.Transportadora != null) + { + endereco = $"{danfeNFe.Transportadora?.Endereco.NomeEnd} {danfeNFe.Transportadora?.Endereco.Num}"; + tipoFrete = danfeNFe.Transportadora?.FretePorConta == "Emitente" ? "0" : "1"; + bairro = $"{danfeNFe.Transportadora?.Endereco.Bairro}"; + cep = $"{danfeNFe.Transportadora?.Endereco.Cep}"; + cidade = $"{danfeNFe.Transportadora?.Endereco.Cidade}"; + uf = $"{danfeNFe.Transportadora?.Endereco.Uf}"; + ie = $"{danfeNFe.Transportadora?.Ie}"; + } + + var volume = danfeNFe.Volumes?.FirstOrDefault(); + if (volume != null) + { + quantidade = volume?.Quantidade ?? 0; + especie = volume?.Especie ?? ""; + marca = volume?.Marca ?? ""; + numeroVolume = volume?.NumeroVolume ?? ""; + pesoBruto = volume?.PesoBruto ?? 0; + pesoLiquido = volume?.PesoLiq ?? 0; + } + + list.Add("[ds_transport_carrier_name]", danfeNFe?.Transportadora?.Nome); + list.Add("[ds_transport_code_shipping_type]", tipoFrete); + list.Add("[ds_transport_rntc]", danfeNFe.Transportadora?.CodAntt); + list.Add("[ds_transport_vehicle_plate]", danfeNFe.Transportadora?.Placa); + list.Add("[ds_transport_vehicle_uf]", danfeNFe.Transportadora?.Endereco.Uf); + list.Add("[nl_transport_cnpj_cpf]", CrossCutting.Utils.FormatarCnpjCpf(danfeNFe.Transportadora?.CnpjCpf)); + list.Add("[ds_transport_address]", $"{endereco} {bairro}"); + list.Add("[ds_transport_city]", cidade); + list.Add("[ds_transport_uf]", uf); + list.Add("[ds_transport_ie]", ie); + list.Add("[nu_transport_amount_transported_volumes]", quantidade.ToString()); + list.Add("[ds_transport_type_volumes_transported]", especie); + list.Add("[ds_transport_mark_volumes_transported]", marca); + list.Add("[ds_transport_number_volumes_transported]", numeroVolume); + list.Add("[vl_transport_gross_weight]", pesoBruto.ToString()); + list.Add("[vl_transport_net_weight]", pesoLiquido.ToString()); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + private string MontarInformacoesAdicionais(DanfeNFe danfeNFe, string nfeHtml) + { + var list = new Dictionary(); + list.Add("[ds_additional_information]", danfeNFe.Inf.InfComplementares); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + private string MontarCreditos(DanfeNFe danfeNFe, string nfeHtml) + { + var list = new Dictionary(); + list.Add("[credits]", danfeNFe.Creditos); + return LerTemplateEsubstituirTags(nfeHtml, list); + } + + /// + /// Obtem a quantidade maxima de linhas de produtos na primeira pagina + /// Quanto maior a quantidade de caracteres menor é a quantidade de linhas na primeira pagina + /// + /// + /// + private int ObterQuantidadeLinhasPrimeiraPagina(IList produtos) + { + var maximoLinhaMaiorCaracteres = 7; + var maximoLinhaMenorCaracteres = 12; + if (_qtdLinhasPrimeiraPagina != 0) return _qtdLinhasPrimeiraPagina; + + //Para 1ª pagina se a maioria das descrições de produtos contiver 53 caracteres ou menos, + //então admiti-se 10 linhas,9 linhas para maiores de 53 caractesres ou menores que 120 caracteres + //Para facilitar a conta basta somar a quantidade de caracteres pela quantidade de produtos destacada em cada pagina + + //Obter quantidade de caracteres + var qtdCaracteresPrimeiraPagina = + ObterQuantidadeCaracteresCampoDescricaoProduto(produtos, 0, maximoLinhaMenorCaracteres); + if (qtdCaracteresPrimeiraPagina <= 800) + { + _qtdLinhasPrimeiraPagina = maximoLinhaMenorCaracteres; + return maximoLinhaMenorCaracteres; + } + + //O numero de caracteres é muito alto, então cabem apenas 9 linhas na primeira pagina + _qtdLinhasPrimeiraPagina = maximoLinhaMaiorCaracteres; + return maximoLinhaMaiorCaracteres; + } + + /// + /// Obtem a quantidade maxima de linhas de produtos das paginas subsequentes à primeira + /// Quanto maior a quantidade de caracteres menor é a quantidade de linhas na pagina + /// + /// + /// + private int ObterQuantidadeLinhasPaginasSubsequentes(IList produtos) + { + var maximoLinhaMaiorCaracteres = 24; + var maximoLinhaMenorCaracteres = 50; + if (_qtdLinhasPaginaSubsequente != 0) return _qtdLinhasPaginaSubsequente; + + //Para 2ª pagina se a maioria das descrições de produtos contiver 53 caracteres ou menos, + //então,admiti-se 50 linhas por pagina, 24 linhas para maiores de 53 caractesres ou menores que 120 caractesres + //Para facilitar a conta basta somar a quantidade de caracteres pela quantidade de produtos destacada em cada pagina + + //Obter quantidade de caracteres dos 10 primeiros registros + var qtdMaxPrimeiraPagina = ObterQuantidadeLinhasPrimeiraPagina(produtos); + var qtdCaracteresPrimeiraPagina = + ObterQuantidadeCaracteresCampoDescricaoProduto(produtos, qtdMaxPrimeiraPagina, maximoLinhaMenorCaracteres); + // 53 caracteres por linha multiplicado pela quantidade maxima de linhas, 50 + if (qtdCaracteresPrimeiraPagina <= 3000) + { + _qtdLinhasPaginaSubsequente = maximoLinhaMenorCaracteres; + return maximoLinhaMenorCaracteres; + } + + //O numero de caracteres é muito alto, então cabem apenas 24 linhas nas paginas subsequentes à primeira + _qtdLinhasPaginaSubsequente = maximoLinhaMaiorCaracteres; + return maximoLinhaMaiorCaracteres; + } + + private int ObterQuantidadeCaracteresCampoDescricaoProduto(IList produtos, int skip, int take) + { + var list = produtos.Skip(skip).Take(take); + var quantidadeCaracteres = list.Sum(n => n.Descricao.Length); + return quantidadeCaracteres; + } + + /// + /// Obtem a quantidade maxima de paginas com base na quantidade de produtos + /// + /// + /// + private int ObterQuantidadeMaximaPaginas(IList produtos) + { + var quantidaProdutos = produtos.Count(); + var qtdLinhasPrimeiraPagina = ObterQuantidadeLinhasPrimeiraPagina(produtos); + var qtdLinhasPaginasSubsequentes = ObterQuantidadeLinhasPaginasSubsequentes(produtos); + int totalProdutosMenosPrimeiraPagina = quantidaProdutos - qtdLinhasPrimeiraPagina; + int quantidadeMaximaPaginas = + (int) Math.Ceiling((double) totalProdutosMenosPrimeiraPagina / qtdLinhasPaginasSubsequentes); + int totalPaginas = quantidadeMaximaPaginas + 1; // 1 é contando com a primeira pagina + return totalPaginas; + } + + /// + /// + /// + /// + private string MontarDanfe(DanfeNFe danfeNfe) + { + var sbHtmlPage = new StringBuilder(); + int paginaAtual = 1; + var qtdLinhasPrimeiraPagina = ObterQuantidadeLinhasPrimeiraPagina(danfeNfe.Produtos.ToList()); + var qtdMaximaPaginas = ObterQuantidadeMaximaPaginas(danfeNfe.Produtos.ToList()); + var listaProdutosPrimeiraPagina = danfeNfe.Produtos.Take(qtdLinhasPrimeiraPagina).ToList(); + var primeiraPagina = + MontarPaginaInicial(listaProdutosPrimeiraPagina, paginaAtual.ToString(), qtdMaximaPaginas.ToString()); + primeiraPagina = MontarMarcaDagua(danfeNfe, primeiraPagina); + if (qtdMaximaPaginas == 1) + { + //var html2 = RemoveTag("[next-page]", primeiraPagina); + //return html2; + var html2 = FinalizarProcesso(primeiraPagina); + return html2; + } + + var qtdLinhasPaginasSubsequentes = ObterQuantidadeLinhasPaginasSubsequentes(danfeNfe.Produtos.ToList()); + var skip = qtdLinhasPrimeiraPagina; + + //Proximas páginas + //qtdMaximaPaginas-1 ( menos a primeira pagina ) + for (int pagina = 0; pagina < qtdMaximaPaginas - 1; pagina++) + { + paginaAtual++; + var produtos = danfeNfe.Produtos.Skip(skip).Take(qtdLinhasPaginasSubsequentes).ToList(); + var proximaPaginaHtml = MontarPaginaSubsequente(produtos, paginaAtual.ToString(), qtdMaximaPaginas.ToString()); + proximaPaginaHtml = MontarMarcaDagua(danfeNfe, proximaPaginaHtml); + //Adiciona a primeira pagina a 2ª pagina + if (pagina == 0) + { + var primeiraEsegundaPagina = AdicionarProximaPagina(primeiraPagina, proximaPaginaHtml); + sbHtmlPage.Append(primeiraEsegundaPagina); + } + else + { + //Adicionar proximas paginas + var paginaAnterior = sbHtmlPage.ToString(); + var paginaSubseQuente = AdicionarProximaPagina(paginaAnterior, proximaPaginaHtml); + sbHtmlPage.Clear(); + sbHtmlPage.Append(paginaSubseQuente); + } + + skip += qtdLinhasPaginasSubsequentes; + } + + var html3 = FinalizarProcesso(sbHtmlPage.ToString()); + return html3; + } + + /// + /// Finalizar processamento + /// + /// + /// + /// + private string FinalizarProcesso(string htmlPage) + { + var html1 = RemoveTag("[next-page]", htmlPage); + return html1; + } + + /// + /// Remove tags [nome_tag] + /// + /// + /// + /// + private string RemoveTag(string tag, string htmlPage) + { + var dicTag = new Dictionary(); + dicTag.Add(tag, ""); + return LerTemplateEsubstituirTags(htmlPage, dicTag); + } + + /// + /// Adiciona pagina à principal + /// Une a pagina inicial às proximas paginas + /// + /// Pagina anterior + /// Pagina proxima + /// + private string AdicionarProximaPagina(string paginaAnterior, string paginaProxima) + { + var replaceTag = new Dictionary(); + replaceTag.Add("[next-page]", paginaProxima); + return LerTemplateEsubstituirTags(paginaAnterior, replaceTag); + } + + private string MontarMarcaDagua(DanfeNFe danfeNFe, string nfeHtml) + { + var list = new Dictionary(); + string img; + if (danfeNFe.Producao) + switch (danfeNFe.Status) + { + case Status.Autorizada: + img = ""; + break; + case Status.Cancelada: + img = $"\"\""; + break; + case Status.NaoAuotorizada: + img = $"\"\""; + break; + case Status.EsperandoAutorizacao: + img = ""; + break; + case Status.Negada: + img = ""; + break; + case Status.Recusada: + img = ""; + break; + default: + img = ""; + break; + } + else + img = $"\"\""; + list.Add("[marca_dagua]", img); + var result = Substituir(nfeHtml, list); + return result; + } + + /// + /// Montar pagina inicial do relatorio + /// + /// Lista de produtos + /// Pagina atual + /// Quantidade total de paginas + /// + private string MontarPaginaInicial(List produtos, string paginaAtual, string qtdPaginasTotal) + { + var htmlPagina = Resource.danfe_model_55_nfe_page_one; + var str1 = MontarCanhotoRecibo(_danfe, htmlPagina); + var str2 = MontarCabecalho(_danfe, str1, paginaAtual, qtdPaginasTotal); + var str3 = MontarDestinatarioEmitente(_danfe, str2); + var str4 = MontarFaturas(_danfe, str3); + var str5 = MontarImposto(_danfe, str4); + var str6 = MontarTransportadora(_danfe, str5); + var str7 = MontarInformacoesAdicionais(_danfe, str6); + var str8 = MontarCreditos(_danfe, str7); + var sbProdutoPagina1 = new StringBuilder(); + foreach (var item in produtos) + sbProdutoPagina1.Append(MontarLinhaTabelaProduto(item)); + var str9 = MontarProduto(sbProdutoPagina1.ToString(), str8); + return str9; + } + + /// + /// Montar paginas subsequentes à primeira página do relatório + /// + /// + /// + /// + /// + private string MontarPaginaSubsequente(List produtos, string paginaAtual, string qtdPaginasTotal) + { + if (!produtos.Any()) return ""; + var htmlPagina = Resource.danfe_model_55_nfe_page_next; + var strNext2 = MontarCabecalho(_danfe, htmlPagina, paginaAtual, qtdPaginasTotal); + var strNext3 = MontarDestinatarioEmitente(_danfe, strNext2); + var strNext8 = MontarCreditos(_danfe, strNext3); + var sbProdutoPagina1 = new StringBuilder(); + foreach (var item in produtos) + sbProdutoPagina1.Append(MontarLinhaTabelaProduto(item)); + var str9 = MontarProduto(sbProdutoPagina1.ToString(), strNext8); + return str9; + } + + private string MontarProduto(string linhasTabelaProduto, string nfeHtml) + { + var linhasTabela = new Dictionary(); + linhasTabela.Add("[itens_products]", linhasTabelaProduto); + return LerTemplateEsubstituirTags(nfeHtml, linhasTabela); + } + + /// + /// Retorna uma string contendo a linha de uma tabela + /// + /// + /// + private string MontarLinhaTabelaProduto(Produto produto) + { + var list = new Dictionary(); + list.Add("[code]", ""); + list.Add("[nome]", ""); + list.Add("[ncm]", ""); + list.Add("[cst]", ""); + list.Add("[cfop]", ""); + list.Add("[und]", ""); + list.Add("[qtd]", ""); + list.Add("[valorUnit]", ""); + list.Add("[valorTot]", ""); + list.Add("[baseicms]", ""); + list.Add("[valoricms]", ""); + list.Add("[valoripi]", ""); + list.Add("[aliqicms]", ""); + list.Add("[aliqipi]", ""); + var strProductHtml = @" + + [code] + [nome] + [ncm] + [cst] + [cfop] + [und] + [qtd] + [valorUnit] + [valorTot] + [baseicms] + [valoricms] + [valoripi] + [aliqicms] + [aliqipi] + "; + var sb = new StringBuilder(); + list["[code]"] = produto.Codigo; + list["[nome]"] = produto.Descricao.Truncar(120); + list["[ncm]"] = produto.Ncm; + list["[cst]"] = produto.Origem; + list["[cfop]"] = produto.Cfop; + list["[und]"] = produto.Unidade; + list["[qtd]"] = produto.Quantidade.FormatarNumeroQuantidadeDanfe(); + list["[valorUnit]"] = produto.ValorUnitario.FormatarNumero(); + list["[valorTot]"] = produto.ValorTotal.FormatarNumero(); + list["[baseicms]"] = produto.BaseCalculo.FormatarNumero(); + list["[valoricms]"] = produto.VIcms.FormatarNumero(); + list["[valoripi]"] = produto.ValorIpi?.FormatarNumero(); + list["[aliqicms]"] = produto.PIcms.FormatarNumero(); + list["[aliqipi]"] = produto.PIpi?.FormatarNumero(); + var result = Substituir(strProductHtml, list); + sb.Append(result); + return sb.ToString(); + } + + /// + /// Realizar a leitura de arquivo e substitui tags + /// + /// + /// + /// + private string LerTemplateEsubstituirTags(string nomeTemplate, Dictionary dictionaryReplace) + { + if (dictionaryReplace == null) return string.Empty; + return !dictionaryReplace.Any() ? string.Empty : Substituir(nomeTemplate, dictionaryReplace); + } + + private string Substituir(string html, Dictionary replacesList) + { + var sb = new StringBuilder(html); + foreach (var kvp in replacesList) sb.Replace(kvp.Key, kvp.Value ?? string.Empty); + return sb.ToString(); + } + + private string ImagemNfeCancelada() + { + return + "data:image/png;base64,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"; + } + + private string ImagemNfeHomologacao() + { + return + "data:image/png;base64,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"; + } + + /// + /// Logotipo NFe base 64 + /// + /// + private string LogoNFeBase64() + { + return + "data:image/png;base64,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vfqcl3sC+HpUp/RBt09ez/LKsNE+E/ezP3OdeY/KfK628H/fRymfUKY8LzHWMX4yltGe14afUi/CGDf4jwAb074Qc233fx9zco/ymP/5fyLzKPX73f+zMp+rY/7PuR079H6SdS318Sl9g7+Iyzy2Vfgxu2cYtuT9OudhxnDiYue0NXud+DP3KI+Vg39r8SFtJ23KntnI/6Myn/MuyH5b1il9R9/OumKP0VhF3Eyv59f92fvBmnDCluqVYdSDuaT7N+fy0TcYz/fnRnn1MNpA34tMGxM/856Vufe1S2hpvUA9vvS/UkoppZRSSimllFJKXU07EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREZE75B+Hl45q2TuOnAAAAVNta0JU+s7K/gB/pYUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic7dbhaYNgFIZRB3ERB3EQF3EQB3ERB7G8gQu3piH/ignngUObT/vrTWzOU5IkSZIkSZIkSZIkSZIkSZIkSR/RcRznvu9P5znLtXf3v7pP929d13Mcx3OapsfP7Bj9LPfUvXUWy7I8XscwDH++h3TvsmOVfbNhdq3N+z21f9U3v/6N7l+263tWOeuf5XqdffvG2b+6XtP9y3O+71//1+d5fto/1+z/fWXbeu7X79u2/frM9+e//b+v+h7X96v3QK7Vd/ucRdWfHddrkiRJkiRJkiRJ+vcGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4QD8K+ay4UtoqZgAAKhdta0JU+s7K/gB/1PAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic7X0ruOwo1vaSSCwSicQikUgkFhmJxCIjkVgkEhmJjYyMjI0smX9R+5zunp7p+dT/1Ihac+k+VXvXCbAu77suVObnfTaeANqzkS3G10Zgh6PDAnBdxQVrAN+FfsPzYh3ggQoQAbYKG9CeJMF33ZPZsYTB8c18c/zxQ28AlZvd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Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIEZpcmV3b3JrcyBDUzYgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE5LTA1LTI3VDIxOjIxOjQzWjwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA1LTI3VDIxOjIyOjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/EctQAACAASURBVHic7L35j2RXduf3Oefe92LJrfYqVrGKLNbCtUk2e180LTc1wgjSQB4NBBmGARswYNiA/x3/A4YljzGeGY+FkSyNpLZb3ZR6Fdcm2WRz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"; + } + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/DanfeNFe.cs b/NFe.Danfe.Html/Dominio/DanfeNFe.cs new file mode 100644 index 000000000..755068a34 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/DanfeNFe.cs @@ -0,0 +1,382 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +#region + +using System; +using System.Collections.Generic; +using DFe.Classes.Flags; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Informacoes.Transporte; +using NFe.Danfe.Html.CrossCutting; + +#endregion + +namespace NFe.Danfe.Html.Dominio +{ + public class DanfeNFe + { + #region Propriedades + + public Destinatario Destinatario { get; } + + public Emitente Emitente { get; } + + public string Chave { get; } + + public decimal ValorTotNota { get; } + + public string NumNota { get; } + + public string SerieNota { get; } + + /// + /// Status da nota + /// + public Status Status { get; } + + /// + /// Tipo operação + /// 0 - Entrada; 1 - Saida + /// + public string TipoOper { get; } + + /// + /// Inscrição estadual do substituto tributário + /// + public string IeSt { get; } + + /// + /// True, ambiente de produção + /// + public bool Producao { get; } + + /// + /// Natureza da operação + /// + public string NatOperacao { get; } + + /// + /// Protocolo de autorização de uso + /// + public string ProtocoloUso { get; } + + /// + /// Data emissão + /// + public DateTime DataEmissao { get; } + + /// + /// Data Entrada Saida + /// + public DateTime? DataEntSaida { get; } + + public ICollection Faturas { get; } + + public Imposto Imposto { get; } + + /// + /// Transportadora + /// + public Transportadora Transportadora { get; } + + /// + /// Volumes + /// + public ICollection Volumes { get; } + + /// + /// Produtos + /// + public ICollection Produtos { get; } + + /// + /// Dados sobre serviço + /// + public Issqn ISsqn { get; } + + /// + /// Informações adicionais + /// + public InfAdic Inf { get; } + + /// + /// Credito empresa Software + /// + public string Creditos { get; } + + #endregion + + #region Construtor + + ///// + ///// + ///// Destinatario + ///// Emitente + ///// Chave + ///// Valor total da nota + ///// Número da nota + ///// Série da nota + ///// Status da nota + ///// 0 - Entrada; 1 - Saida + ///// Inscrição estadual + ///// Natureza da operação + ///// Protocolo de uso + ///// Data da emissão + ///// data de saida + ///// Faturas + ///// Impostos + ///// Transportadora + ///// volumes + ///// Produtos + ///// + ///// Informações adicionais + + //public DanfeNFe(Destinatario destinatario, Emitente emitente, string chave, decimal valorTotNota, string numNota, string serieNota, + // Status status, string tipoOper, string ieSt, string natOperacao, string protocoloUso, DateTime dataEmissao, + // DateTime dataEntSaid, ICollection faturas, Imposto imposto, Transportadora transportadora, + // ICollection volumes, ICollection produtos, Issqn issqn, InfAdic inf, string creditos) + //{ + // Destinatario = destinatario; + // Emitente = emitente; + // Chave = chave; + // ValorTotNota = valorTotNota; + // NumNota = numNota; + // SerieNota = serieNota; + // Status = status; + // TipoOper = tipoOper; + // IeSt = ieSt; + // NatOperacao = natOperacao; + // ProtocoloUso = protocoloUso; + // DataEmissao = dataEmissao; + // DataEntSaida = dataEntSaid; + // Faturas = faturas; + // Imposto = imposto; + // Transportadora = transportadora; + // Volumes = volumes; + // Produtos = produtos; + // ISsqn = issqn; + // Inf = inf; + // Creditos = creditos; + //} + + + /// + /// ´ + /// + /// + /// Status + /// Número do protocolo retornado pela SEFAZ + /// Créditos + /// ISSQN + public DanfeNFe(Classes.NFe nfe, Status status,string protocolo, string creditos, Issqn issqn = null, string logo = "") + { + if (nfe == null) throw new ArgumentNullException(nameof(nfe)); + if(nfe.infNFe.ide.mod!=ModeloDocumento.NFe) throw new InvalidOperationException("Modelo da nota imcompatível com o esperado 55"); + + #region Emitente + + var doc = nfe.infNFe.emit.CNPJ + nfe.infNFe.emit.CPF; + var enderecoEmit = new Endereco(nfe.infNFe.emit.enderEmit.xLgr, nfe.infNFe.emit.enderEmit.xBairro, + nfe.infNFe.emit.enderEmit.xMun, nfe.infNFe.emit.enderEmit.nro, nfe.infNFe.emit.enderEmit.CEP, + nfe.infNFe.emit.enderEmit.UF.ToString(), nfe.infNFe.emit.enderEmit.fone.ToString(), nfe.infNFe.emit.enderEmit.UF.ToString()); + Emitente = new Emitente(nfe.infNFe.emit.xNome, nfe.infNFe.emit.IE, doc, logo, enderecoEmit); + + #endregion + + #region Transportadora + + if (nfe.infNFe.transp?.transporta != null) + { + var placa = ""; + var rntc = ""; + + + if (nfe.infNFe.transp.veicTransp != null) + { + placa = nfe.infNFe.transp.veicTransp.placa; + rntc = nfe.infNFe.transp.veicTransp.RNTC; + } + var frete = ""; + switch (nfe.infNFe.transp.modFrete) + { + case ModalidadeFrete.mfContaEmitenteOumfContaRemetente: + frete = "Remet/Dest"; + break; + case ModalidadeFrete.mfContaDestinatario: + frete = "Destinatário"; + break; + case ModalidadeFrete.mfContaTerceiros: + frete = "Terceiros"; + break; + case ModalidadeFrete.mfProprioContaRemente: + frete = "Remetente"; + break; + case ModalidadeFrete.mfProprioContaDestinatario: + frete = "Próprio Destinatário"; + break; + case ModalidadeFrete.mfSemFrete: + frete = "Sem Frete";break; + + } + + var doc1 = nfe.infNFe.transp.transporta.CNPJ + nfe.infNFe.transp.transporta.CPF; + Transportadora = new Transportadora(new Endereco(nfe.infNFe.transp.transporta.xEnder, "", + nfe.infNFe.transp.transporta.xMun, "", "", nfe.infNFe.transp.transporta.UF, "", ""), + doc1, nfe.infNFe.transp.transporta.xNome, placa, rntc, nfe.infNFe.transp.transporta.IE, frete); + + #region Reboque + + if (nfe.infNFe.transp?.reboque!=null) + { + var reboque = new List(); + foreach (var item in nfe.infNFe.transp.reboque) + { + reboque.Add(new Reboque (item.placa,item.RNTC,item.UF)); + } + + Transportadora.Reboque = reboque; + } + + + #endregion + } + + + #region Volume + + if (nfe.infNFe.transp?.vol != null) + { + Volumes = new List(); + foreach (var item in nfe.infNFe.transp.vol) + { + Volumes.Add( + new Volume(item.qVol, item.esp, item.pesoB ?? 0, item.pesoL ?? 0, item.marca, item.nVol)); + } + } + + #endregion + + #endregion + + #region Destinatario + + Endereco endereco = null; + var dest = nfe.infNFe.dest; + if (dest != null) + { + var cpfcnpj = dest.CPF + dest.CNPJ; + if (dest.enderDest != null) + { + endereco = new Endereco(dest.enderDest.xLgr, dest.enderDest.xBairro, dest.enderDest.xMun, dest.enderDest.nro, + dest.enderDest.CEP, dest.enderDest.UF, dest.enderDest.fone.ToString(), dest.enderDest.UF); + } + Destinatario = new Destinatario(dest.xNome,cpfcnpj, dest.IE, endereco); + } + + + #endregion + + #region Protocolo + + ProtocoloUso = protocolo; + #endregion + + #region Produtos + + Produtos = new List(); + nfe.infNFe.det.ForEach(item => + { + var st = ""; + decimal valorIcms=0; + decimal icmsBaseCalculo = 0; + decimal pIcms = 0; + if (item.imposto.ICMS != null) + { + var cst = item.imposto.ICMS.TipoICMS.Cst(); + var csosn = item.imposto.ICMS.TipoICMS.Csosn(); + st = cst + csosn; + valorIcms = item.imposto.ICMS.TipoICMS.vICMS(); + icmsBaseCalculo = item.imposto.ICMS.TipoICMS.vBC(); + pIcms = item.imposto.ICMS.TipoICMS.pICMS(); + } + + Produtos.Add(new Produto(item.prod.cProd, item.prod.xProd, item.infAdProd, + item.prod.uTrib, item.prod.qTrib, item.prod.vUnTrib, valorIcms, item.prod.NCM, item.prod.CFOP.ToString(), + st, icmsBaseCalculo,pIcms,item.imposto?.IPI?.TipoIPI.pIPI(), item.imposto?.IPI?.TipoIPI.vIPI(),item.prod.vProd)); + + }); + + #endregion + + #region Faturas + + Faturas = new List(); + nfe.infNFe.cobr?.dup?.ForEach(item => + { + var data = item.dVenc ?? CrossCutting.Utils.ObterDataBrasil(); + Faturas.Add(new Fatura(item.nDup, data, item.vDup)); + }); + + + #endregion + + #region Status + + Producao = nfe.infNFe.ide.tpAmb == TipoAmbiente.Producao; + Status = status; + + #endregion + + #region Inf Adicionais + + var infComplento = ""; + var infAdFisco = ""; + + if (nfe.infNFe.infAdic != null) + { + infComplento = nfe.infNFe.infAdic.infCpl; + infAdFisco = nfe.infNFe.infAdic.infAdFisco; + } + + Inf = new InfAdic(infComplento, infAdFisco); + #endregion + + #region Imposto + + Imposto = new Imposto(nfe.infNFe.total.ICMSTot.vBC, nfe.infNFe.total.ICMSTot.vICMS, nfe.infNFe.total.ICMSTot.vBCST, + nfe.infNFe.total.ICMSTot.vST, nfe.infNFe.total.ICMSTot.vProd, nfe.infNFe.total.ICMSTot.vFrete, + nfe.infNFe.total.ICMSTot.vSeg, nfe.infNFe.total.ICMSTot.vDesc, nfe.infNFe.total.ICMSTot.vOutro, + nfe.infNFe.total.ICMSTot.vIPI, nfe.infNFe.total.ICMSTot.vNF,nfe.infNFe.total.ICMSTot.vTotTrib ?? 0, + nfe.infNFe.total.ICMSTot.vPIS, nfe.infNFe.total.ICMSTot.vCOFINS, nfe.infNFe.total.ICMSTot.vICMSUFRemet, + nfe.infNFe.total.ICMSTot.vICMSUFDest); + + + + #endregion + + Creditos = creditos; + ISsqn = issqn; + Chave = nfe.infNFe?.Id?.Replace("NFe", ""); + DataEmissao = nfe.infNFe.ide.dhEmi.ConverterFusoHorarioBrasil(); + DataEntSaida = nfe.infNFe.ide.dhSaiEnt?.DateTime; + NatOperacao = nfe.infNFe.ide.natOp; + IeSt = nfe.infNFe.emit?.IEST; + TipoOper = nfe.infNFe.ide.tpNF == TipoNFe.tnEntrada ? "0" : "1"; + ValorTotNota = Imposto.vNF; + NumNota = nfe.infNFe.ide.nNF.ToString(); + SerieNota = nfe.infNFe.ide.serie.ToString(); + + } + + + #endregion + } +} diff --git a/NFe.Danfe.Html/Dominio/Destinatario.cs b/NFe.Danfe.Html/Dominio/Destinatario.cs new file mode 100644 index 000000000..ab764a2f5 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Destinatario.cs @@ -0,0 +1,69 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Destinatario + { + #region Propriedades + + /// + /// Nome + /// + public string Nome { get; } + + /// + /// / + /// + public string CnpjCpf { get; } + + /// + /// Inscrição estadual + /// + public string Ie { get; } + + public Endereco Endereco { get; } + + #endregion + + #region Construtor + + /// + /// NFe + /// + /// Nome + /// CPF ou CNPJ + /// Inscrição estadual + /// Endereço + public Destinatario(string nome, string cnpjCpf, string ie, Endereco endereco) + { + Nome = nome; + CnpjCpf = cnpjCpf; + Ie = ie; + Endereco = endereco; + } + + /// + /// NFCe + /// + /// Nome + /// CPF ou CNPJ + /// Inscrição estadual + /// Endereço + public Destinatario(string nome, string cnpjCpf, Endereco endereco) + { + Nome = nome; + CnpjCpf = cnpjCpf; + Endereco = endereco; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Documento.cs b/NFe.Danfe.Html/Dominio/Documento.cs new file mode 100644 index 000000000..80918cfb5 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Documento.cs @@ -0,0 +1,24 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Documento + { + #region Propriedades + + /// + /// Uma string Html contendo dados da DANFE + /// + public string Html { get; set; } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Emitente.cs b/NFe.Danfe.Html/Dominio/Emitente.cs new file mode 100644 index 000000000..ff12601dd --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Emitente.cs @@ -0,0 +1,61 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Emitente + { + #region Propriedades + + /// + /// Nome + /// + public string Nome { get; } + + /// + /// Inscrição estadual + /// + public string Ie { get; } + + /// + /// Documento CPF ou CNPJ + /// + public string CnpjCpf { get; } + + /// + /// Logo empresa Base64 + /// + public string Logo { get; } + + public Endereco Endereco { get; } + + #endregion + + #region Construtor + + /// + /// + /// Nome + /// Inscrição estadual + /// CPF ou CNPJ + /// Imagem em base64 + /// Endereço + public Emitente(string nome, string ie, string cnpjCpf, string logo, Endereco endereco) + { + Nome = nome; + Ie = ie; + CnpjCpf = cnpjCpf; + Logo = logo; + Endereco = endereco; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Endereco.cs b/NFe.Danfe.Html/Dominio/Endereco.cs new file mode 100644 index 000000000..54383a0c8 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Endereco.cs @@ -0,0 +1,61 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Endereco + { + #region Propriedades + + public string NomeEnd { get; } + + public string Bairro { get; } + + public string Cidade { get; } + + public string Num { get; } + + public string Cep { get; } + + public string Uf { get; } + + public string Tel { get; } + + public string Estado { get; } + + #endregion + + #region Construtor + + /// + /// + /// Endereço + /// Bairro + /// Cidade + /// Numero + /// CEP + /// UF + /// Telefone + /// Estado + public Endereco(string nomeEnd, string bairro, string cidade, string num, string cep, string uf, string tel, string estado) + { + NomeEnd = nomeEnd; + Bairro = bairro; + Cidade = cidade; + Num = num; + Cep = cep; + Uf = uf; + Tel = tel; + Estado = estado; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Fatura.cs b/NFe.Danfe.Html/Dominio/Fatura.cs new file mode 100644 index 000000000..6028b7673 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Fatura.cs @@ -0,0 +1,47 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +#region + +using System; + +#endregion + +namespace NFe.Danfe.Html.Dominio +{ + public class Fatura + { + #region Propriedades + + public string NumFatura { get; } + + public DateTime DataVencimento { get; } + + public decimal Valor { get; } + + #endregion + + #region Construtor + + /// + /// + /// Numero da fatura + /// Data do vencimento + /// Valor + public Fatura(string numFatura, DateTime dataVencimento, decimal valor) + { + NumFatura = numFatura; + DataVencimento = dataVencimento; + Valor = valor; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/FormPag.cs b/NFe.Danfe.Html/Dominio/FormPag.cs new file mode 100644 index 000000000..22d2220fb --- /dev/null +++ b/NFe.Danfe.Html/Dominio/FormPag.cs @@ -0,0 +1,44 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + /// + /// Formas de pagamento + /// + public class FormPag + { + #region Propriedades + + /// + /// Forma de pagamento + /// Dinheiro, Cartão, Débito, etc... + /// + public string Forma { get; } + + /// + /// Valor + /// + public decimal Valor { get; } + + #endregion + + #region Construtor + + /// Initializes a new instance of the class. + public FormPag(string forma, decimal valor) + { + Forma = forma; + Valor = valor; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Imposto.cs b/NFe.Danfe.Html/Dominio/Imposto.cs new file mode 100644 index 000000000..6d83a291e --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Imposto.cs @@ -0,0 +1,75 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Imposto + { + #region Propriedades + + public decimal vBCIMS { get; } + + public decimal vICMS { get; } + + public decimal? vBCICMSST { get; } + + public decimal? vICMSST { get; } + + public decimal vProd { get; } + + public decimal vFrete { get; } + + public decimal vSeg { get; } + + public decimal vDesc { get; } + + public decimal vOutro { get; } + + public decimal vIpi { get; } + + public decimal vNF { get; } + + public decimal vTotTrib { get; } + + public decimal vPis { get; } + + public decimal vCofins { get; } + + public decimal? vICMSUFRemet { get; } + + public decimal? vICMSUFDest { get; } + + #endregion + + + public Imposto(decimal vBcims, decimal vIcms, decimal? vBcicmsst, decimal? vIcmsst, + decimal vProd, decimal vFrete, decimal vSeg, decimal vDesc, decimal vOutro, decimal vIpi, + decimal vNf,decimal vTotTrib,decimal vPis,decimal vCofins,decimal? vICMSUFRemet, decimal? vICMSUFDest) + { + vBCIMS = vBcims; + vICMS = vIcms; + vBCICMSST = vBcicmsst; + vICMSST = vIcmsst; + this.vProd = vProd; + this.vFrete = vFrete; + this.vSeg = vSeg; + this.vDesc = vDesc; + this.vOutro = vOutro; + this.vIpi = vIpi; + vNF = vNf; + this.vTotTrib = vTotTrib; + this.vPis = vPis; + this.vCofins = vCofins; + this.vICMSUFRemet = vICMSUFRemet; + this.vICMSUFDest = vICMSUFDest; + + } + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/InfAdic.cs b/NFe.Danfe.Html/Dominio/InfAdic.cs new file mode 100644 index 000000000..19627325d --- /dev/null +++ b/NFe.Danfe.Html/Dominio/InfAdic.cs @@ -0,0 +1,36 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class InfAdic + { + #region Propriedades + + /// + /// Informações complementares + /// + public string InfComplementares { get; } + + /// + /// Informações destinadas ao fisco + /// + public string InfFisco { get; } + + + public InfAdic(string infComplementares, string infFisco) + { + InfComplementares = infComplementares; + InfFisco = infFisco; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Issqn.cs b/NFe.Danfe.Html/Dominio/Issqn.cs new file mode 100644 index 000000000..87436b3f3 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Issqn.cs @@ -0,0 +1,39 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Issqn + { + #region Propriedades + + /// + /// Inscrição Municipal + /// + public string Im { get; set; } + + /// + /// Valor total dos servicço + /// + public decimal ValorTotServ { get; set; } + + /// + /// Base de calculo + /// + public decimal BaseCalculo { get; set; } + + /// + /// Valor ISSQN + /// + public decimal ValorIssqn { get; set; } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Pagamento.cs b/NFe.Danfe.Html/Dominio/Pagamento.cs new file mode 100644 index 000000000..5003fa88d --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Pagamento.cs @@ -0,0 +1,65 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +#region + +using System.Collections.Generic; + +#endregion + +namespace NFe.Danfe.Html.Dominio +{ + public class Pagamento + { + #region Propriedades + + /// + /// Valor total em compras + /// + public decimal ValorTotal { get; } + + /// + /// Valor total em descontos + /// + public decimal ValorTotDesconto { get; } + + /// + /// Valor total devido + /// + public decimal ValorTotDevido { get; } + + /// + /// Troco devido + /// + public decimal? Troco { get; } + + /// + /// Formas de pagamento + /// + public ICollection FormasPagamentos { get; } + + #endregion + + #region Construtor + + /// Initializes a new instance of the class. + public Pagamento(decimal valorTotal, decimal valorTotDesconto, decimal valorTotDevido, decimal? troco, + ICollection formasPagamentos) + { + ValorTotal = valorTotal; + ValorTotDesconto = valorTotDesconto; + ValorTotDevido = valorTotDevido; + Troco = troco; + FormasPagamentos = formasPagamentos; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Produto.cs b/NFe.Danfe.Html/Dominio/Produto.cs new file mode 100644 index 000000000..8d70e7c55 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Produto.cs @@ -0,0 +1,154 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Produto + { + #region Propriedades + + /// + /// Código do produto + /// + public string Codigo { get; } + + /// + /// Descrição do produto + /// + public string Descricao { get; } + + /// + /// Informações adicionais do produto + /// + public string InfAdic { get; } + + /// + /// Unidade do produto + /// + public string Unidade { get; } + + /// + /// Quantidade do produto + /// + public decimal Quantidade { get; } + + /// + /// Valor unitário do produto + /// + public decimal ValorUnitario { get; } + + /// + /// Valor IMCS + /// + public decimal VIcms { get; } + + /// + /// Código NNCM + /// + public string Ncm { get; } + + /// + /// Código CFOP + /// + public string Cfop { get; } + + /// + /// Origem Mercadoria + /// + public string Origem { get; } + + /// + /// Base de calculo + /// + public decimal BaseCalculo { get; } + + /// + /// Percentual ICMS + /// + public decimal PIcms { get; } + + /// + /// IPI + /// + public decimal? ValorIpi { get; } + + /// + /// Percentual IPI + /// + public decimal? PIpi { get; } + + /// + /// Valor Total + /// + public decimal ValorTotal { get; set; } + + #endregion + + #region Construtor + + /// + /// NFe + /// + /// Código + /// Descrição + /// Informações adicionais + /// Unidade de medida + /// Quantidade + /// Valor unitário + /// Valor do ICMS + /// Código NCM + /// Código CFOP + /// {0- Nacional | 1 Importado} + /// Base de cálculo + /// Percentual ICMS + /// Percentual IPI + /// Valor percentual do IPI + /// Valor Total + public Produto(string codigo, string descricao, string infAdic, string unidade, decimal quantidade, decimal valorUnitario, + decimal valorIcms, string ncm, string cfop, string origem, decimal baseCalculo, decimal pIcms, decimal? pIpI, + decimal? vIpi,decimal valorTotal) + { + Codigo = codigo; + Descricao = descricao; + InfAdic = infAdic; + Unidade = unidade; + Quantidade = quantidade; + ValorUnitario = valorUnitario; + VIcms = valorIcms; + Ncm = ncm; + Cfop = cfop; + Origem = origem; + BaseCalculo = baseCalculo; + PIcms = pIcms; + ValorIpi = vIpi; + PIpi = pIpI; + ValorTotal = valorTotal; + } + + /// + /// NFCe + /// + /// Código + /// Descrição + /// Unidade de medida + /// Quantidade + /// Valor unitário + public Produto(string codigo, string descricao, string unidade, decimal quantidade, decimal valorUnitario) + { + Codigo = codigo; + Descricao = descricao; + Unidade = unidade; + Quantidade = quantidade; + ValorUnitario = valorUnitario; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/ProdutoNFCe.cs b/NFe.Danfe.Html/Dominio/ProdutoNFCe.cs new file mode 100644 index 000000000..3869a9eac --- /dev/null +++ b/NFe.Danfe.Html/Dominio/ProdutoNFCe.cs @@ -0,0 +1,64 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class ProdutoNFCe + { + #region Propriedades + + /// + /// Código do produto + /// + public string Codigo { get; } + + /// + /// Descrição do produto + /// + public string Descricao { get; } + + /// + /// Unidade do produto + /// + public string Unidade { get; } + + /// + /// Quantidade do produto + /// + public decimal Quantidade { get; } + + /// + /// Valor unitário do produto + /// + public decimal ValorUnitario { get; } + + /// + /// Valor total do produto + /// + public decimal ValorTotal { get; } + + #endregion + + #region Construtor + + /// Initializes a new instance of the class. + public ProdutoNFCe(string codigo, string descricao, string unidade, decimal quantidade, decimal valorUnitario, decimal valorTotal) + { + Codigo = codigo; + Descricao = descricao; + Unidade = unidade; + Quantidade = quantidade; + ValorUnitario = valorUnitario; + ValorTotal = valorTotal; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Reboque.cs b/NFe.Danfe.Html/Dominio/Reboque.cs new file mode 100644 index 000000000..6aab9bb94 --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Reboque.cs @@ -0,0 +1,18 @@ +namespace NFe.Danfe.Html.Dominio +{ + public class Reboque + { + public string Placa { get; } + + public string Rntc { get; } + public string Uf { get; } + + /// Initializes a new instance of the class. + public Reboque(string placa, string rntc, string uf) + { + Placa = placa; + Rntc = rntc; + Uf = uf; + } + } +} diff --git a/NFe.Danfe.Html/Dominio/Transportadora.cs b/NFe.Danfe.Html/Dominio/Transportadora.cs new file mode 100644 index 000000000..e22083fab --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Transportadora.cs @@ -0,0 +1,87 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +using System.Collections.Generic; + +namespace NFe.Danfe.Html.Dominio +{ + public class Transportadora + { + #region Propriedades + + public Endereco Endereco { get; } + + /// + /// Documento CPF ou CNPJ + /// + public string CnpjCpf { get; } + + /// + /// Nome + /// + public string Nome { get; } + + /// + /// Placa + /// + public string Placa { get; } + + /// + /// RNTC + /// + public string CodAntt { get; } + + + /// + /// Inscrição Estadual + /// + public string Ie { get; } + + /// + /// Responsabilidade pelo frete + /// Emitente|Destinatário + /// + public string FretePorConta { get; } + + /// + /// Reboque + /// + public List Reboque { get; set; } + + #endregion + + #region Construtor + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// {Emitente|Destinatário} + public Transportadora(Endereco endereco, string cnpjCpf, string nome, string placa, + string codAntt, string ie, + string fretePorConta) + { + Endereco = endereco; + CnpjCpf = cnpjCpf; + Nome = nome; + Placa = placa; + CodAntt = codAntt; + Ie = ie; + FretePorConta = fretePorConta; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Dominio/Volume.cs b/NFe.Danfe.Html/Dominio/Volume.cs new file mode 100644 index 000000000..bb93c3b3c --- /dev/null +++ b/NFe.Danfe.Html/Dominio/Volume.cs @@ -0,0 +1,41 @@ +// =================================================================== +// Empresa: DSBR - Empresa de Desenvolvimento de Sistemas +// Projeto: DSBR - Automação Comercial +// Autores: Valnei Filho, Vagner Marcelo +// E-mail: dsbrbrasil@yahoo.com.br +// Data Criação: 10/04/2020 +// Todos os direitos reservados +// =================================================================== + + +namespace NFe.Danfe.Html.Dominio +{ + public class Volume + { + #region Propriedades + + public decimal? Quantidade { get; } + + public string Especie { get; } + + public decimal PesoBruto { get; } + + public decimal PesoLiq { get; } + + public string Marca { get; } + + public string NumeroVolume { get; } + + public Volume(decimal? quantidade, string especie, decimal pesoBruto, decimal pesoLiq, string marca,string numeroVolume) + { + Quantidade = quantidade; + Especie = especie; + PesoBruto = pesoBruto; + PesoLiq = pesoLiq; + Marca = marca; + NumeroVolume = numeroVolume; + } + + #endregion + } +} \ No newline at end of file diff --git a/NFe.Danfe.Html/Interfaces/IDanfeHtml2.cs b/NFe.Danfe.Html/Interfaces/IDanfeHtml2.cs new file mode 100644 index 000000000..4007f6326 --- /dev/null +++ b/NFe.Danfe.Html/Interfaces/IDanfeHtml2.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using NFe.Danfe.Html.Dominio; + +namespace NFe.Danfe.Html.Interfaces +{ + public interface IDanfeHtml2 + { + #region Propriedades + + /// + /// Tipo da DANFE + /// + string TipoDanfe { get; } + + #endregion + + /// + /// Obter Danfe + /// + /// + Task ObterDocHtmlAsync(); + } +} diff --git a/NFe.Danfe.Html/NFe.Danfe.Html.csproj b/NFe.Danfe.Html/NFe.Danfe.Html.csproj new file mode 100644 index 000000000..88310cdce --- /dev/null +++ b/NFe.Danfe.Html/NFe.Danfe.Html.csproj @@ -0,0 +1,32 @@ + + + + netstandard2.0 + Zeus.Net.NFe.Danfe.Html + Zeus.Net.NFe.Danfe.Html + ZeusAutomacao + Zeus Automacao + Biblioteca para geração de DANFE em HTML da NF-e. + + + + + + + + + + True + True + Resource.resx + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + diff --git a/NFe.Danfe.Html/Readme.txt b/NFe.Danfe.Html/Readme.txt new file mode 100644 index 000000000..3867a76b7 --- /dev/null +++ b/NFe.Danfe.Html/Readme.txt @@ -0,0 +1,57 @@ +*************************************************************************************************** +Instruçoes para criação dos testes untarios +*************************************************************************************************** +OBS:Os metodos dispostos nas classes Enumeradores, Extensions e Utils grande parte destes metodos já existem +no Zeus, ao administrador, a atribuição de referenciar os metodos para as classes ja existentes no Zeus. + +1ª) Criar um projeto de testes ou usar o que já existe +2ª) Testar a feature da seguinte forma: +a) Obter uma string com as tgas ( que também são totalmente compativeis com as classes do Zeus) +b) Em modo debug, verificar a saida do relatorio pelo numero da chave localizado no diretorio D:/ ou outro escolhido pelo DEV +Finalmente agradeço imensamente à todos que ja contribuiram ao projeto + + [TestMethod] + [Description("Verificar criação da DANFE Emissão Normal NFe. O objetivo é verificar se as DANFES foram impressas corretamente")] + public void ObterDanfeNFeModelo55() + { + + var listNfe = new List(); + //var list1 = "3125208677VENDA MERCADORIA551318472019-03-28T00:00:00-03:002019-04-01T00:00:00-03:0012313720511311090Fluxus 4.016610594758000159ATHOR BICICLETAS EIRELIATHOR BICICLETASR MONSENHOR O. J. DE ARAUJO1200GUADALUPE3137205LAGOA DA PRATAMG355900001058Brasil37326154130011066980039332806205000155BIKETOP COMERCIO E SERVICOS DE BICICLETAS EIRELIR ALTINO SERBETO DE BARROS173LOJA 01PITUBA2927408SALVADORBA418304921058BRASIL719880151741155731233sergiodcseabra@hotmail.com15438698000107038838446830041657898540935875BIC. ARO 29 TOP ORION 21V SHIMANO F. A.DISCO871200106101UN2936.9000000001873.807898540935875UN2936.9000000001420.0950031873.807.00131.17999501873.8010.00187.38011873.801.6530.92011873.807.60142.410041687898540970456BIC. ARO 29 TOP ORION 21V SHIMANO F. A.DISCO T15871200106101UN1936.900000000936.907898540970456UN1936.9000000001210.045003936.907.0065.5899950936.9010.0093.6901936.901.6515.4601936.907.6071.203747.60262.330.000.000.000.000.000.003747.600.000.000.000.00374.760.0061.84284.810.004122.36840.17004186727686DOUGLERSON JULIANO CORREIAAV. ISABEL DE CASTRO, 80LAGOA DA PRATAMG4UN61.82061.8200318474122.360.004122.360012019-03-304122.360154122.36Nosso Doc: 116020 - Cliente: 12186 PIS: R$ 61,84 - COFINS: R$ 284,81 Trib aprox R$: 390,48 Federal e 449,69 Estadual (22,42%) Fonte: IBPT Forma Pag Duplicata: 4.122,36gKSUMwJCPhKWKJVLpoQ81YRXRtc=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"; + //var list2 ="2900000030VENDA552292022-08-14T03:23:53+00:00112919207110211100SgOne 2.7.244818198000190DEMONSTRACAODEMONSTRACAORua Cândido Viterbo de Santa Rosa19SEM COMPLEMENTOBuraquinho2919207Lauro de FreitasBA427092201058BRASIL1893703630000000004763603101280548592NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCALRua Joel HamiltonsncasaItapua2927408SalvadorBA416207501058BRASIL9vagner.frb@gmail.com13937073000156010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001120.89010299435.000.00000.00990.000.00000.00010908SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL8712001000000005102UN1.0000435.0000000000435.00SEM GTINUN1.0000435.00000000001241.78010299435.000.00000.00990.000.00000.000.000.000.000.000.000.000.000.000.000.000.00870.000.000.000.000.000.000.000.000.000.00870.00362.6799869870.00870.000012022-08-14870.0001870.000.00TestesPx/ADiZ6O/CrNDrqSFeN8Eu2M4s=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"; + //var list3 = "29054105505102 - VENDA1551106382016-03-31T17:05:00-03:002016-04-01T07:00:00-03:00112919207115210033.10.7912278352000192DORIA ALIMENTOS LTDADORIA ALIMENTOSRUA GERINO DE SOUZA FILHO1808LOTE 4 E 5, GALPAO 8ITINGA2919207Lauro de FreitasBA427000001058BRASIL7130263388101898742321542651000183TEMPERO DA FAZENDA ALIMENTOS PARALELA EIRELI - EPPAVENIDA LUIS VIANA6180LOJA 03PARALELA2927408SalvadorBA417301011058BRASIL7121075810112147523513937073000156P-0032MEXILHAO DESCASCADO CG030739005102KG10.000023.9900000000239.90KG10.000023.99000000001220341.17141.1118.000025.4001239.900.65001.5601239.903.00007.20P-0009FILE DE PANGA CG030462905102KG10.000011.9900000000119.90KG10.000011.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606P-0012FILE DE SALMAO PREMIUM 1100/1500 CG030481005102KG25.000030.9900000000774.75KG25.000030.990000000012400606141.1125.400.000.000.000.000.000.001134.550.000.000.000.000.001.567.200.001134.550.0005CX253493200000084692016-04-141134.55#### NAO ACEITAMOS RECLAMACOES APOS O RECEBIMENTO E CONFERENCIA DAS MERCADORIAS! ##### TEMPERO DA FAZENDA - FERREIRA COSTAlLIZ+NpCgKf5kdE8nuh6770kBNA=bIWlb7LHWbBz33ETEHSdpTdtbA+FKiiW2jd+2kKaVBwefLdiIQUx9mTtAdkfdaas97EwWqbmAj4S\r\noaKOR8Phzz2mIs91ck6hfuRDaXgBI3KbCXN+0B9K9FFdDOTdiZ00XXqQoK2MMJYD+cIOso5h1Lx0\r\nb8RYRqBculfqm2U0OZE9Ldri3GjWkaJ27vOcTaDGBROZ11WDPdDP2R9B2vXfMnsfmY4m1lEshqfg\r\nypdDptg8g4i32KGQxaemaDcVYWV+wXHAYGnBqBhI6f8YVbday3tIHerOoWdOXgbl/JhYDWWd2ljX\r\n2qJqQXDlB3Ty+YkJA2roAfShUE9helTeS8e/RQ==MIIH/DCCBeSgAwIBAgIIGFJY9tMUVikwDQYJKoZIhvcNAQELBQAwdTELMAkGA1UEBhMCQlIxEzAR\r\nBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFs\r\nIGRvIEJyYXNpbCAtIFJGQjEZMBcGA1UEAxMQQUMgU0VSQVNBIFJGQiB2MjAeFw0xNTA2MTExNDE5\r\nMDBaFw0xNjA2MTAxNDE5MDBaMIHgMQswCQYDVQQGEwJCUjELMAkGA1UECBMCQkExGTAXBgNVBAcT\r\nEExBVVJPIERFIEZSRUlUQVMxEzARBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFy\r\naWEgZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEWMBQGA1UECxMNUkZCIGUtQ05Q\r\nSiBBMTESMBAGA1UECxMJQVIgU0VSQVNBMTAwLgYDVQQDEydET1JJQSBBTElNRU5UT1MgTFREQSBF\r\nUFA6MTIyNzgzNTIwMDAxOTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCI+oTkPH9U\r\n4ZQYlcLmu04bqplvgnUF4pwEUMmvbaKDcRMRW5VRZIoyyRjs4mJsHwD0/uU/VFPERPz/NDhsEjAF\r\njgRuB5WVzZavVRj0HrZ7RS2DLn4bYDWSkd3G9C4K38PXEpanBGjTqGbzYdP9TvF6Psw/Mj01qmsM\r\nbSYwaEDHNcnngGlvGAsI8BAFjuCBHcxtUjRWGRxKphauOwe2H01VNsV4KUwyrBgNWbvgYRqHWb6p\r\nmpQHK1tNjIBmE+leoejzVPfLxsSEcaTLvIP61lkrEH5jWQQewKpV32C897ha89DjWCkOYJeU3ZXn\r\nRyPLgg1efXe5kZeOn8L/LnhcOCQBAgMBAAGjggMiMIIDHjCBmQYIKwYBBQUHAQEEgYwwgYkwSAYI\r\nKwYBBQUHMAKGPGh0dHA6Ly93d3cuY2VydGlmaWNhZG9kaWdpdGFsLmNvbS5ici9jYWRlaWFzL3Nl\r\ncmFzYXJmYnYyLnA3YjA9BggrBgEFBQcwAYYxaHR0cDovL29jc3AuY2VydGlmaWNhZG9kaWdpdGFs\r\nLmNvbS5ici9zZXJhc2FyZmJ2MjAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFLKgxD1GnnzIhWwIHhAy\r\nlGVGcEFzMHEGA1UdIARqMGgwZgYGYEwBAgENMFwwWgYIKwYBBQUHAgEWTmh0dHA6Ly9wdWJsaWNh\r\nY2FvLmNlcnRpZmljYWRvZGlnaXRhbC5jb20uYnIvcmVwb3NpdG9yaW8vZHBjL2RlY2xhcmFjYW8t\r\ncmZiLnBkZjCB8wYDVR0fBIHrMIHoMEqgSKBGhkRodHRwOi8vd3d3LmNlcnRpZmljYWRvZGlnaXRh\r\nbC5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL3NlcmFzYXJmYnYyLmNybDBEoEKgQIY+aHR0cDovL2xj\r\nci5jZXJ0aWZpY2Fkb3MuY29tLmJyL3JlcG9zaXRvcmlvL2xjci9zZXJhc2FyZmJ2Mi5jcmwwVKBS\r\noFCGTmh0dHA6Ly9yZXBvc2l0b3Jpby5pY3BicmFzaWwuZ292LmJyL2xjci9TZXJhc2EvcmVwb3Np\r\ndG9yaW8vbGNyL3NlcmFzYXJmYnYyLmNybDAOBgNVHQ8BAf8EBAMCBeAwHQYDVR0lBBYwFAYIKwYB\r\nBQUHAwIGCCsGAQUFBwMEMIG7BgNVHREEgbMwgbCBGUFETUBET1JJQUFMSU1FTlRPUy5DT00uQlKg\r\nJQYFYEwBAwKgHBMaSlVMSU8gUklDQVJETyBET1JJQSBTQU5UT1OgGQYFYEwBAwOgEBMOMTIyNzgz\r\nNTIwMDAxOTKgOAYFYEwBAwSgLxMtMTkwOTE5Nzg3ODQ1MTAzNTUxNTAwMDAwMDAwMDAwMDAwMDAw\r\nMDAwMDAwMDAwoBcGBWBMAQMHoA4TDDAwMDAwMDAwMDAwMDANBgkqhkiG9w0BAQsFAAOCAgEA1bPb\r\nIV4BiqqNdKY/SdIZPoi4/C1oUsMzv89HqE/jftRA4iBIZm1dFnn5bfsQ61jIXPF/DXxHo62NF86p\r\nMOyImB2Rx/rsrDt07lTCQTF/7L43Vbc3QnpI9KsvRF58ZRvrve8rVod2XGSnXjLrACRsyLAcqeF5\r\nNGZYo8DTSc5v/IdQyf7KHcJmMb61RNeiBS4HwbVFcRuPVe4l37gAldC3VSLu4YOwJBjbtb1E+x/y\r\n+yxlwVgYKDH9/e0Z/kgT21+/zLJ7LGOF7baSNaOG+jMp2k0yTer+FNpV2OFkE5yClXn69IJQJs7/\r\nyMo0FVtJ6eszM96lX8qvd8UenxudAQD5flFwm7aIfAxAJpUIHE89ikyN2W3qrWz9Pwjzfn77YNFx\r\nv+isWT2p9kPyua9emXR4M98LtyYsICYbHXkSYwJ/ItQFFLEL0TzSqw+uznRj62YWXU+/DpRQYHPC\r\nJHCDWykhpPEqxHPVzoeNHVYmOkQ/waYd4vgjCR1Hxv4yq5byd73BqYAvYH45fmkl5I1C2+ntCmDE\r\nHQPyCS6+74VQ+5FnYMIUMJf2+pcJo18WZ5RTfRJxrr+dldldGHTu8N80iiDK4kz6X8fJEkqD4Kfk\r\n5iqIMHZiWKeaPTCBTWQIawbPNEBC39L1uvO1crkS3+gUNRooUFXiGsItGyOti7EGqSZr/mk="; + //var list4 = "4368509077VENDA DE MERCADORIAS E SERVICOS551365222019-06-11T17:00:55-03:00124313409110110101.1.78.010835909000113KRAFCHINSKI, MORAES E LINARES LTDAKRAFCHINSKI, MORAES E LINARES LTDARUA GUIA LOPES1280RONDONIA4313409NOVO HAMBURGORS934155121058BRASIL51307730100860452247332806205000155BIKETOP COMERCIO E SERVICOS DE BICICLETAS EIRELIALTINO SERBETO DE BARROS173LOJA 01PITUBA2927408SALVADORBA418304921058BRASIL719880151741155731233005110SEM GTIN1 - CAMISA CANNONDALE PRETA/RAJADA CINZA LETRA AMARELA-ZIPER CURTO-MASC TAM G611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.90005115SEM GTIN2 - CAMISA ORBEA PRETA/AZUL/BRANCA-ZIPER LOREM ISPSUM DEXTER TOLUMN MINUMN TUTES DE BONORUM ET MALORUM CURTO- MA - TAM G611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.90005141SEM GTIN3 - CAMISA ORBEA PRETA/AZUL/BRANCA-ZIPER LOREM ISPSUM DEXTER TOLUMN MINUMN TUTES DE BONORUM ET MALORUM CURTO- MA - TAM G611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.9000455750179153806034 - CAMISA ORBEA PRETA/AZUL/BRANCA-ZIPER LOREM ISPSUM DEXTER TOLUMN MINUMN TUTES DE BONORUM ET MALORUM CURTO- MA - TAM6506100001013006102UN1.000010.250000000010.255017915380603UN1.000010.25000000001.15120039.104.00000.36999500.000.00000.00019.100.65000.06019.103.00000.2700455840326111622625 - CAMISA ORBEA PRETA/AZUL/BRANCA-ZIPER LOREM ISPSUM DEXTER TOLUMN MINUMN TUTES DE BONORUM ET MALORUM CURTO- MA - TAM G6506100001013006102UN1.000010.250000000010.254032611162262UN1.000010.25000000001.15120039.104.00000.36999500.000.00000.00019.100.65000.06019.103.00000.2700021778989541645886 - CAMISA ORBEA PRETA/AZUL/BRANCA-ZIPER LOREM ISPSUM DEXTER TOLUMN MINUMN TUTES DE BONORUM ET MALORUM CURTO- MA - TAM8714999001002006102RL2.00008.450000000016.907898954164588RL2.00008.45000000002.001200314.904.00000.60999500.000.00000.000114.900.65000.100114.903.00000.4500423378918280092997 - FAROL LED RECARREGAVEL USB 180 LUMENS PRETO WS-929851210006102UN5.000024.5000000000122.507891828009299UN5.000024.500000000011.2512003111.254.00004.45999500.000.00000.0001111.250.65000.7201111.253.00003.34004876SEM GTIN8 - GPS CICLOCOMPUTADOR ATRIO IRON BL-091 (CONECTA COM STRAVA)902920106102UN2.0000124.9500000000249.90SEM GTINUN2.0000124.950000000010003249.907.000017.49999500.000.00000.0001249.900.65001.6201249.903.00007.50002264SEM GTIN 9 - KIT REFLETORES QUADRO/RODA + CAMPAINHA + ESPELHO871499906102UN5.00002.845000000014.23SEM GTINUN5.00002.84500000001.751200312.484.00000.50999500.000.00000.000112.480.65000.080112.483.00000.37004804789182801005910 - LUVA MTB FECHADA (DEDO LONGO) GEL PRETA/CINZA TAM XL WS-1003871499906102UN5.000017.950000000089.757891828010059UN5.000017.95000000008.501200381.254.00003.25999500.000.00000.000181.250.65000.530181.253.00002.44002669790800590103811 - PASTILHA FREIO DISCO MOD SHIMANO BS01 (QUADRADA)871494906102PR100.00003.9500000000395.007908005901038PR100.00003.9500000000245.4912003149.514.00005.98999500.000.00000.0001149.510.65000.9701149.513.00004.49005026SEM GTIN12 - PEDAL CLIP MTB WELLGO M919 ALUM PRETO871499106102UN1.000069.950000000069.95SEM GTINUN1.000069.95000000001000369.954.00002.80999500.000.00000.000169.950.65000.450169.953.00002.10002888789866550703213 - REFIL P/ MOCHILA DE HIDRATACAO 2 LITROS JW4202122019004006102UN2.000012.450000000024.907898665507032UN2.000012.45000000002.501200322.404.00000.90999500.000.00000.000122.400.65000.150122.403.00000.67005053SEM GTIN14 - SAPATILHA MTB FEM CINZA/ROSA TAM 35 IMP871494906102PAR1.000099.950000000099.95SEM GTINPAR1.000099.95000000001200399.954.00004.00999500.000.00000.000199.950.65000.650199.953.00003.00004989SEM GTIN15 - SELIM MTB GTS AZUL871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004990SEM GTIN16 - SELIM MTB GTS LARANJA871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004997SEM GTIN17 - SELIM MTB GTS VERDE871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004984SEM GTIN18 - SELIM MTB GTS VERMELHO871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004805789182800261019 -VISTA LIGHT USB (COMETA) JY-261851210006102UN4.000014.250000000057.007891828002610UN4.000014.25000000005.801200351.204.00002.05999500.000.00000.000151.200.65000.330151.203.00001.54998.7650.160.000.000.000.000.000.001280.350.000.00281.590.000.000.006.4929.980.00998.760.00017463456003025PATRUS0860423387RUA PAU BRASIL 1174NOVO HAMBURGORS315.00015.000036522998.76998.760012019-08-01332.920022019-09-01332.920032019-10-01332.9214998.76Valor Total dos Tributos: R$ 0,00 Fonte: IBPT;Ped.: 139255 Cond.: 401-PRAZO PROMOCAO 2 Vend.: Sergio Valenca1ZxXs8NY8nKY1PKnmTZFwXW2VxY=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"; + //var list5 = "4368509077VENDA DE MERCADORIAS E SERVICOS551365222019-06-11T17:00:55-03:00124313409110210101.1.78.010835909000113KRAFCHINSKI, MORAES E LINARES LTDAKRAFCHINSKI, MORAES E LINARES LTDARUA GUIA LOPES1280RONDONIA4313409NOVO HAMBURGORS934155121058BRASIL51307730100860452247332806205000155BIKETOP COMERCIO E SERVICOS DE BICICLETAS EIRELIALTINO SERBETO DE BARROS173LOJA 01PITUBA2927408SALVADORBA418304921058BRASIL719880151741155731233005110SEM GTIN1 - CAMISA CANNONDALE PRETA/RAJADA CINZA LETRA AMARELA-ZIPER CURTO-MASC TAM G611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.90005115SEM GTIN2 - CAMISA ORBEA PRETA/AZUL/BRANCA-ZIPER CURTO- MASC - TAM G611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.90005141SEM GTIN3 - CAMISA SCOTT MITCHELTON PRETA LETRAS AMARELA/BRANCA-ZIPER CURTO-MASC TAM GG611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.9000455750179153806034 - CAPACETE INFANTIL VERMELHO COELHOS (TAM P) KIDZAMO6506100001013006102UN1.000010.250000000010.255017915380603UN1.000010.25000000001.15120039.104.00000.36999500.000.00000.00019.100.65000.06019.103.00000.2700455840326111622625 - CAPACETE INFANTIL VERMELHO LISTRAS (TAM P) KIDZAMO6506100001013006102UN1.000010.250000000010.254032611162262UN1.000010.25000000001.15120039.104.00000.36999500.000.00000.00019.100.65000.06019.103.00000.2700021778989541645886 - CONDUITE TEFLON PRETO 20M8714999001002006102RL2.00008.450000000016.907898954164588RL2.00008.45000000002.001200314.904.00000.60999500.000.00000.000114.900.65000.100114.903.00000.4500423378918280092997 - FAROL LED RECARREGAVEL USB 180 LUMENS PRETO WS-929851210006102UN5.000024.5000000000122.507891828009299UN5.000024.500000000011.2512003111.254.00004.45999500.000.00000.0001111.250.65000.7201111.253.00003.34004876SEM GTIN8 - GPS CICLOCOMPUTADOR ATRIO IRON BL-091 (CONECTA COM STRAVA)902920106102UN2.0000124.9500000000249.90SEM GTINUN2.0000124.950000000010003249.907.000017.49999500.000.00000.0001249.900.65001.6201249.903.00007.50002264SEM GTIN 9 - KIT REFLETORES QUADRO/RODA + CAMPAINHA + ESPELHO871499906102UN5.00002.845000000014.23SEM GTINUN5.00002.84500000001.751200312.484.00000.50999500.000.00000.000112.480.65000.080112.483.00000.37004804789182801005910 - LUVA MTB FECHADA (DEDO LONGO) GEL PRETA/CINZA TAM XL WS-1003871499906102UN5.000017.950000000089.757891828010059UN5.000017.95000000008.501200381.254.00003.25999500.000.00000.000181.250.65000.530181.253.00002.44002669790800590103811 - PASTILHA FREIO DISCO MOD SHIMANO BS01 (QUADRADA)871494906102PR100.00003.9500000000395.007908005901038PR100.00003.9500000000245.4912003149.514.00005.98999500.000.00000.0001149.510.65000.9701149.513.00004.49005026SEM GTIN12 - PEDAL CLIP MTB WELLGO M919 ALUM PRETO871499106102UN1.000069.950000000069.95SEM GTINUN1.000069.95000000001000369.954.00002.80999500.000.00000.000169.950.65000.450169.953.00002.10002888789866550703213 - REFIL P/ MOCHILA DE HIDRATACAO 2 LITROS JW4202122019004006102UN2.000012.450000000024.907898665507032UN2.000012.45000000002.501200322.404.00000.90999500.000.00000.000122.400.65000.150122.403.00000.67005053SEM GTIN14 - SAPATILHA MTB FEM CINZA/ROSA TAM 35 IMP871494906102PAR1.000099.950000000099.95SEM GTINPAR1.000099.95000000001200399.954.00004.00999500.000.00000.000199.950.65000.650199.953.00003.00004989SEM GTIN15 - SELIM MTB GTS AZUL871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004990SEM GTIN16 - SELIM MTB GTS LARANJA871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004997SEM GTIN17 - SELIM MTB GTS VERDE871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004984SEM GTIN18 - SELIM MTB GTS VERMELHO871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004805789182800261019 -VISTA LIGHT USB (COMETA) JY-261851210006102UN4.000014.250000000057.007891828002610UN4.000014.25000000005.801200351.204.00002.05999500.000.00000.000151.200.65000.330151.203.00001.54998.7650.160.000.000.000.000.000.001280.350.000.00281.590.000.000.006.4929.980.00998.760.00017463456003025PATRUS0860423387RUA PAU BRASIL 1174NOVO HAMBURGORS315.00015.000036522998.76998.760012019-08-01332.920022019-09-01332.920032019-10-01332.9214998.76Valor Total dos Tributos: R$ 0,00 Fonte: IBPT;Ped.: 139255 Cond.: 401-PRAZO PROMOCAO 2 Vend.: Sergio Valenca1ZxXs8NY8nKY1PKnmTZFwXW2VxY=flcdgxaw/BCzoubo/Q74SlFMrc1tETNLqfWqxd3EGWV5u1u5Bo6DBiCeYPyegVWgQNLYOH1PTTn/hM+4sdvID8PviM0m4ZskRSYDvB8pOIGQY9yX9lZbkVRiljP5+tDSeB+fiXkb0rwlQlu1V/EMNtP0PTOlo678rtiKhX73q5kfhI3OTpXTfCF39eNtssiiARGBq3suSg76h9tyAi5Ig/P04HtLHEJ6Ib+pJOwwhyvOKzooDEEUo+5U1RgYziNYioJhOGTPUfQFZ35LT+VSLsWfHxgFCLD6hHOkSEYRiqebXyW9c0dMAh9EcjNUUdIJu8wzwVtrtKSlIWdz1/s6ug==MIIICDCCBfCgAwIBAgIQY5N6ppesoPIEr+eDogFZHzANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYDVQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc1MB4XDTE5MDExNjA5MzcxN1oXDTIwMDExNjA5MzcxN1owgfgxCzAJBgNVBAYTAkJSMRMwEQYDVQQKDApJQ1AtQnJhc2lsMQswCQYDVQQIDAJSUzEWMBQGA1UEBwwNTm92byBIYW1idXJnbzE2MDQGA1UECwwtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRYwFAYDVQQLDA1SRkIgZS1DTlBKIEExMSQwIgYDVQQLDBtBdXRlbnRpY2FkbyBwb3IgQVIgRGlnaWNlcnQxOTA3BgNVBAMMMEtSQUZDSElOU0tJIE1PUkFFUyBFIExJTkFSRVMgTFREQToxMDgzNTkwOTAwMDExMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAS8kIYa15H3crB3LdvXNGkX9WogcY3GQJKe4T8EG9k8rD2MvIuddZCsFE2rMZKXXUpcalaVuH2Ellf8vWkQE2EnFAeNVwU2WU7xABiYt93iMJQi/W2iBxfJZ7UTaY84gcEq1gICi0WXREjjOUKTL5DOdx1KqmPIaydJZgpWNhKpR1Fdz8LZa8NoO8ApLtGlY7FzYvRsdpE/o6cULqoc/a4JDZ9P1TiYL96D5GYdNRb0z+MIUBC8K299qenJmiAZQgXb8UYBobqu2+pvzY41+cYCFAwWZ80iozv+Ytx+K6XOKCZz018/vjnvCs5oxibLHmSc8QKrOpF7fJPVWpSv9MCAwEAAaOCAwswggMHMIG6BgNVHREEgbIwga+gPQYFYEwBAwSgNAQyMTQxMDE5Nzg5MTk3Nzk0MDA3MjAwMDAwMDAwMDAwMDAwMDAxMDUwMjA3NTc4U1NQUlOgHgYFYEwBAwKgFQQTRURVQVJETyBLUkFGQ0hJTlNLSaAZBgVgTAEDA6AQBA4xMDgzNTkwOTAwMDExM6AXBgVgTAEDB6AOBAwwMDAwMDAwMDAwMDCBGmFkbS5pbnRlcm5vQG91dGxvb2suY29tLmJyMAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUU31/nb7RYdAgutqf44mnE3NYzUIwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBoBggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWduX1JGQi5wZGYwgbwGA1UdHwSBtDCBsTBXoFWgU4ZRaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25SRkJHNS9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRyYWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzUvTGF0ZXN0Q1JMLmNybDAOBgNVHQ8BAf8EBAMCBeAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGsBggrBgEFBQcBAQSBnzCBnDBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9HNS5wN2MwOQYIKwYBBQUHMAGGLWh0dHA6Ly9vY3NwLWFjLWNlcnRpc2lnbi1yZmIuY2VydGlzaWduLmNvbS5icjANBgkqhkiG9w0BAQsFAAOCAgEAfSLJKBF+ggwp/yQqOmSun9fPSMu+J77rGP1+twVKGYmR4riHHUETuTWGGo01xrAMrf1PnHajTtrwaob8/u9bkDN2x3z4qsWv3GcKpyxebaoBXMBf6AEBZ6cxNXVSNDuAf6M1l0ZIWNdo2a85AC6p7ExU7xxvQFVypqzSQNPfZwa87PJmzqEdodmotWa7PPYLKINZWfhdyAiOgB+gxjU3GQ86Roe+g02LOZlT7EAVjYTMQtTFRltpV48vKmN76UpYC0e03Yij1pqKPxwsmBsc3hyW4sevoAzpjFImd5igO4iGdFsp84E5F+g4syMjtnCu443L7J1oYxtG45sZarVdTcADJPthOYLB9AXV7ZpnUpBTqTWLJzE3m5KYIXInWXVHtl92GCI8dayVfU/Pm0QDLMhGwMCOqXboVujr4wSCBVcQ9zPi+8rrocVIFzefpxYtxg8ry/4OG7j6OSMhm9Jj1nmr0RJiuce/gzK9XFLVVe/9NY9mON/Udz9Zdkgq5paEOmC3D0xYAtp4DihjI7gt7fiti5A+T6U6B0OPZeb/ro4RSodoU9WsHXafX8qdl0xTiJQN307eF5Jx07uyc/93jn2Vd5mwQpL7TqY6pLZFb8r+Kt2QXT0VbwmtJ45i0ZZLsY2kgK+oGzqUQrZp/GPih28JeQWtIpcyRacQylHFBPo="; + //var list6 = "3283045968VENDA MERC.REC.ADQ TERCEIROS/ VENDA MERC.REC.ADQ.TERC. C/SUB5514600042022-01-19T13:03:00-03:002022-01-19T13:03:00-03:0012320500211611090012.1.025 | 3.061327045000402ISAPA IMPORTACAO E COMERCIO LTDAISAPA IMPORTACAO E COMERCIO LTDARua Francisco Souza dos Santos731Setor C Sala AJardim Limoeiro3205002SerraES291641531058BRASIL552732034950082360472313712048000174JORDAN SORIDE COM.LTDA MERUA GENARO DE CARVALHO 2 CAST.BRANCOSN1 ETAPACASTELO BRANCO2927408SALVADORBA413201001058BRASIL7133913615118738210SORIDEZADAI2@HOTMAIL.COM;e-coleta@patrus.com.br;isapa@tribut441744715575896847EMENDA CORR KMC 9V CL566R-NP PTA731519006102JG2.000024.1400000048.284715575896847JG2.000024.140000001100348.284.00001.939995048.2815.00007.240146.351.65000.760146.357.60003.5213527899936500011FITA PROTETORA ANTI-FURO 23MM P/ 27 /700391690106102PR2.000013.4100000026.827899936500011PR2.000013.410000001000326.8212.00003.22999990000123.601.65000.390123.607.60001.7913547899936500035FITA PROTETORA ANTI-FURO 35MM 26/27,5/29391690106102PR6.000024.47000000146.827899936500035PR6.000024.4700000010003146.8212.000017.629999900001129.201.65002.1301129.207.60009.82444056940194017320FITA PROTETORA ARO 29 MTB 20MM391990906102PC20.00000.9200000018.406940194017320PC20.00000.920000001100318.404.00000.749995018.4015.00002.760117.661.65000.290117.667.60001.34412514713051920659PARAFUSO FIXACAO ROTOR NO CUBO (6 PECAS)871494906102JG3.00005.8000000017.404713051920659JG3.00005.800000001200317.404.00000.709995017.4010.00001.740116.701.65000.280116.707.60001.27559336971520420330CESTA 26 GDE. ACO PTO.C/ALCA SUP/BLC.RAP871499906102JG1.000043.1400000043.146971520420330JG1.000043.140000001200343.144.00001.739995043.1410.00004.310141.411.65000.680141.417.60003.15432687908304801541PEDAL ERGOMETRICA, PP, SP250, PTO, 9/16871496006102PR1.000035.1900000035.197908304801541PR1.000035.190000001200335.194.00001.419995035.1910.00003.510133.781.65000.560133.787.60002.57500606970434540103PEDIV AL 170MM PTO, DLH2, 39/53D PTO871496006102JG1.0000113.51000000113.516970434540103JG1.0000113.5100000011003113.514.00004.5499950113.5110.000011.3501108.971.65001.8001108.977.60008.28439806970284410397CAPA SELIM MTB HD-014 GEL REVESTIDA PTO.871499906102PC2.000024.9500000049.906970284410397PC2.000024.950000001200349.904.00002.009995049.9010.00004.990147.901.65000.790147.907.60003.64812867898488592994CADEIRINHA DIANT, CARONA FIT, ROSA871499906102PC1.000091.7600000091.767898488592994PC1.000091.760000001000391.7612.000011.01999990000180.751.65001.330180.757.60006.14812877898289069220CADEIRINHA TRAS, CARONA BIKE, CINZA871499906102PC1.000070.9500000070.957898289069220PC1.000070.950000001000370.9512.00008.51999990000162.441.65001.030162.447.60004.75812857898488592574CADEIRINHA DIANT, CARONA FIT, PTO871499906102PC1.000091.7600000091.767898488592574PC1.000091.760000001000391.7612.000011.01999990000180.751.65001.330180.757.60006.14808557899908440598GARRAFA ISOTERMICA 710ML, PTO961700106102PC2.000021.7400000043.487899908440598PC2.000021.740000001000343.4812.00005.22999990000138.261.65000.630138.267.60002.9182377898943516367PROTETOR NEOPRENE 24X11 5CM PRETO590691006102PC6.00003.6600000021.967898943516367PC6.00003.660000001000321.9612.00002.64999990000119.321.65000.320119.327.60001.4782437898943516367PROTETOR NEOPREN 24X11,5CM OGGI PTO/BCO590691006102PC4.00003.6600000014.647898943516367KG0.740019.783783781000314.6412.00001.76999990000112.881.65000.210112.887.60000.9810577898942825743BOMBA PARA BOLA DE FUTEBOL S/ AGULHA841420006102JG3.000015.7000000047.107898942825743JG3.000015.700000001000347.1012.00005.65999990000141.451.65000.680141.457.60003.1510407898942825675AGULHA PARA BOMBA FUTEBOL841490106102PC10.00002.1600000021.607898942825675PC10.00002.160000001000321.6012.00002.59999990000119.011.65000.310119.017.60001.4416547897876010348PRESILHA K8L PLAST.2 6X200MM PTO.500 PCS392690906102P5%1.000038.3200000038.327897876010348P5%1.000038.320000001000338.3212.00004.60999990000133.721.65000.560133.727.60002.5616557897876000011PRESILHA K22 PLAST.4,8X200MM PTO.200 PCS392690906102P2%1.000020.3800000020.387897876000011P2%1.000020.380000001000320.3812.00002.45999990000117.931.65000.300117.937.60001.36813407898959893193EXTRATOR PINO CORRENTE, 8/11V8205590008010006102PC1.000044.3200000044.327898959893193PC1.000044.320000001000344.3212.00005.32999990000139.001.65000.640139.007.60002.9611997898959893667EXTRATOR CASSETE, FB4012, EIXO 12MM8205590008010006102PC1.000037.2700000037.277898959893667PC1.000037.270000001000337.2712.00004.47999990000132.801.65000.540132.807.60002.4913047895809006819MANOPLA STRADA II PTO871499906102PR3.000010.2900000030.877895809006819PR3.000010.290000001000330.8712.00003.70999990000127.171.65000.450127.177.60002.0618237898421575022MANOPLA MTB TRIBAL PTO.871499906102PR3.00008.3200000024.967898421575022PR3.00008.320000001000324.9612.00003.00999990000121.961.65000.360121.967.60001.67802837891575317593PARALAMA MUDBIKE DIANT. PLAST. PTO./BCO.871499906102PC2.00006.3300000012.667891575317593PC2.00006.330000001000312.6612.00001.52999990000111.141.65000.180111.147.60000.85813847891575317647PARALAMA MUDBIKE TRAS, PLAST, PTO/BCO871499906102PC4.00004.5500000018.207891575317647PC4.00004.550000001000318.2012.00002.18999990000116.021.65000.260116.027.60001.22817547899941201231IRON-GEL, LINHA PRO, ACAI/BANANA ,10 SCH210690306102CX1.000064.7300000064.737899941201231CX1.000064.730000001000364.7312.00007.77999990000156.961.65000.940156.967.60004.33817397899941200067CARB-UP GEL BLACK, ACAI/GUARANA, 10 SCH210690306102CX1.000024.0200000024.027899941200067CX1.000024.020000001000324.0212.00002.88999990000121.141.65000.350121.147.60001.61823037899941202498CARB-UP GEL BLACK, CANA/LIMAO, 10 SCH210690306102CX1.000024.0200000024.027899941202498CX1.000024.020000001000324.0212.00002.88999990000121.141.65000.350121.147.60001.61817407899941200074CARB-UP GEL BLACK, LARANJA, 10 SCH210690306102CX1.000024.0200000024.027899941200074CX1.000024.020000001000324.0212.00002.88999990000121.141.65000.350121.147.60001.61817417899941200081CARB-UP GEL BLACK, MORANGO, 10 SCH210690306102CX1.000024.0200000024.027899941200081CX1.000024.020000001000324.0212.00002.88999990000121.141.65000.350121.147.60001.61817427898629562107CARB-UP GUM, CEREJA, 10 PCT210690306102CX1.000078.4500000078.457898629562107CX1.000078.450000001000378.4512.00009.41999990000169.041.65001.140169.047.60005.25817437898629562114CARB-UP GUM, LIMAO, 10 PCT210690306102CX1.000078.4500000078.457898629562114CX1.000078.450000001000378.4512.00009.41999990000169.041.65001.140169.047.60005.25823077899941202276CARB-UP HYDRO ISOTONIC DRINK, 20 SCH210690306102CX1.000057.5200000057.527899941202276CX1.000057.520000001000357.5212.00006.90999990000150.621.65000.840150.627.60003.85822987899941200371MEGA MALTO DEXTRIN, GUARANA C/ACAI, 1 KG210690306102PC1.000020.8800000020.887899941200371PC1.000020.880000001000320.8812.00002.51999990000118.371.65000.300118.377.60001.40823017899941200395MEGA MALTO DEXTRIN, MORANGO, 1KG210690306102PC1.000020.8800000020.887899941200395PC1.000020.880000001000320.8812.00002.51999990000118.371.65000.300118.377.60001.4082267SEM GTINGARRAFA TERMICA, SKIN, DNA, 590ML, VDE871499906102PC2.000021.7500000043.50SEM GTINPC2.000021.750000001000343.5012.00005.22999990000138.281.65000.630138.287.60002.9182275SEM GTINGARRAFA TERMICA, SKIN, DNA, 710ML, VDE871499906102PC2.000022.8500000045.70SEM GTINPC2.000022.850000001000345.7012.00005.48999990000140.221.65000.660140.227.60003.0638663SEM GTINOCULOS 100% BLAKE, MARROM, DOUR900490906102PC1.0000220.77000000220.77SEM GTINPC1.0000220.7700000012003220.774.00008.8399950220.775.000011.0301211.941.65003.5001211.947.600016.11598154717294994910PNEU KVL 29X2.20 K1127A, H. BADGER XC TR4011500016005006403PC2.0000172.86000000345.724717294994910PC2.0000172.8600000012103345.724.000013.83492.7800766.4418.0000124.1399950345.7215.000051.850404520404718152722850CHAVE ALLEN TWINHEAD 7M85 C/8 FUNCOES820540006102JG1.0000249.65000000249.654718152722850JG1.0000249.6500000012003249.654.00009.9999950249.658.000019.9701239.661.65003.9501239.667.600018.2153454713077420034RAIO INOX, NIPLE, 2,0 X 255MM871492006102GZ2.0000103.91000000207.824713077420034GZ2.0000103.9100000012003207.824.00008.3199950207.8210.000020.7801199.511.65003.2901199.517.600015.16816197899659601736MEIA OGGI, AZL TFN/PTO, 38/43611599006102PR1.00009.870000009.877899659601736PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816207899659601644MEIA OGGI, BCO/ PTO, 38/43611599006102PR1.00009.870000009.877899659601644PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816217899659601651MEIA OGGI, PTO/ AMR, 38/43611599006102PR1.00009.870000009.877899659601651PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816227899659601712MEIA OGGI, PTO/ AZL, 38/43611599006102PR1.00009.870000009.877899659601712PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816237899659601668MEIA OGGI, PTO/ BCO, 38/43611599006102PR1.00009.870000009.877899659601668PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816247899659601675MEIA OGGI, PTO/ LRJ, 38/43611599006102PR1.00009.870000009.877899659601675PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816167899659601620MEIA OGGI, PTO/ RSA, 35/39611599006102PR1.00009.870000009.877899659601620PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816267899659601682MEIA OGGI, PTO/ VRD, 38/43611599006102PR1.00009.870000009.877899659601682PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816277899659601699MEIA OGGI, PTO/ VRM, 38/43611599006102PR1.00009.870000009.877899659601699PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816147899659601583MEIA OGGI, PTO/ BCO, 35/39611599006102PR1.00009.870000009.877899659601583PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66815187899659600227MEIA SKIN SPORT BIKES PTO/COLOR, 39-43611599006102PR2.00009.8700000019.747899659600227PR2.00009.870000001000319.7412.00002.37999990000117.371.65000.290117.377.60001.32815177899659600272MEIA SKIN SPORT PAW PRINT PTO/BCO, 35-39611599006102PR1.00009.870000009.877899659600272PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66805457899659600180MEIA SKIN SPORT RASTA PTO/VDE/AM, 38/43611599006102PR2.00009.8700000019.747899659600180PR2.00009.870000001000319.7412.00002.37999990000117.371.65000.290117.377.60001.32805467899659600197MEIA SKIN SPORT SMILE PTO/AMARELO, 38/43611599006102PR2.00009.8700000019.747899659600197PR2.00009.870000001000319.7412.00002.37999990000117.371.65000.290117.377.60001.32815217899659600289MEIA SKIN SPORT TETRIS PTO/COLOR, 39-43611599006102PR1.00009.870000009.877899659600289PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816337899659601767MEIA SKIN SPORTS, AMR NEON/PTO, 35/39611599006102PR1.00009.870000009.877899659601767PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816427899659601903MEIA SKIN SPORTS, AZL NEON/PTO, 38/43611599006102PR1.00009.870000009.877899659601903PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816437899659601859MEIA SKIN SPORTS, LRJ NEON/PTO, 38/43611599006102PR1.00009.870000009.877899659601859PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816397899659601835MEIA SKIN SPORTS, PTO/ BCO, 38/43611599006102PR2.00009.8700000019.747899659601835PR2.00009.870000001000319.7412.00002.37999990000117.371.65000.290117.377.60001.32816317899659601842MEIA SKIN SPORTS, PTO/ BCO, 35/39611599006102PR1.00009.870000009.877899659601842PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816367899659601828MEIA SKIN SPORTS, RSA NEON/PTO, 35/39611599006102PR1.00009.870000009.877899659601828PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816327899659601804MEIA SKIN SPORTS, VLT/RSA, 35/39611599006102PR1.00009.870000009.877899659601804PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66816457899659601774MEIA SKIN SPORTS, VRM NEON/PTO, 38/43611599006102PR1.00009.870000009.877899659601774PR1.00009.87000000100039.8712.00001.1899999000018.691.65000.14018.697.60000.66441976972043670059SUPORTE DE GARRAFA ABSOLUTE NERO, PTO.871499906102PC2.00008.0500000016.106972043670059PC2.00008.050000001200316.104.00000.649995016.1010.00001.610115.461.65000.260115.467.60001.17415656970386760000MOCHILA OGGI AGILE, PTO/CNZ, 2L420292006102PC1.0000129.53000000129.536970386760000PC1.0000129.5300000012003129.534.00005.1899950129.5310.000012.9501124.351.65002.0501124.357.60009.45422386970386760048MOCHILA OGGI HACKER, PTO/CNZ, 1L420292006102PC1.000060.5800000060.586970386760048PC1.000060.580000001200360.584.00002.429995060.5810.00006.050158.161.65000.960158.167.60004.42442766970386760284MOCHILA OGGI BIG WHEEL, PTO, 2 L420292006102PC1.0000102.57000000102.576970386760284PC1.0000102.5700000012003102.574.00004.1099950102.5710.000010.250198.471.65001.620198.477.60007.48433116970386760192RESERVATORIO HIDRATACAO 2L, ABERTURA GRD871499906102PC2.000037.7300000075.466970386760192PC2.000037.730000001200375.464.00003.029995075.4610.00007.540172.441.65001.200172.447.60005.5182247SEM GTINCAMISA PROTEAM OGGI, AMR/VRM, M621010006102PC1.0000120.20000000120.20SEM GTINPC1.0000120.2000000010003120.2012.000014.429999900001105.781.65001.7501105.787.60008.0482249SEM GTINCAMISA PROTEAM OGGI, AMR/VRM, GG621010006102PC1.0000120.20000000120.20SEM GTINPC1.0000120.2000000010003120.2012.000014.429999900001105.781.65001.7501105.787.60008.0482250SEM GTINCAMISA PROTEAM OGGI, AMR/VRM, XGG621010006102PC1.0000120.20000000120.20SEM GTINPC1.0000120.2000000010003120.2012.000014.429999900001105.781.65001.7501105.787.60008.043671.17301.7300000766.44124.13003671.170000177.93050.06230.8703973.23017463456000433PATRUS TRANSP.URGENTES LTDA.082139644RODOVIA GOVERNADOR MARIO COVAS, S/N - BR 262 C/ BR 101, KM,VianaES10004600043973.2303973.230012022-02-033973.231153973.23OS PESOS E VOLUMES CONSTAM NA NF 000460003. 009 - PEDIDO 308280 - REPRESENTANTE 54 ROBERTO VIEIRA DE MELO BARRETO - COND PAGTO 026 - ENDERECO ENTREGA RUA GENARO DE CARVALHO 2 CAST.BRANCO BAIRRO CASTELO BRANCO MUNICIPIO SALVADOR/BA CEP 41320100 - ENDERECO COBRANCA RUA GENARO DE CARVALHO 2 CAST.BRANCOA MESMA - PECAS, PNEUS, CAMARAS E ACESSORIOS PARA BICICLETAS0034757-15153113791000122Rodrigo de Almeida Sartorioresp_tecnico_dfe_protheus@totvs.com.br11285939048AJB2BdFZTHfSSMnm/14i/3OKdo=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"; + //var list7 = "2900000016REMESSA552152022-05-04T22:05:29+00:00112919207119211100SgOne 2.4.244818198000190DEMONSTRACAODEMONSTRACAORua Cândido Viterbo de Santa Rosa19SEM COMPLEMENTOBuraquinho2919207Lauro de FreitasBA427092201058BRASIL189370363385453001544763603112312312387NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCALAvenida JulietaSNEDFFazenda Grande do Retiro2927408SalvadorBA403502801058BRASIL9suporte@dsbrbrasil.com.br13937073000156012246SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL871200105102UN1.00000.10000000000.10SEM GTINUN1.00000.100000000010.030102990.100.00000.00990.000.00000.00012246SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL871200105102UN1.00000.10000000000.10SEM GTINUN1.00000.100000000010.060102990.100.00000.00990.000.00000.00012246SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL871200105102UN1.00000.10000000000.10SEM GTINUN1.00000.100000000010.090102990.100.00000.00990.000.00000.00012246SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL871200105102UN1.00000.10000000000.10SEM GTINUN1.00000.100000000010.120102990.100.00000.00990.000.00000.00012246SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL871200105102UN1.00000.10000000000.10SEM GTINUN1.00000.100000000010.150102990.100.00000.00990.000.00000.000.000.000.000.000.000.000.000.000.000.000.000.500.000.000.000.000.000.000.000.000.000.500.459900.000.00Trib aprox: 0,05 Federal, 0,10 Estadual e Municipal: 0 Fonte: 40CA7E Documento emitido por ME ou EPP optante pelo simples nacional.Não gera direito a crédito fiscal de ipi. TESTE NFE HOMOLOGACAO5D5O03vbwZ1PVwDLb3D6JFgJM28=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"; + + var list8 = "2900000014VENDA551132023-02-15T17:14:05+00:00112927408117111100SgOne 2.13.115657439000169SHALOM BIKE LTDASHALOM BIKEAVENIDA ALIOMAR BALEEIRO6LOJASão Cristóvão2927408SalvadorBA415100101058BRASIL101953876423877001254763603139495386000195CONDOMINIO RESIDENCIAL SALVADOR GARDEN SALVADOR GARDENRua Itatim1231RODOVIA BA 526Cassange2927408SalvadorBA415051201058BRASIL9SIND.SSAGARDEN@GMAIL.COM139370730001561010057898453130916SAPATA FREIO COMUM871494905102UN14.00007.000000000098.007898453130916UN14.00007.0000000000127.8501029998.000.00000.00990.000.00000.00100297692365687811004 CABOS E CONDUITES871499905102UN8.000015.0000000000120.006923656878110UN8.000015.0000000000161.95010299120.000.00000.00990.000.00000.00100032SEM GTINALAVANCA NYLON INDEX871491005102UN9.000025.0000000000225.00SEM GTINUN9.000025.00000000001125.89010299225.000.00000.00990.000.00000.00100737SEM GTINMANOPLA PRETA COMUM871200105102UN8.000010.000000000080.00SEM GTINUN8.000010.00000000001148.8801029980.000.00000.00990.000.00000.00100669SEM GTINJOGO DE FREIO V BRAKE NYLON871494905102UN1.000040.000000000040.00SEM GTINUN1.000040.00000000001160.2501029940.000.00000.00990.000.00000.00100657SEM GTINGUIDAO E SUPORTE COMUM871499905102UN1.000035.000000000035.00SEM GTINUN1.000035.00000000001170.2001029935.000.00000.00990.000.00000.001008677899519810384PEDAL COMUM PLSTICO871200105102UN2.000020.000000000040.007899519810384UN2.000020.00000000001181.7001029940.000.00000.00990.000.00000.001003667894567720012CAMBIO TRASEIRO COMUM871499105102UN3.000035.0000000000105.007894567720012UN3.000035.00000000001211.54010299105.000.00000.00990.000.00000.00100641SEM GTINGARFO FERRO COMUM871491005102UN2.000060.0000000000120.00SEM GTINUN2.000060.00000000001245.64010299120.000.00000.00990.000.00000.00100479SEM GTINCORRENTE C410X114L S MARCHA731512105102UN1.000023.000000000023.00SEM GTINUN1.000023.00000000001253.7201029923.000.00000.00990.000.00000.00100734SEM GTINMACANETA NYLON871494905102UN3.000020.000000000060.00SEM GTINUN3.000020.00000000001270.7701029960.000.00000.00990.000.00000.00100790SEM GTINMOV DIREO INGL PRETO C TRAVA C COLAR871200105102UN2.000020.000000000040.00SEM GTINUN2.000020.00000000001282.2701029940.000.00000.00990.000.00000.00100889SEM GTINPEDIVELA PRETO ARO 26871499905102UN3.000035.0000000000105.00SEM GTINUN3.000035.00000000001312.11010299105.000.00000.00990.000.00000.00101017SEM GTINSELIM COMUM871200105102UN1.000035.000000000035.00SEM GTINUN1.000035.00000000001322.1701029935.000.00000.00990.000.00000.001003338019227210699CAMARA DE AR 26X19401320005102UN1.000023.000000000023.008019227210699UN1.000023.00000000001330.3601029923.000.00000.00990.000.00000.00100980SEM GTINRODA LIVRE 6V871493205102UN1.000055.000000000055.00SEM GTINUN1.000055.00000000001345.9901029955.000.00000.00990.000.00000.00100355SEM GTINCAMBIO DIANTEIRO COMUM PRETO871499105102UN1.000028.000000000028.00SEM GTINUN1.000028.00000000001353.9501029928.000.00000.00990.000.00000.00100524SEM GTINDIVERSOS REVISAO GERAL871499905102UN9.000070.0000000000630.00SEM GTINUN9.000070.00000000001533.00010299630.000.00000.00990.000.00000.00100793SEM GTINMOVIMENTO CENTRAL COMUM871499905102UN7.000020.0000000000140.00SEM GTINUN7.000020.00000000001572.79010299140.000.00000.00990.000.00000.000.000.000.000.000.000.000.000.000.000.000.002002.000.000.000.000.000.000.000.000.000.002002.004911.03998932002.002002.000012023-03-17250.250022023-04-16250.250032023-05-16250.250042023-06-15250.250052023-07-15250.250062023-08-14250.250072023-09-13250.250082023-10-13250.2503250.25203250.25203250.25203250.25203250.25203250.25203250.25203250.2520.00Trib aprox: 212,43 Federal, 360,36 Estadual e Municipal: 0 Fonte: B391D4 Documento emitido por ME ou EPP optante pelo simples nacional.Não gera direito a crédito fiscal de ipi.jo7turtxVOf7/rjYtKncYwxwxOI=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"; + + //listNfe.Add(list1); + //listNfe.Add(list2); + //listNfe.Add(list3); + //listNfe.Add(list4); + //listNfe.Add(list5); + //listNfe.Add(list6); + //listNfe.Add(list7); + listNfe.Add(list8); + + //listNfe.Add("5399193877PRESTACAO DE SERVICO5511938772020-12-21T00:00:00-03:00125300108115111104.0033683111000280BRASILIASGAN L2 Norte Quadra 601 Modulo G0NI5300108BrasiliaDF70836900073347430029407334743002946311900315180714000104UNIVERSIDADE FEDERAL DA BAHIA- UFBARUA AUGUSTO VIANASNCANELA2927408SALVADORBA40170115914585SEM GTINCertificado Digital - Pessoa Fisica A3 de 3 anos com Token006933Serv2.0000256.0000512.00SEM GTINServ2.0000256.000000.000.000.00530010801.0355300108201512.000.653.3301512.003.0015.3614584SEM GTINCertificado Digital - Pessoa Fisica A3 de 3 anos006933Serv1.0000206.0000206.00SEM GTINServ1.0000206.000000.000.000.00530010801.0355300108201206.000.651.3401206.003.006.18000000000000000000718.00718.004.6721.542020-12-214.6721.547.18718.0034.47915718.000CONTRATO: 84745 OBSERVACAO: Mes referencia: 10/2020 Numero do contrato: 80705 Nao reter ISS. Imunidade Tributaria concedida pelo STF atraves da decisao da ACO n 2.658 de 06/04/2018, fundamentada no art. 150, inciso VI, alinea a da CF, e reconhecida pelo GDF por meio da publicacao do Ato Declaratorio n 622 - NUBEF/GEESP/COTRI/SUREC/SEF/SEEC, de 04/10/2019.gnNd7eRF/OPzbASrOYQObX5n1iU=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"); + //listNfe.Add("2900000084VENDA559832020-07-22T21:43:31-03:0011292740811021110SgOne 1.19.217784038000103ANAILTON DE OLIVEIRA RIBEIRODUCHA BIKESCaminho 3S/NXXXXNova Brasília de Itapuã2927408SalvadorBA416110431058BRASIL107728249112312312387NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCALRua Antonio de SouzaSNEDFArmacao2927408SalvadorBA417503201058BRASIL913937073000156004829SEM GTINNOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL851712115102UN1.00001.00000000001.00SEM GTINUN1.00001.00000000003.0010.340102994.000.00000.00990.000.00000.000.000.000.000.000.000.000.000.000.000.000.001.003.000.000.000.000.000.000.000.000.004.000.34084097378000145TRANSPORTADORA TESTERua do Lagarto AzulSalvadorBAOIU2356BA112.0004.00048574.004.000012020-07-224.00014.000.00Trib aprox: 0,34 Federal, 0 Estadual e Municipal: 0 Fonte: D26078Documento emitido por ME ou EPP optante pelo simples nacional.Não gera direito a crédito fiscal de ipi.uNLbRhat8zpYqwwzg7Q8f47gB8w=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"); + //listNfe.Add("4368509077VENDA DE MERCADORIAS E SERVICOS551365222019-06-11T17:00:55-03:00124313409110210101.1.78.010835909000113KRAFCHINSKI, MORAES E LINARES LTDAKRAFCHINSKI, MORAES E LINARES LTDARUA GUIA LOPES1280RONDONIA4313409NOVO HAMBURGORS934155121058BRASIL51307730100860452247332806205000155BIKETOP COMERCIO E SERVICOS DE BICICLETAS EIRELIALTINO SERBETO DE BARROS173LOJA 01PITUBA2927408SALVADORBA418304921058BRASIL719880151741155731233005110SEM GTINCAMISA CANNONDALE PRETA/RAJADA CINZA LETRA AMARELA-ZIPER CURTO-MASC TAM G611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.90005115SEM GTINCAMISA ORBEA PRETA/AZUL/BRANCA-ZIPER CURTO- MASC - TAM G611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.90005141SEM GTINCAMISA SCOTT MITCHELTON PRETA LETRAS AMARELA/BRANCA-ZIPER CURTO-MASC TAM GG611300006102UN1.000029.990000000029.99SEM GTINUN1.000029.99000000001000329.997.00002.10999500.000.00000.000129.990.65000.190129.993.00000.900045575017915380603CAPACETE INFANTIL VERMELHO COELHOS (TAM P) KIDZAMO6506100001013006102UN1.000010.250000000010.255017915380603UN1.000010.25000000001.15120039.104.00000.36999500.000.00000.00019.100.65000.06019.103.00000.270045584032611162262CAPACETE INFANTIL VERMELHO LISTRAS (TAM P) KIDZAMO6506100001013006102UN1.000010.250000000010.254032611162262UN1.000010.25000000001.15120039.104.00000.36999500.000.00000.00019.100.65000.06019.103.00000.270002177898954164588CONDUITE TEFLON PRETO 20M8714999001002006102RL2.00008.450000000016.907898954164588RL2.00008.45000000002.001200314.904.00000.60999500.000.00000.000114.900.65000.100114.903.00000.450042337891828009299FAROL LED RECARREGAVEL USB 180 LUMENS PRETO WS-929851210006102UN5.000024.5000000000122.507891828009299UN5.000024.500000000011.2512003111.254.00004.45999500.000.00000.0001111.250.65000.7201111.253.00003.34004876SEM GTINGPS CICLOCOMPUTADOR ATRIO IRON BL-091 (CONECTA COM STRAVA)902920106102UN2.0000124.9500000000249.90SEM GTINUN2.0000124.950000000010003249.907.000017.49999500.000.00000.0001249.900.65001.6201249.903.00007.50002264SEM GTINKIT REFLETORES QUADRO/RODA + CAMPAINHA + ESPELHO871499906102UN5.00002.845000000014.23SEM GTINUN5.00002.84500000001.751200312.484.00000.50999500.000.00000.000112.480.65000.080112.483.00000.370048047891828010059LUVA MTB FECHADA (DEDO LONGO) GEL PRETA/CINZA TAM XL WS-1003871499906102UN5.000017.950000000089.757891828010059UN5.000017.95000000008.501200381.254.00003.25999500.000.00000.000181.250.65000.530181.253.00002.440026697908005901038PASTILHA FREIO DISCO MOD SHIMANO BS01 (QUADRADA)871494906102PR100.00003.9500000000395.007908005901038PR100.00003.9500000000245.4912003149.514.00005.98999500.000.00000.0001149.510.65000.9701149.513.00004.49005026SEM GTINPEDAL CLIP MTB WELLGO M919 ALUM PRETO871499106102UN1.000069.950000000069.95SEM GTINUN1.000069.95000000001000369.954.00002.80999500.000.00000.000169.950.65000.450169.953.00002.100028887898665507032REFIL P/ MOCHILA DE HIDRATACAO 2 LITROS JW4202122019004006102UN2.000012.450000000024.907898665507032UN2.000012.45000000002.501200322.404.00000.90999500.000.00000.000122.400.65000.150122.403.00000.67005053SEM GTINSAPATILHA MTB FEM CINZA/ROSA TAM 35 IMP871494906102PAR1.000099.950000000099.95SEM GTINPAR1.000099.95000000001200399.954.00004.00999500.000.00000.000199.950.65000.650199.953.00003.00004989SEM GTINSELIM MTB GTS AZUL871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004990SEM GTINSELIM MTB GTS LARANJA871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004997SEM GTINSELIM MTB GTS VERDE871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.21004984SEM GTINSELIM MTB GTS VERMELHO871495006102UN1.00007.45000000007.45SEM GTINUN1.00007.45000000000.50120036.954.00000.28999500.000.00000.00016.950.65000.05016.953.00000.210048057891828002610VISTA LIGHT USB (COMETA) JY-261851210006102UN4.000014.250000000057.007891828002610UN4.000014.25000000005.801200351.204.00002.05999500.000.00000.000151.200.65000.330151.203.00001.54998.7650.160.000.000.000.000.000.001280.350.000.00281.590.000.000.006.4929.980.00998.760.00017463456003025PATRUS0860423387RUA PAU BRASIL 1174NOVO HAMBURGORS315.00015.000036522998.76998.760012019-08-01332.920022019-09-01332.920032019-10-01332.9214998.76Valor Total dos Tributos: R$ 0,00 Fonte: IBPT;Ped.: 139255 Cond.: 401-PRAZO PROMOCAO 2 Vend.: Sergio Valenca1ZxXs8NY8nKY1PKnmTZFwXW2VxY=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"); + + + foreach (var item in listNfe) + { + var nfe = Utils.XmlStringParaClasse(item); + var danfe = new DanfeNFe(nfe, Status.Autorizada, "55512121121211", "Emissor Fiscal DSBR Brasil - www.dsbrbrasil.com.br"); + + IDanfeHtml2 d1 = new DanfeNfeHtml2(danfe); + var doc = d1.ObterDocHtmlAsync().Result; + var nomeArquivo = $"danfe {nfe.infNFe.Id}.html"; + Utils.DelatarArquivo("D:\\", nomeArquivo); + Utils.EscreverArquivo("D:\\", nomeArquivo, doc.Html); + } + + + + } \ No newline at end of file diff --git a/NFe.Danfe.Html/Resource.Designer.cs b/NFe.Danfe.Html/Resource.Designer.cs new file mode 100644 index 000000000..954ccf63a --- /dev/null +++ b/NFe.Danfe.Html/Resource.Designer.cs @@ -0,0 +1,125 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NFe.Danfe.Html { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NFe.Danfe.Html.Resource", typeof(Resource).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to <div class="page nfeArea"> + /// [marca_dagua] + /// <div class="boxFields" style="padding-top: 20px"> + /// <table cellpadding="0" cellspacing="0"> + /// <tbody> + /// <tr> + /// <td rowspan="3" style="width: 30mm"> + /// <img class="client_logo" src="[url_logo]" alt="" /> + /// </td> + /// <td rowspan="3" + /// style="width: 46mm; font-size: 7pt" + /// class="txt-center"> + /// [rest of string was truncated]";. + /// + internal static string danfe_model_55_nfe_page_next { + get { + return ResourceManager.GetString("danfe_model_55_nfe_page_next", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <!-- Header --> + /// + ///<style type="text/css"> + /// @media print { + /// @page { + /// margin-left: 15mm; + /// margin-right: 15mm; + /// } + /// footer { + /// page-break-after: always; + /// } + /// } + /// + /// * { + /// margin: 0; + /// } + /// + /// .ui-widget-content { + /// border: none !important; + /// } + /// + /// .nfe-square { + /// margin: 0 auto 2cm; + /// box-sizing: border-box; + /// width: 2cm; + /// height: 1cm; + /// border: 1px solid #000; + /// } + /// + /// .nfeArea.page { + /// width: 18cm; + /// position: relative; + /// font-family: "Tim [rest of string was truncated]";. + /// + internal static string danfe_model_55_nfe_page_one { + get { + return ResourceManager.GetString("danfe_model_55_nfe_page_one", resourceCulture); + } + } + } +} diff --git a/NFe.Danfe.Html/Resource.resx b/NFe.Danfe.Html/Resource.resx new file mode 100644 index 000000000..f3e6df90a --- /dev/null +++ b/NFe.Danfe.Html/Resource.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Resources\danfe-model-55-nfe-page-next.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + Resources\danfe-model-55-nfe-page-one.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + \ No newline at end of file diff --git a/NFe.Danfe.Html/Resources/danfe-model-55-nfe-page-next.html b/NFe.Danfe.Html/Resources/danfe-model-55-nfe-page-next.html new file mode 100644 index 000000000..1bbb400ae --- /dev/null +++ b/NFe.Danfe.Html/Resources/danfe-model-55-nfe-page-next.html @@ -0,0 +1,158 @@ +
+ [marca_dagua] +
+ + + + + + + + + + + + + + + +
+ + + [ds_company_issuer_name] + [ds_company_address] + + [ds_company_neighborhood] - [nu_company_cep] + + + [ds_company_city_name] - [ds_company_uf]- Fone: + [nl_company_phone_number] + + +

Danfe

+

Documento auxiliar da Nota Fiscal Eletrônica

+

+ + [ds_code_operation_type] + + + 0 - Entrada + 1 - Saída + +

+

+ + + [nl_invoice] + + + SÉRIE: + [ds_invoice_serie] + + + Página + [actual_page] + de + [total_pages] + +

+
+ Controle do Fisco + + + +
+ CHAVE DE ACESSO + [ds_danfe] +
+ + Consulta de autenticidade no portal nacional da NF-e + + www.nfe.fazenda.gov.br/portal ou no site da Sefaz Autorizada. +
+ + + + + + + + +
+ NATUREZA DA OPERAÇÃO + [_ds_transaction_nature] + + PROTOCOLO DE AUTORIZAÇÃO DE USO + [ds_protocol] +
+ + + + + + + + + + +
+ INSCRIÇÃO ESTADUAL + [nl_company_ie] + + INSCRIÇÃO ESTADUAL DO SUBST. TRIB. + [nl_company_ie_st] + + CNPJ + [nl_company_cnpj_cpf] +
+ +

Dados do produto/serviço

+
+ + + + + + + + + + + + + + + + + + + + + [itens_products] + +
CÓDIGO + DESCRIÇÃO DO PRODUTO/SERVIÇO + NCMSHCSTCFOPUNQTD.VLR.UNITVLR.TOTALBC ICMSVLR.ICMSVLR.IPIALIQ.ICMSALIQ.IPI
+
+
+ + + + + + +
+ [credits] +
+
+
+ [next-page] +
diff --git a/NFe.Danfe.Html/Resources/danfe-model-55-nfe-page-one.html b/NFe.Danfe.Html/Resources/danfe-model-55-nfe-page-one.html new file mode 100644 index 000000000..83eb3d489 --- /dev/null +++ b/NFe.Danfe.Html/Resources/danfe-model-55-nfe-page-one.html @@ -0,0 +1,873 @@ + + + + + + + +
+ [marca_dagua] +
+ + + + + + + + + + + +
+ Recebemos de [ds_company_issuer_name] os produtos e serviços + constantes na nota fiscal indicada ao lado + + NF-e + Nº [nl_invoice] + Série [ds_invoice_serie] +
+ Data de recebimento + + Identificação de assinatura do Recebedor +
+
+ + + + + + + + + + + + + + + +
+ + + [ds_company_issuer_name] + [ds_company_address] + + [ds_company_neighborhood] - [nu_company_cep] + + + [ds_company_city_name] - [ds_company_uf]- Fone: + [nl_company_phone_number] + + +

Danfe

+

Documento auxiliar da Nota Fiscal Eletrônica

+

+ + [ds_code_operation_type] + + + 0 - Entrada + 1 - Saída + +

+

+ + + [nl_invoice] + + + SÉRIE: + [ds_invoice_serie] + + + Página + [actual_page] + de + [total_pages] + +

+
+ Controle do Fisco + + + +
+ CHAVE DE ACESSO + [ds_danfe] +
+ + Consulta de autenticidade no portal nacional da NF-e + + www.nfe.fazenda.gov.br/portal ou no site da Sefaz Autorizada. +
+ + + + + + + + +
+ NATUREZA DA OPERAÇÃO + [_ds_transaction_nature] + + PROTOCOLO DE AUTORIZAÇÃO DE USO + [ds_protocol] +
+ + + + + + + + + + +
+ INSCRIÇÃO ESTADUAL + [nl_company_ie] + + INSCRIÇÃO ESTADUAL DO SUBST. TRIB. + [nl_company_ie_st] + + CNPJ + [nl_company_cnpj_cpf] +
+ + +

Destinatário/Emitente

+ + + + + + + + + + + + + + + +
+ + + + + + + +
+ NOME/RAZÃO SOCIAL + [ds_client_receiver_name] + + CNPJ/CPF + [nl_client_cnpj_cpf] +
+
+ DATA DE EMISSÃO + [dt_invoice_issue] +
+ + + + + + + + +
+ ENDEREÇO + [ds_client_address] + + BAIRRO/DISTRITO + [ds_client_neighborhood] + + CEP + [nu_client_cep] +
+
+ DATA DE ENTR./SAÍDA + [dt_input_output] +
+ + + + + + + + + +
+ MUNICÍPIO + [ds_client_city_name] + + FONE/FAX + [nl_client_phone_number] + + UF + [ds_client_uf] + + INSCRIÇÃO ESTADUAL + [ds_client_ie] +
+
+ HORA ENTR./SAÍDA + [hr_input_output] +
+ +
+

Fatura

+ + + + + + +
+ [duplicates] +
+
+ + +

Calculo do imposto

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ BASE DE CÁLC. DO ICMS + [tot_bc_icms] + + VALOR DO ICMS + [tot_icms] + + BASE DE CÁLC. DO ICMS ST + [tot_bc_icms_st] + + VALOR DO ICMS ST + [tot_icms_st] + + V. IMP. IMPORTAÇÃO + [vImport] + + V. ICMS UF REMET. + [vICMSUFRemet] + + VALOR DO FCP + [tot_icms_fcp] + + VALOR DO PIS + [tot_icms_pis] + + V. TOTAL DE PRODUTOS + [vl_total_prod] +
+ VALOR DO FRETE + [vl_shipping] + + VALOR DO SEGURO + [vl_insurance] + + DESCONTO + [vl_discount] + + OUTRAS DESP. + [vl_other_expense] + + VALOR DO IPI + [tot_total_ipi_tax] + + V. ICMS UF DEST. + [vICMSUFDest] + + V. APROX. DO TRIBUTO + [ApproximateTax] + + VALOR DA CONFINS + [tot_icms_cofins] + + V. TOTAL DA NOTA + [vl_total] +
+
+ +

Transportador/volumes transportados

+ + + + + + + + + + + +
+ RAZÃO SOCIAL + [ds_transport_carrier_name] + + FRETE POR CONTA +
+ [ds_transport_code_shipping_type] +
+

0 - Emitente

+

1 - Destinatário

+
+ CÓDIGO ANTT + [ds_transport_rntc] + + PLACA + [ds_transport_vehicle_plate] + + UF + [ds_transport_vehicle_uf] + + CNPJ/CPF + [nl_transport_cnpj_cpf] +
+ + + + + + + + + + +
+ ENDEREÇO + [ds_transport_address] + + MUNICÍPIO + [ds_transport_city] + + UF + [ds_transport_uf] + + INSC. ESTADUAL + [ds_transport_ie] +
+ + + + + + + + + + + +
+ QUANTIDADE + [nu_transport_amount_transported_volumes] + + ESPÉCIE + [ds_transport_type_volumes_transported] + + MARCA + [ds_transport_mark_volumes_transported] + + NUMERAÇÃO + [ds_transport_number_volumes_transported] + + PESO BRUTO + [vl_transport_gross_weight] + + PESO LÍQUIDO + [vl_transport_net_weight] +
+ +

Dados do produto/serviço

+
+ + + + + + + + + + + + + + + + + + + + + [itens_products] + +
CÓDIGO + DESCRIÇÃO DO PRODUTO/SERVIÇO + NCMSHCSTCFOPUNQTD.VLR.UNITVLR.TOTALBC ICMSVLR.ICMSVLR.IPIALIQ.ICMSALIQ.IPI
+
+ + +

Calculo do issqn

+ + + + + + + + + +
+ INSCRIÇÃO MUNICIPAL + [ds_company_im] + + VALOR TOTAL DOS SERVIÇOS + [vl_total_serv] + + BASE DE CÁLCULO DO ISSQN + [tot_bc_issqn] + + VALOR DO ISSQN + [tot_issqn] +
+ + +

Dados adicionais

+ + + + + + + +
+ INFORMAÇÕES COMPLEMENTARES + [ds_additional_information] + + RESERVA AO FISCO + +
+ +
+ + + + + + +
+ [credits] +
+
+
+ [next-page] +
+ \ No newline at end of file diff --git a/Shared.NFe.Danfe.Base/Fontes/Fonte.cs b/NFe.Danfe.Nativo/Fontes/Fonte.cs similarity index 100% rename from Shared.NFe.Danfe.Base/Fontes/Fonte.cs rename to NFe.Danfe.Nativo/Fontes/Fonte.cs diff --git a/Shared.NFe.Danfe.Base/Fontes/LeiaMe.txt b/NFe.Danfe.Nativo/Fontes/LeiaMe.txt similarity index 100% rename from Shared.NFe.Danfe.Base/Fontes/LeiaMe.txt rename to NFe.Danfe.Nativo/Fontes/LeiaMe.txt diff --git a/Shared.NFe.Danfe.Base/Fontes/OpenSans-CondBold.ttf b/NFe.Danfe.Nativo/Fontes/OpenSans-CondBold.ttf similarity index 100% rename from Shared.NFe.Danfe.Base/Fontes/OpenSans-CondBold.ttf rename to NFe.Danfe.Nativo/Fontes/OpenSans-CondBold.ttf diff --git a/Shared.NFe.Danfe.Base/Fontes/OpenSans-CondLight.ttf b/NFe.Danfe.Nativo/Fontes/OpenSans-CondLight.ttf similarity index 100% rename from Shared.NFe.Danfe.Base/Fontes/OpenSans-CondLight.ttf rename to NFe.Danfe.Nativo/Fontes/OpenSans-CondLight.ttf diff --git a/Shared.NFe.Danfe.Base/Fontes/OpenSans-CondLightItalic.ttf b/NFe.Danfe.Nativo/Fontes/OpenSans-CondLightItalic.ttf similarity index 100% rename from Shared.NFe.Danfe.Base/Fontes/OpenSans-CondLightItalic.ttf rename to NFe.Danfe.Nativo/Fontes/OpenSans-CondLightItalic.ttf diff --git a/Shared.NFe.Danfe.Base/Fontes/UbuntuCondensed-Regular.ttf b/NFe.Danfe.Nativo/Fontes/UbuntuCondensed-Regular.ttf similarity index 100% rename from Shared.NFe.Danfe.Base/Fontes/UbuntuCondensed-Regular.ttf rename to NFe.Danfe.Nativo/Fontes/UbuntuCondensed-Regular.ttf diff --git a/GraphicsPrinter/AdicionarImagem.cs b/NFe.Danfe.Nativo/GraphicsPrinter/AdicionarImagem.cs similarity index 99% rename from GraphicsPrinter/AdicionarImagem.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/AdicionarImagem.cs index 62e7a3e8b..a8983dacc 100644 --- a/GraphicsPrinter/AdicionarImagem.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/AdicionarImagem.cs @@ -30,10 +30,11 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Drawing; using System.IO; -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { public class AdicionarImagem { diff --git a/GraphicsPrinter/AdicionarTexto.cs b/NFe.Danfe.Nativo/GraphicsPrinter/AdicionarTexto.cs similarity index 98% rename from GraphicsPrinter/AdicionarTexto.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/AdicionarTexto.cs index feb1a7295..56bf8711a 100644 --- a/GraphicsPrinter/AdicionarTexto.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/AdicionarTexto.cs @@ -30,9 +30,10 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Drawing; -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { public class AdicionarTexto { diff --git a/GraphicsPrinter/ComprimentoMaximo.cs b/NFe.Danfe.Nativo/GraphicsPrinter/ComprimentoMaximo.cs similarity index 98% rename from GraphicsPrinter/ComprimentoMaximo.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/ComprimentoMaximo.cs index 371081d8e..35b88f677 100644 --- a/GraphicsPrinter/ComprimentoMaximo.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/ComprimentoMaximo.cs @@ -30,7 +30,7 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { public class ComprimentoMaximo { diff --git a/GraphicsPrinter/DefineQuebraDeLinha.cs b/NFe.Danfe.Nativo/GraphicsPrinter/DefineQuebraDeLinha.cs similarity index 99% rename from GraphicsPrinter/DefineQuebraDeLinha.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/DefineQuebraDeLinha.cs index 8afbde89e..0bb2d1c32 100644 --- a/GraphicsPrinter/DefineQuebraDeLinha.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/DefineQuebraDeLinha.cs @@ -30,10 +30,11 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Collections.Generic; using System.Drawing; -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { public class DefineQuebraDeLinha { diff --git a/GraphicsPrinter/LinhaHorizontal.cs b/NFe.Danfe.Nativo/GraphicsPrinter/LinhaHorizontal.cs similarity index 98% rename from GraphicsPrinter/LinhaHorizontal.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/LinhaHorizontal.cs index 53261c80c..793997e7b 100644 --- a/GraphicsPrinter/LinhaHorizontal.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/LinhaHorizontal.cs @@ -30,9 +30,10 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Drawing; -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { public class LinhaHorizontal { diff --git a/GraphicsPrinter/MedidasLinha.cs b/NFe.Danfe.Nativo/GraphicsPrinter/MedidasLinha.cs similarity index 91% rename from GraphicsPrinter/MedidasLinha.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/MedidasLinha.cs index afe5a267c..95c69367f 100644 --- a/GraphicsPrinter/MedidasLinha.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/MedidasLinha.cs @@ -30,10 +30,11 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System; using System.Drawing; -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { internal static class MedidasLinha { @@ -46,7 +47,13 @@ public static Medida GetMedidas(AdicionarTexto adicionarTexto) public static Medida GetMedidas(string texto, Font fonte) { - Graphics g = Graphics.FromHwnd(IntPtr.Zero); + /* + * macOS: + * Graphics g = Graphics.FromHwnd(IntPtr.Zero); + * System.NotSupportedException: Specified method is not supported. + */ + Bitmap bmp = new Bitmap(1, 1); + Graphics g = Graphics.FromImage(bmp); SizeF tamanhoDaString = g.MeasureString(texto, fonte); int alturaLinha = Convert.ToInt32(tamanhoDaString.Height); int larguraLinha = Convert.ToInt32(tamanhoDaString.Width); diff --git a/GraphicsPrinter/QrCode.cs b/NFe.Danfe.Nativo/GraphicsPrinter/QrCode.cs similarity index 94% rename from GraphicsPrinter/QrCode.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/QrCode.cs index 006a7f2b1..82e53cf95 100644 --- a/GraphicsPrinter/QrCode.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/QrCode.cs @@ -30,21 +30,22 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Drawing; using ZXing; using ZXing.Common; -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { public static class QrCode { public static Image Gerar(string qrCode) { - BarcodeWriter bw = new BarcodeWriter(); + var bw = new ZXing.Windows.Compatibility.BarcodeWriter(); EncodingOptions encOptions = new EncodingOptions { Width = 130, Height = 130, Margin = 0 }; bw.Options = encOptions; bw.Format = BarcodeFormat.QR_CODE; - Bitmap imageQrCode = new Bitmap(bw.Write(qrCode)); + Bitmap imageQrCode = bw.Write(qrCode); return imageQrCode; } } diff --git a/GraphicsPrinter/RedimensionaImagemPara.cs b/NFe.Danfe.Nativo/GraphicsPrinter/RedimensionaImagemPara.cs similarity index 99% rename from GraphicsPrinter/RedimensionaImagemPara.cs rename to NFe.Danfe.Nativo/GraphicsPrinter/RedimensionaImagemPara.cs index 238e99cbe..8bd64f738 100644 --- a/GraphicsPrinter/RedimensionaImagemPara.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/RedimensionaImagemPara.cs @@ -30,11 +30,12 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ + using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; -namespace GraphicsPrinter +namespace NFe.Danfe.Nativo.GraphicsPrinter { public class RedimensionaImagemPara { diff --git a/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs b/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs index 579b5696f..cfcc9a5ba 100644 --- a/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs +++ b/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs @@ -35,10 +35,11 @@ using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Printing; +using System.Drawing.Text; +using System.IO; using System.Linq; using System.Text; using DFe.Utils; -using GraphicsPrinter; using NFe.Classes; using NFe.Classes.Informacoes.Destinatario; using NFe.Classes.Informacoes.Detalhe; @@ -46,43 +47,46 @@ using NFe.Classes.Informacoes.Identificacao.Tipos; using NFe.Classes.Informacoes.Pagamento; using NFe.Classes.Servicos.Download; -using NFe.Danfe.Base.NFCe; +using NFe.Danfe.Base.Fontes; +using NFe.Danfe.Nativo.GraphicsPrinter; +using NFe.Danfe.Nativo.Properties; +using NFe.Utils; using NFe.Utils.InformacoesSuplementares; using NFe.Utils.NFe; +using PdfSharpCore.Drawing; +using PdfSharpCore.Pdf; using NFeZeus = NFe.Classes.NFe; namespace NFe.Danfe.Nativo.NFCe { public class DanfeNativoNfce { - private static bool _viaEstabelecimento; + private bool _viaEstabelecimento; private string _cIdToken; private string _csc; private NFeZeus _nfe; private nfeProc _proc; private decimal _troco; - private Image _logo; + private byte[] _logo; private decimal _totalPago; private int _y; - private static ConfiguracaoDanfeNfce _configuracaoDanfeNfce; + private VersaoQrCode _versaoQrCode; - public DanfeNativoNfce(string xml, ConfiguracaoDanfeNfce configuracaoDanfe, string cIdToken, string csc, - decimal troco = decimal.Zero, decimal totalPago = decimal.Zero, string font = null, bool viaEstabelecimento = false) + public DanfeNativoNfce(string xml, VersaoQrCode versaoQrCode, byte[] logo, string cIdToken, string csc, decimal troco = decimal.Zero, decimal totalPago = decimal.Zero, string font = null, bool viaEstabelecimento = false) { - Inicializa(xml, configuracaoDanfe, cIdToken, csc, troco, totalPago, font); + Inicializa(xml, versaoQrCode, logo, cIdToken, csc, troco, totalPago, font, viaEstabelecimento); } - private void Inicializa(string xml, ConfiguracaoDanfeNfce configuracaoDanfe, string cIdToken, string csc, decimal troco, decimal totalPago, string font = null, bool viaEstabelecimento = false) + private void Inicializa(string xml, VersaoQrCode versaoQrCode, byte[] logo, string cIdToken, string csc, decimal troco, decimal totalPago, string font, bool viaEstabelecimento) { + _logo = logo; + _versaoQrCode = versaoQrCode; _cIdToken = cIdToken; _csc = csc; _troco = troco; _totalPago = totalPago; _viaEstabelecimento = viaEstabelecimento; - AdicionarTexto.FontPadrao = configuracaoDanfe.CarregarFontePadraoNfceNativa(font); - _logo = configuracaoDanfe.ObterLogo(); - _configuracaoDanfeNfce = configuracaoDanfe; - + AdicionarTexto.FontPadrao = this.CarregarFontePadraoNfceNativa(font); CarregarXml(xml); } @@ -135,6 +139,76 @@ public void GerarImagem(string filename, ImageFormat format) } } + public byte[] GerarImagem() + { + // Feito esse de cima para poder pegar o tamanho real da mesma desenhando + using (Bitmap bmp = new Bitmap(300, 70000)) + { + using (Graphics g = Graphics.FromImage(bmp)) + { + g.Clear(Color.White); + GerarNfCe(g); + } + + // Obtive o tamanho real na posição y agora vou fazer um com tamanho exato + using (Bitmap bmpFinal = new Bitmap(300, _y)) + using (var streamer = new MemoryStream()) + { + using (Graphics g = Graphics.FromImage(bmpFinal)) + { + g.Clear(Color.White); + g.DrawImage(bmp, 0, 0); + + bmpFinal.Save(streamer, ImageFormat.Jpeg); + } + + return streamer.ToArray(); + } + } + } + + public Func ConverterBytesParaFuncStream(byte[] bytes) + { + Func funcStream = () => + { + MemoryStream stream = new MemoryStream(bytes); + // Certifique-se de que a posição do stream esteja no início. + stream.Position = 0; + return stream; + }; + + return funcStream; + } + + public byte[] ConverterImagemParaPdfBytes(byte[] imagemBytes) + { + using (MemoryStream stream = new MemoryStream()) + { + using (PdfDocument pdf = new PdfDocument()) + { + PdfPage page = pdf.AddPage(); + XGraphics gfx = XGraphics.FromPdfPage(page); + + XImage image = XImage.FromStream(ConverterBytesParaFuncStream(imagemBytes)); + + page.Width = image.PointWidth; + page.Height = image.PointHeight; + + + gfx.DrawImage(image, 0, 0); + + pdf.Save(stream); + } + + return stream.ToArray(); + } + } + + public byte[] PdfBytes() + { + return ConverterImagemParaPdfBytes(GerarImagem()); + } + public void GerarJPEG(string filename) { GerarImagem(filename, ImageFormat.Jpeg); @@ -158,11 +232,13 @@ private void GerarNfCe(Graphics graphics) if (_logo != null) { - new RedimensionaImagemPara(new AdicionarImagem(g, _logo, x, _y), 50, 24).Desenhar(); - } - - if (_logo == null) - { + using (var ms = new MemoryStream(_logo)) + { + int logox = ((larguraLinha - 128) / 2); + var image = Image.FromStream(ms); + new RedimensionaImagemPara(new AdicionarImagem(g, image, logox, _y), 128, 128).Desenhar(); + _y += 128; + } larguraLogo = 0; } @@ -229,7 +305,12 @@ private void GerarNfCe(Graphics graphics) #region preencher itens foreach (det detalhe in det) { - AdicionarTexto codigo = new AdicionarTexto(g, detalhe.prod.cProd, 7); + var codigoXml = detalhe.prod.cProd; + + if (detalhe.prod.cProd.Length > 7) + codigoXml = detalhe.prod.cProd.Remove(7); + + AdicionarTexto codigo = new AdicionarTexto(g, codigoXml, 7); codigo.Desenhar(x, _y); AdicionarTexto nome = new AdicionarTexto(g, detalhe.prod.xProd, 7); @@ -431,7 +512,7 @@ private void GerarNfCe(Graphics graphics) _y += textoConsulteChave.Medida.Altura; AdicionarTexto urlConsulta = new AdicionarTexto(g, - string.IsNullOrEmpty(_nfe.infNFeSupl.urlChave) ? _nfe.infNFeSupl.ObterUrlConsulta(_nfe, _configuracaoDanfeNfce.VersaoQrCode) : _nfe.infNFeSupl.urlChave, 7); + string.IsNullOrEmpty(_nfe.infNFeSupl.urlChave) ? _nfe.infNFeSupl.ObterUrlConsulta(_nfe, _versaoQrCode) : _nfe.infNFeSupl.urlChave, 7); int urlConsultaX = ((larguraLinha - urlConsulta.Medida.Largura) / 2); urlConsulta.Desenhar(urlConsultaX, _y); @@ -486,6 +567,22 @@ private void GerarNfCe(Graphics graphics) int dataAutorizacaoX = (larguraLinha - dataAutorizacao.Medida.Largura) / 2; dataAutorizacao.Desenhar(dataAutorizacaoX, _y); _y += dataAutorizacao.Medida.Altura; + + if (!string.IsNullOrEmpty(_proc.protNFe.infProt.xMsg)) + { + var mensagemAdicional = new AdicionarTexto(g, _proc.protNFe.infProt.xMsg.ToString(), 7); + var quebraLinhaDezenas = new DefineQuebraDeLinha( + mensagemAdicional, + new ComprimentoMaximo(larguraLinhaMargemDireita), + mensagemAdicional.Medida.Largura + ); + + mensagemAdicional = quebraLinhaDezenas.DesenharComQuebras(g); + + int dezenasX = (larguraLinha - mensagemAdicional.Medida.Largura) / 2; + mensagemAdicional.Desenhar(dezenasX, _y); + _y += mensagemAdicional.Medida.Altura; + } } if (_nfe.infNFe.ide.tpEmis != TipoEmissao.teNormal) @@ -509,7 +606,7 @@ private void GerarNfCe(Graphics graphics) _y += 5; - var tributosIncidentes = _nfe.infNFe.total.ICMSTot.vTotTrib; + var tributosIncidentes = _nfe.infNFe.total.ICMSTot.vTotTrib ?? 0; if (tributosIncidentes != 0) { @@ -617,16 +714,16 @@ private string CnpjERazaoSocial() return cnpjERazaoSocial; } - private static string ObtemUrlQrCode(NFeZeus nfce, string idToken, string csc) + private string ObtemUrlQrCode(NFeZeus nfce, string idToken, string csc) { var urlQrCode = nfce.infNFeSupl == null - ? nfce.infNFeSupl.ObterUrlQrCode(nfce, _configuracaoDanfeNfce.VersaoQrCode, idToken, csc) + ? nfce.infNFeSupl.ObterUrlQrCode(nfce, _versaoQrCode, idToken, csc) : nfce.infNFeSupl.qrCode; return urlQrCode; } - private static string MontaMensagemDadosNfce(NFeZeus nfce) + private string MontaMensagemDadosNfce(NFeZeus nfce) { var mensagem = new StringBuilder("NFC-e nº "); mensagem.Append(nfce.infNFe.ide.nNF.ToString("D9")); @@ -643,7 +740,7 @@ private static string MontaMensagemDadosNfce(NFeZeus nfce) return mensagem.ToString(); } - private static string MontaMensagemConsumidor(dest dest) + private string MontaMensagemConsumidor(dest dest) { var mensagem = new StringBuilder("CONSUMIDOR "); @@ -717,7 +814,7 @@ private static string MontaMensagemConsumidor(dest dest) return mensagem.ToString().Replace(", ,", ", "); } - private static string GeraChaveAcesso(NFeZeus nfce) + private string GeraChaveAcesso(NFeZeus nfce) { var chaveAcesso = nfce.infNFe.Id.Substring(3); var novaChave = string.Empty; @@ -738,7 +835,7 @@ private static string GeraChaveAcesso(NFeZeus nfce) return novaChave; } - private static AdicionarTexto CriaHeaderColuna(string texto, Graphics graphics, int x, int y) + private AdicionarTexto CriaHeaderColuna(string texto, Graphics graphics, int x, int y) { var coluna = new AdicionarTexto(graphics, texto, 7); coluna.Desenhar(x, y); @@ -746,12 +843,12 @@ private static AdicionarTexto CriaHeaderColuna(string texto, Graphics graphics, return coluna; } - private static void LinhaHorizontal(Graphics g, int x, int y, int larguraLinha) + private void LinhaHorizontal(Graphics g, int x, int y, int larguraLinha) { new LinhaHorizontal(g, Pens.Black, x, y, larguraLinha, y).Desenhar(); } - private static int EscreverLinhaTitulo(Graphics g, string texto, int tamanhoFonteTitulo, int larguraLogo, int x, int y, int larguraLinha) + private int EscreverLinhaTitulo(Graphics g, string texto, int tamanhoFonteTitulo, int larguraLogo, int x, int y, int larguraLinha) { var adicionarTexto = new AdicionarTexto(g, texto, tamanhoFonteTitulo); var larguraMaximaTexto = new ComprimentoMaximo((larguraLinha - larguraLogo)); @@ -765,7 +862,7 @@ private static int EscreverLinhaTitulo(Graphics g, string texto, int tamanhoFont return y; } - private static int MensagemContingencia(Graphics g, int larguraLinha, int y) + private int MensagemContingencia(Graphics g, int larguraLinha, int y) { var contingenciaTitulo = new AdicionarTexto(g, "EMITIDA EM CONTINGÊNCIA", 10); var restoContingenciaTituloX = (larguraLinha - contingenciaTitulo.Medida.Largura) / 2; @@ -803,7 +900,7 @@ private void CarregarXml(string xml) } } - private static string ObtemDescricao(FormaPagamento? formaPagamento) + private string ObtemDescricao(FormaPagamento? formaPagamento) { var existeEnum = Enum .GetValues(typeof(FormaPagamento)) @@ -815,5 +912,28 @@ private static string ObtemDescricao(FormaPagamento? formaPagamento) else throw new ArgumentException("Forma pagamento inválida"); } + + private FontFamily CarregarFontePadraoNfceNativa(string font = null) + { + PrivateFontCollection colecaoDeFontes = null; + try + { + if (!string.IsNullOrWhiteSpace(font)) + { + return new FontFamily(font); + } + + var openSans = Fonte.CarregarDeByteArray(Resources.OpenSans_CondBold, out colecaoDeFontes); + + return openSans; + } + finally + { + if (colecaoDeFontes != null) + { + colecaoDeFontes.Dispose(); + } + } + } } -} \ No newline at end of file +} diff --git a/NFe.Danfe.Nativo/NFe.Danfe.Nativo.csproj b/NFe.Danfe.Nativo/NFe.Danfe.Nativo.csproj index 8307494d7..679c41079 100644 --- a/NFe.Danfe.Nativo/NFe.Danfe.Nativo.csproj +++ b/NFe.Danfe.Nativo/NFe.Danfe.Nativo.csproj @@ -1,95 +1,28 @@ - - - - - Debug - AnyCPU - {BA27D218-484B-4F08-BAB9-38C02181BDED} - Library - Properties - NFe.Danfe.Nativo - NFe.Danfe.Nativo - v4.5 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - False - Dlls\zxing.dll - - - False - Dlls\zxing.presentation.dll - - - - - - - - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - DFe.Utils - - - {3067efcc-91de-48ea-8f7e-e0d95216c6dc} - GraphicsPrinter - - - {29ca1da2-440d-484b-951a-cf1b2eb27984} - NFe.Classes - - - {80c6093c-47d5-41a1-9fa0-e218e82fa666} - NFe.Danfe.Base - - - {e35e7c4a-5690-4979-8b43-002975b48eaa} - NFe.Utils - - - - - - - - + + + net462;netstandard2.0;net6.0-windows + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NFe.Danfe.Nativo/Properties/AssemblyInfo.cs b/NFe.Danfe.Nativo/Properties/AssemblyInfo.cs deleted file mode 100644 index 0f5dfccfd..000000000 --- a/NFe.Danfe.Nativo/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NFe.Danfe.Nativo")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Danfe.Nativo")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ba27d218-484b-4f08-bab9-38c02181bded")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/NFe.Danfe.Nativo/Properties/Resources.Designer.cs b/NFe.Danfe.Nativo/Properties/Resources.Designer.cs new file mode 100644 index 000000000..ed6fc6f0d --- /dev/null +++ b/NFe.Danfe.Nativo/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// O código foi gerado por uma ferramenta. +// Versão de Tempo de Execução:4.0.30319.42000 +// +// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se +// o código for gerado novamente. +// +//------------------------------------------------------------------------------ + +namespace NFe.Danfe.Nativo.Properties { + using System; + + + /// + /// Uma classe de recurso de tipo de alta segurança, para pesquisar cadeias de caracteres localizadas etc. + /// + // Essa classe foi gerada automaticamente pela classe StronglyTypedResourceBuilder + // através de uma ferramenta como ResGen ou Visual Studio. + // Para adicionar ou remover um associado, edite o arquivo .ResX e execute ResGen novamente + // com a opção /str, ou recrie o projeto do VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Retorna a instância de ResourceManager armazenada em cache usada por essa classe. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NFe.Danfe.Nativo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Substitui a propriedade CurrentUICulture do thread atual para todas as + /// pesquisas de recursos que usam essa classe de recurso de tipo de alta segurança. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Consulta um recurso localizado do tipo System.Byte[]. + /// + internal static byte[] OpenSans_CondBold { + get { + object obj = ResourceManager.GetObject("OpenSans_CondBold", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/NFe.Danfe.Nativo/Properties/Resources.resx b/NFe.Danfe.Nativo/Properties/Resources.resx new file mode 100644 index 000000000..6d5a999ad --- /dev/null +++ b/NFe.Danfe.Nativo/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Fontes\OpenSans-CondBold.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/NFe.Danfe.OpenFast/DanfeOpenFastBase.cs b/NFe.Danfe.OpenFast/DanfeOpenFastBase.cs new file mode 100644 index 000000000..8d2ce3d08 --- /dev/null +++ b/NFe.Danfe.OpenFast/DanfeOpenFastBase.cs @@ -0,0 +1,172 @@ +using FastReport; +using FastReport.Export.Html; +using FastReport.Export.Image; +using FastReport.Export.PdfSimple; +using System; +using System.IO; + +namespace NFe.Danfe.OpenFast +{ + public class DanfeOpenFastBase + { + public Report Relatorio { get; protected set; } + + /// + /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DANFE + public void ExportarPdf(string arquivo) + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), arquivo); + } + + /// + /// Converte o DANFE para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + public void ExportarPdf(Stream outputStream) + { + try + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), outputStream); + outputStream.Position = 0; + } + catch (Exception ex) + { + throw ex; + } + } + + /// + /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado + /// + /// Caminho/arquivo onde deve ser salvo o PDF do DANFE + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(string arquivo, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, arquivo); + } + + /// + /// Converte o DANFE para PDF e copia para o stream + /// + /// Variável do tipo Stream para output + /// Instancia do tipo de exportacao do FastReport + public void ExportarPdf(Stream outputStream, FastReport.Export.ExportBase exportBase) + { + if (exportBase == null) + throw new NullReferenceException("exportBase deve ter um objeto instanciado, tente 'new PDFExport()'"); + + Relatorio.Prepare(); + Relatorio.Export(exportBase, outputStream); + outputStream.Position = 0; + } + + public byte[] ExportarPdf() + { + using (MemoryStream stream = new MemoryStream()) // Create a stream for the report + { + try + { + Relatorio.Prepare(); + Relatorio.Export(new PDFSimpleExport(), stream); + return stream.ToArray(); + } + catch (System.Exception ex) + { + throw ex; + } + } + } + + public byte[] ExportarHtml() + { + using (MemoryStream stream = new MemoryStream()) // Create a stream for the report + { + try + { + Relatorio.Prepare(); + HTMLExport html = new HTMLExport + { + SinglePage = true, // Single page report + Navigator = false, // Top navigation bar + EmbedPictures = true // Embeds images into a document + }; + Relatorio.Export(html, stream); + return stream.ToArray(); + } + catch (System.Exception ex) + { + throw ex; + } + } + } + + public void ExportarHtml(Stream outputStream) + { + try + { + Relatorio.Prepare(); + HTMLExport html = new HTMLExport + { + SinglePage = true, // Single page report + Navigator = false, // Top navigation bar + EmbedPictures = true // Embeds images into a document + }; + Relatorio.Export(html, outputStream); + outputStream.Position = 0; + } + catch (System.Exception ex) + { + throw ex; + } + } + + public byte[] ExportarPng() + { + using (MemoryStream stream = new MemoryStream()) // Create a stream for the report + { + try + { + Relatorio.Prepare(); + ImageExport png = new ImageExport + { + ImageFormat = ImageExportFormat.Png, + SeparateFiles = false + }; + Relatorio.Export(png, stream); + return stream.ToArray(); + } + catch (System.Exception ex) + { + throw ex; + } + } + } + + public void ExportarPng(Stream outputStream) + { + try + { + Relatorio.Prepare(); + ImageExport png = new ImageExport + { + ImageFormat = ImageExportFormat.Png, + SeparateFiles = false + }; + Relatorio.Export(png, outputStream); + outputStream.Position = 0; + } + catch (System.Exception ex) + { + throw ex; + } + } + } +} diff --git a/NFe.Danfe.OpenFast/NFCe/DanfeFrNfce.cs b/NFe.Danfe.OpenFast/NFCe/DanfeFrNfce.cs new file mode 100644 index 000000000..cf6a5880a --- /dev/null +++ b/NFe.Danfe.OpenFast/NFCe/DanfeFrNfce.cs @@ -0,0 +1,81 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFCe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.OpenFast.NFCe +{ + /// + /// Classe responsável pela impressão do DANFE da NFCe em Fast Reports + /// + public class DanfeFrNfce : DanfeOpenFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports + /// + /// Objeto do tipo nfeProc + /// Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão + /// Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ + /// Código de Segurança do Contribuinte(antigo Token) + /// Caminho e arquivo frx contendo as definições do relatório personalizado + /// Texto para ser impresso no final do documento + public DanfeFrNfce(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, string arquivoRelatorio = "", string textoRodape = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFCe\NFCe.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeNfceReport(proc, configuracaoDanfeNfce, cIdToken, csc, frx, arquivoRelatorio, textoRodape); + } + + /// + /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports. + /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe + /// + /// Objeto do tipo NFe + /// Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão + /// Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ + /// Código de Segurança do Contribuinte(antigo Token) + /// Texto para ser impresso no final do documento + public DanfeFrNfce(Classes.NFe nfe, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, string textoRodape = "") : + this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfce, cIdToken, csc, arquivoRelatorio: string.Empty, textoRodape: textoRodape) + { + } + } +} diff --git a/NFe.Danfe.OpenFast/NFe.Danfe.Fast.Standard.csproj b/NFe.Danfe.OpenFast/NFe.Danfe.Fast.Standard.csproj deleted file mode 100644 index 18bf5b5e1..000000000 --- a/NFe.Danfe.OpenFast/NFe.Danfe.Fast.Standard.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - netstandard2.0 - - - - - - - - diff --git a/NFe.Danfe.OpenFast/NFe.Danfe.OpenFast.csproj b/NFe.Danfe.OpenFast/NFe.Danfe.OpenFast.csproj new file mode 100644 index 000000000..778e0ed7c --- /dev/null +++ b/NFe.Danfe.OpenFast/NFe.Danfe.OpenFast.csproj @@ -0,0 +1,23 @@ + + + net462;netstandard2.0;net6.0 + openfastreport + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Danfe.OpenFast/NFe/DanfeFrEvento.cs b/NFe.Danfe.OpenFast/NFe/DanfeFrEvento.cs new file mode 100644 index 000000000..6a740c23a --- /dev/null +++ b/NFe.Danfe.OpenFast/NFe/DanfeFrEvento.cs @@ -0,0 +1,66 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.OpenFast.NFe +{ + /// + /// Classe responsável pela impressão do DANFE dos eventos da NFe, em Fast Reports + /// + public class DanfeFrEvento : DanfeOpenFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE do evento da NFe, em Fast Reports + /// + /// Objeto do tipo + /// Objeto do tipo + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + /// Caminho e arquivo frx contendo as definições do relatório personalizado + public DanfeFrEvento(nfeProc proc, Classes.Servicos.Consulta.procEventoNFe procEventoNFe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeEvento.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeFrEventoReport(proc, procEventoNFe, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); + } + } +} diff --git a/NFe.Danfe.OpenFast/NFe/DanfeFrNfe.cs b/NFe.Danfe.OpenFast/NFe/DanfeFrNfe.cs new file mode 100644 index 000000000..c388e3a58 --- /dev/null +++ b/NFe.Danfe.OpenFast/NFe/DanfeFrNfe.cs @@ -0,0 +1,75 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.OpenFast.NFe +{ + /// + /// Classe responsável pela impressão do DANFE da NFe em Fast Reports + /// + public class DanfeFrNfe : DanfeOpenFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports + /// + /// Objeto do tipo nfeProc + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + public DanfeFrNfe(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeRetrato.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); + } + + /// + /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports. + /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe + /// + /// Objeto do tipo + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + public DanfeFrNfe(Classes.NFe nfe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor) : this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfe, desenvolvedor) + { + } + } +} \ No newline at end of file diff --git a/NFe.Danfe.OpenFast/NFe/DanfeFrSimplificado.cs b/NFe.Danfe.OpenFast/NFe/DanfeFrSimplificado.cs new file mode 100644 index 000000000..b46a02833 --- /dev/null +++ b/NFe.Danfe.OpenFast/NFe/DanfeFrSimplificado.cs @@ -0,0 +1,30 @@ +using DFe.Utils; +using NFe.Classes; +using NFe.Danfe.Base.NFe; +using Shared.DFe.Danfe; + +namespace NFe.Danfe.OpenFast.NFe +{ + public class DanfeFrSimplificado : DanfeOpenFastBase + { + /// + /// Construtor da classe responsável pela impressão do DANFE Simplificada da NFe em Fast Reports + /// + /// Objeto do tipo nfeProc + /// Objeto do tipo contendo as definições de impressão + /// Texto do desenvolvedor a ser informado no DANFE + /// Caminho do arquivo frx + public DanfeFrSimplificado(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor = "", string arquivoRelatorio = "") + { + byte[] frx = null; + if (string.IsNullOrWhiteSpace(arquivoRelatorio)) + { + const string caminho = @"NFe\NFeSimplificado.frx"; + frx = FrxFileHelper.TryGetFrxFile(caminho); + } + + Relatorio = DanfeSharedHelper.GenerateDanfeFrNfeReport(proc, configuracaoDanfeNfe, frx, desenvolvedor, arquivoRelatorio); + } + + } +} diff --git a/NFe.Danfe.PdfClown/Atributos/AlturaFixaAttribute.cs b/NFe.Danfe.PdfClown/Atributos/AlturaFixaAttribute.cs new file mode 100644 index 000000000..2a2696a4d --- /dev/null +++ b/NFe.Danfe.PdfClown/Atributos/AlturaFixaAttribute.cs @@ -0,0 +1,6 @@ +namespace NFe.Danfe.PdfClown.Atributos +{ + internal class AlturaFixaAttribute : Attribute + { + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoBase.cs b/NFe.Danfe.PdfClown/Blocos/BlocoBase.cs new file mode 100644 index 000000000..d8d3a6103 --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoBase.cs @@ -0,0 +1,65 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Modelo; + +namespace NFe.Danfe.PdfClown.Blocos +{ + /// + /// Define um bloco básico do DANFE. + /// + internal abstract class BlocoBase : ElementoBase + { + /// + /// Constante de proporção dos campos para o formato retrato A4, porcentagem dividida pela largura desenhável. + /// + public const float Proporcao = 100F / 200F; + + public DanfeViewModel ViewModel { get; private set; } + + public abstract PosicaoBloco Posicao { get; } + + /// + /// Pilha principal. + /// + public VerticalStack MainVerticalStack { get; private set; } + + /// + /// Quando verdadeiro, o bloco é mostrado apenas na primeira página, caso contário é mostrado em todas elas. + /// + public virtual Boolean VisivelSomentePrimeiraPagina => true; + + public virtual String Cabecalho => null; + + public BlocoBase(DanfeViewModel viewModel, Estilo estilo) : base(estilo) + { + MainVerticalStack = new VerticalStack(); + ViewModel = viewModel ?? throw new ArgumentNullException(nameof(viewModel)); + + if (!String.IsNullOrWhiteSpace(Cabecalho)) + { + MainVerticalStack.Add(new CabecalhoBloco(estilo, Cabecalho)); + } + } + + public LinhaCampos AdicionarLinhaCampos() + { + var l = new LinhaCampos(Estilo, Width); + l.Width = Width; + l.Height = Constantes.CampoAltura; + MainVerticalStack.Add(l); + return l; + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + MainVerticalStack.SetPosition(X, Y); + MainVerticalStack.Width = Width; + MainVerticalStack.Draw(gfx); + } + + public override float Height { get => MainVerticalStack.Height; set => throw new NotSupportedException(); } + public override bool PossuiContono => false; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoCalculoImposto.cs b/NFe.Danfe.PdfClown/Blocos/BlocoCalculoImposto.cs new file mode 100644 index 000000000..9875512fc --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoCalculoImposto.cs @@ -0,0 +1,59 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; + +namespace NFe.Danfe.PdfClown.Blocos +{ + class BlocoCalculoImposto : BlocoBase + { + public BlocoCalculoImposto(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) + { + var m = ViewModel.CalculoImposto; + + var l = AdicionarLinhaCampos() + .ComCampoNumerico("BASE DE CÁLC. DO ICMS", m.BaseCalculoIcms) + .ComCampoNumerico("VALOR DO ICMS", m.ValorIcms) + .ComCampoNumerico("BASE DE CÁLC. ICMS S.T.", m.BaseCalculoIcmsSt) + .ComCampoNumerico("VALOR DO ICMS SUBST.", m.ValorIcmsSt) + .ComCampoNumerico("V. IMP. IMPORTAÇÃO", m.ValorII); + + if (ViewModel.ExibirIcmsInterestadual) + { + l.ComCampoNumerico("V. ICMS UF REMET.", m.vICMSUFRemet) + .ComCampoNumerico("VALOR DO FCP", m.vFCPUFDest); + } + + if (ViewModel.ExibirPisConfins) + { + l.ComCampoNumerico("VALOR DO PIS", m.ValorPis); + } + + l.ComCampoNumerico("V. TOTAL PRODUTOS", m.ValorTotalProdutos) + .ComLargurasIguais(); + + l = AdicionarLinhaCampos() + .ComCampoNumerico("Valor do Frete", m.ValorFrete) + .ComCampoNumerico("Valor do Seguro", m.ValorSeguro) + .ComCampoNumerico("Desconto", m.Desconto) + .ComCampoNumerico("Outras Despesas", m.OutrasDespesas) + .ComCampoNumerico("Valor Ipi", m.ValorIpi); + + if (ViewModel.ExibirIcmsInterestadual) + { + l.ComCampoNumerico("V. ICMS UF DEST.", m.vICMSUFDest) + .ComCampoNumerico("V. TOT. TRIB.", m.ValorAproximadoTributos); + } + + if (ViewModel.ExibirPisConfins) + { + l.ComCampoNumerico("VALOR DO COFINS", m.ValorCofins); + } + + l.ComCampoNumerico("Valor Total da Nota", m.ValorTotalNota) + .ComLargurasIguais(); + } + + public override PosicaoBloco Posicao => PosicaoBloco.Topo; + public override string Cabecalho => "Cálculo do Imposto"; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoCalculoIssqn.cs b/NFe.Danfe.PdfClown/Blocos/BlocoCalculoIssqn.cs new file mode 100644 index 000000000..04d05df55 --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoCalculoIssqn.cs @@ -0,0 +1,24 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class BlocoCalculoIssqn : BlocoBase + { + public BlocoCalculoIssqn(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) + { + var m = viewModel.CalculoIssqn; + + AdicionarLinhaCampos() + .ComCampo("INSCRIÇÃO MUNICIPAL", m.InscricaoMunicipal, AlinhamentoHorizontal.Centro) + .ComCampoNumerico("VALOR TOTAL DOS SERVIÇOS", m.ValorTotalServicos) + .ComCampoNumerico("BASE DE CÁLCULO DO ISSQN", m.BaseIssqn) + .ComCampoNumerico("VALOR TOTAL DO ISSQN", m.ValorIssqn) + .ComLargurasIguais(); + } + + public override PosicaoBloco Posicao => PosicaoBloco.Base; + public override string Cabecalho => "CÁLCULO DO ISSQN"; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoCanhoto.cs b/NFe.Danfe.PdfClown/Blocos/BlocoCanhoto.cs new file mode 100644 index 000000000..9814073dc --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoCanhoto.cs @@ -0,0 +1,38 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class BlocoCanhoto : BlocoBase + { + public const float TextoRecebimentoAltura = 10; + public const float AlturaLinha2 = 9; + + public BlocoCanhoto(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) + { + var textoRecebimento = new TextoSimples(estilo, viewModel.TextoRecebimento) { Height = TextoRecebimentoAltura, TamanhoFonte = 8 }; + var nfe = new NumeroNfSerie(estilo, viewModel.NfNumero.ToString(Formatador.FormatoNumeroNF), viewModel.NfSerie.ToString()) { Height = AlturaLinha2 + TextoRecebimentoAltura, Width = 30 }; + + var campos = new LinhaCampos(Estilo) { Height = AlturaLinha2 } + .ComCampo("Data de Recebimento", null) + .ComCampo("Identificação e assinatura do recebedor", null) + .ComLarguras(50, 0); + + var coluna1 = new VerticalStack(); + coluna1.Add(textoRecebimento, campos); + + var linha = new FlexibleLine() { Height = coluna1.Height } + .ComElemento(coluna1) + .ComElemento(nfe) + .ComLarguras(0, 16); + + MainVerticalStack.Add(linha, new LinhaTracejada(2)); + + } + + public override PosicaoBloco Posicao => PosicaoBloco.Topo; + + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoDadosAdicionais.cs b/NFe.Danfe.PdfClown/Blocos/BlocoDadosAdicionais.cs new file mode 100644 index 000000000..cfe3b6ac7 --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoDadosAdicionais.cs @@ -0,0 +1,54 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Modelo; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class BlocoDadosAdicionais : BlocoBase + { + public const float AlturaMinima = 25; + private CampoMultilinha _cInfComplementares; + private FlexibleLine _Linha; + private Campo _cReservadoFisco; + public const float InfComplementaresLarguraPorcentagem = 75; + + public BlocoDadosAdicionais(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) + { + _cInfComplementares = new CampoMultilinha("Informações Complementares", ViewModel.TextoAdicional(), estilo); + _cReservadoFisco = new CampoMultilinha("Reservado ao fisco", ViewModel.TextoAdicionalFisco(), estilo); + + _Linha = new FlexibleLine() { Height = _cInfComplementares.Height } + .ComElemento(_cInfComplementares) + .ComElemento(_cReservadoFisco) + .ComLarguras(InfComplementaresLarguraPorcentagem, 0); + + MainVerticalStack.Add(_Linha); + } + + public override float Width + { + get => base.Width; + set + { + base.Width = value; + // Força o ajuste da altura do InfComplementares + if (_cInfComplementares != null && _Linha != null) + { + _Linha.Width = value; + _Linha.Posicionar(); + _cInfComplementares.Height = AlturaMinima; + _Linha.Height = _cInfComplementares.Height; + } + } + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + } + + public override PosicaoBloco Posicao => PosicaoBloco.Base; + public override string Cabecalho => "Dados adicionais"; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoDestinatarioRemetente.cs b/NFe.Danfe.PdfClown/Blocos/BlocoDestinatarioRemetente.cs new file mode 100644 index 000000000..c2179243d --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoDestinatarioRemetente.cs @@ -0,0 +1,39 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class BlocoDestinatarioRemetente : BlocoBase + { + public BlocoDestinatarioRemetente(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) + { + var destinatario = viewModel.Destinatario; + + AdicionarLinhaCampos() + .ComCampo(Strings.RazaoSocial, destinatario.RazaoSocial) + .ComCampo(Strings.CnpjCpf, Formatador.FormatarCpfCnpj(destinatario.CnpjCpf), AlinhamentoHorizontal.Centro) + .ComCampo("Data de Emissão", viewModel.DataHoraEmissao.Formatar(), AlinhamentoHorizontal.Centro) + .ComLarguras(0, 45F * Proporcao, 30F * Proporcao); + + AdicionarLinhaCampos() + .ComCampo(Strings.Endereco, destinatario.EnderecoLinha1) + .ComCampo(Strings.BairroDistrito, destinatario.EnderecoBairro) + .ComCampo(Strings.Cep, Formatador.FormatarCEP(destinatario.EnderecoCep), AlinhamentoHorizontal.Centro) + .ComCampo("Data Entrada / Saída", ViewModel.DataSaidaEntrada.Formatar(), AlinhamentoHorizontal.Centro) + .ComLarguras(0, 45F * Proporcao, 25F * Proporcao, 30F * Proporcao); + + AdicionarLinhaCampos() + .ComCampo(Strings.Municipio, destinatario.Municipio) + .ComCampo(Strings.FoneFax, Formatador.FormatarTelefone(destinatario.Telefone), AlinhamentoHorizontal.Centro) + .ComCampo(Strings.UF, destinatario.EnderecoUf, AlinhamentoHorizontal.Centro) + .ComCampo(Strings.InscricaoEstadual, destinatario.Ie, AlinhamentoHorizontal.Centro) + .ComCampo("Hora Entrada / Saída", ViewModel.HoraSaidaEntrada.Formatar(), AlinhamentoHorizontal.Centro) + .ComLarguras(0, 35F * Proporcao, 7F * Proporcao, 40F * Proporcao, 30F * Proporcao); + } + + public override string Cabecalho => "Destinatário / Remetente"; + public override PosicaoBloco Posicao => PosicaoBloco.Topo; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoDuplicataFatura.cs b/NFe.Danfe.PdfClown/Blocos/BlocoDuplicataFatura.cs new file mode 100644 index 000000000..c473260a6 --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoDuplicataFatura.cs @@ -0,0 +1,42 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class BlocoDuplicataFatura : BlocoBase + { + + public BlocoDuplicataFatura(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) + { + var de = viewModel.Duplicatas.Select(x => new Duplicata(estilo, x)).ToList(); + var eh = de.First().Height; + + int numeroElementosLinha = ViewModel.Orientacao == Orientacao.Paisagem ? 7 : 6; + + int i = 0; + + while (i < de.Count) + { + FlexibleLine fl = new FlexibleLine(Width, eh); + + int i2; + for (i2 = 0; i2 < numeroElementosLinha && i < de.Count; i2++, i++) + { + fl.ComElemento(de[i]); + } + + for (; i2 < numeroElementosLinha; i2++) + fl.ComElemento(new ElementoVazio()); + + + fl.ComLargurasIguais(); + MainVerticalStack.Add(fl); + } + + } + + public override string Cabecalho => "Fatura / Duplicata"; + public override PosicaoBloco Posicao => PosicaoBloco.Topo; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoIdentificacaoEmitente.cs b/NFe.Danfe.PdfClown/Blocos/BlocoIdentificacaoEmitente.cs new file mode 100644 index 000000000..5e55e9546 --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoIdentificacaoEmitente.cs @@ -0,0 +1,70 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; +using org.pdfclown.documents.contents.xObjects; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class BlocoIdentificacaoEmitente : BlocoBase + { + public const float LarguraCampoChaveNFe = 93F; + public const float AlturaLinha1 = 30; + + NumeroNfSerie2 ifdNfe; + IdentificacaoEmitente idEmitente; + + public BlocoIdentificacaoEmitente(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) + { + + var textoConsulta = new TextoSimples(Estilo, Strings.TextoConsulta) + { + Height = 8, + AlinhamentoHorizontal = AlinhamentoHorizontal.Centro, + AlinhamentoVertical = AlinhamentoVertical.Centro, + TamanhoFonte = 9 + }; + + var campoChaveAcesso = new Campo("Chave de Acesso", Formatador.FormatarChaveAcesso(ViewModel.ChaveAcesso), estilo, AlinhamentoHorizontal.Centro) { Height = Constantes.CampoAltura }; + var codigoBarras = new Barcode128C(viewModel.ChaveAcesso, Estilo) { Height = AlturaLinha1 - textoConsulta.Height - campoChaveAcesso.Height }; + + var coluna3 = new VerticalStack(); + coluna3.Add(codigoBarras, campoChaveAcesso, textoConsulta); + + ifdNfe = new NumeroNfSerie2(estilo, ViewModel); + idEmitente = new IdentificacaoEmitente(Estilo, ViewModel); + + FlexibleLine fl = new FlexibleLine() { Height = coluna3.Height } + .ComElemento(idEmitente) + .ComElemento(ifdNfe) + .ComElemento(coluna3) + .ComLarguras(0, 15, 46.5F); + + MainVerticalStack.Add(fl); + + AdicionarLinhaCampos() + .ComCampo("Natureza da operação", ViewModel.NaturezaOperacao) + .ComCampo("Protocolo de autorização", ViewModel.ProtocoloAutorizacao, AlinhamentoHorizontal.Centro) + .ComLarguras(0, 46.5F); + + AdicionarLinhaCampos() + .ComCampo("Inscrição Estadual", ViewModel.Emitente.Ie, AlinhamentoHorizontal.Centro) + .ComCampo("Inscrição Estadual do Subst. Tributário", ViewModel.Emitente.IeSt, AlinhamentoHorizontal.Centro) + .ComCampo("Cnpj", Formatador.FormatarCnpj(ViewModel.Emitente.CnpjCpf), AlinhamentoHorizontal.Centro) + .ComLargurasIguais(); + + } + + public XObject Logo + { + get => idEmitente.Logo; + set => idEmitente.Logo = value; + } + + public override PosicaoBloco Posicao => PosicaoBloco.Topo; + public override bool VisivelSomentePrimeiraPagina => false; + + public RectangleF RetanguloNumeroFolhas => ifdNfe.RetanguloNumeroFolhas; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoLocalEntrega.cs b/NFe.Danfe.PdfClown/Blocos/BlocoLocalEntrega.cs new file mode 100644 index 000000000..0df1e2e9b --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoLocalEntrega.cs @@ -0,0 +1,15 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Modelo; + +namespace NFe.Danfe.PdfClown.Blocos +{ + class BlocoLocalEntrega : BlocoLocalEntregaRetirada + { + public BlocoLocalEntrega(DanfeViewModel viewModel, Estilo estilo) + : base(viewModel, estilo, viewModel.LocalEntrega) + { + } + + public override string Cabecalho => "Informações do local de entrega"; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoLocalEntregaRetirada.cs b/NFe.Danfe.PdfClown/Blocos/BlocoLocalEntregaRetirada.cs new file mode 100644 index 000000000..fe2a2287d --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoLocalEntregaRetirada.cs @@ -0,0 +1,39 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Blocos +{ + abstract class BlocoLocalEntregaRetirada : BlocoBase + { + public LocalEntregaRetiradaViewModel Model { get; private set; } + + public BlocoLocalEntregaRetirada(DanfeViewModel viewModel, Estilo estilo, LocalEntregaRetiradaViewModel localModel) : base(viewModel, estilo) + { + Model = localModel ?? throw new ArgumentNullException(nameof(localModel)); + + AdicionarLinhaCampos() + .ComCampo(Strings.NomeRazaoSocial, Model.NomeRazaoSocial) + .ComCampo(Strings.CnpjCpf, Formatador.FormatarCpfCnpj(Model.CnpjCpf), AlinhamentoHorizontal.Centro) + .ComCampo(Strings.InscricaoEstadual, Model.InscricaoEstadual, AlinhamentoHorizontal.Centro) + .ComLarguras(0, 45F * Proporcao, 30F * Proporcao); + + AdicionarLinhaCampos() + .ComCampo(Strings.Endereco, Model.Endereco) + .ComCampo(Strings.BairroDistrito, Model.Bairro) + .ComCampo(Strings.Cep, Formatador.FormatarCEP(Model.Cep), AlinhamentoHorizontal.Centro) + .ComLarguras(0, 45F * Proporcao, 30F * Proporcao); + + AdicionarLinhaCampos() + .ComCampo(Strings.Municipio, Model.Municipio) + .ComCampo(Strings.UF, Model.Uf, AlinhamentoHorizontal.Centro) + .ComCampo(Strings.FoneFax, Formatador.FormatarTelefone(Model.Telefone), AlinhamentoHorizontal.Centro) + .ComLarguras(0, 7F * Proporcao, 30F * Proporcao); + } + + public override PosicaoBloco Posicao => PosicaoBloco.Topo; + + } +} + diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoLocalRetirada.cs b/NFe.Danfe.PdfClown/Blocos/BlocoLocalRetirada.cs new file mode 100644 index 000000000..ba5228ddb --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoLocalRetirada.cs @@ -0,0 +1,15 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Modelo; + +namespace NFe.Danfe.PdfClown.Blocos +{ + class BlocoLocalRetirada : BlocoLocalEntregaRetirada + { + public BlocoLocalRetirada(DanfeViewModel viewModel, Estilo estilo) + : base(viewModel, estilo, viewModel.LocalRetirada) + { + } + + public override string Cabecalho => "Informações do local de retirada"; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/BlocoTransportador.cs b/NFe.Danfe.PdfClown/Blocos/BlocoTransportador.cs new file mode 100644 index 000000000..a510e4cb6 --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/BlocoTransportador.cs @@ -0,0 +1,52 @@ +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class BlocoTransportador : BlocoBase + { + public const float LarguraCampoPlacaVeiculo = 22F * Proporcao; + public const float LarguraCampoCodigoAntt = 30F * Proporcao; + public const float LarguraCampoCnpj = 31F * Proporcao; + public const float LarguraCampoUf = 7F * Proporcao; + public const float LarguraFrete = 34F * Proporcao; + + public BlocoTransportador(DanfeViewModel viewModel, Estilo campoEstilo) : base(viewModel, campoEstilo) + { + var transportadora = viewModel.Transportadora; + + AdicionarLinhaCampos() + .ComCampo(Strings.RazaoSocial, transportadora.RazaoSocial) + .ComCampo("Frete", transportadora.ModalidadeFreteString, AlinhamentoHorizontal.Centro) + .ComCampo("Código ANTT", transportadora.CodigoAntt, AlinhamentoHorizontal.Centro) + .ComCampo("Placa do Veículo", transportadora.Placa, AlinhamentoHorizontal.Centro) + .ComCampo(Strings.UF, transportadora.VeiculoUf, AlinhamentoHorizontal.Centro) + .ComCampo(Strings.CnpjCpf, Formatador.FormatarCnpj(transportadora.CnpjCpf), AlinhamentoHorizontal.Centro) + .ComLarguras(0, LarguraFrete, LarguraCampoCodigoAntt, LarguraCampoPlacaVeiculo, LarguraCampoUf, LarguraCampoCnpj); + + AdicionarLinhaCampos() + .ComCampo(Strings.Endereco, transportadora.EnderecoLogadrouro) + .ComCampo(Strings.Municipio, transportadora.Municipio) + .ComCampo(Strings.UF, transportadora.EnderecoUf, AlinhamentoHorizontal.Centro) + .ComCampo(Strings.InscricaoEstadual, transportadora.Ie, AlinhamentoHorizontal.Centro) + .ComLarguras(0, LarguraCampoPlacaVeiculo + LarguraCampoCodigoAntt, LarguraCampoUf, LarguraCampoCnpj); + + var l = (float)(LarguraCampoCodigoAntt + LarguraCampoPlacaVeiculo + LarguraCampoUf + LarguraCampoCnpj) / 3F; + + AdicionarLinhaCampos() + .ComCampoNumerico(Strings.Quantidade, transportadora.QuantidadeVolumes, 3) + .ComCampo("Espécie", transportadora.Especie) + .ComCampo("Marca", transportadora.Marca) + .ComCampo("Numeração", transportadora.Numeracao) + .ComCampoNumerico("Peso Bruto", transportadora.PesoBruto, 3) + .ComCampoNumerico("Peso Líquido", transportadora.PesoLiquido, 3) + .ComLarguras(20F / 200F * 100, 0, 0, l, l, l); + + } + + public override PosicaoBloco Posicao => PosicaoBloco.Topo; + public override string Cabecalho => "Transportador / Volumes Transportados"; + } +} diff --git a/NFe.Danfe.PdfClown/Blocos/TabelaProdutoServicos.cs b/NFe.Danfe.PdfClown/Blocos/TabelaProdutoServicos.cs new file mode 100644 index 000000000..1e27d2660 --- /dev/null +++ b/NFe.Danfe.PdfClown/Blocos/TabelaProdutoServicos.cs @@ -0,0 +1,108 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Blocos +{ + internal class TabelaProdutosServicos : ElementoBase + { + public CabecalhoBloco CabecalhoBloco { get; private set; } + public Tabela Tabela { get; private set; } + public DanfeViewModel ViewModel { get; private set; } + + public TabelaProdutosServicos(DanfeViewModel viewModel, Estilo estilo) : base(estilo) + { + ViewModel = viewModel ?? throw new ArgumentNullException(nameof(viewModel)); + CabecalhoBloco = new CabecalhoBloco(estilo, "DADOS DOS PRODUTOS / SERVIÇOS"); + + var ad = AlinhamentoHorizontal.Direita; + var ac = AlinhamentoHorizontal.Centro; + var ae = AlinhamentoHorizontal.Esquerda; + + Tabela = new Tabela(Estilo); + var cabecalho4 = ViewModel.Emitente.CRT == "3" ? "O/CST" : "O/CSOSN"; + + if (ViewModel.Orientacao == Orientacao.Retrato) + { + Tabela + .ComColuna(8.5f, ac, "CÓDIGO", "PRODUTO") + .ComColuna(0, ae, "DESCRIÇÃO DO PRODUTO / SERVIÇO") + .ComColuna(5.6F, ac, "NCM/SH") + .ComColuna(3.9F, ac, cabecalho4) + .ComColuna(3.5F, ac, "CFOP") + .ComColuna(3.25F, ac, "UN") + .ComColuna(6F, ad, "QUANTI.") + .ComColuna(6F, ad, "VALOR", "UNIT.") + .ComColuna(6F, ad, "VALOR", "TOTAL") + .ComColuna(6F, ad, "B CÁLC", "ICMS") + .ComColuna(5, ad, "VALOR", "ICMS") + .ComColuna(5, ad, "VALOR", "IPI") + .ComColuna(3.5F, ad, "ALIQ.", "ICMS") + .ComColuna(3.5F, ad, "ALIQ.", "IPI"); + } + if (ViewModel.Orientacao == Orientacao.Paisagem) + { + Tabela + .ComColuna(8.1f, ac, "CÓDIGO PRODUTO") + .ComColuna(0, ae, "DESCRIÇÃO DO PRODUTO / SERVIÇO") + .ComColuna(5.5F, ac, "NCM/SH") + .ComColuna(3.1F, ac, cabecalho4) + .ComColuna(3.1F, ac, "CFOP") + .ComColuna(3F, ac, "UN") + .ComColuna(5.25F, ad, "QUANTI.") + .ComColuna(5.6F, ad, "VALOR UNIT.") + .ComColuna(5.6F, ad, "VALOR TOTAL") + .ComColuna(5.6F, ad, "B CÁLC ICMS") + .ComColuna(5.6F, ad, "VALOR ICMS") + .ComColuna(5.6F, ad, "VALOR IPI") + .ComColuna(3F, ad, "ALIQ.", "ICMS") + .ComColuna(3F, ad, "ALIQ.", "IPI"); + } + + Tabela.AjustarLarguraColunas(); + + foreach (var p in ViewModel.Produtos) + { + var linha = new List + { + p.Codigo, + p.DescricaoCompleta, + p.Ncm, + p.OCst, + p.Cfop.Formatar("N0"), + p.Unidade, + p.Quantidade.Formatar(), + p.ValorUnitario.Formatar(), + p.ValorTotal.Formatar(), + p.BaseIcms.Formatar(), + p.ValorIcms.Formatar(), + p.ValorIpi.Formatar(), + p.AliquotaIcms.Formatar(), + p.AliquotaIpi.Formatar() + }; + + Tabela.AdicionarLinha(linha); + } + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + Tabela.SetPosition(RetanguloTabela.Location); + Tabela.SetSize(RetanguloTabela.Size); + Tabela.Draw(gfx); + + CabecalhoBloco.SetPosition(X, Y); + CabecalhoBloco.Width = Width; + CabecalhoBloco.Draw(gfx); + } + + public RectangleF RetanguloTabela => BoundingBox.CutTop(CabecalhoBloco.Height); + public Boolean CompletamenteDesenhada => Tabela.LinhaAtual == ViewModel.Produtos.Count; + public override bool PossuiContono => false; + } +} diff --git a/NFe.Danfe.PdfClown/Constantes.cs b/NFe.Danfe.PdfClown/Constantes.cs new file mode 100644 index 000000000..0ec4513d8 --- /dev/null +++ b/NFe.Danfe.PdfClown/Constantes.cs @@ -0,0 +1,13 @@ +namespace NFe.Danfe.PdfClown +{ + internal static class Constantes + { + /// + /// Altura do campo em milímetros. + /// + public const float CampoAltura = 6.75F; + + public const float A4Largura = 210; + public const float A4Altura = 297; + } +} diff --git a/NFe.Danfe.PdfClown/DanfeDoc.cs b/NFe.Danfe.PdfClown/DanfeDoc.cs new file mode 100644 index 000000000..354b1c03a --- /dev/null +++ b/NFe.Danfe.PdfClown/DanfeDoc.cs @@ -0,0 +1,271 @@ +using NFe.Danfe.PdfClown.Blocos; +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Modelo; +using org.pdfclown.documents; +using org.pdfclown.documents.contents.fonts; +using org.pdfclown.files; +using File = org.pdfclown.files.File; + +namespace NFe.Danfe.PdfClown +{ + public class DanfeDoc : IDisposable + { + public DanfeViewModel ViewModel { get; private set; } + public File File { get; private set; } + internal Document PdfDocument { get; private set; } + + internal BlocoCanhoto Canhoto { get; private set; } + internal BlocoIdentificacaoEmitente IdentificacaoEmitente { get; private set; } + + internal List _Blocos; + internal Estilo EstiloPadrao { get; private set; } + + internal List Paginas { get; private set; } + + private StandardType1Font _FonteRegular; + private StandardType1Font _FonteNegrito; + private StandardType1Font _FonteItalico; + private StandardType1Font.FamilyEnum _FonteFamilia; + + private Boolean _FoiGerado; + + private org.pdfclown.documents.contents.xObjects.XObject _LogoObject = null; + + public DanfeDoc(DanfeViewModel viewModel) + { + ViewModel = viewModel ?? throw new ArgumentNullException(nameof(viewModel)); + + _Blocos = new List(); + File = new File(); + PdfDocument = File.Document; + + // De acordo com o item 7.7, a fonte deve ser Times New Roman ou Courier New. + _FonteFamilia = StandardType1Font.FamilyEnum.Times; + _FonteRegular = new StandardType1Font(PdfDocument, _FonteFamilia, false, false); + _FonteNegrito = new StandardType1Font(PdfDocument, _FonteFamilia, true, false); + _FonteItalico = new StandardType1Font(PdfDocument, _FonteFamilia, false, true); + + EstiloPadrao = CriarEstilo(); + + Paginas = new List(); + Canhoto = CriarBloco(); + IdentificacaoEmitente = AdicionarBloco(); + AdicionarBloco(); + + if (ViewModel.LocalRetirada != null && ViewModel.ExibirBlocoLocalRetirada) + AdicionarBloco(); + + if (ViewModel.LocalEntrega != null && ViewModel.ExibirBlocoLocalEntrega) + AdicionarBloco(); + + if (ViewModel.Duplicatas.Count > 0) + AdicionarBloco(); + + AdicionarBloco(ViewModel.Orientacao == Orientacao.Paisagem ? EstiloPadrao : CriarEstilo(4.75F)); + AdicionarBloco(); + AdicionarBloco(CriarEstilo(tFonteCampoConteudo: 8)); + + if (ViewModel.CalculoIssqn.Mostrar) + AdicionarBloco(); + + AdicionarMetadata(); + + _FoiGerado = false; + } + + public void AdicionarLogoImagem(System.IO.Stream stream) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + + var img = org.pdfclown.documents.contents.entities.Image.Get(stream); + if (img == null) throw new InvalidOperationException("O logotipo não pode ser carregado, certifique-se que a imagem esteja no formato JPEG não progressivo."); + _LogoObject = img.ToXObject(PdfDocument); + } + + public void AdicionarLogoPdf(System.IO.Stream stream) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + + using (var pdfFile = new org.pdfclown.files.File(new org.pdfclown.bytes.Stream(stream))) + { + _LogoObject = pdfFile.Document.Pages[0].ToXObject(PdfDocument); + } + } + + public void AdicionarLogoImagem(string path) + { + if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException(nameof(path)); + + using (var fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read)) + { + AdicionarLogoImagem(fs); + } + } + + public void AdicionarLogoPdf(string path) + { + if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException(nameof(path)); + + if(path.Contains("../") || path.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + + using (var fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read)) + { + AdicionarLogoPdf(fs); + } + } + + private void AdicionarMetadata() + { + var info = PdfDocument.Information; + info[new org.pdfclown.objects.PdfName("ChaveAcesso")] = ViewModel.ChaveAcesso; + info[new org.pdfclown.objects.PdfName("TipoDocumento")] = "DANFE"; + info.CreationDate = DateTime.Now; + info.Creator = string.Format("{0} {1} - {2}", "Zion.Danfe", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version, "https://github.com/Laranjeiras/Zion.Danfe"); + info.Title = "DANFE (Documento auxiliar da NFe)"; + } + + private Estilo CriarEstilo(float tFonteCampoCabecalho = 6, float tFonteCampoConteudo = 10) + { + return new Estilo(_FonteRegular, _FonteNegrito, _FonteItalico, tFonteCampoCabecalho, tFonteCampoConteudo); + } + + public void Gerar() + { + if (_FoiGerado) throw new InvalidOperationException("O Danfe já foi gerado."); + + IdentificacaoEmitente.Logo = _LogoObject; + var tabela = new TabelaProdutosServicos(ViewModel, EstiloPadrao); + + while (true) + { + DanfePagina p = CriarPagina(); + + tabela.SetPosition(p.RetanguloCorpo.Location); + tabela.SetSize(p.RetanguloCorpo.Size); + tabela.Draw(p.Gfx); + + p.Gfx.Stroke(); + p.Gfx.Flush(); + + if (tabela.CompletamenteDesenhada) break; + + } + + PreencherNumeroFolhas(); + _FoiGerado = true; + + } + + private DanfePagina CriarPagina() + { + DanfePagina p = new DanfePagina(this); + Paginas.Add(p); + p.DesenharBlocos(Paginas.Count == 1); + p.DesenharCreditos(); + + if (ViewModel.TipoAmbiente == 2) + p.DesenharAvisoHomologacao(); + + return p; + } + + internal T CriarBloco() where T : BlocoBase + { + return (T)Activator.CreateInstance(typeof(T), ViewModel, EstiloPadrao); + } + + internal T CriarBloco(Estilo estilo) where T : BlocoBase + { + return (T)Activator.CreateInstance(typeof(T), ViewModel, estilo); + } + + internal T AdicionarBloco() where T : BlocoBase + { + var bloco = CriarBloco(); + _Blocos.Add(bloco); + return bloco; + } + + internal T AdicionarBloco(Estilo estilo) where T : BlocoBase + { + var bloco = CriarBloco(estilo); + _Blocos.Add(bloco); + return bloco; + } + + internal void AdicionarBloco(BlocoBase bloco) + { + _Blocos.Add(bloco); + } + + internal void PreencherNumeroFolhas() + { + int nFolhas = Paginas.Count; + for (int i = 0; i < Paginas.Count; i++) + { + Paginas[i].DesenhaNumeroPaginas(i + 1, nFolhas); + } + } + + public void Salvar(string path) + { + if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException(nameof(path)); + + File.Save(path, SerializationModeEnum.Incremental); + } + + public void Salvar(System.IO.Stream stream) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + + File.Save(new org.pdfclown.bytes.Stream(stream), SerializationModeEnum.Incremental); + } + + public Byte[] ObterPdfBytes(System.IO.Stream stream) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + var pdfStrean = new org.pdfclown.bytes.Stream(stream); + File.Save(pdfStrean, SerializationModeEnum.Incremental); + return pdfStrean.ToByteArray(); + } + + #region IDisposable Support + private bool disposedValue = false; // To detect redundant calls + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + File.Dispose(); + } + + // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. + // TODO: set large fields to null. + + disposedValue = true; + } + } + + // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources. + // ~Danfe() { + // // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + // Dispose(false); + // } + + // This code added to correctly implement the disposable pattern. + public void Dispose() + { + // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + Dispose(true); + // TODO: uncomment the following line if the finalizer is overridden above. + // GC.SuppressFinalize(this); + } + #endregion + } +} diff --git a/NFe.Danfe.PdfClown/DanfePagina.cs b/NFe.Danfe.PdfClown/DanfePagina.cs new file mode 100644 index 000000000..76ea1e0a9 --- /dev/null +++ b/NFe.Danfe.PdfClown/DanfePagina.cs @@ -0,0 +1,141 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Blocos; +using NFe.Danfe.PdfClown.Elementos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Tools; +using org.pdfclown.documents; +using org.pdfclown.documents.contents.composition; + +namespace NFe.Danfe.PdfClown +{ + internal class DanfePagina + { + public DanfeDoc Danfe { get; private set; } + public Page PdfPage { get; private set; } + public PrimitiveComposer PrimitiveComposer { get; private set; } + public Gfx Gfx { get; private set; } + public RectangleF RetanguloNumeroFolhas { get; set; } + public RectangleF RetanguloCorpo { get; private set; } + public RectangleF RetanguloDesenhavel { get; private set; } + public RectangleF RetanguloCreditos { get; private set; } + public RectangleF Retangulo { get; private set; } + + public DanfePagina(DanfeDoc danfe) + { + Danfe = danfe ?? throw new ArgumentNullException(nameof(danfe)); + PdfPage = new Page(Danfe.PdfDocument); + Danfe.PdfDocument.Pages.Add(PdfPage); + + PrimitiveComposer = new PrimitiveComposer(PdfPage); + Gfx = new Gfx(PrimitiveComposer); + + if (Danfe.ViewModel.Orientacao == Orientacao.Retrato) + Retangulo = new RectangleF(0, 0, Constantes.A4Largura, Constantes.A4Altura); + else + Retangulo = new RectangleF(0, 0, Constantes.A4Altura, Constantes.A4Largura); + + RetanguloDesenhavel = Retangulo.InflatedRetangle(Danfe.ViewModel.Margem); + RetanguloCreditos = new RectangleF(RetanguloDesenhavel.X, RetanguloDesenhavel.Bottom + Danfe.EstiloPadrao.PaddingSuperior, RetanguloDesenhavel.Width, Retangulo.Height - RetanguloDesenhavel.Height - Danfe.EstiloPadrao.PaddingSuperior); + PdfPage.Size = new SizeF(Retangulo.Width.ToPoint(), Retangulo.Height.ToPoint()); + } + + public void DesenharCreditos() + { + //Gfx.DrawString($"[Zion.Danfe] {Strings.TextoCreditos}", RetanguloCreditos, Danfe.EstiloPadrao.CriarFonteItalico(6), AlinhamentoHorizontal.Direita); + } + + private void DesenharCanhoto() + { + if (Danfe.ViewModel.QuantidadeCanhotos == 0) return; + + var canhoto = Danfe.Canhoto; + canhoto.SetPosition(RetanguloDesenhavel.Location); + + if (Danfe.ViewModel.Orientacao == Orientacao.Retrato) + { + canhoto.Width = RetanguloDesenhavel.Width; + + for (int i = 0; i < Danfe.ViewModel.QuantidadeCanhotos; i++) + { + canhoto.Draw(Gfx); + canhoto.Y += canhoto.Height; + } + + RetanguloDesenhavel = RetanguloDesenhavel.CutTop(canhoto.Height * Danfe.ViewModel.QuantidadeCanhotos); + } + else + { + canhoto.Width = RetanguloDesenhavel.Height; + Gfx.PrimitiveComposer.BeginLocalState(); + Gfx.PrimitiveComposer.Rotate(90, new PointF(0, canhoto.Width + canhoto.X + canhoto.Y).ToPointMeasure()); + + for (int i = 0; i < Danfe.ViewModel.QuantidadeCanhotos; i++) + { + canhoto.Draw(Gfx); + canhoto.Y += canhoto.Height; + } + + Gfx.PrimitiveComposer.End(); + RetanguloDesenhavel = RetanguloDesenhavel.CutLeft(canhoto.Height * Danfe.ViewModel.QuantidadeCanhotos); + + } + } + + public void DesenhaNumeroPaginas(int n, int total) + { + if (n <= 0) throw new ArgumentOutOfRangeException(nameof(n)); + if (total <= 0) throw new ArgumentOutOfRangeException(nameof(n)); + if (n > total) throw new ArgumentOutOfRangeException("O número da página atual deve ser menor que o total."); + + Gfx.DrawString($"Folha {n}/{total}", RetanguloNumeroFolhas, Danfe.EstiloPadrao.FonteNumeroFolhas, AlinhamentoHorizontal.Centro); + Gfx.Flush(); + } + + public void DesenharAvisoHomologacao() + { + TextStack ts = new TextStack(RetanguloCorpo) { AlinhamentoVertical = AlinhamentoVertical.Centro, AlinhamentoHorizontal = AlinhamentoHorizontal.Centro, LineHeightScale = 0.9F } + .AddLine("SEM VALOR FISCAL", Danfe.EstiloPadrao.CriarFonteRegular(48)) + .AddLine("AMBIENTE DE HOMOLOGAÇÃO", Danfe.EstiloPadrao.CriarFonteRegular(30)); + + Gfx.PrimitiveComposer.BeginLocalState(); + Gfx.PrimitiveComposer.SetFillColor(new org.pdfclown.documents.contents.colorSpaces.DeviceRGBColor(0.35, 0.35, 0.35)); + ts.Draw(Gfx); + Gfx.PrimitiveComposer.End(); + } + + public void DesenharBlocos(bool isPrimeirapagina = false) + { + if (isPrimeirapagina && Danfe.ViewModel.QuantidadeCanhotos > 0) DesenharCanhoto(); + + var blocos = isPrimeirapagina ? Danfe._Blocos : Danfe._Blocos.Where(x => x.VisivelSomentePrimeiraPagina == false); + + foreach (var bloco in blocos) + { + bloco.Width = RetanguloDesenhavel.Width; + + if (bloco.Posicao == PosicaoBloco.Topo) + { + bloco.SetPosition(RetanguloDesenhavel.Location); + RetanguloDesenhavel = RetanguloDesenhavel.CutTop(bloco.Height); + } + else + { + bloco.SetPosition(RetanguloDesenhavel.X, RetanguloDesenhavel.Bottom - bloco.Height); + RetanguloDesenhavel = RetanguloDesenhavel.CutBottom(bloco.Height); + } + + bloco.Draw(Gfx); + + if (bloco is BlocoIdentificacaoEmitente) + { + var rf = (bloco as BlocoIdentificacaoEmitente).RetanguloNumeroFolhas; + RetanguloNumeroFolhas = rf; + } + } + + RetanguloCorpo = RetanguloDesenhavel; + Gfx.Flush(); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/Barcode128C.cs b/NFe.Danfe.PdfClown/Elementos/Barcode128C.cs new file mode 100644 index 000000000..524688bad --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/Barcode128C.cs @@ -0,0 +1,220 @@ +using System.Drawing; +using System.Text.RegularExpressions; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + internal class Barcode128C : ElementoBase + { + private static byte[][] Dic; + + public static readonly float MargemVertical = 2; + + /// + /// Código a ser codificado em barras. + /// + public string Code { get; private set; } + + /// + /// Largura do código de barras. + /// + public float Largura { get; set; } + + static Barcode128C() + { + + Dic = new byte[][] + { + new byte[] { 2,1,2,2,2,2}, + new byte[] { 2,2,2,1,2,2}, + new byte[] { 2,2,2,2,2,1}, + new byte[] { 1,2,1,2,2,3}, + new byte[] { 1,2,1,3,2,2}, + new byte[] { 1,3,1,2,2,2}, + new byte[] { 1,2,2,2,1,3}, + new byte[] { 1,2,2,3,1,2}, + new byte[] { 1,3,2,2,1,2}, + new byte[] { 2,2,1,2,1,3}, + new byte[] { 2,2,1,3,1,2}, + new byte[] { 2,3,1,2,1,2}, + new byte[] { 1,1,2,2,3,2}, + new byte[] { 1,2,2,1,3,2}, + new byte[] { 1,2,2,2,3,1}, + new byte[] { 1,1,3,2,2,2}, + new byte[] { 1,2,3,1,2,2}, + new byte[] { 1,2,3,2,2,1}, + new byte[] { 2,2,3,2,1,1}, + new byte[] { 2,2,1,1,3,2}, + new byte[] { 2,2,1,2,3,1}, + new byte[] { 2,1,3,2,1,2}, + new byte[] { 2,2,3,1,1,2}, + new byte[] { 3,1,2,1,3,1}, + new byte[] { 3,1,1,2,2,2}, + new byte[] { 3,2,1,1,2,2}, + new byte[] { 3,2,1,2,2,1}, + new byte[] { 3,1,2,2,1,2}, + new byte[] { 3,2,2,1,1,2}, + new byte[] { 3,2,2,2,1,1}, + new byte[] { 2,1,2,1,2,3}, + new byte[] { 2,1,2,3,2,1}, + new byte[] { 2,3,2,1,2,1}, + new byte[] { 1,1,1,3,2,3}, + new byte[] { 1,3,1,1,2,3}, + new byte[] { 1,3,1,3,2,1}, + new byte[] { 1,1,2,3,1,3}, + new byte[] { 1,3,2,1,1,3}, + new byte[] { 1,3,2,3,1,1}, + new byte[] { 2,1,1,3,1,3}, + new byte[] { 2,3,1,1,1,3}, + new byte[] { 2,3,1,3,1,1}, + new byte[] { 1,1,2,1,3,3}, + new byte[] { 1,1,2,3,3,1}, + new byte[] { 1,3,2,1,3,1}, + new byte[] { 1,1,3,1,2,3}, + new byte[] { 1,1,3,3,2,1}, + new byte[] { 1,3,3,1,2,1}, + new byte[] { 3,1,3,1,2,1}, + new byte[] { 2,1,1,3,3,1}, + new byte[] { 2,3,1,1,3,1}, + new byte[] { 2,1,3,1,1,3}, + new byte[] { 2,1,3,3,1,1}, + new byte[] { 2,1,3,1,3,1}, + new byte[] { 3,1,1,1,2,3}, + new byte[] { 3,1,1,3,2,1}, + new byte[] { 3,3,1,1,2,1}, + new byte[] { 3,1,2,1,1,3}, + new byte[] { 3,1,2,3,1,1}, + new byte[] { 3,3,2,1,1,1}, + new byte[] { 3,1,4,1,1,1}, + new byte[] { 2,2,1,4,1,1}, + new byte[] { 4,3,1,1,1,1}, + new byte[] { 1,1,1,2,2,4}, + new byte[] { 1,1,1,4,2,2}, + new byte[] { 1,2,1,1,2,4}, + new byte[] { 1,2,1,4,2,1}, + new byte[] { 1,4,1,1,2,2}, + new byte[] { 1,4,1,2,2,1}, + new byte[] { 1,1,2,2,1,4}, + new byte[] { 1,1,2,4,1,2}, + new byte[] { 1,2,2,1,1,4}, + new byte[] { 1,2,2,4,1,1}, + new byte[] { 1,4,2,1,1,2}, + new byte[] { 1,4,2,2,1,1}, + new byte[] { 2,4,1,2,1,1}, + new byte[] { 2,2,1,1,1,4}, + new byte[] { 4,1,3,1,1,1}, + new byte[] { 2,4,1,1,1,2}, + new byte[] { 1,3,4,1,1,1}, + new byte[] { 1,1,1,2,4,2}, + new byte[] { 1,2,1,1,4,2}, + new byte[] { 1,2,1,2,4,1}, + new byte[] { 1,1,4,2,1,2}, + new byte[] { 1,2,4,1,1,2}, + new byte[] { 1,2,4,2,1,1}, + new byte[] { 4,1,1,2,1,2}, + new byte[] { 4,2,1,1,1,2}, + new byte[] { 4,2,1,2,1,1}, + new byte[] { 2,1,2,1,4,1}, + new byte[] { 2,1,4,1,2,1}, + new byte[] { 4,1,2,1,2,1}, + new byte[] { 1,1,1,1,4,3}, + new byte[] { 1,1,1,3,4,1}, + new byte[] { 1,3,1,1,4,1}, + new byte[] { 1,1,4,1,1,3}, + new byte[] { 1,1,4,3,1,1}, + new byte[] { 4,1,1,1,1,3}, + new byte[] { 4,1,1,3,1,1}, + new byte[] { 1,1,3,1,4,1}, + new byte[] { 1,1,4,1,3,1}, + new byte[] { 3,1,1,1,4,1}, + new byte[] { 4,1,1,1,3,1}, + new byte[] { 2,1,1,4,1,2}, + new byte[] { 2,1,1,2,1,4}, + new byte[] { 2,1,1,2,3,2}, + new byte[] { 2,3,3,1,1,1,2} + + }; + + } + + public Barcode128C(string code, Estilo estilo, float largura = 75F) : base(estilo) + { + if (string.IsNullOrWhiteSpace(code)) + { + throw new ArgumentException("O código não pode ser vazio.", "code"); + } + + if (!Regex.IsMatch(code, @"^\d+$")) + { + throw new ArgumentException("O código deve apenas conter digítos numéricos.", "code"); + } + + if (code.Length % 2 != 0) + { + Code = "0" + code; + } + else + { + Code = code; + } + + Largura = largura; + } + + private void DrawBarcode(RectangleF rect, Gfx gfx) + { + + List codeBytes = new List(); + + codeBytes.Add(105); + + for (int i = 0; i < this.Code.Length; i += 2) + { + byte b = byte.Parse(this.Code.Substring(i, 2)); + codeBytes.Add(b); + } + + // Calcular dígito verificador + int cd = 105; + + for (int i = 1; i < codeBytes.Count; i++) + { + cd += i * codeBytes[i]; + cd %= 103; + } + + codeBytes.Add((byte)cd); + codeBytes.Add(106); + + float n = codeBytes.Count * 11 + 2; + float w = rect.Width / n; + + float x = 0; + + for (int i = 0; i < codeBytes.Count; i++) + { + byte[] pt = Barcode128C.Dic[codeBytes[i]]; + + for (int i2 = 0; i2 < pt.Length; i2++) + { + if (i2 % 2 == 0) + { + gfx.DrawRectangle(rect.X + x, rect.Y, w * pt[i2], rect.Height); + } + + x += w * pt[i2]; + } + } + + gfx.Fill(); + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + float w2 = (Width - Largura) / 2F; + DrawBarcode(new RectangleF(X + w2, Y + MargemVertical, Largura, Height - 2 * MargemVertical), gfx); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/CabecalhoBloco.cs b/NFe.Danfe.PdfClown/Elementos/CabecalhoBloco.cs new file mode 100644 index 000000000..2def70674 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/CabecalhoBloco.cs @@ -0,0 +1,29 @@ +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Cabeçalho do bloco, normalmente um texto em caixa alta. + /// + internal class CabecalhoBloco : ElementoBase + { + public const float MargemSuperior = 0.8F; + public string Cabecalho { get; set; } + + public CabecalhoBloco(Estilo estilo, string cabecalho) : base(estilo) + { + Cabecalho = cabecalho ?? throw new ArgumentNullException(cabecalho); + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + gfx.DrawString(Cabecalho.ToUpper(), BoundingBox, Estilo.FonteBlocoCabecalho, + AlinhamentoHorizontal.Esquerda, AlinhamentoVertical.Base); + } + + public override float Height { get => MargemSuperior + Estilo.FonteBlocoCabecalho.AlturaLinha; set => throw new NotSupportedException(); } + public override bool PossuiContono => false; + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/Campo.cs b/NFe.Danfe.PdfClown/Elementos/Campo.cs new file mode 100644 index 000000000..5e9d885ec --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/Campo.cs @@ -0,0 +1,97 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Campo de única linha. + /// + internal class Campo : ElementoBase + { + public virtual string Cabecalho { get; set; } + public virtual string Conteudo { get; set; } + + public AlinhamentoHorizontal AlinhamentoHorizontalConteudo { get; set; } + + public Boolean IsConteudoNegrito { get; set; } + + public Campo(string cabecalho, string conteudo, Estilo estilo, AlinhamentoHorizontal alinhamentoHorizontalConteudo = AlinhamentoHorizontal.Esquerda) : base(estilo) + { + Cabecalho = cabecalho; + this.Conteudo = conteudo; + AlinhamentoHorizontalConteudo = alinhamentoHorizontalConteudo; + IsConteudoNegrito = true; + Height = Constantes.CampoAltura; + } + + protected virtual void DesenharCabecalho(Gfx gfx) + { + if (!string.IsNullOrWhiteSpace(Cabecalho)) + { + gfx.DrawString(Cabecalho.ToUpper(), RetanguloDesenhvael, Estilo.FonteCampoCabecalho, AlinhamentoHorizontal.Esquerda, AlinhamentoVertical.Topo); + } + } + + protected virtual void DesenharConteudo(Gfx gfx) + { + var rDesenhavel = RetanguloDesenhvael; + var texto = Conteudo; + + var fonte = IsConteudoNegrito ? Estilo.FonteCampoConteudoNegrito : Estilo.FonteCampoConteudo; + fonte = fonte.Clonar(); + + if (!string.IsNullOrWhiteSpace(Conteudo)) + { + var textWidth = fonte.MedirLarguraTexto(Conteudo); + + // Trata o overflown + if (textWidth > rDesenhavel.Width) + { + fonte.Tamanho = rDesenhavel.Width * fonte.Tamanho / textWidth; + + if (fonte.Tamanho < Estilo.FonteTamanhoMinimo) + { + fonte.Tamanho = Estilo.FonteTamanhoMinimo; + + texto = "..."; + string texto2; + + for (int i = 1; i <= Conteudo.Length; i++) + { + texto2 = Conteudo.Substring(0, i) + "..."; + if (fonte.MedirLarguraTexto(texto2) < rDesenhavel.Width) + { + texto = texto2; + } + else + { + break; + } + + } + } + } + + gfx.DrawString(texto, rDesenhavel, fonte, AlinhamentoHorizontalConteudo, AlinhamentoVertical.Base); + + } + } + + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + DesenharCabecalho(gfx); + DesenharConteudo(gfx); + } + + public RectangleF RetanguloDesenhvael => BoundingBox.InflatedRetangle(Estilo.PaddingSuperior, Estilo.PaddingInferior, Estilo.PaddingHorizontal); + + public override string ToString() + { + return Cabecalho; + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/CampoMultilinha.cs b/NFe.Danfe.PdfClown/Elementos/CampoMultilinha.cs new file mode 100644 index 000000000..80b170498 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/CampoMultilinha.cs @@ -0,0 +1,45 @@ +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Campo multilinha. + /// + internal class CampoMultilinha : Campo + { + TextBlock _tbConteudo; + + public CampoMultilinha(string cabecalho, string conteudo, Estilo estilo, AlinhamentoHorizontal alinhamentoHorizontalConteudo = AlinhamentoHorizontal.Esquerda) + : base(cabecalho, conteudo, estilo, alinhamentoHorizontalConteudo) + { + _tbConteudo = new TextBlock(conteudo, estilo.FonteCampoConteudo); + IsConteudoNegrito = false; + } + + protected override void DesenharConteudo(Gfx gfx) + { + if (!string.IsNullOrWhiteSpace(Conteudo)) + { + _tbConteudo.SetPosition(RetanguloDesenhvael.X, RetanguloDesenhvael.Y + Estilo.FonteCampoCabecalho.AlturaLinha + Estilo.PaddingInferior); + _tbConteudo.Draw(gfx); + } + } + + public override float Height + { + get + { + return Math.Max(_tbConteudo.Height + Estilo.FonteCampoCabecalho.AlturaLinha + Estilo.PaddingSuperior + 2 * Estilo.PaddingInferior, base.Height); + } + set + { + base.Height = value; + } + } + + public override string Conteudo { get => base.Conteudo; set { base.Conteudo = value; } } + public override float Width { get => base.Width; set { base.Width = value; _tbConteudo.Width = value - 2 * Estilo.PaddingHorizontal; } } + + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/CampoNumerico.cs b/NFe.Danfe.PdfClown/Elementos/CampoNumerico.cs new file mode 100644 index 000000000..dc2185159 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/CampoNumerico.cs @@ -0,0 +1,27 @@ +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Campo para valores numéricos. + /// + internal class CampoNumerico : Campo + { + private double? ConteudoNumerico { get; set; } + public int CasasDecimais { get; set; } + + public CampoNumerico(string cabecalho, double? conteudoNumerico, Estilo estilo, int casasDecimais = 2) : base(cabecalho, null, estilo, AlinhamentoHorizontal.Direita) + { + CasasDecimais = casasDecimais; + ConteudoNumerico = conteudoNumerico; + } + + protected override void DesenharConteudo(Gfx gfx) + { + base.Conteudo = ConteudoNumerico.HasValue ? ConteudoNumerico.Value.ToString($"N{CasasDecimais}", Formatador.Cultura) : null; + base.DesenharConteudo(gfx); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/DrawableBase.cs b/NFe.Danfe.PdfClown/Elementos/DrawableBase.cs new file mode 100644 index 000000000..eb2e2f5e4 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/DrawableBase.cs @@ -0,0 +1,51 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Define um objeto desenhável. + /// + internal abstract class DrawableBase + { + public virtual float X { get; set; } + public virtual float Y { get; set; } + + public virtual float Width { get; set; } + public virtual float Height { get; set; } + + public PointF Position => new PointF(X, Y); + public SizeF Size => new SizeF(Width, Height); + + public DrawableBase() + { + } + + public virtual void Draw(Gfx gfx) + { + if (gfx == null) throw new ArgumentNullException(nameof(gfx)); + if (Width <= 0) throw new InvalidOperationException("Width is invalid."); + if (Height <= 0) throw new InvalidOperationException("Height is invalid."); + if (X < 0) throw new InvalidOperationException("X is invalid."); + if (Y < 0) throw new InvalidOperationException("X is invalid."); + } + + public virtual void SetPosition(float x, float y) + { + X = x; + Y = y; + } + + public virtual void SetPosition(PointF p) => SetPosition(p.X, p.Y); + + public virtual void SetSize(float w, float h) + { + Width = w; + if (Height != h) + Height = h; + } + public virtual void SetSize(SizeF s) => SetSize(s.Width, s.Height); + + public RectangleF BoundingBox => new RectangleF(X, Y, Width, Height); + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/Duplicata.cs b/NFe.Danfe.PdfClown/Elementos/Duplicata.cs new file mode 100644 index 000000000..0f970b7c5 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/Duplicata.cs @@ -0,0 +1,48 @@ +using NFe.Danfe.PdfClown.Atributos; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Elementos +{ + [AlturaFixa] + internal class Duplicata : ElementoBase + { + public Fonte FonteA { get; private set; } + public Fonte FonteB { get; private set; } + public DuplicataViewModel ViewModel { get; private set; } + + private static readonly string[] Chaves = { "Número", "Vencimento:", "Valor:" }; + + public Duplicata(Estilo estilo, DuplicataViewModel viewModel) : base(estilo) + { + ViewModel = viewModel; + FonteA = estilo.CriarFonteRegular(7.5F); + FonteB = estilo.CriarFonteNegrito(7.5F); + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + var r = BoundingBox.InflatedRetangle(Estilo.PaddingSuperior, Estilo.PaddingInferior, Estilo.PaddingHorizontal); + + string[] valores = { ViewModel.Numero, ViewModel.Vecimento.Formatar(), ViewModel.Valor.FormatarMoeda() }; + + for (int i = 0; i < Chaves.Length; i++) + { + gfx.DrawString(Chaves[i], r, FonteA, AlinhamentoHorizontal.Esquerda); + gfx.DrawString(valores[i], r, FonteB, AlinhamentoHorizontal.Direita); + r = r.CutTop(FonteB.AlturaLinha); + } + + } + + public override float Height + { + get => 3 * FonteB.AlturaLinha + Estilo.PaddingSuperior + Estilo.PaddingInferior; + set => throw new NotSupportedException(); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/ElementoBase.cs b/NFe.Danfe.PdfClown/Elementos/ElementoBase.cs new file mode 100644 index 000000000..b8ea8f0f8 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/ElementoBase.cs @@ -0,0 +1,25 @@ +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Elemento básico no DANFE. + /// + internal abstract class ElementoBase : DrawableBase + { + public Estilo Estilo { get; protected set; } + public virtual bool PossuiContono => true; + + public ElementoBase(Estilo estilo) + { + Estilo = estilo ?? throw new ArgumentNullException(nameof(estilo)); + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + if (PossuiContono) + gfx.StrokeRectangle(BoundingBox, 0.25f); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/ElementoVazio.cs b/NFe.Danfe.PdfClown/Elementos/ElementoVazio.cs new file mode 100644 index 000000000..e09b9dbf8 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/ElementoVazio.cs @@ -0,0 +1,11 @@ +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + internal class ElementoVazio : DrawableBase + { + public override void Draw(Gfx gfx) + { + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/Estilo.cs b/NFe.Danfe.PdfClown/Elementos/Estilo.cs new file mode 100644 index 000000000..cc62508de --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/Estilo.cs @@ -0,0 +1,49 @@ +using NFe.Danfe.PdfClown.Graphics; +using pcf = org.pdfclown.documents.contents.fonts; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Coleção de fontes e medidas a serem compartilhadas entre os elementos básicos. + /// + internal class Estilo + { + public float PaddingSuperior { get; set; } + public float PaddingInferior { get; set; } + public float PaddingHorizontal { get; set; } + public float FonteTamanhoMinimo { get; set; } + + public pcf.Font FonteInternaRegular { get; set; } + public pcf.Font FonteInternaNegrito { get; set; } + public pcf.Font FonteInternaItalico { get; set; } + + public Fonte FonteCampoCabecalho { get; private set; } + public Fonte FonteCampoConteudo { get; private set; } + public Fonte FonteCampoConteudoNegrito { get; private set; } + public Fonte FonteBlocoCabecalho { get; private set; } + public Fonte FonteNumeroFolhas { get; private set; } + + public Estilo(pcf.Font fontRegular, pcf.Font fontBold, pcf.Font fontItalic, float tamanhoFonteCampoCabecalho = 6, float tamanhoFonteConteudo = 10) + { + PaddingHorizontal = 0.75F; + PaddingSuperior = 0.65F; + PaddingInferior = 0.3F; + + FonteInternaRegular = fontRegular; + FonteInternaNegrito = fontBold; + FonteInternaItalico = fontItalic; + + FonteCampoCabecalho = CriarFonteRegular(tamanhoFonteCampoCabecalho); + FonteCampoConteudo = CriarFonteRegular(tamanhoFonteConteudo); + FonteCampoConteudoNegrito = CriarFonteNegrito(tamanhoFonteConteudo); + FonteBlocoCabecalho = CriarFonteRegular(7); + FonteNumeroFolhas = CriarFonteNegrito(10F); + FonteTamanhoMinimo = 5.75F; + } + + public Fonte CriarFonteRegular(float emSize) => new Fonte(FonteInternaRegular, emSize); + public Fonte CriarFonteNegrito(float emSize) => new Fonte(FonteInternaNegrito, emSize); + public Fonte CriarFonteItalico(float emSize) => new Fonte(FonteInternaItalico, emSize); + + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/FlexibleLine.cs b/NFe.Danfe.PdfClown/Elementos/FlexibleLine.cs new file mode 100644 index 000000000..5b495e664 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/FlexibleLine.cs @@ -0,0 +1,108 @@ +using NFe.Danfe.PdfClown.Atributos; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Linha flexível que posiciona e muda a largura dos seus elementos de forma proporcional. + /// + internal class FlexibleLine : DrawableBase + { + /// + /// Elementos em ordem da linha. + /// + public List Elementos { get; private set; } + + /// + /// Largura dos elementos, em porcentagem. + /// + public List ElementosLargurasP { get; private set; } + + public FlexibleLine() + { + Elementos = new List(); + ElementosLargurasP = new List(); + } + + public FlexibleLine(float width, float height) : this() + { + Width = width; + Height = height; + } + + public virtual FlexibleLine ComElemento(DrawableBase db) + { + Elementos.Add(db ?? throw new ArgumentNullException(nameof(db))); + return this; + } + + public virtual FlexibleLine ComLarguras(params float[] elementosLarguras) + { + if (elementosLarguras.Length != Elementos.Count) throw new ArgumentException("A quantidade de larguras deve ser igual a de elementos."); + + float somaLarguras = elementosLarguras.Sum(); + if (somaLarguras > 100) throw new ArgumentOutOfRangeException("A soma das larguras passam de 100%."); + + var p = (100 - somaLarguras) / elementosLarguras.Where(x => x == 0).Count(); + + for (int i = 0; i < elementosLarguras.Length; i++) + { + if (elementosLarguras[i] == 0) + elementosLarguras[i] = p; + } + + ElementosLargurasP = elementosLarguras.ToList(); + return this; + } + + public virtual FlexibleLine ComLargurasIguais() + { + float w = 100F / Elementos.Count; + + for (int i = 0; i < Elementos.Count; i++) + { + ElementosLargurasP.Add(w); + } + + return this; + } + + public void Posicionar() + { + float wTotal = Elementos.Sum(s => s.Width); + + float x = X, y = Y; + + for (int i = 0; i < Elementos.Count; i++) + { + var e = Elementos[i]; + var ew = (Width * ElementosLargurasP[i]) / 100F; + + if (Attribute.IsDefined(e.GetType(), typeof(AlturaFixaAttribute))) + { + e.Width = ew; + } + else + { + e.SetSize(ew, Height); + } + + e.SetPosition(x, y); + x += e.Width; + } + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + Posicionar(); + + foreach (var elemento in Elementos) + { + elemento.Draw(gfx); + } + + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/IdentificacaoEmitente.cs b/NFe.Danfe.PdfClown/Elementos/IdentificacaoEmitente.cs new file mode 100644 index 000000000..364b595c8 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/IdentificacaoEmitente.cs @@ -0,0 +1,85 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; +using org.pdfclown.documents.contents.xObjects; + +namespace NFe.Danfe.PdfClown.Elementos +{ + internal class IdentificacaoEmitente : ElementoBase + { + public DanfeViewModel ViewModel { get; private set; } + public XObject Logo { get; set; } + + public IdentificacaoEmitente(Estilo estilo, DanfeViewModel viewModel) : base(estilo) + { + ViewModel = viewModel; + Logo = null; + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + // 7.7.6 Conteúdo do Quadro Dados do Emitente + // Deverá estar impresso em negrito.A razão social e/ ou nome fantasia deverá ter tamanho + // mínimo de doze(12) pontos, ou 17 CPP e os demais dados do emitente, endereço, + // município, CEP, fone / fax deverão ter tamanho mínimo de oito(8) pontos, ou 17 CPP. + + var rp = BoundingBox.InflatedRetangle(0.75F); + float alturaMaximaLogoHorizontal = 14F; + + Fonte f2 = Estilo.CriarFonteNegrito(12); + Fonte f3 = Estilo.CriarFonteRegular(8); + + if (Logo == null) + { + var f1 = Estilo.CriarFonteRegular(6); + gfx.DrawString("IDENTIFICAÇÃO DO EMITENTE", rp, f1, AlinhamentoHorizontal.Centro); + rp = rp.CutTop(f1.AlturaLinha); + } + else + { + RectangleF rLogo; + + //Logo Horizontal + if (Logo.Size.Width > Logo.Size.Height) + { + rLogo = new RectangleF(rp.X, rp.Y, rp.Width, alturaMaximaLogoHorizontal); + rp = rp.CutTop(alturaMaximaLogoHorizontal); + } + //Logo Vertical/Quadrado + else + { + float lw = rp.Height * Logo.Size.Width / Logo.Size.Height; + rLogo = new RectangleF(rp.X, rp.Y, lw, rp.Height); + rp = rp.CutLeft(lw); + } + + gfx.ShowXObject(Logo, rLogo); + + } + + var emitente = ViewModel.Emitente; + + string nome = emitente.RazaoSocial; + + if (ViewModel.PreferirEmitenteNomeFantasia) + { + nome = !string.IsNullOrWhiteSpace(emitente.NomeFantasia) ? emitente.NomeFantasia : emitente.RazaoSocial; + } + var ts = new TextStack(rp) { LineHeightScale = 1 } + .AddLine(nome, f2) + .AddLine(emitente.EnderecoLinha1.Trim(), f3) + .AddLine(emitente.EnderecoLinha2.Trim(), f3) + .AddLine(emitente.EnderecoLinha3.Trim(), f3); + + ts.AlinhamentoHorizontal = AlinhamentoHorizontal.Centro; + ts.AlinhamentoVertical = AlinhamentoVertical.Centro; + ts.Draw(gfx); + + + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/LinhaCampos.cs b/NFe.Danfe.PdfClown/Elementos/LinhaCampos.cs new file mode 100644 index 000000000..b3bd9eaf4 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/LinhaCampos.cs @@ -0,0 +1,37 @@ +using NFe.Danfe.PdfClown.Enumeracoes; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Linha de campos, posiciona e muda a largura desses elementos de forma proporcional. + /// + internal class LinhaCampos : FlexibleLine + { + public Estilo Estilo { get; private set; } + + public LinhaCampos(Estilo estilo, float width, float height = Constantes.CampoAltura) : base() + { + Estilo = estilo; + SetSize(width, height); + } + + public LinhaCampos(Estilo estilo) : base() + { + Estilo = estilo; + } + + public virtual LinhaCampos ComCampo(string cabecalho, string conteudo, AlinhamentoHorizontal alinhamentoHorizontalConteudo = AlinhamentoHorizontal.Esquerda) + { + var campo = new Campo(cabecalho, conteudo, Estilo, alinhamentoHorizontalConteudo); + Elementos.Add(campo); + return this; + } + + public virtual LinhaCampos ComCampoNumerico(string cabecalho, double? conteudoNumerico, int casasDecimais = 2) + { + var campo = new CampoNumerico(cabecalho, conteudoNumerico, Estilo, casasDecimais); + Elementos.Add(campo); + return this; + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/LinhaTracejada.cs b/NFe.Danfe.PdfClown/Elementos/LinhaTracejada.cs new file mode 100644 index 000000000..e5543bf0f --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/LinhaTracejada.cs @@ -0,0 +1,31 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Elementos +{ + internal class LinhaTracejada : DrawableBase + { + public float Margin { get; set; } + public double[] DashPattern { get; set; } + + public LinhaTracejada(float margin) + { + Margin = margin; + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + gfx.PrimitiveComposer.BeginLocalState(); + gfx.PrimitiveComposer.SetLineDash(new org.pdfclown.documents.contents.LineDash(new double[] { 3, 2 })); + gfx.PrimitiveComposer.DrawLine(new PointF(BoundingBox.Left, Y + Margin).ToPointMeasure(), new PointF(BoundingBox.Right, Y + Margin).ToPointMeasure()); + gfx.PrimitiveComposer.Stroke(); + gfx.PrimitiveComposer.End(); + + } + + public override float Height { get => 2 * Margin; set => throw new NotSupportedException(); } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/NumeroNfSerie.cs b/NFe.Danfe.PdfClown/Elementos/NumeroNfSerie.cs new file mode 100644 index 000000000..18db5ee70 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/NumeroNfSerie.cs @@ -0,0 +1,44 @@ +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Elementos +{ + class NumeroNfSerie : ElementoBase + { + public string NfNumero { get; private set; } + public string NfSerie { get; private set; } + + public NumeroNfSerie(Estilo estilo, string nfNumero, string nfSerie) : base(estilo) + { + NfNumero = nfNumero; + NfSerie = nfSerie; + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + var r = BoundingBox.InflatedRetangle(1); + + var f1 = Estilo.CriarFonteNegrito(14); + var f2 = Estilo.CriarFonteNegrito(11F); + + gfx.DrawString("NF-e", r, f1, AlinhamentoHorizontal.Centro); + + r = r.CutTop(f1.AlturaLinha); + + TextStack ts = new TextStack(r) + { + AlinhamentoHorizontal = AlinhamentoHorizontal.Centro, + AlinhamentoVertical = AlinhamentoVertical.Centro, + LineHeightScale = 1F + } + .AddLine($"Nº.: {NfNumero}", f2) + .AddLine($"Série: {NfSerie}", f2); + + ts.Draw(gfx); + + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/NumeroNfSerie2.cs b/NFe.Danfe.PdfClown/Elementos/NumeroNfSerie2.cs new file mode 100644 index 000000000..212486f7b --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/NumeroNfSerie2.cs @@ -0,0 +1,100 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Modelo; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Elementos +{ + class NumeroNfSerie2 : ElementoBase + { + public RectangleF RetanguloNumeroFolhas { get; private set; } + public DanfeViewModel ViewModel { get; private set; } + + public NumeroNfSerie2(Estilo estilo, DanfeViewModel viewModel) : base(estilo) + { + ViewModel = viewModel; + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + // 7.7.4 Conteúdo do Bloco de Campos de Identificação do Documento + // O conteúdo dos campos “DANFE”, “entrada ou saída”, “número”, “série” e “folhas do + // documento” deverá ser impresso em caixa alta(maiúsculas). Além disto: + // a descrição “DANFE” deverá estar impressa em negrito e ter tamanho mínimo de + // doze(12) pontos, ou 10 CPP; + // + // a série e número da NF-e, o número de ordem da folha, o total de folhas do + // DANFE e o número identificador do tipo de operação(se “ENTRADA” ou + // “SAÍDA”, conforme tag “tpNF”) deverão estar impressos em negrito e ter + // tamanho mínimo de dez(10) pontos, ou 10 CPP; + // + // a identificação “DOCUMENTO AUXILIAR DA NOTA FISCAL ELETRÔNICA” e as + // descrições do tipo de operação, “ENTRADA” ou “SAÍDA” deverão ter tamanho + // mínimo de oito(8) pontos, ou 17 CPP. + + float paddingHorizontal = ViewModel.Orientacao == Orientacao.Retrato ? 2.5F : 5F; + + var rp1 = BoundingBox.InflatedRetangle(1F, 0.5F, paddingHorizontal); + var rp2 = rp1; + + var f1 = Estilo.CriarFonteNegrito(12); + var f1h = f1.AlturaLinha; + gfx.DrawString("DANFE", rp2, f1, AlinhamentoHorizontal.Centro); + + rp2 = rp2.CutTop(f1h + 0.5F); + + var f2 = Estilo.CriarFonteRegular(8F); + var f2h = (float)f2.AlturaLinha; + + var ts = new TextStack(rp2) + { + AlinhamentoVertical = AlinhamentoVertical.Topo + } + .AddLine("Documento Auxiliar da", f2) + .AddLine("Nota Fiscal Eletrônica", f2); + + ts.Draw(gfx); + + rp2 = rp2.CutTop(2F * f2h + 1.5F); + + + ts = new TextStack(rp2) + { + AlinhamentoVertical = AlinhamentoVertical.Topo, + AlinhamentoHorizontal = AlinhamentoHorizontal.Esquerda + } + .AddLine("0 - ENTRADA", f2) + .AddLine("1 - SAÍDA", f2); + ts.Draw(gfx); + + float rectEsSize = 1.75F * f2h; + var rectEs = new RectangleF(rp2.Right - rectEsSize, rp2.Y + (2F * f2h - rectEsSize) / 2F, rectEsSize, rectEsSize); + + gfx.StrokeRectangle(rectEs, 0.25F); + + gfx.DrawString(ViewModel.TipoNF.ToString(), rectEs, Estilo.FonteNumeroFolhas, AlinhamentoHorizontal.Centro, AlinhamentoVertical.Centro); + + + var f4 = Estilo.FonteNumeroFolhas; + var f4h = Estilo.FonteNumeroFolhas.AlturaLinha; + + rp2.Height = 2F * f4h * TextStack.DefaultLineHeightScale + f2h; + rp2.Y = rp1.Bottom - rp2.Height; + + ts = new TextStack(rp2) + { + AlinhamentoVertical = AlinhamentoVertical.Topo, + AlinhamentoHorizontal = AlinhamentoHorizontal.Centro + } + .AddLine("Nº.: " + ViewModel.NfNumero.ToString(Formatador.FormatoNumeroNF), f4) + .AddLine($"Série: {ViewModel.NfSerie}", f4); + + ts.Draw(gfx); + + RetanguloNumeroFolhas = new RectangleF(rp1.Left, rp1.Bottom - Estilo.FonteNumeroFolhas.AlturaLinha, rp1.Width, Estilo.FonteNumeroFolhas.AlturaLinha); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/Tabela.cs b/NFe.Danfe.PdfClown/Elementos/Tabela.cs new file mode 100644 index 000000000..0b8d6128d --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/Tabela.cs @@ -0,0 +1,194 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Tools; +using org.pdfclown.documents.contents.colorSpaces; + +namespace NFe.Danfe.PdfClown.Elementos +{ + internal class Tabela : ElementoBase + { + public List Colunas { get; private set; } + public List> Linhas { get; private set; } + public float PaddingSuperior { get; private set; } + public float PaddingInferior { get; private set; } + public float PaddingHorizontal { get; private set; } + + public int LinhaAtual { get; private set; } + public float TamanhoFonteCabecalho { get; private set; } + + private float _DY; + private float _DY1; + + public Fonte FonteCorpo { get; private set; } + public Fonte FonteCabecalho { get; private set; } + + public Tabela(Estilo estilo) : base(estilo) + { + Colunas = new List(); + Linhas = new List>(); + LinhaAtual = 0; + TamanhoFonteCabecalho = 6; + + PaddingHorizontal = 0.6F; + PaddingSuperior = 0.75F; + PaddingInferior = 0.3F; + + // 7.7.7 Conteúdo dos Campos do Quadro “Dados dos Produtos/Serviços” + // Deverá ter tamanho mínimo de seis(6) pontos, ou 17 CPP. + + FonteCorpo = estilo.CriarFonteRegular(6F); + FonteCabecalho = estilo.CriarFonteRegular(6F); + } + + public Tabela ComColuna(float larguraP, AlinhamentoHorizontal ah, params string[] cabecalho) + { + Colunas.Add(new TabelaColuna(cabecalho, larguraP, ah)); + return this; + } + + public void AdicionarLinha(List linha) + { + if (linha.Count != Colunas.Count) throw new ArgumentException(nameof(linha)); + Linhas.Add(linha); + } + + public void AjustarLarguraColunas() + { + var sw = Colunas.Sum(x => x.PorcentagemLargura); + + if (sw > 100F) throw new InvalidOperationException(); + + var w = (100F - sw) / (float)Colunas.Where(x => x.PorcentagemLargura == 0).Count(); + + foreach (var c in Colunas.Where(x => x.PorcentagemLargura == 0)) + c.PorcentagemLargura = w; + + } + + private Boolean DesenharLinha(Gfx gfx) + { + float x = X; + _DY1 = _DY; + + TextBlock[] tb = new TextBlock[Colunas.Count]; + + for (int i = 0; i < Colunas.Count; i++) + { + var c = Colunas[i]; + var v = Linhas[LinhaAtual][i]; + + float w = (Width * c.PorcentagemLargura) / 100F; + + if (!string.IsNullOrWhiteSpace(v)) + { + + tb[i] = new TextBlock(v, FonteCorpo) + { + Width = w - 2F * Estilo.PaddingHorizontal, + X = x + PaddingHorizontal, + Y = _DY + PaddingSuperior, + AlinhamentoHorizontal = c.AlinhamentoHorizontal + }; + } + + x += w; + + } + + var tbm = tb.Where(t => t != null).Max(t => t.Height); + if (tbm + _DY + PaddingInferior + PaddingSuperior > BoundingBox.Bottom) return false; + + for (int i = 0; i < Colunas.Count; i++) + { + if (tb[i] != null) + tb[i].Draw(gfx); + } + + _DY += Math.Max(tbm, FonteCorpo.AlturaLinha) + PaddingSuperior + PaddingInferior; + + return true; + } + + public void DesenharCabecalho(Gfx gfx) + { + var ml = Colunas.Max(c => c.Cabecalho.Length); + float ac = ml * FonteCabecalho.AlturaLinha + 2F; + + float x = X; + _DY = Y; + + foreach (var coluna in Colunas) + { + float w = (Width * coluna.PorcentagemLargura) / 100F; + var r = new RectangleF(x, _DY, w, ac); + + var tb = new TextStack(r.InflatedRetangle(1F)); + tb.AlinhamentoVertical = AlinhamentoVertical.Centro; + tb.AlinhamentoHorizontal = AlinhamentoHorizontal.Centro; + + foreach (var item in coluna.Cabecalho) + { + tb.AddLine(item, FonteCabecalho); + } + + tb.Draw(gfx); + + x += w; + + gfx.DrawRectangle(r); + gfx.DrawRectangle(r.X, BoundingBox.Y, r.Width, BoundingBox.Height); + } + + _DY += ac; + + gfx.Stroke(); + } + + + public override void Draw(Gfx gfx) + { + + base.Draw(gfx); + gfx.SetLineWidth(0.25F); + + DesenharCabecalho(gfx); + + + while (LinhaAtual < Linhas.Count) + { + Boolean r = DesenharLinha(gfx); + + if (r) + { + if (LinhaAtual > 0) + { + gfx.PrimitiveComposer.BeginLocalState(); + gfx.PrimitiveComposer.SetStrokeColor(new DeviceRGBColor(0.5, 0.5, 0.5)); + gfx.PrimitiveComposer.SetLineDash(new org.pdfclown.documents.contents.LineDash(new double[] { 6, 1 })); + gfx.PrimitiveComposer.DrawLine(new PointF(BoundingBox.Left, _DY1).ToPointMeasure(), new PointF(BoundingBox.Right, _DY1).ToPointMeasure()); + gfx.PrimitiveComposer.Stroke(); + gfx.PrimitiveComposer.End(); + } + + LinhaAtual++; + } + else + { + break; + } + } + + + + + + + + } + + + + public override bool PossuiContono => false; + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/TabelaColuna.cs b/NFe.Danfe.PdfClown/Elementos/TabelaColuna.cs new file mode 100644 index 000000000..cf1f82c81 --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/TabelaColuna.cs @@ -0,0 +1,23 @@ +using NFe.Danfe.PdfClown.Enumeracoes; + +namespace NFe.Danfe.PdfClown.Elementos +{ + internal class TabelaColuna + { + public string[] Cabecalho { get; private set; } + public float PorcentagemLargura { get; set; } + public AlinhamentoHorizontal AlinhamentoHorizontal { get; private set; } + + public TabelaColuna(string[] cabecalho, float porcentagemLargura, AlinhamentoHorizontal alinhamentoHorizontal = AlinhamentoHorizontal.Esquerda) + { + Cabecalho = cabecalho ?? throw new ArgumentNullException(nameof(cabecalho)); + PorcentagemLargura = porcentagemLargura; + AlinhamentoHorizontal = alinhamentoHorizontal; + } + + public override string ToString() + { + return string.Join(" ", Cabecalho); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/TextBlock.cs b/NFe.Danfe.PdfClown/Elementos/TextBlock.cs new file mode 100644 index 000000000..72c8a0e0b --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/TextBlock.cs @@ -0,0 +1,166 @@ +using System.Drawing; +using System.Text; +using System.Text.RegularExpressions; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Define um bloco de texto de largura fixa e altura dinâmica. + /// + internal class TextBlock : DrawableBase + { + private string _Text; + public string Text { get => _Text; set { _Text = value; _Height = null; } } + + public List Blocks { get; private set; } + public List BlocksW { get; private set; } + + public Fonte Fonte { get; private set; } + + public List Lines { get; private set; } + private float? _Height; + + public override float Width { get => base.Width; set { base.Width = value; _Height = null; } } + public AlinhamentoHorizontal AlinhamentoHorizontal { get; set; } + + public override float Height + { + get + { + if (!_Height.HasValue) CalculateLines(); + return _Height.Value; + } + set => throw new NotSupportedException(); + } + + + + public override void Draw(Gfx gfx) + { + if (string.IsNullOrEmpty(_Text)) return; + + base.Draw(gfx); + if (!_Height.HasValue) CalculateLines(); + + float y = Y; + + foreach (var item in Lines) + { + gfx.DrawString(item, new RectangleF(X, y, Width, _Height.Value), Fonte, AlinhamentoHorizontal, AlinhamentoVertical.Topo); + y += Fonte.AlturaLinha; + } + } + + private void BreakLongText(string str) + { + char[] c = str.ToCharArray(); + float w1 = 0; + StringBuilder sb1 = new StringBuilder(); + + for (int i2 = 0; i2 < c.Length; i2++) + { + float cw = Fonte.MedirLarguraChar(c[i2]); + if (cw + w1 > Width) + { + Lines.Add(sb1.ToString()); + sb1.Clear(); + w1 = 0; + } + + w1 += cw; + sb1.Append(c[i2]); + } + + Lines.Add(sb1.ToString()); + } + + private void CalculateBlocks(string[] blocks, float[] blocksW) + { + float x = 0; + StringBuilder sb = new StringBuilder(); + + int i = 0; + + while (i < blocks.Length) + { + var w = blocks[i]; + var wl = blocksW[i]; + + if (wl > Width) + { + + if (sb.Length > 0) + { + Lines.Add(sb.ToString()); + sb.Clear(); + } + + BreakLongText(w); + i++; + x = 0; + } + else if (x + wl <= Width) + { + x += wl; + sb.Append(w); + i++; + } + else + { + if (w == " ") i++; + + x = 0; + Lines.Add(sb.ToString().TrimEnd()); + sb.Clear(); + } + } + + if (sb.Length > 0) Lines.Add(sb.ToString()); + } + + private void CalculateLines() + { + Lines.Clear(); + + for (int i = 0; i < Blocks.Count; i++) + { + CalculateBlocks(Blocks[i], BlocksW[i]); + } + + _Height = Lines.Count * Fonte.AlturaLinha; + } + + private void SplitText() + { + var lines = Text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); + + for (int i = 0; i < lines.Length; i++) + { + var line = lines[i].Trim(); + var blocks = Regex.Split(line, @"(\s)"); + var blocksW = new float[blocks.Length]; + + for (int i2 = 0; i2 < blocks.Length; i2++) + { + blocksW[i2] = Fonte.MedirLarguraTexto(blocks[i2]); + } + + Blocks.Add(blocks); + BlocksW.Add(blocksW); + } + } + + public TextBlock(string text, Fonte f) + { + Text = text; + Fonte = f; + Blocks = new List(); + BlocksW = new List(); + SplitText(); + AlinhamentoHorizontal = AlinhamentoHorizontal.Esquerda; + Lines = new List(); + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/TextStack.cs b/NFe.Danfe.PdfClown/Elementos/TextStack.cs new file mode 100644 index 000000000..f87a9751d --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/TextStack.cs @@ -0,0 +1,84 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Define uma pilha de texto. + /// + internal class TextStack : DrawableBase + { + public const float DefaultLineHeightScale = 1.25F; + + private List _Lines; + private List _Fonts; + public AlinhamentoHorizontal AlinhamentoHorizontal { get; set; } + public AlinhamentoVertical AlinhamentoVertical { get; set; } + public float LineHeightScale { get; set; } + + public TextStack(RectangleF boundingBox) + { + SetPosition(boundingBox.Location); + SetSize(boundingBox.Size); + _Lines = new List(); + _Fonts = new List(); + AlinhamentoHorizontal = AlinhamentoHorizontal.Centro; + AlinhamentoVertical = AlinhamentoVertical.Centro; + LineHeightScale = DefaultLineHeightScale; + } + + public TextStack AddLine(string text, Fonte font) + { + _Lines.Add(text); + _Fonts.Add(font); + return this; + } + + public override void Draw(Gfx gfx) + { + var fonts = new Fonte[_Fonts.Count]; + + //adjust font size to prevent horizontal overflown + for (int i = 0; i < _Lines.Count; i++) + { + var w = _Fonts[i].MedirLarguraTexto(_Lines[i]); + + if (w > BoundingBox.Width) + { + fonts[i] = new Fonte(_Fonts[i].FonteInterna, BoundingBox.Width * _Fonts[i].Tamanho / w); + } + else + { + fonts[i] = _Fonts[i]; + } + } + + float totalH = (float)fonts.Last().AlturaLinha; + + for (int i = 0; i < _Lines.Count - 1; i++) + { + totalH += (float)fonts[i].AlturaLinha * LineHeightScale; + } + + // float totalH = (float)fonts.Sum(x => x.AlturaEmMm()); + var h2 = (BoundingBox.Height - totalH) / 2D; + var r = BoundingBox; + + if (AlinhamentoVertical == AlinhamentoVertical.Centro) + r.Y += (float)h2; + else if (AlinhamentoVertical == AlinhamentoVertical.Base) + r.Y = r.Bottom - totalH; + + for (int i = 0; i < _Lines.Count; i++) + { + var l = _Lines[i]; + var f = fonts[i]; + + gfx.DrawString(l, r, f, AlinhamentoHorizontal); + r.Y += f.AlturaLinha * LineHeightScale; + } + + } + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/TextoSimples.cs b/NFe.Danfe.PdfClown/Elementos/TextoSimples.cs new file mode 100644 index 000000000..7ad3571bb --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/TextoSimples.cs @@ -0,0 +1,48 @@ +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Graphics; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Elementos +{ + class TextoSimples : ElementoBase + { + public string Texto { get; private set; } + public AlinhamentoHorizontal AlinhamentoHorizontal { get; set; } + public AlinhamentoVertical AlinhamentoVertical { get; set; } + public float TamanhoFonte { get; set; } + + public TextoSimples(Estilo estilo, string texto) : base(estilo) + { + Texto = texto; + AlinhamentoHorizontal = AlinhamentoHorizontal.Esquerda; + AlinhamentoVertical = AlinhamentoVertical.Topo; + TamanhoFonte = 6; + + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + if (!string.IsNullOrWhiteSpace(Texto)) + { + var r = BoundingBox.InflatedRetangle(0.75F); + + var tb = new TextBlock(Texto, Estilo.CriarFonteRegular(TamanhoFonte)); + tb.AlinhamentoHorizontal = AlinhamentoHorizontal; + tb.Width = r.Width; + + var y = r.Y; + + if (AlinhamentoVertical == AlinhamentoVertical.Centro) + y += (r.Height - tb.Height) / 2F; + + tb.SetPosition(r.X, y); + tb.Draw(gfx); + } + + } + + + } +} diff --git a/NFe.Danfe.PdfClown/Elementos/VerticalStack.cs b/NFe.Danfe.PdfClown/Elementos/VerticalStack.cs new file mode 100644 index 000000000..db513ee6e --- /dev/null +++ b/NFe.Danfe.PdfClown/Elementos/VerticalStack.cs @@ -0,0 +1,62 @@ +using NFe.Danfe.PdfClown.Atributos; +using NFe.Danfe.PdfClown.Graphics; + +namespace NFe.Danfe.PdfClown.Elementos +{ + /// + /// Define uma pilha vertical de elementos, de forma que todos eles fiquem com a mesma largura. + /// + [AlturaFixa] + internal class VerticalStack : DrawableBase + { + public List Drawables { get; private set; } + + public VerticalStack() + { + Drawables = new List(); + } + + public VerticalStack(float width) : this() + { + Width = width; + } + + public void Add(params DrawableBase[] db) + { + foreach (var item in db) + { + if (item == this) throw new InvalidOperationException(); + + Drawables.Add(item); + } + } + + public override void Draw(Gfx gfx) + { + base.Draw(gfx); + + float x = X, y = Y; + + for (int i = 0; i < Drawables.Count; i++) + { + var db = Drawables[i]; + db.Width = Width; + db.SetPosition(x, y); + db.Draw(gfx); + y += db.Height; + } + } + + /// + /// Soma das alturas de todos os elementos. + /// + public override float Height { get => Drawables.Sum(x => x.Height); set => throw new NotSupportedException(); } + + /// + /// Somente é possível mudar a largura. + /// + public override void SetSize(float w, float h) => throw new NotSupportedException(); + + + } +} diff --git a/NFe.Danfe.PdfClown/Enumeracoes/AlinhamentoHorizontal.cs b/NFe.Danfe.PdfClown/Enumeracoes/AlinhamentoHorizontal.cs new file mode 100644 index 000000000..c02780318 --- /dev/null +++ b/NFe.Danfe.PdfClown/Enumeracoes/AlinhamentoHorizontal.cs @@ -0,0 +1,9 @@ +namespace NFe.Danfe.PdfClown.Enumeracoes +{ + internal enum AlinhamentoHorizontal + { + Esquerda, + Centro, + Direita + } +} diff --git a/NFe.Danfe.PdfClown/Enumeracoes/AlinhamentoVertical.cs b/NFe.Danfe.PdfClown/Enumeracoes/AlinhamentoVertical.cs new file mode 100644 index 000000000..4db7979f0 --- /dev/null +++ b/NFe.Danfe.PdfClown/Enumeracoes/AlinhamentoVertical.cs @@ -0,0 +1,9 @@ +namespace NFe.Danfe.PdfClown.Enumeracoes +{ + internal enum AlinhamentoVertical + { + Topo, + Centro, + Base + } +} diff --git a/NFe.Danfe.PdfClown/Enumeracoes/Orientacao.cs b/NFe.Danfe.PdfClown/Enumeracoes/Orientacao.cs new file mode 100644 index 000000000..4a9770952 --- /dev/null +++ b/NFe.Danfe.PdfClown/Enumeracoes/Orientacao.cs @@ -0,0 +1,8 @@ +namespace NFe.Danfe.PdfClown.Enumeracoes +{ + public enum Orientacao + { + Retrato, + Paisagem + } +} diff --git a/NFe.Danfe.PdfClown/Enumeracoes/PosicaoBloco.cs b/NFe.Danfe.PdfClown/Enumeracoes/PosicaoBloco.cs new file mode 100644 index 000000000..eb243fcc1 --- /dev/null +++ b/NFe.Danfe.PdfClown/Enumeracoes/PosicaoBloco.cs @@ -0,0 +1,8 @@ +namespace NFe.Danfe.PdfClown.Enumeracoes +{ + internal enum PosicaoBloco + { + Topo, + Base + } +} diff --git a/NFe.Danfe.PdfClown/Esquemas/NFReferenciada.cs b/NFe.Danfe.PdfClown/Esquemas/NFReferenciada.cs new file mode 100644 index 000000000..56eed7e40 --- /dev/null +++ b/NFe.Danfe.PdfClown/Esquemas/NFReferenciada.cs @@ -0,0 +1,93 @@ +using System.Xml.Serialization; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Esquemas +{ + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public class NFReferenciada + { + [XmlElement("refCTe", typeof(string))] + [XmlElement("refECF", typeof(RefECF))] + [XmlElement("refNF", typeof(RefNF))] + [XmlElement("refNFP", typeof(RefNFP))] + [XmlElement("refNFe", typeof(string))] + [XmlChoiceIdentifier("TipoNFReferenciada")] + public object Item; + + [XmlIgnore] + public TipoNFReferenciada TipoNFReferenciada { get; set; } + + public override string ToString() + { + if (TipoNFReferenciada == TipoNFReferenciada.refCTe || TipoNFReferenciada == TipoNFReferenciada.refNFe) + { + string chaveAcesso = Item.ToString(); + return $"{Utils.TipoDFeDeChaveAcesso(chaveAcesso)} Ref.: {Formatador.FormatarChaveAcesso(Item.ToString())}"; + } + else + return Item.ToString(); + } + + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public enum TipoNFReferenciada + { + refCTe, + refECF, + refNF, + refNFP, + refNFe, + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public class RefECF + { + public string mod { get; set; } + public string nECF { get; set; } + public string nCOO { get; set; } + + public override string ToString() + { + return $"ECF Ref.: Modelo: {mod} ECF: {nECF} COO: {nCOO}"; + } + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public class RefNF + { + public string AAMM { get; set; } + public string CNPJ { get; set; } + public string mod { get; set; } + public string serie { get; set; } + public string nNF { get; set; } + + public override string ToString() + { + return $"NF Ref.: Série: {serie} Número: {nNF} Emitente: {Formatador.FormatarCnpj(CNPJ)} Modelo: {mod}"; + } + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public class RefNFP + { + public string AAMM { get; set; } + public string CNPJ { get; set; } + public string CPF { get; set; } + public string IE { get; set; } + public string mod { get; set; } + public string serie { get; set; } + public string nNF { get; set; } + + public override string ToString() + { + string cpfCnpj = !string.IsNullOrWhiteSpace(CNPJ) ? CNPJ : CPF; + return $"NFP Ref.: Série: {serie} Número: {nNF} Emitente: {Formatador.FormatarCpfCnpj(cpfCnpj)} Modelo: {mod} IE: {IE}"; + } + } +} diff --git a/NFe.Danfe.PdfClown/Esquemas/Namespaces.cs b/NFe.Danfe.PdfClown/Esquemas/Namespaces.cs new file mode 100644 index 000000000..b2609616d --- /dev/null +++ b/NFe.Danfe.PdfClown/Esquemas/Namespaces.cs @@ -0,0 +1,7 @@ +namespace NFe.Danfe.PdfClown.Esquemas +{ + public static class Namespaces + { + public const string NFe = "http://www.portalfiscal.inf.br/nfe"; + } +} diff --git a/NFe.Danfe.PdfClown/Esquemas/ProcNFe.cs b/NFe.Danfe.PdfClown/Esquemas/ProcNFe.cs new file mode 100644 index 000000000..5621cfeb0 --- /dev/null +++ b/NFe.Danfe.PdfClown/Esquemas/ProcNFe.cs @@ -0,0 +1,850 @@ +using System.Xml.Serialization; +using NFe.Danfe.PdfClown.Structs; + +namespace NFe.Danfe.PdfClown.Esquemas +{ + /// + /// NF-e processada + /// + [XmlType(Namespace = Namespaces.NFe)] + [XmlRoot("nfeProc", Namespace = Namespaces.NFe, IsNullable = false)] + public class ProcNFe + { + public NFe NFe { get; set; } + + public ProtNFe protNFe { get; set; } + + [XmlAttribute] + public string versao { get; set; } + } + + + /// + /// Identificação do Ambiente + /// + [Serializable] + [XmlType(Namespace = Namespaces.NFe)] + public enum TAmb + { + [XmlEnum("1")] + Producao = 1, + + [XmlEnum("2")] + Homologacao = 2, + } + + /// + /// Dados do protocolo de status + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public class InfProt + { + + /// + /// Identificação do Ambiente + /// + public TAmb tpAmb { get; set; } + + public string verAplic { get; set; } + public string chNFe { get; set; } + + public DateTimeOffsetIso8601 dhRecbto { get; set; } + + public string nProt { get; set; } + public int cStat { get; set; } + public string xMotivo { get; set; } + + [XmlAttribute(DataType = "ID")] + public string Id { get; set; } + } + + + /// + /// Tipo Protocolo de status resultado do processamento da NF-e< + /// + [Serializable] + [XmlType(Namespace = Namespaces.NFe)] + public partial class ProtNFe + { + public InfProt infProt { get; set; } + + [XmlAttribute] + public string versao { get; set; } + } + + + + [Serializable] + [XmlType(Namespace = Namespaces.NFe)] + public class NFe + { + public InfNFe infNFe { get; set; } + } + + + [Serializable] + [XmlType(Namespace = Namespaces.NFe)] + public class Endereco + { + /// + /// Logradouro + /// + public string xLgr { get; set; } + + /// + /// Número + /// + public string nro { get; set; } + + /// + /// Complemento + /// + public string xCpl { get; set; } + + /// + /// Bairro + /// + public string xBairro { get; set; } + + /// + /// Código do município + /// + public string cMun { get; set; } + + /// + /// Nome do município + /// + public string xMun { get; set; } + + /// + /// Sigla da UF + /// + public string UF { get; set; } + + /// + /// Código do CEP + /// + public string CEP { get; set; } + + /// + /// Telefone + /// + public string fone { get; set; } + } + + /// + /// Nota Técnica 2018.005 + /// + [Serializable] + [XmlType(Namespace = Namespaces.NFe)] + public class LocalEntregaRetirada : Endereco + { + public string CNPJ { get; set; } + public string CPF { get; set; } + + /// + /// Razão Social ou Nome do Expedidor/Recebedor + /// + public string xNome { get; set; } + + /// + /// Inscrição Estadual do Estabelecimento Expedidor/Recebedor + /// + public string IE { get; set; } + } + + + public class Empresa + { + public string CNPJ { get; set; } + public string CPF { get; set; } + public string xNome { get; set; } + public string IE { get; set; } + public string IEST { get; set; } + public string email { get; set; } + + [XmlIgnore] + public virtual Endereco Endereco { get; set; } + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Destinatario : Empresa + { + public string ISUF { get; set; } + //public string email; + + [XmlElement("enderDest")] + public override Endereco Endereco { get; set; } + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Emitente : Empresa + { + public string xFant { get; set; } + public string IM { get; set; } + public string CNAE { get; set; } + + [XmlElement("enderEmit")] + public override Endereco Endereco { get; set; } + + /// + /// Código de Regime Tributário + /// + public string CRT { get; set; } + } + + + /// + /// Dados dos produtos e serviços da NF-e + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Produto + { + public string cProd { get; set; } + public string cEAN { get; set; } + public string xProd { get; set; } + public string NCM { get; set; } + public string EXTIPI { get; set; } + public int CFOP { get; set; } + public string uCom { get; set; } + public double qCom { get; set; } + public double vUnCom { get; set; } + public double vProd { get; set; } + public string cEANTrib { get; set; } + public string uTrib { get; set; } + public string qTrib { get; set; } + public string vUnTrib { get; set; } + public string vFrete { get; set; } + public string vSeg { get; set; } + public string vDesc { get; set; } + public string vOutro { get; set; } + public string xPed { get; set; } + public string nItemPed { get; set; } + public string nFCI { get; set; } + } + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public class ImpostoICMS + { + public string orig { get; set; } + public string CST { get; set; } + public string CSOSN { get; set; } + public double vBC { get; set; } + public double pICMS { get; set; } + public double vICMS { get; set; } + } + + public class ImpostoICMS00 : ImpostoICMS { } + public class ImpostoICMS02 : ImpostoICMS { } + public class ImpostoICMS10 : ImpostoICMS { } + public class ImpostoICMS15 : ImpostoICMS { } + public class ImpostoICMS20 : ImpostoICMS { } + public class ImpostoICMS30 : ImpostoICMS { } + public class ImpostoICMS40 : ImpostoICMS { } + public class ImpostoICMS51 : ImpostoICMS { } + public class ImpostoICMS53 : ImpostoICMS { } + public class ImpostoICMS60 : ImpostoICMS { } + public class ImpostoICMS61 : ImpostoICMS { } + public class ImpostoICMS70 : ImpostoICMS { } + public class ImpostoICMS90 : ImpostoICMS { } + public class ImpostoICMSPart : ImpostoICMS { } + public class ImpostoICMSSN101 : ImpostoICMS { } + public class ImpostoICMSSN102 : ImpostoICMS { } + public class ImpostoICMSSN201 : ImpostoICMS { } + public class ImpostoICMSSN202 : ImpostoICMS { } + public class ImpostoICMSSN500 : ImpostoICMS { } + public class ImpostoICMSSN900 : ImpostoICMS { } + public class ImpostoICMSST : ImpostoICMS { } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class ProdutoICMS + { + + [XmlElement("ICMS00", typeof(ImpostoICMS00))] + [XmlElement("ICMS02", typeof(ImpostoICMS02))] + [XmlElement("ICMS10", typeof(ImpostoICMS10))] + [XmlElement("ICMS15", typeof(ImpostoICMS15))] + [XmlElement("ICMS20", typeof(ImpostoICMS20))] + [XmlElement("ICMS30", typeof(ImpostoICMS30))] + [XmlElement("ICMS40", typeof(ImpostoICMS40))] + [XmlElement("ICMS51", typeof(ImpostoICMS51))] + [XmlElement("ICMS53", typeof(ImpostoICMS53))] + [XmlElement("ICMS60", typeof(ImpostoICMS60))] + [XmlElement("ICMS61", typeof(ImpostoICMS61))] + [XmlElement("ICMS70", typeof(ImpostoICMS70))] + [XmlElement("ICMS90", typeof(ImpostoICMS90))] + [XmlElement("ICMSPart", typeof(ImpostoICMSPart))] + [XmlElement("ICMSSN101", typeof(ImpostoICMSSN101))] + [XmlElement("ICMSSN102", typeof(ImpostoICMSSN102))] + [XmlElement("ICMSSN201", typeof(ImpostoICMSSN201))] + [XmlElement("ICMSSN202", typeof(ImpostoICMSSN202))] + [XmlElement("ICMSSN500", typeof(ImpostoICMSSN500))] + [XmlElement("ICMSSN900", typeof(ImpostoICMSSN900))] + [XmlElement("ICMSST", typeof(ImpostoICMSST))] + public ImpostoICMS ICMS; + } + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class ProdutoIPI + { + public string clEnq { get; set; } + public string CNPJProd { get; set; } + public string cSelo { get; set; } + public string qSelo { get; set; } + public string cEnq { get; set; } + public IPITrib IPITrib { get; set; } + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class IPITrib + { + public string CST { get; set; } + public double? pIPI { get; set; } + public double? qUnid { get; set; } + public double? vBC { get; set; } + public double? vUnid { get; set; } + public double? vIPI { get; set; } + } + + /// + /// Tributos incidentes nos produtos ou serviços da NF-e + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class ProdutoImposto + { + public string vTotTrib { get; set; } + public ProdutoICMS ICMS { get; set; } + public ProdutoIPI IPI { get; set; } + } + + /// + /// Dados dos detalhes da NF-e + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public class Detalhe + { + public Produto prod { get; set; } + public ProdutoImposto imposto { get; set; } + public string infAdProd { get; set; } + + [XmlAttribute] + public string nItem { get; set; } + } + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Duplicata + { + public string nDup { get; set; } + public DateTime? dVenc { get; set; } + public double? vDup { get; set; } + } + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Fatura + { + public string nFat { get; set; } + public string vOrig { get; set; } + public string vDesc { get; set; } + public string vLiq { get; set; } + } + + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Cobranca + { + public Fatura fat { get; set; } + + [XmlElement("dup")] + public List dup { get; set; } + + public Cobranca() + { + dup = new List(); + } + } + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class ObsCont + { + public string xTexto { get; set; } + + [XmlAttribute] + public string xCampo { get; set; } + } + + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class ObsFisco + { + public string xTexto { get; set; } + + [XmlAttribute] + public string xCampo { get; set; } + } + + + /// + /// Informações adicionais da NF-e + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class InfAdic + { + public string infAdFisco { get; set; } + public string infCpl { get; set; } + + [XmlElement("obsCont")] + public List obsCont { get; set; } + + [XmlElement("obsFisco")] + public List obsFisco { get; set; } + + public InfAdic() + { + obsCont = new List(); + obsFisco = new List(); + } + + } + + + /// + /// Grupo de Valores Totais referentes ao ICMS + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class ICMSTotal + { + /// + /// Base de Cálculo do ICMS + /// + public double vBC { get; set; } + + /// + /// Valor Total do ICMS + /// + public double vICMS { get; set; } + + /// + /// Valor total do ICMS Interestadual para a UF de destino + /// + public double? vICMSUFDest { get; set; } + + /// + /// Valor total do ICMS Interestadual para a UF do remetente + /// + public double? vICMSUFRemet { get; set; } + + /// + /// Valor total do ICMS relativo Fundo de Combate à Pobreza(FCP) da UF de destino + /// + public double? vFCPUFDest { get; set; } + + /// + /// Base de Cálculo do ICMS ST + /// + public double vBCST { get; set; } + + /// + /// Valor Total do ICMS ST + /// + public double vST { get; set; } + + /// + /// Valor Total dos produtos e serviços + /// + public double vProd { get; set; } + + /// + /// Valor Total do Frete + /// + public double vFrete { get; set; } + + /// + /// Valor Total do Seguro + /// + public double vSeg { get; set; } + + /// + /// Valor Total do Desconto + /// + public double vDesc { get; set; } + + /// + /// Valor Total do II + /// + public double vII { get; set; } + + /// + /// Valor Total do IPI + /// + public double vIPI { get; set; } + + /// + /// Valor do PIS + /// + public double vPIS { get; set; } + + /// + /// Valor do COFINS + /// + public double vCOFINS { get; set; } + + /// + /// Outras Despesas acessórias + /// + public double vOutro { get; set; } + + /// + /// Valor Total da NF-e + /// + public double vNF { get; set; } + + + public double? vTotTrib { get; set; } + } + + /// + /// Totais referentes ao ISSQN + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class ISSQNTotal + { + public double? vServ { get; set; } + public double? vBC { get; set; } + public double? vISS { get; set; } + public double? vPIS { get; set; } + public double? vCOFINS { get; set; } + } + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Total + { + public ICMSTotal ICMSTot { get; set; } + public ISSQNTotal ISSQNtot { get; set; } + } + + + /// + /// Modalidade do frete + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public enum ModalidadeFrete + { + + [XmlEnum("0")] + PorContaRemetente = 0, + + [XmlEnum("1")] + PorContaDestinatario = 1, + + [XmlEnum("2")] + PorContaTerceiros = 2, + + [XmlEnum("3")] + ProprioContaRemetente = 3, + + [XmlEnum("4")] + ProprioContaDestinatario = 4, + + [XmlEnum("9")] + SemTransporte = 9, + } + + + /// + /// Dados do transportador + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Transportador + { + public string CNPJ { get; set; } + public string CPF { get; set; } + public string xNome { get; set; } + public string IE { get; set; } + public string xEnder { get; set; } + public string xMun { get; set; } + public string UF { get; set; } + } + + + [Serializable] + [XmlType(Namespace = Namespaces.NFe)] + public partial class Veiculo + { + public string placa { get; set; } + public string UF { get; set; } + public string RNTC { get; set; } + } + + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Volume + { + public double? qVol { get; set; } + public string esp { get; set; } + public string marca { get; set; } + public string nVol { get; set; } + public double? pesoL { get; set; } + public double? pesoB { get; set; } + } + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Transporte + { + public ModalidadeFrete modFrete { get; set; } + public Transportador transporta { get; set; } + + public string balsa { get; set; } + public string vagao { get; set; } + + public Veiculo reboque { get; set; } + public Veiculo veicTransp { get; set; } + + [XmlElement("vol")] + public List vol { get; set; } + + public Transporte() + { + vol = new List(); + } + } + + + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class InfNFe + { + public Identificacao ide { get; set; } + public Emitente emit { get; set; } + public Destinatario dest { get; set; } + + /// + /// Identificação do Local de retirada + /// + public LocalEntregaRetirada retirada { get; set; } + + /// + /// Identificação do Local de entrega + /// + public LocalEntregaRetirada entrega { get; set; } + + + [XmlElement("det")] + public List det { get; set; } + + public Total total { get; set; } + public Transporte transp { get; set; } + public Cobranca cobr { get; set; } + public InfAdic infAdic { get; set; } + [XmlAttribute] + public string versao { get; set; } + + /// + /// Informação adicional de compra + /// + public InfCompra compra { get; set; } + + [XmlAttribute(DataType = "ID")] + public string Id { get; set; } + + public InfNFe() + { + det = new List(); + } + + [XmlIgnore] + public Versao Versao + { + get + { + return Versao.Parse(versao); + } + } + } + + /// + /// Informações de Compras + /// + [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] + public partial class InfCompra + { + + /// + /// Nota de Empenho + /// + public string xNEmp { get; set; } + + /// + /// Pedido + /// + public string xPed { get; set; } + + /// + /// Contrato + /// + public string xCont { get; set; } + } + + /// + /// Forma de emissão da NF-e + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] + public enum FormaEmissao + { + + [XmlEnum("1")] + Normal = 1, + + [XmlEnum("2")] + ContingenciaFS = 2, + + [XmlEnum("3")] + ContingenciaSCAN = 3, + + [XmlEnum("4")] + ContingenciaDPEC = 4, + + [XmlEnum("5")] + ContingenciaFSDA = 5, + + [XmlEnum("6")] + ContingenciaSVCAN = 6, + + [XmlEnum("7")] + ContingenciaSVCRS = 7, + + [XmlEnum("9")] + ContingenciaOffLineNFCe = 9, + } + + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public partial class Identificacao + { + + public string natOp { get; set; } + + /// + /// Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e. + /// + public int mod { get; set; } + + public short serie { get; set; } + public int nNF { get; set; } + public DateTime? dEmi { get; set; } + + + #region DataHora Emissão e Saída v2- + + /// + /// Data de Saída/Entrada, NFe2 + /// + public DateTime? dSaiEnt { get; set; } + + /// + /// Hora de Saída/Entrada, NFe2 + /// + public string hSaiEnt { get; set; } + + #endregion + + #region DataHora Emissão e Saída v3+ + + /// + /// Data e Hora de Emissão, NFe v3 + /// + public DateTimeOffsetIso8601? dhEmi { get; set; } + + /// + /// Data e Hora de Saída/Entrada, NFe v3 + /// + public DateTimeOffsetIso8601? dhSaiEnt { get; set; } + + #endregion + + public Tipo tpNF { get; set; } + + /// + /// Tipo de Impressao + /// + public int tpImp { get; set; } + + /// + /// Forma de emissão da NF-e + /// + public FormaEmissao tpEmis { get; set; } + + public TAmb tpAmb { get; set; } + + /// + /// Data e Hora da entrada em contingência + /// + public DateTimeOffsetIso8601? dhCont { get; set; } + + /// + /// Justificativa da entrada em contingência + /// + public string xJust { get; set; } + + /// + /// Grupo de informação das NF/NF-e referenciadas + /// + [XmlElement("NFref")] + public List NFref { get; set; } + + public Identificacao() + { + NFref = new List(); + } + } + + + + /// + /// Tipo do Documento Fiscal + /// + [Serializable] + [XmlType(AnonymousType = true, Namespace = Namespaces.NFe)] + public enum Tipo + { + + [XmlEnum("0")] + Entrada = 0, + [XmlEnum("1")] + Saida = 1, + } +} diff --git a/NFe.Danfe.PdfClown/Esquemas/Versao.cs b/NFe.Danfe.PdfClown/Esquemas/Versao.cs new file mode 100644 index 000000000..caf89c420 --- /dev/null +++ b/NFe.Danfe.PdfClown/Esquemas/Versao.cs @@ -0,0 +1,40 @@ +using System.Diagnostics; +using System.Text.RegularExpressions; + +namespace NFe.Danfe.PdfClown.Esquemas +{ + public class Versao + { + private const string _Pattern = @"(\d+)\.(\d+)"; + public int Maior { get; protected set; } + public int Menor { get; protected set; } + + public Versao(int maior, int menor) + { + Maior = maior; + Menor = menor; + } + + [DebuggerStepThrough] + public static Versao Parse(string str) + { + if (string.IsNullOrWhiteSpace(str)) + { + throw new ArgumentException("O parâmetro str não pode ser nulo ou vazio.", "str"); + } + + Match m = Regex.Match(str, _Pattern); + Versao v = new Versao(0, 0); + + if (!m.Success) + { + throw new ArgumentException("A versão não pode ser interpretada.", "str"); + } + + v.Maior = int.Parse(m.Groups[1].Value); + v.Menor = int.Parse(m.Groups[2].Value); + + return v; + } + } +} diff --git a/NFe.Danfe.PdfClown/Graphics/Fonte.cs b/NFe.Danfe.PdfClown/Graphics/Fonte.cs new file mode 100644 index 000000000..03589361c --- /dev/null +++ b/NFe.Danfe.PdfClown/Graphics/Fonte.cs @@ -0,0 +1,63 @@ +using NFe.Danfe.PdfClown.Tools; +using pcf = org.pdfclown.documents.contents.fonts; + +namespace NFe.Danfe.PdfClown.Graphics +{ + /// + /// Define uma fonte do PDF Clown e um tamanho. + /// + internal class Fonte + { + private float _Tamanho; + + /// + /// Fonte do PDF Clown. + /// + public pcf.Font FonteInterna { get; private set; } + + public Fonte(pcf.Font font, float tamanho) + { + FonteInterna = font ?? throw new ArgumentNullException(nameof(font)); + Tamanho = tamanho; + } + + /// + /// Tamanho da fonte. + /// + public float Tamanho + { + get => _Tamanho; + set + { + if (value <= 0) throw new InvalidOperationException("O tamanho deve ser maior que zero."); + _Tamanho = value; + } + } + + /// + /// Mede a largura ocupada por uma string. + /// + /// String + /// Largura em mm. + public float MedirLarguraTexto(string str) + { + if (string.IsNullOrEmpty(str)) return 0; + return (float)FonteInterna.GetWidth(str, Tamanho).ToMm(); + } + + /// + /// Mese a largura ocupada por um Char. + /// + /// Char + /// Largura em mm. + public float MedirLarguraChar(char c) => (float)FonteInterna.GetWidth(c, Tamanho).ToMm(); + + /// + /// Medida da altura da linha. + /// + public float AlturaLinha => (float)FonteInterna.GetLineHeight(Tamanho).ToMm(); + + public Fonte Clonar() => new Fonte(FonteInterna, Tamanho); + + } +} diff --git a/NFe.Danfe.PdfClown/Graphics/Gfx.cs b/NFe.Danfe.PdfClown/Graphics/Gfx.cs new file mode 100644 index 000000000..78fc8cf2d --- /dev/null +++ b/NFe.Danfe.PdfClown/Graphics/Gfx.cs @@ -0,0 +1,132 @@ +using System.Drawing; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Tools; +using org.pdfclown.documents.contents.composition; +using org.pdfclown.documents.contents.xObjects; + +namespace NFe.Danfe.PdfClown.Graphics +{ + internal class Gfx + { + public PrimitiveComposer PrimitiveComposer { get; private set; } + + public Gfx(PrimitiveComposer primitiveComposer) + { + PrimitiveComposer = primitiveComposer ?? throw new ArgumentNullException(nameof(primitiveComposer)); + } + + internal void DrawString(string str, RectangleF rect, Fonte fonte, AlinhamentoHorizontal ah = AlinhamentoHorizontal.Esquerda, AlinhamentoVertical av = AlinhamentoVertical.Topo) + { + if (fonte == null) throw new ArgumentNullException(nameof(fonte)); + if (fonte.Tamanho <= 0) throw new ArgumentOutOfRangeException(nameof(fonte)); + CheckRectangle(rect); + + var p = rect.Location; + + if (av == AlinhamentoVertical.Base) + p.Y = rect.Bottom - fonte.AlturaLinha; + else if (av == AlinhamentoVertical.Centro) + p.Y += (rect.Height - fonte.AlturaLinha) / 2F; + + if (ah == AlinhamentoHorizontal.Direita) + p.X = rect.Right - fonte.MedirLarguraTexto(str); + if (ah == AlinhamentoHorizontal.Centro) + p.X += (rect.Width - fonte.MedirLarguraTexto(str)) / 2F; + + SetFont(fonte); + ShowText(str, p); + } + + public void SetFont(Fonte fonte) + { + if (fonte == null) throw new ArgumentNullException(nameof(fonte)); + if (fonte.FonteInterna == null) throw new ArgumentNullException(nameof(fonte)); + if (fonte.Tamanho <= 0) throw new ArgumentNullException(nameof(fonte)); + PrimitiveComposer.SetFont(fonte.FonteInterna, fonte.Tamanho); + } + + public void ShowText(string text, PointF point) + { + CheckPoint(point); + PrimitiveComposer.ShowText(text, point.ToPointMeasure()); + } + + public void ShowXObject(XObject xobj, RectangleF r) + { + if (xobj == null) throw new ArgumentNullException(nameof(xobj)); + CheckRectangle(r); + + PointF p = new PointF(); + SizeF s = new SizeF(); + SizeF xs = xobj.Size.ToMm(); + + if (r.Height >= r.Width) + { + if (xs.Height >= xs.Width) + { + s.Height = r.Height; + s.Width = (s.Height * xs.Width) / xs.Height; + } + else + { + s.Width = r.Width; + s.Height = (s.Width * xs.Height) / xs.Width; + } + } + else + { + if (xs.Height >= xs.Width) + { + s.Width = r.Width; + s.Height = (s.Width * xs.Height) / xs.Width; + } + else + { + s.Height = r.Height; + s.Width = (s.Height * xs.Width) / xs.Height; + } + } + + p.X = r.X + Math.Abs(r.Width - s.Width) / 2F; + p.Y = r.Y + Math.Abs(r.Height - s.Height) / 2F; + + PrimitiveComposer.ShowXObject(xobj, p.ToPointMeasure(), s.ToPointMeasure()); + } + + public void StrokeRectangle(RectangleF rect, float width) + { + SetLineWidth(width); + DrawRectangle(rect); + Stroke(); + } + + public void SetLineWidth(float w) + { + if (w < 0) throw new ArgumentOutOfRangeException(nameof(w)); + PrimitiveComposer.SetLineWidth(w); + } + + public void DrawRectangle(RectangleF rect) + { + CheckRectangle(rect); + PrimitiveComposer.DrawRectangle(rect.ToPointMeasure()); + } + + private void CheckRectangle(RectangleF r) + { + if (r.X < 0 || r.Y < 0 || r.Width <= 0 || r.Height <= 0) throw new ArgumentException(nameof(r)); + } + + private void CheckPoint(PointF p) + { + if (p.X < 0 || p.Y < 0) throw new ArgumentException(nameof(p)); + } + + public void Stroke() => PrimitiveComposer.Stroke(); + public void Flush() => PrimitiveComposer.Flush(); + public void Fill() => PrimitiveComposer.Fill(); + public void DrawRectangle(float x, float y, float w, float h) => DrawRectangle(new RectangleF(x, y, w, h)); + + + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/CalculoImpostoViewModel.cs b/NFe.Danfe.PdfClown/Modelo/CalculoImpostoViewModel.cs new file mode 100644 index 000000000..1dcf698a0 --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/CalculoImpostoViewModel.cs @@ -0,0 +1,108 @@ +namespace NFe.Danfe.PdfClown.Modelo +{ + public class CalculoImpostoViewModel + { + /// + /// Base de Cálculo do ICMS + /// Tag vBC + /// + public double BaseCalculoIcms { get; set; } + + /// + /// Valor Total do ICMS + /// Tag vICMS + /// + public double ValorIcms { get; set; } + + /// + /// Tag vICMSUFDest + /// + public double? vICMSUFDest { get; set; } + + /// + /// Tag vICMSUFRemet + /// + public double? vICMSUFRemet { get; set; } + + /// + /// Tag vFCPUFDest + /// + public double? vFCPUFDest { get; set; } + + /// + /// Base de Cálculo do ICMS ST + /// Tag vBCST + /// + public double BaseCalculoIcmsSt { get; set; } + + /// + /// Valor Total do ICMS ST + /// Tag vST + /// + public double ValorIcmsSt { get; set; } + + /// + /// Valor Total dos produtos e serviços + /// Tag vProd + /// + public double? ValorTotalProdutos { get; set; } + + /// + /// Valor Total do Frete + /// Tag vFrete + /// + public double ValorFrete { get; set; } + + /// + /// Valor Total do Seguro + /// Tag vSeg + /// + public double ValorSeguro { get; set; } + + /// + /// Valor Total do Desconto + /// Tag vDesc + /// + public double Desconto { get; set; } + + /// + /// Outras Despesas acessórias + /// Tag vOutro + /// + public double OutrasDespesas { get; set; } + + /// + /// Valor do imposto de importação. + /// + public double ValorII { get; set; } + + /// + /// Valor Total do IPI + /// Tag vIPI + /// + public double ValorIpi { get; set; } + + /// + /// Valor do PIS + /// + public double ValorPis { get; set; } + + /// + /// Valor do COFINS + /// + public double ValorCofins { get; set; } + + /// + /// Valor Total da NF-e + /// Tag vNF + /// + public double ValorTotalNota { get; set; } + + + /// + /// Valor aproximado total de tributos federais, estaduais e municipais (NT 2013.003) + /// Tag vTotTrib + /// + public double? ValorAproximadoTributos { get; set; } + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/CalculoIssqnViewModel.cs b/NFe.Danfe.PdfClown/Modelo/CalculoIssqnViewModel.cs new file mode 100644 index 000000000..63b8cd420 --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/CalculoIssqnViewModel.cs @@ -0,0 +1,35 @@ +namespace NFe.Danfe.PdfClown.Modelo +{ + public class CalculoIssqnViewModel + { + public string InscricaoMunicipal { get; set; } + + /// + /// Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS + /// Tag vServ + /// + public Double? ValorTotalServicos { get; set; } + + /// + /// Base de Cálculo do ISS + /// Tag vBC + /// + public Double? BaseIssqn { get; set; } + + /// + /// Valor Total do ISS + /// Tag vISS + /// + public Double? ValorIssqn { get; set; } + + /// + /// Mostrar ou não o Bloco. + /// + public Boolean Mostrar { get; set; } + + public CalculoIssqnViewModel() + { + Mostrar = false; + } + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/DanfeViewModel.cs b/NFe.Danfe.PdfClown/Modelo/DanfeViewModel.cs new file mode 100644 index 000000000..0f909ad1a --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/DanfeViewModel.cs @@ -0,0 +1,370 @@ +using System.Text; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Esquemas; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Modelo +{ + /// + /// Modelo de dados utilizado para o DANFE. + /// + public class DanfeViewModel + { + private int _QuantidadeCanhoto; + + /// + /// Quantidade de canhotos a serem impressos. + /// + public int QuantidadeCanhotos + { + get => _QuantidadeCanhoto; + set + { + if (value >= 0 && value <= 2) + _QuantidadeCanhoto = value; + else + throw new ArgumentOutOfRangeException("A quantidade de canhotos deve de 0 a 2."); + } + } + + private float _Margem; + + /// + /// Magens horizontais e verticais do DANFE. + /// + public float Margem + { + get => _Margem; + set + { + if (value >= 2 && value <= 5) + _Margem = value; + else + throw new ArgumentOutOfRangeException("A margem deve ser entre 2 e 5."); + } + } + + /// + /// Número do Documento Fiscal + /// Tag nNF + /// + public int NfNumero { get; set; } + + /// + /// Série do Documento Fiscal + /// Tag serie + /// + public int NfSerie { get; set; } + + public Orientacao Orientacao { get; set; } + + /// + /// Chave de Acesso + /// + public string ChaveAcesso { get; set; } + + + /// + /// Descrição da Natureza da Operação + /// Tag natOp + /// + public string NaturezaOperacao { get; set; } + + /// + /// Informações Complementares de interesse do Contribuinte + /// Tag infCpl + /// + public string InformacoesComplementares { get; set; } + + /// + /// Informações adicionais de interesse do Fisco + /// Tag infAdFisco + /// + public string InformacoesAdicionaisFisco { get; set; } + + /// + /// Data e Hora de emissão do Documento Fiscal + /// Tag dhEmi ou dEmi + /// + public DateTime? DataHoraEmissao { get; set; } + + /// + /// Data de Saída ou da Entrada da Mercadoria/Produto + /// Tag dSaiEnt e dhSaiEnt + /// + public DateTime? DataSaidaEntrada { get; set; } + + /// + /// Hora de Saída ou da Entrada da Mercadoria/Produto + /// Tag dSaiEnt e hSaiEnt + /// + public TimeSpan? HoraSaidaEntrada { get; set; } + + /// + /// Dados do Emitente + /// + public EmpresaViewModel Emitente { get; set; } + + /// + /// Dados do Destinatário + /// + public EmpresaViewModel Destinatario { get; set; } + + /// + /// Tipo de Operação - 0-entrada / 1-saída + /// Tag tpNF + /// + public int TipoNF { get; set; } + + /// + /// Tipo de emissão + /// + public FormaEmissao TipoEmissao { get; set; } + + /// + /// Numero do protocolo com sua data e hora + /// + public string ProtocoloAutorizacao { get; set; } + + /// + /// Faturas da Nota Fiscal + /// + public List Duplicatas { get; set; } + + /// + /// Dados da Transportadora + /// + public TransportadoraViewModel Transportadora { get; set; } + + /// + /// View Model do bloco Cálculo do Imposto + /// + public CalculoImpostoViewModel CalculoImposto { get; set; } + + /// + /// Produtos da Nota Fiscal + /// + public List Produtos { get; set; } + + /// + /// View Model do Bloco Cálculo do Issqn + /// + public CalculoIssqnViewModel CalculoIssqn { get; set; } + + /// + /// Tipo de Ambiente + /// + public int TipoAmbiente { get; set; } + + /// + /// Código do status da resposta, cStat, do elemento infProt. + /// + public int? CodigoStatusReposta { get; set; } + + /// + /// Descrição do status da resposta, xMotivo, do elemento infProt. + /// + public string DescricaoStatusReposta { get; set; } + + /// + /// Informações de Notas Fiscais referenciadas que serão levadas no texto adicional. + /// + public List NotasFiscaisReferenciadas { get; set; } + + #region Local Retirada e Entrega + + public LocalEntregaRetiradaViewModel LocalRetirada { get; set; } + + public LocalEntregaRetiradaViewModel LocalEntrega { get; set; } + + #endregion + + #region Informações adicionais de compra + + /// + /// Tag xNEmp + /// + public string NotaEmpenho { get; set; } + + /// + /// Tag xPed + /// + public string Pedido { get; set; } + + /// + /// Tag xCont + /// + public string Contrato { get; set; } + + #endregion + + + #region Opções de exibição + + /// + /// Exibi os valores do ICMS Interestadual e Valor Total dos Impostos no bloco Cálculos do Imposto. + /// + public bool ExibirIcmsInterestadual { get; set; } = true; + + /// + /// Exibi os valores do PIS e COFINS no bloco Cálculos do Imposto. + /// + public bool ExibirPisConfins { get; set; } = true; + + /// + /// Exibi o bloco "Informações do local de entrega" quando o elemento "entrega" estiver disponível. + /// + public bool ExibirBlocoLocalEntrega { get; set; } = true; + + /// + /// Exibi o bloco "Informações do local de retirada" quando o elemento "retirada" estiver disponível. + /// + public bool ExibirBlocoLocalRetirada { get; set; } = true; + + + /// + /// Exibe o Nome Fantasia, caso disponível, ao invés da Razão Social no quadro identificação do emitente. + /// + public bool PreferirEmitenteNomeFantasia { get; set; } = true; + + #endregion + + #region Contingencia + + public DateTime? ContingenciaDataHora { get; set; } + + public string ContingenciaJustificativa { get; set; } + + #endregion + + public DanfeViewModel() + { + QuantidadeCanhotos = 1; + Margem = 4; + Orientacao = Orientacao.Retrato; + CalculoImposto = new CalculoImpostoViewModel(); + Emitente = new EmpresaViewModel(); + Destinatario = new EmpresaViewModel(); + Duplicatas = new List(); + Produtos = new List(); + Transportadora = new TransportadoraViewModel(); + CalculoIssqn = new CalculoIssqnViewModel(); + NotasFiscaisReferenciadas = new List(); + } + + public Boolean MostrarCalculoIssqn { get; set; } + + + /// + /// Substitui o ponto e vírgula (;) por uma quebra de linha. + /// + private string BreakLines(string str) + { + return str == null ? string.Empty : str.Replace(';', '\n'); + } + + public static DanfeViewModel CreateFromXmlFile(string path) + { + return DanfeViewModelCreator.CriarDeArquivoXml(path); + } + + public static DanfeViewModel CreateFromXmlString(string xml) + { + return DanfeViewModelCreator.CreateFromXmlString(xml); + } + + public virtual string TextoRecebimento + { + get + { + return $"Recebemos de {Emitente.RazaoSocial} os produtos e/ou serviços constantes na Nota Fiscal Eletrônica indicada {(Orientacao == Orientacao.Retrato ? "abaixo" : "ao lado")}. Emissão: {DataHoraEmissao.Formatar()} Valor Total: R$ {CalculoImposto.ValorTotalNota.Formatar()} Destinatário: {Destinatario.RazaoSocial}"; + } + } + + public virtual string TextoAdicionalFisco() + { + StringBuilder sb = new StringBuilder(); + + if (TipoEmissao == FormaEmissao.ContingenciaSVCAN || TipoEmissao == FormaEmissao.ContingenciaSVCRS) + { + sb.Append("Contingência "); + + if (TipoEmissao == FormaEmissao.ContingenciaSVCAN) + sb.Append("SVC-AN"); + + if (TipoEmissao == FormaEmissao.ContingenciaSVCRS) + sb.Append("SVC-RS"); + + if (ContingenciaDataHora.HasValue) + { + sb.Append($" - {ContingenciaDataHora.FormatarDataHora()}"); + } + + if (!string.IsNullOrWhiteSpace(ContingenciaJustificativa)) + { + sb.Append($" - {ContingenciaJustificativa}"); + } + + sb.Append("."); + + } + + return sb.ToString(); + } + + public virtual string TextoAdicional() + { + StringBuilder sb = new StringBuilder(); + + if (!string.IsNullOrEmpty(InformacoesComplementares)) + sb.Append(InformacoesComplementares).Replace(";", "\r\n"); + + /*if (!string.IsNullOrEmpty(Destinatario.Email)) + { + // Adiciona um espaço após a virgula caso necessário, isso facilita a quebra de linha. + var destEmail = Regex.Replace(Destinatario.Email, @"(?<=\S)([,;])(?=\S)", "$1 ").Trim(new char[] { ' ', ',', ';' }); + sb.AppendChaveValor("Email do Destinatário", destEmail); + } + + if (!string.IsNullOrEmpty(InformacoesAdicionaisFisco)) + sb.AppendChaveValor("Inf. fisco", InformacoesAdicionaisFisco); + + if (!string.IsNullOrEmpty(Pedido) && !Utils.StringContemChaveValor(InformacoesComplementares, "Pedido", Pedido)) + sb.AppendChaveValor("Pedido", Pedido); + + if (!string.IsNullOrEmpty(Contrato) && !Utils.StringContemChaveValor(InformacoesComplementares, "Contrato", Contrato)) + sb.AppendChaveValor("Contrato", Contrato); + + if (!string.IsNullOrEmpty(NotaEmpenho)) + sb.AppendChaveValor("Nota de Empenho", NotaEmpenho);*/ + + + foreach (var nfref in NotasFiscaisReferenciadas.Take(5)) + { + if (sb.Length > 0) sb.Append(" "); + sb.Append(nfref); + } + + + #region NT 2013.003 Lei da Transparência + + /*if (CalculoImposto.ValorAproximadoTributos.HasValue && (string.IsNullOrEmpty(InformacoesComplementares) || + !Regex.IsMatch(InformacoesComplementares, @"((valor|vlr?\.?)\s+(aprox\.?|aproximado)\s+(dos\s+)?(trib\.?|tributos))|((trib\.?|tributos)\s+(aprox\.?|aproximado))", RegexOptions.IgnoreCase))) + { + if (sb.Length > 0) sb.Append("\r\n"); + sb.Append("Valor Aproximado dos Tributos: "); + sb.Append(CalculoImposto.ValorAproximadoTributos.FormatarMoeda()); + }*/ + + #endregion + + + return sb.ToString(); + } + + public void DefinirTextoCreditos(string textoCreditos) + { + Strings.TextoCreditos = textoCreditos; + } + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/DanfeViewModelCreator.cs b/NFe.Danfe.PdfClown/Modelo/DanfeViewModelCreator.cs new file mode 100644 index 000000000..5de61dfee --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/DanfeViewModelCreator.cs @@ -0,0 +1,389 @@ +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using NFe.Danfe.PdfClown.Enumeracoes; +using NFe.Danfe.PdfClown.Esquemas; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Modelo +{ + public static class DanfeViewModelCreator + { + public readonly static IEnumerable FormasEmissaoSuportadas = new FormaEmissao[] { FormaEmissao.Normal, FormaEmissao.ContingenciaSVCAN, FormaEmissao.ContingenciaSVCRS }; + + private static EmpresaViewModel CreateEmpresaFrom(Empresa empresa) + { + EmpresaViewModel model = new EmpresaViewModel(); + + model.RazaoSocial = empresa.xNome; + model.CnpjCpf = !string.IsNullOrWhiteSpace(empresa.CNPJ) ? empresa.CNPJ : empresa.CPF; + model.Ie = empresa.IE; + model.IeSt = empresa.IEST; + model.Email = empresa.email; + + var end = empresa.Endereco; + + if (end != null) + { + model.EnderecoLogadrouro = end.xLgr; + model.EnderecoNumero = end.nro; + model.EnderecoBairro = end.xBairro; + model.Municipio = end.xMun; + model.EnderecoUf = end.UF; + model.EnderecoCep = end.CEP; + model.Telefone = end.fone; + model.EnderecoComplemento = end.xCpl; + } + + if (empresa is Emitente) + { + var emit = empresa as Emitente; + model.IM = emit.IM; + model.CRT = emit.CRT; + model.NomeFantasia = emit.xFant; + } + + return model; + } + + internal static DanfeViewModel CreateFromXmlString(string xml) + { + ProcNFe nfe = null; + XmlSerializer serializer = new XmlSerializer(typeof(ProcNFe)); + + try + { + using (TextReader reader = new StringReader(xml)) + { + nfe = (ProcNFe)serializer.Deserialize(reader); + } + + return CreateFromXml(nfe); + } + catch (System.InvalidOperationException e) + { + throw new Exception("Não foi possível interpretar o texto Xml.", e); + } + } + + /// + /// Cria o modelo a partir de um arquivo xml. + /// + /// + /// + public static DanfeViewModel CriarDeArquivoXml(string caminho) + { + using (StreamReader sr = new StreamReader(caminho, true)) + { + return CriarDeArquivoXmlInternal(sr); + } + } + + /// + /// Cria o modelo a partir de um arquivo xml contido num stream. + /// + /// + /// Modelo + public static DanfeViewModel CriarDeArquivoXml(Stream stream) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + + using (StreamReader sr = new StreamReader(stream, true)) + { + return CriarDeArquivoXmlInternal(sr); + } + } + + /// + /// Cria o modelo a partir de uma string xml. + /// + public static DanfeViewModel CriarDeStringXml(string str) + { + if (str == null) + throw new ArgumentNullException(nameof(str)); + + using (StringReader sr = new StringReader(str)) + { + return CriarDeArquivoXmlInternal(sr); + } + } + + + private static DanfeViewModel CriarDeArquivoXmlInternal(TextReader reader) + { + ProcNFe nfe = null; + XmlSerializer serializer = new XmlSerializer(typeof(ProcNFe)); + + try + { + nfe = (ProcNFe)serializer.Deserialize(reader); + return CreateFromXml(nfe); + } + catch (InvalidOperationException e) + { + if (e.InnerException is XmlException) + { + var ex = (XmlException)e.InnerException; + throw new Exception(string.Format("Não foi possível interpretar o Xml. Linha {0} Posição {1}.", ex.LineNumber, ex.LinePosition)); + } + + throw new XmlException("O Xml não parece ser uma NF-e processada.", e); + } + } + + internal static void ExtrairDatas(DanfeViewModel model, InfNFe infNfe) + { + var ide = infNfe.ide; + + if (infNfe.Versao.Maior >= 3) + { + if (ide.dhEmi.HasValue) model.DataHoraEmissao = ide.dhEmi?.DateTimeOffsetValue.DateTime; + if (ide.dhSaiEnt.HasValue) model.DataSaidaEntrada = ide.dhSaiEnt?.DateTimeOffsetValue.DateTime; + + if (model.DataSaidaEntrada.HasValue) + model.HoraSaidaEntrada = model.DataSaidaEntrada?.TimeOfDay; + } + else + { + model.DataHoraEmissao = ide.dEmi; + model.DataSaidaEntrada = ide.dSaiEnt; + + if (!string.IsNullOrWhiteSpace(ide.hSaiEnt)) + model.HoraSaidaEntrada = TimeSpan.Parse(ide.hSaiEnt); + + } + } + + internal static CalculoImpostoViewModel CriarCalculoImpostoViewModel(ICMSTotal i) + { + return new CalculoImpostoViewModel() + { + ValorAproximadoTributos = i.vTotTrib, + BaseCalculoIcms = i.vBC, + ValorIcms = i.vICMS, + BaseCalculoIcmsSt = i.vBCST, + ValorIcmsSt = i.vST, + ValorTotalProdutos = i.vProd, + ValorFrete = i.vFrete, + ValorSeguro = i.vSeg, + Desconto = i.vDesc, + ValorII = i.vII, + ValorIpi = i.vIPI, + ValorPis = i.vPIS, + ValorCofins = i.vCOFINS, + OutrasDespesas = i.vOutro, + ValorTotalNota = i.vNF, + vFCPUFDest = i.vFCPUFDest, + vICMSUFDest = i.vICMSUFDest, + vICMSUFRemet = i.vICMSUFRemet + }; + } + + public static DanfeViewModel CreateFromXml(ProcNFe procNfe) + { + DanfeViewModel model = new DanfeViewModel(); + + var nfe = procNfe.NFe; + var infNfe = nfe.infNFe; + var ide = infNfe.ide; + model.TipoEmissao = ide.tpEmis; + + if (ide.mod != 55) + throw new NotSupportedException("Somente o mod==55 está implementado."); + + if (!FormasEmissaoSuportadas.Contains(model.TipoEmissao)) + throw new NotSupportedException($"O tpEmis {ide.tpEmis} não é suportado."); + + model.Orientacao = ide.tpImp == 1 ? Orientacao.Retrato : Orientacao.Paisagem; + + var infProt = procNfe.protNFe.infProt; + model.CodigoStatusReposta = infProt.cStat; + model.DescricaoStatusReposta = infProt.xMotivo; + + model.TipoAmbiente = (int)ide.tpAmb; + model.NfNumero = ide.nNF; + model.NfSerie = ide.serie; + model.NaturezaOperacao = ide.natOp; + model.ChaveAcesso = procNfe.NFe.infNFe.Id.Substring(3); + model.TipoNF = (int)ide.tpNF; + + model.Emitente = CreateEmpresaFrom(infNfe.emit); + model.Destinatario = CreateEmpresaFrom(infNfe.dest); + + // Local retirada e entrega + if (infNfe.retirada != null) + model.LocalRetirada = CreateLocalRetiradaEntrega(infNfe.retirada); + + if (infNfe.entrega != null) + model.LocalEntrega = CreateLocalRetiradaEntrega(infNfe.entrega); + + model.NotasFiscaisReferenciadas = ide.NFref.Select(x => x.ToString()).ToList(); + + // Informações adicionais de compra + if (infNfe.compra != null) + { + model.Contrato = infNfe.compra.xCont; + model.NotaEmpenho = infNfe.compra.xNEmp; + model.Pedido = infNfe.compra.xPed; + } + + foreach (var det in infNfe.det) + { + ProdutoViewModel produto = new ProdutoViewModel(); + produto.Codigo = det.prod.cProd; + produto.Descricao = det.prod.xProd; + produto.Ncm = det.prod.NCM; + produto.Cfop = det.prod.CFOP; + produto.Unidade = det.prod.uCom; + produto.Quantidade = det.prod.qCom; + produto.ValorUnitario = det.prod.vUnCom; + produto.ValorTotal = det.prod.vProd; + produto.InformacoesAdicionais = det.infAdProd; + + var imposto = det.imposto; + + if (imposto != null) + { + if (imposto.ICMS != null) + { + var icms = imposto.ICMS.ICMS; + + if (icms != null) + { + produto.ValorIcms = icms.vICMS; + produto.BaseIcms = icms.vBC; + produto.AliquotaIcms = icms.pICMS; + produto.OCst = icms.orig + icms.CST + icms.CSOSN; + } + } + + if (imposto.IPI != null) + { + var ipi = imposto.IPI.IPITrib; + + if (ipi != null) + { + produto.ValorIpi = ipi.vIPI; + produto.AliquotaIpi = ipi.pIPI; + } + } + } + + model.Produtos.Add(produto); + } + + if (infNfe.cobr != null) + { + var duplicatas = infNfe.cobr.dup.Select(x => new DuplicataViewModel + { + Numero = x.nDup, + Valor = x.vDup, + Vecimento = x.dVenc + }); + model.Duplicatas = duplicatas.ToList(); + } + + model.CalculoImposto = CriarCalculoImpostoViewModel(infNfe.total.ICMSTot); + + var issqnTotal = infNfe.total.ISSQNtot; + + if (issqnTotal != null) + { + var c = model.CalculoIssqn; + c.InscricaoMunicipal = infNfe.emit.IM; + c.BaseIssqn = issqnTotal.vBC; + c.ValorTotalServicos = issqnTotal.vServ; + c.ValorIssqn = issqnTotal.vISS; + c.Mostrar = true; + } + + var transp = infNfe.transp; + var transportadora = transp.transporta; + var transportadoraModel = model.Transportadora; + + transportadoraModel.ModalidadeFrete = (int)transp.modFrete; + + if (transp.veicTransp != null) + { + transportadoraModel.VeiculoUf = transp.veicTransp.UF; + transportadoraModel.CodigoAntt = transp.veicTransp.RNTC; + transportadoraModel.Placa = transp.veicTransp.placa; + } + + if (transportadora != null) + { + transportadoraModel.RazaoSocial = transportadora.xNome; + transportadoraModel.EnderecoUf = transportadora.UF; + transportadoraModel.CnpjCpf = !string.IsNullOrWhiteSpace(transportadora.CNPJ) ? transportadora.CNPJ : transportadora.CPF; + transportadoraModel.EnderecoLogadrouro = transportadora.xEnder; + transportadoraModel.Municipio = transportadora.xMun; + transportadoraModel.Ie = transportadora.IE; + } + + + var vol = transp.vol.FirstOrDefault(); + + if (vol != null) + { + transportadoraModel.QuantidadeVolumes = vol.qVol; + transportadoraModel.Especie = vol.esp; + transportadoraModel.Marca = vol.marca; + transportadoraModel.Numeracao = vol.nVol; + transportadoraModel.PesoBruto = vol.pesoB; + transportadoraModel.PesoLiquido = vol.pesoL; + } + + + var infAdic = infNfe.infAdic; + if (infAdic != null) + { + model.InformacoesComplementares = procNfe.NFe.infNFe.infAdic.infCpl; + model.InformacoesAdicionaisFisco = procNfe.NFe.infNFe.infAdic.infAdFisco; + } + + var infoProto = procNfe.protNFe.infProt; + + model.ProtocoloAutorizacao = string.Format(Formatador.Cultura, "{0} - {1}", infoProto.nProt, infoProto.dhRecbto.DateTimeOffsetValue.DateTime); + + ExtrairDatas(model, infNfe); + + // Contingência SVC-AN e SVC-RS + if (model.TipoEmissao == FormaEmissao.ContingenciaSVCAN || model.TipoEmissao == FormaEmissao.ContingenciaSVCRS) + { + model.ContingenciaDataHora = ide.dhCont?.DateTimeOffsetValue.DateTime; + model.ContingenciaJustificativa = ide.xJust; + } + + return model; + } + + private static LocalEntregaRetiradaViewModel CreateLocalRetiradaEntrega(LocalEntregaRetirada local) + { + var m = new LocalEntregaRetiradaViewModel + { + NomeRazaoSocial = local.xNome, + CnpjCpf = !string.IsNullOrWhiteSpace(local.CNPJ) ? local.CNPJ : local.CPF, + InscricaoEstadual = local.IE, + Bairro = local.xBairro, + Municipio = local.xMun, + Uf = local.UF, + Cep = local.CEP, + Telefone = local.fone + }; + + StringBuilder sb = new StringBuilder(); + sb.Append(local.xLgr); + + if (!string.IsNullOrWhiteSpace(local.nro)) + sb.Append(", ").Append(local.nro); + + if (!string.IsNullOrWhiteSpace(local.xCpl)) + sb.Append(" - ").Append(local.xCpl); + + m.Endereco = sb.ToString(); + + return m; + } + + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/DuplicataViewModel.cs b/NFe.Danfe.PdfClown/Modelo/DuplicataViewModel.cs new file mode 100644 index 000000000..c08c87aba --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/DuplicataViewModel.cs @@ -0,0 +1,23 @@ +namespace NFe.Danfe.PdfClown.Modelo +{ + public class DuplicataViewModel + { + /// + /// Número da Duplicata + /// Tag nDup + /// + public string Numero { get; set; } + + /// + /// Data de vencimento + /// Tag dVenc + /// + public DateTime? Vecimento { get; set; } + + /// + /// Valor da duplicata + /// Tag vDup + /// + public Double? Valor { get; set; } + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/EmpresaViewModel.cs b/NFe.Danfe.PdfClown/Modelo/EmpresaViewModel.cs new file mode 100644 index 000000000..2380e1407 --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/EmpresaViewModel.cs @@ -0,0 +1,142 @@ +using System.Text; +using NFe.Danfe.PdfClown.Tools; + +namespace NFe.Danfe.PdfClown.Modelo +{ + public class EmpresaViewModel + { + /// + /// Razão Social ou Nome + /// Tag xNome + /// + public string RazaoSocial { get; set; } + + /// + /// Nome fantasia + /// Tag xFant + /// + public string NomeFantasia { get; set; } + + /// + /// Logradouro + /// Tag xLgr + /// + public string EnderecoLogadrouro { get; set; } + + /// + /// Complemento + /// Tag xCpl + /// + public string EnderecoComplemento { get; set; } + + /// + /// Número + /// Tag nro + /// + public string EnderecoNumero { get; set; } + + /// + /// Código do CEP + /// Tag CEP + /// + public string EnderecoCep { get; set; } + + /// + /// Bairro + /// Tag xBairro + /// + public string EnderecoBairro { get; set; } + + /// + /// Sigla da UF + /// Tag UF + /// + public string EnderecoUf { get; set; } + + /// + /// Nome do município + /// Tag xMun + /// + public string Municipio { get; set; } + + /// + /// Telefone + /// Tag fone + /// + public string Telefone { get; set; } + + /// + /// CNPJ ou CPF + /// Tag CNPJ ou CPF + /// + public string CnpjCpf { get; set; } + + /// + /// Inscrição Estadual + /// Tag IE + /// + public string Ie { get; set; } + + /// + /// IE do Substituto Tributário + /// Tag IEST + /// + public string IeSt { get; set; } + + /// + /// Inscrição Municipal + /// Tag IM + /// + public string IM { get; set; } + + /// + /// Email + /// Tag email + /// + public string Email { get; set; } + + /// + /// Código de Regime Tributário + /// + public string CRT { get; set; } + + /// + /// Linha 1 do Endereço + /// + public string EnderecoLinha1 + { + get + { + StringBuilder sb = new StringBuilder(); + sb.Append(EnderecoLogadrouro); + if (!string.IsNullOrWhiteSpace(EnderecoNumero)) sb.Append(", ").Append(EnderecoNumero); + if (!string.IsNullOrWhiteSpace(EnderecoComplemento)) sb.Append(" - ").Append(EnderecoComplemento); + return sb.ToString(); + } + } + + /// + /// Linha 1 do Endereço + /// + public string EnderecoLinha2 => $"{EnderecoBairro} - CEP: {Formatador.FormatarCEP(EnderecoCep)}"; + + + /// + /// Linha 3 do Endereço + /// + public string EnderecoLinha3 + { + get + { + StringBuilder sb = new StringBuilder() + .Append(Municipio).Append(" - ").Append(EnderecoUf); + + if (!string.IsNullOrWhiteSpace(Telefone)) + sb.Append(" Fone: ").Append(Formatador.FormatarTelefone(Telefone)); + + return sb.ToString(); + } + } + + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/LocalEntregaRetiradaViewModel.cs b/NFe.Danfe.PdfClown/Modelo/LocalEntregaRetiradaViewModel.cs new file mode 100644 index 000000000..83ba4b748 --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/LocalEntregaRetiradaViewModel.cs @@ -0,0 +1,15 @@ +namespace NFe.Danfe.PdfClown.Modelo +{ + public class LocalEntregaRetiradaViewModel + { + public string NomeRazaoSocial { get; set; } + public string CnpjCpf { get; set; } + public string InscricaoEstadual { get; set; } + public string Endereco { get; set; } + public string Bairro { get; set; } + public string Cep { get; set; } + public string Municipio { get; set; } + public string Uf { get; set; } + public string Telefone { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Danfe.PdfClown/Modelo/ProdutoViewModel.cs b/NFe.Danfe.PdfClown/Modelo/ProdutoViewModel.cs new file mode 100644 index 000000000..f0f187024 --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/ProdutoViewModel.cs @@ -0,0 +1,123 @@ +namespace NFe.Danfe.PdfClown.Modelo +{ + public class ProdutoViewModel + { + /// + /// Código do produto ou serviço + /// Tag cProd + /// + public string Codigo { get; set; } + + /// + /// Informações Adicionais do Produto + /// Tag infAdProd + /// + public string InformacoesAdicionais { get; set; } + + /// + /// Descrição do produto ou serviço + /// Tag xProd + /// + public string Descricao { get; set; } + + /// + /// Código NCM com 8 dígitos ou 2 dígitos (gênero) + /// Tag NCM + /// + public string Ncm { get; set; } + + + /// + /// Origem da mercadoria + Tributação do ICMS + /// Tag orig e CST + /// + public string OCst { get; set; } + + /// + /// Código Fiscal de Operações e Prestações + /// Tag CFOP + /// + public int Cfop { get; set; } + + /// + /// Unidade Comercial + /// Tag uCom + /// + public string Unidade { get; set; } + + /// + /// Quantidade Comercial + /// Tag qCom + /// + public double Quantidade { get; set; } + + /// + /// Valor Unitário de Comercialização + /// Tag vUnCom + /// + public double ValorUnitario { get; set; } + + /// + /// Valor Total Bruto dos Produtos ou Serviços + /// Tag vProd + /// + public double ValorTotal { get; set; } + + /// + /// Valor da BC do ICMS + /// Tag vBC + /// + public double BaseIcms { get; set; } + + /// + /// Valor do ICMS + /// Tag vICMS + /// + public double ValorIcms { get; set; } + + /// + /// Alíquota do imposto + /// Tag pICMS + /// + public double AliquotaIcms { get; set; } + + /// + /// Valor do IPI + /// Tag vIPI + /// + public double? ValorIpi { get; set; } + + /// + /// Alíquota do IPI + /// Tag pIPI + /// + public double? AliquotaIpi { get; set; } + + /// + /// Valor aproximado total de tributos federais, estaduais e municipais. [NT2013.003] + /// Tag vTotTrib + /// + public double? ValorAproximadoTributos { get; set; } + + public ProdutoViewModel() + { + AliquotaIpi = null; + ValorIpi = null; + } + + public string DescricaoCompleta + { + get + { + string descriCaoCompleta = Descricao; + + if (!string.IsNullOrWhiteSpace(InformacoesAdicionais)) + { + descriCaoCompleta += "\r\n" + InformacoesAdicionais; + } + + return descriCaoCompleta; + } + } + } +} diff --git a/NFe.Danfe.PdfClown/Modelo/TransportadoraViewModel.cs b/NFe.Danfe.PdfClown/Modelo/TransportadoraViewModel.cs new file mode 100644 index 000000000..cc6353bfb --- /dev/null +++ b/NFe.Danfe.PdfClown/Modelo/TransportadoraViewModel.cs @@ -0,0 +1,97 @@ +namespace NFe.Danfe.PdfClown.Modelo +{ + public class TransportadoraViewModel : EmpresaViewModel + { + public static readonly Dictionary ModalidadesFrete = new Dictionary() + { + {0, "Por conta Remetente"}, + {1, "Por conta Destinatário"}, + {2, "Por conta Terceiros"}, + {3, "Próprio, por conta Rem."}, + {4, "Próprio, por conta Dest."}, + {9, "Sem Transporte"} + }; + + /// + /// Modalidade do frete. + /// Tag modFrete + /// + public int ModalidadeFrete { get; set; } + + /// + /// Registro Nacional de Transportador de Carga (ANTT). + /// Tag RNTC + /// + public string CodigoAntt { get; set; } + + /// + /// Placa do Veículo. + /// Tag placa + /// + public string Placa { get; set; } + + /// + /// Sigla da UF do Veículo + /// Tag UF + /// + public string VeiculoUf { get; set; } + + /// + /// Quantidade de volumes transportados. + /// Tag qVol + /// + public Double? QuantidadeVolumes { get; set; } + + /// + /// Espécie dos volumes transportados. + /// Tag esp + /// + public string Especie { get; set; } + + /// + /// Marca dos volumes transportados. + /// Tag marca + /// + public string Marca { get; set; } + + /// + /// Numeração dos volumes transportados. + /// Tag nVol + /// + public string Numeracao { get; set; } + + /// + /// Peso Líquido (em kg). + /// Tag pesoL + /// + public Double? PesoLiquido { get; set; } + + /// + /// Peso Bruto (em kg). + /// Tag pesoB + /// + public Double? PesoBruto { get; set; } + + public string ModalidadeFreteString + { + get + { + string result = ""; + + if (ModalidadesFrete.ContainsKey(ModalidadeFrete)) + { + result = $"{ModalidadeFrete}-{ModalidadesFrete[ModalidadeFrete]}"; + if (ModalidadeFrete == 9) result = string.Empty; + if (ModalidadeFrete == 0) result = "0 - CIF"; + if (ModalidadeFrete == 1) result = "1 - FOB"; + } + else + { + result = $"({ModalidadeFrete})"; + } + + return result; + } + } + } +} diff --git a/NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj b/NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj new file mode 100644 index 000000000..e91ef4be4 --- /dev/null +++ b/NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj @@ -0,0 +1,20 @@ + + + + netstandard2.0;net6.0 + enable + enable + latest + Zeus.Net.NFe.Danfe.PdfClown + Zeus.Net.NFe.Danfe.PdfClown + ZeusAutomacao + Zeus Automacao + Biblioteca para geração de DANFE em PDF usando PDFClown. + + + + + + + + diff --git a/NFe.Danfe.PdfClown/Strings.cs b/NFe.Danfe.PdfClown/Strings.cs new file mode 100644 index 000000000..091a0d8b1 --- /dev/null +++ b/NFe.Danfe.PdfClown/Strings.cs @@ -0,0 +1,19 @@ +namespace NFe.Danfe.PdfClown +{ + internal static class Strings + { + public const string InscricaoEstadual = "Inscrição Estadual"; + public const string Endereco = "Endereço"; + public const string Municipio = "Município"; + public const string UF = "UF"; + public const string CnpjCpf = "Cnpj / Cpf"; + public const string Quantidade = "Quantidade"; + public const string RazaoSocial = "Razão Social"; + public const string NomeRazaoSocial = "Nome / Razão Social"; + public const string FoneFax = "Fone / Fax"; + public const string Cep = "CEP"; + public const string BairroDistrito = "Bairro"; + public const string TextoConsulta = "Consulta de autenticidade no portal nacional da NF-e www.nfe.fazenda.gov.br/portal ou no site da Sefaz Autorizadora"; + public static string TextoCreditos = "Desenvolvido por [ www.laranjeiras.dev / (21)997706037 ]"; + } +} diff --git a/NFe.Danfe.PdfClown/Structs/DateTimeOffsetIso8601.cs b/NFe.Danfe.PdfClown/Structs/DateTimeOffsetIso8601.cs new file mode 100644 index 000000000..fc3ec6a5e --- /dev/null +++ b/NFe.Danfe.PdfClown/Structs/DateTimeOffsetIso8601.cs @@ -0,0 +1,95 @@ +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; + +namespace NFe.Danfe.PdfClown.Structs +{ + // Source: https://stackoverflow.com/questions/3377036/how-can-i-xml-serialize-a-datetimeoffset-property + /// + /// The default value is DateTimeOffset.MinValue. This is a value + /// type and has the same hash code as DateTimeOffset! Implicit + /// assignment from DateTime is neither implemented nor desirable! + /// + public struct DateTimeOffsetIso8601 : IXmlSerializable + { + public DateTimeOffset DateTimeOffsetValue { private set; get; } + + public DateTimeOffsetIso8601(DateTimeOffset value) + { + this.DateTimeOffsetValue = value; + } + + public static implicit operator DateTimeOffsetIso8601(DateTimeOffset value) + { + return new DateTimeOffsetIso8601(value); + } + + public static implicit operator DateTimeOffset(DateTimeOffsetIso8601 instance) + { + return instance.DateTimeOffsetValue; + } + + public static bool operator ==(DateTimeOffsetIso8601 a, DateTimeOffsetIso8601 b) + { + return a.DateTimeOffsetValue == b.DateTimeOffsetValue; + } + + public static bool operator !=(DateTimeOffsetIso8601 a, DateTimeOffsetIso8601 b) + { + return a.DateTimeOffsetValue != b.DateTimeOffsetValue; + } + + public static bool operator <(DateTimeOffsetIso8601 a, DateTimeOffsetIso8601 b) + { + return a.DateTimeOffsetValue < b.DateTimeOffsetValue; + } + + public static bool operator >(DateTimeOffsetIso8601 a, DateTimeOffsetIso8601 b) + { + return a.DateTimeOffsetValue > b.DateTimeOffsetValue; + } + + public override bool Equals(object o) + { + if (o is DateTimeOffsetIso8601) + return DateTimeOffsetValue.Equals(((DateTimeOffsetIso8601)o).DateTimeOffsetValue); + else if (o is DateTimeOffset) + return DateTimeOffsetValue.Equals((DateTimeOffset)o); + else + return false; + } + + public override int GetHashCode() + { + return DateTimeOffsetValue.GetHashCode(); + } + + public XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(XmlReader reader) + { + var text = reader.ReadElementString(); + + if (!string.IsNullOrWhiteSpace(text)) + DateTimeOffsetValue = XmlConvert.ToDateTimeOffset(text); + } + + public override string ToString() + { + return DateTimeOffsetValue.ToString(format: "o"); + } + + public string ToString(string format) + { + return DateTimeOffsetValue.ToString(format); + } + + public void WriteXml(XmlWriter writer) + { + writer.WriteString(DateTimeOffsetValue.ToString(format: "o")); + } + } +} diff --git a/NFe.Danfe.PdfClown/Tools/Extensions.cs b/NFe.Danfe.PdfClown/Tools/Extensions.cs new file mode 100644 index 000000000..9d9990e08 --- /dev/null +++ b/NFe.Danfe.PdfClown/Tools/Extensions.cs @@ -0,0 +1,126 @@ +using System.Drawing; +using System.Text; +using NFe.Danfe.PdfClown.Enumeracoes; +using org.pdfclown.documents.contents.composition; + +namespace NFe.Danfe.PdfClown.Tools +{ + internal static class Extentions + { + private const float PointFactor = 72F / 25.4F; + + /// + /// Converts Millimeters to Point + /// + /// + /// + public static float ToPoint(this float mm) + { + return PointFactor * mm; + } + + /// + /// Converts Point to Millimeters + /// + /// + /// + public static float ToMm(this float point) + { + return point / PointFactor; + } + + /// + /// Converts Point to Millimeters + /// + /// + /// + public static SizeF ToMm(this SizeF s) + { + return new SizeF(s.Width.ToMm(), s.Height.ToMm()); + } + + /// + /// Converts Point to Millimeters + /// + /// + /// + public static SizeF ToPointMeasure(this SizeF s) + { + return new SizeF(s.Width.ToPoint(), s.Height.ToPoint()); + } + + /// + /// Converts Millimeters to Point + /// + /// + /// + public static double ToPoint(this double mm) + { + return PointFactor * mm; + } + + /// + /// Converts Point to Millimeters + /// + /// + /// + public static double ToMm(this double point) + { + return point / PointFactor; + } + + public static RectangleF InflatedRetangle(this RectangleF rect, float top, float button, float horizontal) + { + return new RectangleF(rect.X + horizontal, rect.Y + top, rect.Width - 2 * horizontal, rect.Height - top - button); + } + + public static RectangleF InflatedRetangle(this RectangleF rect, float value) => rect.InflatedRetangle(value, value, value); + + public static RectangleF ToPointMeasure(this RectangleF r) => new RectangleF(r.X.ToPoint(), r.Y.ToPoint(), r.Width.ToPoint(), r.Height.ToPoint()); + + public static RectangleF CutTop(this RectangleF r, float height) => new RectangleF(r.X, r.Y + height, r.Width, r.Height - height); + public static RectangleF CutBottom(this RectangleF r, float height) => new RectangleF(r.X, r.Y, r.Width, r.Height - height); + public static RectangleF CutLeft(this RectangleF r, float width) => new RectangleF(r.X + width, r.Y, r.Width - width, r.Height); + + public static PointF ToPointMeasure(this PointF r) => new PointF(r.X.ToPoint(), r.Y.ToPoint()); + + public static StringBuilder AppendChaveValor(this StringBuilder sb, string chave, string valor) + { + if (sb.Length > 0) sb.Append(' '); + return sb.Append(chave).Append(": ").Append(valor); + } + + public static XAlignmentEnum ToPdfClownAlignment(this AlinhamentoHorizontal ah) + { + switch (ah) + { + case AlinhamentoHorizontal.Esquerda: + return XAlignmentEnum.Left; + case AlinhamentoHorizontal.Centro: + return XAlignmentEnum.Center; + case AlinhamentoHorizontal.Direita: + return XAlignmentEnum.Right; + } + + throw new InvalidOperationException(); + } + + public static YAlignmentEnum ToPdfClownAlignment(this AlinhamentoVertical av) + { + switch (av) + { + case AlinhamentoVertical.Topo: + return YAlignmentEnum.Top; + case AlinhamentoVertical.Centro: + return YAlignmentEnum.Middle; + case AlinhamentoVertical.Base: + return YAlignmentEnum.Bottom; + } + + throw new InvalidOperationException(); + } + + + + } +} diff --git a/NFe.Danfe.PdfClown/Tools/Formatador.cs b/NFe.Danfe.PdfClown/Tools/Formatador.cs new file mode 100644 index 000000000..3202d715e --- /dev/null +++ b/NFe.Danfe.PdfClown/Tools/Formatador.cs @@ -0,0 +1,223 @@ +using System.Globalization; +using System.Text.RegularExpressions; + +namespace NFe.Danfe.PdfClown.Tools +{ + /// + /// Classe que ajuda na formatação de dados. + /// + public static class Formatador + { + /// + /// Cultura pt-BR + /// + public static readonly CultureInfo Cultura = new CultureInfo(1046); + + static Formatador() + { + Cultura.NumberFormat.CurrencyPositivePattern = 2; + Cultura.NumberFormat.CurrencyNegativePattern = 9; + } + + public const string FormatoNumeroNF = @"000\.000\.000"; + + public const string CEP = @"^(\d{5})\-?(\d{3})$"; + public const string CNPJ = @"^([0-9A-Z]{2})\.?([0-9A-Z]{3})\.?([0-9A-Z]{3})\/?([0-9A-Z]{4})\-?([0-9]{2})$"; + public const string CPF = @"^(\d{3})\.?(\d{3})\.?(\d{3})\-?(\d{2})$"; + public const string Telefone = @"^\(?(\d{2})\)?\s*(\d{4,5})\s*\-?\s*(\d{4})$"; + + public const string FormatoMoeda = "#,0.00##"; + public const string FormatoNumero = "#,0.####"; + + private static string InternalRegexReplace(string input, string pattern, string replacement) + { + string result = input; + + if (!string.IsNullOrWhiteSpace(input)) + { + input = input.Trim(); + + Regex rgx = new Regex(pattern); + + if (rgx.IsMatch(input)) + { + result = rgx.Replace(input, replacement); + } + } + + return result; + } + + /// + /// Formata a linha 1 do endereço. Ex. Floriano Peixoto, 512 + /// + /// + /// + /// + public static string FormatarEnderecoLinha1(string endereco, int? numero, string complemento = null) + { + string sNumero = numero.HasValue ? numero.Value.ToString() : null; + return FormatarEnderecoLinha1(endereco, sNumero, complemento); + } + + /// + /// Formata a linha 1 do endereço. Ex. Floriano Peixoto, 512 + /// + /// + /// + /// + public static string FormatarEnderecoLinha1(string endereco, string numero = null, string complemento = null) + { + string linha1 = string.Empty; + + if (!string.IsNullOrWhiteSpace(endereco)) + { + linha1 = string.Format("{0}, {1}", endereco.Trim(), string.IsNullOrWhiteSpace(numero) ? "S/N" : numero.Trim()); + + if (!string.IsNullOrWhiteSpace(complemento)) + { + linha1 += " - " + complemento.Trim(); + } + } + + return linha1; + } + + /// + /// Formata um CEP + /// + /// CEP + /// CEP Formatado ou vazio caso cep inválido + public static string FormatarCEP(string cep) + { + return InternalRegexReplace(cep, CEP, "$1-$2"); + } + + public static string FormatarCEP(int cep) + { + if (cep < 0) + { + throw new ArgumentOutOfRangeException("cep", "o cep não pode ser negativo."); + } + + return FormatarCEP(cep.ToString().PadLeft(8, '0')); + } + + public static string FormatarCnpj(string cnpj) + { + return InternalRegexReplace(cnpj, CNPJ, "$1.$2.$3/$4-$5"); + } + + public static string FormatarCpf(string cpf) + { + return InternalRegexReplace(cpf, CPF, "$1.$2.$3-$4"); + } + + /// + /// Formata um número de documento + /// + /// + /// + public static string FormatarCpfCnpj(string cpfCnpj) + { + string result; + + if (!string.IsNullOrWhiteSpace(cpfCnpj)) + { + result = cpfCnpj.Trim(); + + if (Regex.IsMatch(result, CPF)) + { + result = FormatarCpf(result); + } + else if (Regex.IsMatch(result, CNPJ)) + { + result = FormatarCnpj(result); + } + } + else + { + result = string.Empty; + } + + return result; + } + + /// + /// Formata uma string de município com a uf, ex Caçapava do Sul - RS + /// + /// Município + /// UF + /// Separador + /// String formatada. + public static string FormatarMunicipioUf(string municipio, string uf, string separador = " - ") + { + string result = ""; + + if (!string.IsNullOrWhiteSpace(municipio) && !string.IsNullOrWhiteSpace(uf)) + { + result = string.Format("{0}{1}{2}", municipio.Trim(), separador, uf.Trim()); + } + else if (!string.IsNullOrWhiteSpace(municipio)) + { + result = municipio.Trim(); + } + else if (!string.IsNullOrWhiteSpace(uf)) + { + result = uf.Trim(); + } + + return result; + } + + public static string FormatarTelefone(string telefone) + { + return InternalRegexReplace(telefone, Telefone, "($1) $2-$3"); + } + + public static string FormatarChaveAcesso(string chaveAcesso) + { + return Regex.Replace(chaveAcesso, ".{4}", "$0 ").TrimEnd(); + } + + public static string Formatar(this Double number, string formato = FormatoMoeda) + { + return number.ToString(formato, Cultura); + } + + public static string Formatar(this int number, string formato = FormatoMoeda) + { + return number.ToString(formato, Cultura); + } + + public static string Formatar(this int? number, string formato = FormatoMoeda) + { + return number.HasValue ? number.Value.Formatar(formato) : string.Empty; + } + + public static string Formatar(this Double? number, string formato = FormatoMoeda) + { + return number.HasValue ? number.Value.Formatar(formato) : string.Empty; + } + + public static string FormatarMoeda(this Double? number) + { + return number.HasValue ? number.Value.ToString("C", Cultura) : string.Empty; + } + + public static string Formatar(this DateTime? dateTime) + { + return dateTime.HasValue ? dateTime.Value.ToString("dd/MM/yyyy") : string.Empty; + } + + public static string FormatarDataHora(this DateTime? dateTime) + { + return dateTime.HasValue ? dateTime.Value.ToString("dd/MM/yyyy hh:mm:ss") : string.Empty; + } + + public static string Formatar(this TimeSpan? timeSpan) + { + return timeSpan.HasValue ? timeSpan.Value.ToString() : string.Empty; + } + } +} diff --git a/NFe.Danfe.PdfClown/Tools/Utils.cs b/NFe.Danfe.PdfClown/Tools/Utils.cs new file mode 100644 index 000000000..88b6d4a7a --- /dev/null +++ b/NFe.Danfe.PdfClown/Tools/Utils.cs @@ -0,0 +1,34 @@ +using System.Text.RegularExpressions; + +namespace NFe.Danfe.PdfClown.Tools +{ + public static class Utils + { + /// + /// Verifica se uma string contém outra string no formato chave: valor. + /// + public static bool StringContemChaveValor(string str, string chave, string valor) + { + if (string.IsNullOrWhiteSpace(chave)) throw new ArgumentException(nameof(chave)); + if (string.IsNullOrWhiteSpace(str)) return false; + + return Regex.IsMatch(str, $@"({chave}):?\s*{valor}", RegexOptions.IgnoreCase); + } + + public static string TipoDFeDeChaveAcesso(string chaveAcesso) + { + if (string.IsNullOrWhiteSpace(chaveAcesso)) throw new ArgumentException(nameof(chaveAcesso)); + + if (chaveAcesso.Length == 44) + { + string f = chaveAcesso.Substring(20, 2); + + if (f == "55") return "NF-e"; + else if (f == "57") return "CT-e"; + else if (f == "65") return "NFC-e"; + } + + return "DF-e Desconhecido"; + } + } +} diff --git a/NFe.Danfe.QuestPdf/Fontes/Arial.ttf b/NFe.Danfe.QuestPdf/Fontes/Arial.ttf new file mode 100644 index 000000000..7ff88f228 Binary files /dev/null and b/NFe.Danfe.QuestPdf/Fontes/Arial.ttf differ diff --git a/NFe.Danfe.QuestPdf/ImpressaoEventoNfe/EventoNfeDocument.cs b/NFe.Danfe.QuestPdf/ImpressaoEventoNfe/EventoNfeDocument.cs new file mode 100644 index 000000000..c85ee1c88 --- /dev/null +++ b/NFe.Danfe.QuestPdf/ImpressaoEventoNfe/EventoNfeDocument.cs @@ -0,0 +1,656 @@ +using BarcodeStandard; +using DFe.Utils; +using NFe.Classes; +using NFe.Classes.Servicos.Consulta; +using QuestPDF.Fluent; +using QuestPDF.Helpers; +using QuestPDF.Infrastructure; +using System.Text; +using System.Text.RegularExpressions; + +namespace NFe.Danfe.QuestPdf.ImpressaoEventoNfe; + +public class EventoNfeDocument : IDocument +{ + private nfeProc _nfeProc; + private NFe.Classes.NFe _nfe; + private procEventoNFe _procEventoNFe; + private readonly byte[]? _logo; + private static string _fontFamily = "Times New Roman"; + + public EventoNfeDocument(string xmlNfe, string xmlCce, byte[]? logo) + { + _logo = logo; + CarregarXmlNfe(xmlNfe); + CarregarXmlCce(xmlCce); + } + + public void Compose(IDocumentContainer container) + { + container + .Page(page => + { + page.Size(PageSizes.A4); + page.Margin(20); + + page.Header().Element(Cabecalho); + + page.Content().Element(Conteudo); + + page.Footer().Element(Rodape); + }); + } + + private void Cabecalho(IContainer container) + { + container.Column(column => + { + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignCenter().Text(_procEventoNFe.evento.infEvento.detEvento.descEvento).FontSize(14).FontFamily(_fontFamily).Bold(); + c.Item().AlignCenter().Text("Não possui valor fiscal. Simples representação do evento indicado abaixo.\r\nCONSULTE A AUTENTICIDADE NO SITE DA SEFAZ AUTORIZADORA").FontSize(10).FontFamily(_fontFamily); + }); + }); + + column.Item().PaddingTop(10); + + column.Item().Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignLeft().Text("NOTA FISCAL ELETRÔNICA - NF-e").FontSize(10).FontFamily(_fontFamily) + .Bold(); + }); + }); + + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Table(t => + { + t.ColumnsDefinition(cd => + { + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + }); + + + t.Cell().Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("MODELO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_nfe.infNFe.ide.mod).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("SÉRIE").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_nfe.infNFe.ide.serie.ToString("D3")).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("NÚMERO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_nfe.infNFe.ide.nNF.ToString("D9")).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("MÊS/ANO DA EMISSÃO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_nfe.infNFe.ide.dhEmi.ToString("MM/yyyy")).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + var b = new Barcode(); + + b.Encode(BarcodeStandard.Type.Code128, _nfe.infNFe.Id.Substring(3), 300, 30); + + t.Cell().ColumnSpan(6).RowSpan(2).Border(0.5f).Padding(5).Image(b.GetImageData(SaveTypes.Png)); + + t.Cell().ColumnSpan(6).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("CHAVE DE ACESSO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_nfe.infNFe.Id.Substring(3)).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + }); + }); + + column.Item().PaddingTop(10); + + column.Item().Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignLeft().Text("CARTA DE CORREÇÃO ELETRÔNICA").FontSize(10).FontFamily(_fontFamily) + .Bold(); + }); + }); + + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Table(t => + { + t.ColumnsDefinition(cd => + { + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + }); + + + t.Cell().Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("ÓRGÃO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_procEventoNFe.evento.infEvento.cOrgao).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(9).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("AMBIENTE").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_procEventoNFe.evento.infEvento.tpAmb).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("DATA E HORÁRIO DO EVENTO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_procEventoNFe.evento.infEvento.dhEvento.ToString("G")).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("EVENTO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_procEventoNFe.evento.infEvento.tpEvento).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(6).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("DESCRIÇÃO DO EVENTO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_procEventoNFe.evento.infEvento.detEvento.descEvento).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("SEQUÊNCIA DO EVENTO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignRight().AlignTop().PaddingRight(2).Text(_procEventoNFe.evento.infEvento.nSeqEvento).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("VERSÃO DO EVENTO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignRight().AlignTop().PaddingRight(2).Text(_procEventoNFe.evento.infEvento.verEvento).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(6).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("STATUS").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text($"{_procEventoNFe.retEvento.infEvento.cStat} - {_procEventoNFe.retEvento.infEvento.xMotivo}").FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("PROTOCOLO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text($"{_procEventoNFe.retEvento.infEvento.nProt}").FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("DATA E HORÁRIO DO REGISTRO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text($"{_procEventoNFe.retEvento.infEvento.dhRegEvento:G}").FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + }); + }); + }); + } + + private void Conteudo(IContainer container) + { + container.Column(column => + { + column.Item().PaddingTop(10); + + column.Item().Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignLeft().Text("EMITENTE").FontSize(10).FontFamily(_fontFamily) + .Bold(); + }); + }); + + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Table(t => + { + t.ColumnsDefinition(cd => + { + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + }); + + + t.Cell().ColumnSpan(9).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("NOME / RAZÃO SOCIAL").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.emit.xNome).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("CNPJ / CPF").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.emit.CNPJ ?? _nfe.infNFe.emit.CPF).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(6).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("ENDEREÇO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text($"{_nfe.infNFe.emit.enderEmit.xLgr} {_nfe.infNFe.emit.enderEmit.nro} {_nfe.infNFe.emit.enderEmit.xCpl}").FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(4).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("BAIRRO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.emit.enderEmit.xBairro).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("CEP").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.emit.enderEmit.CEP).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(5).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("MUNICÍPIO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.emit.enderEmit.xMun).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("ESTADO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_nfe.infNFe.emit.enderEmit.UF).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + var temTelefone = _nfe.infNFe.emit.enderEmit.fone.HasValue; + + tx.Item().Border(temTelefone ? 0.5f : 0).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("FONE / FAX").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.emit.enderEmit.fone).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("INSCRIÇÃO ESTADUAL").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.emit.IE).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + }); + }); + + column.Item().PaddingTop(10); + + column.Item().Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignLeft().Text("DESTINATÁRIO / REMETENTE").FontSize(10).FontFamily(_fontFamily) + .Bold(); + }); + }); + + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Table(t => + { + t.ColumnsDefinition(cd => + { + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + }); + + + t.Cell().ColumnSpan(9).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("NOME / RAZÃO SOCIAL").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.dest.xNome).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("CNPJ / CPF").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.dest.CNPJ ?? _nfe.infNFe.dest.CPF).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(6).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("ENDEREÇO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text($"{_nfe.infNFe.dest.enderDest.xLgr} {_nfe.infNFe.dest.enderDest.nro} {_nfe.infNFe.dest.enderDest.xCpl}").FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(4).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("BAIRRO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.dest.enderDest.xBairro).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(2).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("CEP").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.dest.enderDest.CEP).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(5).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("MUNICÍPIO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.dest.enderDest.xMun).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("ESTADO").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignCenter().AlignTop().Text(_nfe.infNFe.dest.enderDest.UF).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + var temTelefone = _nfe.infNFe.dest.enderDest.fone.HasValue; + + tx.Item().Border(temTelefone ? 0.5f : 0).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("FONE / FAX").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.dest.enderDest.fone).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + + t.Cell().ColumnSpan(3).Column(tx => + { + tx.Item().Border(0.5f).Column(txc => + { + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text("INSCRIÇÃO ESTADUAL").FontSize(5).FontFamily(_fontFamily); + txc.Item().AlignLeft().AlignTop().PaddingLeft(2).Text(_nfe.infNFe.dest.IE).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + }); + }); + + column.Item().PaddingTop(10); + + column.Item().Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignLeft().Text("CONDIÇÕES DE USO").FontSize(10).FontFamily(_fontFamily) + .Bold(); + }); + }); + + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Table(t => + { + t.ColumnsDefinition(cd => + { + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + }); + + + t.Cell().RowSpan(8).ColumnSpan(12).Column(tx => + { + tx.Item().Border(0.5f).PaddingLeft(2).Text(Regex.Replace(_procEventoNFe.evento.infEvento.detEvento.xCondUso.Replace("\r", string.Empty).Replace("\n", ""), @"\s+", " ")).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + }); + + column.Item().PaddingTop(10); + + column.Item().Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignLeft().Text(_procEventoNFe.evento.infEvento.detEvento.descEvento).FontSize(10).FontFamily(_fontFamily) + .Bold(); + }); + }); + + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Table(t => + { + t.ColumnsDefinition(cd => + { + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + cd.RelativeColumn(); + }); + + + t.Cell().RowSpan(8).ColumnSpan(12).Column(tx => + { + var texto = new StringBuilder(); + + if (_procEventoNFe.evento.infEvento.detEvento.xJust != null) + { + texto.Append(Regex.Replace( + _procEventoNFe.evento.infEvento.detEvento.xJust.Replace("\r", string.Empty) + .Replace("\n", ""), @"\s+", " ")); + + texto.Append("\n"); + } + + if (_procEventoNFe.evento.infEvento.detEvento.xCorrecao != null) + { + texto.Append(Regex.Replace( + _procEventoNFe.evento.infEvento.detEvento.xCorrecao.Replace("\r", string.Empty) + .Replace("\n", ""), @"\s+", " ")); + } + + tx.Item().Border(0.5f).PaddingLeft(2).Text(texto).FontSize(9).FontFamily(_fontFamily).Bold(); + }); + }); + }); + }); + } + + private void Rodape(IContainer container) + { + container.Column(column => + { + column.Item().Border(0.5f).Row(x => + { + x.RelativeItem().Column(c => + { + c.Item().AlignLeft().Text($"Data e hora da impressão {DateTime.UtcNow:G}").FontSize(6).FontFamily(_fontFamily); + }); + }); + }); + } + + public DocumentMetadata GetMetadata() => DocumentMetadata.Default; + + private void CarregarXmlNfe(string xmlNfe) + { + try + { + _nfeProc = FuncoesXml.XmlStringParaClasse(xmlNfe); + _nfe = _nfeProc.NFe; + } + catch (Exception) + { + try + { + NFe.Classes.NFe nfe = FuncoesXml.XmlStringParaClasse(xmlNfe); + _nfe = nfe; + } + catch (Exception) + { + throw new ArgumentException( + "Ei! Verifique se seu xml da NF-e ou NF-e Proc não está correto, pois identificamos uma falha ao tentar carregar ele."); + } + } + } + + private void CarregarXmlCce(string xmlCce) + { + try + { + _procEventoNFe = FuncoesXml.XmlStringParaClasse(xmlCce); + } + catch (Exception) + { + throw new ArgumentException( + "Ei! Verifique se seu xml da Carta Correção não está correto, pois identificamos uma falha ao tentar carregar ele."); + } + } + + DocumentSettings IDocument.GetSettings() => DocumentSettings.Default; +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/ImpressaoNfce/DanfeNfceDocument.cs b/NFe.Danfe.QuestPdf/ImpressaoNfce/DanfeNfceDocument.cs new file mode 100644 index 000000000..30f24fa19 --- /dev/null +++ b/NFe.Danfe.QuestPdf/ImpressaoNfce/DanfeNfceDocument.cs @@ -0,0 +1,630 @@ +using DFe.Classes.Flags; +using DFe.Utils; +using NFe.Classes; +using NFe.Classes.Informacoes.Destinatario; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Informacoes.Pagamento; +using NFe.Utils; +using NFe.Utils.InformacoesSuplementares; +using QuestPDF.Fluent; +using QuestPDF.Helpers; +using QuestPDF.Infrastructure; +using SkiaSharp; +using SkiaSharp.QrCode.Image; +using System.Text; + +namespace NFe.Danfe.QuestPdf.ImpressaoNfce; + +public class DanfeNfceDocument : IDocument +{ + private readonly byte[]? _logo; + private nfeProc? _nfeProc; + private NFe.Classes.NFe? _nfe; + private float _tamanhoImpressao = 300f; + private float _tamanhoFontePadrao; + + public DanfeNfceDocument(string xml, byte[]? logo) + { + _logo = logo; + CarregarXml(xml); + } + + public void TamanhoImpressao(TamanhoImpressao tamanhoImpressao) + { + switch (tamanhoImpressao) + { + case ImpressaoNfce.TamanhoImpressao.Impressao80: + _tamanhoImpressao = 8f; + _tamanhoFontePadrao = 8f; + break; + case ImpressaoNfce.TamanhoImpressao.Impressao72: + _tamanhoImpressao = 7.2f; + _tamanhoFontePadrao = 8f; + break; + case ImpressaoNfce.TamanhoImpressao.Impressao50: + _tamanhoImpressao = 5f; + _tamanhoFontePadrao = 5f; + break; + default: + throw new ArgumentOutOfRangeException(nameof(tamanhoImpressao), tamanhoImpressao, null); + } + } + + public DocumentMetadata GetMetadata() => DocumentMetadata.Default; + DocumentSettings IDocument.GetSettings() => DocumentSettings.Default; + + public void Compose(IDocumentContainer container) + { + container + .Page(page => + { + page.MarginLeft(0.4f, Unit.Centimetre); + page.MarginRight(0.8f, Unit.Centimetre); + page.MarginTop(0); + page.MarginBottom(0); + page.ContinuousSize(_tamanhoImpressao, Unit.Centimetre); + + page.Header().Element(Cabecalho); + + page.Content().Element(Conteudo); + + page.Footer().Element(Rodape); + }); + } + + private void Cabecalho(IContainer container) + { + container.Row(row => + { + row.RelativeItem().Column(column => + { + if (_logo != null) + { + column.Item().AlignCenter().MaxWidth(60).MaxHeight(60).Image(_logo); + } + column.Item().AlignCenter().Text(_nfe.infNFe.emit.xFant).FontSize(_tamanhoFontePadrao + 2).SemiBold(); + column.Item().AlignCenter().Text(_nfe.infNFe.emit.xNome).FontSize(_tamanhoFontePadrao + 2); + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text($"CNPJ: {_nfe.infNFe.emit.CNPJ}").FontSize(_tamanhoFontePadrao); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text($"IE: {_nfe.infNFe.emit.IE}").FontSize(_tamanhoFontePadrao); + }); + }); + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text($"Endereço: {EnderecoEmitente()}").FontSize(_tamanhoFontePadrao).Italic(); + }); + }); + + if (_nfe.infNFe.ide.tpAmb == TipoAmbiente.Homologacao) + { + column.Item().LineHorizontal(1); + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().AlignCenter().Text("EMITIDO EM AMBIENTE DE HOMOLOGAÇÃO SEM VALOR FISCAL").FontSize(_tamanhoFontePadrao).SemiBold().Underline(); + }); + }); + column.Item().LineHorizontal(1); + } + + column.Item().LineHorizontal(1); + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().AlignCenter().Text("DANFE NFC-e").FontSize(_tamanhoFontePadrao).ExtraBlack(); + c.Item().AlignCenter().Text("Documento Auxiliar Da Nota Fiscal de Consumidor Eletrônica").FontSize(_tamanhoFontePadrao - 1); + c.Item().AlignCenter().Text("Não permite aproveitamento de crédito do ICMS").FontSize(_tamanhoFontePadrao - 1); + }); + }); + column.Item().LineHorizontal(1); + }); + }); + } + + private void Conteudo(IContainer container) + { + container.Table(t => + { + t.ColumnsDefinition(c => + { + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + c.RelativeColumn(); + }); + + t.Header(h => + { + h.Cell().Element(CellStyle).Text("Num.").ExtraBlack(); + h.Cell().ColumnSpan(11).Element(CellStyle).Text("Descrição").ExtraBlack(); + h.Cell().RowSpan(1); + h.Cell().ColumnSpan(2).Element(CellStyle).AlignRight().Text("Qtde Un ").ExtraBlack(); + h.Cell().ColumnSpan(1).Element(CellStyle).AlignCenter().Text("X").ExtraBlack(); + h.Cell().ColumnSpan(4).Element(CellStyle).AlignRight().Text("Valor Unitário").ExtraBlack(); + h.Cell().ColumnSpan(1).Element(CellStyle).AlignCenter().Text("=").ExtraBlack(); + h.Cell().ColumnSpan(3).Element(CellStyle).AlignRight().AlignRight().Text("Valor Total").ExtraBlack(); + h.Cell().RowSpan(1); + + IContainer CellStyle(IContainer container) + { + return container.DefaultTextStyle(x => + x.SemiBold() + .FontSize(_tamanhoFontePadrao - 0.5f) + ) + .BorderColor(Colors.Black); + } + }); + + t.Cell().ColumnSpan(12).LineHorizontal(1).LineColor(Colors.Grey.Medium); + + foreach (var det in _nfe.infNFe.det) + { + t.Cell().Text(det.nItem.ToString("D3")).FontSize(_tamanhoFontePadrao - 0.5f); + t.Cell().ColumnSpan(11).Text(det.prod.xProd).FontSize(_tamanhoFontePadrao - 0.5f); + t.Cell().RowSpan(1); + t.Cell().ColumnSpan(2).AlignRight().Text(det.prod.qCom.ToString("N3")).FontSize(_tamanhoFontePadrao - 0.5f); + t.Cell().ColumnSpan(1).AlignCenter(); + t.Cell().ColumnSpan(4).AlignRight().Text(det.prod.vUnCom.ToString("N2")).FontSize(_tamanhoFontePadrao - 0.5f); + t.Cell().ColumnSpan(1).AlignCenter(); + t.Cell().ColumnSpan(3).AlignRight().Text(det.prod.vProd.ToString("N2")).FontSize(_tamanhoFontePadrao - 0.5f); + t.Cell().ColumnSpan(12).RowSpan(1).Element(CellStyle); + } + + t.Footer(footer => + { + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + footer.Cell().LineHorizontal(1); + }); + static IContainer CellStyle(IContainer container) + { + return container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(0); + } + }); + } + + private void Rodape(IContainer container) + { + container.Row(row => + { + row.RelativeItem().Column(column => + { + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text("Quantidade de itens").FontSize(_tamanhoFontePadrao); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text($"{_nfe.infNFe.det.Count}").FontSize(_tamanhoFontePadrao); + }); + }); + + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text("Total Desconto").FontSize(_tamanhoFontePadrao); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text($"R$ {_nfe.infNFe.total.ICMSTot.vDesc:N2}").FontSize(_tamanhoFontePadrao); + }); + }); + + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text("Total Outros").FontSize(_tamanhoFontePadrao); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text($"R$ {_nfe.infNFe.total.ICMSTot.vOutro:N2}").FontSize(_tamanhoFontePadrao); + }); + }); + + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text("Total Cupom").FontSize(_tamanhoFontePadrao).ExtraBlack(); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text($"R$ {_nfe.infNFe.total.ICMSTot.vNF:N2}").FontSize(_tamanhoFontePadrao).ExtraBlack(); + }); + }); + + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text("Tributos Totais Incidentes (Lei Federal 12.741/2012)").FontSize(_tamanhoFontePadrao); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text($"R$ {_nfe.infNFe.total.ICMSTot.vTotTrib ?? 0:N2}").FontSize(_tamanhoFontePadrao); + }); + }); + + column.Item().LineHorizontal(1); + + column.Item().Row(r => + { + + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text("Forma Pagamento").FontSize(_tamanhoFontePadrao); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text("Valor Pago").FontSize(_tamanhoFontePadrao); + }); + }); + + foreach (pag pag in _nfe.infNFe.pag) + { + if (pag.detPag != null) + { + foreach (var detPag in pag.detPag) + { + column.Item().Row(r => + { + + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text(ObtemDescricao(detPag.tPag)).FontSize(_tamanhoFontePadrao); + }); + + r.RelativeItem().AlignRight().Column(c => + { + c.Item().Text($"{detPag.vPag:N2}").FontSize(_tamanhoFontePadrao); + }); + }); + } + } + } + + column.Item().LineHorizontal(1); + + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().Text("Consulte pela chave de acesso em:").FontSize(_tamanhoFontePadrao); + }); + }); + + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().Text(string.IsNullOrEmpty(_nfe.infNFeSupl.urlChave) ? _nfe.infNFeSupl.ObterUrlConsulta(_nfe, VersaoQrCode.QrCodeVersao2) : _nfe.infNFeSupl.urlChave).FontSize(_tamanhoFontePadrao); + }); + }); + + column.Item().LineHorizontal(1); + + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().AlignCenter().Text(_nfe.infNFe.Id.Substring(3)).FontSize(_tamanhoFontePadrao); + }); + }); + + column.Item().LineHorizontal(1); + + if (DeveExibirMensagemContingencia()) + { + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().AlignCenter().Text("EMITIDA EM CONTINGÊNCIA").FontSize(_tamanhoFontePadrao).ExtraBlack(); + }); + }); + + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().AlignCenter().Text("Pendente de autorização").FontSize(_tamanhoFontePadrao).ExtraBlack(); + }); + }); + + column.Item().LineHorizontal(1); + } + + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().AlignCenter().Text(MontaMensagemConsumidor()).FontSize(_tamanhoFontePadrao).ExtraBlack(); + }); + }); + + column.Item().LineHorizontal(1); + + column.Item().Row(r => + { + r.RelativeItem().Table(t => + { + t.ColumnsDefinition(c => + { + c.RelativeColumn(2); + c.RelativeColumn(3); + }); + + t.Cell().AlignCenter().Image(ImagemQrCode()); + t.Cell().AlignLeft().Column(c => + { + if (_nfe?.infNFe?.ide != null) + { + c.Item().Text($"Série: {_nfe.infNFe.ide.serie:D3}").FontSize(_tamanhoFontePadrao); + c.Item().Text($"Número: {_nfe.infNFe.ide.nNF:D9}").FontSize(_tamanhoFontePadrao); + c.Item().Text($"Emissão: {_nfe.infNFe.ide.dhEmi:G}").FontSize(_tamanhoFontePadrao); + } + + if (DeveExibirDadosProtocolo()) + { + c.Item().Text($"Protocolo: {_nfeProc!.protNFe!.infProt.nProt}").FontSize(_tamanhoFontePadrao); + c.Item().Text($"Autorização: {_nfeProc!.protNFe!.infProt.dhRecbto:G}").FontSize(_tamanhoFontePadrao); + } + }); + }); + }); + + column.Item().LineHorizontal(1); + + if (_nfe.infNFe.infAdic != null && !string.IsNullOrEmpty(_nfe.infNFe.infAdic.infCpl)) + { + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text("Informações Adicionais").FontSize(_tamanhoFontePadrao).ExtraBlack(); + }); + }); + column.Item().Row(r => + { + r.RelativeItem().AlignLeft().Column(c => + { + c.Item().Text(_nfe.infNFe.infAdic.infCpl).FontSize(_tamanhoFontePadrao); + }); + }); + } + + column.Item().Row(r => + { + r.RelativeItem().AlignCenter().Column(c => + { + c.Item().AlignCenter().Text("Nota Fiscal de Consumidor Eletrônica").FontSize(_tamanhoFontePadrao).ExtraBlack(); + }); + }); + + column.Item().LineHorizontal(1); + }); + }); + } + + private byte[] ImagemQrCode() + { + using var memoryStream = new MemoryStream(); + var qrCode = new QrCode(ObtemUrlQrCode(), new Vector2Slim(256, 256), SKEncodedImageFormat.Png); + qrCode.GenerateImage(memoryStream); + + var qrCodeBytes = memoryStream.ToArray(); + + return qrCodeBytes; + } + + private string ObtemUrlQrCode() + { + var urlQrCode = _nfe.infNFeSupl.qrCode; + + return urlQrCode; + } + + private string MontaMensagemConsumidor() + { + var dest = _nfe.infNFe.dest; + + var mensagem = new StringBuilder("CONSUMIDOR "); + + if (dest == null || string.IsNullOrEmpty(dest.CPF) && string.IsNullOrEmpty(dest.CNPJ)) + { + mensagem.Append("NÃO IDENTIFICADO"); + return mensagem.ToString(); + } + + if (!string.IsNullOrEmpty(dest.idEstrangeiro)) + { + mensagem.Append("Id "); + mensagem.Append(dest.idEstrangeiro); + } + + + if (!string.IsNullOrEmpty(dest.CPF)) + { + mensagem.Append("CPF "); + mensagem.Append(dest.CPF); + } + + if (!string.IsNullOrEmpty(dest.CNPJ)) + { + mensagem.Append("CNPJ "); + mensagem.Append(dest.CNPJ); + } + + if (!string.IsNullOrEmpty(dest.xNome)) + { + mensagem.Append(" "); + mensagem.Append(dest.xNome); + } + + enderDest enderecoDest = dest.enderDest; + + if (enderecoDest == null) return mensagem.ToString().Replace(", ,", ", "); + + string rua = string.Empty; + if (!string.IsNullOrEmpty(enderecoDest.xLgr)) + rua = enderecoDest.xLgr; + + string numero = "S/N"; + if (!string.IsNullOrEmpty(enderecoDest.nro)) + numero = enderecoDest.nro; + + var bairro = string.Empty; + if (!string.IsNullOrEmpty(enderecoDest.xBairro)) + bairro = enderecoDest.xBairro; + + var cidade = string.Empty; + if (!string.IsNullOrEmpty(enderecoDest.xMun)) + bairro = enderecoDest.xMun; + + var siglaUf = string.Empty; + if (!string.IsNullOrEmpty(enderecoDest.UF)) + bairro = enderecoDest.UF; + + if (string.IsNullOrEmpty(rua)) return mensagem.ToString(); + mensagem.Append(" - "); + mensagem.Append(rua); + mensagem.Append(", "); + mensagem.Append(numero); + mensagem.Append(", "); + mensagem.Append(bairro); + mensagem.Append(", "); + mensagem.Append(cidade); + mensagem.Append(" - "); + mensagem.Append(siglaUf); + + return mensagem.ToString().Replace(", ,", ", "); + } + + private string EnderecoEmitente() + { + var enderEmit = _nfe.infNFe.emit.enderEmit; + var foneEmit = string.Empty; + + if (enderEmit.fone != null) + { + StringBuilder fone = new StringBuilder(" - FONE: "); + fone.Append(enderEmit.fone); + foneEmit = fone.ToString(); + } + + var enderecoEmitenteBuilder = new StringBuilder(); + enderecoEmitenteBuilder.Append(enderEmit.xLgr); + enderecoEmitenteBuilder.Append(" "); + + if (string.IsNullOrEmpty(enderEmit.nro)) + { + enderecoEmitenteBuilder.Append("S/N, "); + } + + if (!string.IsNullOrEmpty(enderEmit.nro)) + { + enderecoEmitenteBuilder.Append(enderEmit.nro); + enderecoEmitenteBuilder.Append(", "); + } + + enderecoEmitenteBuilder.Append(enderEmit.xBairro); + enderecoEmitenteBuilder.Append(", "); + enderecoEmitenteBuilder.Append(enderEmit.xMun); + enderecoEmitenteBuilder.Append(", "); + enderecoEmitenteBuilder.Append(enderEmit.UF); + if (enderEmit.CEP != null) + { + enderecoEmitenteBuilder.Append(" - CEP: "); + enderecoEmitenteBuilder.Append(enderEmit.CEP); + } + enderecoEmitenteBuilder.Append(foneEmit); + + return enderecoEmitenteBuilder.ToString(); + } + + private void CarregarXml(string xml) + { + try + { + _nfeProc = null; + _nfe = null; + _nfeProc = FuncoesXml.XmlStringParaClasse(xml); + _nfe = _nfeProc.NFe; + } + catch (Exception) + { + try + { + NFe.Classes.NFe nfe = FuncoesXml.XmlStringParaClasse(xml); + _nfe = nfe; + _nfeProc = null; + } + catch (Exception) + { + throw new ArgumentException( + "Ei! Verifique se seu xml está correto, pois identificamos uma falha ao tentar carregar ele."); + } + } + } + + private bool DeveExibirMensagemContingencia() + { + return _nfe?.infNFe?.ide?.tpEmis == TipoEmissao.teOffLine && _nfeProc == null; + } + + private bool DeveExibirDadosProtocolo() + { + return _nfeProc?.protNFe?.infProt != null && !DeveExibirMensagemContingencia(); + } + + private string ObtemDescricao(FormaPagamento? formaPagamento) + { + var existeEnum = Enum + .GetValues(typeof(FormaPagamento)) + .Cast() + .Any(p => formaPagamento.HasValue && p.Equals(formaPagamento)); + + if (existeEnum) + return formaPagamento.Descricao(); + else + throw new ArgumentException("Forma pagamento inválida"); + } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/ImpressaoNfce/TamanhoImpressao.cs b/NFe.Danfe.QuestPdf/ImpressaoNfce/TamanhoImpressao.cs new file mode 100644 index 000000000..0585aca52 --- /dev/null +++ b/NFe.Danfe.QuestPdf/ImpressaoNfce/TamanhoImpressao.cs @@ -0,0 +1,15 @@ +using System.ComponentModel; + +namespace NFe.Danfe.QuestPdf.ImpressaoNfce; + +public enum TamanhoImpressao +{ + [Description("Impressão 80mm")] + Impressao80 = 1, + + [Description("Impressão 72mm")] + Impressao72 = 2, + + [Description("Impressão 50mm")] + Impressao50 = 3 +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/EmpresaModel.cs b/NFe.Danfe.QuestPdf/Models/EmpresaModel.cs new file mode 100644 index 000000000..f4d954c55 --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/EmpresaModel.cs @@ -0,0 +1,7 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class EmpresaModel +{ + public string RazaoSocial { get; set; } + public string Cnpj { get; set; } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/NfceInutilizacaoModel.cs b/NFe.Danfe.QuestPdf/Models/NfceInutilizacaoModel.cs new file mode 100644 index 000000000..53f0e81c6 --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/NfceInutilizacaoModel.cs @@ -0,0 +1,10 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class NfceInutilizacaoModel +{ + public DateTime InutilizacaoEm { get; set; } + public string DescricaoModelo { get; set; } + public int Serie { get; set; } + public int NumeroInicial { get; set; } + public int NumeroFinal { get; set; } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/NfceResumidaModel.cs b/NFe.Danfe.QuestPdf/Models/NfceResumidaModel.cs new file mode 100644 index 000000000..0004d773e --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/NfceResumidaModel.cs @@ -0,0 +1,11 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class NfceResumidaModel +{ + public DateTime AutorizacaoEm { get; set; } + public string Situacao { get; set; } + public int Serie { get; set; } + public int NumeroFiscal { get; set; } + public string Chave { get; set; } + public decimal ValorTotal { get; set; } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/NfeInutilizadaModel.cs b/NFe.Danfe.QuestPdf/Models/NfeInutilizadaModel.cs new file mode 100644 index 000000000..e26fc3f1c --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/NfeInutilizadaModel.cs @@ -0,0 +1,10 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class NfeInutilizadaModel +{ + public DateTime InutilizacaoEm { get; set; } + public string DescricaoModelo { get; set; } + public int Serie { get; set; } + public int NumeroInicial { get; set; } + public int NumeroFinal { get; set; } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/NfeResumidaModel.cs b/NFe.Danfe.QuestPdf/Models/NfeResumidaModel.cs new file mode 100644 index 000000000..ad9cf37ed --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/NfeResumidaModel.cs @@ -0,0 +1,11 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class NfeResumidaModel +{ + public DateTime AutorizacaoEm { get; set; } + public string Situacao { get; set; } + public int Serie { get; set; } + public int NumeroFiscal { get; set; } + public string Chave { get; set; } + public decimal ValorTotal { get; set; } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/PeriodoModel.cs b/NFe.Danfe.QuestPdf/Models/PeriodoModel.cs new file mode 100644 index 000000000..cdb70bdbc --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/PeriodoModel.cs @@ -0,0 +1,7 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class PeriodoModel +{ + public DateTime DataInicial { get; set; } + public DateTime DataFinal { get; set; } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/RelatorioFiscalEmissoesNfceModel.cs b/NFe.Danfe.QuestPdf/Models/RelatorioFiscalEmissoesNfceModel.cs new file mode 100644 index 000000000..a5793affb --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/RelatorioFiscalEmissoesNfceModel.cs @@ -0,0 +1,20 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class RelatorioFiscalEmissoesNfceModel +{ + public EmpresaModel EmpresaModel { get; set; } + public PeriodoModel PeriodoModel { get; set; } + public IEnumerable NfceResumidaModels { get; set; } + public IEnumerable NfceInutilizacaoModels { get; set; } + + public decimal QuantidadeNfceAutorizada => NfceResumidaModels.Count(n => n.Situacao == "Autorizada"); + public decimal ValorTotalNfceAutorizada => NfceResumidaModels.Where(n => n.Situacao == "Autorizada") + .Sum(n => n.ValorTotal); + public decimal QuantidadeNfceCancelada => NfceResumidaModels.Count(n => n.Situacao == "Cancelada"); + public decimal ValorTotalNfceCancelada => NfceResumidaModels.Where(n => n.Situacao == "Cancelada") + .Sum(n => n.ValorTotal); + public decimal QuantidadeNfceDenegada => NfceResumidaModels.Count(n => n.Situacao == "Denegada"); + + public decimal ValorTotalNfceDenegada => NfceResumidaModels.Where(n => n.Situacao == "Denegada") + .Sum(n => n.ValorTotal); +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/Models/RelatorioFiscalEmissoesNfeModel.cs b/NFe.Danfe.QuestPdf/Models/RelatorioFiscalEmissoesNfeModel.cs new file mode 100644 index 000000000..e9f4f2f5f --- /dev/null +++ b/NFe.Danfe.QuestPdf/Models/RelatorioFiscalEmissoesNfeModel.cs @@ -0,0 +1,20 @@ +namespace NFe.Danfe.QuestPdf.Models; + +public class RelatorioFiscalEmissoesNfeModel +{ + public EmpresaModel EmpresaModel { get; set; } + public PeriodoModel PeriodoModel { get; set; } + public IEnumerable NfeResumidaModels { get; set; } + public IEnumerable NfeInutilizacaoModels { get; set; } + + public decimal QuantidadeNfeAutorizada => NfeResumidaModels.Count(n => n.Situacao == "Autorizada"); + public decimal ValorTotalNfeAutorizada => NfeResumidaModels.Where(n => n.Situacao == "Autorizada") + .Sum(n => n.ValorTotal); + public decimal QuantidadeNfeCancelada => NfeResumidaModels.Count(n => n.Situacao == "Cancelada"); + public decimal ValorTotalNfeCancelada => NfeResumidaModels.Where(n => n.Situacao == "Cancelada") + .Sum(n => n.ValorTotal); + public decimal QuantidadeNfeDenegada => NfeResumidaModels.Count(n => n.Situacao == "Denegada"); + + public decimal ValorTotalNfeDenegada => NfeResumidaModels.Where(n => n.Situacao == "Denegada") + .Sum(n => n.ValorTotal); +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/NFe.Danfe.QuestPdf.csproj b/NFe.Danfe.QuestPdf/NFe.Danfe.QuestPdf.csproj new file mode 100644 index 000000000..a45de129d --- /dev/null +++ b/NFe.Danfe.QuestPdf/NFe.Danfe.QuestPdf.csproj @@ -0,0 +1,34 @@ + + + + netstandard2.0;net6.0 + enable + enable + latest + Zeus.Net.NFe.Danfe.QuestPdf + Zeus.Net.NFe.Danfe.QuestPdf + ZeusAutomacao + Zeus Automacao + Biblioteca para geração de DANFE em PDF usando QuestPDF. + + + + + + + + + Always + + + + + + + + + + + + + diff --git a/NFe.Danfe.QuestPdf/ParaContadores/RelatorioFiscalEmissoesNfceDocument.cs b/NFe.Danfe.QuestPdf/ParaContadores/RelatorioFiscalEmissoesNfceDocument.cs new file mode 100644 index 000000000..b13e6879e --- /dev/null +++ b/NFe.Danfe.QuestPdf/ParaContadores/RelatorioFiscalEmissoesNfceDocument.cs @@ -0,0 +1,286 @@ +using NFe.Danfe.QuestPdf.Models; +using QuestPDF.Fluent; +using QuestPDF.Helpers; +using QuestPDF.Infrastructure; + +namespace NFe.Danfe.QuestPdf.ParaContadores; + +public class RelatorioFiscalEmissoesNfceDocument : IDocument +{ + private static string Fonte = "Arial"; + private RelatorioFiscalEmissoesNfceModel Model; + + public RelatorioFiscalEmissoesNfceDocument(RelatorioFiscalEmissoesNfceModel model) + { + Model = model; + } + + public DocumentMetadata GetMetadata() => DocumentMetadata.Default; + DocumentSettings IDocument.GetSettings() => DocumentSettings.Default; + + public void Compose(IDocumentContainer container) + { + container + .Page(page => + { + page.Size(PageSizes.A4); + page.Margin(20); + + page.Header().Element(Cabecalho); + + + page.Content().Element(Conteudo); + + + page.Footer().AlignCenter().Text(x => + { + x.CurrentPageNumber(); + x.Span(" / "); + x.TotalPages(); + }); + }); + } + + private void Cabecalho(IContainer container) + { + var titleStyle = TextStyle.Default.FontSize(11).FontFamily(Fonte); + + container.Row(row => + { + row.RelativeItem().Column(column => + { + column.Item().AlignRight().Text("Relatório fiscal de emissões na NFC-e").FontSize(12).FontFamily(Fonte).SemiBold(); + column.Item().AlignRight().Text($"Impresso em: {GetMetadata().CreationDate}").FontSize(10).FontFamily(Fonte).Italic().SemiBold(); + column.Item().AlignLeft().Text($"Razão Social: {Model.EmpresaModel.RazaoSocial}").Style(titleStyle); + column.Item().AlignLeft().Text($"CNPJ: {Model.EmpresaModel.Cnpj}").Style(titleStyle); + column.Item().AlignLeft().Text($"Período: {Model.PeriodoModel.DataInicial:d} até {Model.PeriodoModel.DataFinal:d}"); + }); + }); + } + + private void Conteudo(IContainer container) + { + void TituloInicioTabela(ColumnDescriptor column, string titulo) + { + column.Item() + .PaddingTop(15) + .AlignCenter() + .Text(titulo) + .FontSize(9) + .Italic() + .SemiBold() + .FontFamily(Fonte); + } + + + container + .PaddingVertical(10) + .Column(column => + { + TituloInicioTabela(column, "Documento Fiscal Modelo 65 - NFCE"); + + column.Item().Element(TabelaNFCeResumida); + + TituloInicioTabela(column, "Inutilização feitas no periodo"); + + column.Item().Element(TabelaInutilizacoes); + + column.Item() + .PaddingTop(15) + .AlignCenter(); + + ResumoTotais(column); + }); + } + + private void TabelaNFCeResumida(IContainer container) + { + container.Table(table => + { + table.ColumnsDefinition(columns => + { + columns.ConstantColumn(80); + columns.ConstantColumn(50); + columns.ConstantColumn(30); + columns.ConstantColumn(55); + columns.RelativeColumn(); + columns.ConstantColumn(55); + }); + + + table.Header(header => + { + header.Cell().Element(CellStyle).Text("Data Autorização"); + header.Cell().Element(CellStyle).Text("Situação"); + header.Cell().Element(CellStyle).Text("Série"); + header.Cell().Element(CellStyle).Text("Número"); + header.Cell().Element(CellStyle).Text("Chave"); + header.Cell().Element(CellStyle).AlignRight().Text("Valo Total"); + + + static IContainer CellStyle(IContainer container) + { + return container.DefaultTextStyle(x => + x.SemiBold() + .FontSize(9) + .FontFamily(Fonte) + ) + .PaddingVertical(5) + .BorderBottom(1) + .BorderColor(Colors.Black); + } + }); + + foreach (var item in Model.NfceResumidaModels) + { + table.Cell().Element(CellStyle).Text(item.AutorizacaoEm.ToString("g")).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text(item.Situacao).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.Serie:D3}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.NumeroFiscal:D9}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.Chave}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).AlignRight().Text($"{item.ValorTotal:C}").Style(EstiloTextoColunas()); + + static IContainer CellStyle(IContainer container) + { + return container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(0); + } + + static TextStyle EstiloTextoColunas() + { + return TextStyle.Default.FontSize(8.5f).FontFamily(Fonte); + } + } + + table.Footer(footer => + { + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + }); + }); + } + + private void TabelaInutilizacoes(IContainer container) + { + container.Table(table => + { + table.ColumnsDefinition(columns => + { + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + }); + + table.Header(header => + { + header.Cell().Element(CellStyle).Text("Data Inutilização"); + header.Cell().Element(CellStyle).Text("Modelo"); + header.Cell().Element(CellStyle).Text("Série"); + header.Cell().Element(CellStyle).Text("Número Inicial"); + header.Cell().Element(CellStyle).Text("Número Final"); + + + static IContainer CellStyle(IContainer container) + { + return container.DefaultTextStyle(x => x.SemiBold().FontSize(9).FontFamily(Fonte)) + .PaddingVertical(5) + .BorderBottom(1) + .BorderColor(Colors.Black); + } + }); + + foreach (var item in Model.NfceInutilizacaoModels) + { + table.Cell().Element(CellStyle).Text(item.InutilizacaoEm.ToString("g")).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text(item.DescricaoModelo).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.Serie:D3}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.NumeroInicial:D9}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.NumeroFinal:D9}").Style(EstiloTextoColunas()); + + static IContainer CellStyle(IContainer container) + { + return container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(0); + } + + static TextStyle EstiloTextoColunas() + { + return TextStyle.Default.FontSize(8.5f).FontFamily(Fonte); + } + } + + table.Footer(footer => + { + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + }); + }); + } + + private void ResumoTotais(ColumnDescriptor column) + { + column.Item().Row(row => + { + row.RelativeItem(7) + .Border(0.3f) + .Text("Resumo das saidas").FontSize(10).FontFamily(Fonte).SemiBold().Italic(); + + row.RelativeItem(3) + .Border(0.3f) + .Text(text => + { + text.AlignCenter(); + text.Span("Cupons").FontSize(10).FontFamily(Fonte).SemiBold().Italic(); + }); + }); + + column.Item().Row(LinhaTotal("Resumo notas autorizadas" + , Model.QuantidadeNfceAutorizada + , Model.ValorTotalNfceAutorizada)); + + column.Item().Row(LinhaTotal("Resumo notas canceladas" + , Model.QuantidadeNfceCancelada + , Model.ValorTotalNfceCancelada)); + + column.Item().Row(LinhaTotal("Resumo notas denegadas" + , Model.QuantidadeNfceDenegada + , Model.ValorTotalNfceDenegada)); + + + } + + private Action LinhaTotal(string descricaoLinha, decimal quantidadeNfce, decimal valorTotal) + { + return row => + { + row.RelativeItem(7) + .Border(0.3f) + .Text(descricaoLinha).FontSize(10).FontFamily(Fonte).Italic(); + + row.RelativeItem(3) + .Border(0.3f) + .Row(resumoAutoriadasRow => + { + resumoAutoriadasRow.RelativeItem(5) + .Border(0.3f) + .Text(quantidadeNfce).FontSize(10) + .FontFamily(Fonte).Italic(); + + resumoAutoriadasRow.RelativeItem(5) + .Border(0.3f) + .Text(text => + { + text.AlignRight(); + text.Span(valorTotal.ToString("N")).FontSize(10).FontFamily(Fonte).Italic(); + }); + }); + }; + } +} \ No newline at end of file diff --git a/NFe.Danfe.QuestPdf/ParaContadores/RelatorioFiscalEmissoesNfeDocument.cs b/NFe.Danfe.QuestPdf/ParaContadores/RelatorioFiscalEmissoesNfeDocument.cs new file mode 100644 index 000000000..f59d79586 --- /dev/null +++ b/NFe.Danfe.QuestPdf/ParaContadores/RelatorioFiscalEmissoesNfeDocument.cs @@ -0,0 +1,286 @@ +using NFe.Danfe.QuestPdf.Models; +using QuestPDF.Fluent; +using QuestPDF.Helpers; +using QuestPDF.Infrastructure; + +namespace NFe.Danfe.QuestPdf.ParaContadores; + +public class RelatorioFiscalEmissoesNfeDocument : IDocument +{ + private static string Fonte = "Arial"; + private RelatorioFiscalEmissoesNfeModel Model; + + public RelatorioFiscalEmissoesNfeDocument(RelatorioFiscalEmissoesNfeModel model) + { + Model = model; + } + + public DocumentMetadata GetMetadata() => DocumentMetadata.Default; + DocumentSettings IDocument.GetSettings() => DocumentSettings.Default; + + public void Compose(IDocumentContainer container) + { + container + .Page(page => + { + page.Size(PageSizes.A4); + page.Margin(20); + + page.Header().Element(Cabecalho); + + + page.Content().Element(Conteudo); + + + page.Footer().AlignCenter().Text(x => + { + x.CurrentPageNumber(); + x.Span(" / "); + x.TotalPages(); + }); + }); + } + + private void Cabecalho(IContainer container) + { + var titleStyle = TextStyle.Default.FontSize(11).FontFamily(Fonte); + + container.Row(row => + { + row.RelativeItem().Column(column => + { + column.Item().AlignRight().Text("Relatório fiscal de emissões na NF-e").FontSize(12).FontFamily(Fonte).SemiBold(); + column.Item().AlignRight().Text($"Impresso em: {GetMetadata().CreationDate}").FontSize(10).FontFamily(Fonte).Italic().SemiBold(); + column.Item().AlignLeft().Text($"Razão Social: {Model.EmpresaModel.RazaoSocial}").Style(titleStyle); + column.Item().AlignLeft().Text($"CNPJ: {Model.EmpresaModel.Cnpj}").Style(titleStyle); + column.Item().AlignLeft().Text($"Período: {Model.PeriodoModel.DataInicial:d} até {Model.PeriodoModel.DataFinal:d}"); + }); + }); + } + + private void Conteudo(IContainer container) + { + void TituloInicioTabela(ColumnDescriptor column, string titulo) + { + column.Item() + .PaddingTop(15) + .AlignCenter() + .Text(titulo) + .FontSize(9) + .Italic() + .SemiBold() + .FontFamily(Fonte); + } + + + container + .PaddingVertical(10) + .Column(column => + { + TituloInicioTabela(column, "Documento Fiscal Modelo 55 - NFE"); + + column.Item().Element(TabelaNFeResumida); + + TituloInicioTabela(column, "Inutilização feitas no periodo"); + + column.Item().Element(TabelaInutilizacoes); + + column.Item() + .PaddingTop(15) + .AlignCenter(); + + ResumoTotais(column); + }); + } + + private void TabelaNFeResumida(IContainer container) + { + container.Table(table => + { + table.ColumnsDefinition(columns => + { + columns.ConstantColumn(80); + columns.ConstantColumn(50); + columns.ConstantColumn(30); + columns.ConstantColumn(55); + columns.RelativeColumn(); + columns.ConstantColumn(55); + }); + + + table.Header(header => + { + header.Cell().Element(CellStyle).Text("Data Autorização"); + header.Cell().Element(CellStyle).Text("Situação"); + header.Cell().Element(CellStyle).Text("Série"); + header.Cell().Element(CellStyle).Text("Número"); + header.Cell().Element(CellStyle).Text("Chave"); + header.Cell().Element(CellStyle).AlignRight().Text("Valo Total"); + + + static IContainer CellStyle(IContainer container) + { + return container.DefaultTextStyle(x => + x.SemiBold() + .FontSize(9) + .FontFamily(Fonte) + ) + .PaddingVertical(5) + .BorderBottom(1) + .BorderColor(Colors.Black); + } + }); + + foreach (var item in Model.NfeResumidaModels) + { + table.Cell().Element(CellStyle).Text(item.AutorizacaoEm.ToString("g")).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text(item.Situacao).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.Serie:D3}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.NumeroFiscal:D9}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.Chave}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).AlignRight().Text($"{item.ValorTotal:C}").Style(EstiloTextoColunas()); + + static IContainer CellStyle(IContainer container) + { + return container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(0); + } + + static TextStyle EstiloTextoColunas() + { + return TextStyle.Default.FontSize(8.5f).FontFamily(Fonte); + } + } + + table.Footer(footer => + { + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + }); + }); + } + + private void TabelaInutilizacoes(IContainer container) + { + container.Table(table => + { + table.ColumnsDefinition(columns => + { + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + }); + + table.Header(header => + { + header.Cell().Element(CellStyle).Text("Data Inutilização"); + header.Cell().Element(CellStyle).Text("Modelo"); + header.Cell().Element(CellStyle).Text("Série"); + header.Cell().Element(CellStyle).Text("Número Inicial"); + header.Cell().Element(CellStyle).Text("Número Final"); + + + static IContainer CellStyle(IContainer container) + { + return container.DefaultTextStyle(x => x.SemiBold().FontSize(9).FontFamily(Fonte)) + .PaddingVertical(5) + .BorderBottom(1) + .BorderColor(Colors.Black); + } + }); + + foreach (var item in Model.NfeInutilizacaoModels) + { + table.Cell().Element(CellStyle).Text(item.InutilizacaoEm.ToString("g")).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text(item.DescricaoModelo).Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.Serie:D3}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.NumeroInicial:D9}").Style(EstiloTextoColunas()); + table.Cell().Element(CellStyle).Text($"{item.NumeroFinal:D9}").Style(EstiloTextoColunas()); + + static IContainer CellStyle(IContainer container) + { + return container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(0); + } + + static TextStyle EstiloTextoColunas() + { + return TextStyle.Default.FontSize(8.5f).FontFamily(Fonte); + } + } + + table.Footer(footer => + { + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + footer.Cell().BorderBottom(1); + }); + }); + } + + private void ResumoTotais(ColumnDescriptor column) + { + column.Item().Row(row => + { + row.RelativeItem(7) + .Border(0.3f) + .Text("Resumo das saidas").FontSize(10).FontFamily(Fonte).SemiBold().Italic(); + + row.RelativeItem(3) + .Border(0.3f) + .Text(text => + { + text.AlignCenter(); + text.Span("Notas Fiscais").FontSize(10).FontFamily(Fonte).SemiBold().Italic(); + }); + }); + + column.Item().Row(LinhaTotal("Resumo notas autorizadas" + , Model.QuantidadeNfeAutorizada + , Model.ValorTotalNfeAutorizada)); + + column.Item().Row(LinhaTotal("Resumo notas canceladas" + , Model.QuantidadeNfeCancelada + , Model.ValorTotalNfeCancelada)); + + column.Item().Row(LinhaTotal("Resumo notas denegadas" + , Model.QuantidadeNfeDenegada + , Model.ValorTotalNfeDenegada)); + + + } + + private Action LinhaTotal(string descricaoLinha, decimal quantidadeNfe, decimal valorTotal) + { + return row => + { + row.RelativeItem(7) + .Border(0.3f) + .Text(descricaoLinha).FontSize(10).FontFamily(Fonte).Italic(); + + row.RelativeItem(3) + .Border(0.3f) + .Row(resumoAutoriadasRow => + { + resumoAutoriadasRow.RelativeItem(5) + .Border(0.3f) + .Text(quantidadeNfe).FontSize(10) + .FontFamily(Fonte).Italic(); + + resumoAutoriadasRow.RelativeItem(5) + .Border(0.3f) + .Text(text => + { + text.AlignRight(); + text.Span(valorTotal.ToString("N")).FontSize(10).FontFamily(Fonte).Italic(); + }); + }); + }; + } +} \ No newline at end of file diff --git a/NFe.Integracao/NFe.Integracao.csproj b/NFe.Integracao/NFe.Integracao.csproj index fdaabedcb..ec0c78b8a 100644 --- a/NFe.Integracao/NFe.Integracao.csproj +++ b/NFe.Integracao/NFe.Integracao.csproj @@ -9,7 +9,7 @@ Properties NFe.Integracao NFe.Integracao - v4.5 + v4.8 512 true @@ -61,7 +61,6 @@ - @@ -72,19 +71,19 @@ - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} + {a08ce194-9780-493d-a758-d5b3f44bd208} DFe.Classes - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} + {97f3c222-fd10-488a-812b-e514c3a8863c} DFe.Utils - {29ca1da2-440d-484b-951a-cf1b2eb27984} + {075a79c1-b038-46a8-8895-0a9753273b31} NFe.Classes - {80c6093c-47d5-41a1-9fa0-e218e82fa666} + {7696cc7f-83b7-434a-9759-4fcacc2fd483} NFe.Danfe.Base @@ -92,17 +91,13 @@ NFe.Danfe.Nativo - {ccfdb136-3ee3-4aed-aa69-26abbcb553c6} + {dc9fafbb-206c-4d34-a3f0-968cc95bf5bd} NFe.Servicos - {e35e7c4a-5690-4979-8b43-002975b48eaa} + {3e75202b-5aad-4f07-98b5-46b106678ca7} NFe.Utils - - {23ba5fa7-8bd6-4ae1-9895-54f119dd15fa} - NFe.Wsdl - diff --git a/NFe.Integracao/NFeFacade.cs b/NFe.Integracao/NFeFacade.cs index 98afa6eb2..187508649 100644 --- a/NFe.Integracao/NFeFacade.cs +++ b/NFe.Integracao/NFeFacade.cs @@ -186,6 +186,9 @@ private void CarregarConfiguracoes() ConfiguracaoServico.Instancia.VersaoNfeRetRecepcao = versaoNFe; ConfiguracaoServico.Instancia.VersaoNfeStatusServico = versaoNFe; ConfiguracaoServico.Instancia.VersaoRecepcaoEventoCceCancelamento = versaoNFe; + ConfiguracaoServico.Instancia.VersaoRecepcaoEventoInsucessoEntrega = versaoNFe; + ConfiguracaoServico.Instancia.VersaoRecepcaoEventoComprovanteEntrega = versaoNFe; + ConfiguracaoServico.Instancia.VersaoRecepcaoEventoConciliacaoFinanceira = versaoNFe; #endregion @@ -223,7 +226,7 @@ public void ImprimirNFCe(string pathXmlNFCe, string pathJpeg, string idToken, st var arquivo = nfe.ObterXmlString(); var configuracaoDanfeNFCe = new ConfiguracaoDanfeNfce(Danfe.Base.NfceDetalheVendaNormal.UmaLinha, Danfe.Base.NfceDetalheVendaContigencia.UmaLinha); - DanfeNativoNfce impr = new DanfeNativoNfce(arquivo, configuracaoDanfeNFCe, idToken, csc); + DanfeNativoNfce impr = new DanfeNativoNfce(arquivo, configuracaoDanfeNFCe.VersaoQrCode, configuracaoDanfeNFCe.Logomarca, idToken, csc); impr.GerarJPEG(pathJpeg); } diff --git a/NFe.Integracao/Program.cs b/NFe.Integracao/Program.cs index 6df36e7af..c91d31b26 100644 --- a/NFe.Integracao/Program.cs +++ b/NFe.Integracao/Program.cs @@ -529,6 +529,12 @@ private static void EnviarNFe(string dadosDoEnvio) try { + if(strPathArquivoXml.Contains("../") || strPathArquivoXml.Contains("..\\")) + { + Console.WriteLine("Caminho do arquivo não pode conter ../ ou ..\\"); + return; + } + File.ReadAllText(strPathArquivoXml); } catch (UnauthorizedAccessException ex) diff --git a/NFe.Integracao/Properties/AssemblyInfo.cs b/NFe.Integracao/Properties/AssemblyInfo.cs deleted file mode 100644 index 722b988e1..000000000 --- a/NFe.Integracao/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NFe.Integracao")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Integracao")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("dd441d1c-1f4a-4631-aa72-015c4fa735d2")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/NFe.Integracao/Properties/Settings.Designer.cs b/NFe.Integracao/Properties/Settings.Designer.cs index 8e117db08..ca083bca4 100644 --- a/NFe.Integracao/Properties/Settings.Designer.cs +++ b/NFe.Integracao/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace NFe.Integracao.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/NFe.Integracao/app.config b/NFe.Integracao/app.config index f49eac313..b5d842521 100644 --- a/NFe.Integracao/app.config +++ b/NFe.Integracao/app.config @@ -1,41 +1,41 @@ - -
+ +
- + - + - + - + - + - + - + - + - + - + - + diff --git a/NFe.Servicos.Standard/NFe.Servicos.Standard.csproj b/NFe.Servicos.Standard/NFe.Servicos.Standard.csproj deleted file mode 100644 index 5a98caaf3..000000000 --- a/NFe.Servicos.Standard/NFe.Servicos.Standard.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - netstandard2.0 - - - - TRACE;Standard - - - - TRACE;Standard - - - - - - - - - - - - - - diff --git a/NFe.Servicos.Standard/Properties/Resources.Designer.cs b/NFe.Servicos.Standard/Properties/Resources.Designer.cs deleted file mode 100644 index 8e94b29ab..000000000 --- a/NFe.Servicos.Standard/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace NFe.Servicos.Standard.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NFe.Servicos.Standard.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/NFe.Servicos.Standard/Properties/Resources.resx b/NFe.Servicos.Standard/Properties/Resources.resx deleted file mode 100644 index 4fdb1b6af..000000000 --- a/NFe.Servicos.Standard/Properties/Resources.resx +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Shared.NFe.Servicos/Extensoes/ExtConfiguracaoServico.cs b/NFe.Servicos/Extensoes/ExtConfiguracaoServico.cs similarity index 100% rename from Shared.NFe.Servicos/Extensoes/ExtConfiguracaoServico.cs rename to NFe.Servicos/Extensoes/ExtConfiguracaoServico.cs diff --git a/NFe.Servicos/NFe.Servicos.cd b/NFe.Servicos/NFe.Servicos.cd deleted file mode 100644 index 41e854c60..000000000 --- a/NFe.Servicos/NFe.Servicos.cd +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - AgAAAAAgAAAAAABAAAAAAAAIAAAAAAAACAAAAAAAAAg= - DefinicaoWSDL.cs - - - - - - AAAAAAAAAAQAAAAABAAAAAgAAAAQAAAAAAAAAAAAAAA= - DefinicaoWSDL.cs - - - - - - IDAAAEAAAwAKgIAIAAIABAAEAAAAACAAAAEABAAAAAA= - ServicosNFe.cs - - - - - - AAACAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAACAAAA= - Retorno\RetornoBasico.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoConsulta.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoNFeAutorizacao.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoNfeConsultaCadastro.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoNfeInutilizacao.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoNfeRecepcao.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoNFeRetAutorizacao.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoNfeRetRecepcao.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoNfeStatusServico.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Retorno\RetornoRecepcaoEvento.cs - - - - \ No newline at end of file diff --git a/NFe.Servicos/NFe.Servicos.csproj b/NFe.Servicos/NFe.Servicos.csproj index ba74892c1..0e8aed767 100644 --- a/NFe.Servicos/NFe.Servicos.csproj +++ b/NFe.Servicos/NFe.Servicos.csproj @@ -1,89 +1,24 @@ - - - - - Debug - AnyCPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6} - Library - Properties - NFe.Servicos - NFe.Servicos - v4.5 - 512 - e448bd94 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - DFe.Utils - - - {DBEE88E7-6003-436E-9810-9ACC662F5851} - DFe.Wsdl - - - {29ca1da2-440d-484b-951a-cf1b2eb27984} - NFe.Classes - - - {e35e7c4a-5690-4979-8b43-002975b48eaa} - NFe.Utils - - - {23ba5fa7-8bd6-4ae1-9895-54f119dd15fa} - NFe.Wsdl - - - - - - - - - - \ No newline at end of file + + + + net462;netstandard2.0;net6.0 + + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Servicos/NFe.Servicos.csproj.DotSettings b/NFe.Servicos/NFe.Servicos.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/NFe.Servicos/NFe.Servicos.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/NFe.Servicos/NFe.Servicos.csproj.vspscc b/NFe.Servicos/NFe.Servicos.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/NFe.Servicos/NFe.Servicos.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/NFe.Servicos/NFe.Servicos.licenseheader b/NFe.Servicos/NFe.Servicos.licenseheader deleted file mode 100644 index d2128a9e0..000000000 --- a/NFe.Servicos/NFe.Servicos.licenseheader +++ /dev/null @@ -1,34 +0,0 @@ -extensions: designer.cs generated.cs -extensions: .cs -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ diff --git a/NFe.Servicos/Properties/AssemblyInfo.cs b/NFe.Servicos/Properties/AssemblyInfo.cs deleted file mode 100644 index 5ebddbc1a..000000000 --- a/NFe.Servicos/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,71 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Reflection; -using System.Runtime.InteropServices; - -// Informações gerais sobre um assembly são controladas através do seguinte -// conjunto de atributos. Altere o valor destes atributos para modificar a informação -// associada a um assembly. - -[assembly: AssemblyTitle("NFe.Servicos")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Servicos")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Definir ComVisible como false torna os tipos neste assembly não visíveis -// para componentes COM. Caso precise acessar um tipo neste assembly a partir de -// COM, defina o atributo ComVisible como true nesse tipo. - -[assembly: ComVisible(false)] - -// O GUID a seguir é para o ID da typelib se este projeto for exposto para COM - -[assembly: Guid("df643e50-5511-4794-9f1b-ee495462cec5")] - -// Informações de Versão para um assembly consistem nos quatro valores a seguir: -// -// Versão Principal -// Versão Secundária -// Número da Versão -// Revisão -// -// É possível especificar todos os valores ou usar o padrão de Números de Compilação e Revisão -// utilizando o '*' como mostrado abaixo: -// [assembly: AssemblyVersion("1.0.0.772")] - -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/Shared.NFe.Servicos/Retorno/RetornoAdmCscNFCe.cs b/NFe.Servicos/Retorno/RetornoAdmCscNFCe.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoAdmCscNFCe.cs rename to NFe.Servicos/Retorno/RetornoAdmCscNFCe.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoBasico.cs b/NFe.Servicos/Retorno/RetornoBasico.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoBasico.cs rename to NFe.Servicos/Retorno/RetornoBasico.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoConsulta.cs b/NFe.Servicos/Retorno/RetornoConsulta.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoConsulta.cs rename to NFe.Servicos/Retorno/RetornoConsulta.cs diff --git a/NFe.Servicos/Retorno/RetornoConsultaGtin.cs b/NFe.Servicos/Retorno/RetornoConsultaGtin.cs new file mode 100644 index 000000000..1168b9a7b --- /dev/null +++ b/NFe.Servicos/Retorno/RetornoConsultaGtin.cs @@ -0,0 +1,15 @@ +using NFe.Classes.Servicos.ConsultaGtin; + +namespace NFe.Servicos.Retorno +{ + public class RetornoConsultaGtin : RetornoBasico + { + public RetornoConsultaGtin(string envioStr, string retornoStr, string retornoCompletaStr, retConsGTIN retorno) + : base(envioStr, retornoStr, retornoCompletaStr, retorno) + { + retConsGtin = retorno; + } + + public retConsGTIN retConsGtin { get; set; } + } +} \ No newline at end of file diff --git a/Shared.NFe.Servicos/Retorno/RetornoNFeAutorizacao.cs b/NFe.Servicos/Retorno/RetornoNFeAutorizacao.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNFeAutorizacao.cs rename to NFe.Servicos/Retorno/RetornoNFeAutorizacao.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNFeRetAutorizacao.cs b/NFe.Servicos/Retorno/RetornoNFeRetAutorizacao.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNFeRetAutorizacao.cs rename to NFe.Servicos/Retorno/RetornoNFeRetAutorizacao.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNfeConsultaCadastro.cs b/NFe.Servicos/Retorno/RetornoNfeConsultaCadastro.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNfeConsultaCadastro.cs rename to NFe.Servicos/Retorno/RetornoNfeConsultaCadastro.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNfeDistDFeInt.cs b/NFe.Servicos/Retorno/RetornoNfeDistDFeInt.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNfeDistDFeInt.cs rename to NFe.Servicos/Retorno/RetornoNfeDistDFeInt.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNfeDownload.cs b/NFe.Servicos/Retorno/RetornoNfeDownload.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNfeDownload.cs rename to NFe.Servicos/Retorno/RetornoNfeDownload.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNfeInutilizacao.cs b/NFe.Servicos/Retorno/RetornoNfeInutilizacao.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNfeInutilizacao.cs rename to NFe.Servicos/Retorno/RetornoNfeInutilizacao.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNfeRecepcao.cs b/NFe.Servicos/Retorno/RetornoNfeRecepcao.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNfeRecepcao.cs rename to NFe.Servicos/Retorno/RetornoNfeRecepcao.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNfeRetRecepcao.cs b/NFe.Servicos/Retorno/RetornoNfeRetRecepcao.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNfeRetRecepcao.cs rename to NFe.Servicos/Retorno/RetornoNfeRetRecepcao.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoNfeStatusServico.cs b/NFe.Servicos/Retorno/RetornoNfeStatusServico.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoNfeStatusServico.cs rename to NFe.Servicos/Retorno/RetornoNfeStatusServico.cs diff --git a/Shared.NFe.Servicos/Retorno/RetornoRecepcaoEvento.cs b/NFe.Servicos/Retorno/RetornoRecepcaoEvento.cs similarity index 100% rename from Shared.NFe.Servicos/Retorno/RetornoRecepcaoEvento.cs rename to NFe.Servicos/Retorno/RetornoRecepcaoEvento.cs diff --git a/Shared.NFe.Servicos/ServicoNfeFactory.cs b/NFe.Servicos/ServicoNfeFactory.cs similarity index 79% rename from Shared.NFe.Servicos/ServicoNfeFactory.cs rename to NFe.Servicos/ServicoNfeFactory.cs index 06c4eb0f7..b068c4621 100644 --- a/Shared.NFe.Servicos/ServicoNfeFactory.cs +++ b/NFe.Servicos/ServicoNfeFactory.cs @@ -1,9 +1,5 @@ using DFe.Classes.Entidades; using DFe.Classes.Flags; -using CTe.CTeOSDocumento.Wsdl; -using CTe.CTeOSDocumento.Wsdl.Cabecalho; -using CTe.CTeOSDocumento.Wsdl.Corpo; -using DFe.Wsdl; using NFe.Classes.Servicos.Tipos; using NFe.Servicos.Extensoes; using NFe.Utils; @@ -31,6 +27,7 @@ using System; using System.Reflection; using System.Security.Cryptography.X509Certificates; +using NFe.Wsdl.ConsultaGtin; namespace NFe.Servicos { @@ -93,9 +90,9 @@ private static DFe.Classes.Flags.VersaoServico ConverteVersaoLayout(VersaoServic /// Configuração do serviço /// Certificado /// - public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico cfg, X509Certificate2 certificado) + public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico cfg, X509Certificate2 certificado, string uf = null) { - string url = Enderecador.ObterUrlServico(servico, cfg); + string url = Enderecador.ObterUrlServico(servico, cfg, uf); switch (servico) { @@ -232,6 +229,18 @@ public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico return new RecepcaoEvento(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoInsucessoEntregaNFe: + case ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe: + return new RecepcaoEvento4SVCAN(url, certificado, cfg.TimeOut); + + case ServicoNFe.RecepcaoEventoComprovanteEntregaNFe: + case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: + return new RecepcaoEvento4AN(url, certificado, cfg.TimeOut); + + case ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe: + case ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe: + return new RecepcaoEvento4SVCAN(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: if (cfg.VersaoRecepcaoEventoManifestacaoDestinatario == VersaoServico.Versao400) { @@ -240,6 +249,9 @@ public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico return new RecepcaoEvento(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoAtorInteressado: + return new RecepcaoEvento4AN(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoEpec: if (cfg.VersaoRecepcaoEventoEpec == VersaoServico.Versao400) { @@ -269,6 +281,28 @@ public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico case ServicoNFe.NFeDistribuicaoDFe: return new NfeDistDFeInteresse(url, certificado, cfg.TimeOut); + + case ServicoNFe.ConsultaGtin: + return new ConsultaGTINApi(url, certificado, cfg.TimeOut); + + case ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido: + case ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal: + case ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito: + case ServicoNFe.RecepcaoEventoImobilizacaoDeItem: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente: + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoCancelamentoDeEvento: + case ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao: + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente: + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor: + case ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado: + case ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega: + return new RecepcaoEvento4(url, certificado, cfg.TimeOut); } return null; diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs new file mode 100644 index 000000000..0aaafb209 --- /dev/null +++ b/NFe.Servicos/ServicosNFe.cs @@ -0,0 +1,2827 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using DFe.Utils; +using DFe.Utils.Assinatura; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Servicos.AdmCsc; +using NFe.Classes.Servicos.Autorizacao; +using NFe.Classes.Servicos.Consulta; +using NFe.Classes.Servicos.ConsultaCadastro; +using NFe.Classes.Servicos.DistribuicaoDFe; +using NFe.Classes.Servicos.Download; +using NFe.Classes.Servicos.Evento; +using NFe.Classes.Servicos.Inutilizacao; +using NFe.Classes.Servicos.Recepcao; +using NFe.Classes.Servicos.Recepcao.Retorno; +using NFe.Classes.Servicos.Status; +using NFe.Classes.Servicos.Tipos; +using NFe.Servicos.Retorno; +using NFe.Utils; +using NFe.Utils.AdmCsc; +using NFe.Utils.Autorizacao; +using NFe.Utils.Consulta; +using NFe.Utils.ConsultaCadastro; +using NFe.Utils.DistribuicaoDFe; +using NFe.Utils.Download; +using NFe.Utils.Evento; +using NFe.Utils.Excecoes; +using NFe.Utils.Inutilizacao; +using NFe.Utils.NFe; +using NFe.Utils.Recepcao; +using NFe.Utils.Status; +using NFe.Utils.Validacao; +using NFe.Wsdl; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.Xml; +using NFe.Classes; +using Shared.DFe.Utils; +using FuncoesXml = DFe.Utils.FuncoesXml; +using NFe.Classes.Servicos.ConsultaGtin; +using NFe.Utils.ConsultaGtin; +using NFe.Classes.Informacoes; +using NFe.Classes.Servicos.Evento.Informacoes.CreditoBensServicos; +using NFe.Classes.Servicos.Evento.Informacoes.CreditoCombustivel; +using NFe.Classes.Servicos.Evento.Informacoes.CreditoPresumido; +using NFe.Classes.Servicos.Evento.Informacoes.Imobilizacao; +using NFe.Classes.Servicos.Evento.Informacoes.ItemConsumo; +using NFe.Classes.Servicos.Evento.Informacoes.ItemNaoFornecido; +using NFe.Classes.Servicos.Evento.Informacoes.Perecimento; + +namespace NFe.Servicos +{ + public sealed class ServicosNFe : IDisposable + { + private readonly X509Certificate2 _certificado; + private readonly bool _controlarCertificado; + private readonly ConfiguracaoServico _cFgServico; + private readonly string _path; + + /// + /// Cria uma instância da Classe responsável pelos serviços relacionados à NFe + /// + /// + public ServicosNFe(ConfiguracaoServico cFgServico, X509Certificate2 certificado = null) + { + _cFgServico = cFgServico; + _controlarCertificado = certificado == null; + if (_controlarCertificado) + _certificado = CertificadoDigital.ObterCertificado(cFgServico.Certificado); + else + _certificado = certificado; + + string path = Assembly.GetExecutingAssembly().Location; + _path = string.IsNullOrEmpty(path) ? Directory.GetCurrentDirectory() : Path.GetDirectoryName(path); + + //Define a versão do protocolo de segurança + ServicePointManager.SecurityProtocol = cFgServico.ProtocoloDeSeguranca; + + if (_cFgServico.ValidarCertificadoDoServidor) + ServicePointManager.ServerCertificateValidationCallback = null; + else + ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; + } + + private string SalvarArquivoXml(string nomeArquivo, string xmlString) + { + if (!_cFgServico.SalvarXmlServicos) return null; + var dir = string.IsNullOrEmpty(_cFgServico.DiretorioSalvarXml) ? _path : _cFgServico.DiretorioSalvarXml; + var filename = Path.Combine(dir, nomeArquivo); + var stw = new StreamWriter(filename); + stw.WriteLine(xmlString); + stw.Close(); + return filename; + } + + private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico, bool compactarMensagem) + { + if (servico != ServicoNFe.NFeAutorizacao) + throw new Exception( + string.Format("O serviço {0} não pode ser criado no método {1}!", servico, + MethodBase.GetCurrentMethod().Name)); + + return ServicoNfeFactory.CriaWsdlAutorizacao(_cFgServico, _certificado, compactarMensagem); + } + + private INfeServico CriarServico(ServicoNFe servico, string uf = null) + { + return ServicoNfeFactory.CriaWsdlOutros(servico, _cFgServico, _certificado, uf); + } + + /// + /// Consulta o status do Serviço de NFe + /// + /// Retorna um objeto da classe RetornoNfeStatusServico com os dados status do serviço + public RetornoNfeStatusServico NfeStatusServico(bool exceptionCompleta = false) + { + var versaoServico = ServicoNFe.NfeStatusServico.VersaoServicoParaString(_cFgServico.VersaoNfeStatusServico); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NfeStatusServico); + + if (_cFgServico.VersaoNfeStatusServico != VersaoServico.Versao400) + { + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + } + + #endregion + + #region Cria o objeto consStatServ + + var pedStatus = new consStatServ + { + cUF = _cFgServico.cUF, + tpAmb = _cFgServico.tpAmb, + versao = versaoServico + }; + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlStatus = pedStatus.ObterXmlString(); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-ped-sta.xml", xmlStatus); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NfeStatusServico, _cFgServico.VersaoNfeStatusServico, xmlStatus, cfgServico: _cFgServico); + + var dadosStatus = new XmlDocument(); + dadosStatus.LoadXml(xmlStatus); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosStatus); + } + catch (WebException ex) + { + if (exceptionCompleta) + { + throw; + } + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeStatusServico, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retConsStatServ = new retConsStatServ().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-sta.xml", retornoXmlString); + + return new RetornoNfeStatusServico(pedStatus.ObterXmlString(), retConsStatServ.ObterXmlString(), + retornoXmlString, retConsStatServ); + + #endregion + } + + /// + /// Consulta a Situação da NFe + /// + /// Retorna um objeto da classe RetornoNfeConsultaProtocolo com os dados da Situação da NFe + public RetornoNfeConsultaProtocolo NfeConsultaProtocolo(string chave) + { + var versaoServico = ServicoNFe.NfeConsultaProtocolo.VersaoServicoParaString(_cFgServico.VersaoNfeConsultaProtocolo); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NfeConsultaProtocolo); + + if (_cFgServico.VersaoNfeConsultaProtocolo != VersaoServico.Versao400) + { + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + } + + #endregion + + #region Cria o objeto consSitNFe + + var pedConsulta = new consSitNFe + { + versao = versaoServico, + tpAmb = _cFgServico.tpAmb, + chNFe = chave + }; + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlConsulta = pedConsulta.ObterXmlString(); + + SalvarArquivoXml(chave + "-ped-sit.xml", xmlConsulta); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NfeConsultaProtocolo, _cFgServico.VersaoNfeConsultaProtocolo, xmlConsulta, cfgServico: _cFgServico); + + var dadosConsulta = new XmlDocument(); + dadosConsulta.LoadXml(xmlConsulta); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosConsulta); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeConsultaProtocolo, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retConsulta = new retConsSitNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(chave + "-sit.xml", retornoXmlString); + + return new RetornoNfeConsultaProtocolo(pedConsulta.ObterXmlString(), retConsulta.ObterXmlString(), + retornoXmlString, retConsulta); + + #endregion + } + + /// + /// Inutiliza uma faixa de números + /// + /// + /// + /// + /// + /// + /// + /// + /// Retorna um objeto da classe RetornoNfeInutilizacao com o retorno do serviço NfeInutilizacao + public RetornoNfeInutilizacao NfeInutilizacao(string cnpj, int ano, ModeloDocumento modelo, int serie, + int numeroInicial, int numeroFinal, string justificativa) + { + var versaoServico = ServicoNFe.NfeInutilizacao.VersaoServicoParaString(_cFgServico.VersaoNfeInutilizacao); + + #region Cria o objeto inutNFe + + var pedInutilizacao = new inutNFe + { + versao = versaoServico, + infInut = new infInutEnv + { + tpAmb = _cFgServico.tpAmb, + cUF = _cFgServico.cUF, + ano = ano, + CNPJ = cnpj, + mod = modelo, + serie = serie, + nNFIni = numeroInicial, + nNFFin = numeroFinal, + xJust = justificativa + } + }; + + var numId = string.Concat((int)pedInutilizacao.infInut.cUF, pedInutilizacao.infInut.ano.ToString("D2"), + pedInutilizacao.infInut.CNPJ, (int)pedInutilizacao.infInut.mod, + pedInutilizacao.infInut.serie.ToString().PadLeft(3, '0'), + pedInutilizacao.infInut.nNFIni.ToString().PadLeft(9, '0'), + pedInutilizacao.infInut.nNFFin.ToString().PadLeft(9, '0')); + + pedInutilizacao.infInut.Id = "ID" + numId; + + pedInutilizacao.Assina(_certificado, _cFgServico.Certificado.SignatureMethodSignedXml, _cFgServico.Certificado.DigestMethodReference, _cFgServico.RemoverAcentos); + + #endregion + + return NfeInutilizacao(pedInutilizacao); + } + + /// + /// Inutilizar uma faíxa de números já assinado. + /// + /// + /// + public RetornoNfeInutilizacao NfeInutilizacao(inutNFe pedInutilizacao) + { + var versaoServico = ServicoNFe.NfeInutilizacao.VersaoServicoParaString(_cFgServico.VersaoNfeInutilizacao); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NfeInutilizacao); + + if (_cFgServico.VersaoNfeStatusServico != VersaoServico.Versao400) + { + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + } + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlInutilizacao = _cFgServico.RemoverAcentos + ? pedInutilizacao.ObterXmlString().RemoverAcentos() + : pedInutilizacao.ObterXmlString(); + + var numId = pedInutilizacao.infInut.Id.Replace("ID", ""); + SalvarArquivoXml(numId + "-ped-inu.xml", xmlInutilizacao); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NfeInutilizacao, _cFgServico.VersaoNfeInutilizacao, xmlInutilizacao, cfgServico: _cFgServico); + + var dadosInutilizacao = new XmlDocument(); + dadosInutilizacao.LoadXml(xmlInutilizacao); + + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosInutilizacao); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeInutilizacao, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retInutNFe = new retInutNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(numId + "-inu.xml", retornoXmlString); + + return new RetornoNfeInutilizacao(xmlInutilizacao, retInutNFe.ObterXmlString(), + retornoXmlString, retInutNFe); + + #endregion + } + + /// + /// Envia um evento genérico + /// + /// + /// + /// Tipo de serviço do evento: valores válidos: RecepcaoEventoCancelmento, RecepcaoEventoCartaCorrecao, RecepcaoEventoEpec, RecepcaoEventoManifestacaoDestinatario, etc... + /// Versão do serviço para o evento + /// Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento + private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List eventos, ServicoNFe servicoEvento, VersaoServico versaoEvento, bool assinar) + { + var listaEventos = new List + { + ServicoNFe.RecepcaoEventoCartaCorrecao, + ServicoNFe.RecepcaoEventoCancelmento, + ServicoNFe.RecepcaoEventoEpec, + ServicoNFe.RecepcaoEventoManifestacaoDestinatario, + ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, + ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe, + ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, + ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe, + ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, + ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe, + ServicoNFe.RecepcaoEventoAtorInteressado, + ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente, + ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido, + ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal, + ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito, + ServicoNFe.RecepcaoEventoImobilizacaoDeItem, + ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel, + ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente, + ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoCancelamentoDeEvento, + ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao, + ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente, + ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor, + ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado, + ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega, + }; + if ( + !listaEventos.Contains(servicoEvento)) + throw new Exception( + string.Format("Serviço {0} é inválido para o método {1}!\nServiços válidos: \n • {2}", servicoEvento, + MethodBase.GetCurrentMethod().Name, string.Join("\n • ", listaEventos.ToArray()))); + + var versaoServico = servicoEvento.VersaoServicoParaString(versaoEvento); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(servicoEvento); + + if (_cFgServico.VersaoRecepcaoEventoCceCancelamento != VersaoServico.Versao400) + { + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + } + + #endregion + + #region Cria o objeto envEvento + + var pedEvento = new envEvento + { + versao = versaoServico, + idLote = idlote, + evento = eventos + }; + + if (assinar) + { + foreach (var evento in eventos) + { + evento.infEvento.Id = "ID" + ((int)evento.infEvento.tpEvento) + evento.infEvento.chNFe + + evento.infEvento.nSeqEvento.ToString().PadLeft(2, '0'); + evento.Assina(_certificado, _cFgServico.Certificado.SignatureMethodSignedXml, _cFgServico.Certificado.DigestMethodReference, _cFgServico.RemoverAcentos); + } + } + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlEvento = _cFgServico.RemoverAcentos + ? pedEvento.ObterXmlString().RemoverAcentos() + : pedEvento.ObterXmlString(); + + SalvarArquivoXml(idlote + "-ped-eve.xml", xmlEvento); + + if (_cFgServico.ValidarSchemas) + { + Validador.Valida(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, xmlEvento, + cfgServico: _cFgServico); + + var deveValidarDetEvento = DeveValidarDetalhamentoDoEvento(servicoEvento); + + if (deveValidarDetEvento) + { + foreach (var evento in pedEvento.evento) + { + var detEvento = evento.infEvento.detEvento; + var detEventoXml = FuncoesXml.ClasseParaXmlString(detEvento); + if (_cFgServico.RemoverAcentos) + detEventoXml = detEventoXml.RemoverAcentos(); + + Validador.Valida(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, detEventoXml, cfgServico: _cFgServico, validarLote: false); + } + } + } + + + + var dadosEvento = new XmlDocument(); + dadosEvento.LoadXml(xmlEvento); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosEvento); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(servicoEvento, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retEnvEvento = new retEnvEvento().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(idlote + "-eve.xml", retornoXmlString); + + #region Obtém um procEventoNFe de cada evento e salva em arquivo + + var listprocEventoNFe = new List(); + + foreach (var evento in eventos) + { + var eve = evento; + var retEvento = (from retevento in retEnvEvento.retEvento + where + retevento.infEvento.chNFe == eve.infEvento.chNFe && + retevento.infEvento.tpEvento == eve.infEvento.tpEvento + select retevento).SingleOrDefault(); + + var procevento = new procEventoNFe { evento = eve, versao = eve.versao, retEvento = retEvento }; + listprocEventoNFe.Add(procevento); + if (!_cFgServico.SalvarXmlServicos) continue; + var proceventoXmlString = procevento.ObterXmlString(); + SalvarArquivoXml(procevento.evento.infEvento.Id.Substring(2) + "-procEventoNFe.xml", proceventoXmlString); + } + + #endregion + + return new RetornoRecepcaoEvento(xmlEvento, retEnvEvento.ObterXmlString(), retornoXmlString, + retEnvEvento, listprocEventoNFe); + + #endregion + } + + private bool DeveValidarDetalhamentoDoEvento(ServicoNFe servicoNFe) + { + bool deveValidarDetalhamentoDoEvento; + + switch (servicoNFe) + { + case ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido: + case ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal: + case ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito: + case ServicoNFe.RecepcaoEventoImobilizacaoDeItem: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente: + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoCancelamentoDeEvento: + case ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao: + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente: + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor: + case ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado: + case ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega: + deveValidarDetalhamentoDoEvento = true; + break; + default: + deveValidarDetalhamentoDoEvento = false; + break; + } + + return deveValidarDetalhamentoDoEvento; + } + + /// + /// Envia um evento do tipo "Cancelamento" + /// + /// Retorna um objeto da classe com o retorno do serviço + public RetornoRecepcaoEvento RecepcaoEventoCancelamento(int idlote, int sequenciaEvento, + string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj, DateTimeOffset? dhEvento = null) + { + return RecepcaoEventoCancelamento(NFeTipoEvento.TeNfeCancelamento, idlote, sequenciaEvento, + protocoloAutorizacao, chaveNFe, justificativa, cpfcnpj, dhEvento: dhEvento); + } + + /// + /// Envia eventos do tipo "Cancelamento" já assinado. + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancelamento(int idlote, List eventos) + { + var retorno = RecepcaoEvento(idlote, eventos, ServicoNFe.RecepcaoEventoCancelmento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, false); + return retorno; + } + + /// + /// Envia um evento do tipo "Cancelamento por substituição" + /// + /// Retorna um objeto da classe com o retorno do serviço + public RetornoRecepcaoEvento RecepcaoEventoCancelamentoPorSubstituicao(int idlote, int sequenciaEvento, + string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj, Estado ufAutor, string versaoAplicativo, string chaveNfeSubstituta, DateTimeOffset? dhEvento = null) + { + return RecepcaoEventoCancelamento(NFeTipoEvento.TeNfeCancelamentoSubstituicao, idlote, sequenciaEvento, + protocoloAutorizacao, chaveNFe, justificativa, cpfcnpj, ufAutor, TipoAutor.taEmpresaEmitente, versaoAplicativo, chaveNfeSubstituta, dhEvento: dhEvento); + } + + private RetornoRecepcaoEvento RecepcaoEventoCancelamento(NFeTipoEvento tipoEventoCancelamento, int idlote, + int sequenciaEvento, string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj, + Estado? ufAutor = null, TipoAutor? tipoAutor = null, string versaoAplicativo = null, string chaveNfeSubstituta = null, DateTimeOffset? dhEvento = null) + { + if (!NFeTipoEventoUtils.NFeTipoEventoCancelamento.Contains(tipoEventoCancelamento)) + throw new Exception(string.Format("Informe um dos seguintes tipos de eventos: {0}", + string.Join(", ", + NFeTipoEventoUtils.NFeTipoEventoCancelamento.Select(n => n.Descricao())))); + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoCceCancelamento); + + var detEvento = new detEvento + { + nProt = protocoloAutorizacao, + versao = versaoServico, + xJust = justificativa, + descEvento = tipoEventoCancelamento.Descricao(), + cOrgaoAutor = ufAutor, + tpAutor = tipoAutor, + verAplic = versaoAplicativo, + chNFeRef = chaveNfeSubstituta + }; + var infEvento = new infEventoEnv + { + cOrgao = _cFgServico.cUF, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = tipoEventoCancelamento, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancelmento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, true); + return retorno; + } + + /// + /// Processa a recepção do evento "Ator Interessado na NF-e - Transportador" + /// + /// Número do lote + /// Sequência do evento + /// CNPJ ou CPF do autor do evento + /// Chave da NFe + /// CNPJ ou CPF do ator interessado emitente de CT-e + /// Tipo do autor gerador do evento + /// Tipo de autorização do ator interessado + /// Unidade federativa do autor + /// Versão do aplicativo do autor do evento + /// Data e hora do evento + /// Resultado da recepção do evento + public RetornoRecepcaoEvento RecepcaoEventoAtorInteressado(int idlote, int sequenciaEvento, string cpfCnpjAtorEvento, + string chaveNFe, string cnpfCnpjAtorInteressado, TipoAutor? tipoAutor = null, TipoAutorizacao? tipoAutorizacao = null, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + var tipoAutorEmitenteOuDestinataria = tipoAutor == TipoAutor.taEmpresaEmitente || tipoAutor == TipoAutor.taEmpresaDestinataria; + + var versaoServico = ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoAtorInteressado); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeAtorInteressadoNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + tpAutor = tipoAutor, + verAplic = versaoAplicativo ?? "1.0", + autXML = new List + { + new autXML + { + CPF = cnpfCnpjAtorInteressado.Length == 11 ? cnpfCnpjAtorInteressado : null, + CNPJ = cnpfCnpjAtorInteressado.Length == 11 ? null : cnpfCnpjAtorInteressado + } + }, + tpAutorizacao = tipoAutorEmitenteOuDestinataria ? tipoAutorizacao : null, + xCondUso = tipoAutorEmitenteOuDestinataria + ? "O emitente ou destinatário da NF-e, declara que permite o transportador declarado no campo CNPJ/CPF deste evento a autorizar os transportadores subcontratados ou redespachados a terem acesso ao download da NF-e" + : null + }; + + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + CNPJ = cpfCnpjAtorEvento.Length == 11 ? null : cpfCnpjAtorEvento, + CPF = cpfCnpjAtorEvento.Length == 11 ? cpfCnpjAtorEvento : null, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeAtorInteressadoNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + + var evento = new evento + { + versao = versaoServico, + infEvento = infEvento + }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, + ServicoNFe.RecepcaoEventoAtorInteressado, _cFgServico.VersaoRecepcaoEventoAtorInteressado, true); + + return retorno; + } + + /// + /// Envia um evento do tipo "Carta de Correção" + /// + /// Retorna um objeto da classe com o retorno do serviço + public RetornoRecepcaoEvento RecepcaoEventoCartaCorrecao(int idlote, int sequenciaEvento, string chaveNFe, + string correcao, string cpfcnpj, DateTimeOffset? dhEvento = null) + { + var versaoServico = + ServicoNFe.RecepcaoEventoCartaCorrecao.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoCceCancelamento); + var detEvento = new detEvento + { + versao = versaoServico, + xCorrecao = correcao, + xJust = null, + descEvento = NFeTipoEvento.TeNfeCartaCorrecao.Descricao(), + xCondUso = + "A Carta de Correção é disciplinada pelo § 1º-A do art. 7º do Convênio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularização de erro ocorrido na emissão de documento fiscal, desde que o erro não esteja relacionado com: I - as variáveis que determinam o valor do imposto tais como: base de cálculo, alíquota, diferença de preço, quantidade, valor da operação ou da prestação; II - a correção de dados cadastrais que implique mudança do remetente ou do destinatário; III - a data de emissão ou de saída." + }; + + if (_cFgServico.cUF == Estado.MT || _cFgServico.RemoverAcentos) + { + detEvento.descEvento = "Carta de Correcao"; + detEvento.xCondUso = + "A Carta de Correcao e disciplinada pelo paragrafo 1o-A do art. 7o do Convenio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularizacao de erro ocorrido na emissao de documento fiscal, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da operacao ou da prestacao; II - a correcao de dados cadastrais que implique mudanca do remetente ou do destinatario; III - a data de emissao ou de saida."; + } + var infEvento = new infEventoEnv + { + cOrgao = _cFgServico.cUF, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeCartaCorrecao, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento, true); + return retorno; + } + + /// + /// Envia eventos do tipo "Carta de correção" já assinado. + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCartaCorrecao(int idlote, List eventos) + { + var retorno = RecepcaoEvento(idlote, eventos, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento, false); + return retorno; + } + + public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, int sequenciaEvento, + string chaveNFe, NFeTipoEvento nFeTipoEventoManifestacaoDestinatario, string cpfcnpj, + string justificativa = null, DateTimeOffset? dhEvento = null) + { + return RecepcaoEventoManifestacaoDestinatario(idlote, sequenciaEvento, new[] { chaveNFe }, + nFeTipoEventoManifestacaoDestinatario, cpfcnpj, justificativa, dhEvento: dhEvento); + } + + public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, int sequenciaEvento, + string[] chavesNFe, NFeTipoEvento nFeTipoEventoManifestacaoDestinatario, string cpfcnpj, + string justificativa = null, DateTimeOffset? dhEvento = null) + { + if (!NFeTipoEventoUtils.NFeTipoEventoManifestacaoDestinatario.Contains(nFeTipoEventoManifestacaoDestinatario)) + throw new Exception(string.Format("Informe um dos seguintes tipos de eventos: {0}", + string.Join(", ", + NFeTipoEventoUtils.NFeTipoEventoManifestacaoDestinatario.Select(n => n.Descricao())))); + + var versaoServico = + ServicoNFe.RecepcaoEventoManifestacaoDestinatario.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoManifestacaoDestinatario); + var detEvento = new detEvento + { + versao = versaoServico, + xJust = justificativa, + descEvento = nFeTipoEventoManifestacaoDestinatario.Descricao() + }; + + var eventos = new List(); + foreach (var chaveNFe in chavesNFe) + { + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = nFeTipoEventoManifestacaoDestinatario, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + eventos.Add(new evento { versao = versaoServico, infEvento = infEvento }); + } + + + var retorno = RecepcaoEvento(idlote, eventos, + ServicoNFe.RecepcaoEventoManifestacaoDestinatario, _cFgServico.VersaoRecepcaoEventoManifestacaoDestinatario, true); + return retorno; + } + + /// + /// Envia um evento do tipo "EPEC" + /// + /// + /// + /// + /// + /// Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento + public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, int sequenciaEvento, Classes.NFe nfe, + string veraplic, DateTimeOffset? dhEvento = null) + { + var versaoServico = + ServicoNFe.RecepcaoEventoEpec.VersaoServicoParaString(_cFgServico.VersaoRecepcaoEventoEpec); + + if (string.IsNullOrEmpty(nfe.infNFe.Id)) + nfe.Assina().Valida(); + + var detevento = new detEvento + { + versao = versaoServico, + cOrgaoAutor = nfe.infNFe.ide.cUF, + tpAutor = TipoAutor.taEmpresaEmitente, + verAplic = veraplic, + descEvento = NFeTipoEvento.TeNfceEpec.Descricao(), + dhEmi = nfe.infNFe.ide.dhEmi, + tpNF = nfe.infNFe.ide.tpNF, + IE = nfe.infNFe.emit.IE, + dest = new dest + { + UF = nfe.infNFe.dest.enderDest.UF, + CNPJ = nfe.infNFe.dest.CNPJ, + CPF = nfe.infNFe.dest.CPF, + IE = nfe.infNFe.dest.IE, + vNF = nfe.infNFe.total.ICMSTot.vNF, + vICMS = nfe.infNFe.total.ICMSTot.vICMS, + vST = nfe.infNFe.total.ICMSTot.vST + } + }; + + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = nfe.infNFe.ide.tpAmb, + CNPJ = nfe.infNFe.emit.CNPJ, + CPF = nfe.infNFe.emit.CPF, + chNFe = nfe.infNFe.Id.Substring(3), + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfceEpec, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detevento + }; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoEpec, _cFgServico.VersaoRecepcaoEventoEpec, true); + return retorno; + } + + /// + /// Envia eventos do tipo "EPEC" já assinado + /// + /// + /// + /// Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento + public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, List eventos) + { + var retorno = RecepcaoEvento(idlote, eventos, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento, false); + return retorno; + } + + /// + /// Recepção do Evento de Insucesso na Entrega + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// + /// preencher com Enum MotivoInsucesso + /// Hash SHA-1, no formato Base64, resultante da + /// concatenação de: Chave de Acesso da NF-e + Base64 + /// da imagem capturada na tentativa da entrega(ex: + /// imagem capturada da assinatura eletrônica, digital do + /// recebedor, foto, etc). + /// + /// + /// Latitude do ponto de entrega (não obrigatório) + /// Longitude do ponto de entrega (não obrigatório) + /// Preencher apenas se o motivo for outros + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoInsucessoEntrega(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, DateTimeOffset dhTentativaEntrega, MotivoInsucesso motivo, string hashTentativaEntrega, + int? nTentativa = null, DateTimeOffset? dhHashTentativaEntrega = null, decimal? latGps = null, decimal? longGps = null, + string justificativa = null, Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoInsucessoEntrega); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeInsucessoNaEntregadaNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + verAplic = versaoAplicativo ?? "1.0", + dhTentativaEntrega = dhTentativaEntrega, + nTentativa = nTentativa, + tpMotivo = motivo, + xJustMotivo = justificativa, + latGPS = latGps, + longGPS = longGps, + hashTentativaEntrega = hashTentativaEntrega, + dhHashTentativaEntrega = dhHashTentativaEntrega + }; + var infEvento = new infEventoEnv + { + cOrgao = Estado.SVRS, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeInsucessoNaEntregadaNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, _cFgServico.VersaoRecepcaoEventoInsucessoEntrega, true); + return retorno; + } + + /// + /// Serviço para cancelamento insucesso na entrega + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Protocolo do eveento de insucesso na entrega que deseja cancelar + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancInsucessoEntrega(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, string nProtEvento, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoInsucessoEntrega); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeCancInsucessoNaEntregadaNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + verAplic = versaoAplicativo ?? "1.0", + nProtEvento = nProtEvento + }; + + var infEvento = new infEventoEnv + { + cOrgao = Estado.SVRS, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeCancInsucessoNaEntregadaNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe, _cFgServico.VersaoRecepcaoEventoInsucessoEntrega, true); + return retorno; + } + + /// + /// Recepção do Evento de Comprovante de Entrega + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// + /// Número documento de identificação da pessoa + /// Nome da pessoa + /// Hash SHA-1, no formato Base64, resultante da + /// concatenação de: Chave de Acesso da NF-e + Base64 + /// da imagem capturada do comprovante de entrega (ex: + /// imagem capturada da assinatura eletrônica, digital do + /// recebedor, foto, etc). + /// + /// Latitude do ponto de entrega (não obrigatório) + /// Longitude do ponto de entrega (não obrigatório) + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoComprovanteEntrega(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, DateTimeOffset dhEntrega, string nDoc, string xNome, string hashComprovante, + DateTimeOffset? dhHashComprovante = null, decimal? latGps = null, decimal? longGps = null, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoComprovanteEntrega); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeComprovanteDeEntregadaNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + tpAutor = TipoAutor.taEmpresaEmitente, + verAplic = versaoAplicativo ?? "1.0", + dhEntrega = dhEntrega, + nDoc = nDoc, + xNome = xNome, + latGPS = latGps, + longGPS = longGps, + hashComprovante = hashComprovante, + dhHashComprovante = dhHashComprovante + }; + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeComprovanteDeEntregadaNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, _cFgServico.VersaoRecepcaoEventoComprovanteEntrega, true); + return retorno; + } + + /// + /// Serviço para cancelamento comprovante de entrega + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Protocolo do evento de comprovante de entrega que deseja cancelar + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancComprovanteEntrega(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, string nProtEvento, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoComprovanteEntrega); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeCancComprovanteDeEntregadaNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + tpAutor = TipoAutor.taEmpresaEmitente, + verAplic = versaoAplicativo ?? "1.0", + nProtEvento = nProtEvento + }; + + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeCancComprovanteDeEntregadaNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe, _cFgServico.VersaoRecepcaoEventoComprovanteEntrega, true); + return retorno; + } + + + /// + /// Recepção do Evento de Conciliação Financeira + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Informações dos pagamentos + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoConciliacaoFinanceira(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, List pagamentos, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeConciliacaoFinanceiraNFe.Descricao(), + verAplic = versaoAplicativo ?? "1.0", + detPag = pagamentos + }; + var infEvento = new infEventoEnv + { + cOrgao = (_cFgServico.ModeloDocumento == ModeloDocumento.NFCe ? _cFgServico.cUF : Estado.SVRS), + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeConciliacaoFinanceiraNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira, true); + return retorno; + } + + /// + /// Serviço para cancelamento Conciliação Financeira + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Protocolo do evento de conciliação financeira que deseja cancelar + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancConciliacaoFinanceira(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, string nProtEvento, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeCancConciliacaoFinanceiraNFe.Descricao(), + verAplic = versaoAplicativo ?? "1.0", + nProtEvento = nProtEvento + }; + + var infEvento = new infEventoEnv + { + cOrgao = (_cFgServico.ModeloDocumento == ModeloDocumento.NFCe ? _cFgServico.cUF : Estado.SVRS), + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeCancConciliacaoFinanceiraNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe, _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira, true); + return retorno; + } + + /// + /// Serviço para evento informação de efetivo pagamento integral da operação para liberar crédito presumido do adquirente + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Indicador de efetiva quitação do pagamento integral referente a NFe referenciada + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + IndicadorDeQuitacaoDoPagamento indicadorDeQuitacaoDoPagamento, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaEmitente); + detalhesEvento.indQuitacao = indicadorDeQuitacaoDoPagamento; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento a ser gerado pelo destinatário da NF-e em relação às notas fiscais de aquisição de emissão de terceiros e que lhe gerem o direito à apropriação de crédito presumido. + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// + /// Lista de informações de crédito presumido por item + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido(int idLote, + int sequenciaEvento, + string cpfCnpj, + TipoAutor tipoAutor, + string chaveNFe, + List informacoesDeCreditoPresumidoPorItem, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeSolicitacaoDeApropriacaoDeCreditoPresumido; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, tipoAutor); + detalhesEvento.gCredPres = informacoesDeCreditoPresumidoPorItem; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento destinação de item para consumo pessoal + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// + /// Lista de informações de itens para consumo pessoal + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoDestinacaoDeItemParaConsumoPessoal(int idLote, + int sequenciaEvento, + string cpfCnpj, + TipoAutor tipoAutor, + string chaveNFe, + List informacoesDeItensParaConsumoPessoal, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeDestinacaoDeItemParaConsumoPessoal; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, tipoAutor); + detalhesEvento.gConsumo = informacoesDeItensParaConsumoPessoal; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento aceite de débito na apuração por emissão de nota de crédito + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Indicador de aceitação de débito na apuração por emissão de nota de crédito + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + IndicadorAceitacao indicadorAceitacao, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaDestinataria); + detalheEvento.indAceitacao = indicadorAceitacao; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento de imobilização de item + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Lista de itens da nota fiscal a serem imobilizados + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoImobilizacaoItem(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + List imobilizacoesItens, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoImobilizacaoDeItem; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeImobilizacaoDeItem; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaDestinataria); + detalheEvento.gImobilizacao = imobilizacoesItens; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + + /// + /// Serviço para evento de solicitação de apropriação de crédito de combustível + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Itens de combustível da nota fiscal + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoSolicitacaApropriacaoCreditoCombustivel(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + List gConsumoComb, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeSolicitacaoApropriacaoCreditoCombustivel; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaDestinataria); + detalheEvento.gConsumoComb = gConsumoComb; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento de Solicitação de Apropriação de Crédito para bens e serviços que dependem de atividade do adquirente + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Informações de crédito + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + List gCreditos, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaDestinataria); + detalheEvento.gCredito = gCreditos; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento de Manifestação sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + IndicadorAceitacao indicadorAceitacao, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaSucessora); + detalheEvento.indAceitacao = indicadorAceitacao; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento de Manifestação sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + IndicadorAceitacao indicadorAceitacao, + Estado? ufAutor, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaSucessora); + detalheEvento.indAceitacao = indicadorAceitacao; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento de Manifestação do Fisco sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada. + /// Motivo do deferimento + /// Descrição do deferimento + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + IndicadorDeferimento indicadorDeferimento, + MotivoDeferimento motivoDeferimento, + string descricaoDeferimento, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taFisco); + detalheEvento.indDeferimento = indicadorDeferimento; + detalheEvento.cMotivo = motivoDeferimento; + detalheEvento.xMotivo = descricaoDeferimento; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento de Manifestação do Fisco sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Indicador de aceitação do valor de transferência para a empresa que emitiu a nota referenciada. + /// Motivo do deferimento + /// Descrição do deferimento + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + IndicadorDeferimento indicadorDeferimento, + MotivoDeferimento motivoDeferimento, + string descricaoDeferimento, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taFisco); + detalheEvento.indDeferimento = indicadorDeferimento; + detalheEvento.cMotivo = motivoDeferimento; + detalheEvento.xMotivo = descricaoDeferimento; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento permitir que o autor de um Evento já autorizado possa proceder o seu cancelamento + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Código do evento autorizado a ser cancelado + /// Número do Protocolo de Autorização do Evento a ser cancelado + /// + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancelamentoDeEvento(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + string tpEventoAut, + string nProtEvento, + TipoAutor tipoAutor, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoCancelamentoDeEvento; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeCancelamentoDeEvento; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalheEvento = new detEvento + { + versao = versaoServicoRecepcaoString, + descEvento = nfeTipoEvento.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + verAplic = versaoAplicativo ?? "1.0", + tpEventoAut = tpEventoAut, + nProtEvento = nProtEvento + }; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, + servicoNfe, + versaoServicoRecepcao, + deveAssinar: true, + evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento importação em ALC/ZFM não convertida em isenção + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Lista de informações por item da NF-e de importação + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + List informacoesPorItemDeImportacao, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeImportacaoEmAlcZfmNaoConvertidaEmIsencao; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaEmitente); + detalhesEvento.gConsumo = informacoesPorItemDeImportacao; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Lista de informações por item da Nota de Aquisição + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + List informacoesPorItemDaNotaDeAquisicao, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfePerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaDestinataria); + detalhesEvento.gPerecimento = informacoesPorItemDaNotaDeAquisicao; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Lista de informações por item da Nota de Fornecimento + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + List informacoesPorItemDaNotaDeFornecimento, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfePerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaEmitente); + detalhesEvento.gPerecimento = informacoesPorItemDaNotaDeFornecimento; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento fornecimento não realizado com pagamento antecipado + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Lista de informações por item da Nota de Pagamento antecipado + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + List informacoesPorItemDaNotaDePagamentoAntecipado, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeFornecimentoNaoRealizadoComPagamentoAntecipado; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaEmitente); + detalhesEvento.gItemNaoFornecido = informacoesPorItemDaNotaDePagamentoAntecipado; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + /// + /// Serviço para evento de atualização da data de previsão de entrega + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Data prevista para entrega + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoAtualizacaoDaDataDePrevisaoDeEntrega(int idLote, + int sequenciaEvento, + string cpfCnpj, + string chaveNFe, + DateTime dataPrevistaEntrega, + Estado? ufAutor = null, + string versaoAplicativo = null, + DateTimeOffset? dataHoraEvento = null) + { + const ServicoNFe servicoNfe = ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega; + const NFeTipoEvento nfeTipoEvento = NFeTipoEvento.TeNfeAtualizacaoDaDataDePrevisaoDeEntrega; + var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; + var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); + + var detalhesEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, TipoAutor.taEmpresaEmitente); + detalhesEvento.dPrevEntrega = dataPrevistaEntrega; + + var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalhesEvento); + var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); + + var retornoRecepcaoEvento = EnviarEObterRetornoRecepcaoEvento(idLote, servicoNfe, versaoServicoRecepcao, deveAssinar: true, evento); + + return retornoRecepcaoEvento; + } + + private detEvento ObterDetalhesEvento(string versaoServico, string versaoAplicativo, NFeTipoEvento nfeTipoEvento, Estado? cOrgaoAutor, TipoAutor tipoAutor) + { + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = nfeTipoEvento.Descricao(), + cOrgaoAutor = cOrgaoAutor ?? _cFgServico.cUF, + tpAutor = tipoAutor, + verAplic = versaoAplicativo ?? "1.0" + }; + + return detEvento; + } + + private infEventoEnv ObterInformacoesEventoEnv(int sequenciaEvento, + string chaveNFe, + string cpfCnpj, + string versaoServico, + Estado cOrgao, + DateTimeOffset? dhEvento, + NFeTipoEvento nfeTipoEvento, + detEvento detalheEvento) + { + var infEvento = new infEventoEnv + { + cOrgao = cOrgao, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = nfeTipoEvento, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detalheEvento + }; + + if (cpfCnpj.Length == 11) + infEvento.CPF = cpfCnpj; + else + infEvento.CNPJ = cpfCnpj; + + return infEvento; + } + + private evento ObterEvento(string versaoServico, infEventoEnv informacoesEventoEnv) + { + var evento = new evento + { + versao = versaoServico, + infEvento = informacoesEventoEnv + }; + + return evento; + } + + private RetornoRecepcaoEvento EnviarEObterRetornoRecepcaoEvento(int idLote, ServicoNFe servicoNfe, VersaoServico versaoServico, bool deveAssinar, params evento[] eventos) + { + var retornoRecepcaoEvento = RecepcaoEvento(idLote, + eventos.ToList(), + servicoNfe, + versaoServico, + assinar: deveAssinar); + + return retornoRecepcaoEvento; + } + + /// + /// Consulta a situação cadastral, com base na UF/Documento + /// O documento pode ser: IE, CNPJ ou CPF + /// + /// Sigla da UF consultada, informar 'SU' para SUFRAMA + /// Tipo de documento a ser consultado + /// Documento a ser consultado + /// Retorna um objeto da classe RetornoNfeConsultaCadastro com o retorno do serviço NfeConsultaCadastro + public RetornoNfeConsultaCadastro NfeConsultaCadastro(string uf, ConsultaCadastroTipoDocumento tipoDocumento, string documento) + { + var versaoServico = ServicoNFe.NfeConsultaCadastro.VersaoServicoParaString(_cFgServico.VersaoNfeConsultaCadastro); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NfeConsultaCadastro, uf); + + if (_cFgServico.VersaoNfeConsultaCadastro != VersaoServico.Versao400) + { + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + } + + #endregion + + #region Cria o objeto ConsCad + + var pedConsulta = new ConsCad + { + versao = versaoServico, + infCons = new infConsEnv { UF = uf } + }; + + switch (tipoDocumento) + { + case ConsultaCadastroTipoDocumento.Ie: + pedConsulta.infCons.IE = documento; + break; + case ConsultaCadastroTipoDocumento.Cnpj: + pedConsulta.infCons.CNPJ = documento; + break; + case ConsultaCadastroTipoDocumento.Cpf: + pedConsulta.infCons.CPF = documento; + break; + default: + throw new ArgumentOutOfRangeException("tipoDocumento", tipoDocumento, null); + } + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlConsulta = pedConsulta.ObterXmlString(); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-ped-cad.xml", xmlConsulta); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NfeConsultaCadastro, _cFgServico.VersaoNfeConsultaCadastro, xmlConsulta, cfgServico: _cFgServico); + + var dadosConsulta = new XmlDocument(); + dadosConsulta.LoadXml(xmlConsulta); + + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosConsulta); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeConsultaCadastro, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retConsulta = ExtretConsCad.CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-cad.xml", retornoXmlString); + + return new RetornoNfeConsultaCadastro(pedConsulta.ObterXmlString(), retConsulta.ObterXmlString(), + retornoXmlString, retConsulta); + + #endregion + } + + public RetornoConsultaGtin ConsultaGtin(string gtin) + { + #region Cria o objeto wdsl para consulta + var ws = CriarServico(ServicoNFe.ConsultaGtin); + #endregion + + #region Cria o objeto consGTIN + + var consGtin = new consGTIN + { + versao = "1.00", + GTIN = gtin + }; + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlConsulta = consGtin.ObterXmlString(); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-cons-gtin.xml", xmlConsulta); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.ConsultaGtin, _cFgServico.VersaoNfeConsultaCadastro, xmlConsulta, cfgServico: _cFgServico); + + var dadosConsulta = new XmlDocument(); + dadosConsulta.LoadXml(xmlConsulta); + + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosConsulta); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeConsultaCadastro, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retConsulta = new retConsGTIN().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-consGtin.xml", retornoXmlString); + + return new RetornoConsultaGtin(consGtin.ObterXmlString(), retConsulta.ObterXmlString(), + retornoXmlString, retConsulta); + + #endregion + } + + /// + /// Serviço destinado à distribuição de informações resumidas e documentos fiscais eletrônicos de interesse de um ator, seja este pessoa física ou jurídica. + /// + /// Código da UF do Autor + /// CNPJ/CPF do interessado no DF-e + /// Último NSU recebido pelo Interessado + /// Número Sequencial Único + /// Chave eletronica da NF-e + /// Retorna um objeto da classe RetornoNfeDistDFeInt com os documentos de interesse do CNPJ/CPF pesquisado + public RetornoNfeDistDFeInt NfeDistDFeInteresse(string ufAutor, string documento, string ultNSU = "0", string nSU = "0", string chNFE = "") + { + var versaoServico = ServicoNFe.NFeDistribuicaoDFe.VersaoServicoParaString(_cFgServico.VersaoNFeDistribuicaoDFe); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NFeDistribuicaoDFe); + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + + #endregion + + #region Cria o objeto distDFeInt + + var pedDistDFeInt = new distDFeInt + { + versao = versaoServico, + tpAmb = _cFgServico.tpAmb, + cUFAutor = _cFgServico.cUF + }; + + if (documento.Length == 11) + pedDistDFeInt.CPF = documento; + if (documento.Length > 11) + pedDistDFeInt.CNPJ = documento; + + if (string.IsNullOrEmpty(chNFE)) + pedDistDFeInt.distNSU = new distNSU { ultNSU = ultNSU.PadLeft(15, '0') }; + + if (!nSU.Equals("0")) + { + pedDistDFeInt.consNSU = new consNSU { NSU = nSU.PadLeft(15, '0') }; + pedDistDFeInt.distNSU = null; + pedDistDFeInt.consChNFe = null; + } + + if (!string.IsNullOrEmpty(chNFE)) + { + pedDistDFeInt.consChNFe = new consChNFe { chNFe = chNFE }; + pedDistDFeInt.consNSU = null; + pedDistDFeInt.distNSU = null; + } + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlConsulta = pedDistDFeInt.ObterXmlString(); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-ped-DistDFeInt.xml", xmlConsulta); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NFeDistribuicaoDFe, _cFgServico.VersaoNFeDistribuicaoDFe, xmlConsulta, cfgServico: _cFgServico); + + var dadosConsulta = new XmlDocument(); + dadosConsulta.LoadXml(xmlConsulta); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosConsulta); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeDistribuicaoDFe, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retConsulta = new retDistDFeInt().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-distDFeInt.xml", retornoXmlString); + + #region Obtém um retDistDFeInt de cada evento, adiciona os documentos ao resultado e salva-os em arquivo + + if (retConsulta.loteDistDFeInt != null && _cFgServico.UnZip) + { + foreach (var dFeInt in retConsulta.loteDistDFeInt) + { + var conteudo = Compressao.Unzip(dFeInt.XmlNfe); + var chNFe = string.Empty; + + if (conteudo.StartsWith("(conteudo); + chNFe = retConteudo.chNFe; + dFeInt.ResNFe = retConteudo; + } + else if (conteudo.StartsWith("(conteudo); + chNFe = procEventoNFeConteudo.retEvento.infEvento.chNFe; + dFeInt.ProcEventoNFe = procEventoNFeConteudo; + } + else if (conteudo.StartsWith("(conteudo); + chNFe = resEventoConteudo.chNFe; + dFeInt.ResEvento = resEventoConteudo; + } + else if (conteudo.StartsWith("(conteudo); + chNFe = resEventoConteudo.protNFe.infProt.chNFe; + dFeInt.NfeProc = resEventoConteudo; + } + + var schema = dFeInt.schema.Split('_'); + if (chNFe == string.Empty) + chNFe = DateTime.Now.ParaDataHoraString() + "_SEMCHAVE"; + + SalvarArquivoXml(chNFe + "-" + schema[0] + ".xml", conteudo); + } + } + + #endregion + + return new RetornoNfeDistDFeInt(pedDistDFeInt.ObterXmlString(), retConsulta.ObterXmlString(), retornoXmlString, retConsulta); + + #endregion + } + + #region Recepção + + /// + /// Envia uma ou mais NFe + /// + /// + /// + /// Retorna um objeto da classe RetornoNfeRecepcao com com os dados do resultado da transmissão + public RetornoNfeRecepcao NfeRecepcao(int idLote, List nFes) + { + var versaoServico = ServicoNFe.NfeRecepcao.VersaoServicoParaString(_cFgServico.VersaoNfeRecepcao); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NfeRecepcao); + + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + + #endregion + + #region Cria o objeto enviNFe + + var pedEnvio = new enviNFe2(versaoServico, idLote, nFes); + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlEnvio = pedEnvio.ObterXmlString(); + + if (_cFgServico.cUF == Estado.PR) + //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/33 + xmlEnvio = xmlEnvio.Replace("", ""); + + SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NfeRecepcao, _cFgServico.VersaoNfeRecepcao, xmlEnvio, cfgServico: _cFgServico); + + var dadosEnvio = new XmlDocument(); + dadosEnvio.LoadXml(xmlEnvio); + + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosEnvio); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeRecepcao, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retEnvio = new retEnviNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(idLote + "-rec.xml", retornoXmlString); + + return new RetornoNfeRecepcao(pedEnvio.ObterXmlString(), retEnvio.ObterXmlString(), retornoXmlString, + retEnvio); + + #endregion + } + + /// + /// Recebe o retorno do processamento de uma ou mais NFe's pela SEFAZ + /// + /// + /// Retorna um objeto da classe RetornoNfeRetRecepcao com com os dados do processamento do lote + public RetornoNfeRetRecepcao NfeRetRecepcao(string recibo) + { + var versaoServico = ServicoNFe.NfeRetRecepcao.VersaoServicoParaString(_cFgServico.VersaoNfeRetRecepcao); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NfeRetRecepcao); + + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + + #endregion + + #region Cria o objeto consReciNFe + + var pedRecibo = new consReciNFe + { + versao = versaoServico, + tpAmb = _cFgServico.tpAmb, + nRec = recibo + }; + + #endregion + + #region Envia os dados e obtém a resposta + + var xmlRecibo = pedRecibo.ObterXmlString(); + var dadosRecibo = new XmlDocument(); + dadosRecibo.LoadXml(xmlRecibo); + + SalvarArquivoXml(recibo + "-ped-rec.xml", xmlRecibo); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosRecibo); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeRetRecepcao, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retRecibo = new retConsReciNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(recibo + "-pro-rec.xml", retornoXmlString); + + return new RetornoNfeRetRecepcao(pedRecibo.ObterXmlString(), retRecibo.ObterXmlString(), retornoXmlString, + retRecibo); + + #endregion + } + + #endregion + + #region Autorização + + /// + /// Envia uma ou mais NFe + /// + /// ID do Lote + /// Indicador de Sincronização + /// Lista de NFes a serem enviadas + /// Define se a mensagem será enviada para a SEFAZ compactada + /// Retorna um objeto da classe RetornoNFeAutorizacao com com os dados do resultado da transmissão + public RetornoNFeAutorizacao NFeAutorizacao(int idLote, IndicadorSincronizacao indSinc, List nFes, + bool compactarMensagem = false) + { + if (_cFgServico.VersaoNFeAutorizacao != VersaoServico.Versao400) + { + return NFeAutorizacaoVersao310(idLote, indSinc, nFes, compactarMensagem); + } + + if (_cFgServico.VersaoNFeAutorizacao == VersaoServico.Versao400) + { + return NFeAutorizacao4(idLote, indSinc, nFes, compactarMensagem); + } + + throw new InvalidOperationException("Versão inválida"); + } + + private RetornoNFeAutorizacao NFeAutorizacao4(int idLote, IndicadorSincronizacao indSinc, List nFes, bool compactarMensagem) + { + var versaoServico = ServicoNFe.NFeAutorizacao.VersaoServicoParaString(_cFgServico.VersaoNFeAutorizacao); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServicoAutorizacao(ServicoNFe.NFeAutorizacao, compactarMensagem); + + #endregion + + #region Cria o objeto enviNFe + + var pedEnvio = new enviNFe4(versaoServico, idLote, indSinc, nFes); + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlEnvio = _cFgServico.RemoverAcentos + ? pedEnvio.ObterXmlString().RemoverAcentos() + : pedEnvio.ObterXmlString(); + + if (_cFgServico.cUF == Estado.PR) + //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/33 + xmlEnvio = xmlEnvio.Replace("", ""); + + SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NFeAutorizacao, _cFgServico.VersaoNFeAutorizacao, xmlEnvio, cfgServico: _cFgServico); + + var dadosEnvio = new XmlDocument(); + dadosEnvio.LoadXml(xmlEnvio); + + XmlNode retorno; + try + { + if (compactarMensagem) + { + var xmlCompactado = Convert.ToBase64String(Compressao.Zip(xmlEnvio)); + retorno = ws.ExecuteZip(xmlCompactado); + } + else + { + retorno = ws.Execute(dadosEnvio); + } + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeAutorizacao, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retEnvio = new retEnviNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(idLote + "-rec.xml", retornoXmlString); + + return new RetornoNFeAutorizacao(xmlEnvio, retEnvio.ObterXmlString(), retornoXmlString, retEnvio); + + #endregion + } + + private RetornoNFeAutorizacao NFeAutorizacaoVersao310(int idLote, IndicadorSincronizacao indSinc, List nFes, bool compactarMensagem) + { + var versaoServico = ServicoNFe.NFeAutorizacao.VersaoServicoParaString(_cFgServico.VersaoNFeAutorizacao); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServicoAutorizacao(ServicoNFe.NFeAutorizacao, compactarMensagem); + + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + + #endregion + + #region Cria o objeto enviNFe + + var pedEnvio = new enviNFe3(versaoServico, idLote, indSinc, nFes); + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlEnvio = pedEnvio.ObterXmlString(); + if (_cFgServico.cUF == Estado.PR) + //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/33 + xmlEnvio = xmlEnvio.Replace("", ""); + + SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NFeAutorizacao, _cFgServico.VersaoNFeAutorizacao, xmlEnvio, cfgServico: _cFgServico); + + var dadosEnvio = new XmlDocument(); + dadosEnvio.LoadXml(xmlEnvio); + + XmlNode retorno; + try + { + if (compactarMensagem) + { + var xmlCompactado = Convert.ToBase64String(Compressao.Zip(xmlEnvio)); + retorno = ws.ExecuteZip(xmlCompactado); + } + else + { + retorno = ws.Execute(dadosEnvio); + } + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeAutorizacao, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retEnvio = new retEnviNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(idLote + "-rec.xml", retornoXmlString); + + return new RetornoNFeAutorizacao(pedEnvio.ObterXmlString(), retEnvio.ObterXmlString(), retornoXmlString, retEnvio); + + #endregion + } + + /// + /// Recebe o retorno do processamento de uma ou mais NFe's pela SEFAZ + /// + /// + /// Retorna um objeto da classe RetornoNFeRetAutorizacao com com os dados do processamento do lote + public RetornoNFeRetAutorizacao NFeRetAutorizacao(string recibo) + { + var versaoServico = ServicoNFe.NFeRetAutorizacao.VersaoServicoParaString(_cFgServico.VersaoNFeRetAutorizacao); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NFeRetAutorizacao); + + if (_cFgServico.VersaoNFeRetAutorizacao != VersaoServico.Versao400) + { + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + } + + #endregion + + #region Cria o objeto consReciNFe + + var pedRecibo = new consReciNFe + { + versao = versaoServico, + tpAmb = _cFgServico.tpAmb, + nRec = recibo + }; + + #endregion + + #region Envia os dados e obtém a resposta + + var xmlRecibo = pedRecibo.ObterXmlString(); + var dadosRecibo = new XmlDocument(); + dadosRecibo.LoadXml(xmlRecibo); + + SalvarArquivoXml(recibo + "-ped-rec.xml", xmlRecibo); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosRecibo); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeRetAutorizacao, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retRecibo = new retConsReciNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(recibo + "-pro-rec.xml", retornoXmlString); + + return new RetornoNFeRetAutorizacao(pedRecibo.ObterXmlString(), retRecibo.ObterXmlString(), retornoXmlString, retRecibo); + + #endregion + } + + #endregion + + /// + /// Consulta a Situação da NFe + /// + /// Retorna um objeto da classe RetornoNfeConsultaProtocolo com os dados da Situação da NFe + [Obsolete("Descontinuado pela Sefaz")] + public RetornoNfeDownload NfeDownloadNf(string cnpj, List chaves, string nomeSaida = "") + { + var versaoServico = ServicoNFe.NfeDownloadNF.VersaoServicoParaString(_cFgServico.VersaoNfeDownloadNF); + + #region Cria o objeto wdsl para envio do pedido de Download + + var ws = CriarServico(ServicoNFe.NfeDownloadNF); + + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + //Embora em http://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=#GO esse serviço está nas versões 2.00 e 3.10, ele rejeita se mandar a versão diferente de 1.00. Testado no Ambiente Nacional - (AN) + versaoDados = /*versaoServico*/ "1.00" + }; + + #endregion + + #region Cria o objeto downloadNFe + + var pedDownload = new downloadNFe + { + //Embora em http://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=#GO esse serviço está nas versões 2.00 e 3.10, ele rejeita se mandar a versão diferente de 1.00. Testado no Ambiente Nacional - (AN) + versao = /*versaoServico*/ "1.00", + CNPJ = cnpj, + tpAmb = _cFgServico.tpAmb, + chNFe = chaves + }; + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlDownload = pedDownload.ObterXmlString(); + + if (nomeSaida == "") + { + nomeSaida = cnpj; + } + + SalvarArquivoXml(nomeSaida + "-ped-down.xml", xmlDownload); + + if (_cFgServico.ValidarSchemas) + Validador.Valida(ServicoNFe.NfeDownloadNF, _cFgServico.VersaoNfeDownloadNF, xmlDownload, cfgServico: _cFgServico); + + var dadosDownload = new XmlDocument(); + dadosDownload.LoadXml(xmlDownload); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosDownload); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeDownloadNF, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retDownload = new retDownloadNFe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(nomeSaida + "-down.xml", retornoXmlString); + + return new RetornoNfeDownload(pedDownload.ObterXmlString(), retDownload.ObterXmlString(), retornoXmlString, retDownload); + + #endregion + } + + #region Adm CSC + + public RetornoAdmCscNFCe AdmCscNFCe(string raizCnpj, IdentificadorOperacaoCsc identificadorOperacaoCsc, string idCscASerRevogado = null, string codigoCscASerRevogado = null) + { + var versaoServico = ServicoNFe.NfceAdministracaoCSC.VersaoServicoParaString(_cFgServico.VersaoNfceAministracaoCSC); + + #region Cria o objeto wdsl para envio do pedido de Download + + var ws = CriarServico(ServicoNFe.NfceAdministracaoCSC); + + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + + #endregion + + #region Cria o objeto downloadNFe + + var admCscNFCe = new admCscNFCe + { + versao = versaoServico, + tpAmb = _cFgServico.tpAmb, + indOp = identificadorOperacaoCsc, + raizCNPJ = raizCnpj + }; + + if (identificadorOperacaoCsc == IdentificadorOperacaoCsc.ioRevogaCscAtivo) + { + admCscNFCe.dadosCsc = new dadosCsc + { + codigoCsc = codigoCscASerRevogado, + idCsc = idCscASerRevogado + }; + } + + #endregion + + #region Valida, Envia os dados e obtém a resposta + + var xmlAdmCscNfe = admCscNFCe.ObterXmlString(); + var dadosAdmnistracaoCsc = new XmlDocument(); + dadosAdmnistracaoCsc.LoadXml(xmlAdmCscNfe); + + SalvarArquivoXml(raizCnpj + "-adm-csc.xml", xmlAdmCscNfe); + + XmlNode retorno; + try + { + retorno = ws.Execute(dadosAdmnistracaoCsc); + } + catch (WebException ex) + { + throw FabricaComunicacaoException.ObterException(ServicoNFe.NfceAdministracaoCSC, ex); + } + + var retornoXmlString = retorno.OuterXml; + var retCsc = new retAdmCscNFCe().CarregarDeXmlString(retornoXmlString); + + SalvarArquivoXml(raizCnpj + "-ret-adm-csc.xml", retornoXmlString); + + return new RetornoAdmCscNFCe(admCscNFCe.ObterXmlString(), retCsc.ObterXmlString(), retornoXmlString, retCsc); + + #endregion + } + + #endregion + + + #region Implementação do padrão Dispose + + // Flag: Dispose já foi chamado? + private bool _disposed; + + // Implementação protegida do padrão Dispose. + private void Dispose(bool disposing) + { + if (_disposed) + return; + + if (disposing) + if (!_cFgServico.Certificado.ManterDadosEmCache && _controlarCertificado) + _certificado.Reset(); + _disposed = disposing; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + ~ServicosNFe() + { + Dispose(false); + } + + #endregion + } +} diff --git a/NFe.Testes/Impostos/ICMSGeral_Teste.cs b/NFe.Testes/Impostos/ICMSGeral_Teste.cs deleted file mode 100644 index 86792bd27..000000000 --- a/NFe.Testes/Impostos/ICMSGeral_Teste.cs +++ /dev/null @@ -1,155 +0,0 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; -using NFe.Classes.Informacoes.Emitente; -using NFe.Utils.Tributacao.Estadual; -using System; - -namespace NFe.Testes.Impostos -{ - [TestClass] - public class ICMSGeral_Teste - { - #region CRT - Normal - - [TestMethod] - [DataTestMethod] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, null, null)] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasilSemSimilar, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, 0, 0)] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraImportacaoDireta, DeterminacaoBaseIcms.DbiValorOperacao, 1000, 18, 180, 0, 0)] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraImportacaoDiretaSemSimilar, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, null, null)] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmNacional, DeterminacaoBaseIcms.DbiPrecoTabelado, 1000, 18, 180, null, null)] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmNacionalConteudoImportacaoInferiorIgual40, DeterminacaoBaseIcms.DbiPauta, 1000, 18, 180, 0, 0)] - public void ObterICMSBasico_ICMS00_Teste(CRT crt, OrigemMercadoria origem, DeterminacaoBaseIcms modBC, object vBC, object pICMS, object vICMS, object pFCP, object vFCP) - { - /** 1) Preparação **/ - var icmsGeral = new ICMSGeral() - { - orig = origem, - CST = Csticms.Cst00, - modBC = modBC, - vBC = Convert.ToDecimal(vBC), - pICMS = Convert.ToDecimal(pICMS), - vICMS = Convert.ToDecimal(vICMS), - pFCP = Convert.ToDecimal(pFCP), - vFCP = Convert.ToDecimal(vFCP) - }; - - /** 2) Execução **/ - var tagGerada = icmsGeral.ObterICMSBasico(crt); - - /** 2) Veerificação **/ - /** 2.1) Garante que o tipo da classe gerada foi correta**/ - Assert.IsInstanceOfType(tagGerada, typeof(ICMS00)); - - /** 2.2) Garante que o conteúdo repassado para as propriedades estejam corretos **/ - var tagICMSGerada = (tagGerada as ICMS00); - Assert.AreEqual(origem, tagICMSGerada.orig); - Assert.AreEqual(Csticms.Cst00, tagICMSGerada.CST); - Assert.AreEqual(modBC, tagICMSGerada.modBC); - Assert.AreEqual(Convert.ToDecimal(vBC), tagICMSGerada.vBC); - Assert.AreEqual(Convert.ToDecimal(pICMS), tagICMSGerada.pICMS); - Assert.AreEqual(Convert.ToDecimal(vICMS), tagICMSGerada.vICMS); - Assert.AreEqual(Convert.ToDecimal(pFCP), tagICMSGerada.pFCP); - Assert.AreEqual(Convert.ToDecimal(vFCP), tagICMSGerada.vFCP); - } - - [TestMethod] - [DataTestMethod] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, 0, 0, 0, DeterminacaoBaseIcmsSt.DbisListaNegativa, 15, 2, 1000, 18, 25, 0, 0, 0)] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmEstrangeiraAdquiridaBrasilSemSimilar, DeterminacaoBaseIcms.DbiMargemValorAgregado, 1000, 18, 180, 0, 0, 0, DeterminacaoBaseIcmsSt.DbisListaNegativa, 15, 2, 1000, 18, 25, 100, 10, 10)] - [DataRow(CRT.RegimeNormal, OrigemMercadoria.OmNacionalConteudoImportacaoInferiorIgual40, DeterminacaoBaseIcms.DbiMargemValorAgregado, 100, 18, 18, 0, 0, 0, DeterminacaoBaseIcmsSt.DbisListaNegativa, 15, 2, 1000, 18, 25, 0, 0, 0)] - public void ObterICMSBasico_ICMS10_Teste(CRT crt, OrigemMercadoria origem, DeterminacaoBaseIcms modBC, object vBC, object pICMS, object vICMS, object vBCFCP, object pFCP, object vFCP, DeterminacaoBaseIcmsSt modBCST, object pMVAST, object pRedBCST, object vBCST, object pICMSST, object vICMSST, object vBCFCPST, object pFCPST, object vFCPST) - { - /** 1) Preparação **/ - var icmsGeral = new ICMSGeral() - { - orig = origem, - CST = Csticms.Cst10, - modBC = modBC, - vBC = Convert.ToDecimal(vBC), - pICMS = Convert.ToDecimal(pICMS), - vICMS = Convert.ToDecimal(vICMS), - pFCP = Convert.ToDecimal(pFCP), - vFCP = Convert.ToDecimal(vFCP), - vBCFCP = Convert.ToDecimal(vBCFCP), - modBCST = modBCST, - pMVAST = Convert.ToDecimal(pMVAST), - pRedBCST = Convert.ToDecimal(pRedBCST), - vBCST = Convert.ToDecimal(vBCST), - pICMSST = Convert.ToDecimal(pICMSST), - vICMSST = Convert.ToDecimal(vICMSST), - vBCFCPST = Convert.ToDecimal(vBCFCPST), - pFCPST = Convert.ToDecimal(pFCPST), - vFCPST = Convert.ToDecimal(vFCPST) - }; - - /** 2) Execução **/ - var tagGerada = icmsGeral.ObterICMSBasico(crt); - - /** 2) Veerificação **/ - /** 2.1) Garante que o tipo da classe gerada foi correta**/ - Assert.IsInstanceOfType(tagGerada, typeof(ICMS10)); - - /** 2.2) Garante que o conteúdo repassado para as propriedades estejam corretos **/ - var tagICMSGerada = (tagGerada as ICMS10); - Assert.AreEqual(origem, tagICMSGerada.orig); - Assert.AreEqual(Csticms.Cst10, tagICMSGerada.CST); - Assert.AreEqual(modBC, tagICMSGerada.modBC); - Assert.AreEqual(Convert.ToDecimal(vBC), tagICMSGerada.vBC); - Assert.AreEqual(Convert.ToDecimal(pICMS), tagICMSGerada.pICMS); - Assert.AreEqual(Convert.ToDecimal(vICMS), tagICMSGerada.vICMS); - Assert.AreEqual(Convert.ToDecimal(pFCP), tagICMSGerada.pFCP); - Assert.AreEqual(Convert.ToDecimal(vFCP), tagICMSGerada.vFCP); - Assert.AreEqual(Convert.ToDecimal(vBCFCP), tagICMSGerada.vBCFCP); - Assert.AreEqual(modBCST, tagICMSGerada.modBCST); - Assert.AreEqual(Convert.ToDecimal(pMVAST), tagICMSGerada.pMVAST); - Assert.AreEqual(Convert.ToDecimal(pRedBCST), tagICMSGerada.pRedBCST); - Assert.AreEqual(Convert.ToDecimal(vBCST), tagICMSGerada.vBCST); - Assert.AreEqual(Convert.ToDecimal(pICMSST), tagICMSGerada.pICMSST); - Assert.AreEqual(Convert.ToDecimal(vICMSST), tagICMSGerada.vICMSST); - Assert.AreEqual(Convert.ToDecimal(vBCFCPST), tagICMSGerada.vBCFCPST); - Assert.AreEqual(Convert.ToDecimal(pFCPST), tagICMSGerada.pFCPST); - Assert.AreEqual(Convert.ToDecimal(vFCPST), tagICMSGerada.vFCPST); - } - - //TODO: Falta criar os métodos de testes dos demais CSTs do ICMS (CTR = Normal) - - #endregion - - #region CRT - Simples - - [TestMethod] - [DataTestMethod] - [DataRow(CRT.SimplesNacional, OrigemMercadoria.OmEstrangeiraAdquiridaBrasil, 100, 18)] - public void ObterICMSBasico_CSOSN101_Teste(CRT crt, OrigemMercadoria origem, object pCredSN, object vCredICMSSN) - { - /** 1) Preparação **/ - var icmsGeral = new ICMSGeral() - { - orig = origem, - CSOSN = Csosnicms.Csosn101, - pCredSN = Convert.ToDecimal(pCredSN), - vCredICMSSN = Convert.ToDecimal(vCredICMSSN) - }; - - /** 2) Execução **/ - var tagGerada = icmsGeral.ObterICMSBasico(crt); - - /** 2) Veerificação **/ - /** 2.1) Garante que o tipo da classe gerada foi correta**/ - Assert.IsInstanceOfType(tagGerada, typeof(ICMSSN101)); - - /** 2.2) Garante que o conteúdo repassado para as propriedades estejam corretos **/ - var tagICMSGerada = (tagGerada as ICMSSN101); - Assert.AreEqual(origem, tagICMSGerada.orig); - Assert.AreEqual(Csosnicms.Csosn101, tagICMSGerada.CSOSN); - Assert.AreEqual(Convert.ToDecimal(pCredSN), tagICMSGerada.pCredSN); - Assert.AreEqual(Convert.ToDecimal(vCredICMSSN), tagICMSGerada.vCredICMSSN); - } - - //TODO: Falta criar os métodos de testes dos demais CSOSNs do ICMS (CTR = Simples) - - #endregion - } -} diff --git a/NFe.Testes/NFe.Testes.csproj b/NFe.Testes/NFe.Testes.csproj deleted file mode 100644 index f464c10db..000000000 --- a/NFe.Testes/NFe.Testes.csproj +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - Debug - AnyCPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1} - Library - Properties - NFe.Testes - NFe.Testes - v4.6.1 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 15.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - - %24/SOL/trunk/src/Base/Componentes/Zeus/NFe.Testes - . - http://serv-itsa:8080/tfs/defaultcollection - {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\Microsoft.VisualStudio.TestPlatform.14.0.0.1\lib\net20\Microsoft.VisualStudio.TestPlatform.TestFramework.dll - - - ..\packages\Microsoft.VisualStudio.TestPlatform.14.0.0.1\lib\net20\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll - - - - - - - - - - - - - - - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8} - DFe.Classes - - - {29CA1DA2-440D-484B-951A-CF1B2EB27984} - NFe.Classes - - - {E35E7C4A-5690-4979-8B43-002975B48EAA} - NFe.Utils - - - - - - - - - - - \ No newline at end of file diff --git a/NFe.Testes/Properties/AssemblyInfo.cs b/NFe.Testes/Properties/AssemblyInfo.cs deleted file mode 100644 index a9a78a288..000000000 --- a/NFe.Testes/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -[assembly: AssemblyTitle("NFe.Testes")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Testes")] -[assembly: AssemblyCopyright("Copyright © 2017-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -[assembly: ComVisible(false)] - -[assembly: Guid("3e44ea28-96ae-4fac-9e38-adc2e12930f1")] - -// [assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/NFe.Testes/packages.config b/NFe.Testes/packages.config deleted file mode 100644 index de1379244..000000000 --- a/NFe.Testes/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/NFe.Utils.Standard/NFe.Utils.Standard.csproj b/NFe.Utils.Standard/NFe.Utils.Standard.csproj deleted file mode 100644 index 24b3e178a..000000000 --- a/NFe.Utils.Standard/NFe.Utils.Standard.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - netstandard2.0 - - - - - - - - - - - diff --git a/NFe.Utils.Testes/ChaveFiscalTesteUnitario.cs b/NFe.Utils.Testes/ChaveFiscalTesteUnitario.cs new file mode 100644 index 000000000..7d17f9955 --- /dev/null +++ b/NFe.Utils.Testes/ChaveFiscalTesteUnitario.cs @@ -0,0 +1,43 @@ +using System; +using DFe.Utils; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using NFe.Utils.Testes.Dados; +using Xunit; + +namespace NFe.Utils.Testes; + +public class ChaveFiscalTesteUnitario +{ + [Theory(DisplayName = "Dado cnpj alfanumérico, quando obter chave fiscal, então não deve lançar exceção.")] + [InlineData("T6J3XFX0IVDD47")] + [InlineData("W2MNK0KZ000190")] + public void DadoCnpjAlfanumericoQuandoObterChaveFiscalEntaoNaoDeveLancarExcecao(string cnpj) + { + // Arrange + var estado = Estado.SE; + var data = DateTime.Now; + var modelo = ModeloDocumento.NFe; + var serie = 100; + var numero = 12345; + var tipoEmissao = 1; + var cNf = 12345678; + + // Act + var excecaoCapturada = Record.Exception(() => ChaveFiscal.ObterChave(estado, data, cnpj, modelo, serie, numero, tipoEmissao, cNf)); + + // Assert + Assert.Null(excecaoCapturada); + } + + [Theory(DisplayName = "Dado caractere, quando obter valor do caractere, então deve retornar o valor esperado.")] + [MemberData(nameof(ChaveFiscalDadosDeTeste.ObterCaracteresEValores), MemberType = typeof(ChaveFiscalDadosDeTeste))] + public void DadoCaractereQuandoObterValorEntaoDeveRetornarValorEsperado(char caractere, int valorEsperado) + { + // Act + var valorObtido = ChaveFiscal.ObterValorDoCaractere(caractere); + + // Assert + Assert.Equal(valorEsperado, valorObtido); + } +} diff --git a/NFe.Utils.Testes/ConversaoTesteUnitario.cs b/NFe.Utils.Testes/ConversaoTesteUnitario.cs new file mode 100644 index 000000000..8f3361cf8 --- /dev/null +++ b/NFe.Utils.Testes/ConversaoTesteUnitario.cs @@ -0,0 +1,18 @@ +using DadosDeTestes.NFe.Utils; +using Xunit; + +namespace NFe.Utils.Testes; + +public class ConversaoTesteUnitario +{ + [Theory(DisplayName = "Dado dados em string para geração do hex sha1 de string, quando obter hex sha1 de string, então deve obter hex sha1 de string.")] + [MemberData(nameof(ConversaoDadosDeTeste.ObterDadosParaGerarHashSha1DeStringEValorEsperado), MemberType = typeof(ConversaoDadosDeTeste))] + public void DadoDadosEmStringParaGeracaoDoHexSha1DeStringQuandoObterHexSha1DeStringEntaoDeveObterHexSha1DeString(string dadosEmString, string stringEsperada) + { + // Act + var valorRetornado = Conversao.ObterHexSha1DeString(dadosEmString); + + // Assert + Assert.Equal(stringEsperada, valorRetornado); + } +} \ No newline at end of file diff --git a/NFe.Utils.Testes/Dados/ChaveFiscalDadosDeTeste.cs b/NFe.Utils.Testes/Dados/ChaveFiscalDadosDeTeste.cs new file mode 100644 index 000000000..7bf54ebe1 --- /dev/null +++ b/NFe.Utils.Testes/Dados/ChaveFiscalDadosDeTeste.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; + +namespace NFe.Utils.Testes.Dados; + +public static class ChaveFiscalDadosDeTeste +{ + public static IEnumerable ObterCaracteresEValores() + { + yield return new object[] { '0', 0 }; + yield return new object[] { '1', 1 }; + yield return new object[] { '2', 2 }; + yield return new object[] { '3', 3 }; + yield return new object[] { '4', 4 }; + yield return new object[] { '5', 5 }; + yield return new object[] { '6', 6 }; + yield return new object[] { '7', 7 }; + yield return new object[] { '8', 8 }; + yield return new object[] { '9', 9 }; + + yield return new object[] { 'A', 17 }; + yield return new object[] { 'B', 18 }; + yield return new object[] { 'C', 19 }; + yield return new object[] { 'D', 20 }; + yield return new object[] { 'E', 21 }; + yield return new object[] { 'F', 22 }; + yield return new object[] { 'G', 23 }; + yield return new object[] { 'H', 24 }; + yield return new object[] { 'I', 25 }; + yield return new object[] { 'J', 26 }; + yield return new object[] { 'K', 27 }; + yield return new object[] { 'L', 28 }; + yield return new object[] { 'M', 29 }; + yield return new object[] { 'N', 30 }; + yield return new object[] { 'O', 31 }; + yield return new object[] { 'P', 32 }; + yield return new object[] { 'Q', 33 }; + yield return new object[] { 'R', 34 }; + yield return new object[] { 'S', 35 }; + yield return new object[] { 'T', 36 }; + yield return new object[] { 'U', 37 }; + yield return new object[] { 'V', 38 }; + yield return new object[] { 'W', 39 }; + yield return new object[] { 'X', 40 }; + yield return new object[] { 'Y', 41 }; + yield return new object[] { 'Z', 42 }; + } +} diff --git a/NFe.Utils.Testes/EnderecadorTestes.cs b/NFe.Utils.Testes/EnderecadorTestes.cs index b6377b46c..c3eb90acb 100644 --- a/NFe.Utils.Testes/EnderecadorTestes.cs +++ b/NFe.Utils.Testes/EnderecadorTestes.cs @@ -69,6 +69,9 @@ public EstadosData() todosOsEstados.Remove(Estado.EX); todosOsEstados.Remove(Estado.PA); + // UF autorizadora + todosOsEstados.Remove(Estado.SVRS); + var tiposAmbiente = Enum.GetValues(typeof(TipoAmbiente)).Cast().ToList(); var servicosAutorizacao = new[] {ServicoNFe.NFeAutorizacao, ServicoNFe.NFeRetAutorizacao}; diff --git a/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs b/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs index da5066c12..4427804f2 100644 --- a/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs +++ b/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs @@ -28,6 +28,9 @@ public EstadosAmbientesData() todosOsEstados.Remove(Estado.AN); todosOsEstados.Remove(Estado.EX); + // UF autorizadora + todosOsEstados.Remove(Estado.SVRS); + //Não divulgaram as urls para homologação e produção no ENCAT todosOsEstados.Remove(Estado.CE); todosOsEstados.Remove(Estado.ES); diff --git a/NFe.Utils.Testes/NFe.Utils.Testes.csproj b/NFe.Utils.Testes/NFe.Utils.Testes.csproj index b0c1956b4..d0365598d 100644 --- a/NFe.Utils.Testes/NFe.Utils.Testes.csproj +++ b/NFe.Utils.Testes/NFe.Utils.Testes.csproj @@ -1,20 +1,27 @@ - + - - netcoreapp2.0 + + net6.0 + false + + - false - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + - - - - - - - - - - + + + + + + + diff --git a/Shared.NFe.Utils/AdmCsc/ExtAdmCscNFCe.cs b/NFe.Utils/AdmCsc/ExtAdmCscNFCe.cs similarity index 100% rename from Shared.NFe.Utils/AdmCsc/ExtAdmCscNFCe.cs rename to NFe.Utils/AdmCsc/ExtAdmCscNFCe.cs diff --git a/Shared.NFe.Utils/AdmCsc/ExtretAdmCscNFCe.cs b/NFe.Utils/AdmCsc/ExtretAdmCscNFCe.cs similarity index 100% rename from Shared.NFe.Utils/AdmCsc/ExtretAdmCscNFCe.cs rename to NFe.Utils/AdmCsc/ExtretAdmCscNFCe.cs diff --git a/Shared.NFe.Utils/Annotations.cs b/NFe.Utils/Annotations.cs similarity index 100% rename from Shared.NFe.Utils/Annotations.cs rename to NFe.Utils/Annotations.cs diff --git a/Shared.NFe.Utils/Assinatura/Assinador.cs b/NFe.Utils/Assinatura/Assinador.cs similarity index 98% rename from Shared.NFe.Utils/Assinatura/Assinador.cs rename to NFe.Utils/Assinatura/Assinador.cs index 6e11e5c5d..8ffcc5a52 100644 --- a/Shared.NFe.Utils/Assinatura/Assinador.cs +++ b/NFe.Utils/Assinatura/Assinador.cs @@ -91,12 +91,13 @@ public static Signature ObterAssinatura(T objeto, string id, X509Certificate2 try { var documento = new XmlDocument { PreserveWhitespace = true }; - - documento.LoadXml(cfgServicoRemoverAcentos + var xml = cfgServicoRemoverAcentos ? FuncoesXml.ClasseParaXmlString(objetoLocal).RemoverAcentos() - : FuncoesXml.ClasseParaXmlString(objetoLocal)); + : FuncoesXml.ClasseParaXmlString(objetoLocal); + + documento.LoadXml(xml); - var docXml = new SignedXml(documento) { SigningKey = certificadoDigital.PrivateKey }; + var docXml = new SignedXml(documento) { SigningKey = certificadoDigital.GetRSAPrivateKey() }; docXml.SignedInfo.SignatureMethod = signatureMethod; diff --git a/Shared.NFe.Utils/Autorizacao/ExtenviNFe3.cs b/NFe.Utils/Autorizacao/ExtenviNFe3.cs similarity index 100% rename from Shared.NFe.Utils/Autorizacao/ExtenviNFe3.cs rename to NFe.Utils/Autorizacao/ExtenviNFe3.cs diff --git a/Shared.NFe.Utils/Autorizacao/ExtenviNFe4.cs b/NFe.Utils/Autorizacao/ExtenviNFe4.cs similarity index 100% rename from Shared.NFe.Utils/Autorizacao/ExtenviNFe4.cs rename to NFe.Utils/Autorizacao/ExtenviNFe4.cs diff --git a/NFe.Utils/ConfiguracaoServico.cs b/NFe.Utils/ConfiguracaoServico.cs new file mode 100644 index 000000000..64834ae0b --- /dev/null +++ b/NFe.Utils/ConfiguracaoServico.cs @@ -0,0 +1,647 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Net; +using System.Runtime.CompilerServices; +using DFe.Classes.Entidades; +using DFe.Classes.Flags; +using DFe.Utils; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Servicos.Tipos; +using NFe.Utils.Annotations; +using NFe.Utils.Enderecos; + +namespace NFe.Utils +{ + public sealed class ConfiguracaoServico : INotifyPropertyChanged + { + private static volatile ConfiguracaoServico _instancia; + private static readonly object SyncRoot = new object(); + private string _diretorioSchemas; + private bool _salvarXmlServicos; + private VersaoServico _versaoLayout; + private Estado _cUf; + private TipoAmbiente _tpAmb; + private TipoEmissao _tpEmis; + private ModeloDocumento _modeloDocumento; + private bool _defineVersaoServicosAutomaticamente = true; + private bool _unZip = true; + private VersaoServico _versaoRecepcaoEventoCceCancelamento; + private VersaoServico _versaoRecepcaoEventoInsucessoEntrega; + private VersaoServico _versaoRecepcaoEventoComprovanteEntrega; + private VersaoServico _versaoRecepcaoEventoConciliacaoFinanceira; + private VersaoServico _versaoRecepcaoEventoEpec; + private VersaoServico _versaoRecepcaoEventoManifestacaoDestinatario; + private VersaoServico _versaoRecepcaoEventoAtorInteressado; + private VersaoServico _versaoNfeRecepcao; + private VersaoServico _versaoNfeRetRecepcao; + private VersaoServico _versaoNfeConsultaCadastro; + private VersaoServico _versaoNfeInutilizacao; + private VersaoServico _versaoNfeConsultaProtocolo; + private VersaoServico _versaoNfeStatusServico; + private VersaoServico _versaoNFeAutorizacao; + private VersaoServico _versaoNFeRetAutorizacao; + private VersaoServico _versaoNFeDistribuicaoDFe; + private VersaoServico _versaoNfeConsultaDest; + private VersaoServico _versaoNfeDownloadNf; + private VersaoServico _versaoNfceAministracaoCsc; + private VersaoServico _versaoConsultaGTIN; + private VersaoServico _versaoRecepcaoEventosDeApuracaoDoIbsECbs; + + public ConfiguracaoServico() + { + Certificado = + new ConfiguracaoCertificado + { + SignatureMethodSignedXml = "http://www.w3.org/2000/09/xmldsig#rsa-sha1", + DigestMethodReference = "http://www.w3.org/2000/09/xmldsig#sha1" + }; + + cUF = Estado.AC; + } + + static ConfiguracaoServico() + { + } + + /// + /// Configurações relativas ao Certificado Digital + /// + public ConfiguracaoCertificado Certificado { get; set; } + + /// + /// Tempo máximo de espera pela resposta do webservice, em milisegundos + /// + public int TimeOut { get; set; } + + /// + /// Estado de destino do webservice + /// + public Estado cUF + { + get { return _cUf; } + set + { + if (value == _cUf) return; + _cUf = value; + OnPropertyChanged(); + AtualizaVersoes(); + } + } + + /// + /// Tipo de ambiente do webservice (Produção, Homologação) + /// + public TipoAmbiente tpAmb + { + get { return _tpAmb; } + set + { + if (value == _tpAmb) return; + _tpAmb = value; + OnPropertyChanged(); + AtualizaVersoes(); + } + } + + /// + /// Tipo de Emissão da NF-e + /// + public TipoEmissao tpEmis + { + get { return _tpEmis; } + set + { + if (value == _tpEmis) return; + _tpEmis = value; + OnPropertyChanged(); + AtualizaVersoes(); + } + } + + /// + /// Tipo de documento que está sendo referenciado nos webservices + /// + public ModeloDocumento ModeloDocumento + { + get { return _modeloDocumento; } + set + { + if (value == _modeloDocumento) return; + _modeloDocumento = value; + OnPropertyChanged(); + AtualizaVersoes(); + } + } + + public VersaoServico VersaoLayout + { + get { return _versaoLayout; } + set + { + if (value == _versaoLayout) return; + _versaoLayout = value; + OnPropertyChanged(); + AtualizaVersoes(); + } + } + + /// + /// Determina se as versões dos serviços serão atualizadas automaticamente quando um dos seguintes atributos forem alterados: + /// + /// + /// + /// + /// + /// + public bool DefineVersaoServicosAutomaticamente + { + get + { + return _defineVersaoServicosAutomaticamente; + } + set + { + if (value == _defineVersaoServicosAutomaticamente) return; + _defineVersaoServicosAutomaticamente = value; + OnPropertyChanged(); + AtualizaVersoes(); + } + } + + /// + /// Valor True, será descompactado os arquivos, + /// Valor False, os valor não será descompactado e a classes não serão preenchidas + /// + public bool UnZip + { + get + { + return _unZip; + } + set + { + _unZip = value; + OnPropertyChanged(); + } + } + + + /// + /// Atualiza as versões dos serviços + /// Obs: As versões do serviços podem variar em função da UF(), do tipo de ambiente(), do modelo de documento() e da forma de emissão() + /// + private void AtualizaVersoes() + { + if (!_defineVersaoServicosAutomaticamente) return; + + var enderecosMaisRecentes = Enderecador.ObterEnderecoServicosMaisRecentes(VersaoLayout, cUF, tpAmb, ModeloDocumento, tpEmis); + + var obterVersao = new Func(servico => enderecosMaisRecentes.Where(n => n.ServicoNFe == servico) + .Select(n => n.VersaoServico) + .DefaultIfEmpty(VersaoServico.Versao100) + .FirstOrDefault()); + + if (enderecosMaisRecentes.Any()) + { + VersaoRecepcaoEventoCceCancelamento = obterVersao(ServicoNFe.RecepcaoEventoCancelmento); + VersaoRecepcaoEventoInsucessoEntrega = obterVersao(ServicoNFe.RecepcaoEventoInsucessoEntregaNFe); + VersaoRecepcaoEventoComprovanteEntrega = obterVersao(ServicoNFe.RecepcaoEventoComprovanteEntregaNFe); + VersaoRecepcaoEventoConciliacaoFinanceira = obterVersao(ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe); + VersaoRecepcaoEventoEpec = obterVersao(ServicoNFe.RecepcaoEventoEpec); + VersaoRecepcaoEventoManifestacaoDestinatario = obterVersao(ServicoNFe.RecepcaoEventoManifestacaoDestinatario); + VersaoRecepcaoEventoAtorInteressado = obterVersao(ServicoNFe.RecepcaoEventoAtorInteressado); + VersaoNfeRecepcao = obterVersao(ServicoNFe.NfeRecepcao); + VersaoNfeRetRecepcao = obterVersao(ServicoNFe.NfeRetRecepcao); + VersaoNfeConsultaCadastro = obterVersao(ServicoNFe.NfeConsultaCadastro); + VersaoNfeInutilizacao = obterVersao(ServicoNFe.NfeInutilizacao); + VersaoNfeConsultaProtocolo = obterVersao(ServicoNFe.NfeConsultaProtocolo); + VersaoNfeStatusServico = obterVersao(ServicoNFe.NfeStatusServico); + VersaoNFeAutorizacao = obterVersao(ServicoNFe.NFeAutorizacao); + VersaoNFeRetAutorizacao = obterVersao(ServicoNFe.NFeRetAutorizacao); + VersaoNFeDistribuicaoDFe = obterVersao(ServicoNFe.NFeDistribuicaoDFe); + VersaoNfeConsultaDest = obterVersao(ServicoNFe.NfeConsultaDest); + VersaoNfeDownloadNF = obterVersao(ServicoNFe.NfeDownloadNF); + VersaoNfceAministracaoCSC = obterVersao(ServicoNFe.NfceAdministracaoCSC); + VersaoConsultaGTIN = obterVersao(ServicoNFe.ConsultaGtin); + VersaoRecepcaoEventosDeApuracaoDoIbsECbs = obterVersao(ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal); + } + } + + #region Versões dos serviços + + /// + /// Versão do serviço RecepcaoEvento para Carta de Correção e Cancelamento + /// + public VersaoServico VersaoRecepcaoEventoCceCancelamento + { + get { return _versaoRecepcaoEventoCceCancelamento; } + set + { + if (value == _versaoRecepcaoEventoCceCancelamento) return; + _versaoRecepcaoEventoCceCancelamento = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço RecepcaoEvento para EPEC + /// + public VersaoServico VersaoRecepcaoEventoEpec + { + get { return _versaoRecepcaoEventoEpec; } + set + { + if (value == _versaoRecepcaoEventoEpec) return; + _versaoRecepcaoEventoEpec = value; + OnPropertyChanged(); + } + } + + + /// + /// Versão do serviço RecepcaoEvento para Carta de Correção e Cancelamento + /// + public VersaoServico VersaoRecepcaoEventoInsucessoEntrega + { + get { return _versaoRecepcaoEventoInsucessoEntrega; } + set + { + if (value == _versaoRecepcaoEventoInsucessoEntrega) return; + _versaoRecepcaoEventoInsucessoEntrega = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço RecepcaoEvento para Comprovante de Entrega da NFe + /// + public VersaoServico VersaoRecepcaoEventoComprovanteEntrega + { + get { return _versaoRecepcaoEventoComprovanteEntrega; } + set + { + if (value == _versaoRecepcaoEventoComprovanteEntrega) return; + _versaoRecepcaoEventoComprovanteEntrega = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço RecepcaoEvento para Conciliação Financeira da NFe + /// + public VersaoServico VersaoRecepcaoEventoConciliacaoFinanceira + { + get { return _versaoRecepcaoEventoConciliacaoFinanceira; } + set + { + if (value == _versaoRecepcaoEventoConciliacaoFinanceira) return; + _versaoRecepcaoEventoConciliacaoFinanceira = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço RecepcaoEvento para Manifestação do destinatário + /// + public VersaoServico VersaoRecepcaoEventoManifestacaoDestinatario + { + get { return _versaoRecepcaoEventoManifestacaoDestinatario; } + set + { + if (value == _versaoRecepcaoEventoManifestacaoDestinatario) return; + _versaoRecepcaoEventoManifestacaoDestinatario = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço RecepcaoEvento para Ator interessado + /// + public VersaoServico VersaoRecepcaoEventoAtorInteressado + { + get { return _versaoRecepcaoEventoAtorInteressado; } + set + { + if (value == _versaoRecepcaoEventoAtorInteressado) return; + _versaoRecepcaoEventoAtorInteressado = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeRecepcao + /// + public VersaoServico VersaoNfeRecepcao + { + get { return _versaoNfeRecepcao; } + set + { + if (value == _versaoNfeRecepcao) return; + _versaoNfeRecepcao = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeRetRecepcao + /// + public VersaoServico VersaoNfeRetRecepcao + { + get { return _versaoNfeRetRecepcao; } + set + { + if (value == _versaoNfeRetRecepcao) return; + _versaoNfeRetRecepcao = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeConsultaCadastro + /// + public VersaoServico VersaoNfeConsultaCadastro + { + get { return _versaoNfeConsultaCadastro; } + set + { + if (value == _versaoNfeConsultaCadastro) return; + _versaoNfeConsultaCadastro = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeInutilizacao + /// + public VersaoServico VersaoNfeInutilizacao + { + get { return _versaoNfeInutilizacao; } + set + { + if (value == _versaoNfeInutilizacao) return; + _versaoNfeInutilizacao = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeConsultaProtocolo + /// + public VersaoServico VersaoNfeConsultaProtocolo + { + get { return _versaoNfeConsultaProtocolo; } + set + { + if (value == _versaoNfeConsultaProtocolo) return; + _versaoNfeConsultaProtocolo = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeStatusServico + /// + public VersaoServico VersaoNfeStatusServico + { + get { return _versaoNfeStatusServico; } + set + { + if (value == _versaoNfeStatusServico) return; + _versaoNfeStatusServico = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NFeAutorizacao + /// + public VersaoServico VersaoNFeAutorizacao + { + get { return _versaoNFeAutorizacao; } + set + { + if (value == _versaoNFeAutorizacao) return; + _versaoNFeAutorizacao = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NFeRetAutorizacao + /// + public VersaoServico VersaoNFeRetAutorizacao + { + get { return _versaoNFeRetAutorizacao; } + set + { + if (value == _versaoNFeRetAutorizacao) return; + _versaoNFeRetAutorizacao = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NFeDistribuicaoDFe + /// + public VersaoServico VersaoNFeDistribuicaoDFe + { + get { return _versaoNFeDistribuicaoDFe; } + set + { + if (value == _versaoNFeDistribuicaoDFe) return; + _versaoNFeDistribuicaoDFe = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeConsultaDest + /// + public VersaoServico VersaoNfeConsultaDest + { + get { return _versaoNfeConsultaDest; } + set + { + if (value == _versaoNfeConsultaDest) return; + _versaoNfeConsultaDest = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço NfeDownloadNF + /// + public VersaoServico VersaoNfeDownloadNF + { + get { return _versaoNfeDownloadNf; } + set + { + if (value == _versaoNfeDownloadNf) return; + _versaoNfeDownloadNf = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço admCscNFCe + /// + public VersaoServico VersaoNfceAministracaoCSC + { + get { return _versaoNfceAministracaoCsc; } + set + { + if (value == _versaoNfceAministracaoCsc) return; + _versaoNfceAministracaoCsc = value; + OnPropertyChanged(); + } + } + + public VersaoServico VersaoConsultaGTIN + { + get { return _versaoConsultaGTIN; } + set + { + if (value == _versaoConsultaGTIN) return; + _versaoConsultaGTIN = value; + OnPropertyChanged(); + } + } + + /// + /// Versão do serviço RecepcaoEvento para os eventos de apuração do IBS e da CBS + /// + public VersaoServico VersaoRecepcaoEventosDeApuracaoDoIbsECbs + { + get => _versaoRecepcaoEventosDeApuracaoDoIbsECbs; + set + { + if (value == _versaoRecepcaoEventosDeApuracaoDoIbsECbs) return; + + _versaoRecepcaoEventosDeApuracaoDoIbsECbs = value; + OnPropertyChanged(); + } + } + + #endregion + + /// + /// Protocolo de segurança que deve ser utilizado no consumo dos webservices + /// + public SecurityProtocolType ProtocoloDeSeguranca { get; set; } + + /// + /// Diretório onde estão armazenados os schemas para validação + /// + public string DiretorioSchemas + { + get { return _diretorioSchemas; } + set + { + if (!string.IsNullOrEmpty(value) && !Directory.Exists(value)) + throw new Exception("Diretório " + value + " não encontrado!"); + _diretorioSchemas = value; + } + } + + /// + /// Informar se a biblioteca deve salvar o xml de envio e de retorno + /// + public bool SalvarXmlServicos + { + get { return _salvarXmlServicos; } + set + { + if (!value) + DiretorioSalvarXml = ""; + _salvarXmlServicos = value; + } + } + + /// + /// Diretório onde os xmls de envio/retorno devem ser salvos + /// + public string DiretorioSalvarXml { get; set; } + + /// + /// Determina se o cerificado do servidor deve ser verificado + /// + public bool ValidarCertificadoDoServidor { get; set; } + + /// + /// Determina se os schemas devem ser validados antes do envio ao WebService + /// O comportamento padrão é true! + /// + public bool ValidarSchemas { get; set; } = true; + + /// + /// Instância do Singleton de ConfiguracaoServico + /// + public static ConfiguracaoServico Instancia + { + get + { + if (_instancia != null) return _instancia; + lock (SyncRoot) + { + if (_instancia != null) return _instancia; + _instancia = new ConfiguracaoServico(); + } + + return _instancia; + } + } + + public bool RemoverAcentos { get; set; } + + /// + /// Limpa a instancia atual caso exista + /// + public static void LimparIntancia() + { + _instancia = null; + } + + public event PropertyChangedEventHandler PropertyChanged; + + [NotifyPropertyChangedInvocator] + private void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + var handler = PropertyChanged; + if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); + } + } +} \ No newline at end of file diff --git a/NFe.Utils/ConfiguracaoUrls.cs b/NFe.Utils/ConfiguracaoUrls.cs new file mode 100644 index 000000000..99cb7cdc1 --- /dev/null +++ b/NFe.Utils/ConfiguracaoUrls.cs @@ -0,0 +1,24 @@ +using NFe.Utils.Enderecos; + +namespace NFe.Utils +{ + public static class ConfiguracaoUrls + { + private static FactoryUrl _factoryUrl; + + static ConfiguracaoUrls() + { + FactoryUrl = FactoryUrl.CriaFactoryUrl(); + } + + public static FactoryUrl FactoryUrl + { + get { return _factoryUrl; } + set + { + _factoryUrl = value; + Enderecador.CarregarEnderecos(); + } + } + } +} \ No newline at end of file diff --git a/Shared.NFe.Utils/Consulta/ExtconsSitNFe.cs b/NFe.Utils/Consulta/ExtconsSitNFe.cs similarity index 100% rename from Shared.NFe.Utils/Consulta/ExtconsSitNFe.cs rename to NFe.Utils/Consulta/ExtconsSitNFe.cs diff --git a/Shared.NFe.Utils/Consulta/ExtprocEventoNFe.cs b/NFe.Utils/Consulta/ExtprocEventoNFe.cs similarity index 100% rename from Shared.NFe.Utils/Consulta/ExtprocEventoNFe.cs rename to NFe.Utils/Consulta/ExtprocEventoNFe.cs diff --git a/Shared.NFe.Utils/Consulta/ExtretConsSitNFe.cs b/NFe.Utils/Consulta/ExtretConsSitNFe.cs similarity index 100% rename from Shared.NFe.Utils/Consulta/ExtretConsSitNFe.cs rename to NFe.Utils/Consulta/ExtretConsSitNFe.cs diff --git a/Shared.NFe.Utils/ConsultaCadastro/ExtConsCad.cs b/NFe.Utils/ConsultaCadastro/ExtConsCad.cs similarity index 100% rename from Shared.NFe.Utils/ConsultaCadastro/ExtConsCad.cs rename to NFe.Utils/ConsultaCadastro/ExtConsCad.cs diff --git a/Shared.NFe.Utils/ConsultaCadastro/ExtretConsCad.cs b/NFe.Utils/ConsultaCadastro/ExtretConsCad.cs similarity index 89% rename from Shared.NFe.Utils/ConsultaCadastro/ExtretConsCad.cs rename to NFe.Utils/ConsultaCadastro/ExtretConsCad.cs index b9f5b3097..605808aaa 100644 --- a/Shared.NFe.Utils/ConsultaCadastro/ExtretConsCad.cs +++ b/NFe.Utils/ConsultaCadastro/ExtretConsCad.cs @@ -31,6 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ +using System.Xml; using DFe.Utils; using NFe.Classes.Servicos.ConsultaCadastro; @@ -39,14 +40,18 @@ namespace NFe.Utils.ConsultaCadastro public static class ExtretConsCad { /// - /// Coverte uma string XML no formato NFe para um objeto retConsCad + /// Converte uma string XML no formato NFe para um objeto retConsCad /// - /// /// /// Retorna um objeto do tipo retConsCad - public static retConsCad CarregarDeXmlString(this retConsCad retConsCad, string xmlString) + public static retConsCad CarregarDeXmlString(string xmlString) { - return FuncoesXml.XmlStringParaClasse(xmlString); + var documento = new XmlDocument(); + documento.LoadXml(xmlString); + var node = documento.GetElementsByTagName("retConsCad")[0]; + var xmlParaDeserializar = node?.OuterXml ?? xmlString; + + return FuncoesXml.XmlStringParaClasse(xmlParaDeserializar); } /// diff --git a/NFe.Utils/ConsultaGtin/ExtconsGTIN.cs b/NFe.Utils/ConsultaGtin/ExtconsGTIN.cs new file mode 100644 index 000000000..df37f26c3 --- /dev/null +++ b/NFe.Utils/ConsultaGtin/ExtconsGTIN.cs @@ -0,0 +1,23 @@ +using DFe.Utils; +using NFe.Classes.Servicos.ConsultaGtin; + +namespace NFe.Utils.ConsultaGtin +{ + public static class ExtconsGTIN + { + public static string ObterXmlString(this consGTIN consGtin) + { + return FuncoesXml.ClasseParaXmlString(consGtin); + } + + public static retConsGTIN CarregarDeXmlString(this retConsGTIN retConsCad, string xmlString) + { + return FuncoesXml.XmlStringParaClasse(xmlString); + } + + public static string ObterXmlString(this retConsGTIN retConsGTIN) + { + return FuncoesXml.ClasseParaXmlString(retConsGTIN); + } + } +} \ No newline at end of file diff --git a/Shared.NFe.Utils/Conversao.cs b/NFe.Utils/Conversao.cs similarity index 79% rename from Shared.NFe.Utils/Conversao.cs rename to NFe.Utils/Conversao.cs index 18af51aef..4222a7f66 100644 --- a/Shared.NFe.Utils/Conversao.cs +++ b/NFe.Utils/Conversao.cs @@ -31,9 +31,9 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ using System; -using System.Security.Cryptography; using System.Text; using DFe.Classes.Flags; +using DFe.Utils.Assinatura; using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; using NFe.Classes.Informacoes.Emitente; using NFe.Classes.Informacoes.Identificacao.Tipos; @@ -54,7 +54,24 @@ public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoS if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento || servicoNFe == ServicoNFe.RecepcaoEventoCartaCorrecao || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoDestinatario - || servicoNFe == ServicoNFe.RecepcaoEventoEpec) + || servicoNFe == ServicoNFe.RecepcaoEventoEpec + || servicoNFe == ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente + || servicoNFe == ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido + || servicoNFe == ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal + || servicoNFe == ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito + || servicoNFe == ServicoNFe.RecepcaoEventoImobilizacaoDeItem + || servicoNFe == ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel + || servicoNFe == ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente + || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao + || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao + || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao + || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao + || servicoNFe == ServicoNFe.RecepcaoEventoCancelamentoDeEvento + || servicoNFe == ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao + || servicoNFe == ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente + || servicoNFe == ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor + || servicoNFe == ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado + || servicoNFe == ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega) { return "1.00"; } @@ -145,6 +162,8 @@ public static string CrtParaString(this CRT crt) return "Simples Nacional - sublimite excedido"; case CRT.RegimeNormal: return "Normal"; + case CRT.SimplesNacionalMei: + return "Simples Nacional MEI"; default: throw new ArgumentOutOfRangeException("crt", crt, null); } @@ -175,11 +194,16 @@ public static string CsticmsParaString(this Csticms csticms) { case Csticms.Cst00: return "00"; + case Csticms.Cst02: + return "02"; case Csticms.Cst10: case Csticms.CstPart10: return "10"; case Csticms.Cst20: + case Csticms.CstPart20: return "20"; + case Csticms.Cst15: + return "15"; case Csticms.Cst30: return "30"; case Csticms.Cst40: @@ -191,9 +215,13 @@ public static string CsticmsParaString(this Csticms csticms) return "50"; case Csticms.Cst51: return "51"; + case Csticms.Cst53: + return "53"; case Csticms.Cst60: case Csticms.CstRep60: return "60"; + case Csticms.Cst61: + return "61"; case Csticms.Cst70: return "70"; case Csticms.Cst90: @@ -221,10 +249,10 @@ public static string ObterHexSha1DeString(string s) { var bytes = Encoding.UTF8.GetBytes(s); - var sha1 = SHA1.Create(); - var hashBytes = sha1.ComputeHash(bytes); + var hashSha1Bytes = AssinaturaDigital.ObterHashSha1Bytes(bytes); + var hexSha1DeString = ObterHexDeByteArray(hashSha1Bytes); - return ObterHexDeByteArray(hashBytes); + return hexSha1DeString; } /// @@ -259,4 +287,4 @@ public static string ObterHexDeString(string s) return hex; } } -} \ No newline at end of file +} diff --git a/Shared.NFe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs b/NFe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs similarity index 100% rename from Shared.NFe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs rename to NFe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs diff --git a/Shared.NFe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs b/NFe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs similarity index 100% rename from Shared.NFe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs rename to NFe.Utils/DistribuicaoDFe/ExtretDistDFeInt.cs diff --git a/Shared.NFe.Utils/Download/ExtdownloadNFe.cs b/NFe.Utils/Download/ExtdownloadNFe.cs similarity index 100% rename from Shared.NFe.Utils/Download/ExtdownloadNFe.cs rename to NFe.Utils/Download/ExtdownloadNFe.cs diff --git a/Shared.NFe.Utils/Download/ExtretDownloadNFe.cs b/NFe.Utils/Download/ExtretDownloadNFe.cs similarity index 100% rename from Shared.NFe.Utils/Download/ExtretDownloadNFe.cs rename to NFe.Utils/Download/ExtretDownloadNFe.cs diff --git a/Shared.NFe.Utils/Email/ConfiguracaoEmail.cs b/NFe.Utils/Email/ConfiguracaoEmail.cs similarity index 100% rename from Shared.NFe.Utils/Email/ConfiguracaoEmail.cs rename to NFe.Utils/Email/ConfiguracaoEmail.cs diff --git a/Shared.NFe.Utils/Email/EmailBuilder.cs b/NFe.Utils/Email/EmailBuilder.cs similarity index 100% rename from Shared.NFe.Utils/Email/EmailBuilder.cs rename to NFe.Utils/Email/EmailBuilder.cs diff --git a/NFe.Utils/Enderecos/CearaUrl.cs b/NFe.Utils/Enderecos/CearaUrl.cs new file mode 100644 index 000000000..4b4d6702b --- /dev/null +++ b/NFe.Utils/Enderecos/CearaUrl.cs @@ -0,0 +1,90 @@ +namespace NFe.Utils.Enderecos +{ + public class CearaUrl : IZeusEnderecosUrls + { + public CearaUrl() + { + CartaCorrecaoCancelamentoHomologacao_VersaoUm = "https://nfeh.sefaz.ce.gov.br/nfe2/services/RecepcaoEvento?wsdl"; + NfeRecepcaoHomologacao_VersaoDois = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRecepcao2?wsdl"; + NfeRetRecepcaoHomologacao_VersaoDois = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRetRecepcao2?wsdl"; + NfeInutilizacaoHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2?wsdl"; + NfeConsultaProtocoloHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeConsulta2?wsdl"; + NfeStatusServicoHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2?wsdl"; + NfeConsultaCadastroHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/CadConsultaCadastro2?wsdl"; + NfeDownloadNFHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl"; + NFeAutorizacaoHomologacao_VersaoTres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeAutorizacao?wsdl"; + NFeRetAutorizacaoHomologacao_VersaoTres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRetAutorizacao?wsdl"; + CartaCorrecaoCancelamentoHomologacao_VersaoQuatro = + "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?wsdl"; + NfeInutilizacaoHomologacao_VersaoQuatro = + "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?wsdl"; + NfeConsultaProtocoloHomologacao_VersaoQuatro = + "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?wsdl"; + NfeStatusServicoHomologacao_VersaoQuatro = + "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeStatusServico4?wsdl"; + NFeAutorizacaoHomologacao_VersaoQuatro = "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeAutorizacao4?wsdl"; + NFeRetAutorizacaoHomologacao_VersaoQuatro = + "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeRetAutorizacao4?wsdl"; + CartaCorrecaoCancelamentoProducao_VersaoUm = + "https://nfe.sefaz.ce.gov.br/nfe2/services/RecepcaoEvento?wsdl"; + NfeRecepcaoProducao_VersaoDois = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRecepcao2?wsdl"; + NfeRetRecepcaoProducao_VersaoDois = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRetRecepcao2?wsdl"; + NfeInutilizacaoProducao_VersaoDoisETres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2?wsdl"; + NfeConsultaProtocoloProducao_VersaoDoisETres = + "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeConsulta2?wsdl"; + NfeStatusServicoProducao_VersaoDoisETres = + "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2?wsdl"; + NfeConsultaCadastroProducao_VersaoDoisETres = + "https://nfe.sefaz.ce.gov.br/nfe2/services/CadConsultaCadastro2?wsdl"; + NfeDownloadNFProducao_VersaoDoisETres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl"; + NFeAutorizacaoProducao_VersaoTres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeAutorizacao?wsdl"; + NFeRetAutorizacaoProducao_VersaoTres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRetAutorizacao?wsdl"; + NfeInutilizacaoProducao_VersaoQuatro = "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?wsdl"; + NfeConsultaProtocoloProducao_VersaoQuatro = + "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?wsdl"; + NfeStatusServicoProducao_VersaoQuatro = "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeStatusServico4?wsdl"; + NfeConsultaCadastroProducao_VersaoQuatro = + "https://nfe.sefaz.ce.gov.br/nfe4/services/CadConsultaCadastro4?wsdl"; + CartaCorrecaoCancelamentoProducao_VersaoQuatro = + "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?wsdl"; + NFeAutorizacaoProducao_VersaoQuatro = "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeAutorizacao4?wsdl"; + NFeRetAutorizacaoProducao_VersaoQuatro = + "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRetAutorizacao4?wsdl"; + } + + public string CartaCorrecaoCancelamentoHomologacao_VersaoUm { get; } + public string NfeRecepcaoHomologacao_VersaoDois { get; } + public string NfeRetRecepcaoHomologacao_VersaoDois { get; } + public string NfeInutilizacaoHomologacao_VersaoDoisETres { get; } + public string NfeConsultaProtocoloHomologacao_VersaoDoisETres { get; } + public string NfeStatusServicoHomologacao_VersaoDoisETres { get; } + public string NfeConsultaCadastroHomologacao_VersaoDoisETres { get; } + public string NfeDownloadNFHomologacao_VersaoDoisETres { get; } + public string NFeAutorizacaoHomologacao_VersaoTres { get; } + public string NFeRetAutorizacaoHomologacao_VersaoTres { get; } + public string CartaCorrecaoCancelamentoHomologacao_VersaoQuatro { get; } + public string NfeInutilizacaoHomologacao_VersaoQuatro { get; } + public string NfeConsultaProtocoloHomologacao_VersaoQuatro { get; } + public string NfeStatusServicoHomologacao_VersaoQuatro { get; } + public string NFeAutorizacaoHomologacao_VersaoQuatro { get; } + public string NFeRetAutorizacaoHomologacao_VersaoQuatro { get; } + + public string CartaCorrecaoCancelamentoProducao_VersaoUm { get; } + public string NfeRecepcaoProducao_VersaoDois { get; } + public string NfeRetRecepcaoProducao_VersaoDois { get; } + public string NfeInutilizacaoProducao_VersaoDoisETres { get; } + public string NfeConsultaProtocoloProducao_VersaoDoisETres { get; } + public string NfeStatusServicoProducao_VersaoDoisETres { get; } + public string NfeConsultaCadastroProducao_VersaoDoisETres { get; } + public string NfeDownloadNFProducao_VersaoDoisETres { get; } + public string NFeAutorizacaoProducao_VersaoTres { get; } + public string NFeRetAutorizacaoProducao_VersaoTres { get; } + public string NfeInutilizacaoProducao_VersaoQuatro { get; } + public string NfeConsultaProtocoloProducao_VersaoQuatro { get; } + public string NfeStatusServicoProducao_VersaoQuatro { get; } + public string NfeConsultaCadastroProducao_VersaoQuatro { get; } + public string CartaCorrecaoCancelamentoProducao_VersaoQuatro { get; } + public string NFeAutorizacaoProducao_VersaoQuatro { get; } + public string NFeRetAutorizacaoProducao_VersaoQuatro { get; } + } +} \ No newline at end of file diff --git a/Shared.NFe.Utils/Enderecos/Enderecador.cs b/NFe.Utils/Enderecos/Enderecador.cs similarity index 87% rename from Shared.NFe.Utils/Enderecos/Enderecador.cs rename to NFe.Utils/Enderecos/Enderecador.cs index 6b61a809e..1868705a9 100644 --- a/Shared.NFe.Utils/Enderecos/Enderecador.cs +++ b/NFe.Utils/Enderecos/Enderecador.cs @@ -1,4 +1,4 @@ -/********************************************************************************/ +/********************************************************************************/ /* Projeto: Biblioteca ZeusNFe */ /* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ /* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ @@ -35,6 +35,7 @@ using System.Collections.Generic; using System.Linq; using DFe.Classes.Entidades; +using DFe.Classes.Extensoes; using DFe.Classes.Flags; using NFe.Classes.Informacoes.Identificacao.Tipos; using NFe.Classes.Servicos.Tipos; @@ -43,7 +44,7 @@ namespace NFe.Utils.Enderecos { public static class Enderecador { - private static readonly List ListaEnderecos; + private static List ListaEnderecos; /// /// Adiciona as urls dos webservices de todos os estados @@ -60,7 +61,7 @@ static Enderecador() /// public static List EstadosQueUsamSvcAnParaNfe() { - return new List { Estado.AC, Estado.AL, Estado.AP, Estado.DF, Estado.ES, Estado.MG, Estado.PB, Estado.RJ, Estado.RN, Estado.RO, Estado.RR, Estado.RS, Estado.SC, Estado.SE, Estado.SP, Estado.TO }; + return new List { Estado.AC, Estado.AL, Estado.AP, Estado.CE, Estado.DF, Estado.ES, Estado.MG, Estado.PA, Estado.PB, Estado.PI, Estado.RJ, Estado.RN, Estado.RO, Estado.RR, Estado.RS, Estado.SC, Estado.SE, Estado.SP, Estado.TO }; } /// @@ -124,6 +125,7 @@ private static List CarregarEnderecosServicos() Estado.AL, Estado.AP, Estado.BA, //Somente NFCe. BA tem endereços próprios para NFe. Rev: 09/09/2015 + Estado.CE, //Somente NFCe. CE tem endereços próprios para NFe. Estado.DF, Estado.ES, Estado.MA, //Somente NFCe. MA usa o SVAN para NFe. Rev: 09/09/2015 @@ -217,7 +219,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeRetAutorizacao"); addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeConsulta2"); addServico(new[] { ServicoNFe.NfeRecepcao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeRecepcao2"); - addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao1, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/RecepcaoEvento"); + addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento, }, versao1, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/RecepcaoEvento"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeStatusServico2"); addServico(new[] { ServicoNFe.NfeRetRecepcao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeRetRecepcao2"); addServico(new[] { ServicoNFe.NfeInutilizacao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeInutilizacao2"); @@ -227,6 +229,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); #endregion } @@ -275,6 +278,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); #endregion } @@ -357,57 +361,65 @@ private static List CarregarEnderecosServicos() #region CE - //CE ainda não possui NFCe. Rev: 09/09/2015 + //CE usa a NFCe da SVRS #region Homologação foreach (var emissao in emissaoComum) { + + #region NFe if (emissao != TipoEmissao.teEPEC) - addServico(eventoCceCanc, versao1, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/RecepcaoEvento?wsdl"); - addServico(new[] { ServicoNFe.NfeRecepcao }, versao2, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRecepcao2?wsdl"); - addServico(new[] { ServicoNFe.NfeRetRecepcao }, versao2, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRetRecepcao2?wsdl"); - addServico(new[] { ServicoNFe.NfeInutilizacao }, versao2E3, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao2E3, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeConsulta2?wsdl"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao2E3, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao2E3, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/CadConsultaCadastro2?wsdl"); - addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeAutorizacao?wsdl"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRetAutorizacao?wsdl"); - - addServico(eventoCceCanc, versao4, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?wsdl"); - addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?wsdl"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeStatusServico4?wsdl"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeAutorizacao4?wsdl"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.CE, nfe, "https://nfeh.sefaz.ce.gov.br/nfe4/services/NFeRetAutorizacao4?wsdl"); + addServico(eventoCceCanc, versao1, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.CartaCorrecaoCancelamentoHomologacao_VersaoUm); + addServico(new[] { ServicoNFe.NfeRecepcao }, versao2, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeRecepcaoHomologacao_VersaoDois); + addServico(new[] { ServicoNFe.NfeRetRecepcao }, versao2, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeRetRecepcaoHomologacao_VersaoDois); + addServico(new[] { ServicoNFe.NfeInutilizacao }, versao2E3, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeInutilizacaoHomologacao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao2E3, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeConsultaProtocoloHomologacao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao2E3, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeStatusServicoHomologacao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao2E3, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeConsultaCadastroHomologacao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeDownloadNFHomologacao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeAutorizacaoHomologacao_VersaoTres); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeRetAutorizacaoHomologacao_VersaoTres); + + addServico(eventoCceCanc, versao4, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.CartaCorrecaoCancelamentoHomologacao_VersaoQuatro); + addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeInutilizacaoHomologacao_VersaoQuatro); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeConsultaProtocoloHomologacao_VersaoQuatro); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeStatusServicoHomologacao_VersaoQuatro); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeAutorizacaoHomologacao_VersaoQuatro); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeRetAutorizacaoHomologacao_VersaoQuatro); + #endregion } #endregion #region Produção + foreach (var emissao in emissaoComum) { + #region NFe + if (emissao != TipoEmissao.teEPEC) - addServico(eventoCceCanc, versao1, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/RecepcaoEvento?wsdl"); - addServico(new[] { ServicoNFe.NfeRecepcao }, versao2, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRecepcao2?wsdl"); - addServico(new[] { ServicoNFe.NfeRetRecepcao }, versao2, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRetRecepcao2?wsdl"); - addServico(new[] { ServicoNFe.NfeInutilizacao }, versao2E3, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao2E3, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeConsulta2?wsdl"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao2E3, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao2E3, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/CadConsultaCadastro2?wsdl"); - addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeAutorizacao?wsdl"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRetAutorizacao?wsdl"); - - addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?wsdl"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeStatusServico4?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe4/services/CadConsultaCadastro4?wsdl"); - addServico(eventoCceCanc, versao4, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?wsdl"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeAutorizacao4?wsdl"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, emissao, Estado.CE, nfe, "https://nfe.sefaz.ce.gov.br/nfe4/services/NFeRetAutorizacao4?wsdl"); + addServico(eventoCceCanc, versao1, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.CartaCorrecaoCancelamentoProducao_VersaoUm); + addServico(new[] { ServicoNFe.NfeRecepcao }, versao2, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeRecepcaoProducao_VersaoDois); + addServico(new[] { ServicoNFe.NfeRetRecepcao }, versao2, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeRetRecepcaoProducao_VersaoDois); + addServico(new[] { ServicoNFe.NfeInutilizacao }, versao2E3, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeInutilizacaoProducao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao2E3, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeConsultaProtocoloProducao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao2E3, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeStatusServicoProducao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao2E3, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeConsultaCadastroProducao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeDownloadNFProducao_VersaoDoisETres); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeAutorizacaoProducao_VersaoTres); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeRetAutorizacaoProducao_VersaoTres); + + addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeInutilizacaoProducao_VersaoQuatro); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeConsultaProtocoloProducao_VersaoQuatro); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeStatusServicoProducao_VersaoQuatro); + addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NfeConsultaCadastroProducao_VersaoQuatro); + addServico(eventoCceCanc, versao4, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.CartaCorrecaoCancelamentoProducao_VersaoQuatro); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeAutorizacaoProducao_VersaoQuatro); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, emissao, Estado.CE, nfe, ConfiguracaoUrls.FactoryUrl.Ceara.NFeRetAutorizacaoProducao_VersaoQuatro); + + #endregion } #endregion @@ -557,6 +569,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeAutorizacao4"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeRetAutorizacao4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); } #endregion @@ -585,13 +598,14 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, emissao, Estado.MG, nfe, "https://nfe.fazenda.mg.gov.br/nfe2/services/NFeRetAutorizacao4"); // NFC-e - //18/12/2018 - http://www.sped.fazenda.mg.gov.br/spedmg/nfce/web-services/ + //18/12/2018 - http://www.sped.fazenda.mg.gov.br/spedmg/nfce/web-services/ addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeInutilizacao4"); addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeConsultaProtocolo4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeAutorizacao4"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeRetAutorizacao4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); } #endregion @@ -644,7 +658,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.MS, nfce, "https://hom.nfce.sefaz.ms.gov.br/ws/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.MS, nfce, "https://hom.nfe.sefaz.ms.gov.br/ws/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.MS, nfce, "https://hom.nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); - + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.MS, nfce, "https://hom.nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); #endregion } @@ -693,6 +707,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.MS, nfce, "https://nfce.sefaz.ms.gov.br/ws/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.MS, nfce, "https://nfe.sefaz.ms.gov.br/ws/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.MS, nfce, "https://nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.MS, nfce, "https://nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); #endregion } @@ -747,6 +762,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); #endregion } @@ -795,6 +811,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); #endregion } @@ -833,13 +850,15 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NfeAutorizacao?wsdl"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NfeRetAutorizacao?wsdl"); - addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeInutilizacao4?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeConsultaProtocolo4?wsdl"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeStatusServico4?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/CadConsultaCadastro4?wsdl"); - addServico(eventoCceCanc, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRecepcaoEvento4?wsdl"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4?wsdl"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRetAutorizacao4?wsdl"); + // PE Homologação NFe v4.00 - URLs corrigidas (removido ?wsdl que causava 404) + // Padrão: URLs de produção de PE não usam ?wsdl, homologação também não deveria + addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeInutilizacao4"); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeConsultaProtocolo4"); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeStatusServico4"); + addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/CadConsultaCadastro4"); + addServico(eventoCceCanc, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4"); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRetAutorizacao4"); } @@ -935,6 +954,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); #endregion } @@ -989,6 +1009,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); #endregion } @@ -1057,6 +1078,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1081,7 +1103,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, prod, emissao, Estado.RS, nfe, "https://nfe.sefazrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx"); addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.RS, nfe, "https://nfe.sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.RS, nfe, "https://nfe.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); - addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.RS, nfe, "https://cad.sefazrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro4.asmx"); + addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.RS, nfe, "https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro4.asmx"); addServico(eventoCceCanc, versao4, prod, emissao, Estado.RS, nfe, "https://nfe.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, prod, emissao, Estado.RS, nfe, "https://nfe.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, emissao, Estado.RS, nfe, "https://nfe.sefazrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx"); @@ -1102,6 +1124,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1175,6 +1198,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); #endregion } @@ -1224,6 +1248,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); #endregion } @@ -1307,7 +1332,7 @@ private static List CarregarEnderecosServicos() { #region NFe - if (estado != Estado.BA & estado != Estado.MA & estado != Estado.PE) //Esses estados usam SVRS somente para NFCe, possuindo endereços próprios para NFe. + if (estado != Estado.BA & estado != Estado.MA & estado != Estado.PE & estado != Estado.CE) //Esses estados usam SVRS somente para NFCe, possuindo endereços próprios para NFe. { if (emissao != TipoEmissao.teEPEC) addServico(eventoCceCanc, versao1, hom, emissao, estado, nfe, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento.asmx"); @@ -1342,6 +1367,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1369,7 +1395,7 @@ private static List CarregarEnderecosServicos() #region NFe //Rev: 02/09/2019 - if (estado != Estado.BA & estado != Estado.MA & estado != Estado.PE) //Esses estados usam SVRS somente para NFCe, possuindo endereços próprios para NFe. + if (estado != Estado.BA & estado != Estado.MA & estado != Estado.PE & estado != Estado.CE) //Esses estados usam SVRS somente para NFCe, possuindo endereços próprios para NFe. { if (emissao != TipoEmissao.teEPEC) addServico(eventoCceCanc, versao1, prod, emissao, estado, nfe, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento.asmx"); @@ -1404,6 +1430,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1442,11 +1469,11 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.svc.fazenda.gov.br/NfeAutorizacao/NfeAutorizacao.asmx"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.svc.fazenda.gov.br/NfeRetAutorizacao/NfeRetAutorizacao.asmx"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.svc.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx"); - addServico(eventoCceCanc, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.svc.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.svc.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx"); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.sefazvirtual.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx"); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.sefazvirtual.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx"); + addServico(eventoCceCanc, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.sefazvirtual.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.sefazvirtual.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx"); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, TipoEmissao.teSVCAN, estado, modelo, "https://hom.sefazvirtual.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx"); } } @@ -1465,11 +1492,11 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.svc.fazenda.gov.br/NfeAutorizacao/NfeAutorizacao.asmx"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.svc.fazenda.gov.br/NfeRetAutorizacao/NfeRetAutorizacao.asmx"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.svc.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx"); - addServico(eventoCceCanc, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.svc.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.svc.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx"); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.sefazvirtual.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx"); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.sefazvirtual.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx"); + addServico(eventoCceCanc, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.sefazvirtual.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.sefazvirtual.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx"); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, TipoEmissao.teSVCAN, estado, modelo, "https://www.sefazvirtual.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx"); } } @@ -1548,20 +1575,26 @@ private static List CarregarEnderecosServicos() if (!(estado == Estado.SP & modelo == ModeloDocumento.NFCe)) { addServico(new[] { ServicoNFe.RecepcaoEventoEpec }, versao1, hom, TipoEmissao.teEPEC, estado, modelo, "https://hom.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx"); - addServico(new[] { ServicoNFe.RecepcaoEventoEpec }, versao4, hom, TipoEmissao.teEPEC, estado, modelo, "https://hom.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoEpec }, versao4, hom, TipoEmissao.teEPEC, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); } if (modelo != ModeloDocumento.NFCe) { addServico(new[] { ServicoNFe.RecepcaoEventoManifestacaoDestinatario }, versao1, hom, TipoEmissao.teNormal, estado, modelo, "https://hom.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx"); - addServico(new[] { ServicoNFe.RecepcaoEventoManifestacaoDestinatario }, versao4, hom, TipoEmissao.teNormal, estado, modelo, "https://hom.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoManifestacaoDestinatario }, versao4, hom, TipoEmissao.teNormal, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); } //CE e SVAN possuem endereços próprios para o serviço NfeDownloadNF if (estado != Estado.CE & !svanEstados.Contains(estado)) addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, hom, TipoEmissao.teNormal, estado, modelo, "https://hom.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx"); if (modelo != ModeloDocumento.NFCe) - addServico(new[] { ServicoNFe.NFeDistribuicaoDFe }, versao1, hom, TipoEmissao.teNormal, estado, modelo, "https://hom.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx"); + addServico(new[] { ServicoNFe.NFeDistribuicaoDFe }, versao1, hom, TipoEmissao.teNormal, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx"); + + // Comprovante de Entrega + addServico(new[] { ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe }, versao1, hom, TipoEmissao.teNormal, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); + + // Ator Interessado + addServico(new[] { ServicoNFe.RecepcaoEventoAtorInteressado }, versao1, hom, TipoEmissao.teNormal, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); } } @@ -1591,6 +1624,12 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, prod, TipoEmissao.teNormal, estado, modelo, "https://www.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx"); if (modelo != ModeloDocumento.NFCe) addServico(new[] { ServicoNFe.NFeDistribuicaoDFe }, versao1, prod, TipoEmissao.teNormal, estado, modelo, "https://www1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx"); + + // Comprovante de Entrega + addServico(new[] { ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe }, versao1, prod, TipoEmissao.teNormal, estado, modelo, "https://www.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); + + // Ator Interessado + addServico(new[] { ServicoNFe.RecepcaoEventoAtorInteressado }, versao1, prod, TipoEmissao.teNormal, estado, modelo, "https://www.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); } } @@ -1598,8 +1637,89 @@ private static List CarregarEnderecosServicos() #endregion + #region ConsultaGtin / Insucesso na entrega / Conciliação Financeira / Apuração IBS e CBS + foreach (var estado in Enum.GetValues(typeof(Estado)) + .Cast() + .ToList()) + { + foreach (var emissao in emissaoComum) + { + foreach (var modelo in todosOsModelos) + { + //GTIN + addServico(new[] { ServicoNFe.ConsultaGtin }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://dfe-servico.svrs.rs.gov.br/ws/ccgConsGTIN/ccgConsGTIN.asmx"); + addServico(new[] { ServicoNFe.ConsultaGtin }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://dfe-servico.svrs.rs.gov.br/ws/ccgConsGTIN/ccgConsGTIN.asmx"); + + //Insucesso Entrega NFe + addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + + if (modelo == ModeloDocumento.NFe) + { + //Conciliação Financeira NFe + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + + AdicionarEnderecosDosServicosDosEventosDeApuracaoDoIbsECbs(addServico, versao1, emissao, estado, modelo); + } + } + } + } + #endregion + return endServico; } + + private static void AdicionarEnderecosDosServicosDosEventosDeApuracaoDoIbsECbs(Action adicionarServico, + VersaoServico[] versaoServico, + TipoEmissao tipoEmissao, + Estado estado, + ModeloDocumento modeloDocumento) + { + var servicosRecepcaoEventoApuracaoDoIbsCbs = new[] + { + ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente, + ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido, + ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal, + ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito, + ServicoNFe.RecepcaoEventoImobilizacaoDeItem, + ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel, + ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente, + ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao, + ServicoNFe.RecepcaoEventoCancelamentoDeEvento, + ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao, + ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente, + ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor, + ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado, + ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega + }; + + var urlsParaOsServicosDosEventosDeApuracaoDoIbsECbs = new Dictionary + { + { TipoAmbiente.Producao, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx" }, + { TipoAmbiente.Homologacao, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx" } + }; + + foreach (var evento in servicosRecepcaoEventoApuracaoDoIbsCbs) + { + foreach (var ambiente in urlsParaOsServicosDosEventosDeApuracaoDoIbsECbs.Keys) + { + adicionarServico(new[] { evento }, versaoServico, ambiente, tipoEmissao, estado, modeloDocumento, urlsParaOsServicosDosEventosDeApuracaoDoIbsECbs[ambiente]); + } + } + } + + /// + /// Adiciona as urls dos webservices de todos os estados + /// Obs: UFs que disponibilizaram urls diferentes para NFCe, até 04/05/2015: SVRS, AM, MT, PR, RS e SP + /// + public static void CarregarEnderecos() + { + ListaEnderecos = CarregarEnderecosServicos(); + } /// /// Obtém a versão configurada para um determinado serviço. @@ -1615,10 +1735,21 @@ private static List CarregarEnderecosServicos() case ServicoNFe.RecepcaoEventoCartaCorrecao: case ServicoNFe.RecepcaoEventoCancelmento: return cfgServico.VersaoRecepcaoEventoCceCancelamento; + case ServicoNFe.RecepcaoEventoInsucessoEntregaNFe: + case ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe: + return cfgServico.VersaoRecepcaoEventoInsucessoEntrega; + case ServicoNFe.RecepcaoEventoComprovanteEntregaNFe: + case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: + return cfgServico.VersaoRecepcaoEventoComprovanteEntrega; + case ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe: + case ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe: + return cfgServico.VersaoRecepcaoEventoConciliacaoFinanceira; case ServicoNFe.RecepcaoEventoEpec: return cfgServico.VersaoRecepcaoEventoEpec; case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: return cfgServico.VersaoRecepcaoEventoManifestacaoDestinatario; + case ServicoNFe.RecepcaoEventoAtorInteressado: + return cfgServico.VersaoRecepcaoEventoAtorInteressado; case ServicoNFe.NfeRecepcao: return cfgServico.VersaoNfeRecepcao; case ServicoNFe.NfeRetRecepcao: @@ -1643,6 +1774,26 @@ private static List CarregarEnderecosServicos() return cfgServico.VersaoNfeDownloadNF; case ServicoNFe.NfceAdministracaoCSC: return cfgServico.VersaoNfceAministracaoCSC; + case ServicoNFe.ConsultaGtin: + return cfgServico.VersaoConsultaGTIN; + case ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido: + case ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal: + case ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito: + case ServicoNFe.RecepcaoEventoImobilizacaoDeItem: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel: + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente: + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + case ServicoNFe.RecepcaoEventoCancelamentoDeEvento: + case ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao: + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente: + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor: + case ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado: + case ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega: + return cfgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; } return null; } @@ -1662,13 +1813,17 @@ private static string Erro(ServicoNFe servico, VersaoServico versaoServico, Esta /// Obtém uma url a partir de uma lista armazenada em enderecoServico e povoada dinamicamente no create desta classe /// /// - public static string ObterUrlServico(ServicoNFe servico, ConfiguracaoServico cfgServico) + public static string ObterUrlServico(ServicoNFe servico, ConfiguracaoServico cfgServico, string uf = null) { var versaoServico = ObterVersaoServico(servico, cfgServico); if (versaoServico == null) throw new Exception(string.Format("Não foi possível obter a versão do serviço {0}!", servico)); - return ObterUrlServico(servico, versaoServico.GetValueOrDefault(), cfgServico.cUF, cfgServico.tpAmb, - cfgServico.ModeloDocumento, cfgServico.tpEmis); + + Estado estado = cfgServico.cUF; + if (!string.IsNullOrWhiteSpace(uf)) + estado = estado.SiglaParaEstado(uf); + + return ObterUrlServico(servico, versaoServico.GetValueOrDefault(), estado, cfgServico.tpAmb, cfgServico.ModeloDocumento, cfgServico.tpEmis); } /// @@ -1695,10 +1850,8 @@ public static string ObterUrlServico(ServicoNFe servico, VersaoServico versaoSer /// Tipo de ambiente (produção ou homologação) /// Modelo do documento. Ex: NFe, NFCe. /// Tipo de emissão da nota - public static List ObterEnderecoServicosMaisRecentes(VersaoServico versaoLimite, Estado uf, TipoAmbiente tipoAmbiente, - ModeloDocumento modeloDocumento, TipoEmissao tipoEmissao) + public static List ObterEnderecoServicosMaisRecentes(VersaoServico versaoLimite, Estado uf, TipoAmbiente tipoAmbiente, ModeloDocumento modeloDocumento, TipoEmissao tipoEmissao) { - var enderecoServicos = from end in ListaEnderecos where end.Estado == uf && end.TipoAmbiente == tipoAmbiente && end.ModeloDocumento == modeloDocumento && end.TipoEmissao == tipoEmissao && end.VersaoServico <= versaoLimite @@ -1710,4 +1863,4 @@ into g } } -} +} \ No newline at end of file diff --git a/Shared.NFe.Utils/Enderecos/EnderecoServico.cs b/NFe.Utils/Enderecos/EnderecoServico.cs similarity index 100% rename from Shared.NFe.Utils/Enderecos/EnderecoServico.cs rename to NFe.Utils/Enderecos/EnderecoServico.cs diff --git a/NFe.Utils/Enderecos/FactoryUrl.cs b/NFe.Utils/Enderecos/FactoryUrl.cs new file mode 100644 index 000000000..5a6814709 --- /dev/null +++ b/NFe.Utils/Enderecos/FactoryUrl.cs @@ -0,0 +1,18 @@ +namespace NFe.Utils.Enderecos +{ + public class FactoryUrl + { + public FactoryUrl(IZeusEnderecosUrls ceara) + { + Ceara = ceara; + } + + public IZeusEnderecosUrls Ceara { get; } + + + public static FactoryUrl CriaFactoryUrl() + { + return new FactoryUrl(new CearaUrl()); + } + } +} \ No newline at end of file diff --git a/NFe.Utils/Enderecos/IZeusEnderecosUrls.cs b/NFe.Utils/Enderecos/IZeusEnderecosUrls.cs new file mode 100644 index 000000000..59d2da8c5 --- /dev/null +++ b/NFe.Utils/Enderecos/IZeusEnderecosUrls.cs @@ -0,0 +1,40 @@ +namespace NFe.Utils.Enderecos +{ + public interface IZeusEnderecosUrls + { + string CartaCorrecaoCancelamentoHomologacao_VersaoUm { get; } + string NfeRecepcaoHomologacao_VersaoDois { get; } + string NfeRetRecepcaoHomologacao_VersaoDois { get; } + string NfeInutilizacaoHomologacao_VersaoDoisETres { get; } + string NfeConsultaProtocoloHomologacao_VersaoDoisETres { get; } + string NfeStatusServicoHomologacao_VersaoDoisETres { get; } + string NfeConsultaCadastroHomologacao_VersaoDoisETres { get; } + string NfeDownloadNFHomologacao_VersaoDoisETres { get; } + string NFeAutorizacaoHomologacao_VersaoTres { get; } + string NFeRetAutorizacaoHomologacao_VersaoTres { get; } + string CartaCorrecaoCancelamentoHomologacao_VersaoQuatro { get; } + string NfeInutilizacaoHomologacao_VersaoQuatro { get; } + string NfeConsultaProtocoloHomologacao_VersaoQuatro { get; } + string NfeStatusServicoHomologacao_VersaoQuatro { get; } + string NFeAutorizacaoHomologacao_VersaoQuatro { get; } + string NFeRetAutorizacaoHomologacao_VersaoQuatro { get; } + + string CartaCorrecaoCancelamentoProducao_VersaoUm { get; } + string NfeRecepcaoProducao_VersaoDois { get; } + string NfeRetRecepcaoProducao_VersaoDois { get; } + string NfeInutilizacaoProducao_VersaoDoisETres { get; } + string NfeConsultaProtocoloProducao_VersaoDoisETres { get; } + string NfeStatusServicoProducao_VersaoDoisETres { get; } + string NfeConsultaCadastroProducao_VersaoDoisETres { get; } + string NfeDownloadNFProducao_VersaoDoisETres { get; } + string NFeAutorizacaoProducao_VersaoTres { get; } + string NFeRetAutorizacaoProducao_VersaoTres { get; } + string NfeInutilizacaoProducao_VersaoQuatro { get; } + string NfeConsultaProtocoloProducao_VersaoQuatro { get; } + string NfeStatusServicoProducao_VersaoQuatro { get; } + string NfeConsultaCadastroProducao_VersaoQuatro { get; } + string CartaCorrecaoCancelamentoProducao_VersaoQuatro { get; } + string NFeAutorizacaoProducao_VersaoQuatro { get; } + string NFeRetAutorizacaoProducao_VersaoQuatro { get; } + } +} \ No newline at end of file diff --git a/NFe.Utils/Enderecos/NovasUrlsCeara/CearaSVRS.cs b/NFe.Utils/Enderecos/NovasUrlsCeara/CearaSVRS.cs new file mode 100644 index 000000000..65f1b2d1e --- /dev/null +++ b/NFe.Utils/Enderecos/NovasUrlsCeara/CearaSVRS.cs @@ -0,0 +1,91 @@ +using NFe.Utils.Enderecos; + +namespace Shared.NFe.Utils.Enderecos.NovasUrlsCeara +{ + public class CearaSVRS : IZeusEnderecosUrls + { + public CearaSVRS() + { + CartaCorrecaoCancelamentoHomologacao_VersaoUm = "https://nfeh.sefaz.ce.gov.br/nfe2/services/RecepcaoEvento?wsdl"; + NfeRecepcaoHomologacao_VersaoDois = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRecepcao2?wsdl"; + NfeRetRecepcaoHomologacao_VersaoDois = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRetRecepcao2?wsdl"; + NfeInutilizacaoHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2?wsdl"; + NfeConsultaProtocoloHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeConsulta2?wsdl"; + NfeStatusServicoHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2?wsdl"; + NfeConsultaCadastroHomologacao_VersaoDoisETres = "https://cad-homologacao.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro4.asmx"; + NfeDownloadNFHomologacao_VersaoDoisETres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl"; + NFeAutorizacaoHomologacao_VersaoTres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeAutorizacao?wsdl"; + NFeRetAutorizacaoHomologacao_VersaoTres = "https://nfeh.sefaz.ce.gov.br/nfe2/services/NfeRetAutorizacao?wsdl"; + CartaCorrecaoCancelamentoHomologacao_VersaoQuatro = + "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"; + NfeInutilizacaoHomologacao_VersaoQuatro = + "https://nfe-homologacao.svrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx"; + NfeConsultaProtocoloHomologacao_VersaoQuatro = + "https://nfe-homologacao.svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"; + NfeStatusServicoHomologacao_VersaoQuatro = + "https://nfe-homologacao.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"; + NFeAutorizacaoHomologacao_VersaoQuatro = "https://nfe-homologacao.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx"; + NFeRetAutorizacaoHomologacao_VersaoQuatro = + "https://nfe-homologacao.svrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx"; + CartaCorrecaoCancelamentoProducao_VersaoUm = + "https://nfe.sefaz.ce.gov.br/nfe2/services/RecepcaoEvento?wsdl"; + NfeRecepcaoProducao_VersaoDois = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRecepcao2?wsdl"; + NfeRetRecepcaoProducao_VersaoDois = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRetRecepcao2?wsdl"; + NfeInutilizacaoProducao_VersaoDoisETres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2?wsdl"; + NfeConsultaProtocoloProducao_VersaoDoisETres = + "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeConsulta2?wsdl"; + NfeStatusServicoProducao_VersaoDoisETres = + "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2?wsdl"; + NfeConsultaCadastroProducao_VersaoDoisETres = + "https://nfe.sefaz.ce.gov.br/nfe2/services/CadConsultaCadastro2?wsdl"; + NfeDownloadNFProducao_VersaoDoisETres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl"; + NFeAutorizacaoProducao_VersaoTres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeAutorizacao?wsdl"; + NFeRetAutorizacaoProducao_VersaoTres = "https://nfe.sefaz.ce.gov.br/nfe2/services/NfeRetAutorizacao?wsdl"; + NfeInutilizacaoProducao_VersaoQuatro = "https://nfe.svrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx"; + NfeConsultaProtocoloProducao_VersaoQuatro = + "https://nfe.svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"; + NfeStatusServicoProducao_VersaoQuatro = "https://nfe.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"; + NfeConsultaCadastroProducao_VersaoQuatro = + "https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro4.asmx"; + CartaCorrecaoCancelamentoProducao_VersaoQuatro = + "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"; + NFeAutorizacaoProducao_VersaoQuatro = "https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx"; + NFeRetAutorizacaoProducao_VersaoQuatro = + "https://nfe.svrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx"; + } + + public string CartaCorrecaoCancelamentoHomologacao_VersaoUm { get; } + public string NfeRecepcaoHomologacao_VersaoDois { get; } + public string NfeRetRecepcaoHomologacao_VersaoDois { get; } + public string NfeInutilizacaoHomologacao_VersaoDoisETres { get; } + public string NfeConsultaProtocoloHomologacao_VersaoDoisETres { get; } + public string NfeStatusServicoHomologacao_VersaoDoisETres { get; } + public string NfeConsultaCadastroHomologacao_VersaoDoisETres { get; } + public string NfeDownloadNFHomologacao_VersaoDoisETres { get; } + public string NFeAutorizacaoHomologacao_VersaoTres { get; } + public string NFeRetAutorizacaoHomologacao_VersaoTres { get; } + public string CartaCorrecaoCancelamentoHomologacao_VersaoQuatro { get; } + public string NfeInutilizacaoHomologacao_VersaoQuatro { get; } + public string NfeConsultaProtocoloHomologacao_VersaoQuatro { get; } + public string NfeStatusServicoHomologacao_VersaoQuatro { get; } + public string NFeAutorizacaoHomologacao_VersaoQuatro { get; } + public string NFeRetAutorizacaoHomologacao_VersaoQuatro { get; } + public string CartaCorrecaoCancelamentoProducao_VersaoUm { get; } + public string NfeRecepcaoProducao_VersaoDois { get; } + public string NfeRetRecepcaoProducao_VersaoDois { get; } + public string NfeInutilizacaoProducao_VersaoDoisETres { get; } + public string NfeConsultaProtocoloProducao_VersaoDoisETres { get; } + public string NfeStatusServicoProducao_VersaoDoisETres { get; } + public string NfeConsultaCadastroProducao_VersaoDoisETres { get; } + public string NfeDownloadNFProducao_VersaoDoisETres { get; } + public string NFeAutorizacaoProducao_VersaoTres { get; } + public string NFeRetAutorizacaoProducao_VersaoTres { get; } + public string NfeInutilizacaoProducao_VersaoQuatro { get; } + public string NfeConsultaProtocoloProducao_VersaoQuatro { get; } + public string NfeStatusServicoProducao_VersaoQuatro { get; } + public string NfeConsultaCadastroProducao_VersaoQuatro { get; } + public string CartaCorrecaoCancelamentoProducao_VersaoQuatro { get; } + public string NFeAutorizacaoProducao_VersaoQuatro { get; } + public string NFeRetAutorizacaoProducao_VersaoQuatro { get; } + } +} diff --git a/NFe.Utils/Enderecos/NovasUrlsCeara/FactoryUrlCearaMudanca.cs b/NFe.Utils/Enderecos/NovasUrlsCeara/FactoryUrlCearaMudanca.cs new file mode 100644 index 000000000..7f3a8c813 --- /dev/null +++ b/NFe.Utils/Enderecos/NovasUrlsCeara/FactoryUrlCearaMudanca.cs @@ -0,0 +1,12 @@ +using NFe.Utils.Enderecos; + +namespace Shared.NFe.Utils.Enderecos.NovasUrlsCeara +{ + public static class FactoryUrlCearaMudanca + { + public static FactoryUrl CriaFactoryUrl() + { + return new FactoryUrl(new CearaSVRS()); + } + } +} \ No newline at end of file diff --git a/Shared.NFe.Utils/Enums.cs b/NFe.Utils/Enums.cs similarity index 96% rename from Shared.NFe.Utils/Enums.cs rename to NFe.Utils/Enums.cs index b72e16980..adc5b1f5a 100644 --- a/Shared.NFe.Utils/Enums.cs +++ b/NFe.Utils/Enums.cs @@ -50,6 +50,10 @@ public enum VersaoQrCode QrCodeVersao1 = 100, [Description("Versão 2.0 do QR-Code")] - QrCodeVersao2 = 2 + QrCodeVersao2 = 2, + + [Description("Versão 3.0 do QR-Code")] + QrCodeVersao3 = 3, + } } \ No newline at end of file diff --git a/Shared.NFe.Utils/Evento/ExtenvEvento.cs b/NFe.Utils/Evento/ExtenvEvento.cs similarity index 100% rename from Shared.NFe.Utils/Evento/ExtenvEvento.cs rename to NFe.Utils/Evento/ExtenvEvento.cs diff --git a/Shared.NFe.Utils/Evento/Extevento.cs b/NFe.Utils/Evento/Extevento.cs similarity index 100% rename from Shared.NFe.Utils/Evento/Extevento.cs rename to NFe.Utils/Evento/Extevento.cs diff --git a/Shared.NFe.Utils/Evento/ExtretEnvEvento.cs b/NFe.Utils/Evento/ExtretEnvEvento.cs similarity index 100% rename from Shared.NFe.Utils/Evento/ExtretEnvEvento.cs rename to NFe.Utils/Evento/ExtretEnvEvento.cs diff --git a/Shared.NFe.Utils/Excecoes/ComunicacaoException.cs b/NFe.Utils/Excecoes/ComunicacaoException.cs similarity index 100% rename from Shared.NFe.Utils/Excecoes/ComunicacaoException.cs rename to NFe.Utils/Excecoes/ComunicacaoException.cs diff --git a/Shared.NFe.Utils/Excecoes/FabricaComunicacaoException.cs b/NFe.Utils/Excecoes/FabricaComunicacaoException.cs similarity index 100% rename from Shared.NFe.Utils/Excecoes/FabricaComunicacaoException.cs rename to NFe.Utils/Excecoes/FabricaComunicacaoException.cs diff --git a/Shared.NFe.Utils/Excecoes/ValidacaoSchemaException.cs b/NFe.Utils/Excecoes/ValidacaoSchemaException.cs similarity index 93% rename from Shared.NFe.Utils/Excecoes/ValidacaoSchemaException.cs rename to NFe.Utils/Excecoes/ValidacaoSchemaException.cs index e06d36927..a7591ee1b 100644 --- a/Shared.NFe.Utils/Excecoes/ValidacaoSchemaException.cs +++ b/NFe.Utils/Excecoes/ValidacaoSchemaException.cs @@ -48,6 +48,12 @@ public class ValidacaoSchemaException : Exception /// Houve erros de validação de schema XSD /// /// - public ValidacaoSchemaException(string message) : base(string.Format("Erros na validação:\n {0}", message)) {} + public ValidacaoSchemaException(string message, string xmlString) : base( + $"Erros na validação:\n {message}") + { + XmlString = xmlString; + } + + public string XmlString { get; private set; } } } diff --git a/Shared.NFe.Utils/Excecoes/ValidacaoXmlException.cs b/NFe.Utils/Excecoes/ValidacaoXmlException.cs similarity index 100% rename from Shared.NFe.Utils/Excecoes/ValidacaoXmlException.cs rename to NFe.Utils/Excecoes/ValidacaoXmlException.cs diff --git a/NFe.Utils/FodyWeavers.xml b/NFe.Utils/FodyWeavers.xml deleted file mode 100644 index 6e2fa02e6..000000000 --- a/NFe.Utils/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/NFe.Utils/InfRespTec/GerarHashCSRT.cs b/NFe.Utils/InfRespTec/GerarHashCSRT.cs new file mode 100644 index 000000000..0382d74b4 --- /dev/null +++ b/NFe.Utils/InfRespTec/GerarHashCSRT.cs @@ -0,0 +1,31 @@ +using System; +using System.Text; +using DFe.Utils.Assinatura; + +namespace Shared.NFe.Utils.InfRespTec +{ + public static class GerarHashCSRT + { + public static string HashCSRT(string csrt, global::NFe.Classes.NFe nfe, Encoding encoding = null) + { + return HashCSRT(csrt, nfe.infNFe.Id.Substring(0, 3), encoding); + } + + public static string HashCSRT(string csrt, string chave, Encoding encoding = null) + { + if (encoding == null) + { + encoding = Encoding.UTF8; + } + + var csrtChave = new StringBuilder(csrt).Append(chave).ToString(); + + var data = encoding.GetBytes(csrtChave); + + var sha1HashBytes = AssinaturaDigital.ObterHashSha1Bytes(data); + var chaveBase64 = Convert.ToBase64String(sha1HashBytes); + + return chaveBase64; + } + } +} diff --git a/Shared.NFe.Utils/InformacoesSuplementares/ExtinfNFeSupl.cs b/NFe.Utils/InformacoesSuplementares/ExtinfNFeSupl.cs similarity index 83% rename from Shared.NFe.Utils/InformacoesSuplementares/ExtinfNFeSupl.cs rename to NFe.Utils/InformacoesSuplementares/ExtinfNFeSupl.cs index 7bc7dbe26..df249a72b 100644 --- a/Shared.NFe.Utils/InformacoesSuplementares/ExtinfNFeSupl.cs +++ b/NFe.Utils/InformacoesSuplementares/ExtinfNFeSupl.cs @@ -37,8 +37,10 @@ using DFe.Classes.Entidades; using DFe.Classes.Flags; using DFe.Utils; +using DFe.Utils.Assinatura; using NFe.Classes; using NFe.Classes.Informacoes.Identificacao.Tipos; +using System.Text; namespace NFe.Utils.InformacoesSuplementares { @@ -111,23 +113,23 @@ private static List CarregarUrls() {Estado.AP, versao3E4, "https://www.sefaz.ap.gov.br/nfce/nfcep.php"}, {Estado.AM, versao3E4, "http://sistemas.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp?"}, //No portal do ENCAT está: sistemas.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp?chNFe=1315…. {Estado.BA, versao3E4, "http://nfe.sefaz.ba.gov.br/servicos/nfce/modulos/geral/NFCEC_consulta_chave_acesso.aspx"}, - {Estado.CE, versao3E4, "http://nfce.sefaz.ce.gov.br/pages/ShowNFCe.html"}, //Não utilizado para emissão via ws, mas utilizado para emissão com integrador - {Estado.GO, versao3E4, "http://nfe.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe"}, + {Estado.CE, versao3E4, "http://nfce.sefaz.ce.gov.br/pages/ShowNFCe.html"}, + {Estado.GO, versao3E4, "https://nfeweb.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe"}, {Estado.MA, versao3E4, "http://nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp"}, {Estado.MT, versao3E4, "http://www.sefaz.mt.gov.br/nfce/consultanfce"}, {Estado.MS, versao3E4, "http://www.dfe.ms.gov.br/nfce/qrcode?"}, {Estado.PA, versao3E4, "https://appnfc.sefa.pa.gov.br/portal/view/consultas/nfce/nfceForm.seam"}, - {Estado.PB, versao3E4, "http://www.receita.pb.gov.br/nfce"}, + {Estado.PB, versao3E4, "http://www.sefaz.pb.gov.br/nfce"}, {Estado.PE, versao3E4, "http://nfce.sefaz.pe.gov.br/nfce/consulta"}, {Estado.PI, versao3E4, "http://www.sefaz.pi.gov.br/nfce/qrcode"}, - {Estado.RJ, versao3E4, "http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode?"}, + {Estado.RJ, versao3E4, "https://consultadfe.fazenda.rj.gov.br/consultaNFCe/QRCode"}, {Estado.RN, versao3E4, "http://nfce.set.rn.gov.br/consultarNFCe.aspx"}, {Estado.RS, versao3E4, "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx"}, {Estado.RO, versao3E4, "http://www.nfce.sefin.ro.gov.br/consultanfce/consulta.jsp"}, {Estado.RR, versao3E4, "https://www.sefaz.rr.gov.br/nfce/servlet/qrcode"}, - {Estado.MG, versao3E4, "https://nfce.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml"} + {Estado.MG, versao3E4, "https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml"} }; - adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao1, VersaoQrCode.QrCodeVersao2 }, urlsQrCodeProducaoQrCode1E2); + adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao1, VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsQrCodeProducaoQrCode1E2); var urlsQrCodeProducaoQrCode1 = new TupleList { @@ -149,7 +151,7 @@ private static List CarregarUrls() {Estado.TO, versao4, "http://apps.sefaz.to.gov.br/portal-nfce/qrcodeNFCe"}, {Estado.SC, versao4, "https://sat.sef.sc.gov.br/nfce/consulta"} }; - adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao2 }, urlsQrCodeProducaoQrCode2); + adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsQrCodeProducaoQrCode2); #endregion @@ -165,23 +167,23 @@ private static List CarregarUrls() {Estado.CE, versao3E4, "http://nfceh.sefaz.ce.gov.br/pages/ShowNFCe.html"}, {Estado.DF, versao3E4, "http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx"}, {Estado.ES, versao3E4, "http://homologacao.sefaz.es.gov.br/ConsultaNFCe/qrcode.aspx?"}, - {Estado.GO, versao3E4, "http://homolog.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe"}, + {Estado.GO, versao3E4, "https://nfewebhomolog.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe"}, {Estado.MA, versao3E4, "http://www.hom.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp"}, {Estado.MT, versao3E4, "http://homologacao.sefaz.mt.gov.br/nfce/consultanfce"}, {Estado.MS, versao3E4, "http://www.dfe.ms.gov.br/nfce/qrcode?"}, {Estado.PA, versao3E4, "https://appnfc.sefa.pa.gov.br/portal-homologacao/view/consultas/nfce/nfceForm.seam"}, - {Estado.PB, versao3E4, "http://www.receita.pb.gov.br/nfcehom"}, + {Estado.PB, versao3E4, "http://www.sefaz.pb.gov.br/nfcehom"}, {Estado.PE, versao3E4, "http://nfcehomolog.sefaz.pe.gov.br/nfce-web/consultarNFCe"}, {Estado.PI, versao3E4, "http://webas.sefaz.pi.gov.br/nfceweb-homologacao/consultarNFCe.jsf"}, - {Estado.RJ, versao3E4, "http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode?"}, + {Estado.RJ, versao3E4, "https://consultadfe.fazenda.rj.gov.br/consultaNFCe/QRCode"}, {Estado.RN, versao3E4, "http://hom.nfce.set.rn.gov.br/consultarNFCe.aspx"}, {Estado.RS, versao3E4, "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx"}, {Estado.RO, versao3E4, "http://www.nfce.sefin.ro.gov.br/consultanfce/consulta.jsp"}, {Estado.RR, versao3E4, "http://200.174.88.103:8080/nfce/servlet/qrcode"}, {Estado.TO, versao3E4, "http://apps.sefaz.to.gov.br/portal-nfce-homologacao/qrcodeNFCe"}, - {Estado.MG, versao3E4, "https://nfce.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml"} + {Estado.MG, versao3E4, "https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml"} }; - adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao1, VersaoQrCode.QrCodeVersao2 }, urlsQrCodeHomologacaoQrCode1E2); + adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao1, VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsQrCodeHomologacaoQrCode1E2); var urlsQrCodeHomologacaoQrCode1 = new TupleList { @@ -199,7 +201,7 @@ private static List CarregarUrls() {Estado.SP, versao4, "https://www.homologacao.nfce.fazenda.sp.gov.br/qrcode"}, {Estado.SC, versao4, "https://hom.sat.sef.sc.gov.br/nfce/consulta"}, }; - adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao2 }, urlsQrCodeHomologacaoQrCode2); + adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlQrCode, new[] { VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsQrCodeHomologacaoQrCode2); #endregion @@ -225,7 +227,7 @@ private static List CarregarUrls() {Estado.PB, versao3E4, "www.receita.pb.gov.br/nfce"}, {Estado.PR, versao3E4, "http://www.fazenda.pr.gov.br"}, {Estado.PI, versao3E4, "http://webas.sefaz.pi.gov.br/nfceweb/consultarNFCe.jsf"}, - {Estado.RJ, versao3E4, "www.nfce.fazenda.rj.gov.br/consulta"}, + {Estado.RJ, versao3E4, "http://nfce.fazenda.rj.gov.br/consulta"}, {Estado.RN, versao3E4, "http://nfce.set.rn.gov.br/consultarNFCe.aspx"}, {Estado.RS, versao3E4, "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx"}, {Estado.RO, versao3E4, "http://www.nfce.sefin.ro.gov.br"}, @@ -235,7 +237,7 @@ private static List CarregarUrls() {Estado.TO, versao3E4, "http://apps.sefaz.to.gov.br/portal-nfce/consultarNFCe.jsf"}, {Estado.GO, versao4, "http://www.nfce.go.gov.br/post/ver/214344/consulta-nfce"}, {Estado.PE, versao4, "http://nfce.sefaz.pe.gov.br/nfce-web/consultarNFCe"}, - {Estado.MG, versao3E4, "http://nfce.fazenda.mg.gov.br/portalnfce"} + {Estado.MG, versao3E4, "https://portalsped.fazenda.mg.gov.br/portalnfce"} }; adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao1 }, urlsConsultaProducao1); @@ -258,10 +260,10 @@ private static List CarregarUrls() {Estado.MT, versao3E4, "http://homologacao.sefaz.mt.gov.br/nfce/consultanfce"}, {Estado.MS, versao3E4, "http://www.dfe.ms.gov.br/nfce"}, {Estado.PA, versao3E4, "https://appnfc.sefa.pa.gov.br/portal-homologacao/view/consultas/nfce/consultanfce.seam"}, - {Estado.PB, versao3E4, "http://www.receita.pb.gov.br/nfcehom"}, + {Estado.PB, versao3E4, "http://www.sefaz.pb.gov.br/nfcehom"}, {Estado.PR, versao3E4, "http://www.fazenda.pr.gov.br"}, {Estado.PI, versao3E4, "http://webas.sefaz.pi.gov.br/nfceweb-homologacao/consultarNFCe.jsf"}, - {Estado.RJ, versao3E4, "www.nfce.fazenda.rj.gov.br/consulta"}, + {Estado.RJ, versao3E4, "http://nfce.fazenda.rj.gov.br/consulta"}, {Estado.RN, versao3E4, "http://nfce.set.rn.gov.br/consultarNFCe.aspx"}, {Estado.RS, versao3E4, "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx"}, {Estado.RO, versao3E4, "http://www.nfce.sefin.ro.gov.br"}, @@ -271,7 +273,7 @@ private static List CarregarUrls() {Estado.TO, versao3E4, "http://apps.sefaz.to.gov.br/portal-nfce-homologacao/consultarNFCe.jsf"}, {Estado.GO, versao4, "http://www.nfce.go.gov.br/post/ver/214413/consulta-nfc-e-homologacao?" }, {Estado.PE, versao4, "http://nfcehomolog.sefaz.pe.gov.br/nfce-web/consultarNFCe" }, - {Estado.MG, versao3E4, "http://hnfce.fazenda.mg.gov.br/portalnfce"} + {Estado.MG, versao3E4, "https://hportalsped.fazenda.mg.gov.br/portalnfce"} }; adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao1 }, urlsConsultaHomologacao1); @@ -306,8 +308,8 @@ private static List CarregarUrls() {Estado.RR, versao3E4, "www.sefaz.rr.gov.br/nfce/consulta"} }; - adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2 }, urlsConsultaHomologacaoEProducao2); - adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2 }, urlsConsultaHomologacaoEProducao2); + adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsConsultaHomologacaoEProducao2); + adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsConsultaHomologacaoEProducao2); #endregion @@ -321,12 +323,12 @@ private static List CarregarUrls() {Estado.SP, versao3E4, "https://www.nfce.fazenda.sp.gov.br/consulta"}, {Estado.SE, versao3E4, "http://www.nfce.se.gov.br/nfce/consulta"}, {Estado.GO, versao3E4, "www.sefaz.go.gov.br/nfce/consulta"}, - {Estado.MG, versao3E4, "http://nfce.fazenda.mg.gov.br/portalnfce"}, + {Estado.MG, versao3E4, "https://portalsped.fazenda.mg.gov.br/portalnfce"}, {Estado.TO, versao3E4, "www.sefaz.to.gov.br/nfce/consulta"}, {Estado.SC, versao3E4, "https://sat.sef.sc.gov.br/nfce/consulta" } }; - adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2 }, urlsConsultaProducao2); + adicionarUrls(TipoAmbiente.Producao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsConsultaProducao2); #endregion @@ -339,13 +341,13 @@ private static List CarregarUrls() {Estado.PB, versao3E4, "www.receita.pb.gov.br/nfcehom"}, {Estado.SP, versao3E4, "https://www.homologacao.nfce.fazenda.sp.gov.br/consulta"}, {Estado.SE, versao3E4, "http://www.hom.nfe.se.gov.br/nfce/consulta"}, - {Estado.GO, versao3E4, "http://homolog.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe"}, - {Estado.MG, versao3E4, "http://hnfce.fazenda.mg.gov.br/portalnfce"}, + {Estado.GO, versao3E4, "https://nfewebhomolog.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe"}, + {Estado.MG, versao3E4, "https://hportalsped.fazenda.mg.gov.br/portalnfce"}, {Estado.TO, versao3E4, "http://homologacao.sefaz.to.gov.br/nfce/consulta.jsf" }, {Estado.SC, versao3E4, "https://hom.sat.sef.sc.gov.br/nfce/consulta" } }; - adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2 }, urlsConsultaHomologacao2); + adicionarUrls(TipoAmbiente.Homologacao, TipoUrlConsultaPublica.UrlConsulta, new[] { VersaoQrCode.QrCodeVersao2, VersaoQrCode.QrCodeVersao3 }, urlsConsultaHomologacao2); #endregion @@ -388,15 +390,9 @@ public static string ObterUrlConsulta(this infNFeSupl infNFeSupl, Classes.NFe nf /// /// Obtém a URL para montagem do QR-Code /// - public static string ObterUrlQrCode(this infNFeSupl infNFeSupl, Classes.NFe nfe, VersaoQrCode versaoQrCode, string cIdToken, string csc) + public static string ObterUrlQrCode(this infNFeSupl infNFeSupl, Classes.NFe nfe, VersaoQrCode versaoQrCode, string cIdToken, string csc, ConfiguracaoCertificado _cfgCertificado = null) { - Func msgErro = parametro => $"O {parametro} não foi informado!"; - - if (string.IsNullOrEmpty(cIdToken)) - throw new ArgumentNullException(nameof(cIdToken), msgErro("token")); - - if (string.IsNullOrEmpty(csc)) - throw new ArgumentNullException(nameof(cIdToken), msgErro("CSC")); + ValidarPreenchimentoDasInformacoesDeTokenECscSeNecessario(versaoQrCode, cIdToken, csc); var versaoServico = Conversao.StringParaVersaoServico(nfe.infNFe.versao); switch (versaoQrCode) @@ -405,11 +401,26 @@ public static string ObterUrlQrCode(this infNFeSupl infNFeSupl, Classes.NFe nfe, return ObterUrlQrCode1(infNFeSupl, nfe, cIdToken, csc, versaoServico); case VersaoQrCode.QrCodeVersao2: return ObterUrlQrCode2(infNFeSupl, nfe, cIdToken, csc, versaoServico); + case VersaoQrCode.QrCodeVersao3: + return ObterUrlQrCode3(infNFeSupl, nfe, versaoServico, _cfgCertificado); default: throw new ArgumentOutOfRangeException("versaoQrCode", versaoQrCode, null); } } + private static void ValidarPreenchimentoDasInformacoesDeTokenECscSeNecessario(VersaoQrCode versaoQrCode, string cIdToken, string csc) + { + if (versaoQrCode == VersaoQrCode.QrCodeVersao3) return; + + Func msgErro = parametro => $"O {parametro} não foi informado!"; + + if (string.IsNullOrEmpty(cIdToken)) + throw new ArgumentNullException(nameof(cIdToken), msgErro("token")); + + if (string.IsNullOrEmpty(csc)) + throw new ArgumentNullException(nameof(csc), msgErro("CSC")); + } + /// /// Obtém a URL para uso no QR-Code, versão 1.0 - leiaute 3.10 /// @@ -430,7 +441,7 @@ private static string ObterUrlQrCode1(infNFeSupl infNFeSupl, Classes.NFe nfe, st if (nfe.infNFe.dest != null) cDest = "&cDest=" + nfe.infNFe.dest.CPF + nfe.infNFe.dest.CNPJ + nfe.infNFe.dest.idEstrangeiro; - //Passo 3: Substituir os valores (“dhEmi” e “digVal”) nos parâmetros; + //Passo 3: Substituir os valores ("dhEmi" e "digVal") nos parâmetros; var dadosBase = "chNFe=" + nfe.infNFe.Id.Substring(3) + "&nVersao=100" + @@ -519,5 +530,58 @@ public static string ObterUrlQrCode2ComParametro(this infNFeSupl infNFeSupl, Tip url += parametro; return url; } + + /// + /// Obtém a URL para uso no QR-Code, versão 3.0 - leiaute 4.00+ + /// + private static string ObterUrlQrCode3(this infNFeSupl infNFeSupl, Classes.NFe nfe, VersaoServico versaoServico, ConfiguracaoCertificado cfgCertificado, Encoding encoding = null) + { + if (cfgCertificado == null) + throw new ArgumentNullException(nameof(cfgCertificado), "Para gerar a assinatura do QR-Code versão 3.0 EM CONTINGÊNCIA é necessário informar o certificado digital utilizado na assinatura da NFC-e"); + + const string pipe = "|"; + + string chave = nfe.infNFe.Id.Substring(3); + int versaoQrCode = 3; + int ambiente = (int)nfe.infNFe.ide.tpAmb; + string dadosBase = string.Concat(chave, pipe, versaoQrCode, pipe, ambiente); + + if (nfe.infNFe.ide.tpEmis == TipoEmissao.teOffLine) + { + string diaEmi = nfe.infNFe.ide.dhEmi.Day.ToString("D2"); + string valorNfce = nfe.infNFe.total.ICMSTot.vNF.ToString("0.00").Replace(',', '.'); + string tp_idDest = string.Empty; + string idDest = string.Empty; + if (nfe.infNFe.dest != null) + { + if (!string.IsNullOrEmpty(nfe.infNFe.dest.idEstrangeiro)) + { + tp_idDest = "3"; + idDest = nfe.infNFe.dest.idEstrangeiro.Trim(); + } + else if (!string.IsNullOrEmpty(nfe.infNFe.dest.CPF) && nfe.infNFe.dest.CPF.Length == 11) + { + tp_idDest = "2"; + idDest = nfe.infNFe.dest.CPF.Replace(".", "").Replace("/", "").Replace("-", "").Trim(); + } + else if (!string.IsNullOrEmpty(nfe.infNFe.dest.CNPJ) && nfe.infNFe.dest.CNPJ.Length == 14) + { + tp_idDest = "1"; + idDest = nfe.infNFe.dest.CNPJ.Replace(".", "").Replace("/", "").Replace("-", "").Trim(); + } + } + + dadosBase = string.Concat(dadosBase, pipe, diaEmi, pipe, valorNfce, pipe, tp_idDest, pipe, idDest); + + if (encoding == null) + encoding = Encoding.UTF8; + + string assinatura = Convert.ToBase64String(AssinaturaDigital.ObterAssinaturaPkcs1(cfgCertificado, encoding.GetBytes(dadosBase))); + dadosBase = string.Concat(dadosBase, pipe, assinatura); + } + + string url = ObterUrlQrCode2ComParametro(infNFeSupl, nfe.infNFe.ide.tpAmb, nfe.infNFe.ide.cUF, versaoServico); + return string.Concat(url, dadosBase); + } } } diff --git a/Shared.NFe.Utils/Inutilizacao/ExtinutNFe.cs b/NFe.Utils/Inutilizacao/ExtinutNFe.cs similarity index 100% rename from Shared.NFe.Utils/Inutilizacao/ExtinutNFe.cs rename to NFe.Utils/Inutilizacao/ExtinutNFe.cs diff --git a/Shared.NFe.Utils/Inutilizacao/ExtretInutNFe.cs b/NFe.Utils/Inutilizacao/ExtretInutNFe.cs similarity index 100% rename from Shared.NFe.Utils/Inutilizacao/ExtretInutNFe.cs rename to NFe.Utils/Inutilizacao/ExtretInutNFe.cs diff --git a/Shared.NFe.Utils/NFe.Utils.cd b/NFe.Utils/NFe.Utils.cd similarity index 100% rename from Shared.NFe.Utils/NFe.Utils.cd rename to NFe.Utils/NFe.Utils.cd diff --git a/NFe.Utils/NFe.Utils.csproj b/NFe.Utils/NFe.Utils.csproj index 338246ef9..22d46dae2 100644 --- a/NFe.Utils/NFe.Utils.csproj +++ b/NFe.Utils/NFe.Utils.csproj @@ -1,74 +1,13 @@ - - - + + - Debug - AnyCPU - {E35E7C4A-5690-4979-8B43-002975B48EAA} - Library - Properties - NFe.Utils - NFe.Utils - v4.5 - 512 - SAK - SAK - SAK - SAK - - - + net462;netstandard2.0;net6.0 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - + - - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} - DFe.Classes - - - {b4e1a7a6-5d66-4326-8a8d-39338e6fc84c} - DFe.Utils - - - {29CA1DA2-440D-484B-951A-CF1B2EB27984} - NFe.Classes - + + - - - - \ No newline at end of file + + diff --git a/NFe.Utils/NFe.Utils.csproj.DotSettings b/NFe.Utils/NFe.Utils.csproj.DotSettings deleted file mode 100644 index 73e96563f..000000000 --- a/NFe.Utils/NFe.Utils.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp60 \ No newline at end of file diff --git a/NFe.Utils/NFe.Utils.csproj.user b/NFe.Utils/NFe.Utils.csproj.user deleted file mode 100644 index ca1d04b08..000000000 --- a/NFe.Utils/NFe.Utils.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - ProjectFiles - - \ No newline at end of file diff --git a/NFe.Utils/NFe.Utils.csproj.vspscc b/NFe.Utils/NFe.Utils.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/NFe.Utils/NFe.Utils.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/Shared.NFe.Utils/NFe.Utils.licenseheader b/NFe.Utils/NFe.Utils.licenseheader similarity index 100% rename from Shared.NFe.Utils/NFe.Utils.licenseheader rename to NFe.Utils/NFe.Utils.licenseheader diff --git a/Shared.NFe.Utils/NFe/ExtNFe.cs b/NFe.Utils/NFe/ExtNFe.cs similarity index 95% rename from Shared.NFe.Utils/NFe/ExtNFe.cs rename to NFe.Utils/NFe/ExtNFe.cs index 30cac4dcb..cdc60f787 100644 --- a/Shared.NFe.Utils/NFe/ExtNFe.cs +++ b/NFe.Utils/NFe/ExtNFe.cs @@ -49,10 +49,10 @@ public static class ExtNFe /// /// arquivo XML /// Retorna uma NFe carregada com os dados do XML - public static Classes.NFe CarregarDeArquivoXml(this Classes.NFe nfe, string arquivoXml) + public static Classes.NFe CarregarDeArquivoXml(this Classes.NFe nfe, string arquivoXml, bool ignorarOrdenacaoElementos = false) { var s = FuncoesXml.ObterNodeDeArquivoXml(typeof (Classes.NFe).Name, arquivoXml); - return FuncoesXml.XmlStringParaClasse(s); + return FuncoesXml.XmlStringParaClasse(s, ignorarOrdenacaoElementos); } /// @@ -71,10 +71,10 @@ public static string ObterXmlString(this Classes.NFe nfe) /// /// /// Retorna um objeto do tipo NFe - public static Classes.NFe CarregarDeXmlString(this Classes.NFe nfe, string xmlString) + public static Classes.NFe CarregarDeXmlString(this Classes.NFe nfe, string xmlString, bool ignorarOrdenacaoElementos = false) { var s = FuncoesXml.ObterNodeDeStringXml(typeof (Classes.NFe).Name, xmlString); - return FuncoesXml.XmlStringParaClasse(s); + return FuncoesXml.XmlStringParaClasse(s, ignorarOrdenacaoElementos); } /// @@ -97,7 +97,7 @@ public static Classes.NFe Valida(this Classes.NFe nfe, ConfiguracaoServico cfgSe { if (nfe == null) throw new ArgumentNullException("nfe"); - var versao = (Decimal.Parse(nfe.infNFe.versao, CultureInfo.InvariantCulture)); + var versao = Decimal.Parse(nfe.infNFe.versao, CultureInfo.InvariantCulture); var xmlNfe = nfe.ObterXmlString(); var config = cfgServico ?? ConfiguracaoServico.Instancia; @@ -125,7 +125,7 @@ public static Classes.NFe Assina(this Classes.NFe nfe, ConfiguracaoServico cfgSe #region Define cNF var tamanhocNf = 9; - var versao = (decimal.Parse(nfeLocal.infNFe.versao, CultureInfo.InvariantCulture)); + var versao = decimal.Parse(nfeLocal.infNFe.versao, CultureInfo.InvariantCulture); if (versao >= 2) tamanhocNf = 8; nfeLocal.infNFe.ide.cNF = Convert.ToInt32(nfeLocal.infNFe.ide.cNF).ToString().PadLeft(tamanhocNf, '0'); diff --git a/Shared.NFe.Utils/NFe/ExtNfeProc.cs b/NFe.Utils/NFe/ExtNfeProc.cs similarity index 100% rename from Shared.NFe.Utils/NFe/ExtNfeProc.cs rename to NFe.Utils/NFe/ExtNfeProc.cs diff --git a/Shared.NFe.Utils/NfeSituacao.cs b/NFe.Utils/NfeSituacao.cs similarity index 100% rename from Shared.NFe.Utils/NfeSituacao.cs rename to NFe.Utils/NfeSituacao.cs diff --git a/NFe.Utils/Properties/AssemblyInfo.cs b/NFe.Utils/Properties/AssemblyInfo.cs deleted file mode 100644 index 30e81a070..000000000 --- a/NFe.Utils/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,71 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Reflection; -using System.Runtime.InteropServices; - -// Informações gerais sobre um assembly são controladas através do seguinte -// conjunto de atributos. Altere o valor destes atributos para modificar a informação -// associada a um assembly. - -[assembly: AssemblyTitle("NFe.Utils")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Utils")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Definir ComVisible como false torna os tipos neste assembly não visíveis -// para componentes COM. Caso precise acessar um tipo neste assembly a partir de -// COM, defina o atributo ComVisible como true nesse tipo. - -[assembly: ComVisible(false)] - -// O GUID a seguir é para o ID da typelib se este projeto for exposto para COM - -[assembly: Guid("79f13e44-91e2-44c8-89e0-79ba74659e7f")] - -// Informações de Versão para um assembly consistem nos quatro valores a seguir: -// -// Versão Principal -// Versão Secundária -// Número da Versão -// Revisão -// -// É possível especificar todos os valores ou usar o padrão de Números de Compilação e Revisão -// utilizando o '*' como mostrado abaixo: -// [assembly: AssemblyVersion("1.0.0.772")] - -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/Shared.NFe.Utils/Recepcao/ExtconsReciNFe.cs b/NFe.Utils/Recepcao/ExtconsReciNFe.cs similarity index 100% rename from Shared.NFe.Utils/Recepcao/ExtconsReciNFe.cs rename to NFe.Utils/Recepcao/ExtconsReciNFe.cs diff --git a/Shared.NFe.Utils/Recepcao/ExtenviNFe2.cs b/NFe.Utils/Recepcao/ExtenviNFe2.cs similarity index 100% rename from Shared.NFe.Utils/Recepcao/ExtenviNFe2.cs rename to NFe.Utils/Recepcao/ExtenviNFe2.cs diff --git a/Shared.NFe.Utils/Recepcao/ExtretConsReciNFe.cs b/NFe.Utils/Recepcao/ExtretConsReciNFe.cs similarity index 100% rename from Shared.NFe.Utils/Recepcao/ExtretConsReciNFe.cs rename to NFe.Utils/Recepcao/ExtretConsReciNFe.cs diff --git a/Shared.NFe.Utils/Recepcao/ExtretEnviNFe.cs b/NFe.Utils/Recepcao/ExtretEnviNFe.cs similarity index 100% rename from Shared.NFe.Utils/Recepcao/ExtretEnviNFe.cs rename to NFe.Utils/Recepcao/ExtretEnviNFe.cs diff --git a/Shared.NFe.Utils/Status/ExtconsStatServ.cs b/NFe.Utils/Status/ExtconsStatServ.cs similarity index 100% rename from Shared.NFe.Utils/Status/ExtconsStatServ.cs rename to NFe.Utils/Status/ExtconsStatServ.cs diff --git a/Shared.NFe.Utils/Status/ExtretConsStatServ.cs b/NFe.Utils/Status/ExtretConsStatServ.cs similarity index 100% rename from Shared.NFe.Utils/Status/ExtretConsStatServ.cs rename to NFe.Utils/Status/ExtretConsStatServ.cs diff --git a/Shared.NFe.Utils/Tributacao/Estadual/ICMSGeral.cs b/NFe.Utils/Tributacao/Estadual/ICMSGeral.cs similarity index 76% rename from Shared.NFe.Utils/Tributacao/Estadual/ICMSGeral.cs rename to NFe.Utils/Tributacao/Estadual/ICMSGeral.cs index ad08e0d53..c29a7eb64 100644 --- a/Shared.NFe.Utils/Tributacao/Estadual/ICMSGeral.cs +++ b/NFe.Utils/Tributacao/Estadual/ICMSGeral.cs @@ -55,7 +55,7 @@ public ICMSGeral(ICMSBasico icmsBasico) public ICMSGeral() { - + } /// @@ -66,37 +66,50 @@ public ICMSGeral() /// public ICMSBasico ObterICMSBasico(CRT crt) { - ICMSBasico icmsBasico; + ICMSBasico icmsBasico = null; switch (crt) { + case CRT.SimplesNacionalMei: case CRT.SimplesNacional: - switch (CSOSN) + switch (CST) { - case Csosnicms.Csosn101: - icmsBasico = new ICMSSN101(); - break; - case Csosnicms.Csosn102: - case Csosnicms.Csosn103: - case Csosnicms.Csosn300: - case Csosnicms.Csosn400: - icmsBasico = new ICMSSN102(); - break; - case Csosnicms.Csosn201: - icmsBasico = new ICMSSN201(); - break; - case Csosnicms.Csosn202: - case Csosnicms.Csosn203: - icmsBasico = new ICMSSN202(); - break; - case Csosnicms.Csosn500: - icmsBasico = new ICMSSN500(); - break; - case Csosnicms.Csosn900: - icmsBasico = new ICMSSN900(); + case Csticms.Cst61: + icmsBasico = new ICMS61(); break; - default: - throw new ArgumentOutOfRangeException(); + } + + var ehCst61 = icmsBasico != null; + + if (!ehCst61) + { + switch (CSOSN) + { + case Csosnicms.Csosn101: + icmsBasico = new ICMSSN101(); + break; + case Csosnicms.Csosn102: + case Csosnicms.Csosn103: + case Csosnicms.Csosn300: + case Csosnicms.Csosn400: + icmsBasico = new ICMSSN102(); + break; + case Csosnicms.Csosn201: + icmsBasico = new ICMSSN201(); + break; + case Csosnicms.Csosn202: + case Csosnicms.Csosn203: + icmsBasico = new ICMSSN202(); + break; + case Csosnicms.Csosn500: + icmsBasico = new ICMSSN500(); + break; + case Csosnicms.Csosn900: + icmsBasico = new ICMSSN900(); + break; + default: + throw new ArgumentOutOfRangeException(); + } } break; case CRT.SimplesNacionalExcessoSublimite: @@ -106,10 +119,17 @@ public ICMSBasico ObterICMSBasico(CRT crt) case Csticms.Cst00: icmsBasico = new ICMS00(); break; + case Csticms.Cst02: + icmsBasico = new ICMS02(); + break; case Csticms.Cst10: icmsBasico = new ICMS10(); break; + case Csticms.Cst15: + icmsBasico = new ICMS15(); + break; case Csticms.CstPart10: + case Csticms.CstPart20: case Csticms.CstPart90: icmsBasico = new ICMSPart(); break; @@ -131,9 +151,15 @@ public ICMSBasico ObterICMSBasico(CRT crt) case Csticms.Cst51: icmsBasico = new ICMS51(); break; + case Csticms.Cst53: + icmsBasico = new ICMS53(); + break; case Csticms.Cst60: icmsBasico = new ICMS60(); break; + case Csticms.Cst61: + icmsBasico = new ICMS61(); + break; case Csticms.Cst70: icmsBasico = new ICMS70(); break; @@ -217,17 +243,40 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// public decimal pRedBC { get; set; } + /// + /// Código de Benefício Fiscal na UF aplicado ao item quando houver RBC. + /// + public string cBenefRBC { get; set; } + /// /// Valor do ICMS desonerado /// public decimal? vICMSDeson { get; set; } + /// + /// N28b - Indica se o valor do ICMS desonerado (vICMSDeson) deduz + /// do valor do item (vProd). (NT 2023.004) + /// + public DeduzDesoneracaoNoProduto? indDeduzDeson { get; set; } + + // + /// N33a - Valor do ICMS- ST desonerado + /// Versão 4.00 + /// + public decimal? vICMSSTDeson { get; set; } + + /// + /// N33b - Motivo da desoneração do ICMS- ST + /// Versão 4.00 + /// + public MotivoDesoneracaoIcmsSt? motDesICMSST { get; set; } + /// /// Motivo da desoneração do ICMS /// public MotivoDesoneracaoIcms? motDesICMS { get; set; } - /// + /// /// Valor do ICMS da Operação /// public decimal? vICMSOp { get; set; } @@ -246,7 +295,7 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// Valor da BC do ICMS ST retido /// public decimal? vBCSTRet { get; set; } - + /// /// Valor do ICMS ST retido /// @@ -324,6 +373,21 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// public decimal? vFCPST { get; set; } + /// + /// Percentual do diferimento do ICMS relativo ao Fundo de Combate à Pobreza (FCP) + /// + public decimal? pFCPDif { get; set; } + + /// + /// Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) diferido + /// + public decimal? vFCPDif { get; set; } + + /// + /// Valor efetivo do ICMS relativo ao Fundo de Combate à Pobreza (FCP) + /// + public decimal? vFCPEfet { get; set; } + #endregion /// @@ -345,8 +409,8 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// Valor do FCP retido por Substituição Tributária /// public decimal? vFCPSTRet { get; set; } - - /// + + /// /// Valor do ICMS próprio do Substituto (tag: vICMSSubstituto) /// public decimal? vICMSSubstituto { get; set; } @@ -373,5 +437,20 @@ public ICMSBasico ObterICMSBasico(CRT crt) public decimal? vICMSEfet { get; set; } #endregion + /// + /// Quantidade tributada retida anteriormente + /// + public decimal? qBCMonoRet { get; set; } + + /// + /// Alíquota ad rem do imposto retido anteriormente + /// + public decimal? adRemICMSRet { get; set; } + + /// + /// Valor do ICMS retido anteriormente + /// + public decimal? vICMSMonoRet { get; set; } + } -} \ No newline at end of file +} diff --git a/Shared.NFe.Utils/Tributacao/Federal/COFINSGeral.cs b/NFe.Utils/Tributacao/Federal/COFINSGeral.cs similarity index 100% rename from Shared.NFe.Utils/Tributacao/Federal/COFINSGeral.cs rename to NFe.Utils/Tributacao/Federal/COFINSGeral.cs diff --git a/Shared.NFe.Utils/Tributacao/Federal/IPIGeral.cs b/NFe.Utils/Tributacao/Federal/IPIGeral.cs similarity index 100% rename from Shared.NFe.Utils/Tributacao/Federal/IPIGeral.cs rename to NFe.Utils/Tributacao/Federal/IPIGeral.cs diff --git a/Shared.NFe.Utils/Tributacao/Federal/PISGeral.cs b/NFe.Utils/Tributacao/Federal/PISGeral.cs similarity index 100% rename from Shared.NFe.Utils/Tributacao/Federal/PISGeral.cs rename to NFe.Utils/Tributacao/Federal/PISGeral.cs diff --git a/NFe.Utils/Validacao/Validador.cs b/NFe.Utils/Validacao/Validador.cs new file mode 100644 index 000000000..28e4b23e8 --- /dev/null +++ b/NFe.Utils/Validacao/Validador.cs @@ -0,0 +1,251 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ +using System; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Schema; +using DFe.Classes.Flags; +using DFe.Utils; +using NFe.Classes.Servicos.Evento; +using NFe.Classes.Servicos.Tipos; +using NFe.Utils.Excecoes; +using Shared.DFe.Utils; + +namespace NFe.Utils.Validacao +{ + public static class Validador + { + internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool lote = true) + { + switch (servicoNFe) + { + case ServicoNFe.NfeRecepcao: + return lote ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd"; + case ServicoNFe.RecepcaoEventoCancelmento: + var strEvento = FuncoesXml.ObterNodeDeStringXml(nameof(envEvento), stringXml); + var evento = FuncoesXml.XmlStringParaClasse(strEvento); + return evento.evento.FirstOrDefault()?.infEvento?.tpEvento == + NFeTipoEvento.TeNfeCancelamentoSubstituicao + ? "envEventoCancSubst_v1.00.xsd" + : "envEventoCancNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoCartaCorrecao: + return "envCCe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoInsucessoEntregaNFe: + return "envEventoInsucessoNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe: + return "envEventoCancInsucessoNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoComprovanteEntregaNFe: + return "envEventoEntregaNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: + return "envEventoCancEntregaNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe: + return "envEventoEConf_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe: + return "envEventoCancEConf_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoEpec: + return "envEPEC_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: + return "envConfRecebto_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoAtorInteressado: + return "envEventoAtorInteressado_v1.00.xsd"; + case ServicoNFe.NfeInutilizacao: + switch (versaoServico) + { + case VersaoServico.Versao200: + return "inutNFe_v2.00.xsd"; + case VersaoServico.Versao310: + return "inutNFe_v3.10.xsd"; + case VersaoServico.Versao400: + return "inutNFe_v4.00.xsd"; + } + break; + case ServicoNFe.NfeConsultaProtocolo: + switch (versaoServico) + { + case VersaoServico.Versao200: + return "consSitNFe_v2.01.xsd"; + case VersaoServico.Versao310: + return "consSitNFe_v3.10.xsd"; + case VersaoServico.Versao400: + return "consSitNFe_v4.00.xsd"; + } + break; + case ServicoNFe.NfeStatusServico: + switch (versaoServico) + { + case VersaoServico.Versao200: + return "consStatServ_v2.00.xsd"; + case VersaoServico.Versao310: + return "consStatServ_v3.10.xsd"; + case VersaoServico.Versao400: + return "consStatServ_v4.00.xsd"; + } + break; + case ServicoNFe.NFeAutorizacao: + + if (versaoServico != VersaoServico.Versao400) + { + return lote ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd"; + } + + return lote ? "enviNFe_v4.00.xsd" : "nfe_v4.00.xsd"; + case ServicoNFe.NfeConsultaCadastro: + return "consCad_v2.00.xsd"; + case ServicoNFe.NfeDownloadNF: + return "downloadNFe_v1.00.xsd"; + case ServicoNFe.NFeDistribuicaoDFe: + return "distDFeInt_v1.01.xsd"; // "distDFeInt_v1.00.xsd"; + case ServicoNFe.ConsultaGtin: + return "consGTIN_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente: + return lote ? "envEvento_v1.00.xsd" : "e112110_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido: + return lote ? "envEvento_v1.00.xsd" : "e211110_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal: + return lote ? "envEvento_v1.00.xsd" : "e211120_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito: + return lote ? "envEvento_v1.00.xsd" : "e211128_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoImobilizacaoDeItem: + return lote ? "envEvento_v1.00.xsd" : "e211130_v1.00.xsd "; + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel: + return lote ? "envEvento_v1.00.xsd" : "e211140_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente: + return lote ? "envEvento_v1.00.xsd" : "e211150_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + return lote ? "envEvento_v1.00.xsd" : "e212110_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + return lote ? "envEvento_v1.00.xsd" : "e212120_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: + return lote ? "envEvento_v1.00.xsd" : "e412120_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: + return lote ? "envEvento_v1.00.xsd" : "e412130_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoCancelamentoDeEvento: + return lote ? "envEvento_v1.00.xsd" : "e110001_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao: + return lote ? "envEvento_v1.00.xsd" : "e112120_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente: + return lote ? "envEvento_v1.00.xsd" : "e211124_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor: + return lote ? "envEvento_v1.00.xsd" : "e112130_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado: + return lote ? "envEvento_v1.00.xsd" : "e112140_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega: + return lote ? "envEvento_v1.00.xsd" : "e112150_v1.00.xsd"; + } + return null; + } + + public static void Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool validarLote = true, ConfiguracaoServico cfgServico = null) + { + string pathSchema = string.Empty; + + if (cfgServico == null || (cfgServico != null && string.IsNullOrWhiteSpace(cfgServico.DiretorioSchemas))) + pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas; + else + pathSchema = cfgServico.DiretorioSchemas; + + Valida(servicoNFe, versaoServico, stringXml, validarLote, pathSchema); + } + + public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool validarLote = true, string pathSchema = null) + { + StringBuilder falhas = new StringBuilder(); + + if (!Directory.Exists(pathSchema)) + throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); + + var arquivoSchema = Path.Combine(pathSchema, ObterArquivoSchema(servicoNFe, versaoServico, stringXml, validarLote)); + + // Define o tipo de validação + XmlReaderSettings cfg = new XmlReaderSettings + { + ValidationType = ValidationType.Schema, // Previne ataques XXE: nao permite resolver recursos externos + DtdProcessing = DtdProcessing.Prohibit, + XmlResolver = null + }; + + // Carrega o arquivo de esquema + XmlSchemaSet schemas = new XmlSchemaSet + { + XmlResolver = new XmlUrlResolver() + }; + + cfg.Schemas = schemas; + // Quando carregar o eschema, especificar o namespace que ele valida + // e a localização do arquivo + schemas.Add(null, arquivoSchema); + // Especifica o tratamento de evento para os erros de validacao + cfg.ValidationEventHandler += delegate (object sender, ValidationEventArgs args) + { + string message = args.Message.ToLower().RemoverAcentos(); + + if (!( + + //Está errado o schema. Pois o certo é ser 20 o length e não 28 como está no schema envIECTE_v4.00xsd + (message.Contains("hashtentativaentrega") && message.Contains("o comprimento atual nao e igual")) || + + //erro de orgaoibge que duplicou em alguns xsds porem a receita federal veio a arrumar posteriormente, mesmo assim alguns não atualizam os xsds + (message.Contains("tcorgaoibge") && message.Contains("ja foi declarado")) + + //no futuro adicionar novos aqui... + )) + { + falhas.AppendLine($"[{args.Severity}] - {message} {args.Exception?.Message} " + + $"na linha {args.Exception.LineNumber} " + + $"posição {args.Exception.LinePosition} " + + $"em {args.Exception.SourceUri}".ToString()); + } + }; + + // cria um leitor para validação + XmlReader validator = XmlReader.Create(new StringReader(stringXml), cfg); + try + { + // Faz a leitura de todos os dados XML + while (validator.Read()) { } + } + catch { } + finally + { + validator.Close(); + } + + if (falhas.Length > 0) + throw new ValidacaoSchemaException($"Ocorreu o seguinte erro durante a validação XML: {Environment.NewLine}{falhas}", stringXml); + + return falhas.ToString().Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + } + } +} \ No newline at end of file diff --git a/NFe.Wsdl.Standard/ConsultaGtin/ConsultaGTINApi.cs b/NFe.Wsdl.Standard/ConsultaGtin/ConsultaGTINApi.cs new file mode 100644 index 000000000..fc9046a61 --- /dev/null +++ b/NFe.Wsdl.Standard/ConsultaGtin/ConsultaGTINApi.cs @@ -0,0 +1,72 @@ +using System; +using System.Security.Cryptography.X509Certificates; +using System.Xml; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace NFe.Wsdl.ConsultaGtin +{ + public class ConsultaGTINApi : INfeServico + { + public ConsultaGTINApi(string url, X509Certificate certificado, int timeOut) + { + configuracao = new WsdlConfiguracao() + { + Url = url, + CertificadoDigital = new X509Certificate2(certificado), + TimeOut = timeOut, + }; + } + + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private readonly WsdlConfiguracao configuracao; + + public XmlNode Execute(XmlNode nfeDadosMsg) + { + soapEnvelope = new SoapEnvelope(); + + soapEnvelope.body = new ResponseBody + { + ccgConsGTIN = new ccgConsGTIN + { + nfeDadosMsg = nfeDadosMsg + } + }; + + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, + actionUrn: "http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin/ccgConsGTIN", + responseElementName: "nfeResultMsg" + ).FirstChild; + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin")] + public ccgConsGTIN ccgConsGTIN { get; set; } + } + + public class ccgConsGTIN + { + public XmlNode nfeDadosMsg { get; set; } + } + + [Obsolete("Não utilizar na nfe 4.0")] + public nfeCabecMsg nfeCabecMsg { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Wsdl.Standard/NFe.Wsdl.Standard.csproj b/NFe.Wsdl.Standard/NFe.Wsdl.Standard.csproj index 737e9a16e..6784af83a 100644 --- a/NFe.Wsdl.Standard/NFe.Wsdl.Standard.csproj +++ b/NFe.Wsdl.Standard/NFe.Wsdl.Standard.csproj @@ -1,17 +1,22 @@  - - netstandard2.0 - + + netstandard2.0;net6.0 + + - - - - - - - + + + + + + + - + + + + + diff --git a/NFe.Wsdl/ConsultaGtin/ConsultaGTINApi.cs b/NFe.Wsdl/ConsultaGtin/ConsultaGTINApi.cs new file mode 100644 index 000000000..b0ef78ab4 --- /dev/null +++ b/NFe.Wsdl/ConsultaGtin/ConsultaGTINApi.cs @@ -0,0 +1,76 @@ +using System; +using System.Security.Cryptography.X509Certificates; +using System.Web.Services; +using System.Web.Services.Description; +using System.Web.Services.Protocols; +using System.Xml; +using System.Xml.Linq; +using System.Xml.Serialization; +using CTe.CTeOSDocumento.Common; + +namespace NFe.Wsdl.ConsultaGtin +{ + public class ConsultaGTINApi : INfeServico + { + public ConsultaGTINApi(string url, X509Certificate certificado, int timeOut) + { + configuracao = new WsdlConfiguracao() + { + Url = url, + CertificadoDigital = new X509Certificate2(certificado), + TimeOut = timeOut, + }; + } + + //Envelope SOAP para envio + private SoapEnvelope soapEnvelope; + + //Configurações do WSDL para estabelecimento da comunicação + private readonly WsdlConfiguracao configuracao; + + public XmlNode Execute(XmlNode nfeDadosMsg) + { + soapEnvelope = new SoapEnvelope(); + + soapEnvelope.body = new ResponseBody + { + ccgConsGTIN = new ccgConsGTIN + { + nfeDadosMsg = nfeDadosMsg + } + }; + + return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, + actionUrn: "http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin/ccgConsGTIN", + responseElementName: "nfeResultMsg" + ).FirstChild; + } + + /// + /// Classe base para a serialização no formato do envelope SOAP. + /// + [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public class SoapEnvelope : CommonSoapEnvelope + { + [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] + public ResponseBody body { get; set; } + } + + /// + /// Classe para o corpo do Envelope SOAP + /// + public class ResponseBody : CommonResponseBody + { + [XmlElement(Namespace = "http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin")] + public ccgConsGTIN ccgConsGTIN { get; set; } + } + + public class ccgConsGTIN + { + public XmlNode nfeDadosMsg { get; set; } + } + + [Obsolete("Não utilizar na nfe 4.0")] + public nfeCabecMsg nfeCabecMsg { get; set; } + } +} \ No newline at end of file diff --git a/NFe.Wsdl/NFe.Wsdl.csproj b/NFe.Wsdl/NFe.Wsdl.csproj index dd859f67a..67c66a928 100644 --- a/NFe.Wsdl/NFe.Wsdl.csproj +++ b/NFe.Wsdl/NFe.Wsdl.csproj @@ -1,221 +1,23 @@ - - - - - Debug - AnyCPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA} - Library - Properties - NFe.Wsdl - NFe.Wsdl - v4.5 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - On - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - Component - - - Component - - - Component - - - Component - - - Component - - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - - - {9984ec15-18e1-4a87-b4db-18ac913dc4e8} - DFe.Classes - - - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C} - DFe.Utils - - - {DBEE88E7-6003-436E-9810-9ACC662F5851} - DFe.Wsdl - - - {29ca1da2-440d-484b-951a-cf1b2eb27984} - NFe.Classes - - - {E35E7C4A-5690-4979-8B43-002975B48EAA} - NFe.Utils - - - - - - - \ No newline at end of file + + + + net462 + + + + + + + + + + + + + + + + + + + diff --git a/NFe.Wsdl/NFe.Wsdl.csproj.DotSettings b/NFe.Wsdl/NFe.Wsdl.csproj.DotSettings deleted file mode 100644 index 662f95686..000000000 --- a/NFe.Wsdl/NFe.Wsdl.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CSharp50 \ No newline at end of file diff --git a/NFe.Wsdl/NFe.Wsdl.csproj.user b/NFe.Wsdl/NFe.Wsdl.csproj.user index ca1d04b08..f040b3779 100644 --- a/NFe.Wsdl/NFe.Wsdl.csproj.user +++ b/NFe.Wsdl/NFe.Wsdl.csproj.user @@ -3,4 +3,144 @@ ProjectFiles + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + \ No newline at end of file diff --git a/NFe.Wsdl/NFe.Wsdl.csproj.vspscc b/NFe.Wsdl/NFe.Wsdl.csproj.vspscc deleted file mode 100644 index b6d32892f..000000000 --- a/NFe.Wsdl/NFe.Wsdl.csproj.vspscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" -} diff --git a/NFe.Wsdl/Properties/AssemblyInfo.cs b/NFe.Wsdl/Properties/AssemblyInfo.cs deleted file mode 100644 index 56194829a..000000000 --- a/NFe.Wsdl/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,71 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Reflection; -using System.Runtime.InteropServices; - -// Informações gerais sobre um assembly são controladas através do seguinte -// conjunto de atributos. Altere o valor destes atributos para modificar a informação -// associada a um assembly. - -[assembly: AssemblyTitle("NFe.Wsdl")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NFe.Wsdl")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Definir ComVisible como false torna os tipos neste assembly não visíveis -// para componentes COM. Caso precise acessar um tipo neste assembly a partir de -// COM, defina o atributo ComVisible como true nesse tipo. - -[assembly: ComVisible(false)] - -// O GUID a seguir é para o ID da typelib se este projeto for exposto para COM - -[assembly: Guid("08287e8a-b89e-4a96-b605-44729b64a124")] - -// Informações de Versão para um assembly consistem nos quatro valores a seguir: -// -// Versão Principal -// Versão Secundária -// Número da Versão -// Revisão -// -// É possível especificar todos os valores ou usar o padrão de Números de Compilação e Revisão -// utilizando o '*' como mostrado abaixo: -// [assembly: AssemblyVersion("1.0.0.772")] - -[assembly: AssemblyVersion("1.0.0.772")] -[assembly: AssemblyFileVersion("1.0.0.772")] diff --git a/NuGet/Zeus.Net.CTe/Zeus.Net.CTe.csproj b/NuGet/Zeus.Net.CTe/Zeus.Net.CTe.csproj new file mode 100644 index 000000000..104eeeedd --- /dev/null +++ b/NuGet/Zeus.Net.CTe/Zeus.Net.CTe.csproj @@ -0,0 +1,12 @@ + + + + net462;netstandard2.0;net6.0 + AnyCpu + Release + true + false + Zeus.Net.CTe.nuspec + + + diff --git a/NuGet/Zeus.Net.CTe/Zeus.Net.CTe.nuspec b/NuGet/Zeus.Net.CTe/Zeus.Net.CTe.nuspec new file mode 100644 index 000000000..0983d7387 --- /dev/null +++ b/NuGet/Zeus.Net.CTe/Zeus.Net.CTe.nuspec @@ -0,0 +1,50 @@ + + + + Zeus.Net.CTe + $version$ + Zeus CT-e (x86/x64) + Zeus + Zeus + https://github.com/ZeusAutomacao/DFe.NET + icon.png + false + Biblioteca para geração de CT-e. + + zeus + pt-BR + df-e dfe cte ct-e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NuGet/Zeus.Net.CTe/icon.png b/NuGet/Zeus.Net.CTe/icon.png new file mode 100644 index 000000000..0b976420b Binary files /dev/null and b/NuGet/Zeus.Net.CTe/icon.png differ diff --git a/NuGet/Zeus.Net.MDFe/Zeus.Net.MDFe.csproj b/NuGet/Zeus.Net.MDFe/Zeus.Net.MDFe.csproj new file mode 100644 index 000000000..3c39ba076 --- /dev/null +++ b/NuGet/Zeus.Net.MDFe/Zeus.Net.MDFe.csproj @@ -0,0 +1,12 @@ + + + + net462;netstandard2.0;net6.0 + AnyCpu + Release + true + false + Zeus.Net.MDFe.nuspec + + + diff --git a/NuGet/Zeus.Net.MDFe/Zeus.Net.MDFe.nuspec b/NuGet/Zeus.Net.MDFe/Zeus.Net.MDFe.nuspec new file mode 100644 index 000000000..d4475ebc3 --- /dev/null +++ b/NuGet/Zeus.Net.MDFe/Zeus.Net.MDFe.nuspec @@ -0,0 +1,50 @@ + + + + Zeus.Net.MDFe + $version$ + Zeus MDFe (x86/x64) + Zeus + Zeus + https://github.com/ZeusAutomacao/DFe.NET + icon.png + false + Biblioteca para geração de MDF-e. + + zeus + pt-BR + df-e dfe mdfe mdf-e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NuGet/Zeus.Net.MDFe/icon.png b/NuGet/Zeus.Net.MDFe/icon.png new file mode 100644 index 000000000..0b976420b Binary files /dev/null and b/NuGet/Zeus.Net.MDFe/icon.png differ diff --git a/NuGet/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport.nuspec b/NuGet/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport.nuspec new file mode 100644 index 000000000..4f7f17ecc --- /dev/null +++ b/NuGet/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport.nuspec @@ -0,0 +1,84 @@ + + + + Zeus.Net.NFe.NFCe.OpenFastReport + 1.0.1 + Zeus NF-e e NFC-e (x86/x64) + Zeus + Zeus + https://github.com/ZeusAutomacao/DFe.NET + icon.png + false + Biblioteca para geração de nf-e e nfc-e. + + zeus + pt-BR + nfc-e nf-e nfce nfe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NuGet/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport/icon.png b/NuGet/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport/icon.png new file mode 100644 index 000000000..310c33824 Binary files /dev/null and b/NuGet/Zeus.Net.NFe.NFCe.Danfe.OpenFastReport/icon.png differ diff --git a/NuGet/Zeus.Net.NFe.NFCe/Zeus.Net.NFe.NFCe.csproj b/NuGet/Zeus.Net.NFe.NFCe/Zeus.Net.NFe.NFCe.csproj new file mode 100644 index 000000000..6898d6292 --- /dev/null +++ b/NuGet/Zeus.Net.NFe.NFCe/Zeus.Net.NFe.NFCe.csproj @@ -0,0 +1,12 @@ + + + + net462;netstandard2.0;net6.0 + AnyCpu + Release + true + false + Zeus.Net.NFe.NFCe.nuspec + + + diff --git a/NuGet/Zeus.Net.NFe.NFCe/Zeus.Net.NFe.NFCe.nuspec b/NuGet/Zeus.Net.NFe.NFCe/Zeus.Net.NFe.NFCe.nuspec new file mode 100644 index 000000000..3013a9d7b --- /dev/null +++ b/NuGet/Zeus.Net.NFe.NFCe/Zeus.Net.NFe.NFCe.nuspec @@ -0,0 +1,50 @@ + + + + Zeus.Net.NFe.NFCe + $version$ + Zeus NF-e e NFC-e (x86/x64) + Zeus + Zeus + https://github.com/ZeusAutomacao/DFe.NET + icon.png + false + Biblioteca para geração de nf-e e nfc-e. + + zeus + pt-BR + nfc-e nf-e nfce nfe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NuGet/Zeus.Net.NFe.NFCe/icon.png b/NuGet/Zeus.Net.NFe.NFCe/icon.png new file mode 100644 index 000000000..310c33824 Binary files /dev/null and b/NuGet/Zeus.Net.NFe.NFCe/icon.png differ diff --git a/NuGet/ctedll/Zeus.Net.CTe.nuspec b/NuGet/ctedll/Zeus.Net.CTe.nuspec deleted file mode 100644 index 689ee639d..000000000 --- a/NuGet/ctedll/Zeus.Net.CTe.nuspec +++ /dev/null @@ -1,33 +0,0 @@ - - - - Zeus.Net.CTe - 1.0.0 - Zeus CT-e (x86/x64) - Zeus - Zeus - https://github.com/ZeusAutomacao/DFe.NET - https://avatars0.githubusercontent.com/u/32456879?s=200&v=4 - false - Biblioteca para geração de CT-e. - - zeus - pt-BR - df-e dfe cte ct-e - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ctedll/lib/net40/CTe.Classes.dll b/NuGet/ctedll/lib/net40/CTe.Classes.dll deleted file mode 100644 index 780d83e5a..000000000 Binary files a/NuGet/ctedll/lib/net40/CTe.Classes.dll and /dev/null differ diff --git a/NuGet/ctedll/lib/net40/CTe.Servicos.dll b/NuGet/ctedll/lib/net40/CTe.Servicos.dll deleted file mode 100644 index 4235076e6..000000000 Binary files a/NuGet/ctedll/lib/net40/CTe.Servicos.dll and /dev/null differ diff --git a/NuGet/ctedll/lib/net40/CTe.Utils.dll b/NuGet/ctedll/lib/net40/CTe.Utils.dll deleted file mode 100644 index aab7861bf..000000000 Binary files a/NuGet/ctedll/lib/net40/CTe.Utils.dll and /dev/null differ diff --git a/NuGet/ctedll/lib/net40/CTe.Wsdl.dll b/NuGet/ctedll/lib/net40/CTe.Wsdl.dll deleted file mode 100644 index 217e8ae02..000000000 Binary files a/NuGet/ctedll/lib/net40/CTe.Wsdl.dll and /dev/null differ diff --git a/NuGet/ctedll/lib/net40/DFe.Classes.dll b/NuGet/ctedll/lib/net40/DFe.Classes.dll deleted file mode 100644 index 93e8a5a0f..000000000 Binary files a/NuGet/ctedll/lib/net40/DFe.Classes.dll and /dev/null differ diff --git a/NuGet/ctedll/lib/net40/DFe.Utils.dll b/NuGet/ctedll/lib/net40/DFe.Utils.dll deleted file mode 100644 index ebfd94a71..000000000 Binary files a/NuGet/ctedll/lib/net40/DFe.Utils.dll and /dev/null differ diff --git a/NuGet/mdfedll/Zeus.Net.MDFe.nuspec b/NuGet/mdfedll/Zeus.Net.MDFe.nuspec deleted file mode 100644 index ecdb6c8e9..000000000 --- a/NuGet/mdfedll/Zeus.Net.MDFe.nuspec +++ /dev/null @@ -1,26 +0,0 @@ - - - - Zeus.Net.MDFe - 1.0.0 - Zeus MDFe (x86/x64) - Zeus - Zeus - https://github.com/ZeusAutomacao/DFe.NET - https://avatars0.githubusercontent.com/u/32456879?s=200&v=4 - false - Biblioteca para geração de MDF-e. - Trocado namespace das classes - zeus - pt-BR - df-e dfe mdfe mdf-e - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/mdfedll/lib/net40/DFe.Classes.dll b/NuGet/mdfedll/lib/net40/DFe.Classes.dll deleted file mode 100644 index 33ddfbd47..000000000 Binary files a/NuGet/mdfedll/lib/net40/DFe.Classes.dll and /dev/null differ diff --git a/NuGet/mdfedll/lib/net40/DFe.Utils.dll b/NuGet/mdfedll/lib/net40/DFe.Utils.dll deleted file mode 100644 index f5f7ead7c..000000000 Binary files a/NuGet/mdfedll/lib/net40/DFe.Utils.dll and /dev/null differ diff --git a/NuGet/mdfedll/lib/net40/MDFe.Classes.dll b/NuGet/mdfedll/lib/net40/MDFe.Classes.dll deleted file mode 100644 index 58b5b9345..000000000 Binary files a/NuGet/mdfedll/lib/net40/MDFe.Classes.dll and /dev/null differ diff --git a/NuGet/mdfedll/lib/net40/MDFe.Servicos.dll b/NuGet/mdfedll/lib/net40/MDFe.Servicos.dll deleted file mode 100644 index 4f4a4a647..000000000 Binary files a/NuGet/mdfedll/lib/net40/MDFe.Servicos.dll and /dev/null differ diff --git a/NuGet/mdfedll/lib/net40/MDFe.Utils.dll b/NuGet/mdfedll/lib/net40/MDFe.Utils.dll deleted file mode 100644 index 9b888d82a..000000000 Binary files a/NuGet/mdfedll/lib/net40/MDFe.Utils.dll and /dev/null differ diff --git a/NuGet/mdfedll/lib/net40/MDFe.Wsdl.dll b/NuGet/mdfedll/lib/net40/MDFe.Wsdl.dll deleted file mode 100644 index bf7d7b223..000000000 Binary files a/NuGet/mdfedll/lib/net40/MDFe.Wsdl.dll and /dev/null differ diff --git a/NuGet/nfenfcedll/Zeus.Net.NFe.NFCe.nuspec b/NuGet/nfenfcedll/Zeus.Net.NFe.NFCe.nuspec deleted file mode 100644 index bd963e2a2..000000000 --- a/NuGet/nfenfcedll/Zeus.Net.NFe.NFCe.nuspec +++ /dev/null @@ -1,34 +0,0 @@ - - - - Zeus.Net.NFe.NFCe - 1.0.1 - Zeus NF-e e NFC-e (x86/x64) - Zeus - Zeus - https://github.com/ZeusAutomacao/DFe.NET - https://avatars0.githubusercontent.com/u/32456879?s=200&v=4 - false - Biblioteca para geração de nf-e e nfc-e. - - zeus - pt-BR - nfc-e nf-e nfce nfe - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/nfenfcedll/lib/net40/DFe.Classes.dll b/NuGet/nfenfcedll/lib/net40/DFe.Classes.dll deleted file mode 100644 index 33ddfbd47..000000000 Binary files a/NuGet/nfenfcedll/lib/net40/DFe.Classes.dll and /dev/null differ diff --git a/NuGet/nfenfcedll/lib/net40/DFe.Utils.dll b/NuGet/nfenfcedll/lib/net40/DFe.Utils.dll deleted file mode 100644 index f5f7ead7c..000000000 Binary files a/NuGet/nfenfcedll/lib/net40/DFe.Utils.dll and /dev/null differ diff --git a/NuGet/nfenfcedll/lib/net40/NFe.Classes.dll b/NuGet/nfenfcedll/lib/net40/NFe.Classes.dll deleted file mode 100644 index db3322b0d..000000000 Binary files a/NuGet/nfenfcedll/lib/net40/NFe.Classes.dll and /dev/null differ diff --git a/NuGet/nfenfcedll/lib/net40/NFe.Servicos.dll b/NuGet/nfenfcedll/lib/net40/NFe.Servicos.dll deleted file mode 100644 index ed40f1616..000000000 Binary files a/NuGet/nfenfcedll/lib/net40/NFe.Servicos.dll and /dev/null differ diff --git a/NuGet/nfenfcedll/lib/net40/NFe.Utils.dll b/NuGet/nfenfcedll/lib/net40/NFe.Utils.dll deleted file mode 100644 index 9c26e233f..000000000 Binary files a/NuGet/nfenfcedll/lib/net40/NFe.Utils.dll and /dev/null differ diff --git a/NuGet/nfenfcedll/lib/net40/NFe.Wsdl.dll b/NuGet/nfenfcedll/lib/net40/NFe.Wsdl.dll deleted file mode 100644 index 58f7e8b78..000000000 Binary files a/NuGet/nfenfcedll/lib/net40/NFe.Wsdl.dll and /dev/null differ diff --git a/README.md b/README.md old mode 100755 new mode 100644 index 1b1db4941..ad124c97e --- a/README.md +++ b/README.md @@ -1,10 +1,31 @@ -Biblioteca em C# para geração de NFe +**Biblioteca em C# para emissão e impressão de NFe, NFCe, MDF-e e CT-e** -Grupo Skype => enviar email para robertoalvespereira18@gmail.com +DFe.NET +================== -[![Build status](https://ci.appveyor.com/api/projects/status/7igb6s48sw2p95o3/branch/master?svg=true)](https://ci.appveyor.com/project/adeniltonbs/zeus-net-nfe-nfce/branch/master) -[![Issues](https://img.shields.io/github/issues/ZeusAutomacao/DFe.NET.svg?style=flat-square)](https://github.com/ZeusAutomacao/DFe.NET/issues) +Biblioteca gratuita para Geração de NFe 3.10/4.00, NFCe 3.10/4.00, MDF-e 3.0 e CT-e 3.0/4.0 e consumo dos serviços necessários à sua manutenção, conforme descritos em http://www.nfe.fazenda.gov.br/portal/principal.aspx, https://mdfe-portal.sefaz.rs.gov.br e www.cte.fazenda.gov.br/portal. + +A biblioteca foi desenvolvida em **C#** utilizando Visual Studio Community 2022 com os SDKs net462, netstandard2.0 e net6.0 instalados. + + +## Versões suportadas: +| Escopos | Frameworks Suportados | +| ------------------- | ------------------- | +| NFe, NFCe, CTe, MDFe | .NET 4.6.2, .NET 4.7, .NET 4.7.1, .NET 4.7.2, .NET 4.8, .NetStandard 2.0, .NET 6.0 .NET 7.0 .NET 8.0 | +| Impressões com OpenFastReport (NFe, NFCe, CTe, MDFe) | ..NET 4.6.2, .NET 4.7, .NET 4.7.1, .NET 4.7.2, .NET 4.8, .NetStandard 2.0, .NET 6.0(windows+linux) .NET 7.0+(windows) | +| Impressões com FastReport(versão paga) (NFe, NFCe, CTe, MDFe) | .NET 4.6.2, .NET 4.7, .NET 4.7.1, .NET 4.7.2, .NET 4.8 .NetStandard 2.0, .NET 6.0 .NET 7.0+(windows) | +| Impressões com FastReport.Skia(versão paga) (NFe) | .NET 7.0+(windows+linux+mobile) | + +***Não temos suporte para .NetFramework 4.5.2 ou 4.5 ou menor. A Biblioteca irá seguir o [ciclo de vida de versões da microsoft](https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet-framework), sendo retirado a compatibilidade de versoes específicas e antigas do .Net caso a microsoft retire seu suporte.*** + +Licenciada sobre a **LGPL** (https://pt.wikipedia.org/wiki/GNU_Lesser_General_Public_License). + +## Pacotes Nugets +------------------ +A melhor maneira de você ter a última versão do Zeus em seu projeto é utilizando os pacotes Nugets abaixo +[![Build status](https://github.com/ZeusAutomacao/DFe.NET/actions/workflows/DFe.NET_build.yml/badge.svg?branch=master)](https://github.com/ZeusAutomacao/DFe.NET/actions/workflows/DFe.NET_build.yml) +[![Issues](https://img.shields.io/github/issues/ZeusAutomacao/DFe.NET.svg?style=flat-square)](https://github.com/ZeusAutomacao/DFe.NET/issues) [![Nuget downloads](https://img.shields.io/nuget/dt/Zeus.Net.NFe.NFCe.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.NFCe/) [![Nuget count](http://img.shields.io/nuget/v/Zeus.Net.NFe.NFCe.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.NFCe/) @@ -12,23 +33,25 @@ Grupo Skype => enviar email para robertoalvespereira18@gmail.com [![Nuget downloads](https://img.shields.io/nuget/dt/Zeus.Net.MDFe.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.NFCe/) [![Nuget count](https://img.shields.io/nuget/v/Zeus.Net.MDFe.svg)](http://www.nuget.org/packages/Zeus.Net.MDFe/) - Zeus.MDFe + Zeus.MDFe [![Nuget downloads](https://img.shields.io/nuget/dt/Zeus.Net.CTe.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.NFCe/) [![Nuget count](https://img.shields.io/nuget/v/Zeus.Net.CTe.svg)](http://www.nuget.org/packages/Zeus.Net.CTe/) - Zeus.CTe - + Zeus.CTe -DFe.NET -================= +[![Nuget downloads](https://img.shields.io/nuget/dt/Zeus.Net.NFe.Danfe.Html.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.Danfe.Html/) +[![Nuget count](https://img.shields.io/nuget/v/Zeus.Net.NFe.Danfe.Html.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.Danfe.Html/) +Zeus.Net.NFe.Danfe.Html -Biblioteca gratuita para Geração de NFe 3.10/4.00, NFCe 3.10/4.00, MDF-e 3.0 e CT-e 3.0 e consumo dos serviços necessários à sua manutenção, conforme descritos em http://www.nfe.fazenda.gov.br/portal/principal.aspx, https://mdfe-portal.sefaz.rs.gov.br e www.cte.fazenda.gov.br/portal. +[![Nuget downloads](https://img.shields.io/nuget/dt/Zeus.Net.NFe.Danfe.PdfClown.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.Danfe.PdfClown/) +[![Nuget count](https://img.shields.io/nuget/v/Zeus.Net.NFe.Danfe.PdfClown.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.Danfe.PdfClown/) +Zeus.Net.NFe.Danfe.PdfClown -A biblioteca foi desenvolvida em C# utilizando como IDE o Visual Studio Community 2013 e é compatível com o Visual Studio Community 2015, 2017 e 2019. Atualmente utiliza o .NetFramework na versão 4.5. Alguns módulos como CTe, NFe já foram migradas para funcionarem em .NetCore/.NetStandard 2.0. +[![Nuget downloads](https://img.shields.io/nuget/dt/Zeus.Net.NFe.Danfe.QuestPdf.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.Danfe.QuestPdf/) +[![Nuget count](https://img.shields.io/nuget/v/Zeus.Net.NFe.Danfe.QuestPdf.svg)](http://www.nuget.org/packages/Zeus.Net.NFe.Danfe.QuestPdf/) +Zeus.Net.NFe.Danfe.QuestPdf -Está licenciada sobre a *LGPL* (https://pt.wikipedia.org/wiki/GNU_Lesser_General_Public_License). - -**O que a biblioteca faz:** +## O que a biblioteca faz: ------------------ O projeto traz classes construídas de forma manual que extraem a complexidade dos XSDs. Com isso é possível preencher objetos nativos em .NET e gerar o XML na estrutura exigida para seu DFe, assim como o processo inverso de ler um XML de um DFe e obter objetos nativos em .NET. @@ -45,25 +68,44 @@ danfe.Visualizar(); //danfe.ExibirDesign(); ``` -**Como usar a ferramenta:** +## Reforma tributária +A biblioteca está em processo de adequação à **Reforma Tributária do Consumo**, que impacta diretamente documentos fiscais eletrônicos. + +A partir do Pull Request [#1649](https://github.com/ZeusAutomacao/DFe.NET/pull/1649) e da versão **2025.10.03.1855** do pacote NuGet, a biblioteca passa a atender **parcialmente** os requisitos estabelecidos pela reforma para NFe e NFCe. + +O acompanhamento do suporte à reforma pode ser realizado na issue [#1615](https://github.com/ZeusAutomacao/DFe.NET/issues/1615). + +Além disso, o suporte para **CTe** e **MDFe** será tratado futuramente nas issues: + +* [#1623](https://github.com/ZeusAutomacao/DFe.NET/issues/1623) – Suporte para CTe +* [#1624](https://github.com/ZeusAutomacao/DFe.NET/issues/1624) – Suporte para MDFe + +Contribuições da comunidade são muito bem-vindas para acelerar a implementação completa dessas mudanças. 🚀 + +## Contribuindo com a biblioteca + +Para saber como contribuir com o projeto, consulte as [Diretrizes de Contribuição](CONTRIBUTING.md). Desde já agradecemos sua contribuição e esperamos que você aproveite e colabore com o desenvolvimento do projeto DFe.NET! + +## Como usar a ferramenta: ----------- -Antes de qualquer coisa leia os manuais e conheça à fundo o(s) projetos que pretende usar, entenda o que é um DFe (documento fiscal eletrônico), o que é um certificado, como funciona um webservice, o que é obrigatório ser informado no DFe que pretende emitir, entre outras informações. Isso vai ajudar na construção do seu software e na integração com a biblioteca. +Antes de qualquer coisa leia os manuais e conheça a fundo o(s) projetos que pretende usar, entenda o que é um DFe (documento fiscal eletrônico), o que é um certificado, como funciona um webservice, o que é obrigatório ser informado no DFe que pretende emitir, entre outras informações. Isso vai ajudar na construção do seu software e na integração com a biblioteca. Com o conhecimento prévio adquirido, agora você precisa estudar a biblioteca. A linguagem utilizada é C#, logo um conhecimento basico da linguagem pode te ajudar bastante, mesmo que você use apenas as dlls com VB.Net ou outra linguagem compatível. Para facilitar o seus estudos a biblioteca oferece projetos do tipo DEMO, sendo eles (por ordem alfabética): - *CTe.AppTeste:* Projeto em WPF para demonstração de uso do CTe; -- *CTe.AppTeste.NetCore:* Projeto em Console para demonstração de uso do CTe em .NetCore; +- *CTe.AppTeste.NetCore:* Projeto em Console para demonstração de uso do CTe em .NET6; - *CTe.Dacte.AppTeste:* Projeto em Winforms para demonstração de uso da impressão do CTe (necessita do FastReport.Net¹); - *MDFe.AppTeste:* Projeto em WPF para demonstração de uso do MDFe; - *MDFe.Damdfe.AppTeste:* Projeto em Winforms para demonstração de uso da impressão do MDFe (necessita do FastReport.Net¹); - *NFe.AppTeste:* Projeto em WPF para demonstração de uso do NFe; -- *NFe.AppTeste.NetCore:* Projeto em Console para demonstração de uso do NFe em .NetCore; -- *NFe.Danfe.AppTeste:* Projeto em WPF para demonstração de uso da impressão da NFe e NFCe (A NFe e NFCe estão disponíveis em FastReport.Net¹. A NFC-e também está disponível de forma nativa, entretanto para O DEMO é necessária as DLLs do FastReport.Net¹. *A utilização do DANFe da NFCe de forma nativa fora do DEMO não depende do FastReports.Net*); -- *NFe.Danfe.AppTeste.NetCore:* Projeto em Console para demonstração de uso da impressão da NFe apenas, como DANFE de xml não registrado e registrado ou Eventos como carta de correção e cancelamento.(A NFe utiliza o FastReport.OpenSource (https://github.com/FastReports/FastReport). Não é necessário nenhuma DLL externa, tudo está incluído no pacote nuget.); +- *NFe.AppTeste.NetCore:* Projeto em Console para demonstração de uso do NFe e NFCe em .NET6; +- *NFe.Danfe.AppTeste.Fast:* Projeto em WPF para demonstração de uso da impressão da NFe e NFCe (A NFe e NFCe estão disponíveis em FastReport.Net¹. A NFC-e também está disponível de forma nativa, entretanto para O DEMO é necessária as DLLs do FastReport.Net¹. *A utilização do DANFe da NFCe de forma nativa fora do DEMO não depende do FastReports.Net*); +- *NFe.Danfe.AppTeste.OpenFast:* Projeto em Console em .NET6 para demonstração de uso de impressão da NFe, NFCe, como DANFE de xml não registrado e registrado ou Eventos como carta de correção e cancelamento.(A NFe utiliza o FastReport.OpenSource (https://github.com/FastReports/FastReport). Não é necessário nenhuma DLL externa, tudo está incluído no pacote nuget.); -**Impressão (.NetFramework):** ----------- +## Impressão (FastReport): + +- Exemplo no Projeto *NFe.Danfe.AppTeste.Fast*. - A impressão de forma nativa (sem dependências de bibliotecas de terceiros) está disponível somente para a *NFCe*¹. - O projeto conta também com a impressão em FastReport.Net¹ (https://www.fast-report.com/pt/product/fast-report-net/) para *NFe*, *NFCe²* _(térmica)_, *CTe* _(modal rodoviário)_ e *MDFe*. @@ -73,14 +115,13 @@ Para facilitar o seus estudos a biblioteca oferece projetos do tipo DEMO, sendo As fontes estão anexadas ao projeto em Shared.NFe.Danfe.Base\Fontes_; Instale as fontes informadas no PC que for imprimir o DANFE da NFCe_; ->³ Atualmente existe um esforço da comunidade para migrar o projeto para o .NetStandard (https://github.com/ZeusAutomacao/DFe.NET/issues/1001). Entre as mudanças, esta adicionar suporte ao Fast Reports Open Source (https://github.com/FastReports/FastReport). A principal limitação do FastReports nessa versão é não ter acesso à direct print, o que pode ser ruim para NFCe, mas pode ser facilmente contornado para os outros documentos, comentem na issue ideias e opiniões, e se possíve, colaborem com o branch. +## Impressão (OpenFastReport): -**Impressão (.NetCore/.NetStandard):** ----------- -- Não existe suporte até o momento para impressão de NFCe (utilize a opção ESC/POS em https://github.com/marcosgerene/Gerene.DFe.EscPos). +- Exemplos no Projeto *NFe.Danfe.AppTeste.OpenFast*. - A impressão da NFe utiliza o FastReport.OpenSource (https://github.com/FastReports/FastReport), sendo ele instalado automatico ao utilizar o pacote nuget do Zeus. - A impressão requer que o arquivo .frx seja indicado, ou seja, ao publicar os binarios de seu projeto os arquivos .frx devem estar juntos e passado o caminho do arquivo para que seja gerado a impressão. -- Até o momento não é suportado a impressão direta na impressora. As saídas suportadas são Stream ou Byte[], sendo elas em PDF, HTML e PNG. +- As saídas suportadas pelo FastReport.OpenSource são Stream ou Byte[], sendo elas em PDF, HTML e PNG. +- Para Impressão de NFCe tambem existe a seguinte opção ESC/POS (direto na impressora): https://github.com/marcosgerene/Gerene.DFe.EscPos. #### Impressão em Linux (Nativo ou Docker) @@ -98,6 +139,14 @@ Foi necessário a instalação da biblioteca **libgdiplus** && apt-get install -y --no-install-recommends libgdiplus libc6-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* + +Caso aconteça algum erro de System.OutOfMemoryException, utilize a versão 6.0.5, o código acima instala a versão padrão dependendo da versão do SO (6.0.4), para instalar a 6.0.5 utilize o seguinte código, nesse caso para Debian 10: + +> RUN apt-get update && apt-get remove libgdiplus -y && apt autoremove -y && apt-get install -y apt-transport-https dirmngr gnupg ca-certificates \ + RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \ + RUN echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list \ + RUN apt-get update && apt-get install -y libgdiplus=6.0.5-0xamarin1+debian10b1 \ + RUN apt show libgdiplus && rm -rf /var/lib/apt/lists/* Tambem foi necessário copiar algumas **fontes**, o relatório de Danfe atual utiliza **Times New Roman**, as fontes contem royalties e não existe repositório online com as mesmas, porem as mesmas estão disponíveis na pasta do windows. (fontes instaladas: times.ttf, timesbd.ttf, timesbi.ttf, timesi.ttf) @@ -105,20 +154,45 @@ Tambem foi necessário copiar algumas **fontes**, o relatório de Danfe atual ut >sudo apt-get install ttf-mscorefonts-installer -- (Exemplo abaixo para DockerFile Ubuntu 18.x, porem diferente do exemploa anterior, copiando fontes ja existentes em uma pasta para a pasta de destino da imagem docker) +- (Exemplo para Debian 10) + +>apt-get install -y ttf-mscorefonts-installer fontconfig + +- (Exemplo abaixo para DockerFile Ubuntu 18.x, porem diferente do exemploa anterior, copiando fontes ja existentes em uma pasta para a pasta de destino da imagem docker, não recomendamos essa opção por possíveis problemas porem a imagem de saída fica menor) >RUN mkdir -p /usr/share/fonts/truetype/times \ COPY suapastadasfontes/* /usr/share/fonts/truetype/times/ +O FastReport.OpenSource é pesado na geração de PDF, por isso não recomendamos o mesmo. Para melhor utilização de memoria/cpu, utilize o FastReport.OpenSource para geração em HTML. Na conversão de HTML para PDF, recomendamos o uso do projeto https://github.com/fpanaccia/Wkhtmltopdf.NetCore + +## DANFE em HTML Gerado a partir de NFe +O repositório contém uma aplicação demonstrativa chamada NFe.Danfe.App.Teste.Html, desenvolvida em WPF (C#), que permite gerar o DANFE (Documento Auxiliar da Nota Fiscal Eletrônica) em formato HTML a partir de um arquivo XML de NF-e. O HTML gerado é salvo como um arquivo .html e aberto automaticamente no navegador padrão do sistema. + +## Impressão (QuestPDF): +A aplicação também utiliza a biblioteca QuestPDF para gerar documentos em PDF de forma moderna e customizável, incluindo a geração de NFCe. Ela também possui uma aplicação de testes demonstrativa chamada NFe.Danfe.AppTeste.QuestPDF: -**Suporte:** ---------- -O uso dessa biblioteca não lhe dá quaisquer garantias de suporte. No entanto se tiver dúvidas a respeito do uso desta biblioteca, abra um novo Issue aqui mesmo no github ou pergunte no grupo skype. +> ⚠️ É necessário definir a licença da biblioteca em algum ponto da aplicação: +```cs +// adicionar isso em algum local da sua aplicação ou licença equivalente para mais informações sobre licenças https://www.questpdf.com/ +QuestPDF.Settings.License = LicenseType.Community; +``` + +## Impressão (PDFClown): + +Além disso, há uma aplicação de exemplo chamada NFe.Danfe.AppTeste.PdfClown que demonstra como gerar o DANFE da NF-e em PDF utilizando a biblioteca PDFClown, com suporte opcional para inclusão da logomarca do emitente. + +## Suporte: + +O uso dessa biblioteca não lhe dá quaisquer garantias de suporte. No entanto se tiver dúvidas a respeito do uso desta biblioteca, abra um novo Issue aqui mesmo no github. + +## Colaborando: -**Colaborando:** ---------- Mantenha seu projeto atualizado para evitar issues desnecessárias, reporte bugs e soluções para problemas comuns, compartilhe suas ideias de melhorias, se tiver condições ajude enviando um pull request ou responda issues de outros colegas. Ao enviar um PR explique brevemente o que foi alterado e o motivo. Teste amplamente as alterações antes de submeter, não remova funcionalidades ou mude regras de métodos já existentes sem aviso prévio e com tempo para adaptações. Colabore, a bibloteca é open source e seu sucesso depende unicamente de sua comunidade. + +## Reconhecimento de código + +Este projeto incorpora código e melhorias do projeto [ZeusFiscal](https://github.com/Hercules-NET/ZeusFiscal). Agradecemos a todos os contribuidores por suas valiosas contribuições. Para detalhes específicos sobre as mudanças e os autores, consulte o [histórico de commits](https://github.com/ZeusAutomacao/DFe.NET/commits/master/). diff --git a/Shared.CTe.Classes/ConfiguracaoServico.cs b/Shared.CTe.Classes/ConfiguracaoServico.cs deleted file mode 100644 index 9ba806bad..000000000 --- a/Shared.CTe.Classes/ConfiguracaoServico.cs +++ /dev/null @@ -1,170 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.IO; -using System.Security.Cryptography.X509Certificates; -using CTe.Classes.Informacoes.Tipos; -using CTe.Classes.Servicos.Tipos; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; -using DFe.Utils; -using DFe.Utils.Assinatura; - -namespace CTe.Classes -{ - public sealed class ConfiguracaoServico : IDisposable - { - private static volatile ConfiguracaoServico _instancia; - private static readonly object SyncRoot = new object(); - private string _diretorioSchemas; - - public ConfiguracaoServico() - { - ConfiguracaoCertificado = new ConfiguracaoCertificado(); - TipoEmissao = tpEmis.teNormal; - } - - /// - /// Configurações relativas ao Certificado Digital - /// - public ConfiguracaoCertificado ConfiguracaoCertificado { get; set; } - - private X509Certificate2 _certificado = null; - public X509Certificate2 X509Certificate2 - { - get - { - if (this._certificado != null) - if (!this.ConfiguracaoCertificado.ManterDadosEmCache) - this._certificado.Reset(); - _certificado = ObterCertificado(); - return _certificado; - } - } - - private X509Certificate2 ObterCertificado() - { - return CertificadoDigital.ObterCertificado(ConfiguracaoCertificado); - } - - public void Dispose() - { - if (!this.ConfiguracaoCertificado.ManterDadosEmCache && _certificado != null) - { - _certificado.Reset(); - _certificado = null; - } - } - - ~ConfiguracaoServico() - { - if (!this.ConfiguracaoCertificado.ManterDadosEmCache && _certificado != null) - { - _certificado.Reset(); - _certificado = null; - } - } - - /// - /// Tempo máximo de espera pela resposta do webservice, em milisegundos - /// - public int TimeOut { get; set; } - - /// - /// Estado de destino do webservice - /// - public Estado cUF { get; set; } - - /// - /// Tipo de ambiente do webservice (Produção, Homologação) - /// - public TipoAmbiente tpAmb { get; set; } - - /// - /// Versão do layout - /// - public versao VersaoLayout { get; set; } - - public bool IsAdicionaQrCode { get; set; } - - /// - /// Diretório onde estão aramazenados os schemas para validação - /// - public string DiretorioSchemas - { - get { return _diretorioSchemas; } - set - { - if (!string.IsNullOrEmpty(value) && !Directory.Exists(value)) - throw new Exception("Diretório " + value + " não encontrado!"); - _diretorioSchemas = value; - } - } - - /// - /// Informar se a biblioteca deve salvar o xml de envio e de retorno - /// - public bool IsSalvarXml { get; set; } - - /// - /// Diretório onde os xmls de envio/retorno devem ser salvos - /// - public string DiretorioSalvarXml { get; set; } - - /// - /// Instância do Singleton de ConfiguracaoServico - /// - public static ConfiguracaoServico Instancia - { - get - { - if (_instancia != null) return _instancia; - lock (SyncRoot) - { - if (_instancia != null) return _instancia; - _instancia = new ConfiguracaoServico(); - } - - return _instancia; - } - } - - public tpEmis TipoEmissao { get; set; } - - public bool NaoSalvarXml() - { - return !IsSalvarXml; - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Classes/Informacoes/Complemento/Comp.cs b/Shared.CTe.Classes/Informacoes/Complemento/Comp.cs deleted file mode 100644 index 7d8826ab4..000000000 --- a/Shared.CTe.Classes/Informacoes/Complemento/Comp.cs +++ /dev/null @@ -1,43 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -namespace CTe.Classes.Informacoes.Complemento -{ - public class Comp - { - private string _xNome; - private double _vComp; - - public string xNome { get { return _xNome; } set { _xNome = value; } } - public double vComp { get { return _vComp; } set { _vComp = value; } } - } -} diff --git a/Shared.CTe.Classes/Informacoes/Emitente/emit.cs b/Shared.CTe.Classes/Informacoes/Emitente/emit.cs deleted file mode 100644 index 15c4d3cb1..000000000 --- a/Shared.CTe.Classes/Informacoes/Emitente/emit.cs +++ /dev/null @@ -1,53 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -namespace CTe.Classes.Informacoes.Emitente -{ - public class emit - { - public string CNPJ { get; set; } - - public string IE { get; set; } - - /// - /// Versão 3.00 - Não é obrigatório - /// - public string IEST { get; set; } - - public string xNome { get; set; } - - public string xFant { get; set; } - - public enderEmit enderEmit { get; set; } - } -} diff --git a/Shared.CTe.Classes/Informacoes/Emitente/emitTipos.cs b/Shared.CTe.Classes/Informacoes/Emitente/emitTipos.cs deleted file mode 100644 index 1b0545b83..000000000 --- a/Shared.CTe.Classes/Informacoes/Emitente/emitTipos.cs +++ /dev/null @@ -1,67 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System.ComponentModel; -using System.Xml.Serialization; - -namespace CTe.Classes.Informacoes.Emitente -{ - /// - /// 1 – Simples Nacional; - /// 2 – Simples Nacional – excesso de sublimite de receita bruta; - /// 3 – Regime Normal. (v2.0). - /// - public enum CRT - { - /// - /// 1 – Simples Nacional - /// - [Description("Simples Nacional")] - [XmlEnum("1")] - SimplesNacional = 1, - - /// - /// 2 – Simples Nacional – excesso de sublimite de receita bruta - /// - [Description("Simples Nacional – excesso de sublimite de receita bruta")] - [XmlEnum("2")] - SimplesNacionalExcessoSublimite = 2, - - /// - /// 3 – Regime Normal - /// - [Description("Regime Normal")] - [XmlEnum("3")] - RegimeNormal = 3 - } -} \ No newline at end of file diff --git a/Shared.CTe.Classes/Informacoes/Identificacao/ide.cs b/Shared.CTe.Classes/Informacoes/Identificacao/ide.cs deleted file mode 100644 index eea670155..000000000 --- a/Shared.CTe.Classes/Informacoes/Identificacao/ide.cs +++ /dev/null @@ -1,251 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Xml.Serialization; -using CTe.Classes.Informacoes.Tipos; -using CTe.Classes.Servicos.Tipos; -using DFe.Classes.Entidades; -using DFe.Classes.Extensoes; -using DFe.Classes.Flags; -using DFe.Utils; - -namespace CTe.Classes.Informacoes.Identificacao -{ - public class ide - { - - public ide(ConfiguracaoServico configuracaoServico = null) - { - _configuracaoServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - } - - public ide() - { - - } - - [XmlIgnore] - private ConfiguracaoServico _configuracaoServico; - - /// - /// B02 - Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. - /// - public Estado cUF { get; set; } - - [XmlIgnore] - public int cCT { get; set; } - - [XmlElement(ElementName = "cCT")] - public string ProxycCT - { - get { return this.cCT.ToString("00000000"); } - set { this.cCT = int.Parse(value); } - } - - public int CFOP { get; set; } - - public string natOp { get; set; } - - /// - /// Versão 2.00 - /// - public forPag? forPag { get; set; } - - public bool forPagSpecified { get { return forPag.HasValue; } } - - /// - /// B06 - Modelo do Documento Fiscal - /// - public ModeloDocumento mod { get; set; } - - public short serie { get; set; } - - public long nCT { get; set; } - - /// - /// Versão 3.0 AAAA-MM-DDTHH:MM:DD TZD - /// Versão 2.0 AAAA-MM-DDTHH:MM:DD - /// - [XmlIgnore] - public DateTimeOffset dhEmi { get; set; } - - [XmlElement(ElementName = "dhEmi")] - public string ProxydhEmi - { - get - { - if (_configuracaoServico == null) - _configuracaoServico = ConfiguracaoServico.Instancia; - switch (_configuracaoServico.VersaoLayout) - { - case versao.ve200: - return dhEmi.ParaDataHoraStringSemUtc(); - case versao.ve300: - return dhEmi.ParaDataHoraStringUtc(); - default: - throw new InvalidOperationException("Versão Inválida para CT-e"); - } - } - set { dhEmi = DateTimeOffset.Parse(value); } - } - - public tpImp tpImp { get; set; } - - public tpEmis tpEmis { get; set; } - - public int cDV { get; set; } - - /// - /// B24 - Identificação do Ambiente - /// - public TipoAmbiente tpAmb { get; set; } - - /// - /// B11 - Tipo do Documento Fiscal - /// - public tpCTe tpCTe { get; set; } - - /// - /// Versão 3.00 = Informe AplicativoContribuinte ou ContribuinteAplicativoFisco - /// Versão 2.00 = Qualquer uma das opções - /// - public procEmi procEmi { get; set; } - - public string verProc { get; set; } - - /// - /// Versão 3.00 - /// - public byte? indGlobalizado { get; set; } - - /// - /// Se null, não aparece no xml - /// - public bool indGlobalizadoSpecified { get { return indGlobalizado.HasValue; } } - - /// - /// Versão 2.00 - /// - public string refCTE { get; set; } - - public long cMunEnv { get; set; } - - public string xMunEnv { get; set; } - - [XmlIgnore] - public Estado UFEnv { get; set; } - - [XmlElement(ElementName = "UFEnv")] - public string ProxyUFEnv - { - get { return UFEnv.GetSiglaUfString(); } - set { UFEnv = UFEnv.SiglaParaEstado(value); } - } - - public modal modal { get; set; } - - public tpServ tpServ { get; set; } - - public long cMunIni { get; set; } - - public string xMunIni { get; set; } - - [XmlIgnore] - public Estado UFIni { get; set; } - - [XmlElement(ElementName = "UFIni")] - public string ProxyUFIni { get { return UFIni.GetSiglaUfString(); } - set { UFIni = UFIni.SiglaParaEstado(value); } } - - public long cMunFim { get; set; } - - public string xMunFim { get; set; } - - [XmlIgnore] - public Estado UFFim { get; set; } - - [XmlElement(ElementName = "UFFim")] - public string ProxyUFFim { get { return UFFim.GetSiglaUfString(); } set - { - UFFim = UFFim.SiglaParaEstado(value); - } } - - [XmlElement(ElementName = "infPercurso")] - public List infPercurso { get; set; } - - public retira retira { get; set; } - - public string xDetRetira { get; set; } - - /// - /// Versao 3.00 é obrigatório - /// - public indIEToma? indIEToma { get; set; } - - /// - /// Se null, não aparece no xml - /// - public bool indIETomaSpecified { get { return indIEToma.HasValue; } } - - /// - /// Versão 2.00 = toma03 - /// Versão 3.00 = toma3 - /// - [XmlElement("toma03", typeof(toma03))] - [XmlElement("toma3", typeof(toma3))] - public tomaBase3 tomaBase3 { get; set; } - public toma4 toma4 { get; set; } - - [XmlIgnore] - public DateTime? dhCont { get; set; } - - [XmlElement(ElementName = "dhCont")] - public string ProxydhCont - { - get - { - if (dhCont == null) return null; - - return dhCont.Value.ParaDataHoraStringUtc(); - } - set - { - dhCont = Convert.ToDateTime(value); - } - } - - public string xJust { get; set; } - } -} diff --git a/Shared.CTe.Classes/Informacoes/Impostos/imp.cs b/Shared.CTe.Classes/Informacoes/Impostos/imp.cs deleted file mode 100644 index 15113ce5f..000000000 --- a/Shared.CTe.Classes/Informacoes/Impostos/imp.cs +++ /dev/null @@ -1,57 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using DFe.Classes; - -namespace CTe.Classes.Informacoes.Impostos -{ - public class imp - { - public Tributacao.ICMS ICMS { get; set; } - - private decimal? _vTotTrib; - public decimal? vTotTrib - { - get { return _vTotTrib.Arredondar(2); } - set { _vTotTrib = value.Arredondar(2); } - } - - public bool vTotTribSpecified { get { return vTotTrib.HasValue; } } - - public string infAdFisco { get; set; } - - public ICMSUFFim ICMSUFFim { get; set; } - - public infTribFed infTribFed { get; set; } - } -} diff --git a/Shared.CTe.Classes/Protocolo/infProt.cs b/Shared.CTe.Classes/Protocolo/infProt.cs deleted file mode 100644 index f256d04ee..000000000 --- a/Shared.CTe.Classes/Protocolo/infProt.cs +++ /dev/null @@ -1,103 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.Xml.Serialization; -using DFe.Classes.Assinatura; -using DFe.Classes.Flags; -using DFe.Utils; - -namespace CTe.Classes.Protocolo -{ - public class infProt - { - /// - /// PR04 - Identificador da TAG a ser assinada, somente precisa ser informado se a UF assinar a resposta. - /// - public string Id { get; set; } - - /// - /// PR05 - Identificação do Ambiente - /// - public TipoAmbiente tpAmb { get; set; } - - /// - /// PR06 - Versão do Aplicativo que processou a consulta. - /// - public string verAplic { get; set; } - - /// - /// PR07 - Chave de Acesso da CT-e - /// - public string chCTe { get; set; } - - /// - /// PR08 - Data e hora de recebimento - /// - [XmlIgnore] - public DateTimeOffset dhRecbto { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public string ProxydhRecbto - { - get { return dhRecbto.ParaDataHoraStringUtc(); } - set { dhRecbto = DateTimeOffset.Parse(value); } - } - - /// - /// PR09 - Número do Protocolo da CT-e - /// - public string nProt { get; set; } - - /// - /// PR10 - Digest Value da CT-e processada Utilizado para conferir a integridade da CTe original. - /// - public string digVal { get; set; } - - /// - /// PR11 - Código do status da resposta. - /// - public int cStat { get; set; } - - /// - /// PR12 - Descrição literal do status da resposta. - /// - public string xMotivo { get; set; } - - /// - /// PR13 - Assinatura XML do grupo identificado pelo atributo “Id” - /// A decisão de assinar a mensagem fica a critério da UF interessada. - /// - public Signature Signature { get; set; } - } -} \ No newline at end of file diff --git a/Shared.CTe.Classes/Servicos/Status/retConsStatServ.cs b/Shared.CTe.Classes/Servicos/Status/retConsStatServ.cs deleted file mode 100644 index 16833ec1e..000000000 --- a/Shared.CTe.Classes/Servicos/Status/retConsStatServ.cs +++ /dev/null @@ -1,118 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.Xml.Serialization; -using CTe.Classes.Servicos.Tipos; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; -using DFe.Utils; - -namespace CTe.Classes.Servicos.Status -{ - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte")] - public class retConsStatServCte : RetornoBase - { - /// - /// FR02 - Versão do leiaute - /// - [XmlAttribute] - public versao versao { get; set; } - - /// - /// FR03 - Identificação do Ambiente: 1 – Produção / 2 - Homologação - /// - public TipoAmbiente tpAmb { get; set; } - - /// - /// FR04 - Versão do Aplicativo que processou a consulta. A versão deve ser iniciada com a sigla da UF nos casos de WS - /// próprio ou a sigla SCAN, SVAN ou SVRS nos demais casos. - /// - public string verAplic { get; set; } - - /// - /// FR05 - Código do status da resposta. - /// - public int cStat { get; set; } - - /// - /// FR06 - Descrição literal do status da resposta. - /// - public string xMotivo { get; set; } - - /// - /// FR07 - Código da UF que atendeu a solicitação - /// - public Estado cUF { get; set; } - - [XmlIgnore] - public DateTimeOffset dhRecbto { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public string ProxydhRecbto - { - get { return dhRecbto.ParaDataHoraStringUtc(); } - set { dhRecbto = DateTimeOffset.Parse(value); } - } - - public int tMed { get; set; } - - [XmlIgnore] - public DateTime dhRetorno { get; set; } - - [XmlElement(ElementName = "dhRetorno")] - public string ProxydhRetorno - { - get { return dhRetorno.ParaDataHoraString(); } - set { dhRetorno = DateTime.Parse(value); } - } - - public string xObs { get; set; } - - public static retConsStatServCte LoadXml(string xml, consStatServCte consStatServCte) - { - var retorno = LoadXml(xml); - retorno.EnvioXmlString = FuncoesXml.ClasseParaXmlString(consStatServCte); - - return retorno; - } - - private static retConsStatServCte LoadXml(string xml) - { - var retorno = FuncoesXml.XmlStringParaClasse(xml); - retorno.RetornoXmlString = xml; - - return retorno; - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Classes/Shared.CTe.Classes.projitems b/Shared.CTe.Classes/Shared.CTe.Classes.projitems deleted file mode 100644 index 31716b07b..000000000 --- a/Shared.CTe.Classes/Shared.CTe.Classes.projitems +++ /dev/null @@ -1,245 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - da95f515-5eed-4a7e-b711-f3b499629df5 - - - Shared.CTe.Classes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.CTe.Classes/Shared.CTe.Classes.shproj b/Shared.CTe.Classes/Shared.CTe.Classes.shproj deleted file mode 100644 index 47f8e272d..000000000 --- a/Shared.CTe.Classes/Shared.CTe.Classes.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - da95f515-5eed-4a7e-b711-f3b499629df5 - 14.0 - - - - - - - - diff --git a/Shared.CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs b/Shared.CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs deleted file mode 100644 index 26414b1ec..000000000 --- a/Shared.CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs +++ /dev/null @@ -1,74 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System.Threading.Tasks; -using CTe.Classes; -using CTe.Classes.Servicos.Consulta; -using CTe.Servicos.Factory; -using CTe.Utils.Extencoes; - -namespace CTe.Servicos.ConsultaProtocolo -{ - public class ConsultaProtcoloServico - { - public retConsSitCTe ConsultaProtocolo(string chave, ConfiguracaoServico configuracaoServico = null) - { - var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configuracaoServico); - consSitCTe.ValidarSchema(configuracaoServico); - consSitCTe.SalvarXmlEmDisco(configuracaoServico); - - var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configuracaoServico); - var retornoXml = webService.cteConsultaCT(consSitCTe.CriaRequestWs()); - - var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); - retorno.SalvarXmlEmDisco(chave, configuracaoServico); - - return retorno; - } - - public async Task ConsultaProtocoloAsync(string chave, ConfiguracaoServico configuracaoServico = null) - { - var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configuracaoServico); - consSitCTe.ValidarSchema(configuracaoServico); - consSitCTe.SalvarXmlEmDisco(configuracaoServico); - - var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configuracaoServico); - var retornoXml = await webService.cteConsultaCTAsync(consSitCTe.CriaRequestWs()); - - var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); - retorno.SalvarXmlEmDisco(chave, configuracaoServico); - - return retorno; - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Enderecos/Helpers/UrlHelper.cs b/Shared.CTe.Servicos/Enderecos/Helpers/UrlHelper.cs deleted file mode 100644 index 9700b5b19..000000000 --- a/Shared.CTe.Servicos/Enderecos/Helpers/UrlHelper.cs +++ /dev/null @@ -1,401 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using CTe.Classes; -using CTe.Classes.Informacoes.Tipos; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; - -namespace CTe.Servicos.Enderecos.Helpers -{ - public class UrlHelper - { - public static UrlCTe ObterUrlServico(ConfiguracaoServico configuracaoServico = null) - { - var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - - switch (configServico.tpAmb) - { - case TipoAmbiente.Homologacao: - if (configServico.TipoEmissao == tpEmis.teSVCRS) - { - return UrlHomologacaoSvrs(); - } - - if (configServico.TipoEmissao == tpEmis.teSVCSP) - { - return UrlHomologacaoSvcsp(); - } - - return UrlHomologacao(configServico); - case TipoAmbiente.Producao: - if (configServico.TipoEmissao == tpEmis.teSVCRS) - { - return UrlProducaoSvrs(); - } - - if (configServico.TipoEmissao == tpEmis.teSVCSP) - { - return UrlProducaoSvcsp(); - } - - return UrlProducao(configServico); - } - - throw new InvalidOperationException("Tipo Ambiente inválido"); - } - - private static UrlCTe UrlProducaoSvcsp() - { - return new UrlCTe - { - CteRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", - CteRetRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", - CteConsulta = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", - CteStatusServico = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", - QrCode = @"http://dfe-portal.svrs.rs.gov.br/cte/QRCode", - CteRecepcaoEvento = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx" - }; - } - - private static UrlCTe UrlHomologacaoSvcsp() - { - return new UrlCTe - { - CteRecepcaoEvento = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx", - CteRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcao.asmx", - CteRetRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", - CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", - QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", - CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx" - }; - } - - private static UrlCTe UrlHomologacaoSvrs() - { - return new UrlCTe - { - CteRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CTeRecepcao.asmx", - CteRetRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/CTeRetRecepcao.asmx", - CteInutilizacao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteconsulta/CTeConsulta.asmx", - CteStatusServico = @"https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CTeStatusServico.asmx", - QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", - CteRecepcaoEvento = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/CTeRecepcaoEvento.asmx" - }; - } - - private static UrlCTe UrlProducaoSvrs() - { - return new UrlCTe - { - CteRecepcao = @"https://cte.svrs.rs.gov.br/ws/cterecepcao/CTeRecepcao.asmx", - CteRetRecepcao = @"https://cte.svrs.rs.gov.br/ws/cteretrecepcao/CTeRetRecepcao.asmx", - CteInutilizacao = @"https://cte.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteConsulta = @"https://cte.svrs.rs.gov.br/ws/cteconsulta/CTeConsulta.asmx", - CteStatusServico = @"https://cte.svrs.rs.gov.br/ws/ctestatusservico/CTeStatusServico.asmx", - QrCode = @"http://dfe-portal.svrs.rs.gov.br/cte/QRCode", - CteRecepcaoEvento = @"https://cte.svrs.rs.gov.br/ws/cterecepcaoevento/CTeRecepcaoEvento.asmx" - }; - } - - private static UrlCTe UrlProducao(ConfiguracaoServico configuracaoServico) - { - switch (configuracaoServico.cUF) - { - case Estado.MT: - return new UrlCTe - { - CteStatusServico = @"https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico", - CteRetRecepcao = "https://cte.sefaz.mt.gov.br/ctews/services/CteRetRecepcao", - CteRecepcao = "https://cte.sefaz.mt.gov.br/ctews/services/CteRecepcao", - CteInutilizacao = "https://cte.sefaz.mt.gov.br/ctews/services/CteInutilizacao", - CteRecepcaoEvento = "https://cte.sefaz.mt.gov.br/ctews2/services/CteRecepcaoEvento?wsdl", - CteConsulta = @"https://cte.sefaz.mt.gov.br/ctews/services/CteConsulta", - QrCode = @"https://www.sefaz.mt.gov.br/cte/qrcode", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.MS: - return new UrlCTe - { - CteStatusServico = @"https://producao.cte.ms.gov.br/ws/CteStatusServico", - CteRetRecepcao = @"https://producao.cte.ms.gov.br/ws/CteRetRecepcao", - CteRecepcao = @"https://producao.cte.ms.gov.br/ws/CteRecepcao", - CteInutilizacao = @"https://producao.cte.ms.gov.br/ws/CteInutilizacao", - CteRecepcaoEvento = @"https://producao.cte.ms.gov.br/ws/CteRecepcaoEvento", - CteConsulta = @"https://producao.cte.ms.gov.br/ws/CteConsulta", - QrCode = @"http://www.dfe.ms.gov.br/cte/qrcode", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.MG: - return new UrlCTe - { - CteStatusServico = @"https://cte.fazenda.mg.gov.br/cte/services/CteStatusServico", - CteRetRecepcao = @"https://cte.fazenda.mg.gov.br/cte/services/CteRetRecepcao", - CteRecepcao = @"https://cte.fazenda.mg.gov.br/cte/services/CteRecepcao", - CteInutilizacao = @"https://cte.fazenda.mg.gov.br/cte/services/CteInutilizacao", - CteRecepcaoEvento = @"https://cte.fazenda.mg.gov.br/cte/services/RecepcaoEvento", - CteConsulta = @"https://cte.fazenda.mg.gov.br/cte/services/CteConsulta", - QrCode = @"https://cte.fazenda.mg.gov.br/portalcte/sistema/qrcode.xhtml", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.PR: - return new UrlCTe - { - CteStatusServico = @" https://cte.fazenda.pr.gov.br/cte/CteStatusServico?wsdl", - CteRetRecepcao = @"https://cte.fazenda.pr.gov.br/cte/CteRetRecepcao?wsdl", - CteRecepcao = @"https://cte.fazenda.pr.gov.br/cte/CteRecepcao?wsdl", - CteInutilizacao = @"https://cte.fazenda.pr.gov.br/cte/CteInutilizacao?wsdl", - CteRecepcaoEvento = @"https://cte.fazenda.pr.gov.br/cte/CteRecepcaoEvento?wsdl", - CteConsulta = @"https://cte.fazenda.pr.gov.br/cte/CteConsulta?wsdl", - QrCode = @"http://www.fazenda.pr.gov.br/cte/qrcode", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.RS: - return new UrlCTe - { - CteStatusServico = - @"https://cte.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", - CteRetRecepcao = @"https://cte.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", - CteRecepcao = @"https://cte.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", - CteInutilizacao = - @"https://cte.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRecepcaoEvento = - @"https://cte.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx", - CteConsulta = @"https://cte.svrs.rs.gov.br/ws/cteconsulta/CteConsulta.asmx", - QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.SP: - return new UrlCTe - { - CteStatusServico = - @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx", - CteRetRecepcao = - @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRetRecepcao.asmx", - CteRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", - CteInutilizacao = - @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRecepcaoEvento = - @"https://nfe.fazenda.sp.gov.br/cteweb/services/cteRecepcaoEvento.asmx", - CteConsulta = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteConsulta.asmx", - QrCode = @"https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.AC: - case Estado.AL: - case Estado.AM: - case Estado.BA: - case Estado.CE: - case Estado.DF: - case Estado.ES: - case Estado.GO: - case Estado.MA: - case Estado.PA: - case Estado.PB: - case Estado.PI: - case Estado.RJ: - case Estado.RN: - case Estado.RO: - case Estado.SC: - case Estado.SE: - case Estado.TO: - return new UrlCTe - { - CteStatusServico = - @"https://cte.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", - CteConsulta = @"https://cte.svrs.rs.gov.br/ws/cteconsulta/CteConsulta.asmx", - CteInutilizacao = - @"https://cte.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRecepcao = @"https://cte.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", - CteRecepcaoEvento = - @"https://cte.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx", - CteRetRecepcao = @"https://cte.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", - QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.AP: - case Estado.PE: - case Estado.RR: - return new UrlCTe - { - CteStatusServico = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", - CteRetRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", - CteRecepcao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", - CteInutilizacao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRecepcaoEvento = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcaoEvento.asmx", - CteConsulta = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", - QrCode = @"https://nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", - CTeDistribuicaoDFe = "https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - default: - throw new InvalidOperationException( - "Não achei a url do seu estado(uf), tente com outra unidade federativa"); - } - - } - - private static UrlCTe UrlHomologacao(ConfiguracaoServico configuracaoServico) - { - switch (configuracaoServico.cUF) - { - case Estado.MT: - return new UrlCTe - { - CteStatusServico = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteStatusServico", - CteRetRecepcao = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteRetRecepcao", - CteRecepcao = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteRecepcao", - CteInutilizacao = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteInutilizacao", - CteRecepcaoEvento = - @"https://homologacao.sefaz.mt.gov.br/ctews2/services/CteRecepcaoEvento?wsdl", - CteConsulta = @"https://homologacao.sefaz.mt.gov.br/ctews/services/CteConsulta", - QrCode = @"https://homologacao.sefaz.mt.gov.br/cte/qrcode", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.MS: - return new UrlCTe - { - CteStatusServico = @"https://homologacao.cte.ms.gov.br/ws/CteStatusServico", - CteRetRecepcao = @"https://homologacao.cte.ms.gov.br/ws/CteRetRecepcao", - CteRecepcao = @"https://homologacao.cte.ms.gov.br/ws/CteRecepcao", - CteInutilizacao = @"https://homologacao.cte.ms.gov.br/ws/CteInutilizacao", - CteRecepcaoEvento = @"https://homologacao.cte.ms.gov.br/ws/CteRecepcaoEvento", - CteConsulta = @"https://homologacao.cte.ms.gov.br/ws/CteConsulta", - QrCode = @"http://www.dfe.ms.gov.br/cte/qrcode", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.MG: - return new UrlCTe - { - CteStatusServico = @"https://hcte.fazenda.mg.gov.br/cte/services/CteStatusServico?wsdl", - CteRetRecepcao = @"https://hcte.fazenda.mg.gov.br/cte/services/CteRetRecepcao?wsdl", - CteRecepcao = @"https://hcte.fazenda.mg.gov.br/cte/services/CteRecepcao?wsdl", - CteInutilizacao = @"https://hcte.fazenda.mg.gov.br/cte/services/CteInutilizacao?wsdl", - CteRecepcaoEvento = @"https://hcte.fazenda.mg.gov.br/cte/services/RecepcaoEvento?wsdl", - CteConsulta = @"https://hcte.fazenda.mg.gov.br/cte/services/CteConsulta?wsdl", - QrCode = @"https://hcte.fazenda.mg.gov.br/portalcte/sistema/qrcode.xhtml", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.PR: - return new UrlCTe - { - CteStatusServico = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteStatusServico?wsdl", - CteRetRecepcao = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteRetRecepcao?wsdl", - CteRecepcao = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteRecepcao?wsdl", - CteInutilizacao = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteInutilizacao?wsdl", - CteRecepcaoEvento = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteRecepcaoEvento?wsdl", - CteConsulta = @"https://homologacao.cte.fazenda.pr.gov.br/cte/CteConsulta?wsdl", - QrCode = @"http://www.fazenda.pr.gov.br/cte/qrcode", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.RS: - return new UrlCTe - { - CteStatusServico = - @"https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CteStatusServico.asmx", - CteRetRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/cteRetRecepcao.asmx", - CteRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CteRecepcao.asmx", - CteInutilizacao = - @"https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRecepcaoEvento = - @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/cterecepcaoevento.asmx", - CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteconsulta/CteConsulta.asmx", - QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.SP: - return new UrlCTe - { - CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteStatusServico.asmx", - CteRetRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteRetRecepcao.asmx", - CteRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteRecepcao.asmx", - CteInutilizacao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRecepcaoEvento = @"https://homologacao.nfe.fazenda.sp.gov.br/cteweb/services/cteRecepcaoEvento.asmx", - CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/cteConsulta.asmx", - QrCode = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.AC: - case Estado.AL: - case Estado.AM: - case Estado.BA: - case Estado.CE: - case Estado.DF: - case Estado.ES: - case Estado.GO: - case Estado.MA: - case Estado.PA: - case Estado.PB: - case Estado.PI: - case Estado.RJ: - case Estado.RN: - case Estado.RO: - case Estado.SC: - case Estado.SE: - case Estado.TO: - return new UrlCTe - { - CteStatusServico = - @"https://cte-homologacao.svrs.rs.gov.br/ws/ctestatusservico/CTeStatusServico.asmx", - CteConsulta = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteconsulta/CTeConsulta.asmx", - CteInutilizacao = - @"https://cte-homologacao.svrs.rs.gov.br/ws/cteinutilizacao/cteinutilizacao.asmx", - CteRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcao/CTeRecepcao.asmx", - CteRecepcaoEvento = - @"https://cte-homologacao.svrs.rs.gov.br/ws/cterecepcaoevento/CTeRecepcaoEvento.asmx", - CteRetRecepcao = @"https://cte-homologacao.svrs.rs.gov.br/ws/cteretrecepcao/CTeRetRecepcao.asmx", - QrCode = @"https://dfe-portal.svrs.rs.gov.br/cte/qrCode", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - case Estado.AP: - case Estado.PE: - case Estado.RR: - return new UrlCTe - { - CteStatusServico = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteStatusServico.asmx", - CteRetRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRetRecepcao.asmx", - CteRecepcao = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteRecepcao.asmx", - CteInutilizacao = @"https://nfe.fazenda.sp.gov.br/cteWEB/services/cteInutilizacao.asmx", - CteRecepcaoEvento = @"https://cte.sefaz.rs.gov.br/ws/CteRecepcaoEvento/CteRecepcaoEvento.asmx", - CteConsulta = @"https://homologacao.nfe.fazenda.sp.gov.br/cteWEB/services/CteConsulta.asmx", - QrCode = @"https://homologacao.nfe.fazenda.sp.gov.br/CTeConsulta/qrCode", - CTeDistribuicaoDFe = @"https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx" - }; - default: - throw new InvalidOperationException( - "Não achei a url do seu estado(uf), tente com outra unidade federativa"); - } - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Eventos/ServicoController.cs b/Shared.CTe.Servicos/Eventos/ServicoController.cs deleted file mode 100644 index 22d96f8aa..000000000 --- a/Shared.CTe.Servicos/Eventos/ServicoController.cs +++ /dev/null @@ -1,90 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System.Threading.Tasks; -using CTe.Classes; -using CTe.Classes.Servicos.Evento; -using CTe.Classes.Servicos.Evento.Flags; -using CTe.Servicos.Eventos.Contratos; -using CTe.Servicos.Factory; -using CTe.Utils.CTe; -using CTe.Utils.Evento; -using CteEletronico = CTe.Classes.CTe; - -namespace CTe.Servicos.Eventos -{ - public class ServicoController : IServicoController - { - public retEventoCTe Executar(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) - { - return Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico); - } - - public async Task ExecutarAsync(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) - { - return await ExecutarAsync(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico); - } - - public retEventoCTe Executar(CTeTipoEvento cTeTipoEvento, int sequenciaEvento, string chave, string cnpj, EventoContainer container, ConfiguracaoServico configuracaoServico = null) - { - var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configuracaoServico); - evento.Assina(configuracaoServico); - evento.ValidarSchema(configuracaoServico); - evento.SalvarXmlEmDisco(configuracaoServico); - - var webService = WsdlFactory.CriaWsdlCteEvento(configuracaoServico); - var retornoXml = webService.cteRecepcaoEvento(evento.CriaXmlRequestWs()); - - var retorno = retEventoCTe.LoadXml(retornoXml.OuterXml, evento); - retorno.SalvarXmlEmDisco(configuracaoServico); - - return retorno; - } - - public async Task ExecutarAsync(CTeTipoEvento cTeTipoEvento, int sequenciaEvento, string chave, string cnpj, EventoContainer container, ConfiguracaoServico configuracaoServico = null) - { - var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configuracaoServico); - evento.Assina(configuracaoServico); - evento.ValidarSchema(configuracaoServico); - evento.SalvarXmlEmDisco(configuracaoServico); - - var webService = WsdlFactory.CriaWsdlCteEvento(configuracaoServico); - var retornoXml = await webService.cteRecepcaoEventoAsync(evento.CriaXmlRequestWs()); - - var retorno = retEventoCTe.LoadXml(retornoXml.OuterXml, evento); - retorno.SalvarXmlEmDisco(configuracaoServico); - - return retorno; - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Factory/WsdlFactory.cs b/Shared.CTe.Servicos/Factory/WsdlFactory.cs deleted file mode 100644 index 820c89c73..000000000 --- a/Shared.CTe.Servicos/Factory/WsdlFactory.cs +++ /dev/null @@ -1,135 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using CTe.Classes; -using CTe.Classes.Ext; -using CTe.Servicos.Enderecos.Helpers; -using CTe.Wsdl.ConsultaProtocolo; -using CTe.Wsdl.DistribuicaoDFe; -using CTe.Wsdl.Evento; -using CTe.Wsdl.Inutilizacao; -using CTe.Wsdl.Recepcao; -using CTe.Wsdl.RetRecepcao; -using CTe.Wsdl.Status; -using DFe.Classes.Extensoes; -using CTe.CTeOSDocumento.Common; - -namespace CTe.Servicos.Factory -{ - public class WsdlFactory - { - public static CteStatusServico CriaWsdlCteStatusServico(ConfiguracaoServico configuracaoServico = null) - { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CteStatusServico; - - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico); - - return new CteStatusServico(configuracaoWsdl); - } - - public static CteConsulta CriaWsdlConsultaProtocolo(ConfiguracaoServico configuracaoServico = null) - { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CteConsulta; - - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico); - - return new CteConsulta(configuracaoWsdl); - } - - public static CteInutilizacao CriaWsdlCteInutilizacao(ConfiguracaoServico configuracaoServico = null) - { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CteInutilizacao; - - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico); - - return new CteInutilizacao(configuracaoWsdl); - } - - public static CteRetRecepcao CriaWsdlCteRetRecepcao(ConfiguracaoServico configuracaoServico = null) - { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRetRecepcao; - - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico); - - return new CteRetRecepcao(configuracaoWsdl); - } - - public static CteRecepcao CriaWsdlCteRecepcao(ConfiguracaoServico configuracaoServico = null) - { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcao; - - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico); - - return new CteRecepcao(configuracaoWsdl); - } - - public static CteRecepcaoEvento CriaWsdlCteEvento(ConfiguracaoServico configuracaoServico = null) - { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoEvento; - - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico); - - return new CteRecepcaoEvento(configuracaoWsdl); - } - - - public static CTeDistDFeInteresse CriaWsdlCTeDistDFeInteresse(ConfiguracaoServico configuracaoServico = null) - { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CTeDistribuicaoDFe; - - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico); - - return new CTeDistDFeInteresse(configuracaoWsdl); - } - - - private static WsdlConfiguracao CriaConfiguracao(string url, ConfiguracaoServico configuracaoServico = null) - { - var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - - var codigoEstado = configServico.cUF.GetCodigoIbgeEmString(); - var certificadoDigital = configServico.X509Certificate2; - var versaoEmString = configServico.VersaoLayout.GetString(); - var timeOut = configServico.TimeOut; - - return new WsdlConfiguracao - { - CertificadoDigital = certificadoDigital, - Versao = versaoEmString, - CodigoIbgeEstado = codigoEstado, - Url = url, - TimeOut = timeOut - }; - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs b/Shared.CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs deleted file mode 100644 index 2290593dc..000000000 --- a/Shared.CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs +++ /dev/null @@ -1,123 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using CTe.Classes; -using CTe.Classes.Servicos.Recepcao; -using CTe.Servicos.Enderecos.Helpers; -using CTe.Servicos.Factory; -using CTe.Utils.CTe; -using CTe.Utils.Recepcao; -using DFe.Classes.Flags; -using CTeEletronico = CTe.Classes.CTe; - -namespace CTe.Servicos.Recepcao -{ - public class ServicoCTeRecepcao - { - public event EventHandler AntesDeEnviar; - - public retEnviCte CTeRecepcao(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) - { - var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configuracaoServico); - - var webService = WsdlFactory.CriaWsdlCteRecepcao(configuracaoServico); - - OnAntesDeEnviar(enviCte); - - var retornoXml = webService.cteRecepcaoLote(enviCte.CriaRequestWs(configuracaoServico)); - - var retorno = retEnviCte.LoadXml(retornoXml.OuterXml, enviCte); - retorno.SalvarXmlEmDisco(configuracaoServico); - - return retorno; - } - - public async Task CTeRecepcaoAsync(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) - { - var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configuracaoServico); - - var webService = WsdlFactory.CriaWsdlCteRecepcao(configuracaoServico); - - OnAntesDeEnviar(enviCte); - - var retornoXml = await webService.cteRecepcaoLoteAsync(enviCte.CriaRequestWs(configuracaoServico)); - - var retorno = retEnviCte.LoadXml(retornoXml.OuterXml, enviCte); - retorno.SalvarXmlEmDisco(configuracaoServico); - - return retorno; - } - - private static enviCTe PreparaEnvioCTe(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) - { - var instanciaConfiguracao = configuracaoServico ?? ConfiguracaoServico.Instancia; - - var enviCte = ClassesFactory.CriaEnviCTe(lote, cteEletronicosList, instanciaConfiguracao); - - if (instanciaConfiguracao.tpAmb == TipoAmbiente.Homologacao) - { - foreach (var cte in enviCte.CTe) - { - const string razaoSocial = "CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; - - cte.infCte.rem.xNome = razaoSocial; - cte.infCte.dest.xNome = razaoSocial; - } - } - - - foreach (var cte in enviCte.CTe) - { - cte.infCte.ide.tpEmis = instanciaConfiguracao.TipoEmissao; - cte.Assina(instanciaConfiguracao); - cte.infCTeSupl = cte.QrCode(instanciaConfiguracao.X509Certificate2, Encoding.UTF8, instanciaConfiguracao.IsAdicionaQrCode, UrlHelper.ObterUrlServico(instanciaConfiguracao).QrCode); - cte.ValidaSchema(instanciaConfiguracao); - cte.SalvarXmlEmDisco(instanciaConfiguracao); - } - - enviCte.ValidaSchema(instanciaConfiguracao); - enviCte.SalvarXmlEmDisco(instanciaConfiguracao); - return enviCte; - } - - protected virtual void OnAntesDeEnviar(enviCTe enviCTe) - { - var handler = AntesDeEnviar; - if (handler != null) handler(this, new AntesEnviarRecepcao(enviCTe)); - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Servicos/Shared.CTe.Servicos.projitems b/Shared.CTe.Servicos/Shared.CTe.Servicos.projitems deleted file mode 100644 index 34f1647e8..000000000 --- a/Shared.CTe.Servicos/Shared.CTe.Servicos.projitems +++ /dev/null @@ -1,33 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - ab5f2a04-a1cf-4d42-8b26-38ebebc8319b - - - Shared.CTe.Servicos - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.CTe.Servicos/Shared.CTe.Servicos.shproj b/Shared.CTe.Servicos/Shared.CTe.Servicos.shproj deleted file mode 100644 index f490be24c..000000000 --- a/Shared.CTe.Servicos/Shared.CTe.Servicos.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - ab5f2a04-a1cf-4d42-8b26-38ebebc8319b - 14.0 - - - - - - - - diff --git a/Shared.CTe.Utils/CTe/ExtCTe.cs b/Shared.CTe.Utils/CTe/ExtCTe.cs deleted file mode 100644 index e558807db..000000000 --- a/Shared.CTe.Utils/CTe/ExtCTe.cs +++ /dev/null @@ -1,296 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.IO; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using CTe.Classes; -using CTe.Classes.Informacoes; -using CTe.Classes.Informacoes.infCTeNormal.infModals; -using CTe.Classes.Informacoes.Tipos; -using CTe.Classes.Servicos.Tipos; -using CTe.Utils.Validacao; -using DFe.Utils; -using DFe.Utils.Assinatura; -using CteEletronica = CTe.Classes.CTe; - -namespace CTe.Utils.CTe -{ - public static class ExtCTe - { - /// - /// Carrega um arquivo XML para um objeto da classe CTe - /// - /// - /// arquivo XML - /// Retorna uma NFe carregada com os dados do XML - public static CteEletronica CarregarDeArquivoXml(this CteEletronica cte, string arquivoXml) - { - var s = FuncoesXml.ObterNodeDeArquivoXml(typeof (CteEletronica).Name, arquivoXml); - return FuncoesXml.XmlStringParaClasse(s); - } - - /// - /// Converte o objeto CTe para uma string no formato XML - /// - /// - /// Retorna uma string no formato XML com os dados da CTe - public static string ObterXmlString(this CteEletronica cte) - { - return FuncoesXml.ClasseParaXmlString(cte); - } - - /// - /// Coverte uma string XML no formato CTe para um objeto CTe - /// - /// - /// - /// Retorna um objeto do tipo CTe - public static CteEletronica CarregarDeXmlString(this CteEletronica cte, string xmlString) - { - var s = FuncoesXml.ObterNodeDeStringXml(typeof (CteEletronica).Name, xmlString); - return FuncoesXml.XmlStringParaClasse(s); - } - - /// - /// Gera id, cdv, assina e faz alguns ajustes nos dados da classe CTe antes de utilizá-la - /// - /// - /// - /// Retorna um objeto CTe devidamente tradado - public static void ValidaSchema(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) - { - if (cte == null) throw new ArgumentNullException("cte"); - - var xmlValidacao = cte.ObterXmlString(); - - switch (cte.infCte.versao) - { - case versao.ve200: - Validador.Valida(xmlValidacao, "cte_v2.00.xsd", configuracaoServico); - break; - case versao.ve300: - Validador.Valida(xmlValidacao, "cte_v3.00.xsd", configuracaoServico); - break; - default: - throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + - "a versão está inválida, somente é permitido " + - "versão 2.00 é 3.00"); - } - - if (cte.infCte.ide.tpCTe != tpCTe.Anulacao && cte.infCte.ide.tpCTe != tpCTe.Complemento) // Ct-e do Tipo Anulação/Complemento não tem Informações do Modal - { - var xmlModal = FuncoesXml.ClasseParaXmlString(cte.infCte.infCTeNorm.infModal); - - switch (cte.infCte.infCTeNorm.infModal.versaoModal) - { - case versaoModal.veM200: - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) - { - Validador.Valida(xmlModal, "cteModalAereo_v2.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) - { - Validador.Valida(xmlModal, "cteModalAquaviario_v2.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) - { - Validador.Valida(xmlModal, "cteModalDutoviario_v2.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) - { - Validador.Valida(xmlModal, "cteModalFerroviario_v2.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) - { - Validador.Valida(xmlModal, "cteModalRodoviario_v2.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) - { - Validador.Valida(xmlModal, "cteMultimodal_v2.00.xsd", configuracaoServico); - } - break; - case versaoModal.veM300: - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) - { - Validador.Valida(xmlModal, "cteModalAereo_v3.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) - { - Validador.Valida(xmlModal, "cteModalAquaviario_v3.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) - { - Validador.Valida(xmlModal, "cteModalDutoviario_v3.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) - { - Validador.Valida(xmlModal, "cteModalFerroviario_v3.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) - { - Validador.Valida(xmlModal, "cteModalRodoviario_v3.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) - { - Validador.Valida(xmlModal, "cteMultimodal_v3.00.xsd", configuracaoServico); - } - - if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS)) - { - Validador.Valida(xmlModal, "cteModalRodoviarioOS_v.3.00.xsd", configuracaoServico); - } - break; - default: - throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + - "a versão está inválida, somente é permitido " + - "versão 2.00 é 3.00"); - } - } - } - - /// - /// Assina um objeto CTe - /// - /// - /// - /// Retorna um objeto do tipo CTe assinado - public static void Assina(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) - { - if (cte == null) throw new ArgumentNullException("cte"); - - var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - - var modeloDocumentoFiscal = cte.infCte.ide.mod; - var tipoEmissao = (int)cte.infCte.ide.tpEmis; - var codigoNumerico = cte.infCte.ide.cCT; - var estado = cte.infCte.ide.cUF; - var dataEHoraEmissao = cte.infCte.ide.dhEmi; - var cnpj = cte.infCte.emit.CNPJ; - var numeroDocumento = cte.infCte.ide.nCT; - int serie = cte.infCte.ide.serie; - - var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico); - - cte.infCte.Id = "CTe" + dadosChave.Chave; - cte.infCte.versao = configServico.VersaoLayout; - cte.infCte.ide.cDV = dadosChave.DigitoVerificador; - - var assinatura = AssinaturaDigital.Assina(cte, cte.infCte.Id, configServico.X509Certificate2); - - cte.Signature = assinatura; - } - - public static string Chave(this CteEletronica cte) - { - var chave = cte.infCte.Id.Substring(3, 44); - return chave; - } - - public static infCTeSupl QrCode(this CteEletronica cte, X509Certificate2 certificadoDigital, - Encoding encoding, bool isAdicionaQrCode, string url) - { - if (isAdicionaQrCode == false) return null; - - if (encoding == null) - encoding = Encoding.UTF8; - - var chave = cte.infCte.Id.Substring(3, 44); - - var qrCode = new StringBuilder(url); - qrCode.Append("?"); - qrCode.Append("chCTe=").Append(chave); - qrCode.Append("&"); - qrCode.Append("tpAmb=").Append((int)cte.infCte.ide.tpAmb); - - if (cte.infCte.ide.tpEmis != tpEmis.teNormal - && cte.infCte.ide.tpEmis != tpEmis.teSVCRS - && cte.infCte.ide.tpEmis != tpEmis.teSVCSP - ) - { - var assinatura = Convert.ToBase64String(CreateSignaturePkcs1(certificadoDigital, encoding.GetBytes(chave))); - qrCode.Append("&sign="); - qrCode.Append(assinatura); - } - - return new infCTeSupl - { - qrCodCTe = qrCode.ToString() - }; - } - - private static byte[] CreateSignaturePkcs1(X509Certificate2 certificadoDigital, byte[] Value) - { - RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)certificadoDigital.PrivateKey; - - RSAPKCS1SignatureFormatter rsaF = new RSAPKCS1SignatureFormatter(rsa); - - SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); - - byte[] hash = null; - - hash = sha1.ComputeHash(Value); - - rsaF.SetHashAlgorithm("SHA1"); - - return rsaF.CreateSignature(hash); - } - - public static void SalvarXmlEmDisco(this CteEletronica cte, ConfiguracaoServico configuracaoServico = null) - { - var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - - if (instanciaServico.NaoSalvarXml()) return; - - var caminhoXml = instanciaServico.DiretorioSalvarXml; - - var arquivoSalvar = Path.Combine(caminhoXml, cte.Chave() + "-cte.xml"); - - FuncoesXml.ClasseParaArquivoXml(cte, arquivoSalvar); - } - - - } -} \ No newline at end of file diff --git a/Shared.CTe.Utils/Extencoes/ExtconsStatServCte.cs b/Shared.CTe.Utils/Extencoes/ExtconsStatServCte.cs deleted file mode 100644 index 4e6db310c..000000000 --- a/Shared.CTe.Utils/Extencoes/ExtconsStatServCte.cs +++ /dev/null @@ -1,96 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System; -using System.IO; -using System.Xml; -using CTe.Classes; -using CTe.Classes.Servicos.Status; -using CTe.Classes.Servicos.Tipos; -using CTe.Utils.Validacao; -using DFe.Utils; - -namespace CTe.Utils.Extencoes -{ - public static class ExtconsStatServCte - { - public static void ValidarSchema(this consStatServCte consStatServCte, ConfiguracaoServico configuracaoServico = null) - { - var xmlValidacao = consStatServCte.ObterXmlString(); - - switch (consStatServCte.versao) - { - case versao.ve200: - Validador.Valida(xmlValidacao, "consStatServCTe_v2.00.xsd", configuracaoServico); - break; - case versao.ve300: - Validador.Valida(xmlValidacao, "consStatServCTe_v3.00.xsd", configuracaoServico); - break; - default: - throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + - "a versão está inválida, somente é permitido " + - "versão 2.00 é 3.00"); - } - } - - /// - /// Recebe um objeto consStatServ e devolve a string no formato XML - /// - /// Objeto do tipo consStatServ - /// string com XML no do objeto consStatServ - public static string ObterXmlString(this consStatServCte pedStatus) - { - return FuncoesXml.ClasseParaXmlString(pedStatus); - } - - public static void SalvarXmlEmDisco(this consStatServCte statuServCte, ConfiguracaoServico configuracaoServico = null) - { - var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - - if (instanciaServico.NaoSalvarXml()) return; - - var caminhoXml = instanciaServico.DiretorioSalvarXml; - - var arquivoSalvar = Path.Combine(caminhoXml, DateTime.Now.ParaDataHoraString() + "-ped-sta.xml"); - - FuncoesXml.ClasseParaArquivoXml(statuServCte, arquivoSalvar); - } - - public static XmlDocument CriaRequestWs(this consStatServCte consStatServMdFe) - { - var request = new XmlDocument(); - request.LoadXml(consStatServMdFe.ObterXmlString()); - - return request; - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Utils/Shared.CTe.Utils.projitems b/Shared.CTe.Utils/Shared.CTe.Utils.projitems deleted file mode 100644 index 0c90a2e19..000000000 --- a/Shared.CTe.Utils/Shared.CTe.Utils.projitems +++ /dev/null @@ -1,38 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - d4ea4e8b-c0c9-4460-90e6-8cccfc28b005 - - - Shared.CTe.Utils - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.CTe.Utils/Shared.CTe.Utils.shproj b/Shared.CTe.Utils/Shared.CTe.Utils.shproj deleted file mode 100644 index 4f5cb0f98..000000000 --- a/Shared.CTe.Utils/Shared.CTe.Utils.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - d4ea4e8b-c0c9-4460-90e6-8cccfc28b005 - 14.0 - - - - - - - - diff --git a/Shared.CTe.Utils/Validacao/Validador.cs b/Shared.CTe.Utils/Validacao/Validador.cs deleted file mode 100644 index 015fc5f7b..000000000 --- a/Shared.CTe.Utils/Validacao/Validador.cs +++ /dev/null @@ -1,94 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.IO; -using System.Xml; -using System.Xml.Schema; -using CTe.Classes; - -namespace CTe.Utils.Validacao -{ - public static class Validador - { - public static void Valida(string xml, string schema, ConfiguracaoServico configuracaoServico = null) - { - var servicoInstancia = configuracaoServico ?? ConfiguracaoServico.Instancia; - - var pathSchema = servicoInstancia.DiretorioSchemas; - - if (!Directory.Exists(pathSchema)) - throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); - - var arquivoSchema = Path.Combine(pathSchema, schema); - - // Define o tipo de validação - var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; - - // Carrega o arquivo de esquema - var schemas = new XmlSchemaSet(); - schemas.XmlResolver = new XmlUrlResolver(); - - cfg.Schemas = schemas; - // Quando carregar o eschema, especificar o namespace que ele valida - // e a localização do arquivo - schemas.Add(null, arquivoSchema); - // Especifica o tratamento de evento para os erros de validacao - cfg.ValidationEventHandler += ValidationEventHandler; - // cria um leitor para validação - var validator = XmlReader.Create(new StringReader(xml), cfg); - try - { - // Faz a leitura de todos os dados XML - while (validator.Read()) - { - } - } - catch (XmlException err) - { - // Um erro ocorre se o documento XML inclui caracteres ilegais - // ou tags que não estão aninhadas corretamente - throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + err.Message); - } - finally - { - validator.Close(); - } - } - - private static void ValidationEventHandler(object sender, ValidationEventArgs e) - { - throw new Exception("Erros da validação : " + e.Message); - } - } -} \ No newline at end of file diff --git a/Shared.CTe.Wsdl/Shared.CTe.Wsdl.projitems b/Shared.CTe.Wsdl/Shared.CTe.Wsdl.projitems deleted file mode 100644 index 8b36e676c..000000000 --- a/Shared.CTe.Wsdl/Shared.CTe.Wsdl.projitems +++ /dev/null @@ -1,20 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - eda9f90e-7e03-4869-b341-e56071f70e06 - - - Shared.CTe.Wsdl - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.CTe.Wsdl/Shared.CTe.Wsdl.shproj b/Shared.CTe.Wsdl/Shared.CTe.Wsdl.shproj deleted file mode 100644 index 32dac11d1..000000000 --- a/Shared.CTe.Wsdl/Shared.CTe.Wsdl.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - eda9f90e-7e03-4869-b341-e56071f70e06 - 14.0 - - - - - - - - diff --git a/Shared.CTe.Wsdl/Status/CTeStatusServico.cs b/Shared.CTe.Wsdl/Status/CTeStatusServico.cs deleted file mode 100644 index 1ccbf572c..000000000 --- a/Shared.CTe.Wsdl/Status/CTeStatusServico.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using System.Net; -using System.Threading.Tasks; -using System.Xml; -using System.Xml.Serialization; -using CTe.CTeOSDocumento.Common; - -namespace CTe.Wsdl.Status -{ - public class CteStatusServico - { - //Envelope SOAP para envio - private SoapEnvelope soapEnvelope; - - //Configurações do WSDL para estabelecimento da comunicação - private WsdlConfiguracao configuracao; - - /// - /// Cria o cabeçalho do envelope a ser enviado e atribui as configurações do WSDL. - /// - /// - public CteStatusServico(WsdlConfiguracao configuracao) - { - if (configuracao == null) - throw new ArgumentNullException(); - - this.configuracao = configuracao; - soapEnvelope = new SoapEnvelope - { - head = new ResponseHead - { - cteCabecMsg = new cteCabecMsg - { - versaoDados = configuracao.Versao, - cUF = configuracao.CodigoIbgeEstado - } - } - }; - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; - } - - /// - /// Encapsula os dados da requisição no envelope por meio da serialização das partes e realiza a requisção ao Web Service. - /// - /// - /// XmlNode - public async Task cteStatusServicoCTAsync(XmlNode cteDadosMsg) - { - soapEnvelope.body = new ResponseBody - { - cteDadosMsg = cteDadosMsg - }; - return await RequestBuilderAndSender.ExecuteAsync(soapEnvelope, configuracao, TipoEvento.CTeStatusServico, "retConsStatServCte"); - } - - public XmlNode cteStatusServicoCT(XmlNode cteDadosMsg) - { - soapEnvelope.body = new ResponseBody - { - cteDadosMsg = cteDadosMsg - }; - return RequestBuilderAndSender.Execute(soapEnvelope, configuracao, TipoEvento.CTeStatusServico, "retConsStatServCte"); - } - } - - /// - /// Classe base para a serialização no formato do envelope SOAP. - /// - [XmlRoot(ElementName = "Envelope", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - public class SoapEnvelope : CommonSoapEnvelope - { - [XmlElement(ElementName = "Header", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - public ResponseHead head { get; set; } - - [XmlElement(ElementName = "Body", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - public ResponseBody body { get; set; } - } - - /// - /// Classe para o cabeçalho do Envelope SOAP - /// - public class ResponseHead : CommonResponseHead - { - [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico")] - public T cteCabecMsg { get; set; } - } - - /// - /// Classe para o corpo do Envelope SOAP - /// - public class ResponseBody : CommonResponseBody - { - [XmlElement(Namespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico")] - public T cteDadosMsg { get; set; } - } -} diff --git a/Shared.DFe.Classes/Shared.DFe.Classes.projitems b/Shared.DFe.Classes/Shared.DFe.Classes.projitems deleted file mode 100644 index a88a46c34..000000000 --- a/Shared.DFe.Classes/Shared.DFe.Classes.projitems +++ /dev/null @@ -1,29 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 3108968d-d505-4365-966f-bbe3cbf63c35 - - - Shared.DFe.Classes - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.DFe.Classes/Shared.DFe.Classes.shproj b/Shared.DFe.Classes/Shared.DFe.Classes.shproj deleted file mode 100644 index 21b99c5cc..000000000 --- a/Shared.DFe.Classes/Shared.DFe.Classes.shproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - 3108968d-d505-4365-966f-bbe3cbf63c35 - 14.0 - SAK - SAK - SAK - SAK - - - - - - - - \ No newline at end of file diff --git a/Shared.DFe.Classes/Valor.cs b/Shared.DFe.Classes/Valor.cs deleted file mode 100644 index df68d2e1c..000000000 --- a/Shared.DFe.Classes/Valor.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Globalization; - -namespace DFe.Classes -{ - public static class Valor - { - public static decimal Arredondar(this decimal valor, int casasDecimais) - { - var valorNovo = decimal.Round(valor, casasDecimais); - var valorNovoStr = valorNovo.ToString("F" + casasDecimais, CultureInfo.CurrentCulture); - return decimal.Parse(valorNovoStr); - } - - public static decimal? Arredondar(this decimal? valor, int casasDecimais) - { - if (valor == null) return null; - return Arredondar(valor.Value, casasDecimais); - } - } -} diff --git a/Shared.DFe.Utils/Assinatura/AssinaturaDigital.cs b/Shared.DFe.Utils/Assinatura/AssinaturaDigital.cs deleted file mode 100644 index 86a3173b7..000000000 --- a/Shared.DFe.Utils/Assinatura/AssinaturaDigital.cs +++ /dev/null @@ -1,86 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusDFe */ -/* Biblioteca C# para auxiliar no desenvolvimento das demais bibliotecas DFe */ -/* */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System; -using System.Security.Cryptography.X509Certificates; -using System.Security.Cryptography.Xml; -using System.Xml; -using Shared.DFe.Utils; -using SignatureZeus = DFe.Classes.Assinatura.Signature; - -namespace DFe.Utils.Assinatura -{ - public class AssinaturaDigital - { - public static SignatureZeus Assina(T objeto, string id, X509Certificate2 certificado, - string signatureMethod = "http://www.w3.org/2000/09/xmldsig#rsa-sha1", - string digestMethod = "http://www.w3.org/2000/09/xmldsig#sha1", - bool cfgServicoRemoverAcentos = false) where T : class - { - var objetoLocal = objeto; - if (id == null) - throw new Exception("Não é possível assinar um objeto evento sem sua respectiva Id!"); - - var documento = new XmlDocument {PreserveWhitespace = true}; - - documento.LoadXml(cfgServicoRemoverAcentos - ? FuncoesXml.ClasseParaXmlString(objetoLocal).RemoverAcentos() - : FuncoesXml.ClasseParaXmlString(objetoLocal)); - - var docXml = new SignedXml(documento) {SigningKey = certificado.PrivateKey}; - - docXml.SignedInfo.SignatureMethod = signatureMethod; - var reference = new Reference {Uri = "#" + id, DigestMethod = digestMethod}; - - // adicionando EnvelopedSignatureTransform a referencia - var envelopedSigntature = new XmlDsigEnvelopedSignatureTransform(); - reference.AddTransform(envelopedSigntature); - - var c14Transform = new XmlDsigC14NTransform(); - reference.AddTransform(c14Transform); - - docXml.AddReference(reference); - - // carrega o certificado em KeyInfoX509Data para adicionar a KeyInfo - var keyInfo = new KeyInfo(); - keyInfo.AddClause(new KeyInfoX509Data(certificado)); - - docXml.KeyInfo = keyInfo; - docXml.ComputeSignature(); - - //// recuperando a representacao do XML assinado - var xmlDigitalSignature = docXml.GetXml(); - var assinatura = FuncoesXml.XmlStringParaClasse(xmlDigitalSignature.OuterXml); - return assinatura; - } - } -} \ No newline at end of file diff --git a/Shared.DFe.Utils/Shared.DFe.Utils.projitems b/Shared.DFe.Utils/Shared.DFe.Utils.projitems deleted file mode 100644 index 14cd7a3ed..000000000 --- a/Shared.DFe.Utils/Shared.DFe.Utils.projitems +++ /dev/null @@ -1,24 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - e1888e9e-0273-40cb-a569-2ad023907140 - - - Shared.DFe.Utils - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.DFe.Utils/Shared.DFe.Utils.shproj b/Shared.DFe.Utils/Shared.DFe.Utils.shproj deleted file mode 100644 index e19354416..000000000 --- a/Shared.DFe.Utils/Shared.DFe.Utils.shproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - e1888e9e-0273-40cb-a569-2ad023907140 - 14.0 - SAK - SAK - SAK - SAK - - - - - - - - \ No newline at end of file diff --git a/Shared.DFe.Utils/StringExtencoes.cs b/Shared.DFe.Utils/StringExtencoes.cs deleted file mode 100644 index 3dc264aee..000000000 --- a/Shared.DFe.Utils/StringExtencoes.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Text.RegularExpressions; - -namespace Shared.DFe.Utils -{ - public static class StringExtencoes - { - public static string RemoverAcentos(this string valor) - { - if (string.IsNullOrEmpty(valor)) - return valor; - - valor = Regex.Replace(valor, "[áàâãª]", "a"); - valor = Regex.Replace(valor, "[ÁÀÂÃÄ]", "A"); - valor = Regex.Replace(valor, "[éèêë]", "e"); - valor = Regex.Replace(valor, "[ÉÈÊË]", "E"); - valor = Regex.Replace(valor, "[íìîï]", "i"); - valor = Regex.Replace(valor, "[ÍÌÎÏ]", "I"); - valor = Regex.Replace(valor, "[óòôõöº]", "o"); - valor = Regex.Replace(valor, "[ÓÒÔÕÖ]", "O"); - valor = Regex.Replace(valor, "[úùûü]", "u"); - valor = Regex.Replace(valor, "[ÚÙÛÜ]", "U"); - valor = Regex.Replace(valor, "[Ç]", "C"); - valor = Regex.Replace(valor, "[ç]", "c"); - - return valor; - } - } -} diff --git a/Shared.DFe.Wsdl/Common/SoapUrls.cs b/Shared.DFe.Wsdl/Common/SoapUrls.cs deleted file mode 100644 index b4d611c9f..000000000 --- a/Shared.DFe.Wsdl/Common/SoapUrls.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using CTe.CTeOSDocumento.Common; - -namespace CTe.CTeOSDocumento.Soap -{ - public class SoapUrls - { - public string GetSoapUrl(TipoEvento tipoEvento) - { - switch (tipoEvento) - { - case TipoEvento.CTeConsulta: - return "http://www.portalfiscal.inf.br/cte/wsdl/CteConsulta"; - case TipoEvento.CTeDistribuicaoDFe: - return "http://www.portalfiscal.inf.br/cte/wsdl/CTeDistribuicaoDFe/cteDistDFeInteresse"; - case TipoEvento.CTeRecepcaoEvento: - return "http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcaoEvento"; - case TipoEvento.CTeInutilizacao: - return "http://www.portalfiscal.inf.br/cte/wsdl/CteInutilizacao"; - case TipoEvento.CTeRecepcao: - return "http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao"; - case TipoEvento.CTeRetRecepcao: - return "http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao"; - case TipoEvento.CTeStatusServico: - return "http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico"; - default: - throw new ArgumentOutOfRangeException(nameof(tipoEvento), tipoEvento, null); - } - } - } -} \ No newline at end of file diff --git a/Shared.DFe.Wsdl/Common/SoapUtils.cs b/Shared.DFe.Wsdl/Common/SoapUtils.cs deleted file mode 100644 index b9975005a..000000000 --- a/Shared.DFe.Wsdl/Common/SoapUtils.cs +++ /dev/null @@ -1,137 +0,0 @@ -using CTe.CTeOSDocumento.Common; -using DFe.Http.Ext; -using System; -using System.IO; -using System.Net; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using System.Xml; -using System.Xml.Serialization; - -namespace CTe.CTeOSDocumento.Soap -{ - /// - /// Classe utilitária resposável pela serialização das classes em um envelope do tipo - /// SOAP e envio das requisições para os respectivos Web Services. - /// - public class SoapUtils - { - /// - /// Serializa a estrutura do envelope contida no objeto para um XmlDocument. - /// - /// - /// - /// - public XmlDocument SerealizeDocument(T soapEnvelope) - { - // instancia do objeto responsável pela serialização - XmlSerializer soapserializer = new XmlSerializer(typeof(T)); - - // Armazena os dados em memória para manipulação - MemoryStream memoryStream = new MemoryStream(); - XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); - - //Serializa o objeto de acordo com o formato - soapserializer.Serialize(xmlTextWriter, soapEnvelope); - xmlTextWriter.Formatting = Formatting.None; - - XmlDocument xmlDocument = new XmlDocument(); - - //Remove o caractere especial BOM (byte order mark) - string output = Encoding.UTF8.GetString(memoryStream.ToArray()); - string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); - if (output.StartsWith(_byteOrderMarkUtf8)) - { - output = output.Remove(0, _byteOrderMarkUtf8.Length); - } - - //Carrega os dados na instancia do XmlDocument - xmlDocument.LoadXml(output); - - return xmlDocument; - } - - /// - /// Cria e envia a requisição HttpClient, retornando a resposta obtida do WebService. - /// - /// - /// - /// - /// - /// - /// - public async Task SendRequestAsync(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, TipoEvento? tipoEvento = null, string actionUrn = "") - { - //verifica se pelo menos uma das 2 propriedades obrigatorias estão definidas - if (!tipoEvento.HasValue && string.IsNullOrWhiteSpace(actionUrn)) - { - throw new ArgumentNullException("Pelo menos uma das propriedades tipoEvento ou actionUrl devem ser definidos para executar a action na requisição soap"); - } - - //caso o tipoevento esteja definido, pega a url do evento - if (tipoEvento.HasValue) - { - actionUrn = new SoapUrls().GetSoapUrl(tipoEvento.Value); - } - - string xmlSoap = xmlEnvelop.InnerXml; - HttpWebRequest httpWr = (HttpWebRequest)WebRequest.Create(new Uri(url)); - - httpWr.Timeout = timeOut == 0 ? 2000 : timeOut; - httpWr.ContentLength = Encoding.UTF8.GetBytes(xmlSoap).Length; - httpWr.ClientCertificates.Add(certificadoDigital); - httpWr.ComposeContentType("application/soap+xml", Encoding.UTF8, actionUrn); - httpWr.Method = "POST"; - - StreamWriter streamWriter = new StreamWriter(httpWr.GetRequestStream()); - - streamWriter.Write(xmlSoap, 0, Encoding.UTF8.GetBytes(xmlSoap).Length); - streamWriter.Close(); - - var webResponse = httpWr.GetResponse(); - var respStream = webResponse.GetResponseStream(); - StreamReader streamReader = new StreamReader(respStream); - - string xmlRetorno = streamReader.ReadToEnd(); - return await Task.FromResult(xmlRetorno); - } - - public string SendRequest(XmlDocument xmlEnvelop, X509Certificate2 certificadoDigital, string url, int timeOut, TipoEvento? tipoEvento = null, string actionUrn = "") - { - //verifica se pelo menos uma das 2 propriedades obrigatorias estão definidas - if (!tipoEvento.HasValue && string.IsNullOrWhiteSpace(actionUrn)) - { - throw new ArgumentNullException("Pelo menos uma das propriedades tipoEvento ou actionUrl devem ser definidos para executar a action na requisição soap"); - } - - //caso o tipoevento esteja definido, pega a url do evento - if (tipoEvento.HasValue) - { - actionUrn = new SoapUrls().GetSoapUrl(tipoEvento.Value); - } - - string xmlSoap = xmlEnvelop.InnerXml; - HttpWebRequest httpWr = (HttpWebRequest)WebRequest.Create(new Uri(url)); - - httpWr.Timeout = timeOut == 0 ? 2000 : timeOut; - httpWr.ContentLength = Encoding.UTF8.GetBytes(xmlSoap).Length; - httpWr.ClientCertificates.Add(certificadoDigital); - httpWr.ComposeContentType("application/soap+xml", Encoding.UTF8, actionUrn); - httpWr.Method = "POST"; - - StreamWriter streamWriter = new StreamWriter(httpWr.GetRequestStream()); - - streamWriter.Write(xmlSoap, 0, Encoding.UTF8.GetBytes(xmlSoap).Length); - streamWriter.Close(); - - var webResponse = httpWr.GetResponse(); - var respStream = webResponse.GetResponseStream(); - StreamReader streamReader = new StreamReader(respStream); - - string xmlRetorno = streamReader.ReadToEnd(); - return xmlRetorno; - } - } - -} diff --git a/Shared.DFe.Wsdl/Common/TipoEvento.cs b/Shared.DFe.Wsdl/Common/TipoEvento.cs deleted file mode 100644 index aa04ccedb..000000000 --- a/Shared.DFe.Wsdl/Common/TipoEvento.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace CTe.CTeOSDocumento.Common -{ - public enum TipoEvento - { - CTeConsulta, - CTeDistribuicaoDFe, - CTeRecepcaoEvento, - CTeInutilizacao, - CTeRecepcao, - CTeRetRecepcao, - CTeStatusServico - } -} \ No newline at end of file diff --git a/Shared.DFe.Wsdl/Shared.DFe.Wsdl.projitems b/Shared.DFe.Wsdl/Shared.DFe.Wsdl.projitems deleted file mode 100644 index ffaa30698..000000000 --- a/Shared.DFe.Wsdl/Shared.DFe.Wsdl.projitems +++ /dev/null @@ -1,35 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 8a90a3f4-d280-4b2b-b4ff-0dc110411bb6 - - - Shared.DFe.Wsdl - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.DFe.Wsdl/Shared.DFe.Wsdl.shproj b/Shared.DFe.Wsdl/Shared.DFe.Wsdl.shproj deleted file mode 100644 index 24be3d5fa..000000000 --- a/Shared.DFe.Wsdl/Shared.DFe.Wsdl.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - 8a90a3f4-d280-4b2b-b4ff-0dc110411bb6 - 14.0 - - - - - - - - diff --git a/Shared.NFe.Classes/Informacoes/Cana/cana.cs b/Shared.NFe.Classes/Informacoes/Cana/cana.cs deleted file mode 100644 index a1b8c559e..000000000 --- a/Shared.NFe.Classes/Informacoes/Cana/cana.cs +++ /dev/null @@ -1,62 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace NFe.Classes.Informacoes.Cana -{ - public class cana - { - /// - /// ZC02 - Identificação da safra - /// - public string safra { get; set; } - - /// - /// ZC03 - Mês e ano de referência - /// - public string @ref { get; set; } - - /// - /// ZC04 - Grupo Fornecimento diário de cana - /// - [XmlElement("forDia")] - public List forDia { get; set; } - - /// - /// ZC10 - Grupo Deduções – Taxas e Contribuições - /// - [XmlElement("deduc")] - public List deduc { get; set; } - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS90.cs b/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS90.cs deleted file mode 100644 index 0006d6876..000000000 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Estadual/ICMS90.cs +++ /dev/null @@ -1,348 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; -using System.Xml.Serialization; - -namespace NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual -{ - public class ICMS90 : ICMSBasico - { - private decimal? _vBc; - private decimal? _pRedBc; - private decimal? _pIcms; - private decimal? _vIcms; - private decimal? _pMvast; - private decimal? _pRedBcst; - private decimal? _vBcst; - private decimal? _pIcmsst; - private decimal? _vIcmsst; - private decimal? _vIcmsDeson; - private decimal? _vBcfcp; - private decimal? _pFcp; - private decimal? _vFcp; - private decimal? _vBcfcpst; - private decimal? _pFcpst; - private decimal? _vFcpst; - - /// - /// N11 - Origem da Mercadoria - /// - [XmlElement(Order = 1)] - public OrigemMercadoria orig { get; set; } - - /// - /// N12- Situação Tributária - /// - [XmlElement(Order = 2)] - public Csticms CST { get; set; } - - /// - /// N13 - Modalidade de determinação da BC do ICMS - /// - [XmlElement(Order = 3)] - public DeterminacaoBaseIcms? modBC { get; set; } - - /// - /// N15 - Valor da BC do ICMS - /// - [XmlElement(Order = 4)] - public decimal? vBC - { - get { return _vBc.Arredondar(2); } - set { _vBc = value.Arredondar(2); } - } - - /// - /// N14 - Percentual de redução da BC - /// - [XmlElement(Order = 5)] - public decimal? pRedBC - { - get { return _pRedBc.Arredondar(4); } - set { _pRedBc = value.Arredondar(4); } - } - - /// - /// N16 - Alíquota do imposto - /// - [XmlElement(Order = 6)] - public decimal? pICMS - { - get { return _pIcms.Arredondar(4); } - set { _pIcms = value.Arredondar(4); } - } - - /// - /// N17 - Valor do ICMS - /// - [XmlElement(Order = 7)] - public decimal? vICMS - { - get { return _vIcms.Arredondar(2); } - set { _vIcms = value.Arredondar(2); } - } - - /// - /// N17a - Valor da Base de Cálculo do FCP - /// Versão 4.00 - /// - [XmlElement(Order = 8)] - public decimal? vBCFCP - { - get { return _vBcfcp.Arredondar(2); } - set { _vBcfcp = value.Arredondar(2); } - } - - public bool vBCFCPSpecified - { - get { return vBCFCP.HasValue; } - } - - /// - /// N17b - Percentual do Fundo de Combate à Pobreza (FCP) - /// Versão 4.00 - /// - [XmlElement(Order = 9)] - public decimal? pFCP - { - get { return _pFcp.Arredondar(4); } - set { _pFcp = value.Arredondar(4); } - } - - public bool pFCPSpecified - { - get { return pFCP.HasValue; } - } - - /// - /// N17c - Valor do Fundo de Combate à Pobreza (FCP) - /// Versão 4.00 - /// - [XmlElement(Order = 10)] - public decimal? vFCP - { - get { return _vFcp.Arredondar(2); } - set { _vFcp = value.Arredondar(2); } - } - - public bool vFCPSpecified - { - get { return vFCP.HasValue; } - } - - /// - /// N18 - Modalidade de determinação da BC do ICMS ST - /// - [XmlElement(Order = 11)] - public DeterminacaoBaseIcmsSt? modBCST { get; set; } - - /// - /// N19 - Percentual da margem de valor Adicionado do ICMS ST - /// - [XmlElement(Order = 12)] - public decimal? pMVAST - { - get { return _pMvast.Arredondar(4); } - set { _pMvast = value.Arredondar(4); } - } - - /// - /// N20 - Percentual da Redução de BC do ICMS ST - /// - [XmlElement(Order = 13)] - public decimal? pRedBCST - { - get { return _pRedBcst.Arredondar(4); } - set { _pRedBcst = value.Arredondar(4); } - } - - /// - /// N21 - Valor da BC do ICMS ST - /// - [XmlElement(Order = 14)] - public decimal? vBCST - { - get { return _vBcst.Arredondar(2); } - set { _vBcst = value.Arredondar(2); } - } - - /// - /// N22 - Alíquota do imposto do ICMS ST - /// - [XmlElement(Order = 15)] - public decimal? pICMSST - { - get { return _pIcmsst.Arredondar(4); } - set { _pIcmsst = value.Arredondar(4); } - } - - /// - /// N23 - Valor do ICMS ST - /// - [XmlElement(Order = 16)] - public decimal? vICMSST - { - get { return _vIcmsst.Arredondar(2); } - set { _vIcmsst = value.Arredondar(2); } - } - - /// - /// N23a - Valor da Base de Cálculo do FCP retido por Substituição Tributária - /// Versão 4.00 - /// - [XmlElement(Order = 17)] - public decimal? vBCFCPST - { - get { return _vBcfcpst.Arredondar(2); } - set { _vBcfcpst = value.Arredondar(2); } - } - - public bool vBCFCPSTSpecified - { - get { return vBCFCPST.HasValue; } - } - - /// - /// N23b - Percentual do FCP retido por Substituição Tributária - /// Versão 4.00 - /// - [XmlElement(Order = 18)] - public decimal? pFCPST - { - get { return _pFcpst.Arredondar(4); } - set { _pFcpst = value.Arredondar(4); } - } - - public bool pFCPSTSpecified - { - get { return pFCPST.HasValue; } - } - - /// - /// N23d - Valor do FCP retido por Substituição Tributária - /// Versão 4.00 - /// - [XmlElement(Order = 19)] - public decimal? vFCPST - { - get { return _vFcpst; } - set { _vFcpst = value; } - } - - public bool vFCPSTSpecified - { - get { return vFCPST.HasValue; } - } - - /// - /// N27a - Valor do ICMS desonerado - /// - [XmlElement(Order = 20)] - public decimal? vICMSDeson - { - get { return _vIcmsDeson.Arredondar(2); } - set { _vIcmsDeson = value.Arredondar(2); } - } - - /// - /// N28 - Motivo da desoneração do ICMS - /// - [XmlElement(Order = 21)] - public MotivoDesoneracaoIcms? motDesICMS { get; set; } - - public bool ShouldSerializemodBC() - { - return modBC.HasValue; - } - - public bool ShouldSerializevBC() - { - return vBC.HasValue; - } - - public bool ShouldSerializepRedBC() - { - return pRedBC.HasValue; - } - - public bool ShouldSerializepICMS() - { - return pICMS.HasValue; - } - - public bool ShouldSerializevICMS() - { - return vICMS.HasValue; - } - - public bool ShouldSerializemodBCST() - { - return modBCST.HasValue; - } - - public bool ShouldSerializepMVAST() - { - return pMVAST.HasValue; - } - - public bool ShouldSerializepRedBCST() - { - return pRedBCST.HasValue; - } - - public bool ShouldSerializevBCST() - { - return vBCST.HasValue; - } - - public bool ShouldSerializepICMSST() - { - return pICMSST.HasValue; - } - - public bool ShouldSerializevICMSST() - { - return vICMSST.HasValue; - } - - public bool ShouldSerializevICMSDeson() - { - return vICMSDeson.HasValue; - } - - public bool ShouldSerializemotDesICMS() - { - return motDesICMS.HasValue; - } - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Extensions.cs b/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Extensions.cs deleted file mode 100644 index d44b8c242..000000000 --- a/Shared.NFe.Classes/Informacoes/Detalhe/Tributacao/Extensions.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using System.Reflection; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; -using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; - -namespace NFe.Classes.Informacoes.Detalhe.Tributacao -{ - public static class Extensions - { - public static OrigemMercadoria GetIcmsOrig(this ICMSBasico icms) - { - return GetPropOrigemMercadoriaValue(icms, "orig"); - } - - public static Csosnicms GetIcmsCsosn(this ICMSBasico icms) - { - return GetPropCsosnicmsValue(icms, "CSOSN"); - } - - public static Csticms GetIcmsCst(this ICMSBasico icms) - { - return GetPropCsticmsValue(icms, "CST"); - } - - public static decimal GetIcmsPercent(this ICMSBasico icms) - { - return GetPropDecimalValue(icms, "pICMS"); - } - - public static decimal GetIcmsBcValue(this ICMSBasico icms) - { - return GetPropDecimalValue(icms, "vBC"); - } - - public static decimal GetIcmsBcStValue(this ICMSBasico icms) - { - return GetPropDecimalValue(icms, "vBCST"); - } - - public static decimal GetIcmsDesonValue(this ICMSBasico icms) - { - return GetPropDecimalValue(icms, "vICMSDeson"); - } - - public static decimal GetIcmsValue(this ICMSBasico icms) - { - return GetPropDecimalValue(icms, "vICMS"); - } - - public static decimal GetIpiPercent(this IPIBasico ipi) - { - return GetPropDecimalValue(ipi, "pIPI"); - } - - public static decimal GetIpiValue(this IPIBasico ipi) - { - return GetPropDecimalValue(ipi, "vIPI"); - } - - public static decimal GetPisValue(this PISBasico pis) - { - return GetPropDecimalValue(pis, "vPIS"); - } - - public static decimal GetCofinsValue(this COFINSBasico cofins) - { - return GetPropDecimalValue(cofins, "vCOFINS"); - } - - private static OrigemMercadoria GetPropOrigemMercadoriaValue(object instance, string propName) - { - try - { - var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); - return (OrigemMercadoria) (property != null ? (OrigemMercadoria?) property.GetValue(instance, null) : OrigemMercadoria.OmNacional); - } - catch (Exception) - { - return OrigemMercadoria.OmNacional; - } - } - - private static Csticms GetPropCsticmsValue(object instance, string propName) - { - try - { - var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); - return (Csticms) (property != null ? (Csticms?) property.GetValue(instance, null) : Csticms.Cst90); - } - catch (Exception) - { - return Csticms.Cst90; - } - } - - private static Csosnicms GetPropCsosnicmsValue(object instance, string propName) - { - try - { - var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); - return (Csosnicms) (property != null ? (Csosnicms?) property.GetValue(instance, null) : Csosnicms.Csosn900); - } - catch (Exception) - { - return Csosnicms.Csosn900; - } - } - - private static decimal GetPropDecimalValue(object instance, string propName) - { - try - { - var property = instance.GetType().GetProperty(propName, BindingFlags.Public | BindingFlags.Instance); - - if (property != null) - { - return (decimal?)property.GetValue(instance, null) ?? 0M; - } - - return 0M; - } - catch (Exception) - { - return 0M; - } - } - } -} diff --git a/Shared.NFe.Classes/Informacoes/Detalhe/det.cs b/Shared.NFe.Classes/Informacoes/Detalhe/det.cs deleted file mode 100644 index 3eef11930..000000000 --- a/Shared.NFe.Classes/Informacoes/Detalhe/det.cs +++ /dev/null @@ -1,66 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Xml.Serialization; -using NFe.Classes.Informacoes.Detalhe.Tributacao; - -namespace NFe.Classes.Informacoes.Detalhe -{ - public class det - { - /// - /// H02 - Número do item do NF - /// - [XmlAttribute] - public int nItem { get; set; } - - /// - /// I01 - Detalhamento de Produtos e Serviços - /// - public prod prod { get; set; } - - /// - /// M01 - Tributos incidentes no Produto ou Serviço - /// - public imposto imposto { get; set; } - - /// - /// UA01 - Informação do Imposto devolvido - /// - public impostoDevol impostoDevol { get; set; } - - /// - /// V01 - Informações Adicionais do Produto - /// - public string infAdProd { get; set; } - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Emitente/emit.cs b/Shared.NFe.Classes/Informacoes/Emitente/emit.cs deleted file mode 100644 index 2b94d7ac0..000000000 --- a/Shared.NFe.Classes/Informacoes/Emitente/emit.cs +++ /dev/null @@ -1,138 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.Text.RegularExpressions; - -namespace NFe.Classes.Informacoes.Emitente -{ - public class emit - { - private const string ErroCpfCnpjPreenchidos = "Somente preencher um dos campos: CNPJ ou CPF, para um objeto do tipo emit!"; - private string _cnpj; - private string _cpf; - - /// - /// C02 - CNPJ do emitente - /// - public string CNPJ - { - get { return _cnpj; } - set - { - if (string.IsNullOrEmpty(value)) return; - if (string.IsNullOrEmpty(_cpf)) - _cnpj = Regex.Match(value, @"\d+").Value; - - else - { - throw new ArgumentException(ErroCpfCnpjPreenchidos); - } - } - } - - /// - /// C02a - CPF do remetente - /// - public string CPF - { - get { return _cpf; } - set - { - if (string.IsNullOrEmpty(value)) return; - if (string.IsNullOrEmpty(_cnpj)) - _cpf = Regex.Match(value, @"\d+").Value; - else - { - throw new ArgumentException(ErroCpfCnpjPreenchidos); - } - } - } - - /// - /// C03 - Razão Social ou Nome do emitente - /// - public string xNome { get; set; } - - /// - /// C04 - Nome fantasia - /// - public string xFant { get; set; } - - /// - /// C05 - Grupo do Endereço do emitente - /// - public enderEmit enderEmit { get; set; } - - /// - /// C17 - Inscrição Estadual - /// Campo de informação obrigatória nos casos de emissão própria (procEmi = 0, 2 ou 3). - /// - /// A IE deve ser informada apenas com algarismos para destinatários contribuintes do ICMS, sem caracteres de - /// formatação (ponto, barra, hífen, etc.); - /// - /// - /// O literal “ISENTO” deve ser informado apenas para contribuintes do ICMS que são isentos de inscrição no - /// cadastro de contribuintes do ICMS e estejam emitindo NF-e avulsa; - /// - /// - public string IE { get; set; } - - /// - /// C18 - IE do Substituto Tributário - /// Informar a IE do ST da UF de destino da mercadoria, quando houver a retenção do ICMS ST para a UF de destino. - /// - public string IEST { get; set; } - - /// - /// C19 - Inscrição Municipal - /// - /// Este campo deve ser informado, quando ocorrer a emissão de NF-e conjugada, com prestação de serviços sujeitos - /// ao ISSQN e fornecimento de peças sujeitos ao ICMS. - /// - /// - public string IM { get; set; } - - /// - /// C20 - CNAE fiscal - /// Este campo deve ser informado quando o campo IM (C19) for informado. - /// - public string CNAE { get; set; } - - /// - /// C21 - Código de Regime Tributário - /// - public CRT CRT { get; set; } - - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Emitente/emitTipos.cs b/Shared.NFe.Classes/Informacoes/Emitente/emitTipos.cs deleted file mode 100644 index fd497a948..000000000 --- a/Shared.NFe.Classes/Informacoes/Emitente/emitTipos.cs +++ /dev/null @@ -1,66 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.ComponentModel; -using System.Xml.Serialization; - -namespace NFe.Classes.Informacoes.Emitente -{ - /// - /// 1 – Simples Nacional; - /// 2 – Simples Nacional – excesso de sublimite de receita bruta; - /// 3 – Regime Normal. (v2.0). - /// - public enum CRT - { - /// - /// 1 – Simples Nacional - /// - [Description("Simples Nacional")] - [XmlEnum("1")] - SimplesNacional = 1, - - /// - /// 2 – Simples Nacional – excesso de sublimite de receita bruta - /// - [Description("Simples Nacional – excesso de sublimite de receita bruta")] - [XmlEnum("2")] - SimplesNacionalExcessoSublimite = 2, - - /// - /// 3 – Regime Normal - /// - [Description("Regime Normal")] - [XmlEnum("3")] - RegimeNormal = 3 - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Identificacao/ide.cs b/Shared.NFe.Classes/Informacoes/Identificacao/ide.cs deleted file mode 100644 index d9248d505..000000000 --- a/Shared.NFe.Classes/Informacoes/Identificacao/ide.cs +++ /dev/null @@ -1,270 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Xml.Serialization; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; -using DFe.Utils; -using NFe.Classes.Informacoes.Identificacao.Tipos; - -namespace NFe.Classes.Informacoes.Identificacao -{ - public class ide - { - /// - /// B02 - Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. - /// - public Estado cUF { get; set; } - - /// - /// B03 - Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e. - /// - public string cNF { get; set; } - - /// - /// B04 - Descrição da Natureza da Operação - /// - public string natOp { get; set; } - - /// - /// B05 - Indicador da forma de pagamento - /// Versão 3.10 - /// Versão 4.00 removido - /// - public IndicadorPagamento? indPag { get; set; } - - public bool indPagSpecified - { - get { return indPag.HasValue; } - } - - /// - /// B06 - Modelo do Documento Fiscal - /// - public ModeloDocumento mod { get; set; } - - /// - /// B07 - Série do Documento Fiscal - /// série normal 0-889 - /// Avulsa Fisco 890-899 - /// SCAN 900-999 - /// - public int serie { get; set; } - - /// - /// B08 - Número do Documento Fiscal - /// - public long nNF { get; set; } - - /// - /// B09 - Data de emissão do Documento Fiscal - V2.00 - /// - [XmlIgnore] - public DateTime dEmi { get; set; } //V2.00 - - /// - /// Proxy para dEmi no formato AAAA-MM-DD - /// - [XmlElement(ElementName = "dEmi")] - public string ProxydEmi - { - get { return dEmi.ParaDataString(); } - set { dEmi = DateTime.Parse(value); } - } - - /// - /// B10 - Data de Saída ou da Entrada da Mercadoria/Produto - V2.00 - /// - [XmlIgnore] - public DateTime dSaiEnt { get; set; } //V2.00 - - /// - /// Proxy para dSaiEnt no formato AAAA-MM-DD - /// - [XmlElement(ElementName = "dSaiEnt")] - public string ProxydSaiEnt - { - get { return dSaiEnt.ParaDataString(); } - set { dSaiEnt = DateTime.Parse(value); } - } - - /// - /// B09 - Data e Hora de emissão do Documento Fiscal - /// - [XmlIgnore] - public DateTimeOffset dhEmi { get; set; } - - /// - /// Proxy para dhEmi no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) - /// - [XmlElement(ElementName = "dhEmi")] - public string ProxyDhEmi - { - get { return dhEmi.ParaDataHoraStringUtc(); } - set { dhEmi = DateTimeOffset.Parse(value); } - } - - /// - /// B10 - Data e Hora da saída ou de entrada da mercadoria / produto - /// - [XmlIgnore] - public DateTimeOffset? dhSaiEnt { get; set; } - - /// - /// Proxy para dhSaiEnt no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) - /// - [XmlElement(ElementName = "dhSaiEnt")] - public string ProxydhSaiEnt - { - get { return dhSaiEnt.ParaDataHoraStringUtc(); } - set { dhSaiEnt = DateTimeOffset.Parse(value); } - } - - /// - /// B11 - Tipo do Documento Fiscal - /// - public TipoNFe tpNF { get; set; } - - /// - /// B11a - Identificador de Local de destino da operação - /// - public DestinoOperacao? idDest { get; set; } //Nulable por conta da v2.00 - - /// - /// B12 - Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) - /// - public long cMunFG { get; set; } - - /// - /// B21 - Formato de impressão do DANFE - /// - public TipoImpressao tpImp { get; set; } - - /// - /// B22 - Tipo de Emissão da NF-e - /// - public TipoEmissao tpEmis { get; set; } - - /// - /// B23 - Digito Verificador da Chave de Acesso da NF-e - /// - public int cDV { get; set; } - - /// - /// B24 - Identificação do Ambiente - /// - public TipoAmbiente tpAmb { get; set; } - - /// - /// B25a - Finalidade da emissão da NF-e - /// - public FinalidadeNFe finNFe { get; set; } - - /// - /// B25a - Indica operação com consumidor final - /// - public ConsumidorFinal? indFinal { get; set; } //Nulable por conta da v2.00 - - /// - /// B25b - Indicador de presença do comprador no estabelecimento comercial no momento da operação - /// - public PresencaComprador? indPres { get; set; } //Nulable por conta da v2.00 - - /// - /// B25c - Indicador de intermediador/marketplace - /// - public IndicadorIntermediador? indIntermed { get; set; } - - public bool indIntermedSpecified - { - get { return indIntermed.HasValue; } - } - - /// - /// B26 - Processo de emissão utilizado com a seguinte codificação: - /// - public ProcessoEmissao procEmi { get; set; } - - /// - /// B27 - versão do aplicativo utilizado no processo de emissão - /// - public string verProc { get; set; } - - /// - /// B28 - Informar apenas para tpEmis diferente de 1 - /// - /// Informar a data e hora de entrada em contingência - /// - /// - [XmlIgnore] - public DateTimeOffset dhCont { get; set; } - - /// - /// Proxy para dhCont no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) - /// - [XmlElement(ElementName = "dhCont")] - public string ProxydhCont - { - get { return dhCont.ParaDataHoraStringUtc(); } - set { dhCont = DateTimeOffset.Parse(value); } - } - - /// - /// B29 - Informar a Justificativa da entrada - /// - public string xJust { get; set; } - - /// - /// BA01 - Informação de Documentos Fiscais referenciados - /// - [XmlElement("NFref")] - public List NFref { get; set; } - - public bool ShouldSerializeidDest() - { - return idDest.HasValue; - } - - public bool ShouldSerializeindFinal() - { - return indFinal.HasValue; - } - - public bool ShouldSerializeindPres() - { - return indPres.HasValue; - } - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Observacoes/procRefTipos.cs b/Shared.NFe.Classes/Informacoes/Observacoes/procRefTipos.cs deleted file mode 100644 index 0f8b76fa8..000000000 --- a/Shared.NFe.Classes/Informacoes/Observacoes/procRefTipos.cs +++ /dev/null @@ -1,83 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.ComponentModel; -using System.Xml.Serialization; - -namespace NFe.Classes.Informacoes.Observacoes -{ - /// - /// Indicador da origem do processo - /// 0 - SEFAZ; - /// 1 - Justiça Federal; - /// 2 - Justiça Estadual; - /// 3 - Secex/RFB; - /// 9 - Outros - /// - public enum IndicadorProcesso - { - /// - /// 0 - SEFAZ - /// - [Description("SEFAZ")] - [XmlEnum("0")] - ipSEFAZ = 0, - - /// - /// 1 - Justiça Federal - /// - [Description("Justiça Federal")] - [XmlEnum("1")] - ipJusticaFederal = 1, - - /// - /// 2 - Justiça Estadual - /// - [Description("Justiça Estadual")] - [XmlEnum("2")] - ipJusticaEstadual = 2, - - /// - /// 3 - Secex/RFB - /// - [Description("Secex/RFB")] - [XmlEnum("3")] - ipSecexRFB = 3, - - /// - /// 9 - Outros - /// - [Description("Outros")] - [XmlEnum("9")] - ipOutros = 9 - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Pagamento/detPag.cs b/Shared.NFe.Classes/Informacoes/Pagamento/detPag.cs deleted file mode 100644 index 4dc6aa8a8..000000000 --- a/Shared.NFe.Classes/Informacoes/Pagamento/detPag.cs +++ /dev/null @@ -1,29 +0,0 @@ -using NFe.Classes.Informacoes.Identificacao.Tipos; - -namespace NFe.Classes.Informacoes.Pagamento -{ - public class detPag - { - private decimal _vPag; - - - public IndicadorPagamentoDetalhePagamento? indPag { get; set; } - - public bool indPagSpecified { get { return indPag.HasValue; } } - - /// - /// YA02 - Forma de pagamento - /// - public FormaPagamento tPag { get; set; } - - public decimal vPag - { - get { return _vPag.Arredondar(2); } - set { _vPag = value.Arredondar(2); } - } - - public card card { get; set; } - - - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Informacoes/Pagamento/pagTipos.cs b/Shared.NFe.Classes/Informacoes/Pagamento/pagTipos.cs deleted file mode 100644 index a9bcc23a0..000000000 --- a/Shared.NFe.Classes/Informacoes/Pagamento/pagTipos.cs +++ /dev/null @@ -1,287 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System.ComponentModel; -using System.Xml.Serialization; - -namespace NFe.Classes.Informacoes.Pagamento -{ - /// - /// Meio de pagamento - /// 01 - Dinheiro - /// 02 - Cheque - /// 03 - Cartão de Crédito - /// 04 - Cartão de Débito - /// 05 - Crédito Loja - /// 10 - Vale Alimentação - /// 11 - Vale Refeição - /// 12 - Vale Presente - /// 13 - Vale Combustível - /// 14 - Duplicata Mercantil (versão 4.00) - /// 15 - Boleto Bancário (versão 4.00) - /// 16 - Depósito Bancário (versão 4.00) - /// 17 - Pagamento Instantâneo (PIX) (versão 4.00) - /// 18 - Transferência bancária, Carteira Digital (versão 4.00) - /// 19 - Programa de fidelidade, Cashback, Crédito Virtual (versão 4.00) - /// 90 - Sem pagamento (versão 4.00) - /// 99 - Outros - /// - public enum FormaPagamento - { - /// - /// 01 - Dinheiro - /// - [Description("Dinheiro")] - [XmlEnum("01")] - fpDinheiro = 01, - - /// - /// 02 - Cheque - /// - [Description("Cheque")] - [XmlEnum("02")] - fpCheque = 02, - - /// - /// 03 - Cartão de Crédito - /// - [Description("Cartão de Crédito")] - [XmlEnum("03")] - fpCartaoCredito = 03, - - /// - /// 04 - Cartão de Débito - /// - [Description("Cartão de Débito")] - [XmlEnum("04")] - fpCartaoDebito = 04, - - /// - /// 05 - Crédito Loja - /// - [Description("Crédito Loja")] - [XmlEnum("05")] - fpCreditoLoja = 05, - - /// - /// 10 - Vale Alimentação - /// - [Description("Vale Alimentação")] - [XmlEnum("10")] - fpValeAlimentacao = 10, - - /// - /// 11 - Vale Refeição - /// - [Description("Vale Refeição")] - [XmlEnum("11")] - fpValeRefeicao = 11, - - /// - /// 12 -Vale Presente - /// - [Description("Vale Presente")] - [XmlEnum("12")] - fpValePresente = 12, - - /// - /// 13 - Vale Combustível - /// - [Description("Vale Combustível")] - [XmlEnum("13")] - fpValeCombustivel = 13, - - /// - /// 14 - Duplicata Mercantil - /// Na NT2016.002 (v1.50), foi excluída esta forma de pagamento na emissão de NFC-e (modelo 65), - /// porém para NFe (modelo 55) a SEFAZ, até o momento, ainda permite o seu uso. - /// - /// - [Description("Duplicata Mercantil")] - [XmlEnum("14")] - fpDuplicataMercantil = 14, - - /// - /// 15 - Boleto Bancário - /// - [Description("Boleto Bancário")] - [XmlEnum("15")] fpBoletoBancario = 15, - - /// - /// 16 - Depósito Bancário - /// - [Description("=Depósito Bancário")] - [XmlEnum("16")] fpDepositoBancario= 16, - - /// - /// 17 - Pagamento Instantâneo (PIX) - /// - [Description("Pagamento Instantâneo (PIX)")] - [XmlEnum("17")] fpPagamentoInstantaneoPIX = 17, - - /// - /// 18 - Transferência bancária, Carteira Digital - /// - [Description("Transferência bancária, Carteira Digital")] - [XmlEnum("18")] fpTransferenciabancaria = 18, - - /// - /// 19 - Programa de fidelidade, Cashback, Crédito Virtual - /// - [Description("Programa de fidelidade, Cashback, Crédito Virtual")] - [XmlEnum("19")] fpProgramadefidelidade = 19, - - - /// - /// 90 - Sem pagamento - /// - [Description("Sem pagamento")] - [XmlEnum("90")] - fpSemPagamento = 90, - - /// - /// 99 - Outros - /// - [Description("Outros")] - [XmlEnum("99")] - fpOutro = 99 - } - - /// - /// Bandeira da operadora de cartão de crédito e/ou débito - /// 01 - Visa - /// 02 - Mastercard - /// 03 - American Express - /// 04 - Sorocred - /// 05 - Diners Club (versão 4.00) - /// 06 - Elo (versão 4.00) - /// 07 - Hipercard (versão 4.00) - /// 08 - Aura (versão 4.00) - /// 09 - Cabal (versão 4.00) - /// 99 - Outros - /// - public enum BandeiraCartao - { - /// - /// >01 - Visa - /// - [Description("Visa")] - [XmlEnum("01")] - bcVisa = 01, - - /// - /// 02 - Mastercard - /// - [Description("Mastercard")] - [XmlEnum("02")] - bcMasterCard = 02, - - /// - /// 03 - American Express - /// - [Description("American Express")] - [XmlEnum("03")] - bcAmericanExpress = 03, - - /// - /// 04 - Sorocred - /// - [Description("Sorocred")] - [XmlEnum("04")] - bcSorocred = 04, - - /// - /// 05 - Diners Club (versão 4.00) - /// - [Description("Diners Club")] - [XmlEnum("05")] - bcDinersClub = 05, - - /// - /// 06 - Elo (versão 4.00) - /// - [Description("Elo")] - [XmlEnum("06")] - Elo = 06, - - /// - /// 07 - Hipercard (versão 4.00) - /// - [Description("Hipercard")] - [XmlEnum("07")] - Hipercard = 07, - - /// - /// 08 - Aura (versão 4.00) - /// - [Description("Aura")] - [XmlEnum("08")] - Aura = 08, - - /// - /// 09 - Cabal (versão 4.00) - /// - [Description("Cabal")] - [XmlEnum("09")] - Cabal = 09, - - /// - /// 99 - Outros - /// - [Description("Outros")] - [XmlEnum("99")] - bcOutros = 99 - } - - /// - /// Tipo de Integração para pagamento - /// 1 - Pagamento integrado com o sistema de automação da empresa(Ex.: equipamento TEF, Comércio Eletrônico); - /// 2 - Pagamento não integrado com o sistema de automação da empresa(Ex.: equipamento POS); - /// - public enum TipoIntegracaoPagamento - { - /// - /// 1 - Pagamento integrado com o sistema de automação da empresa(Ex.: equipamento TEF, Comércio Eletrônico) - /// - [Description("Pagamento integrado com o sistema de automação da empresa(Ex.: equipamento TEF, Comércio Eletrônico)")] - [XmlEnum("1")] - TipIntegradoAutomacao = 1, - - /// - /// 2 - Pagamento não integrado com o sistema de automação da empresa(Ex.: equipamento POS) - /// - [Description("Pagamento não integrado com o sistema de automação da empresa(Ex.: equipamento POS)")] - [XmlEnum("2")] - TipNaoIntegrado = 2 - } -} diff --git a/Shared.NFe.Classes/Informacoes/infNFe.cs b/Shared.NFe.Classes/Informacoes/infNFe.cs deleted file mode 100644 index 5d3b269c0..000000000 --- a/Shared.NFe.Classes/Informacoes/infNFe.cs +++ /dev/null @@ -1,163 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Collections.Generic; -using System.Xml.Serialization; -using NFe.Classes.Informacoes.Cana; -using NFe.Classes.Informacoes.Cobranca; -using NFe.Classes.Informacoes.Destinatario; -using NFe.Classes.Informacoes.Detalhe; -using NFe.Classes.Informacoes.Emitente; -using NFe.Classes.Informacoes.Identificacao; -using NFe.Classes.Informacoes.Observacoes; -using NFe.Classes.Informacoes.Pagamento; -using NFe.Classes.Informacoes.Total; -using NFe.Classes.Informacoes.Transporte; -using Shared.NFe.Classes.Informacoes.InfRespTec; -using Shared.NFe.Classes.Informacoes.Intermediador; - -namespace NFe.Classes.Informacoes -{ - public class infNFe - { - public infNFe() - { - det = new List(); - } - - /// - /// A02 - Versão do leiaute da NFe (2.0, 3.1, etc) - /// - [XmlAttribute] - public string versao { get; set; } - - /// - /// A03 - Identificador da TAG a ser assinada - /// informar a chave de acesso da NF-e precedida do literal "NFe", acrescentada a validação do formato (v2.0). - /// - [XmlAttribute] - public string Id { get; set; } - - /// - /// B01 - Identificação da NF-e - /// - public ide ide { get; set; } - - /// - /// C01 - Grupo de identificação do emitente da NF-e - /// - public emit emit { get; set; } - - /// - /// D01 - Informações do fisco emitente (uso exclusivo do fisco) - /// - public avulsa avulsa { get; set; } - - /// - /// E01 - Grupo de identificação do Destinatário da NF-e - /// - public dest dest { get; set; } - - /// - /// F01 - Identificação do Local de retirada - /// - public retirada retirada { get; set; } - - /// - /// G01 - Identificação do Local de entrega - /// - public entrega entrega { get; set; } - - /// - /// GA01 - Pessoas autorizadas a acessar o XML da NF-e - /// Ocorrência: 0-10 - /// - [XmlElement("autXML")] - public List autXML { get; set; } - - /// - /// H01 - Dados dos detalhes da NF-e - /// Ocorrência: 1-990 - /// - [XmlElement("det")] - public List det { get; set; } - - /// - /// W01 - Grupo Totais da NF-e - /// - public total total { get; set; } - - /// - /// X01 - Grupo Informações do Transporte - /// - public transp transp { get; set; } - - /// - /// Y01 - Grupo Cobrança - /// - public cobr cobr { get; set; } - - /// - /// YA01 - Grupo de Formas de Pagamento - /// Ocorrência: 0-100 - /// - [XmlElement("pag")] - public List pag { get; set; } - - /// - /// YB01 - Grupo de Informações do Intermediador da Transação - /// - public infIntermed infIntermed { get; set; } - - /// - /// Z01 - Grupo de Informações Adicionais - /// - public infAdic infAdic { get; set; } - - /// - /// ZA01 - Grupo Exportação - /// - public exporta exporta { get; set; } - - /// - /// ZB01 - Grupo Compra - /// - public compra compra { get; set; } - - /// - /// ZC01 - Grupo Cana - /// - public cana cana { get; set; } - - public infRespTec infRespTec { get; set; } - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs b/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs deleted file mode 100644 index fabfd01a9..000000000 --- a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/detEvento.cs +++ /dev/null @@ -1,177 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using DFe.Classes.Entidades; -using DFe.Utils; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using NFe.Classes.Servicos.Evento; -using Shared.NFe.Classes.Servicos.Evento; - -using System; -using System.Collections.Generic; -using System.Xml.Serialization; - -namespace NFe.Classes.Servicos.DistribuicaoDFe.Schemas -{ - [Serializable()] - [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] - public class detEvento - { - /// - /// HP18 - Versão do Pedido de Cancelamento, da carta de correção ou EPEC, deve ser informado com a mesma informação da - /// tag verEvento (HP16) - /// - [XmlAttribute] - public string versao { get; set; } - - /// - /// HP19 - "Cancelamento", "Carta de Correção", "Carta de Correcao" ou "EPEC" - /// - public string descEvento { get; set; } - - #region Carta de Correção - - /// - /// HP20 - Correção a ser considerada, texto livre. A correção mais recente substitui as anteriores. - /// - public string xCorrecao { get; set; } - - /// - /// HP20a - Condições de uso da Carta de Correção - /// - public string xCondUso { get; set; } - - #endregion - - #region EPEC - - /// - /// P20 - Código do Órgão do Autor do Evento. - /// Nota: Informar o código da UF do Emitente para este evento. - /// - public Estado? cOrgaoAutor { get; set; } - - /// - /// P21 - Informar "1=Empresa Emitente" para este evento. - /// Nota: 1=Empresa Emitente; 2=Empresa Destinatária; - /// 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos. - /// - public TipoAutor? tpAutor { get; set; } - - /// - /// P22 - Versão do aplicativo do Autor do Evento. - /// - public string verAplic { get; set; } - - /// - /// P23 - Data e hora - /// - [XmlIgnore] - public DateTimeOffset? dhEmi { get; set; } - - /// - /// Proxy para dhEmi no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) - /// - [XmlElement(ElementName = "dhEmi")] - public string ProxyDhEmi - { - get { return dhEmi.ParaDataHoraStringUtc(); } - set { dhEmi = DateTimeOffset.Parse(value); } - } - - /// - /// P24 - 0=Entrada; 1=Saída; - /// - public TipoNFe? tpNF { get; set; } - - /// - /// P25 - IE do Emitente - /// - public string IE { get; set; } - - /// - /// P26 - /// - public dest dest { get; set; } - - public bool ShouldSerializecOrgaoAutor() - { - return cOrgaoAutor.HasValue; - } - - public bool ShouldSerializetpAutor() - { - return tpAutor.HasValue; - } - - public bool ShouldSerializetpNF() - { - return tpNF.HasValue; - } - - #endregion - - #region Cancelamento - - /// - /// HP20 - Informar o número do Protocolo de Autorização da NF-e a ser Cancelada. - /// - public string nProt { get; set; } - - /// - /// HP21 - Informar a justificativa do cancelamento - /// - public string xJust { get; set; } - - #endregion - - #region Cancelamento por substituição - - /// - /// P31 - Chave de acesso da NF-e substituta da NF-e a ser cancelada - /// - public string chNFeRef { get; set; } - - #endregion - - #region Averbação para Exportação - [XmlElement("itensAverbados")] - public List ItensAverbados { get; set; } - - public bool ShouldSerializeItensAverbados() - { - return ItensAverbados != null; - } - #endregion - } -} diff --git a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/infProt.cs b/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/infProt.cs deleted file mode 100644 index ef9b9c3e7..000000000 --- a/Shared.NFe.Classes/Servicos/DistribuicaoDFe/Schemas/infProt.cs +++ /dev/null @@ -1,76 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using DFe.Utils; -using System; -using System.ComponentModel; -using System.Xml.Serialization; - -namespace NFe.Classes.Servicos.DistribuicaoDFe.Schemas -{ - [Serializable()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "http://www.portalfiscal.inf.br/nfe")] - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe", IsNullable = false)] - public class infProt - { - - public byte tpAmb { get; set; } - - public string verAplic { get; set; } - - [XmlElement(DataType = "integer")] - public string chNFe { get; set; } - - [XmlIgnore] - public DateTimeOffset dhRecbto { get; set; } - - [XmlElement(ElementName = "dhRecbto")] - public string ProxyDhRecbto - { - get { return dhRecbto.ParaDataHoraStringUtc(); } - set { dhRecbto = DateTimeOffset.Parse(value); } - } - - public ulong nProt { get; set; } - - public string digVal { get; set; } - - public int cStat { get; set; } - - public string xMotivo { get; set; } - - [XmlAttribute()] - public string Id { get; set; } - } -} diff --git a/Shared.NFe.Classes/Servicos/Evento/detEvento.cs b/Shared.NFe.Classes/Servicos/Evento/detEvento.cs deleted file mode 100644 index d6e948bcd..000000000 --- a/Shared.NFe.Classes/Servicos/Evento/detEvento.cs +++ /dev/null @@ -1,173 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System; -using System.Collections.Generic; -using System.Xml.Serialization; -using DFe.Classes.Entidades; -using DFe.Utils; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using Shared.NFe.Classes.Servicos.Evento; - -namespace NFe.Classes.Servicos.Evento -{ - public class detEvento - { - /// - /// HP18 - Versão do Pedido de Cancelamento, da carta de correção ou EPEC, deve ser informado com a mesma informação da - /// tag verEvento (HP16) - /// - [XmlAttribute] - public string versao { get; set; } - - /// - /// HP19 - "Cancelamento", "Carta de Correção", "Carta de Correcao" ou "EPEC" - /// - public string descEvento { get; set; } - - #region Carta de Correção - - /// - /// HP20 - Correção a ser considerada, texto livre. A correção mais recente substitui as anteriores. - /// - public string xCorrecao { get; set; } - - /// - /// HP20a - Condições de uso da Carta de Correção - /// - public string xCondUso { get; set; } - - #endregion - - #region EPEC - - /// - /// P20 - Código do Órgão do Autor do Evento. - /// Nota: Informar o código da UF do Emitente para este evento. - /// - public Estado? cOrgaoAutor { get; set; } - - /// - /// P21 - Informar "1=Empresa Emitente" para este evento. - /// Nota: 1=Empresa Emitente; 2=Empresa Destinatária; - /// 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos. - /// - public TipoAutor? tpAutor { get; set; } - - /// - /// P22 - Versão do aplicativo do Autor do Evento. - /// - public string verAplic { get; set; } - - /// - /// P23 - Data e hora - /// - [XmlIgnore] - public DateTimeOffset? dhEmi { get; set; } - - /// - /// Proxy para dhEmi no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) - /// - [XmlElement(ElementName = "dhEmi")] - public string ProxyDhEmi - { - get { return dhEmi.ParaDataHoraStringUtc(); } - set { dhEmi = DateTimeOffset.Parse(value); } - } - - /// - /// P24 - 0=Entrada; 1=Saída; - /// - public TipoNFe? tpNF { get; set; } - - /// - /// P25 - IE do Emitente - /// - public string IE { get; set; } - - /// - /// P26 - /// - public dest dest { get; set; } - - public bool ShouldSerializecOrgaoAutor() - { - return cOrgaoAutor.HasValue; - } - - public bool ShouldSerializetpAutor() - { - return tpAutor.HasValue; - } - - public bool ShouldSerializetpNF() - { - return tpNF.HasValue; - } - - #endregion - - #region Cancelamento - - /// - /// HP20 - Informar o número do Protocolo de Autorização da NF-e a ser Cancelada. - /// - public string nProt { get; set; } - - /// - /// HP21 - Informar a justificativa do cancelamento - /// - public string xJust { get; set; } - - #endregion - - #region Cancelamento por substituição - - /// - /// P31 - Chave de acesso da NF-e substituta da NF-e a ser cancelada - /// - public string chNFeRef { get; set; } - - #endregion - - #region Averbação para Exportação - [XmlElement("itensAverbados")] - public List ItensAverbados { get; set; } - - public bool ShouldSerializeItensAverbados() - { - return ItensAverbados != null; - } - #endregion - - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Servicos/Evento/detEventoTipos.cs b/Shared.NFe.Classes/Servicos/Evento/detEventoTipos.cs deleted file mode 100644 index ba190a858..000000000 --- a/Shared.NFe.Classes/Servicos/Evento/detEventoTipos.cs +++ /dev/null @@ -1,92 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.ComponentModel; -using System.Xml.Serialization; - -namespace NFe.Classes.Servicos.Evento -{ - /// - /// Informar "1 - Empresa Emitente" para este evento. - /// Nota: - /// 1 - Empresa Emitente; - /// 2 - Empresa Destinatária; - /// 3 - Empresa; - /// 5 - Fisco; - /// 6 - RFB; - /// 9 - Outros Órgãos. - /// - public enum TipoAutor - { - /// - /// 1 - Empresa Emitente - /// - [Description("Empresa Emitente")] - [XmlEnum("1")] - taEmpresaEmitente = 1, - - /// - /// 2 - Empresa Destinatária - /// - [Description("Empresa Destinatária")] - [XmlEnum("2")] - taEmpresaDestinataria = 2, - - /// - /// 3 - Empresa - /// - [Description("Empresa")] - [XmlEnum("3")] - taEmpresa = 3, - - /// - /// 5 - Fisco - /// - [Description("Fisco")] - [XmlEnum("5")] - taFisco = 5, - - /// - /// 6 - RFB - /// - [Description("RFB")] - [XmlEnum("6")] - taRFB = 6, - - /// - /// 9 - Outros Órgãos - /// - [Description("Outros Órgãos")] - [XmlEnum("9")] - taOutrosOrgaos = 9 - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Servicos/Evento/itensAverbados.cs b/Shared.NFe.Classes/Servicos/Evento/itensAverbados.cs deleted file mode 100644 index 8af3be283..000000000 --- a/Shared.NFe.Classes/Servicos/Evento/itensAverbados.cs +++ /dev/null @@ -1,68 +0,0 @@ -using DFe.Utils; -using System; -using System.Xml.Serialization; - -namespace Shared.NFe.Classes.Servicos.Evento -{ - public sealed class itensAverbados - { - /// - /// Data do Embarque no formato AAAA-MM-DDThh:mm:ssTZD - /// - [XmlIgnore] - public DateTimeOffset DhEmbarque { get; set; } - - [XmlElement(ElementName = "dhEmbarque")] - public string ProxyDhEmbarque - { - get { return DhEmbarque.ParaDataHoraStringUtc(); } - set { DhEmbarque = DateTimeOffset.Parse(value); } - } - - /// - /// Proxy Data da averbação no formato AAAA-MM-DDThh:mm:ssTZD - /// - [XmlIgnore] - public DateTimeOffset DhAverbacao { get; set; } - - [XmlElement(ElementName = "dhAverbacao")] - public string ProxyDhAverbacao - { - get { return DhAverbacao.ParaDataHoraStringUtc(); } - set { DhAverbacao = DateTimeOffset.Parse(value); } - } - - /// - /// Número Identificador da Declaração Única do Comércio Exterior associada - [0-9]{2}BR[0-9]{10} - /// - [XmlElement(ElementName = "nDue")] - public string NDue { get; set; } - - /// - /// Número do item da NF-e averbada - [0-9]{1,3} - /// - [XmlElement(ElementName = "nItem")] - public string NItem { get; set; } - - /// - /// Informação do número do item na Declaração de Exportação associada a averbação. - [0-9]{1,4} - /// - [XmlElement(ElementName = "nItemDue")] - public string NItemDue { get; set; } - - /// - /// Quantidade averbada do item na unidade tributária (campo uTrib) - TDec_1104Neg - /// - [XmlElement(ElementName = "qItem")] - public decimal QItem { get; set; } - - /// - /// Motivo da Alteração - /// 1 - Exportação Averbada; - /// 2 - Retificação da Quantidade Averbada; - /// 3 - Cancelamento da Exportação; - /// - [XmlElement(ElementName = "motAlteracao")] - public int MotAlteracao { get; set; } - } -} diff --git a/Shared.NFe.Classes/Servicos/Status/retConsStatServ.cs b/Shared.NFe.Classes/Servicos/Status/retConsStatServ.cs deleted file mode 100644 index 2c4edc57b..000000000 --- a/Shared.NFe.Classes/Servicos/Status/retConsStatServ.cs +++ /dev/null @@ -1,74 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System.Xml.Serialization; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; - -namespace NFe.Classes.Servicos.Status -{ - [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe")] - public class retConsStatServ : IRetornoServico - { - /// - /// FR02 - Versão do leiaute - /// - [XmlAttribute] - public string versao { get; set; } - - /// - /// FR03 - Identificação do Ambiente: 1 – Produção / 2 - Homologação - /// - public TipoAmbiente tpAmb { get; set; } - - /// - /// FR04 - Versão do Aplicativo que processou a consulta. A versão deve ser iniciada com a sigla da UF nos casos de WS - /// próprio ou a sigla SCAN, SVAN ou SVRS nos demais casos. - /// - public string verAplic { get; set; } - - /// - /// FR05 - Código do status da resposta. - /// - public int cStat { get; set; } - - /// - /// FR06 - Descrição literal do status da resposta. - /// - public string xMotivo { get; set; } - - /// - /// FR07 - Código da UF que atendeu a solicitação - /// - public Estado cUF { get; set; } - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs b/Shared.NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs deleted file mode 100644 index bf6c92fa5..000000000 --- a/Shared.NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs +++ /dev/null @@ -1,246 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System.Collections.Generic; -using System.ComponentModel; -using System.Xml.Serialization; - -namespace NFe.Classes.Servicos.Tipos -{ - public enum ServicoNFe - { - /// - /// serviço destinado à recepção de mensagem do Evento de Cancelamento da NF-e - /// - RecepcaoEventoCancelmento, - - /// - /// serviço destinado à recepção de mensagem do Evento de Carta de Correção da NF-e - /// - RecepcaoEventoCartaCorrecao, - - /// - /// serviço destinado à recepção de mensagem do Evento EPEC da NF-e - /// - RecepcaoEventoEpec, - - /// - /// serviço destinado à recepção de mensagem do Evento de Manifestação do destinatário da NF-e - /// - RecepcaoEventoManifestacaoDestinatario, - - /// - /// serviço destinado à recepção de mensagens de lote de NF-e versão 2.0 - /// - NfeRecepcao, - - /// - /// serviço destinado a retornar o resultado do processamento do lote de NF-e versão 2.0 - /// - NfeRetRecepcao, - - /// - /// Serviço para consultar o cadastro de contribuintes do ICMS da unidade federada - /// - NfeConsultaCadastro, - - /// - /// serviço destinado ao atendimento de solicitações de inutilização de numeração - /// - NfeInutilizacao, - - /// - /// serviço destinado ao atendimento de solicitações de consulta da situação atual da NF-e - /// na Base de Dados do Portal da Secretaria de Fazenda Estadual - /// - NfeConsultaProtocolo, - - /// - /// serviço destinado à consulta do status do serviço prestado pelo Portal da Secretaria de Fazenda Estadual - /// - NfeStatusServico, - - /// - /// serviço destinado à recepção de mensagens de lote de NF-e versão 3.10 - /// - NFeAutorizacao, - - /// - /// serviço destinado a retornar o resultado do processamento do lote de NF-e versão 3.10 - /// - NFeRetAutorizacao, - - /// - /// Distribui documentos e informações de interesse do ator da NF-e - /// - NFeDistribuicaoDFe, - - /// - /// “Serviço de Consulta da Relação de Documentos Destinados” para um determinado CNPJ - /// de destinatário informado na NF-e. - /// - NfeConsultaDest, - - /// - /// Serviço destinado ao atendimento de solicitações de download de Notas Fiscais Eletrônicas por seus destinatários - /// - NfeDownloadNF, - - /// - /// Serviço destinado a administração do CSC. - /// - NfceAdministracaoCSC - } - - /// - /// Indicador de Sincronização: - /// 0 - Assíncrono. A resposta deve ser obtida consultando o serviço NFeRetAutorizacao, com o nº do recibo - /// 1 - Síncrono. Empresa solicita processamento síncrono do Lote de NF-e (sem a geração de Recibo para consulta futura); - /// - public enum IndicadorSincronizacao - { - /// - /// 0 - Assíncrono. A resposta deve ser obtida consultando o serviço NFeRetAutorizacao, com o nº do recibo - /// - [Description("Assíncrono. A resposta deve ser obtida consultando o serviço NFeRetAutorizacao, com o nº do recibo")] - [XmlEnum("0")] - Assincrono = 0, - - /// - /// 1 - Síncrono. Empresa solicita processamento síncrono do Lote de NF-e (sem a geração de Recibo para consulta futura) - /// - [Description("Síncrono. Empresa solicita processamento síncrono do Lote de NF-e (sem a geração de Recibo para consulta futura)")] - [XmlEnum("1")] - Sincrono = 1 - } - - /// - /// Código do Tipo do Evento. - /// 110110 - Carta de Correção - /// 110140 - EPEC - /// 110111 - Cancelamento - /// 110112 - Cancelamento por substituição - /// 210200 – Confirmação da Operação - /// 210210 – Ciência da Emissão - /// 210220 – Desconhecimento da Operação - /// 210240 – Operação não Realizada - /// - public enum NFeTipoEvento - { - /// - /// 110110 - Carta de Correção - /// - [Description("Carta de Correção")] - [XmlEnum("110110")] - TeNfeCartaCorrecao = 110110, - - /// - /// 110140 - EPEC - /// - [Description("EPEC")] - [XmlEnum("110140")] - TeNfceEpec = 110140, - - /// - /// 110111 - Cancelamento - /// - [Description("Cancelamento")] - [XmlEnum("110111")] - TeNfeCancelamento = 110111, - - /// - /// 110112 - Cancelamento por substituição - /// - [Description("Cancelamento por substituicao")] - [XmlEnum("110112")] - TeNfeCancelamentoSubstituicao = 110112, - - /// - /// 210200 – Confirmação da Operação - /// - [Description("Confirmacao da Operacao")] - [XmlEnum("210200")] - TeMdConfirmacaoDaOperacao = 210200, - - /// - /// 210210 – Ciência da Operação - /// - [Description("Ciencia da Operacao")] - [XmlEnum("210210")] - TeMdCienciaDaOperacao = 210210, - - /// - /// 210220 – Desconhecimento da Operação - /// - [Description("Desconhecimento da Operacao")] - [XmlEnum("210220")] - TeMdDesconhecimentoDaOperacao = 210220, - - /// - /// 210240 – Operação não Realizada - /// - [Description("Operacao nao Realizada")] - [XmlEnum("210240")] - TeMdOperacaoNaoRealizada = 210240, - - /// - /// 790700 – Averbação para Exportação - /// - [Description("Averbação para Exportação")] - [XmlEnum("790700")] - TeMdAverbacaoparaExportacao = 790700 - } - - /// - /// Classe com métodos para tratamento do enum - /// - public class NFeTipoEventoUtils - { - /// - /// Devolve a lista de enums do tipo que são utilizados para manifestação do destinatário/> - /// - public static ISet NFeTipoEventoManifestacaoDestinatario = new HashSet() - { - NFeTipoEvento.TeMdConfirmacaoDaOperacao, NFeTipoEvento.TeMdCienciaDaOperacao, - NFeTipoEvento.TeMdDesconhecimentoDaOperacao, NFeTipoEvento.TeMdOperacaoNaoRealizada - }; - - /// - /// Devolve a lista de enums do tipo que são utilizados para cancelamento/> - /// - public static ISet NFeTipoEventoCancelamento = new HashSet() - { - NFeTipoEvento.TeNfeCancelamento, NFeTipoEvento.TeNfeCancelamentoSubstituicao - }; - } -} \ No newline at end of file diff --git a/Shared.NFe.Classes/Shared.NFe.Classes.projitems b/Shared.NFe.Classes/Shared.NFe.Classes.projitems deleted file mode 100644 index 6d4f17a41..000000000 --- a/Shared.NFe.Classes/Shared.NFe.Classes.projitems +++ /dev/null @@ -1,193 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 4cc78350-9e01-465a-ac60-e31a53cefe24 - - - Shared.NFe.Classes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.NFe.Classes/Shared.NFe.Classes.shproj b/Shared.NFe.Classes/Shared.NFe.Classes.shproj deleted file mode 100644 index 0f2c73136..000000000 --- a/Shared.NFe.Classes/Shared.NFe.Classes.shproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - 4cc78350-9e01-465a-ac60-e31a53cefe24 - 14.0 - SAK - SAK - SAK - SAK - - - - - - - - \ No newline at end of file diff --git a/Shared.NFe.Classes/Valor.cs b/Shared.NFe.Classes/Valor.cs deleted file mode 100644 index 27c5869ef..000000000 --- a/Shared.NFe.Classes/Valor.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Globalization; - -namespace NFe.Classes -{ - public static class Valor - { - public static decimal Arredondar(this decimal valor, int casasDecimais) - { - var valorNovo = decimal.Round(valor, casasDecimais, MidpointRounding.AwayFromZero); - var valorNovoStr = valorNovo.ToString("F" + casasDecimais, CultureInfo.CurrentCulture); - return decimal.Parse(valorNovoStr); - } - - public static decimal? Arredondar(this decimal? valor, int casasDecimais) - { - if (valor == null) return null; - return Arredondar(valor.Value, casasDecimais); - } - - public static decimal ArredondarParaBaixo(this decimal valor, int casasDecimais) - { - var divisor = (decimal)Math.Pow(10, casasDecimais); - var dividendo = (long)Math.Truncate(divisor * valor); - return dividendo / divisor; - } - } -} diff --git a/Shared.NFe.Danfe.Base/IDanfe.cs b/Shared.NFe.Danfe.Base/IDanfe.cs deleted file mode 100644 index 9c725be89..000000000 --- a/Shared.NFe.Danfe.Base/IDanfe.cs +++ /dev/null @@ -1,55 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System.IO; - -namespace NFe.Danfe.Base -{ - public interface IDanfe - { - /// - /// Envia a impressão do DANFE da NFCe diretamente para a impressora - /// - /// Se true exibe o diálogo Imprimindo... - /// Passe a string com o nome da impressora para imprimir diretamente em determinada impressora. Caso contrário, a impressão será feita na impressora que estiver como padrão - void Imprimir(bool exibirDialogo = true, string impressora = ""); - - /// - /// Converte o DANFE para PDF e salva-o no caminho/arquivo indicado - /// - /// Caminho/arquivo onde deve ser salvo o PDF do DANFE - void ExportarPdf(string arquivo); - - void ExportarPdf(Stream outputStream); - } -} \ No newline at end of file diff --git a/Shared.NFe.Danfe.Base/IDanfeBasico.cs b/Shared.NFe.Danfe.Base/IDanfeBasico.cs deleted file mode 100644 index b497465f7..000000000 --- a/Shared.NFe.Danfe.Base/IDanfeBasico.cs +++ /dev/null @@ -1,39 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -namespace Shared.NFe.Danfe.Base -{ - public interface IDanfeBasico - { - } -} diff --git a/Shared.NFe.Danfe.Base/Shared.NFe.Danfe.Base.projitems b/Shared.NFe.Danfe.Base/Shared.NFe.Danfe.Base.projitems deleted file mode 100644 index f63eaa0e9..000000000 --- a/Shared.NFe.Danfe.Base/Shared.NFe.Danfe.Base.projitems +++ /dev/null @@ -1,27 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 7bc87af1-49fc-4822-addf-6b9b461b0adc - - - Shared.NFe.Danfe.Base - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.NFe.Danfe.Base/Shared.NFe.Danfe.Base.shproj b/Shared.NFe.Danfe.Base/Shared.NFe.Danfe.Base.shproj deleted file mode 100644 index d3b57d42f..000000000 --- a/Shared.NFe.Danfe.Base/Shared.NFe.Danfe.Base.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - 7bc87af1-49fc-4822-addf-6b9b461b0adc - 14.0 - - - - - - - - diff --git a/Shared.NFe.Danfe.Fast/DanfeSharedHelper.cs b/Shared.NFe.Danfe.Fast/DanfeSharedHelper.cs deleted file mode 100644 index daa85794d..000000000 --- a/Shared.NFe.Danfe.Fast/DanfeSharedHelper.cs +++ /dev/null @@ -1,244 +0,0 @@ -using DFe.Classes.Flags; -using FastReport; -using FastReport.Barcode; -using NFe.Classes; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using NFe.Classes.Servicos.Consulta; -using NFe.Danfe.Base.NFCe; -using NFe.Danfe.Base.NFe; -using NFe.Utils; -using NFe.Utils.InformacoesSuplementares; -using System; -using System.IO; -using System.Text.RegularExpressions; - -namespace Shared.DFe.Danfe.Fast -{ - public static class DanfeSharedHelper - { - public static Report GenerateDanfeNfceReport(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, byte[] frx, string arquivoRelatorio, string textoRodape = "") - { - //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) - - Report relatorio = new Report(); - relatorio.RegisterData(new[] { proc }, "NFCe", 20); - relatorio.GetDataSource("NFCe").Enabled = true; - - if (string.IsNullOrEmpty(arquivoRelatorio)) - { - relatorio.Load(new MemoryStream(frx)); - } - else - { - relatorio.Load(arquivoRelatorio); - } - - relatorio.SetParameterValue("NfceDetalheVendaNormal", configuracaoDanfeNfce.DetalheVendaNormal); - relatorio.SetParameterValue("NfceDetalheVendaContigencia", configuracaoDanfeNfce.DetalheVendaContigencia); - relatorio.SetParameterValue("NfceImprimeDescontoItem", configuracaoDanfeNfce.ImprimeDescontoItem); - relatorio.SetParameterValue("NfceImprimeFoneEmitente", configuracaoDanfeNfce.ImprimeFoneEmitente); - - string foneEmitente = null; - - if (proc.NFe.infNFe.emit.enderEmit.fone != null) - { - foneEmitente = proc.NFe.infNFe.emit.enderEmit.fone.ToString(); - } - - if (foneEmitente != null && foneEmitente.Length == 10) - foneEmitente = string.Format("{0:(00)0000-0000}", Convert.ToInt64(foneEmitente)); - else if (foneEmitente != null && foneEmitente.Length == 11) - foneEmitente = string.Format("{0:(00)00000-0000}", Convert.ToInt64(foneEmitente)); - - relatorio.SetParameterValue("NfceFoneEmitente", foneEmitente); - relatorio.SetParameterValue("NfceModoImpressao", configuracaoDanfeNfce.ModoImpressao); - relatorio.SetParameterValue("NfceCancelado", configuracaoDanfeNfce.DocumentoCancelado); - relatorio.SetParameterValue("NfceLayoutQrCode", configuracaoDanfeNfce.NfceLayoutQrCode); - relatorio.SetParameterValue("TextoRodape", textoRodape); - ((ReportPage)relatorio.FindObject("PgNfce")).LeftMargin = configuracaoDanfeNfce.MargemEsquerda; - ((ReportPage)relatorio.FindObject("PgNfce")).RightMargin = configuracaoDanfeNfce.MargemDireita; - - //alteracao necessaria para .netstandard, o código abaixo utiliza um método onde não é compativel para .netstandard: - //de : //((PictureObject)relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfce.ObterLogo(); - //para: -#if Standard - ((PictureObject)relatorio.FindObject("poEmitLogo")).SetImageData(configuracaoDanfeNfce.Logomarca); -#else - ((PictureObject)relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfce.ObterLogo(); -#endif - - ((TextObject)relatorio.FindObject("txtUrl")).Text = string.IsNullOrEmpty(proc.NFe.infNFeSupl.urlChave) ? proc.NFe.infNFeSupl.ObterUrlConsulta(proc.NFe, configuracaoDanfeNfce.VersaoQrCode) : proc.NFe.infNFeSupl.urlChave; - ((BarcodeObject)relatorio.FindObject("bcoQrCode")).Text = proc.NFe.infNFeSupl == null ? proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, configuracaoDanfeNfce.VersaoQrCode, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode; - ((BarcodeObject)relatorio.FindObject("bcoQrCodeLateral")).Text = proc.NFe.infNFeSupl == null ? proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, configuracaoDanfeNfce.VersaoQrCode, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode; - - //Segundo o Manual de Padrões Técnicos do DANFE - NFC - e e QR Code, versão 3.2, página 9, nos casos de emissão em contingência deve ser impresso uma segunda cópia como via do estabelecimento - if (configuracaoDanfeNfce.SegundaViaContingencia) - { -#if Standard - throw new Exception("configuracaoDanfeNfce.SegundaViaContingencia não suportado em .net standard, apenas em .net framework"); - -#else - relatorio.PrintSettings.Copies = (proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teNormal | (proc.protNFe != null && proc.protNFe.infProt != null && NfeSituacao.Autorizada(proc.protNFe.infProt.cStat)) - /*Se a NFe for autorizada, mesmo que seja em contingência, imprime somente uma via*/ ) ? 1 : 2; -#endif - } - - return relatorio; - } - - public static Report GenerateDanfeFrEventoReport(nfeProc proc, procEventoNFe procEventoNFe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, byte[] frx, string desenvolvedor) - { - //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) - - Report relatorio = new Report(); - relatorio.Load(new MemoryStream(frx)); - relatorio.RegisterData(new[] { proc }, "NFe", 20); - relatorio.RegisterData(new[] { procEventoNFe }, "procEventoNFe", 20); - relatorio.GetDataSource("NFe").Enabled = true; - relatorio.GetDataSource("procEventoNFe").Enabled = true; - relatorio.SetParameterValue("desenvolvedor", desenvolvedor); - - return relatorio; - } - - public static Report GenerateDanfeFrNfeReport(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, byte[] frx, string desenvolvedor, string arquivoRelatorio) - { - //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) - - Report relatorio = new Report(); - relatorio.RegisterData(new[] { proc }, "NFe", 20); - relatorio.GetDataSource("NFe").Enabled = true; - - if (string.IsNullOrEmpty(arquivoRelatorio)) - { - relatorio.Load(new MemoryStream(frx)); - } - else - { - relatorio.Load(arquivoRelatorio); - } - - string mensagem = string.Empty; - string resumoCanhoto = string.Empty; - string contingenciaDescricao = string.Empty; - string contingenciaValor = string.Empty; - string consultaAutenticidade = "Consulta de autenticidade no portal nacional da NF-e" + Environment.NewLine + - "www.nfe.fazenda.gov.br/portal ou no site da Sefaz autorizadora"; - - if (configuracaoDanfeNfe.ExibirResumoCanhoto) - { - resumoCanhoto = string.IsNullOrEmpty(configuracaoDanfeNfe.ResumoCanhoto) ? - string.Format("Emissão: {0: dd/MM/yyyy} Dest/Reme: {1} Valor Total: {2:C}", proc.NFe.infNFe.ide.dhEmi, - proc.NFe.infNFe.dest.xNome, proc.NFe.infNFe.total.ICMSTot.vNF) : - configuracaoDanfeNfe.ResumoCanhoto; - } - - if (proc.NFe.infNFe.ide.tpAmb == TipoAmbiente.Homologacao) - { - if (proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teSCAN || - proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teEPEC || - proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teFSDA || - proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teFSIA) - { - if (proc.protNFe != null && proc.protNFe.infProt != null && - (proc.protNFe.infProt.cStat == 101 || - proc.protNFe.infProt.cStat == 135 || - proc.protNFe.infProt.cStat == 151 || - proc.protNFe.infProt.cStat == 155)) - { - mensagem = "NFe sem Valor Fiscal - HOMOLOGAÇÃO" + Environment.NewLine + - "NFe em Contingência - CANCELADA"; - } - else - { - mensagem = "NFe sem Valor Fiscal - HOMOLOGAÇÃO" + Environment.NewLine + - "NFe em Contingência"; - } - } - else - { - mensagem = "NFe sem Valor Fiscal - HOMOLOGAÇÃO"; - } - } - else - { - if (configuracaoDanfeNfe.DocumentoCancelado || - (proc.protNFe != null && proc.protNFe.infProt != null && - !string.IsNullOrEmpty(proc.protNFe.infProt.nProt) && - (proc.protNFe.infProt.cStat == 101 || - proc.protNFe.infProt.cStat == 135 || - proc.protNFe.infProt.cStat == 151 || - proc.protNFe.infProt.cStat == 155))) - { - mensagem = "NFe Cancelada"; - } - else if (proc.protNFe != null && proc.protNFe.infProt != null && - (proc.protNFe.infProt.cStat == 110 || - proc.protNFe.infProt.cStat == 301 || - proc.protNFe.infProt.cStat == 302 || - proc.protNFe.infProt.cStat == 303)) - { - mensagem = "NFe denegada pelo Fisco"; - } - else if (proc.protNFe != null && proc.protNFe.infProt != null && - string.IsNullOrEmpty(proc.protNFe.infProt.nProt)) - { - mensagem = "NFe sem Autorização de Uso da SEFAZ"; - } - } - - switch (proc.NFe.infNFe.ide.tpEmis) - { - case TipoEmissao.teNormal: - case TipoEmissao.teSCAN: - case TipoEmissao.teSVCAN: - case TipoEmissao.teSVCRS: - contingenciaDescricao = "PROTOCOLO DE AUTORIZAÇÃO DE USO"; - contingenciaValor = ((proc.protNFe == null || proc.protNFe.infProt == null || string.IsNullOrEmpty(proc.protNFe.infProt.nProt)) ? "NFe sem Autorização de Uso da SEFAZ" : string.Format("{0} - {1:dd/MM/yyyy HH:mm:ss}", proc.protNFe.infProt.nProt, proc.protNFe.infProt.dhRecbto)); - if (configuracaoDanfeNfe.DocumentoCancelado || (proc.protNFe != null && proc.protNFe.infProt != null && (proc.protNFe.infProt.cStat == 101 || proc.protNFe.infProt.cStat == 151 || proc.protNFe.infProt.cStat == 155))) - { - contingenciaDescricao = "PROTOCOLO DE HOMOLOGAÇÃO DO CANCELAMENTO"; - } - else if (proc.protNFe != null && proc.protNFe.infProt != null && (proc.protNFe.infProt.cStat == 110 || proc.protNFe.infProt.cStat == 301 || proc.protNFe.infProt.cStat == 302 || proc.protNFe.infProt.cStat == 303)) - { - contingenciaDescricao = "PROTOCOLO DE DENEGAÇÃO DE USO"; - } - break; - - case TipoEmissao.teFSIA: - case TipoEmissao.teEPEC: - case TipoEmissao.teFSDA: - contingenciaDescricao = "DADOS DA NF-E"; - contingenciaValor = Regex.Replace(configuracaoDanfeNfe.ChaveContingencia, ".{4}", "$0 "); - consultaAutenticidade = string.Empty; - break; - - default: - contingenciaValor = string.Format("{0} - {1:dd/MM/yyyy HH:mm:ss}", proc.protNFe.infProt.nProt, proc.protNFe.infProt.dhRecbto); - break; - } - - relatorio.SetParameterValue("ResumoCanhoto", resumoCanhoto); - relatorio.SetParameterValue("Mensagem", mensagem); - relatorio.SetParameterValue("ConsultaAutenticidade", consultaAutenticidade); - relatorio.SetParameterValue("ContingenciaDescricao", contingenciaDescricao); - relatorio.SetParameterValue("ContingenciaValor", contingenciaValor); - relatorio.SetParameterValue("ContingenciaID", configuracaoDanfeNfe.ChaveContingencia); - relatorio.SetParameterValue("DuasLinhas", configuracaoDanfeNfe.DuasLinhas); - relatorio.SetParameterValue("Desenvolvedor", desenvolvedor); - relatorio.SetParameterValue("QuebrarLinhasObservacao", configuracaoDanfeNfe.QuebrarLinhasObservacao); - relatorio.SetParameterValue("ImprimirISSQN", configuracaoDanfeNfe.ImprimirISSQN); - relatorio.SetParameterValue("ImprimirDescPorc", configuracaoDanfeNfe.ImprimirDescPorc); - relatorio.SetParameterValue("ImprimirTotalLiquido", configuracaoDanfeNfe.ImprimirTotalLiquido); - relatorio.SetParameterValue("ImprimirUnidQtdeValor", configuracaoDanfeNfe.ImprimirUnidQtdeValor); - relatorio.SetParameterValue("ExibeCampoFatura", configuracaoDanfeNfe.ExibeCampoFatura); - relatorio.SetParameterValue("Logo", configuracaoDanfeNfe.Logomarca); - relatorio.SetParameterValue("ExibirTotalTributos", configuracaoDanfeNfe.ExibirTotalTributos); - relatorio.SetParameterValue("DecimaisValorUnitario", configuracaoDanfeNfe.DecimaisValorUnitario); - relatorio.SetParameterValue("DecimaisQuantidadeItem", configuracaoDanfeNfe.DecimaisQuantidadeItem); - relatorio.SetParameterValue("DataHoraImpressao", configuracaoDanfeNfe.DataHoraImpressao ?? DateTime.Now); - - return relatorio; - } - } -} diff --git a/Shared.NFe.Danfe.Fast/Shared.NFe.Danfe.Fast.projitems b/Shared.NFe.Danfe.Fast/Shared.NFe.Danfe.Fast.projitems deleted file mode 100644 index 6407152af..000000000 --- a/Shared.NFe.Danfe.Fast/Shared.NFe.Danfe.Fast.projitems +++ /dev/null @@ -1,14 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 5794ab8a-ff29-4f55-abc2-9aafe333bd27 - - - Shared.NFe.Danfe.Fast - - - - - \ No newline at end of file diff --git a/Shared.NFe.Danfe.Fast/Shared.NFe.Danfe.Fast.shproj b/Shared.NFe.Danfe.Fast/Shared.NFe.Danfe.Fast.shproj deleted file mode 100644 index 8534ed4a7..000000000 --- a/Shared.NFe.Danfe.Fast/Shared.NFe.Danfe.Fast.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - 5794ab8a-ff29-4f55-abc2-9aafe333bd27 - 14.0 - - - - - - - - diff --git a/Shared.NFe.Danfe/DanfeSharedHelper.cs b/Shared.NFe.Danfe/DanfeSharedHelper.cs new file mode 100644 index 000000000..e17576fe4 --- /dev/null +++ b/Shared.NFe.Danfe/DanfeSharedHelper.cs @@ -0,0 +1,296 @@ +using DFe.Classes.Flags; +using FastReport; +using FastReport.Barcode; +using NFe.Classes; +using NFe.Classes.Informacoes.Identificacao.Tipos; +using NFe.Classes.Servicos.Consulta; +using NFe.Danfe.Base.NFCe; +using NFe.Danfe.Base.NFe; +using NFe.Utils; +using NFe.Utils.InformacoesSuplementares; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Text.RegularExpressions; + +namespace Shared.DFe.Danfe +{ + public static class DanfeSharedHelper + { + public static Report GenerateDanfeNfceReport(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, byte[] frx, string arquivoRelatorio, string textoRodape = "") + { + //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) + + Report relatorio = new Report(); + + if (!string.IsNullOrEmpty(arquivoRelatorio)) + relatorio.Load(arquivoRelatorio); + else if(frx != null && frx.Length > 0) + relatorio.Load(new MemoryStream(frx)); + else + throw new Exception("Erro em DanfeSharedHelper.GenerateDanfeNfceReport no Zeus.DFe. Relatório não encontrado, passe os parametros 'frx' com bytes ou 'arquivoRelatorio' com o caminho do arquivo"); + + relatorio.RegisterData(new[] { proc }, "NFCe", 20); + relatorio.GetDataSource("NFCe").Enabled = true; + relatorio.SetParameterValue("NfceDetalheVendaNormal", configuracaoDanfeNfce.DetalheVendaNormal); + relatorio.SetParameterValue("NfceDetalheVendaContigencia", configuracaoDanfeNfce.DetalheVendaContigencia); + relatorio.SetParameterValue("NfceImprimeDescontoItem", configuracaoDanfeNfce.ImprimeDescontoItem); + relatorio.SetParameterValue("NfceImprimeFoneEmitente", configuracaoDanfeNfce.ImprimeFoneEmitente); + + string foneEmitente = null; + + if (proc.NFe.infNFe.emit.enderEmit.fone != null) + foneEmitente = proc.NFe.infNFe.emit.enderEmit.fone.ToString(); + + if (foneEmitente != null && foneEmitente.Length == 10) + foneEmitente = string.Format("{0:(00)0000-0000}", Convert.ToInt64(foneEmitente)); + else if (foneEmitente != null && foneEmitente.Length == 11) + foneEmitente = string.Format("{0:(00)00000-0000}", Convert.ToInt64(foneEmitente)); + + relatorio.SetParameterValue("NfceFoneEmitente", foneEmitente); + relatorio.SetParameterValue("NfceModoImpressao", configuracaoDanfeNfce.ModoImpressao); + relatorio.SetParameterValue("NfceCancelado", configuracaoDanfeNfce.DocumentoCancelado); + relatorio.SetParameterValue("NfceLayoutQrCode", configuracaoDanfeNfce.NfceLayoutQrCode); + relatorio.SetParameterValue("TextoRodape", textoRodape); + ((ReportPage)relatorio.FindObject("PgNfce")).LeftMargin = configuracaoDanfeNfce.MargemEsquerda; + ((ReportPage)relatorio.FindObject("PgNfce")).RightMargin = configuracaoDanfeNfce.MargemDireita; + + var logomarcaEmitDefinida = configuracaoDanfeNfce.Logomarca != null && configuracaoDanfeNfce.Logomarca.Length > 0; + ((ReportTitleBand)relatorio.FindObject("rtbEmitLogo")).Visible = logomarcaEmitDefinida; + if (logomarcaEmitDefinida) + ((PictureObject)relatorio.FindObject("poEmitLogo")).SetImageData(configuracaoDanfeNfce.Logomarca); + + ((TextObject)relatorio.FindObject("txtUrl")).Text = string.IsNullOrEmpty(proc.NFe.infNFeSupl.urlChave) ? proc.NFe.infNFeSupl.ObterUrlConsulta(proc.NFe, configuracaoDanfeNfce.VersaoQrCode) : proc.NFe.infNFeSupl.urlChave; + ((BarcodeObject)relatorio.FindObject("bcoQrCode")).Text = proc.NFe.infNFeSupl == null ? proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, configuracaoDanfeNfce.VersaoQrCode, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode; + ((BarcodeObject)relatorio.FindObject("bcoQrCodeLateral")).Text = proc.NFe.infNFeSupl == null ? proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, configuracaoDanfeNfce.VersaoQrCode, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode; + + //Segundo o Manual de Padrões Técnicos do DANFE - NFC - e e QR Code, versão 3.2, página 9, nos casos de emissão em contingência deve ser impresso uma segunda cópia como via do estabelecimento + if (configuracaoDanfeNfce.SegundaViaContingencia) + { +#if !openfastreport && !fastskia + /*Se a NFe for autorizada, mesmo que seja em contingência, imprime somente uma via - devendo o usuario enviar 2 copias para a impressora*/ + relatorio.PrintSettings.Copies = (proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teNormal | (proc.protNFe != null && proc.protNFe.infProt != null && NfeSituacao.Autorizada(proc.protNFe.infProt.cStat))/*Se a NFe for autorizada, mesmo que seja em contingência, imprime somente uma via*/ ) ? 1 : 2; +#else + //sem suporte do PrintSettings para o openfastreport + throw new Exception("configuracaoDanfeNfce.SegundaViaContingencia não suportado no OpenFastReport apenas no FastReport"); +#endif + } + + return relatorio; + } + + public static Report GenerateDanfeFrEventoReport(nfeProc proc, procEventoNFe procEventoNFe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, byte[] frx, string desenvolvedor, string arquivoRelatorio) + { + //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) + + Report relatorio = new Report(); + + if (!string.IsNullOrEmpty(arquivoRelatorio)) + relatorio.Load(arquivoRelatorio); + else if (frx != null && frx.Length > 0) + relatorio.Load(new MemoryStream(frx)); + else + throw new Exception("Erro em DanfeSharedHelper.GenerateDanfeFrNfeReport no Zeus.DFe. Relatório não encontrado, passe os parametros 'frx' com bytes ou 'arquivoRelatorio' com o caminho do arquivo"); + + relatorio.RegisterData(new[] { proc }, "NFe", 20); + relatorio.RegisterData(new[] { procEventoNFe }, "procEventoNFe", 20); + relatorio.GetDataSource("NFe").Enabled = true; + relatorio.GetDataSource("procEventoNFe").Enabled = true; + relatorio.SetParameterValue("desenvolvedor", desenvolvedor); + + return relatorio; + } + + public static Report GenerateDanfeFrNfeReport(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, byte[] frx, string desenvolvedor, string arquivoRelatorio) + { + //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) + + Report relatorio = new Report(); + + if (!string.IsNullOrEmpty(arquivoRelatorio)) + relatorio.Load(arquivoRelatorio); + else if (frx != null && frx.Length > 0) + relatorio.Load(new MemoryStream(frx)); + else + throw new Exception("Erro em DanfeSharedHelper.GenerateDanfeFrNfeReport no Zeus.DFe. Relatório não encontrado, passe os parametros 'frx' com bytes ou 'arquivoRelatorio' com o caminho do arquivo"); + + relatorio.RegisterData(new[] { proc }, "NFe", 20); + relatorio.GetDataSource("NFe").Enabled = true; + + ConfigurarParametrosRelatorioNfe(relatorio, proc, configuracaoDanfeNfe, desenvolvedor); + + return relatorio; + } + + public static Report GenerateDanfeFrNfeBatchReport(List procs, ConfiguracaoDanfeNfe configuracaoDanfeNfe, byte[] frx, string desenvolvedor, string arquivoRelatorio) + { + if (procs == null || procs.Count == 0) + throw new ArgumentException("A lista de notas fiscais não pode estar vazia.", nameof(procs)); + + //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) + + Report relatorio = new Report(); + + if (!string.IsNullOrEmpty(arquivoRelatorio)) + relatorio.Load(arquivoRelatorio); + else if (frx != null && frx.Length > 0) + relatorio.Load(new MemoryStream(frx)); + else + throw new Exception("Erro em DanfeSharedHelper.GenerateDanfeFrNfeBatchReport no Zeus.DFe. Relatório não encontrado, passe os parametros 'frx' com bytes ou 'arquivoRelatorio' com o caminho do arquivo"); + + bool primeiroRelatorio = true; + + foreach (var proc in procs) + { + relatorio.RegisterData(new[] { proc }, "NFe", 20); + relatorio.GetDataSource("NFe").Enabled = true; + + ConfigurarParametrosRelatorioNfe(relatorio, proc, configuracaoDanfeNfe, desenvolvedor); + + if (primeiroRelatorio) + { + relatorio.Prepare(); + primeiroRelatorio = false; + } + else + { + relatorio.Prepare(true); + } + } + + return relatorio; + } + + /// + /// Public pois caso voce implemente na mão utilize esse metodo para configurar o relatorio de danfe + /// + /// + /// + /// + /// + public static void ConfigurarParametrosRelatorioNfe(Report relatorio, nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor) + { + string mensagem = string.Empty; + string resumoCanhoto = string.Empty; + string contingenciaDescricao = string.Empty; + string contingenciaValor = string.Empty; + string consultaAutenticidade = "Consulta de autenticidade no portal nacional da NF-e" + Environment.NewLine + + "www.nfe.fazenda.gov.br/portal ou no site da Sefaz autorizadora"; + + if (configuracaoDanfeNfe.ExibirResumoCanhoto) + { + resumoCanhoto = string.IsNullOrEmpty(configuracaoDanfeNfe.ResumoCanhoto) ? + string.Format("Emissão: {0: dd/MM/yyyy} Dest/Reme: {1} Valor Total: {2:C}", proc.NFe.infNFe.ide.dhEmi, + proc.NFe.infNFe.dest.xNome, proc.NFe.infNFe.total.ICMSTot.vNF) : + configuracaoDanfeNfe.ResumoCanhoto; + } + + if (proc.NFe.infNFe.ide.tpAmb == TipoAmbiente.Homologacao) + { + if (proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teSCAN || + proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teEPEC || + proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teFSDA || + proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teFSIA) + { + if (proc.protNFe != null && proc.protNFe.infProt != null && + (proc.protNFe.infProt.cStat == 101 || + proc.protNFe.infProt.cStat == 135 || + proc.protNFe.infProt.cStat == 151 || + proc.protNFe.infProt.cStat == 155)) + { + mensagem = "NFe sem Valor Fiscal - HOMOLOGAÇÃO" + Environment.NewLine + + "NFe em Contingência - CANCELADA"; + } + else + { + mensagem = "NFe sem Valor Fiscal - HOMOLOGAÇÃO" + Environment.NewLine + + "NFe em Contingência"; + } + } + else + { + mensagem = "NFe sem Valor Fiscal - HOMOLOGAÇÃO"; + } + } + else + { + if (configuracaoDanfeNfe.DocumentoCancelado || + (proc.protNFe != null && proc.protNFe.infProt != null && + !string.IsNullOrEmpty(proc.protNFe.infProt.nProt) && + (proc.protNFe.infProt.cStat == 101 || + proc.protNFe.infProt.cStat == 135 || + proc.protNFe.infProt.cStat == 151 || + proc.protNFe.infProt.cStat == 155))) + { + mensagem = "NFe Cancelada"; + } + else if (proc.protNFe != null && proc.protNFe.infProt != null && + (proc.protNFe.infProt.cStat == 110 || + proc.protNFe.infProt.cStat == 301 || + proc.protNFe.infProt.cStat == 302 || + proc.protNFe.infProt.cStat == 303)) + { + mensagem = "NFe denegada pelo Fisco"; + } + else if (proc.protNFe != null && proc.protNFe.infProt != null && + string.IsNullOrEmpty(proc.protNFe.infProt.nProt)) + { + mensagem = "NFe sem Autorização de Uso da SEFAZ"; + } + } + + switch (proc.NFe.infNFe.ide.tpEmis) + { + case TipoEmissao.teNormal: + case TipoEmissao.teSCAN: + case TipoEmissao.teSVCAN: + case TipoEmissao.teSVCRS: + contingenciaDescricao = "PROTOCOLO DE AUTORIZAÇÃO DE USO"; + contingenciaValor = ((proc.protNFe == null || proc.protNFe.infProt == null || string.IsNullOrEmpty(proc.protNFe.infProt.nProt)) ? "NFe sem Autorização de Uso da SEFAZ" : string.Format("{0} - {1:dd/MM/yyyy HH:mm:ss}", proc.protNFe.infProt.nProt, proc.protNFe.infProt.dhRecbto)); + if (configuracaoDanfeNfe.DocumentoCancelado || (proc.protNFe != null && proc.protNFe.infProt != null && (proc.protNFe.infProt.cStat == 101 || proc.protNFe.infProt.cStat == 151 || proc.protNFe.infProt.cStat == 155))) + { + contingenciaDescricao = "PROTOCOLO DE HOMOLOGAÇÃO DO CANCELAMENTO"; + } + else if (proc.protNFe != null && proc.protNFe.infProt != null && (proc.protNFe.infProt.cStat == 110 || proc.protNFe.infProt.cStat == 301 || proc.protNFe.infProt.cStat == 302 || proc.protNFe.infProt.cStat == 303)) + { + contingenciaDescricao = "PROTOCOLO DE DENEGAÇÃO DE USO"; + } + break; + + case TipoEmissao.teFSIA: + case TipoEmissao.teEPEC: + case TipoEmissao.teFSDA: + contingenciaDescricao = "DADOS DA NF-E"; + contingenciaValor = Regex.Replace(configuracaoDanfeNfe.ChaveContingencia, ".{4}", "$0 "); + consultaAutenticidade = string.Empty; + break; + + default: + contingenciaValor = string.Format("{0} - {1:dd/MM/yyyy HH:mm:ss}", proc.protNFe.infProt.nProt, proc.protNFe.infProt.dhRecbto); + break; + } + + relatorio.SetParameterValue("ResumoCanhoto", resumoCanhoto); + relatorio.SetParameterValue("Mensagem", mensagem); + relatorio.SetParameterValue("ConsultaAutenticidade", consultaAutenticidade); + relatorio.SetParameterValue("ContingenciaDescricao", contingenciaDescricao); + relatorio.SetParameterValue("ContingenciaValor", contingenciaValor); + relatorio.SetParameterValue("ContingenciaID", configuracaoDanfeNfe.ChaveContingencia); + relatorio.SetParameterValue("DuasLinhas", configuracaoDanfeNfe.DuasLinhas); + relatorio.SetParameterValue("Desenvolvedor", desenvolvedor); + relatorio.SetParameterValue("QuebrarLinhasObservacao", configuracaoDanfeNfe.QuebrarLinhasObservacao); + relatorio.SetParameterValue("ImprimirISSQN", configuracaoDanfeNfe.ImprimirISSQN); + relatorio.SetParameterValue("ImprimirDescPorc", configuracaoDanfeNfe.ImprimirDescPorc); + relatorio.SetParameterValue("ImprimirTotalLiquido", configuracaoDanfeNfe.ImprimirTotalLiquido); + relatorio.SetParameterValue("ImprimirUnidQtdeValor", configuracaoDanfeNfe.ImprimirUnidQtdeValor); + relatorio.SetParameterValue("ExibeCampoFatura", configuracaoDanfeNfe.ExibeCampoFatura); + relatorio.SetParameterValue("Logo", configuracaoDanfeNfe.Logomarca); + relatorio.SetParameterValue("ExibirTotalTributos", configuracaoDanfeNfe.ExibirTotalTributos); + relatorio.SetParameterValue("ExibeRetencoes", configuracaoDanfeNfe.ExibeRetencoes); + relatorio.SetParameterValue("DecimaisValorUnitario", configuracaoDanfeNfe.DecimaisValorUnitario); + relatorio.SetParameterValue("DecimaisQuantidadeItem", configuracaoDanfeNfe.DecimaisQuantidadeItem); + relatorio.SetParameterValue("DataHoraImpressao", configuracaoDanfeNfe.DataHoraImpressao ?? DateTime.Now); + } + } +} diff --git a/Shared.NFe.Danfe/Shared.NFe.Danfe.projitems b/Shared.NFe.Danfe/Shared.NFe.Danfe.projitems new file mode 100644 index 000000000..8d91e91c7 --- /dev/null +++ b/Shared.NFe.Danfe/Shared.NFe.Danfe.projitems @@ -0,0 +1,14 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 5794ab8a-ff29-4f55-abc2-9aafe333bd27 + + + Shared.NFe.Danfe + + + + + \ No newline at end of file diff --git a/Shared.NFe.Danfe/Shared.NFe.Danfe.shproj b/Shared.NFe.Danfe/Shared.NFe.Danfe.shproj new file mode 100644 index 000000000..12e72b74f --- /dev/null +++ b/Shared.NFe.Danfe/Shared.NFe.Danfe.shproj @@ -0,0 +1,17 @@ + + + + 5794ab8a-ff29-4f55-abc2-9aafe333bd27 + 14.0 + SAK + SAK + SAK + SAK + + + + + + + + \ No newline at end of file diff --git a/Shared.NFe.Servicos/ServicosNFe.cs b/Shared.NFe.Servicos/ServicosNFe.cs deleted file mode 100644 index 7adff7980..000000000 --- a/Shared.NFe.Servicos/ServicosNFe.cs +++ /dev/null @@ -1,1430 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using DFe.Classes.Entidades; -using DFe.Classes.Flags; -using DFe.Utils; -using DFe.Utils.Assinatura; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using NFe.Classes.Servicos.AdmCsc; -using NFe.Classes.Servicos.Autorizacao; -using NFe.Classes.Servicos.Consulta; -using NFe.Classes.Servicos.ConsultaCadastro; -using NFe.Classes.Servicos.DistribuicaoDFe; -using NFe.Classes.Servicos.Download; -using NFe.Classes.Servicos.Evento; -using NFe.Classes.Servicos.Inutilizacao; -using NFe.Classes.Servicos.Recepcao; -using NFe.Classes.Servicos.Recepcao.Retorno; -using NFe.Classes.Servicos.Status; -using NFe.Classes.Servicos.Tipos; -using NFe.Servicos.Retorno; -using NFe.Utils; -using NFe.Utils.AdmCsc; -using NFe.Utils.Autorizacao; -using NFe.Utils.Consulta; -using NFe.Utils.ConsultaCadastro; -using NFe.Utils.DistribuicaoDFe; -using NFe.Utils.Download; -using NFe.Utils.Evento; -using NFe.Utils.Excecoes; -using NFe.Utils.Inutilizacao; -using NFe.Utils.NFe; -using NFe.Utils.Recepcao; -using NFe.Utils.Status; -using NFe.Utils.Validacao; -using NFe.Wsdl; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Security.Cryptography.X509Certificates; -using System.Xml; -using NFe.Classes; -using Shared.DFe.Utils; -using FuncoesXml = DFe.Utils.FuncoesXml; - -namespace NFe.Servicos -{ - public sealed class ServicosNFe : IDisposable - { - private readonly X509Certificate2 _certificado; - private readonly bool _controlarCertificado; - private readonly ConfiguracaoServico _cFgServico; - private readonly string _path; - - /// - /// Cria uma instância da Classe responsável pelos serviços relacionados à NFe - /// - /// - public ServicosNFe(ConfiguracaoServico cFgServico, X509Certificate2 certificado = null) - { - _cFgServico = cFgServico; - _controlarCertificado = certificado == null; - if (_controlarCertificado) - _certificado = CertificadoDigital.ObterCertificado(cFgServico.Certificado); - else - _certificado = certificado; - _path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - - //Define a versão do protocolo de segurança - ServicePointManager.SecurityProtocol = cFgServico.ProtocoloDeSeguranca; - - if (_cFgServico.ValidarCertificadoDoServidor) - ServicePointManager.ServerCertificateValidationCallback = null; - else - ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; - } - - private string SalvarArquivoXml(string nomeArquivo, string xmlString) - { - if (!_cFgServico.SalvarXmlServicos) return null; - var dir = string.IsNullOrEmpty(_cFgServico.DiretorioSalvarXml) ? _path : _cFgServico.DiretorioSalvarXml; - var filename = Path.Combine(dir, nomeArquivo); - var stw = new StreamWriter(filename); - stw.WriteLine(xmlString); - stw.Close(); - return filename; - } - - private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico, bool compactarMensagem) - { - if (servico != ServicoNFe.NFeAutorizacao) - throw new Exception( - string.Format("O serviço {0} não pode ser criado no método {1}!", servico, - MethodBase.GetCurrentMethod().Name)); - - return ServicoNfeFactory.CriaWsdlAutorizacao(_cFgServico, _certificado, compactarMensagem); - } - - private INfeServico CriarServico(ServicoNFe servico) - { - return ServicoNfeFactory.CriaWsdlOutros(servico, _cFgServico, _certificado); - } - - /// - /// Consulta o status do Serviço de NFe - /// - /// Retorna um objeto da classe RetornoNfeStatusServico com os dados status do serviço - public RetornoNfeStatusServico NfeStatusServico() - { - var versaoServico = ServicoNFe.NfeStatusServico.VersaoServicoParaString(_cFgServico.VersaoNfeStatusServico); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NfeStatusServico); - - if (_cFgServico.VersaoNfeStatusServico != VersaoServico.Versao400) - { - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - } - - #endregion - - #region Cria o objeto consStatServ - - var pedStatus = new consStatServ - { - cUF = _cFgServico.cUF, - tpAmb = _cFgServico.tpAmb, - versao = versaoServico - }; - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlStatus = pedStatus.ObterXmlString(); - Validador.Valida(ServicoNFe.NfeStatusServico, _cFgServico.VersaoNfeStatusServico, xmlStatus, cfgServico: _cFgServico); - var dadosStatus = new XmlDocument(); - dadosStatus.LoadXml(xmlStatus); - - SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-ped-sta.xml", xmlStatus); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosStatus); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeStatusServico, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retConsStatServ = new retConsStatServ().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-sta.xml", retornoXmlString); - - return new RetornoNfeStatusServico(pedStatus.ObterXmlString(), retConsStatServ.ObterXmlString(), - retornoXmlString, retConsStatServ); - - #endregion - } - - /// - /// Consulta a Situação da NFe - /// - /// Retorna um objeto da classe RetornoNfeConsultaProtocolo com os dados da Situação da NFe - public RetornoNfeConsultaProtocolo NfeConsultaProtocolo(string chave) - { - var versaoServico = ServicoNFe.NfeConsultaProtocolo.VersaoServicoParaString(_cFgServico.VersaoNfeConsultaProtocolo); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NfeConsultaProtocolo); - - if (_cFgServico.VersaoNfeConsultaProtocolo != VersaoServico.Versao400) - { - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - } - - #endregion - - #region Cria o objeto consSitNFe - - var pedConsulta = new consSitNFe - { - versao = versaoServico, - tpAmb = _cFgServico.tpAmb, - chNFe = chave - }; - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlConsulta = pedConsulta.ObterXmlString(); - Validador.Valida(ServicoNFe.NfeConsultaProtocolo, _cFgServico.VersaoNfeConsultaProtocolo, xmlConsulta, cfgServico: _cFgServico); - var dadosConsulta = new XmlDocument(); - dadosConsulta.LoadXml(xmlConsulta); - - SalvarArquivoXml(chave + "-ped-sit.xml", xmlConsulta); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosConsulta); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeConsultaProtocolo, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retConsulta = new retConsSitNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(chave + "-sit.xml", retornoXmlString); - - return new RetornoNfeConsultaProtocolo(pedConsulta.ObterXmlString(), retConsulta.ObterXmlString(), - retornoXmlString, retConsulta); - - #endregion - } - - /// - /// Inutiliza uma faixa de números - /// - /// - /// - /// - /// - /// - /// - /// - /// Retorna um objeto da classe RetornoNfeInutilizacao com o retorno do serviço NfeInutilizacao - public RetornoNfeInutilizacao NfeInutilizacao(string cnpj, int ano, ModeloDocumento modelo, int serie, - int numeroInicial, int numeroFinal, string justificativa) - { - var versaoServico = ServicoNFe.NfeInutilizacao.VersaoServicoParaString(_cFgServico.VersaoNfeInutilizacao); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NfeInutilizacao); - - if (_cFgServico.VersaoNfeStatusServico != VersaoServico.Versao400) - { - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - } - - #endregion - - #region Cria o objeto inutNFe - - var pedInutilizacao = new inutNFe - { - versao = versaoServico, - infInut = new infInutEnv - { - tpAmb = _cFgServico.tpAmb, - cUF = _cFgServico.cUF, - ano = ano, - CNPJ = cnpj, - mod = modelo, - serie = serie, - nNFIni = numeroInicial, - nNFFin = numeroFinal, - xJust = justificativa - } - }; - - var numId = string.Concat((int)pedInutilizacao.infInut.cUF, pedInutilizacao.infInut.ano.ToString("D2"), - pedInutilizacao.infInut.CNPJ, (int)pedInutilizacao.infInut.mod, - pedInutilizacao.infInut.serie.ToString().PadLeft(3, '0'), - pedInutilizacao.infInut.nNFIni.ToString().PadLeft(9, '0'), - pedInutilizacao.infInut.nNFFin.ToString().PadLeft(9, '0')); - pedInutilizacao.infInut.Id = "ID" + numId; - - pedInutilizacao.Assina(_certificado, _cFgServico.Certificado.SignatureMethodSignedXml, _cFgServico.Certificado.DigestMethodReference, _cFgServico.RemoverAcentos); - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlInutilizacao = _cFgServico.RemoverAcentos - ? pedInutilizacao.ObterXmlString().RemoverAcentos() - : pedInutilizacao.ObterXmlString(); - - Validador.Valida(ServicoNFe.NfeInutilizacao, _cFgServico.VersaoNfeInutilizacao, xmlInutilizacao, cfgServico: _cFgServico); - var dadosInutilizacao = new XmlDocument(); - dadosInutilizacao.LoadXml(xmlInutilizacao); - - SalvarArquivoXml(numId + "-ped-inu.xml", xmlInutilizacao); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosInutilizacao); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeInutilizacao, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retInutNFe = new retInutNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(numId + "-inu.xml", retornoXmlString); - - return new RetornoNfeInutilizacao(xmlInutilizacao, retInutNFe.ObterXmlString(), - retornoXmlString, retInutNFe); - - #endregion - } - - /// - /// Envia um evento genérico - /// - /// - /// - /// Tipo de serviço do evento: valores válidos: RecepcaoEventoCancelmento, RecepcaoEventoCartaCorrecao, RecepcaoEventoEpec e RecepcaoEventoManifestacaoDestinatario - /// Versão do serviço para o evento - /// Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento - private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List eventos, ServicoNFe servicoEvento, VersaoServico versaoEvento) - { - var listaEventos = new List - { - ServicoNFe.RecepcaoEventoCartaCorrecao, - ServicoNFe.RecepcaoEventoCancelmento, - ServicoNFe.RecepcaoEventoEpec, - ServicoNFe.RecepcaoEventoManifestacaoDestinatario - }; - if ( - !listaEventos.Contains(servicoEvento)) - throw new Exception( - string.Format("Serviço {0} é inválido para o método {1}!\nServiços válidos: \n • {2}", servicoEvento, - MethodBase.GetCurrentMethod().Name, string.Join("\n • ", listaEventos.ToArray()))); - - var versaoServico = servicoEvento.VersaoServicoParaString(versaoEvento); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(servicoEvento); - - if (_cFgServico.VersaoRecepcaoEventoCceCancelamento != VersaoServico.Versao400) - { - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - } - - #endregion - - #region Cria o objeto envEvento - - var pedEvento = new envEvento - { - versao = versaoServico, - idLote = idlote, - evento = eventos - }; - - foreach (var evento in eventos) - { - evento.infEvento.Id = "ID" + ((int)evento.infEvento.tpEvento) + evento.infEvento.chNFe + - evento.infEvento.nSeqEvento.ToString().PadLeft(2, '0'); - evento.Assina(_certificado, _cFgServico.Certificado.SignatureMethodSignedXml, _cFgServico.Certificado.DigestMethodReference, _cFgServico.RemoverAcentos); - } - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlEvento = _cFgServico.RemoverAcentos - ? pedEvento.ObterXmlString().RemoverAcentos() - : pedEvento.ObterXmlString(); - - Validador.Valida(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, xmlEvento, cfgServico: _cFgServico); - var dadosEvento = new XmlDocument(); - dadosEvento.LoadXml(xmlEvento); - - SalvarArquivoXml(idlote + "-ped-eve.xml", xmlEvento); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosEvento); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(servicoEvento, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retEnvEvento = new retEnvEvento().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(idlote + "-eve.xml", retornoXmlString); - - #region Obtém um procEventoNFe de cada evento e salva em arquivo - - var listprocEventoNFe = new List(); - - foreach (var evento in eventos) - { - var eve = evento; - var retEvento = (from retevento in retEnvEvento.retEvento - where - retevento.infEvento.chNFe == eve.infEvento.chNFe && - retevento.infEvento.tpEvento == eve.infEvento.tpEvento - select retevento).SingleOrDefault(); - - var procevento = new procEventoNFe { evento = eve, versao = eve.versao, retEvento = retEvento }; - listprocEventoNFe.Add(procevento); - if (!_cFgServico.SalvarXmlServicos) continue; - var proceventoXmlString = procevento.ObterXmlString(); - SalvarArquivoXml(procevento.evento.infEvento.Id.Substring(2) + "-procEventoNFe.xml", proceventoXmlString); - } - - #endregion - - return new RetornoRecepcaoEvento(xmlEvento, retEnvEvento.ObterXmlString(), retornoXmlString, - retEnvEvento, listprocEventoNFe); - - #endregion - } - - /// - /// Envia um evento do tipo "Cancelamento" - /// - /// Retorna um objeto da classe com o retorno do serviço - public RetornoRecepcaoEvento RecepcaoEventoCancelamento(int idlote, int sequenciaEvento, - string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj, DateTimeOffset? dhEvento = null) - { - return RecepcaoEventoCancelamento(NFeTipoEvento.TeNfeCancelamento, idlote, sequenciaEvento, - protocoloAutorizacao, chaveNFe, justificativa, cpfcnpj, dhEvento: dhEvento); - } - - /// - /// Envia um evento do tipo "Cancelamento por substituição" - /// - /// Retorna um objeto da classe com o retorno do serviço - public RetornoRecepcaoEvento RecepcaoEventoCancelamentoPorSubstituicao(int idlote, int sequenciaEvento, - string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj, Estado ufAutor, string versaoAplicativo, string chaveNfeSubstituta, DateTimeOffset? dhEvento = null) - { - return RecepcaoEventoCancelamento(NFeTipoEvento.TeNfeCancelamentoSubstituicao, idlote, sequenciaEvento, - protocoloAutorizacao, chaveNFe, justificativa, cpfcnpj, ufAutor, TipoAutor.taEmpresaEmitente, versaoAplicativo, chaveNfeSubstituta, dhEvento: dhEvento); - } - - private RetornoRecepcaoEvento RecepcaoEventoCancelamento(NFeTipoEvento tipoEventoCancelamento, int idlote, - int sequenciaEvento, string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj, - Estado? ufAutor = null, TipoAutor? tipoAutor = null, string versaoAplicativo = null, string chaveNfeSubstituta = null, DateTimeOffset? dhEvento = null) - { - if (!NFeTipoEventoUtils.NFeTipoEventoCancelamento.Contains(tipoEventoCancelamento)) - throw new Exception(string.Format("Informe um dos seguintes tipos de eventos: {0}", - string.Join(", ", - NFeTipoEventoUtils.NFeTipoEventoCancelamento.Select(n => n.Descricao())))); - - var versaoServico = - ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( - _cFgServico.VersaoRecepcaoEventoCceCancelamento); - - var detEvento = new detEvento - { - nProt = protocoloAutorizacao, - versao = versaoServico, - xJust = justificativa, - descEvento = tipoEventoCancelamento.Descricao(), - cOrgaoAutor = ufAutor, - tpAutor = tipoAutor, - verAplic = versaoAplicativo, - chNFeRef = chaveNfeSubstituta - }; - var infEvento = new infEventoEnv - { - cOrgao = _cFgServico.cUF, - tpAmb = _cFgServico.tpAmb, - chNFe = chaveNFe, - dhEvento = dhEvento ?? DateTime.Now, - tpEvento = tipoEventoCancelamento, - nSeqEvento = sequenciaEvento, - verEvento = versaoServico, - detEvento = detEvento - }; - if (cpfcnpj.Length == 11) - infEvento.CPF = cpfcnpj; - else - infEvento.CNPJ = cpfcnpj; - - var evento = new evento { versao = versaoServico, infEvento = infEvento }; - - var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancelmento, _cFgServico.VersaoRecepcaoEventoCceCancelamento); - return retorno; - } - - /// - /// Envia um evento do tipo "Carta de Correção" - /// - /// Retorna um objeto da classe com o retorno do serviço - public RetornoRecepcaoEvento RecepcaoEventoCartaCorrecao(int idlote, int sequenciaEvento, string chaveNFe, - string correcao, string cpfcnpj, DateTimeOffset? dhEvento = null) - { - var versaoServico = - ServicoNFe.RecepcaoEventoCartaCorrecao.VersaoServicoParaString( - _cFgServico.VersaoRecepcaoEventoCceCancelamento); - var detEvento = new detEvento - { - versao = versaoServico, - xCorrecao = correcao, - xJust = null, - descEvento = NFeTipoEvento.TeNfeCartaCorrecao.Descricao(), - xCondUso = - "A Carta de Correção é disciplinada pelo § 1º-A do art. 7º do Convênio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularização de erro ocorrido na emissão de documento fiscal, desde que o erro não esteja relacionado com: I - as variáveis que determinam o valor do imposto tais como: base de cálculo, alíquota, diferença de preço, quantidade, valor da operação ou da prestação; II - a correção de dados cadastrais que implique mudança do remetente ou do destinatário; III - a data de emissão ou de saída." - }; - - if (_cFgServico.cUF == Estado.MT || _cFgServico.RemoverAcentos){ - detEvento.descEvento = "Carta de Correcao"; - detEvento.xCondUso = - "A Carta de Correcao e disciplinada pelo paragrafo 1o-A do art. 7o do Convenio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularizacao de erro ocorrido na emissao de documento fiscal, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da operacao ou da prestacao; II - a correcao de dados cadastrais que implique mudanca do remetente ou do destinatario; III - a data de emissao ou de saida."; - } - var infEvento = new infEventoEnv - { - cOrgao = _cFgServico.cUF, - tpAmb = _cFgServico.tpAmb, - chNFe = chaveNFe, - dhEvento = dhEvento ?? DateTime.Now, - tpEvento = NFeTipoEvento.TeNfeCartaCorrecao, - nSeqEvento = sequenciaEvento, - verEvento = versaoServico, - detEvento = detEvento - }; - if (cpfcnpj.Length == 11) - infEvento.CPF = cpfcnpj; - else - infEvento.CNPJ = cpfcnpj; - - var evento = new evento { versao = versaoServico, infEvento = infEvento }; - - var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento); - return retorno; - } - - public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, int sequenciaEvento, - string chaveNFe, NFeTipoEvento nFeTipoEventoManifestacaoDestinatario, string cpfcnpj, - string justificativa = null, DateTimeOffset? dhEvento = null) - { - return RecepcaoEventoManifestacaoDestinatario(idlote, sequenciaEvento, new[] { chaveNFe }, - nFeTipoEventoManifestacaoDestinatario, cpfcnpj, justificativa, dhEvento: dhEvento); - } - - public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, int sequenciaEvento, - string[] chavesNFe, NFeTipoEvento nFeTipoEventoManifestacaoDestinatario, string cpfcnpj, - string justificativa = null, DateTimeOffset? dhEvento = null) - { - if (!NFeTipoEventoUtils.NFeTipoEventoManifestacaoDestinatario.Contains(nFeTipoEventoManifestacaoDestinatario)) - throw new Exception(string.Format("Informe um dos seguintes tipos de eventos: {0}", - string.Join(", ", - NFeTipoEventoUtils.NFeTipoEventoManifestacaoDestinatario.Select(n => n.Descricao())))); - - var versaoServico = - ServicoNFe.RecepcaoEventoManifestacaoDestinatario.VersaoServicoParaString( - _cFgServico.VersaoRecepcaoEventoManifestacaoDestinatario); - var detEvento = new detEvento - { - versao = versaoServico, - xJust = justificativa, - descEvento = nFeTipoEventoManifestacaoDestinatario.Descricao() - }; - - var eventos = new List(); - foreach (var chaveNFe in chavesNFe) - { - var infEvento = new infEventoEnv - { - cOrgao = _cFgServico.cUF == Estado.RS ? _cFgServico.cUF : Estado.AN, - //RS possui endereço próprio para manifestação do destinatário. Demais UFs usam o ambiente nacional - tpAmb = _cFgServico.tpAmb, - chNFe = chaveNFe, - dhEvento = dhEvento ?? DateTime.Now, - tpEvento = nFeTipoEventoManifestacaoDestinatario, - nSeqEvento = sequenciaEvento, - verEvento = versaoServico, - detEvento = detEvento - }; - if (cpfcnpj.Length == 11) - infEvento.CPF = cpfcnpj; - else - infEvento.CNPJ = cpfcnpj; - - eventos.Add(new evento { versao = versaoServico, infEvento = infEvento }); - } - - - var retorno = RecepcaoEvento(idlote, eventos, - ServicoNFe.RecepcaoEventoManifestacaoDestinatario, _cFgServico.VersaoRecepcaoEventoManifestacaoDestinatario); - return retorno; - } - - /// - /// Envia um evento do tipo "EPEC" - /// - /// - /// - /// - /// - /// Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento - public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, int sequenciaEvento, Classes.NFe nfe, - string veraplic, DateTimeOffset? dhEvento = null) - { - var versaoServico = - ServicoNFe.RecepcaoEventoEpec.VersaoServicoParaString(_cFgServico.VersaoRecepcaoEventoEpec); - - if (string.IsNullOrEmpty(nfe.infNFe.Id)) - nfe.Assina().Valida(); - - var detevento = new detEvento - { - versao = versaoServico, - cOrgaoAutor = nfe.infNFe.ide.cUF, - tpAutor = TipoAutor.taEmpresaEmitente, - verAplic = veraplic, - descEvento = NFeTipoEvento.TeNfceEpec.Descricao(), - dhEmi = nfe.infNFe.ide.dhEmi, - tpNF = nfe.infNFe.ide.tpNF, - IE = nfe.infNFe.emit.IE, - dest = new dest - { - UF = nfe.infNFe.dest.enderDest.UF, - CNPJ = nfe.infNFe.dest.CNPJ, - CPF = nfe.infNFe.dest.CPF, - IE = nfe.infNFe.dest.IE, - vNF = nfe.infNFe.total.ICMSTot.vNF, - vICMS = nfe.infNFe.total.ICMSTot.vICMS, - vST = nfe.infNFe.total.ICMSTot.vST - } - }; - - var infEvento = new infEventoEnv - { - cOrgao = Estado.AN, - tpAmb = nfe.infNFe.ide.tpAmb, - CNPJ = nfe.infNFe.emit.CNPJ, - CPF = nfe.infNFe.emit.CPF, - chNFe = nfe.infNFe.Id.Substring(3), - dhEvento = dhEvento ?? DateTime.Now, - tpEvento = NFeTipoEvento.TeNfceEpec, - nSeqEvento = sequenciaEvento, - verEvento = versaoServico, - detEvento = detevento - }; - - var evento = new evento { versao = versaoServico, infEvento = infEvento }; - - var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoEpec, _cFgServico.VersaoRecepcaoEventoEpec); - return retorno; - } - - /// - /// Consulta a situação cadastral, com base na UF/Documento - /// O documento pode ser: IE, CNPJ ou CPF - /// - /// Sigla da UF consultada, informar 'SU' para SUFRAMA - /// Tipo de documento a ser consultado - /// Documento a ser consultado - /// Retorna um objeto da classe RetornoNfeConsultaCadastro com o retorno do serviço NfeConsultaCadastro - public RetornoNfeConsultaCadastro NfeConsultaCadastro(string uf, ConsultaCadastroTipoDocumento tipoDocumento, - string documento) - { - var versaoServico = ServicoNFe.NfeConsultaCadastro.VersaoServicoParaString(_cFgServico.VersaoNfeConsultaCadastro); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NfeConsultaCadastro); - - if (_cFgServico.VersaoNfeConsultaCadastro != VersaoServico.Versao400) - { - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - } - - #endregion - - #region Cria o objeto ConsCad - - var pedConsulta = new ConsCad - { - versao = versaoServico, - infCons = new infConsEnv { UF = uf } - }; - - switch (tipoDocumento) - { - case ConsultaCadastroTipoDocumento.Ie: - pedConsulta.infCons.IE = documento; - break; - case ConsultaCadastroTipoDocumento.Cnpj: - pedConsulta.infCons.CNPJ = documento; - break; - case ConsultaCadastroTipoDocumento.Cpf: - pedConsulta.infCons.CPF = documento; - break; - default: - throw new ArgumentOutOfRangeException("tipoDocumento", tipoDocumento, null); - } - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlConsulta = pedConsulta.ObterXmlString(); - Validador.Valida(ServicoNFe.NfeConsultaCadastro, _cFgServico.VersaoNfeConsultaCadastro, xmlConsulta, cfgServico: _cFgServico); - var dadosConsulta = new XmlDocument(); - dadosConsulta.LoadXml(xmlConsulta); - - SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-ped-cad.xml", xmlConsulta); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosConsulta); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeConsultaCadastro, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retConsulta = new retConsCad().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-cad.xml", retornoXmlString); - - return new RetornoNfeConsultaCadastro(pedConsulta.ObterXmlString(), retConsulta.ObterXmlString(), - retornoXmlString, retConsulta); - - #endregion - } - - /// - /// Serviço destinado à distribuição de informações resumidas e documentos fiscais eletrônicos de interesse de um ator, seja este pessoa física ou jurídica. - /// - /// Código da UF do Autor - /// CNPJ/CPF do interessado no DF-e - /// Último NSU recebido pelo Interessado - /// Número Sequencial Único - /// Chave eletronica da NF-e - /// Retorna um objeto da classe RetornoNfeDistDFeInt com os documentos de interesse do CNPJ/CPF pesquisado - public RetornoNfeDistDFeInt NfeDistDFeInteresse(string ufAutor, string documento, string ultNSU = "0", string nSU = "0", string chNFE = "") - { - var versaoServico = ServicoNFe.NFeDistribuicaoDFe.VersaoServicoParaString(_cFgServico.VersaoNFeDistribuicaoDFe); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NFeDistribuicaoDFe); - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - - #endregion - - #region Cria o objeto distDFeInt - - var pedDistDFeInt = new distDFeInt - { - versao = versaoServico, - tpAmb = _cFgServico.tpAmb, - cUFAutor = _cFgServico.cUF - }; - - if (documento.Length == 11) - pedDistDFeInt.CPF = documento; - if (documento.Length > 11) - pedDistDFeInt.CNPJ = documento; - - if (string.IsNullOrEmpty(chNFE)) - pedDistDFeInt.distNSU = new distNSU { ultNSU = ultNSU.PadLeft(15, '0') }; - - if (!nSU.Equals("0")) - { - pedDistDFeInt.consNSU = new consNSU { NSU = nSU.PadLeft(15, '0') }; - pedDistDFeInt.distNSU = null; - pedDistDFeInt.consChNFe = null; - } - - if (!string.IsNullOrEmpty(chNFE)) - { - pedDistDFeInt.consChNFe = new consChNFe { chNFe = chNFE }; - pedDistDFeInt.consNSU = null; - pedDistDFeInt.distNSU = null; - } - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlConsulta = pedDistDFeInt.ObterXmlString(); - Validador.Valida(ServicoNFe.NFeDistribuicaoDFe, _cFgServico.VersaoNFeDistribuicaoDFe, xmlConsulta, cfgServico: _cFgServico); - var dadosConsulta = new XmlDocument(); - dadosConsulta.LoadXml(xmlConsulta); - - SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-ped-DistDFeInt.xml", xmlConsulta); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosConsulta); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeDistribuicaoDFe, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retConsulta = new retDistDFeInt().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(DateTime.Now.ParaDataHoraString() + "-distDFeInt.xml", retornoXmlString); - - #region Obtém um retDistDFeInt de cada evento, adiciona os documentos ao resultado e salva-os em arquivo - - if (retConsulta.loteDistDFeInt != null) - { - foreach (var dFeInt in retConsulta.loteDistDFeInt) - { - var conteudo = Compressao.Unzip(dFeInt.XmlNfe); - var chNFe = string.Empty; - - if (conteudo.StartsWith("(conteudo); - chNFe = retConteudo.chNFe; - dFeInt.ResNFe = retConteudo; - } - else if (conteudo.StartsWith("(conteudo); - chNFe = procEventoNFeConteudo.retEvento.infEvento.chNFe; - dFeInt.ProcEventoNFe = procEventoNFeConteudo; - } - else if (conteudo.StartsWith("(conteudo); - chNFe = resEventoConteudo.chNFe; - dFeInt.ResEvento = resEventoConteudo; - } - else if (conteudo.StartsWith("(conteudo); - chNFe = resEventoConteudo.protNFe.infProt.chNFe; - dFeInt.NfeProc = resEventoConteudo; - } - - var schema = dFeInt.schema.Split('_'); - if (chNFe == string.Empty) - chNFe = DateTime.Now.ParaDataHoraString() + "_SEMCHAVE"; - - SalvarArquivoXml(chNFe + "-" + schema[0] + ".xml", conteudo); - } - } - - #endregion - - return new RetornoNfeDistDFeInt(pedDistDFeInt.ObterXmlString(), retConsulta.ObterXmlString(), retornoXmlString, retConsulta); - - #endregion - } - - #region Recepção - - /// - /// Envia uma ou mais NFe - /// - /// - /// - /// Retorna um objeto da classe RetornoNfeRecepcao com com os dados do resultado da transmissão - public RetornoNfeRecepcao NfeRecepcao(int idLote, List nFes) - { - var versaoServico = ServicoNFe.NfeRecepcao.VersaoServicoParaString(_cFgServico.VersaoNfeRecepcao); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NfeRecepcao); - - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - - #endregion - - #region Cria o objeto enviNFe - - var pedEnvio = new enviNFe2(versaoServico, idLote, nFes); - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlEnvio = pedEnvio.ObterXmlString(); - - if (_cFgServico.cUF == Estado.PR) - //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/33 - xmlEnvio = xmlEnvio.Replace("", ""); - - Validador.Valida(ServicoNFe.NfeRecepcao, _cFgServico.VersaoNfeRecepcao, xmlEnvio, cfgServico: _cFgServico); - var dadosEnvio = new XmlDocument(); - dadosEnvio.LoadXml(xmlEnvio); - - SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosEnvio); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeRecepcao, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retEnvio = new retEnviNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(idLote + "-rec.xml", retornoXmlString); - - return new RetornoNfeRecepcao(pedEnvio.ObterXmlString(), retEnvio.ObterXmlString(), retornoXmlString, - retEnvio); - - #endregion - } - - /// - /// Recebe o retorno do processamento de uma ou mais NFe's pela SEFAZ - /// - /// - /// Retorna um objeto da classe RetornoNfeRetRecepcao com com os dados do processamento do lote - public RetornoNfeRetRecepcao NfeRetRecepcao(string recibo) - { - var versaoServico = ServicoNFe.NfeRetRecepcao.VersaoServicoParaString(_cFgServico.VersaoNfeRetRecepcao); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NfeRetRecepcao); - - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - - #endregion - - #region Cria o objeto consReciNFe - - var pedRecibo = new consReciNFe - { - versao = versaoServico, - tpAmb = _cFgServico.tpAmb, - nRec = recibo - }; - - #endregion - - #region Envia os dados e obtém a resposta - - var xmlRecibo = pedRecibo.ObterXmlString(); - var dadosRecibo = new XmlDocument(); - dadosRecibo.LoadXml(xmlRecibo); - - SalvarArquivoXml(recibo + "-ped-rec.xml", xmlRecibo); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosRecibo); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeRetRecepcao, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retRecibo = new retConsReciNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(recibo + "-pro-rec.xml", retornoXmlString); - - return new RetornoNfeRetRecepcao(pedRecibo.ObterXmlString(), retRecibo.ObterXmlString(), retornoXmlString, - retRecibo); - - #endregion - } - - #endregion - - #region Autorização - - /// - /// Envia uma ou mais NFe - /// - /// ID do Lote - /// Indicador de Sincronização - /// Lista de NFes a serem enviadas - /// Define se a mensagem será enviada para a SEFAZ compactada - /// Retorna um objeto da classe RetornoNFeAutorizacao com com os dados do resultado da transmissão - public RetornoNFeAutorizacao NFeAutorizacao(int idLote, IndicadorSincronizacao indSinc, List nFes, - bool compactarMensagem = false) - { - if (_cFgServico.VersaoNFeAutorizacao != VersaoServico.Versao400) - { - return NFeAutorizacaoVersao310(idLote, indSinc, nFes, compactarMensagem); - } - - if (_cFgServico.VersaoNFeAutorizacao == VersaoServico.Versao400) - { - return NFeAutorizacao4(idLote, indSinc, nFes, compactarMensagem); - } - - throw new InvalidOperationException("Versão inválida"); - } - - private RetornoNFeAutorizacao NFeAutorizacao4(int idLote, IndicadorSincronizacao indSinc, List nFes, bool compactarMensagem) - { - var versaoServico = ServicoNFe.NFeAutorizacao.VersaoServicoParaString(_cFgServico.VersaoNFeAutorizacao); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServicoAutorizacao(ServicoNFe.NFeAutorizacao, compactarMensagem); - - #endregion - - #region Cria o objeto enviNFe - - var pedEnvio = new enviNFe4(versaoServico, idLote, indSinc, nFes); - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlEnvio = _cFgServico.RemoverAcentos - ? pedEnvio.ObterXmlString().RemoverAcentos() - : pedEnvio.ObterXmlString(); - - if (_cFgServico.cUF == Estado.PR) - //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/33 - xmlEnvio = xmlEnvio.Replace("", ""); - - Validador.Valida(ServicoNFe.NFeAutorizacao, _cFgServico.VersaoNFeAutorizacao, xmlEnvio, cfgServico: _cFgServico); - var dadosEnvio = new XmlDocument(); - dadosEnvio.LoadXml(xmlEnvio); - - SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio); - - XmlNode retorno; - try - { - if (compactarMensagem) - { - var xmlCompactado = Convert.ToBase64String(Compressao.Zip(xmlEnvio)); - retorno = ws.ExecuteZip(xmlCompactado); - } - else - { - retorno = ws.Execute(dadosEnvio); - } - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeAutorizacao, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retEnvio = new retEnviNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(idLote + "-rec.xml", retornoXmlString); - - return new RetornoNFeAutorizacao(xmlEnvio, retEnvio.ObterXmlString(), retornoXmlString, retEnvio); - - #endregion - } - - private RetornoNFeAutorizacao NFeAutorizacaoVersao310(int idLote, IndicadorSincronizacao indSinc, List nFes, bool compactarMensagem) - { - var versaoServico = ServicoNFe.NFeAutorizacao.VersaoServicoParaString(_cFgServico.VersaoNFeAutorizacao); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServicoAutorizacao(ServicoNFe.NFeAutorizacao, compactarMensagem); - - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - - #endregion - - #region Cria o objeto enviNFe - - var pedEnvio = new enviNFe3(versaoServico, idLote, indSinc, nFes); - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlEnvio = pedEnvio.ObterXmlString(); - if (_cFgServico.cUF == Estado.PR) - //Caso o lote seja enviado para o PR, colocar o namespace nos elementos do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/33 - xmlEnvio = xmlEnvio.Replace("", ""); - - Validador.Valida(ServicoNFe.NFeAutorizacao, _cFgServico.VersaoNFeAutorizacao, xmlEnvio, cfgServico: _cFgServico); - var dadosEnvio = new XmlDocument(); - dadosEnvio.LoadXml(xmlEnvio); - - SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio); - - XmlNode retorno; - try - { - if (compactarMensagem) - { - var xmlCompactado = Convert.ToBase64String(Compressao.Zip(xmlEnvio)); - retorno = ws.ExecuteZip(xmlCompactado); - } - else - { - retorno = ws.Execute(dadosEnvio); - } - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeAutorizacao, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retEnvio = new retEnviNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(idLote + "-rec.xml", retornoXmlString); - - return new RetornoNFeAutorizacao(pedEnvio.ObterXmlString(), retEnvio.ObterXmlString(), retornoXmlString, retEnvio); - - #endregion - } - - /// - /// Recebe o retorno do processamento de uma ou mais NFe's pela SEFAZ - /// - /// - /// Retorna um objeto da classe RetornoNFeRetAutorizacao com com os dados do processamento do lote - public RetornoNFeRetAutorizacao NFeRetAutorizacao(string recibo) - { - var versaoServico = ServicoNFe.NFeRetAutorizacao.VersaoServicoParaString(_cFgServico.VersaoNFeRetAutorizacao); - - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NFeRetAutorizacao); - - if (_cFgServico.VersaoNFeRetAutorizacao != VersaoServico.Versao400) - { - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - } - - #endregion - - #region Cria o objeto consReciNFe - - var pedRecibo = new consReciNFe - { - versao = versaoServico, - tpAmb = _cFgServico.tpAmb, - nRec = recibo - }; - - #endregion - - #region Envia os dados e obtém a resposta - - var xmlRecibo = pedRecibo.ObterXmlString(); - var dadosRecibo = new XmlDocument(); - dadosRecibo.LoadXml(xmlRecibo); - - SalvarArquivoXml(recibo + "-ped-rec.xml", xmlRecibo); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosRecibo); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NFeRetAutorizacao, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retRecibo = new retConsReciNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(recibo + "-pro-rec.xml", retornoXmlString); - - return new RetornoNFeRetAutorizacao(pedRecibo.ObterXmlString(), retRecibo.ObterXmlString(), retornoXmlString, retRecibo); - - #endregion - } - - #endregion - - /// - /// Consulta a Situação da NFe - /// - /// Retorna um objeto da classe RetornoNfeConsultaProtocolo com os dados da Situação da NFe - [Obsolete("Descontinuado pela Sefaz")] - public RetornoNfeDownload NfeDownloadNf(string cnpj, List chaves, string nomeSaida = "") - { - var versaoServico = ServicoNFe.NfeDownloadNF.VersaoServicoParaString(_cFgServico.VersaoNfeDownloadNF); - - #region Cria o objeto wdsl para envio do pedido de Download - - var ws = CriarServico(ServicoNFe.NfeDownloadNF); - - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - //Embora em http://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=#GO esse serviço está nas versões 2.00 e 3.10, ele rejeita se mandar a versão diferente de 1.00. Testado no Ambiente Nacional - (AN) - versaoDados = /*versaoServico*/ "1.00" - }; - - #endregion - - #region Cria o objeto downloadNFe - - var pedDownload = new downloadNFe - { - //Embora em http://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=#GO esse serviço está nas versões 2.00 e 3.10, ele rejeita se mandar a versão diferente de 1.00. Testado no Ambiente Nacional - (AN) - versao = /*versaoServico*/ "1.00", - CNPJ = cnpj, - tpAmb = _cFgServico.tpAmb, - chNFe = chaves - }; - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlDownload = pedDownload.ObterXmlString(); - Validador.Valida(ServicoNFe.NfeDownloadNF, _cFgServico.VersaoNfeDownloadNF, xmlDownload, cfgServico: _cFgServico); - var dadosDownload = new XmlDocument(); - dadosDownload.LoadXml(xmlDownload); - - if (nomeSaida == "") - { - nomeSaida = cnpj; - } - - SalvarArquivoXml(nomeSaida + "-ped-down.xml", xmlDownload); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosDownload); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfeDownloadNF, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retDownload = new retDownloadNFe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(nomeSaida + "-down.xml", retornoXmlString); - - return new RetornoNfeDownload(pedDownload.ObterXmlString(), retDownload.ObterXmlString(), retornoXmlString, retDownload); - - #endregion - } - - #region Adm CSC - - public RetornoAdmCscNFCe AdmCscNFCe(string raizCnpj, IdentificadorOperacaoCsc identificadorOperacaoCsc, string idCscASerRevogado = null, string codigoCscASerRevogado = null) - { - var versaoServico = ServicoNFe.NfceAdministracaoCSC.VersaoServicoParaString(_cFgServico.VersaoNfceAministracaoCSC); - - #region Cria o objeto wdsl para envio do pedido de Download - - var ws = CriarServico(ServicoNFe.NfceAdministracaoCSC); - - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - - #endregion - - #region Cria o objeto downloadNFe - - var admCscNFCe = new admCscNFCe - { - versao = versaoServico, - tpAmb = _cFgServico.tpAmb, - indOp = identificadorOperacaoCsc, - raizCNPJ = raizCnpj - }; - - if (identificadorOperacaoCsc == IdentificadorOperacaoCsc.ioRevogaCscAtivo) - { - admCscNFCe.dadosCsc = new dadosCsc - { - codigoCsc = codigoCscASerRevogado, - idCsc = idCscASerRevogado - }; - } - - #endregion - - #region Valida, Envia os dados e obtém a resposta - - var xmlAdmCscNfe = admCscNFCe.ObterXmlString(); - var dadosAdmnistracaoCsc = new XmlDocument(); - dadosAdmnistracaoCsc.LoadXml(xmlAdmCscNfe); - - SalvarArquivoXml(raizCnpj + "-adm-csc.xml", xmlAdmCscNfe); - - XmlNode retorno; - try - { - retorno = ws.Execute(dadosAdmnistracaoCsc); - } - catch (WebException ex) - { - throw FabricaComunicacaoException.ObterException(ServicoNFe.NfceAdministracaoCSC, ex); - } - - var retornoXmlString = retorno.OuterXml; - var retCsc = new retAdmCscNFCe().CarregarDeXmlString(retornoXmlString); - - SalvarArquivoXml(raizCnpj + "-ret-adm-csc.xml", retornoXmlString); - - return new RetornoAdmCscNFCe(admCscNFCe.ObterXmlString(), retCsc.ObterXmlString(), retornoXmlString, retCsc); - - #endregion - } - - #endregion - - - #region Implementação do padrão Dispose - - // Flag: Dispose já foi chamado? - private bool _disposed; - - // Implementação protegida do padrão Dispose. - private void Dispose(bool disposing) - { - if (_disposed) - return; - - if (disposing) - if (!_cFgServico.Certificado.ManterDadosEmCache && _controlarCertificado) - _certificado.Reset(); - _disposed = disposing; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - ~ServicosNFe() - { - Dispose(false); - } - - #endregion - } -} diff --git a/Shared.NFe.Servicos/Shared.NFe.Servicos.projitems b/Shared.NFe.Servicos/Shared.NFe.Servicos.projitems deleted file mode 100644 index f58ac4cda..000000000 --- a/Shared.NFe.Servicos/Shared.NFe.Servicos.projitems +++ /dev/null @@ -1,29 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 57631341-c61b-49c6-a6ed-317ec42b1581 - - - Shared.NFe.Servicos - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.NFe.Servicos/Shared.NFe.Servicos.shproj b/Shared.NFe.Servicos/Shared.NFe.Servicos.shproj deleted file mode 100644 index 7d7789942..000000000 --- a/Shared.NFe.Servicos/Shared.NFe.Servicos.shproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - 57631341-c61b-49c6-a6ed-317ec42b1581 - 14.0 - - - - - - - - diff --git a/Shared.NFe.Utils/ConfiguracaoServico.cs b/Shared.NFe.Utils/ConfiguracaoServico.cs deleted file mode 100644 index b6122a3cb..000000000 --- a/Shared.NFe.Utils/ConfiguracaoServico.cs +++ /dev/null @@ -1,528 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System; -using System.ComponentModel; -using System.IO; -using System.Linq; -using System.Net; -using System.Runtime.CompilerServices; -using DFe.Classes.Entidades; -using DFe.Classes.Flags; -using DFe.Utils; -using NFe.Classes.Informacoes.Identificacao.Tipos; -using NFe.Classes.Servicos.Tipos; -using NFe.Utils.Annotations; -using NFe.Utils.Enderecos; - -namespace NFe.Utils -{ - public sealed class ConfiguracaoServico : INotifyPropertyChanged - { - private static volatile ConfiguracaoServico _instancia; - private static readonly object SyncRoot = new object(); - private string _diretorioSchemas; - private bool _salvarXmlServicos; - private VersaoServico _versaoLayout; - private Estado _cUf; - private TipoAmbiente _tpAmb; - private TipoEmissao _tpEmis; - private ModeloDocumento _modeloDocumento; - private bool _defineVersaoServicosAutomaticamente = true; - private VersaoServico _versaoRecepcaoEventoCceCancelamento; - private VersaoServico _versaoRecepcaoEventoEpec; - private VersaoServico _versaoRecepcaoEventoManifestacaoDestinatario; - private VersaoServico _versaoNfeRecepcao; - private VersaoServico _versaoNfeRetRecepcao; - private VersaoServico _versaoNfeConsultaCadastro; - private VersaoServico _versaoNfeInutilizacao; - private VersaoServico _versaoNfeConsultaProtocolo; - private VersaoServico _versaoNfeStatusServico; - private VersaoServico _versaoNFeAutorizacao; - private VersaoServico _versaoNFeRetAutorizacao; - private VersaoServico _versaoNFeDistribuicaoDFe; - private VersaoServico _versaoNfeConsultaDest; - private VersaoServico _versaoNfeDownloadNf; - private VersaoServico _versaoNfceAministracaoCsc; - - public ConfiguracaoServico() - { - Certificado = - new ConfiguracaoCertificado - { - SignatureMethodSignedXml = "http://www.w3.org/2000/09/xmldsig#rsa-sha1", - DigestMethodReference = "http://www.w3.org/2000/09/xmldsig#sha1" - }; - - cUF = Estado.AC; - } - - static ConfiguracaoServico() - { - } - - /// - /// Configurações relativas ao Certificado Digital - /// - public ConfiguracaoCertificado Certificado { get; set; } - - /// - /// Tempo máximo de espera pela resposta do webservice, em milisegundos - /// - public int TimeOut { get; set; } - - /// - /// Estado de destino do webservice - /// - public Estado cUF - { - get { return _cUf; } - set - { - if (value == _cUf) return; - _cUf = value; - OnPropertyChanged(); - AtualizaVersoes(); - } - } - - /// - /// Tipo de ambiente do webservice (Produção, Homologação) - /// - public TipoAmbiente tpAmb - { - get { return _tpAmb; } - set - { - if (value == _tpAmb) return; - _tpAmb = value; - OnPropertyChanged(); - AtualizaVersoes(); - } - } - - /// - /// Tipo de Emissão da NF-e - /// - public TipoEmissao tpEmis - { - get { return _tpEmis; } - set - { - if (value == _tpEmis) return; - _tpEmis = value; - OnPropertyChanged(); - AtualizaVersoes(); - } - } - - /// - /// Tipo de documento que está sendo referenciado nos webservices - /// - public ModeloDocumento ModeloDocumento - { - get { return _modeloDocumento; } - set - { - if (value == _modeloDocumento) return; - _modeloDocumento = value; - OnPropertyChanged(); - AtualizaVersoes(); - } - } - - public VersaoServico VersaoLayout - { - get { return _versaoLayout; } - set - { - if (value == _versaoLayout) return; - _versaoLayout = value; - OnPropertyChanged(); - AtualizaVersoes(); - } - } - - /// - /// Determina se as versões dos serviços serão atualizadas automaticamente quando um dos seguintes atributos forem alterados: - /// - /// - /// - /// - /// - /// - public bool DefineVersaoServicosAutomaticamente - { - get - { - return _defineVersaoServicosAutomaticamente; - } - set - { - if (value == _defineVersaoServicosAutomaticamente) return; - _defineVersaoServicosAutomaticamente = value; - OnPropertyChanged(); - AtualizaVersoes(); - } - } - - /// - /// Atualiza as versões dos serviços - /// Obs: As versões do serviços podem variar em função da UF(), do tipo de ambiente(), do modelo de documento() e da forma de emissão() - /// - private void AtualizaVersoes() - { - if (!_defineVersaoServicosAutomaticamente) return; - - var enderecosMaisecentes = - Enderecador.ObterEnderecoServicosMaisRecentes(VersaoLayout, cUF, tpAmb, ModeloDocumento, tpEmis); - - var obterVersao = new Func(servico => - enderecosMaisecentes.Where(n => n.ServicoNFe == servico).Select(n => n.VersaoServico).DefaultIfEmpty(VersaoServico.Versao100).FirstOrDefault()); - - - if (enderecosMaisecentes.Any()) - { - VersaoRecepcaoEventoCceCancelamento = obterVersao(ServicoNFe.RecepcaoEventoCancelmento); - VersaoRecepcaoEventoEpec = obterVersao(ServicoNFe.RecepcaoEventoEpec); - VersaoRecepcaoEventoManifestacaoDestinatario = obterVersao(ServicoNFe.RecepcaoEventoManifestacaoDestinatario); - VersaoNfeRecepcao = obterVersao(ServicoNFe.NfeRecepcao); - VersaoNfeRetRecepcao = obterVersao(ServicoNFe.NfeRetRecepcao); - VersaoNfeConsultaCadastro = obterVersao(ServicoNFe.NfeConsultaCadastro); - VersaoNfeInutilizacao = obterVersao(ServicoNFe.NfeInutilizacao); - VersaoNfeConsultaProtocolo = obterVersao(ServicoNFe.NfeConsultaProtocolo); - VersaoNfeStatusServico = obterVersao(ServicoNFe.NfeStatusServico); - VersaoNFeAutorizacao = obterVersao(ServicoNFe.NFeAutorizacao); - VersaoNFeRetAutorizacao = obterVersao(ServicoNFe.NFeRetAutorizacao); - VersaoNFeDistribuicaoDFe = obterVersao(ServicoNFe.NFeDistribuicaoDFe); - VersaoNfeConsultaDest = obterVersao(ServicoNFe.NfeConsultaDest); - VersaoNfeDownloadNF = obterVersao(ServicoNFe.NfeDownloadNF); - VersaoNfceAministracaoCSC = obterVersao(ServicoNFe.NfceAdministracaoCSC); - } - } - - #region Versões dos serviços - - /// - /// Versão do serviço RecepcaoEvento para Carta de Correção e Cancelamento - /// - public VersaoServico VersaoRecepcaoEventoCceCancelamento - { - get { return _versaoRecepcaoEventoCceCancelamento; } - set - { - if (value == _versaoRecepcaoEventoCceCancelamento) return; - _versaoRecepcaoEventoCceCancelamento = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço RecepcaoEvento para EPEC - /// - public VersaoServico VersaoRecepcaoEventoEpec - { - get { return _versaoRecepcaoEventoEpec; } - set - { - if (value == _versaoRecepcaoEventoEpec) return; - _versaoRecepcaoEventoEpec = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço RecepcaoEvento para Manifestação do destinatário - /// - public VersaoServico VersaoRecepcaoEventoManifestacaoDestinatario - { - get { return _versaoRecepcaoEventoManifestacaoDestinatario; } - set - { - if (value == _versaoRecepcaoEventoManifestacaoDestinatario) return; - _versaoRecepcaoEventoManifestacaoDestinatario = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeRecepcao - /// - public VersaoServico VersaoNfeRecepcao - { - get { return _versaoNfeRecepcao; } - set - { - if (value == _versaoNfeRecepcao) return; - _versaoNfeRecepcao = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeRetRecepcao - /// - public VersaoServico VersaoNfeRetRecepcao - { - get { return _versaoNfeRetRecepcao; } - set - { - if (value == _versaoNfeRetRecepcao) return; - _versaoNfeRetRecepcao = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeConsultaCadastro - /// - public VersaoServico VersaoNfeConsultaCadastro - { - get { return _versaoNfeConsultaCadastro; } - set - { - if (value == _versaoNfeConsultaCadastro) return; - _versaoNfeConsultaCadastro = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeInutilizacao - /// - public VersaoServico VersaoNfeInutilizacao - { - get { return _versaoNfeInutilizacao; } - set - { - if (value == _versaoNfeInutilizacao) return; - _versaoNfeInutilizacao = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeConsultaProtocolo - /// - public VersaoServico VersaoNfeConsultaProtocolo - { - get { return _versaoNfeConsultaProtocolo; } - set - { - if (value == _versaoNfeConsultaProtocolo) return; - _versaoNfeConsultaProtocolo = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeStatusServico - /// - public VersaoServico VersaoNfeStatusServico - { - get { return _versaoNfeStatusServico; } - set - { - if (value == _versaoNfeStatusServico) return; - _versaoNfeStatusServico = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NFeAutorizacao - /// - public VersaoServico VersaoNFeAutorizacao - { - get { return _versaoNFeAutorizacao; } - set - { - if (value == _versaoNFeAutorizacao) return; - _versaoNFeAutorizacao = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NFeRetAutorizacao - /// - public VersaoServico VersaoNFeRetAutorizacao - { - get { return _versaoNFeRetAutorizacao; } - set - { - if (value == _versaoNFeRetAutorizacao) return; - _versaoNFeRetAutorizacao = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NFeDistribuicaoDFe - /// - public VersaoServico VersaoNFeDistribuicaoDFe - { - get { return _versaoNFeDistribuicaoDFe; } - set - { - if (value == _versaoNFeDistribuicaoDFe) return; - _versaoNFeDistribuicaoDFe = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeConsultaDest - /// - public VersaoServico VersaoNfeConsultaDest - { - get { return _versaoNfeConsultaDest; } - set - { - if (value == _versaoNfeConsultaDest) return; - _versaoNfeConsultaDest = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço NfeDownloadNF - /// - public VersaoServico VersaoNfeDownloadNF - { - get { return _versaoNfeDownloadNf; } - set - { - if (value == _versaoNfeDownloadNf) return; - _versaoNfeDownloadNf = value; - OnPropertyChanged(); - } - } - - /// - /// Versão do serviço admCscNFCe - /// - public VersaoServico VersaoNfceAministracaoCSC - { - get { return _versaoNfceAministracaoCsc; } - set - { - if (value == _versaoNfceAministracaoCsc) return; - _versaoNfceAministracaoCsc = value; - OnPropertyChanged(); - } - } - - #endregion - - /// - /// Protocolo de segurança que deve ser utilizado no consumo dos webservices - /// - public SecurityProtocolType ProtocoloDeSeguranca { get; set; } - - /// - /// Diretório onde estão armazenados os schemas para validação - /// - public string DiretorioSchemas - { - get { return _diretorioSchemas; } - set - { - if (!string.IsNullOrEmpty(value) && !Directory.Exists(value)) - throw new Exception("Diretório " + value + " não encontrado!"); - _diretorioSchemas = value; - } - } - - /// - /// Informar se a biblioteca deve salvar o xml de envio e de retorno - /// - public bool SalvarXmlServicos - { - get { return _salvarXmlServicos; } - set - { - if (!value) - DiretorioSalvarXml = ""; - _salvarXmlServicos = value; - } - } - - /// - /// Diretório onde os xmls de envio/retorno devem ser salvos - /// - public string DiretorioSalvarXml { get; set; } - - /// - /// Determina se o cerificado do servidor deve ser verificado - /// - public bool ValidarCertificadoDoServidor { get; set; } - - - /// - /// Instância do Singleton de ConfiguracaoServico - /// - public static ConfiguracaoServico Instancia - { - get - { - if (_instancia != null) return _instancia; - lock (SyncRoot) - { - if (_instancia != null) return _instancia; - _instancia = new ConfiguracaoServico(); - } - - return _instancia; - } - } - - public bool RemoverAcentos { get; set; } - - /// - /// Limpa a instancia atual caso exista - /// - public static void LimparIntancia() - { - _instancia = null; - } - - public event PropertyChangedEventHandler PropertyChanged; - - [NotifyPropertyChangedInvocator] - private void OnPropertyChanged([CallerMemberName] string propertyName = null) - { - var handler = PropertyChanged; - if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); - } - } -} \ No newline at end of file diff --git a/Shared.NFe.Utils/InfRespTec/GerarHashCSRT.cs b/Shared.NFe.Utils/InfRespTec/GerarHashCSRT.cs deleted file mode 100644 index 420aa4d97..000000000 --- a/Shared.NFe.Utils/InfRespTec/GerarHashCSRT.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Security.Cryptography; -using System.Text; - -namespace Shared.NFe.Utils.InfRespTec -{ - public static class GerarHashCSRT - { - public static string HashCSRT(string csrt, global::NFe.Classes.NFe nfe, Encoding encoding = null) - { - return HashCSRT(csrt, nfe.infNFe.Id.Substring(0, 3), encoding); - } - - public static string HashCSRT(string csrt, string chave, Encoding encoding = null) - { - if (encoding == null) - { - encoding = Encoding.UTF8; - } - - var csrtChave = new StringBuilder(csrt).Append(chave).ToString(); - - var data = encoding.GetBytes(csrtChave); - - string chaveBase64; - - using (SHA1CryptoServiceProvider cryptoTransformSha1 = new SHA1CryptoServiceProvider()) - { - var hash = cryptoTransformSha1.ComputeHash(data); - chaveBase64 = Convert.ToBase64String(hash); - } - - return chaveBase64; - } - } -} diff --git a/Shared.NFe.Utils/Shared.NFe.Utils.projitems b/Shared.NFe.Utils/Shared.NFe.Utils.projitems deleted file mode 100644 index 4c888e45c..000000000 --- a/Shared.NFe.Utils/Shared.NFe.Utils.projitems +++ /dev/null @@ -1,63 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - e7a4800f-b2ed-4495-b847-c4bf5654e24e - - - Shared.NFe.Utils - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Shared.NFe.Utils/Shared.NFe.Utils.shproj b/Shared.NFe.Utils/Shared.NFe.Utils.shproj deleted file mode 100644 index 5bef60409..000000000 --- a/Shared.NFe.Utils/Shared.NFe.Utils.shproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - e7a4800f-b2ed-4495-b847-c4bf5654e24e - 14.0 - SAK - SAK - SAK - SAK - - - - - - - - \ No newline at end of file diff --git a/Shared.NFe.Utils/Validacao/Validador.cs b/Shared.NFe.Utils/Validacao/Validador.cs deleted file mode 100644 index ce75cc46e..000000000 --- a/Shared.NFe.Utils/Validacao/Validador.cs +++ /dev/null @@ -1,176 +0,0 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ -using System; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Schema; -using DFe.Classes.Flags; -using DFe.Utils; -using NFe.Classes.Servicos.Evento; -using NFe.Classes.Servicos.Tipos; -using NFe.Utils.Excecoes; - -namespace NFe.Utils.Validacao -{ - public static class Validador - { - internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true) - { - switch (servicoNFe) - { - case ServicoNFe.NfeRecepcao: - return loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd"; - case ServicoNFe.RecepcaoEventoCancelmento: - var strEvento = FuncoesXml.ObterNodeDeStringXml(nameof(envEvento), stringXml); - var evento = FuncoesXml.XmlStringParaClasse(strEvento); - return evento.evento.FirstOrDefault()?.infEvento?.tpEvento == - NFeTipoEvento.TeNfeCancelamentoSubstituicao - ? "envEventoCancSubst_v1.00.xsd" - : "envEventoCancNFe_v1.00.xsd"; - case ServicoNFe.RecepcaoEventoCartaCorrecao: - return "envCCe_v1.00.xsd"; - case ServicoNFe.RecepcaoEventoEpec: - return "envEPEC_v1.00.xsd"; - case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: - return "envConfRecebto_v1.00.xsd"; - case ServicoNFe.NfeInutilizacao: - switch (versaoServico) - { - case VersaoServico.Versao200: - return "inutNFe_v2.00.xsd"; - case VersaoServico.Versao310: - return "inutNFe_v3.10.xsd"; - case VersaoServico.Versao400: - return "inutNFe_v4.00.xsd"; - } - break; - case ServicoNFe.NfeConsultaProtocolo: - switch (versaoServico) - { - case VersaoServico.Versao200: - return "consSitNFe_v2.01.xsd"; - case VersaoServico.Versao310: - return "consSitNFe_v3.10.xsd"; - case VersaoServico.Versao400: - return "consSitNFe_v4.00.xsd"; - } - break; - case ServicoNFe.NfeStatusServico: - switch (versaoServico) - { - case VersaoServico.Versao200: - return "consStatServ_v2.00.xsd"; - case VersaoServico.Versao310: - return "consStatServ_v3.10.xsd"; - case VersaoServico.Versao400: - return "consStatServ_v4.00.xsd"; - } - break; - case ServicoNFe.NFeAutorizacao: - - if (versaoServico != VersaoServico.Versao400) - { - return loteNfe ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd"; - } - - return loteNfe ? "enviNFe_v4.00.xsd" : "nfe_v4.00.xsd"; - case ServicoNFe.NfeConsultaCadastro: - return "consCad_v2.00.xsd"; - case ServicoNFe.NfeDownloadNF: - return "downloadNFe_v1.00.xsd"; - case ServicoNFe.NFeDistribuicaoDFe: - return "distDFeInt_v1.01.xsd"; // "distDFeInt_v1.00.xsd"; - } - return null; - } - - public static void Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true, ConfiguracaoServico cfgServico = null) - { - var pathSchema = String.Empty; - - if (cfgServico == null || (cfgServico != null && string.IsNullOrWhiteSpace(cfgServico.DiretorioSchemas))) - pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas; - else - pathSchema = cfgServico.DiretorioSchemas; - - Valida(servicoNFe, versaoServico, stringXml, loteNfe, pathSchema); - } - - public static void Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true, string pathSchema = null) - { - if (!Directory.Exists(pathSchema)) - throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); - - var arquivoSchema = Path.Combine(pathSchema, ObterArquivoSchema(servicoNFe, versaoServico, stringXml, loteNfe)); - - // Define o tipo de validação - var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; - - // Carrega o arquivo de esquema - var schemas = new XmlSchemaSet(); - schemas.XmlResolver = new XmlUrlResolver(); - - cfg.Schemas = schemas; - // Quando carregar o eschema, especificar o namespace que ele valida - // e a localização do arquivo - schemas.Add(null, arquivoSchema); - // Especifica o tratamento de evento para os erros de validacao - cfg.ValidationEventHandler += ValidationEventHandler; - // cria um leitor para validação - var validator = XmlReader.Create(new StringReader(stringXml), cfg); - try - { - // Faz a leitura de todos os dados XML - while (validator.Read()) - { - } - } - catch (XmlException err) - { - // Um erro ocorre se o documento XML inclui caracteres ilegais - // ou tags que não estão aninhadas corretamente - throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + err.Message); - } - finally - { - validator.Close(); - } - } - - internal static void ValidationEventHandler(object sender, ValidationEventArgs args) - { - throw new ValidacaoSchemaException(args.Message); - } - } -} \ No newline at end of file diff --git a/Shared.NFe.Wsdl/Shared.NFe.Wsdl.shproj b/Shared.NFe.Wsdl/Shared.NFe.Wsdl.shproj index 74272a82e..c52546cc4 100644 --- a/Shared.NFe.Wsdl/Shared.NFe.Wsdl.shproj +++ b/Shared.NFe.Wsdl/Shared.NFe.Wsdl.shproj @@ -3,6 +3,10 @@ 148e0e11-3fe5-4bf7-a64f-b919a0a8d9ba 14.0 + SAK + SAK + SAK + SAK diff --git a/Zeus NFe.sln b/Zeus NFe.sln index 08000b2ca..2c18b783f 100644 --- a/Zeus NFe.sln +++ b/Zeus NFe.sln @@ -1,199 +1,137 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.352 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32328.378 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Classes", "NFe.Classes\NFe.Classes.csproj", "{29CA1DA2-440D-484B-951A-CF1B2EB27984}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Utils", "NFe.Utils\NFe.Utils.csproj", "{E35E7C4A-5690-4979-8B43-002975B48EAA}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.AppTeste", "NFe.AppTeste\NFe.AppTeste.csproj", "{BB030128-9609-46D5-941C-1F53D95157E2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Servicos", "NFe.Servicos\NFe.Servicos.csproj", "{CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Wsdl", "NFe.Wsdl\NFe.Wsdl.csproj", "{23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Integracao", "NFe.Integracao\NFe.Integracao.csproj", "{DD441D1C-1F4A-4631-AA72-015C4FA735D2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Danfe.Base", "NFe.Danfe.Base\NFe.Danfe.Base.csproj", "{80C6093C-47D5-41A1-9FA0-E218E82FA666}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Danfe.Fast", "NFe.Danfe.Fast\NFe.Danfe.Fast.csproj", "{B7F6A2FF-FD0E-4B44-82B3-371605CD0510}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Danfe.AppTeste", "NFe.Danfe.AppTeste\NFe.Danfe.AppTeste.csproj", "{DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MDFe", "MDFe", "{08D2F8D6-1E89-4414-80F5-3607D3174879}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Classes", "MDFe.Classes\MDFe.Classes.csproj", "{9794CB98-4691-4218-A127-C573C2E7FF83}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DFe.Classes", "DFe.Classes\DFe.Classes.csproj", "{9984EC15-18E1-4A87-B4DB-18AC913DC4E8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.AppTeste", "MDFe.AppTeste\MDFe.AppTeste.csproj", "{8994DDA1-E36B-40E5-9F98-C0C75CC61971}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DFe.Utils", "DFe.Utils\DFe.Utils.csproj", "{B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MDFe.Damdfe.Base", "MDFe.Damdfe.Base\MDFe.Damdfe.Base.csproj", "{2419900B-1E90-4181-9338-3E84237C3B00}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.AppTeste", "MDFe.AppTeste\MDFe.AppTeste.csproj", "{8994DDA1-E36B-40E5-9F98-C0C75CC61971}" - ProjectSection(ProjectDependencies) = postProject - {81B3BC65-A499-4E19-8AB4-09C6D874C540} = {81B3BC65-A499-4E19-8AB4-09C6D874C540} - {9587937A-A826-4785-9D1E-3A9F4A622B7C} = {9587937A-A826-4785-9D1E-3A9F4A622B7C} - {9C0678EB-78F2-49C6-91BF-38148FC37FBB} = {9C0678EB-78F2-49C6-91BF-38148FC37FBB} - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Damdfe.AppTeste", "MDFe.Damdfe.AppTeste\MDFe.Damdfe.AppTeste.csproj", "{E34320D9-C822-41CF-B11D-C4B64001748B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Utils", "MDFe.Utils\MDFe.Utils.csproj", "{9C0678EB-78F2-49C6-91BF-38148FC37FBB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.Nativo", "NFe.Danfe.Nativo\NFe.Danfe.Nativo.csproj", "{BA27D218-484B-4F08-BAB9-38C02181BDED}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Servicos", "MDFe.Servicos\MDFe.Servicos.csproj", "{9587937A-A826-4785-9D1E-3A9F4A622B7C}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CTe", "CTe", "{FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Wsdl", "MDFe.Wsdl\MDFe.Wsdl.csproj", "{81B3BC65-A499-4E19-8AB4-09C6D874C540}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.AppTeste", "CTe.AppTeste\CTe.AppTeste.csproj", "{47A90E97-AD65-4673-91CB-B42065E9C575}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Damdfe.Base", "MDFe.Damdfe.Base\MDFe.Damdfe.Base.csproj", "{2419900B-1E90-4181-9338-3E84237C3B00}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Dacte.Base", "CTe.Dacte.Base\CTe.Dacte.Base.csproj", "{E46ECA77-8732-4D99-9460-FA5E2CD90266}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Damdfe.Fast", "MDFe.Damdfe.Fast\MDFe.Damdfe.Fast.csproj", "{730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Dacte.Fast", "CTe.Dacte.Fast\CTe.Dacte.Fast.csproj", "{1D58CBBD-56A5-4A10-8DAB-F795D35150EE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDFe.Damdfe.AppTeste", "MDFe.Damdfe.AppTeste\MDFe.Damdfe.AppTeste.csproj", "{E34320D9-C822-41CF-B11D-C4B64001748B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Dacte.AppTeste", "CTe.Dacte.AppTeste\CTe.Dacte.AppTeste.csproj", "{827FA496-0F49-4E93-8CE9-2246CCD353B8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Danfe.Nativo", "NFe.Danfe.Nativo\NFe.Danfe.Nativo.csproj", "{BA27D218-484B-4F08-BAB9-38C02181BDED}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Teste", "Teste", "{164EF13E-7F27-4BC8-92A4-A82B1696B279}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GraphicsPrinter", "GraphicsPrinter\GraphicsPrinter.csproj", "{3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NFe", "NFe", "{F981A8AC-E660-492B-8BF3-CBF70B66E392}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CTe", "CTe", "{FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Danfe", "Danfe", "{003B008B-F388-4FB5-A081-12C0FBA84B57}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Classes", "CTe.Classes\CTe.Classes.csproj", "{C86E3921-F0B8-4BFE-9EF1-0E9084326B13}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Servicos", "CTe.Servicos\CTe.Servicos.csproj", "{63227402-2B1E-4BC7-A6DF-362129923CF6}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{3960070E-93C9-4852-8A53-F4918D602782}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Wsdl", "CTe.Wsdl\CTe.Wsdl.csproj", "{9CC914F9-4C3E-43BB-A34B-A12AE4923548}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Utils.Testes", "NFe.Utils.Testes\NFe.Utils.Testes.csproj", "{10E0CB25-B295-4624-BF3D-CA038B73CCCA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Utils", "CTe.Utils\CTe.Utils.csproj", "{21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_devTools", "_devTools", "{8842FA42-398D-4C33-B31E-47B264DADF71}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.AppTeste", "CTe.AppTeste\CTe.AppTeste.csproj", "{47A90E97-AD65-4673-91CB-B42065E9C575}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dev.VersaoAssemblies", "Dev.VersaoAssemblies\Dev.VersaoAssemblies.csproj", "{35429D4D-65DF-47F5-93BE-BFBF35FBBF3B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Dacte.Base", "CTe.Dacte.Base\CTe.Dacte.Base.csproj", "{E46ECA77-8732-4D99-9460-FA5E2CD90266}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.AppTeste.NetCore", "CTe.AppTeste.NetCore\CTe.AppTeste.NetCore.csproj", "{2A3716B4-785B-44F2-8FF6-423FCDFA2CBB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Dacte.Fast", "CTe.Dacte.Fast\CTe.Dacte.Fast.csproj", "{1D58CBBD-56A5-4A10-8DAB-F795D35150EE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.AppTeste.NetCore", "NFe.AppTeste.NetCore\NFe.AppTeste.NetCore.csproj", "{9AF035D9-CFEE-4763-92EB-1741C51306F3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTe.Dacte.AppTeste", "CTe.Dacte.AppTeste\CTe.Dacte.AppTeste.csproj", "{827FA496-0F49-4E93-8CE9-2246CCD353B8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DFe.Classes", "DFe.Classes\DFe.Classes.csproj", "{A08CE194-9780-493D-A758-D5B3F44BD208}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testes", "testes", "{164EF13E-7F27-4BC8-92A4-A82B1696B279}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DFe.Utils", "DFe.Utils\DFe.Utils.csproj", "{97F3C222-FD10-488A-812B-E514C3A8863C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Testes", "NFe.Testes\NFe.Testes.csproj", "{3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DFe.Wsdl", "DFe.Wsdl\DFe.Wsdl.csproj", "{55A376CA-056E-434E-B6E7-7227217C88D7}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Classes", "Shared.NFe.Classes\Shared.NFe.Classes.shproj", "{4CC78350-9E01-465A-AC60-E31A53CEFE24}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Classes", "CTe.Classes\CTe.Classes.csproj", "{FC15197F-4F76-47D4-839E-0F442E1D47CE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Classes.Standard", "NFe.Classes.Standard\NFe.Classes.Standard.csproj", "{744D38A4-773E-4EA3-9DAB-30394AD65678}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Utils", "CTe.Utils\CTe.Utils.csproj", "{63C33FD7-81D5-4016-A8E9-656266E922B2}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.DFe.Classes", "Shared.DFe.Classes\Shared.DFe.Classes.shproj", "{3108968D-D505-4365-966F-BBE3CBF63C35}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Wsdl", "CTe.Wsdl\CTe.Wsdl.csproj", "{3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.DFe.Utils", "Shared.DFe.Utils\Shared.DFe.Utils.shproj", "{E1888E9E-0273-40CB-A569-2AD023907140}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Servicos", "CTe.Servicos\CTe.Servicos.csproj", "{772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NFe", "NFe", "{F981A8AC-E660-492B-8BF3-CBF70B66E392}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MDFe.Classes", "MDFe.Classes\MDFe.Classes.csproj", "{436A0BCB-3866-4969-A129-CFA03C194E1F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Danfe", "Danfe", "{003B008B-F388-4FB5-A081-12C0FBA84B57}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MDFe.Utils", "MDFe.Utils\MDFe.Utils.csproj", "{657E6E65-A138-416C-9A60-D366E68D9B6D}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MDFe.Servicos", "MDFe.Servicos\MDFe.Servicos.csproj", "{6022BBA9-15BF-4CE3-B223-90B167F053D7}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{3960070E-93C9-4852-8A53-F4918D602782}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MDFe.Wsdl", "MDFe.Wsdl\MDFe.Wsdl.csproj", "{6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A802BD59-CC36-4CB1-95B1-64CD72E1DC0C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Classes", "NFe.Classes\NFe.Classes.csproj", "{075A79C1-B038-46A8-8895-0A9753273B31}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Servicos", "Shared.NFe.Servicos\Shared.NFe.Servicos.shproj", "{57631341-C61B-49C6-A6ED-317EC42B1581}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Utils", "NFe.Utils\NFe.Utils.csproj", "{3E75202B-5AAD-4F07-98B5-46B106678CA7}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Utils", "Shared.NFe.Utils\Shared.NFe.Utils.shproj", "{E7A4800F-B2ED-4495-B847-C4BF5654E24E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Servicos", "NFe.Servicos\NFe.Servicos.csproj", "{DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Utils.Testes", "NFe.Utils.Testes\NFe.Utils.Testes.csproj", "{10E0CB25-B295-4624-BF3D-CA038B73CCCA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.Base", "NFe.Danfe.Base\NFe.Danfe.Base.csproj", "{7696CC7F-83B7-434A-9759-4FCACC2FD483}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_devTools", "_devTools", "{8842FA42-398D-4C33-B31E-47B264DADF71}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.Fast", "NFe.Danfe.Fast\NFe.Danfe.Fast.csproj", "{B2462A15-B00D-4E4F-98E6-F1F7470507E5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dev.VersaoAssemblies", "Dev.VersaoAssemblies\Dev.VersaoAssemblies.csproj", "{35429D4D-65DF-47F5-93BE-BFBF35FBBF3B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Wsdl", "NFe.Wsdl\NFe.Wsdl.csproj", "{23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.DFe.Wsdl", "Shared.DFe.Wsdl\Shared.DFe.Wsdl.shproj", "{8A90A3F4-D280-4B2B-B4FF-0DC110411BB6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Wsdl.Standard", "NFe.Wsdl.Standard\NFe.Wsdl.Standard.csproj", "{D60FC037-849E-454F-8BED-8B3B349B13D8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DFe.Wsdl", "DFe.Wsdl\DFe.Wsdl.csproj", "{DBEE88E7-6003-436E-9810-9ACC662F5851}" +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Wsdl", "Shared.NFe.Wsdl\Shared.NFe.Wsdl.shproj", "{148E0E11-3FE5-4BF7-A64F-B919A0A8D9BA}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.CTe.Wsdl", "Shared.CTe.Wsdl\Shared.CTe.Wsdl.shproj", "{EDA9F90E-7E03-4869-B341-E56071F70E06}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MDFe.Damdfe.Fast", "MDFe.Damdfe.Fast\MDFe.Damdfe.Fast.csproj", "{B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Wsdl.Standard", "CTe.Wsdl.Standard\CTe.Wsdl.Standard.csproj", "{F22F5C86-F71F-4E67-BBB7-7F0E837282DD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DFe.Testes", "DFe.Testes\DFe.Testes.csproj", "{700D882F-E19C-41B1-A49E-1D35BC9924BA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DFe.Wsdl.Standard", "DFe.Wsdl.Standard\DFe.Wsdl.Standard.csproj", "{2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Damdfe", "Damdfe", "{1664C93C-730D-40B3-8257-B652B26F7EE8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DFe.Classes.Standard", "DFe.Classes.Standard\DFe.Classes.Standard.csproj", "{9A3D6D38-3579-472F-B406-4723C9A72E08}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dacte", "Dacte", "{E29EDD3B-9F68-4F8D-9E38-0E0E38942E4A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DFe.Utils.Standard", "DFe.Utils.Standard\DFe.Utils.Standard.csproj", "{8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{AFB3AAC0-E3CE-4DF9-8D52-D958FFADF126}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.CTe.Classes", "Shared.CTe.Classes\Shared.CTe.Classes.shproj", "{DA95F515-5EED-4A7E-B711-F3B499629DF5}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{F841431C-E84B-4B4A-9CAA-515BCAAB4648}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Classes.Standard", "CTe.Classes.Standard\CTe.Classes.Standard.csproj", "{46314F7C-49D9-4165-B3CF-15741AA14CF1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.OpenFast", "NFe.Danfe.OpenFast\NFe.Danfe.OpenFast.csproj", "{D256DE50-DEF8-4076-997D-CB599F9161D3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Utils.Standard", "CTe.Utils.Standard\CTe.Utils.Standard.csproj", "{E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}" +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Danfe", "Shared.NFe.Danfe\Shared.NFe.Danfe.shproj", "{5794AB8A-FF29-4F55-ABC2-9AAFE333BD27}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.CTe.Utils", "Shared.CTe.Utils\Shared.CTe.Utils.shproj", "{D4EA4E8B-C0C9-4460-90E6-8CCCFC28B005}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Danfe.AppTeste.Fast", "NFe.Danfe.AppTeste.Fast\NFe.Danfe.AppTeste.Fast.csproj", "{DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.CTe.Servicos", "Shared.CTe.Servicos\Shared.CTe.Servicos.shproj", "{AB5F2A04-A1CF-4D42-8B26-38EBEBC8319B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.AppTeste.OpenFast", "NFe.Danfe.AppTeste.OpenFast\NFe.Danfe.AppTeste.OpenFast.csproj", "{81CCEE73-EE9A-4A7D-899D-A55730E4A60B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Servicos.Standard", "CTe.Servicos.Standard\CTe.Servicos.Standard.csproj", "{4DFCA6F0-9892-42DB-A0AE-C833B6071A15}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MDFe.Damdfe.OpenFast", "MDFe.Damdfe.OpenFast\MDFe.Damdfe.OpenFast.csproj", "{55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.AppTeste.NetCore", "CTe.AppTeste.NetCore\CTe.AppTeste.NetCore.csproj", "{2A3716B4-785B-44F2-8FF6-423FCDFA2CBB}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{0AFEB550-56BB-449B-BB3A-0625167B4669}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.AppTeste.NetCore", "NFe.AppTeste.NetCore\NFe.AppTeste.NetCore.csproj", "{9AF035D9-CFEE-4763-92EB-1741C51306F3}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AppTeste", "AppTeste", "{97A82A0A-A574-452D-9D89-C6F0840DDDB8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Servicos.Standard", "NFe.Servicos.Standard\NFe.Servicos.Standard.csproj", "{9DC6C14C-FB0E-4B49-9D85-5D41991884FF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTe.Dacte.OpenFast", "CTe.Dacte.OpenFast\CTe.Dacte.OpenFast.csproj", "{2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Utils.Standard", "NFe.Utils.Standard\NFe.Utils.Standard.csproj", "{2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.Fast.Skia", "NFe.Danfe.Fast.Skia\NFe.Danfe.Fast.Skia.csproj", "{7F95E157-C567-451F-A250-9645BE3F9497}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Wsdl.Standard", "NFe.Wsdl.Standard\NFe.Wsdl.Standard.csproj", "{D4F45208-4A4B-43C0-8640-F338C1DA9699}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.Html", "NFe.Danfe.Html\NFe.Danfe.Html.csproj", "{3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Wsdl", "Shared.NFe.Wsdl\Shared.NFe.Wsdl.shproj", "{148E0E11-3FE5-4BF7-A64F-B919A0A8D9BA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.App.Teste.Html", "NFe.Danfe.App.Teste.Html\NFe.Danfe.App.Teste.Html.csproj", "{18429710-19E2-480F-8B3A-39FB6FC7AF19}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.Base.Standard", "NFe.Danfe.Base.Standard\NFe.Danfe.Base.Standard.csproj", "{71C6A4F1-1DF7-4558-A4CF-53699434C6AC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.PdfClown", "NFe.Danfe.PdfClown\NFe.Danfe.PdfClown.csproj", "{2A235861-B8FC-463A-A774-0C179529881A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{F367DB7F-2170-48C6-9966-D6F9DF1808DB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.QuestPdf", "NFe.Danfe.QuestPdf\NFe.Danfe.QuestPdf.csproj", "{C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Danfe.Base", "Shared.NFe.Danfe.Base\Shared.NFe.Danfe.Base.shproj", "{7BC87AF1-49FC-4822-ADDF-6B9B461B0ADC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Classes.Testes", "NFe.Classes.Testes\NFe.Classes.Testes.csproj", "{7A6BAFEA-D159-41CD-A706-EF05E17914E3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.Fast.Standard", "NFe.Danfe.Fast.Standard\NFe.Danfe.Fast.Standard.csproj", "{637870E1-DF27-43CD-B771-3685E3D0BE01}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DadosDeTestes", "DadosDeTestes\DadosDeTestes.csproj", "{9E2125F8-2367-444A-B5D5-B7C61FCB456B}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared.NFe.Danfe.Fast", "Shared.NFe.Danfe.Fast\Shared.NFe.Danfe.Fast.shproj", "{5794AB8A-FF29-4F55-ABC2-9AAFE333BD27}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Danfe.AppTeste.PdfClown", "NFe.Danfe.AppTeste.PdfClown\NFe.Danfe.AppTeste.PdfClown.csproj", "{60EEDECD-F064-4751-82D9-FCE07FFC8EC1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NFe.Danfe.AppTeste.NetCore", "NFe.Danfe.AppTeste.NetCore\NFe.Danfe.AppTeste.NetCore.csproj", "{0999204F-594C-4996-88A2-93D015EBDE33}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFe.Danfe.AppTeste.QuestPdf", "NFe.Danfe.AppTeste.QuestPdf\NFe.Danfe.AppTeste.QuestPdf.csproj", "{F1983240-E8C8-2BAD-5588-DC75E719E5F0}" EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - Shared.NFe.Wsdl\Shared.NFe.Wsdl.projitems*{148e0e11-3fe5-4bf7-a64f-b919a0a8d9ba}*SharedItemsImports = 13 - Shared.CTe.Utils\Shared.CTe.Utils.projitems*{21a894ec-b79e-4936-bff3-abead2e5c44f}*SharedItemsImports = 4 - Shared.NFe.Wsdl\Shared.NFe.Wsdl.projitems*{23ba5fa7-8bd6-4ae1-9895-54f119dd15fa}*SharedItemsImports = 4 - Shared.NFe.Classes\Shared.NFe.Classes.projitems*{29ca1da2-440d-484b-951a-cf1b2eb27984}*SharedItemsImports = 4 - Shared.NFe.Utils\Shared.NFe.Utils.projitems*{2cea538f-d827-4fa2-ba16-3e9e08d8e9a1}*SharedItemsImports = 5 - Shared.DFe.Wsdl\Shared.DFe.Wsdl.projitems*{2ea17efc-7e97-47c3-90c7-3cad286d61ac}*SharedItemsImports = 5 - Shared.DFe.Classes\Shared.DFe.Classes.projitems*{3108968d-d505-4365-966f-bbe3cbf63c35}*SharedItemsImports = 13 - Shared.CTe.Classes\Shared.CTe.Classes.projitems*{46314f7c-49d9-4165-b3cf-15741aa14cf1}*SharedItemsImports = 5 - Shared.NFe.Classes\Shared.NFe.Classes.projitems*{4cc78350-9e01-465a-ac60-e31a53cefe24}*SharedItemsImports = 13 - Shared.CTe.Servicos\Shared.CTe.Servicos.projitems*{4dfca6f0-9892-42db-a0ae-c833b6071a15}*SharedItemsImports = 5 - Shared.NFe.Servicos\Shared.NFe.Servicos.projitems*{57631341-c61b-49c6-a6ed-317ec42b1581}*SharedItemsImports = 13 - Shared.NFe.Danfe.Fast\Shared.NFe.Danfe.Fast.projitems*{5794ab8a-ff29-4f55-abc2-9aafe333bd27}*SharedItemsImports = 13 - Shared.CTe.Servicos\Shared.CTe.Servicos.projitems*{63227402-2b1e-4bc7-a6df-362129923cf6}*SharedItemsImports = 4 - Shared.NFe.Danfe.Fast\Shared.NFe.Danfe.Fast.projitems*{637870e1-df27-43cd-b771-3685e3d0be01}*SharedItemsImports = 5 - Shared.NFe.Danfe.Base\Shared.NFe.Danfe.Base.projitems*{71c6a4f1-1df7-4558-a4cf-53699434c6ac}*SharedItemsImports = 5 - Shared.NFe.Classes\Shared.NFe.Classes.projitems*{744d38a4-773e-4ea3-9dab-30394ad65678}*SharedItemsImports = 5 - Shared.NFe.Danfe.Base\Shared.NFe.Danfe.Base.projitems*{7bc87af1-49fc-4822-addf-6b9b461b0adc}*SharedItemsImports = 13 - Shared.NFe.Danfe.Base\Shared.NFe.Danfe.Base.projitems*{80c6093c-47d5-41a1-9fa0-e218e82fa666}*SharedItemsImports = 4 - Shared.DFe.Wsdl\Shared.DFe.Wsdl.projitems*{8a90a3f4-d280-4b2b-b4ff-0dc110411bb6}*SharedItemsImports = 13 - Shared.DFe.Utils\Shared.DFe.Utils.projitems*{8d5ca088-ef4b-42f5-86e3-52cb6083c9ef}*SharedItemsImports = 5 - Shared.DFe.Classes\Shared.DFe.Classes.projitems*{9984ec15-18e1-4a87-b4db-18ac913dc4e8}*SharedItemsImports = 4 - Shared.DFe.Classes\Shared.DFe.Classes.projitems*{9a3d6d38-3579-472f-b406-4723c9a72e08}*SharedItemsImports = 5 - Shared.CTe.Wsdl\Shared.CTe.Wsdl.projitems*{9cc914f9-4c3e-43bb-a34b-a12ae4923548}*SharedItemsImports = 4 - Shared.NFe.Servicos\Shared.NFe.Servicos.projitems*{9dc6c14c-fb0e-4b49-9d85-5d41991884ff}*SharedItemsImports = 5 - Shared.CTe.Servicos\Shared.CTe.Servicos.projitems*{ab5f2a04-a1cf-4d42-8b26-38ebebc8319b}*SharedItemsImports = 13 - Shared.DFe.Utils\Shared.DFe.Utils.projitems*{b4e1a7a6-5d66-4326-8a8d-39338e6fc84c}*SharedItemsImports = 4 - Shared.NFe.Danfe.Fast\Shared.NFe.Danfe.Fast.projitems*{b7f6a2ff-fd0e-4b44-82b3-371605cd0510}*SharedItemsImports = 4 - Shared.CTe.Classes\Shared.CTe.Classes.projitems*{c86e3921-f0b8-4bfe-9ef1-0e9084326b13}*SharedItemsImports = 4 - Shared.NFe.Servicos\Shared.NFe.Servicos.projitems*{ccfdb136-3ee3-4aed-aa69-26abbcb553c6}*SharedItemsImports = 4 - Shared.CTe.Utils\Shared.CTe.Utils.projitems*{d4ea4e8b-c0c9-4460-90e6-8cccfc28b005}*SharedItemsImports = 13 - Shared.NFe.Wsdl\Shared.NFe.Wsdl.projitems*{d4f45208-4a4b-43c0-8640-f338c1da9699}*SharedItemsImports = 5 - Shared.CTe.Classes\Shared.CTe.Classes.projitems*{da95f515-5eed-4a7e-b711-f3b499629df5}*SharedItemsImports = 13 - Shared.DFe.Wsdl\Shared.DFe.Wsdl.projitems*{dbee88e7-6003-436e-9810-9acc662f5851}*SharedItemsImports = 4 - Shared.CTe.Utils\Shared.CTe.Utils.projitems*{e06b0d39-2ba8-4ac8-9b58-4c3f0e73128c}*SharedItemsImports = 5 - Shared.DFe.Utils\Shared.DFe.Utils.projitems*{e1888e9e-0273-40cb-a569-2ad023907140}*SharedItemsImports = 13 - Shared.NFe.Utils\Shared.NFe.Utils.projitems*{e35e7c4a-5690-4979-8b43-002975b48eaa}*SharedItemsImports = 4 - Shared.NFe.Utils\Shared.NFe.Utils.projitems*{e7a4800f-b2ed-4495-b847-c4bf5654e24e}*SharedItemsImports = 13 - Shared.CTe.Wsdl\Shared.CTe.Wsdl.projitems*{eda9f90e-7e03-4869-b341-e56071f70e06}*SharedItemsImports = 13 - Shared.CTe.Wsdl\Shared.CTe.Wsdl.projitems*{f22f5c86-f71f-4e67-bbb7-7f0e837282dd}*SharedItemsImports = 5 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 @@ -201,22 +139,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Debug|Any CPU.Build.0 = Debug|Any CPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Debug|x86.ActiveCfg = Debug|Any CPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Debug|x86.Build.0 = Debug|Any CPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Release|Any CPU.ActiveCfg = Release|Any CPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Release|Any CPU.Build.0 = Release|Any CPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Release|x86.ActiveCfg = Release|Any CPU - {29CA1DA2-440D-484B-951A-CF1B2EB27984}.Release|x86.Build.0 = Release|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Debug|x86.ActiveCfg = Debug|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Debug|x86.Build.0 = Debug|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Release|Any CPU.Build.0 = Release|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Release|x86.ActiveCfg = Release|Any CPU - {E35E7C4A-5690-4979-8B43-002975B48EAA}.Release|x86.Build.0 = Release|Any CPU {BB030128-9609-46D5-941C-1F53D95157E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BB030128-9609-46D5-941C-1F53D95157E2}.Debug|Any CPU.Build.0 = Debug|Any CPU {BB030128-9609-46D5-941C-1F53D95157E2}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -225,22 +147,6 @@ Global {BB030128-9609-46D5-941C-1F53D95157E2}.Release|Any CPU.Build.0 = Release|Any CPU {BB030128-9609-46D5-941C-1F53D95157E2}.Release|x86.ActiveCfg = Release|Any CPU {BB030128-9609-46D5-941C-1F53D95157E2}.Release|x86.Build.0 = Release|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Debug|x86.ActiveCfg = Debug|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Debug|x86.Build.0 = Debug|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Release|Any CPU.Build.0 = Release|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Release|x86.ActiveCfg = Release|Any CPU - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6}.Release|x86.Build.0 = Release|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|x86.ActiveCfg = Debug|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|x86.Build.0 = Debug|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|Any CPU.Build.0 = Release|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|x86.ActiveCfg = Release|Any CPU - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|x86.Build.0 = Release|Any CPU {DD441D1C-1F4A-4631-AA72-015C4FA735D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD441D1C-1F4A-4631-AA72-015C4FA735D2}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD441D1C-1F4A-4631-AA72-015C4FA735D2}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -249,54 +155,6 @@ Global {DD441D1C-1F4A-4631-AA72-015C4FA735D2}.Release|Any CPU.Build.0 = Release|Any CPU {DD441D1C-1F4A-4631-AA72-015C4FA735D2}.Release|x86.ActiveCfg = Release|Any CPU {DD441D1C-1F4A-4631-AA72-015C4FA735D2}.Release|x86.Build.0 = Release|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Debug|x86.ActiveCfg = Debug|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Debug|x86.Build.0 = Debug|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Release|Any CPU.Build.0 = Release|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Release|x86.ActiveCfg = Release|Any CPU - {80C6093C-47D5-41A1-9FA0-E218E82FA666}.Release|x86.Build.0 = Release|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Debug|x86.ActiveCfg = Debug|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Debug|x86.Build.0 = Debug|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Release|Any CPU.Build.0 = Release|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Release|x86.ActiveCfg = Release|Any CPU - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510}.Release|x86.Build.0 = Release|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|x86.ActiveCfg = Debug|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|x86.Build.0 = Debug|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|Any CPU.Build.0 = Release|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|x86.ActiveCfg = Release|Any CPU - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|x86.Build.0 = Release|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Debug|x86.ActiveCfg = Debug|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Debug|x86.Build.0 = Debug|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Release|Any CPU.Build.0 = Release|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Release|x86.ActiveCfg = Release|Any CPU - {9794CB98-4691-4218-A127-C573C2E7FF83}.Release|x86.Build.0 = Release|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Debug|x86.ActiveCfg = Debug|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Debug|x86.Build.0 = Debug|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Release|Any CPU.Build.0 = Release|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Release|x86.ActiveCfg = Release|Any CPU - {9984EC15-18E1-4A87-B4DB-18AC913DC4E8}.Release|x86.Build.0 = Release|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Debug|x86.ActiveCfg = Debug|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Debug|x86.Build.0 = Debug|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Release|Any CPU.Build.0 = Release|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Release|x86.ActiveCfg = Release|Any CPU - {B4E1A7A6-5D66-4326-8A8D-39338E6FC84C}.Release|x86.Build.0 = Release|Any CPU {8994DDA1-E36B-40E5-9F98-C0C75CC61971}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8994DDA1-E36B-40E5-9F98-C0C75CC61971}.Debug|Any CPU.Build.0 = Debug|Any CPU {8994DDA1-E36B-40E5-9F98-C0C75CC61971}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -305,30 +163,6 @@ Global {8994DDA1-E36B-40E5-9F98-C0C75CC61971}.Release|Any CPU.Build.0 = Release|Any CPU {8994DDA1-E36B-40E5-9F98-C0C75CC61971}.Release|x86.ActiveCfg = Release|Any CPU {8994DDA1-E36B-40E5-9F98-C0C75CC61971}.Release|x86.Build.0 = Release|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Debug|x86.ActiveCfg = Debug|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Debug|x86.Build.0 = Debug|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Release|Any CPU.Build.0 = Release|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Release|x86.ActiveCfg = Release|Any CPU - {9C0678EB-78F2-49C6-91BF-38148FC37FBB}.Release|x86.Build.0 = Release|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Debug|x86.ActiveCfg = Debug|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Debug|x86.Build.0 = Debug|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Release|Any CPU.Build.0 = Release|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Release|x86.ActiveCfg = Release|Any CPU - {9587937A-A826-4785-9D1E-3A9F4A622B7C}.Release|x86.Build.0 = Release|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Debug|x86.ActiveCfg = Debug|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Debug|x86.Build.0 = Debug|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Release|Any CPU.Build.0 = Release|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Release|x86.ActiveCfg = Release|Any CPU - {81B3BC65-A499-4E19-8AB4-09C6D874C540}.Release|x86.Build.0 = Release|Any CPU {2419900B-1E90-4181-9338-3E84237C3B00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2419900B-1E90-4181-9338-3E84237C3B00}.Debug|Any CPU.Build.0 = Debug|Any CPU {2419900B-1E90-4181-9338-3E84237C3B00}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -337,14 +171,6 @@ Global {2419900B-1E90-4181-9338-3E84237C3B00}.Release|Any CPU.Build.0 = Release|Any CPU {2419900B-1E90-4181-9338-3E84237C3B00}.Release|x86.ActiveCfg = Release|Any CPU {2419900B-1E90-4181-9338-3E84237C3B00}.Release|x86.Build.0 = Release|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Debug|x86.ActiveCfg = Debug|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Debug|x86.Build.0 = Debug|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Release|Any CPU.Build.0 = Release|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Release|x86.ActiveCfg = Release|Any CPU - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A}.Release|x86.Build.0 = Release|Any CPU {E34320D9-C822-41CF-B11D-C4B64001748B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E34320D9-C822-41CF-B11D-C4B64001748B}.Debug|Any CPU.Build.0 = Debug|Any CPU {E34320D9-C822-41CF-B11D-C4B64001748B}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -361,46 +187,6 @@ Global {BA27D218-484B-4F08-BAB9-38C02181BDED}.Release|Any CPU.Build.0 = Release|Any CPU {BA27D218-484B-4F08-BAB9-38C02181BDED}.Release|x86.ActiveCfg = Release|Any CPU {BA27D218-484B-4F08-BAB9-38C02181BDED}.Release|x86.Build.0 = Release|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Debug|x86.ActiveCfg = Debug|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Debug|x86.Build.0 = Debug|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Release|Any CPU.Build.0 = Release|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Release|x86.ActiveCfg = Release|Any CPU - {3067EFCC-91DE-48EA-8F7E-E0D95216C6DC}.Release|x86.Build.0 = Release|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Debug|x86.ActiveCfg = Debug|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Debug|x86.Build.0 = Debug|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Release|Any CPU.Build.0 = Release|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Release|x86.ActiveCfg = Release|Any CPU - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13}.Release|x86.Build.0 = Release|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Debug|x86.ActiveCfg = Debug|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Debug|x86.Build.0 = Debug|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Release|Any CPU.Build.0 = Release|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Release|x86.ActiveCfg = Release|Any CPU - {63227402-2B1E-4BC7-A6DF-362129923CF6}.Release|x86.Build.0 = Release|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Debug|x86.ActiveCfg = Debug|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Debug|x86.Build.0 = Debug|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Release|Any CPU.Build.0 = Release|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Release|x86.ActiveCfg = Release|Any CPU - {9CC914F9-4C3E-43BB-A34B-A12AE4923548}.Release|x86.Build.0 = Release|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Debug|x86.ActiveCfg = Debug|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Debug|x86.Build.0 = Debug|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Release|Any CPU.Build.0 = Release|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Release|x86.ActiveCfg = Release|Any CPU - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F}.Release|x86.Build.0 = Release|Any CPU {47A90E97-AD65-4673-91CB-B42065E9C575}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47A90E97-AD65-4673-91CB-B42065E9C575}.Debug|Any CPU.Build.0 = Debug|Any CPU {47A90E97-AD65-4673-91CB-B42065E9C575}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -433,22 +219,6 @@ Global {827FA496-0F49-4E93-8CE9-2246CCD353B8}.Release|Any CPU.Build.0 = Release|Any CPU {827FA496-0F49-4E93-8CE9-2246CCD353B8}.Release|x86.ActiveCfg = Release|Any CPU {827FA496-0F49-4E93-8CE9-2246CCD353B8}.Release|x86.Build.0 = Release|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Debug|x86.ActiveCfg = Debug|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Debug|x86.Build.0 = Debug|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Release|Any CPU.Build.0 = Release|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Release|x86.ActiveCfg = Release|Any CPU - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1}.Release|x86.Build.0 = Release|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Debug|Any CPU.Build.0 = Debug|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Debug|x86.ActiveCfg = Debug|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Debug|x86.Build.0 = Debug|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Release|Any CPU.ActiveCfg = Release|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Release|Any CPU.Build.0 = Release|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Release|x86.ActiveCfg = Release|Any CPU - {744D38A4-773E-4EA3-9DAB-30394AD65678}.Release|x86.Build.0 = Release|Any CPU {10E0CB25-B295-4624-BF3D-CA038B73CCCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {10E0CB25-B295-4624-BF3D-CA038B73CCCA}.Debug|Any CPU.Build.0 = Debug|Any CPU {10E0CB25-B295-4624-BF3D-CA038B73CCCA}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -465,70 +235,6 @@ Global {35429D4D-65DF-47F5-93BE-BFBF35FBBF3B}.Release|Any CPU.Build.0 = Release|Any CPU {35429D4D-65DF-47F5-93BE-BFBF35FBBF3B}.Release|x86.ActiveCfg = Release|x86 {35429D4D-65DF-47F5-93BE-BFBF35FBBF3B}.Release|x86.Build.0 = Release|x86 - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Debug|x86.ActiveCfg = Debug|Any CPU - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Debug|x86.Build.0 = Debug|Any CPU - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Release|Any CPU.Build.0 = Release|Any CPU - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Release|x86.ActiveCfg = Release|Any CPU - {DBEE88E7-6003-436E-9810-9ACC662F5851}.Release|x86.Build.0 = Release|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Debug|x86.ActiveCfg = Debug|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Debug|x86.Build.0 = Debug|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Release|Any CPU.Build.0 = Release|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Release|x86.ActiveCfg = Release|Any CPU - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD}.Release|x86.Build.0 = Release|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Debug|x86.Build.0 = Debug|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Release|Any CPU.Build.0 = Release|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Release|x86.ActiveCfg = Release|Any CPU - {2EA17EFC-7E97-47C3-90C7-3CAD286D61AC}.Release|x86.Build.0 = Release|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Debug|x86.ActiveCfg = Debug|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Debug|x86.Build.0 = Debug|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Release|Any CPU.Build.0 = Release|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Release|x86.ActiveCfg = Release|Any CPU - {9A3D6D38-3579-472F-B406-4723C9A72E08}.Release|x86.Build.0 = Release|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Debug|x86.ActiveCfg = Debug|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Debug|x86.Build.0 = Debug|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Release|Any CPU.Build.0 = Release|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Release|x86.ActiveCfg = Release|Any CPU - {8D5CA088-EF4B-42F5-86E3-52CB6083C9EF}.Release|x86.Build.0 = Release|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Debug|x86.ActiveCfg = Debug|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Debug|x86.Build.0 = Debug|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Release|Any CPU.Build.0 = Release|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Release|x86.ActiveCfg = Release|Any CPU - {46314F7C-49D9-4165-B3CF-15741AA14CF1}.Release|x86.Build.0 = Release|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Debug|x86.ActiveCfg = Debug|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Debug|x86.Build.0 = Debug|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Release|Any CPU.Build.0 = Release|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Release|x86.ActiveCfg = Release|Any CPU - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C}.Release|x86.Build.0 = Release|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Debug|x86.ActiveCfg = Debug|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Debug|x86.Build.0 = Debug|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Release|Any CPU.Build.0 = Release|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Release|x86.ActiveCfg = Release|Any CPU - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15}.Release|x86.Build.0 = Release|Any CPU {2A3716B4-785B-44F2-8FF6-423FCDFA2CBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2A3716B4-785B-44F2-8FF6-423FCDFA2CBB}.Debug|Any CPU.Build.0 = Debug|Any CPU {2A3716B4-785B-44F2-8FF6-423FCDFA2CBB}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -545,118 +251,350 @@ Global {9AF035D9-CFEE-4763-92EB-1741C51306F3}.Release|Any CPU.Build.0 = Release|Any CPU {9AF035D9-CFEE-4763-92EB-1741C51306F3}.Release|x86.ActiveCfg = Release|Any CPU {9AF035D9-CFEE-4763-92EB-1741C51306F3}.Release|x86.Build.0 = Release|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Debug|x86.ActiveCfg = Debug|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Debug|x86.Build.0 = Debug|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Release|Any CPU.Build.0 = Release|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Release|x86.ActiveCfg = Release|Any CPU - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF}.Release|x86.Build.0 = Release|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Debug|x86.Build.0 = Debug|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Release|Any CPU.Build.0 = Release|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Release|x86.ActiveCfg = Release|Any CPU - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1}.Release|x86.Build.0 = Release|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Debug|x86.ActiveCfg = Debug|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Debug|x86.Build.0 = Debug|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Release|Any CPU.Build.0 = Release|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Release|x86.ActiveCfg = Release|Any CPU - {D4F45208-4A4B-43C0-8640-F338C1DA9699}.Release|x86.Build.0 = Release|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Debug|x86.Build.0 = Debug|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Release|Any CPU.Build.0 = Release|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Release|x86.ActiveCfg = Release|Any CPU - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC}.Release|x86.Build.0 = Release|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Debug|x86.ActiveCfg = Debug|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Debug|x86.Build.0 = Debug|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Release|Any CPU.Build.0 = Release|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Release|x86.ActiveCfg = Release|Any CPU - {637870E1-DF27-43CD-B771-3685E3D0BE01}.Release|x86.Build.0 = Release|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Debug|x86.ActiveCfg = Debug|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Debug|x86.Build.0 = Debug|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Release|Any CPU.Build.0 = Release|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Release|x86.ActiveCfg = Release|Any CPU - {0999204F-594C-4996-88A2-93D015EBDE33}.Release|x86.Build.0 = Release|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Debug|x86.ActiveCfg = Debug|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Debug|x86.Build.0 = Debug|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Release|Any CPU.Build.0 = Release|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Release|x86.ActiveCfg = Release|Any CPU + {A08CE194-9780-493D-A758-D5B3F44BD208}.Release|x86.Build.0 = Release|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Debug|x86.ActiveCfg = Debug|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Debug|x86.Build.0 = Debug|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Release|Any CPU.Build.0 = Release|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Release|x86.ActiveCfg = Release|Any CPU + {97F3C222-FD10-488A-812B-E514C3A8863C}.Release|x86.Build.0 = Release|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Debug|x86.ActiveCfg = Debug|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Debug|x86.Build.0 = Debug|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Release|Any CPU.Build.0 = Release|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Release|x86.ActiveCfg = Release|Any CPU + {55A376CA-056E-434E-B6E7-7227217C88D7}.Release|x86.Build.0 = Release|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Debug|x86.ActiveCfg = Debug|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Debug|x86.Build.0 = Debug|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Release|Any CPU.Build.0 = Release|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Release|x86.ActiveCfg = Release|Any CPU + {FC15197F-4F76-47D4-839E-0F442E1D47CE}.Release|x86.Build.0 = Release|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Debug|x86.Build.0 = Debug|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Release|Any CPU.Build.0 = Release|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Release|x86.ActiveCfg = Release|Any CPU + {63C33FD7-81D5-4016-A8E9-656266E922B2}.Release|x86.Build.0 = Release|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Debug|x86.ActiveCfg = Debug|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Debug|x86.Build.0 = Debug|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Release|Any CPU.Build.0 = Release|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Release|x86.ActiveCfg = Release|Any CPU + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0}.Release|x86.Build.0 = Release|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Debug|Any CPU.Build.0 = Debug|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Debug|x86.ActiveCfg = Debug|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Debug|x86.Build.0 = Debug|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Release|Any CPU.ActiveCfg = Release|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Release|Any CPU.Build.0 = Release|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Release|x86.ActiveCfg = Release|Any CPU + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60}.Release|x86.Build.0 = Release|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Debug|x86.ActiveCfg = Debug|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Debug|x86.Build.0 = Debug|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Release|Any CPU.Build.0 = Release|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Release|x86.ActiveCfg = Release|Any CPU + {436A0BCB-3866-4969-A129-CFA03C194E1F}.Release|x86.Build.0 = Release|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Debug|x86.ActiveCfg = Debug|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Debug|x86.Build.0 = Debug|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Release|Any CPU.Build.0 = Release|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Release|x86.ActiveCfg = Release|Any CPU + {657E6E65-A138-416C-9A60-D366E68D9B6D}.Release|x86.Build.0 = Release|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Debug|x86.ActiveCfg = Debug|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Debug|x86.Build.0 = Debug|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Release|Any CPU.Build.0 = Release|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Release|x86.ActiveCfg = Release|Any CPU + {6022BBA9-15BF-4CE3-B223-90B167F053D7}.Release|x86.Build.0 = Release|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Debug|x86.ActiveCfg = Debug|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Debug|x86.Build.0 = Debug|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Release|Any CPU.Build.0 = Release|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Release|x86.ActiveCfg = Release|Any CPU + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096}.Release|x86.Build.0 = Release|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Debug|x86.ActiveCfg = Debug|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Debug|x86.Build.0 = Debug|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Release|Any CPU.Build.0 = Release|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Release|x86.ActiveCfg = Release|Any CPU + {075A79C1-B038-46A8-8895-0A9753273B31}.Release|x86.Build.0 = Release|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Debug|x86.ActiveCfg = Debug|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Debug|x86.Build.0 = Debug|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Release|Any CPU.Build.0 = Release|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Release|x86.ActiveCfg = Release|Any CPU + {3E75202B-5AAD-4F07-98B5-46B106678CA7}.Release|x86.Build.0 = Release|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Debug|x86.ActiveCfg = Debug|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Debug|x86.Build.0 = Debug|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Release|Any CPU.Build.0 = Release|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Release|x86.ActiveCfg = Release|Any CPU + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD}.Release|x86.Build.0 = Release|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Debug|x86.ActiveCfg = Debug|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Debug|x86.Build.0 = Debug|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Release|Any CPU.Build.0 = Release|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Release|x86.ActiveCfg = Release|Any CPU + {7696CC7F-83B7-434A-9759-4FCACC2FD483}.Release|x86.Build.0 = Release|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Debug|x86.ActiveCfg = Debug|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Debug|x86.Build.0 = Debug|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Release|Any CPU.Build.0 = Release|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Release|x86.ActiveCfg = Release|Any CPU + {B2462A15-B00D-4E4F-98E6-F1F7470507E5}.Release|x86.Build.0 = Release|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Debug|x86.Build.0 = Debug|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|Any CPU.Build.0 = Release|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|x86.ActiveCfg = Release|Any CPU + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA}.Release|x86.Build.0 = Release|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Debug|x86.ActiveCfg = Debug|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Debug|x86.Build.0 = Debug|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Release|Any CPU.Build.0 = Release|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Release|x86.ActiveCfg = Release|Any CPU + {D60FC037-849E-454F-8BED-8B3B349B13D8}.Release|x86.Build.0 = Release|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Debug|x86.Build.0 = Debug|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Release|Any CPU.Build.0 = Release|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Release|x86.ActiveCfg = Release|Any CPU + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC}.Release|x86.Build.0 = Release|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Debug|x86.ActiveCfg = Debug|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Debug|x86.Build.0 = Debug|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Release|Any CPU.Build.0 = Release|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Release|x86.ActiveCfg = Release|Any CPU + {700D882F-E19C-41B1-A49E-1D35BC9924BA}.Release|x86.Build.0 = Release|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Debug|x86.ActiveCfg = Debug|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Debug|x86.Build.0 = Debug|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Release|Any CPU.Build.0 = Release|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Release|x86.ActiveCfg = Release|Any CPU + {D256DE50-DEF8-4076-997D-CB599F9161D3}.Release|x86.Build.0 = Release|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|x86.ActiveCfg = Debug|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Debug|x86.Build.0 = Debug|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|Any CPU.Build.0 = Release|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|x86.ActiveCfg = Release|Any CPU + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23}.Release|x86.Build.0 = Release|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Debug|x86.ActiveCfg = Debug|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Debug|x86.Build.0 = Debug|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Release|Any CPU.Build.0 = Release|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Release|x86.ActiveCfg = Release|Any CPU + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B}.Release|x86.Build.0 = Release|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Debug|x86.ActiveCfg = Debug|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Debug|x86.Build.0 = Debug|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Release|Any CPU.Build.0 = Release|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Release|x86.ActiveCfg = Release|Any CPU + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43}.Release|x86.Build.0 = Release|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Debug|x86.ActiveCfg = Debug|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Debug|x86.Build.0 = Debug|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Release|Any CPU.Build.0 = Release|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Release|x86.ActiveCfg = Release|Any CPU + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210}.Release|x86.Build.0 = Release|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Debug|x86.ActiveCfg = Debug|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Debug|x86.Build.0 = Debug|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Release|Any CPU.Build.0 = Release|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Release|x86.ActiveCfg = Release|Any CPU + {7F95E157-C567-451F-A250-9645BE3F9497}.Release|x86.Build.0 = Release|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Debug|x86.ActiveCfg = Debug|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Debug|x86.Build.0 = Debug|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Release|Any CPU.Build.0 = Release|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Release|x86.ActiveCfg = Release|Any CPU + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C}.Release|x86.Build.0 = Release|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Debug|x86.ActiveCfg = Debug|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Debug|x86.Build.0 = Debug|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Release|Any CPU.Build.0 = Release|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Release|x86.ActiveCfg = Release|Any CPU + {18429710-19E2-480F-8B3A-39FB6FC7AF19}.Release|x86.Build.0 = Release|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Debug|x86.ActiveCfg = Debug|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Debug|x86.Build.0 = Debug|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Release|Any CPU.Build.0 = Release|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Release|x86.ActiveCfg = Release|Any CPU + {2A235861-B8FC-463A-A774-0C179529881A}.Release|x86.Build.0 = Release|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Debug|x86.ActiveCfg = Debug|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Debug|x86.Build.0 = Debug|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Release|Any CPU.Build.0 = Release|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Release|x86.ActiveCfg = Release|Any CPU + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B}.Release|x86.Build.0 = Release|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Debug|x86.ActiveCfg = Debug|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Debug|x86.Build.0 = Debug|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Release|Any CPU.Build.0 = Release|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Release|x86.ActiveCfg = Release|Any CPU + {7A6BAFEA-D159-41CD-A706-EF05E17914E3}.Release|x86.Build.0 = Release|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Debug|x86.ActiveCfg = Debug|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Debug|x86.Build.0 = Debug|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Release|Any CPU.Build.0 = Release|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Release|x86.ActiveCfg = Release|Any CPU + {9E2125F8-2367-444A-B5D5-B7C61FCB456B}.Release|x86.Build.0 = Release|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Debug|x86.ActiveCfg = Debug|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Debug|x86.Build.0 = Debug|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Release|Any CPU.Build.0 = Release|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Release|x86.ActiveCfg = Release|Any CPU + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1}.Release|x86.Build.0 = Release|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Debug|x86.ActiveCfg = Debug|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Debug|x86.Build.0 = Debug|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Release|Any CPU.Build.0 = Release|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Release|x86.ActiveCfg = Release|Any CPU + {F1983240-E8C8-2BAD-5588-DC75E719E5F0}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {29CA1DA2-440D-484B-951A-CF1B2EB27984} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {E35E7C4A-5690-4979-8B43-002975B48EAA} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} {BB030128-9609-46D5-941C-1F53D95157E2} = {3960070E-93C9-4852-8A53-F4918D602782} - {CCFDB136-3EE3-4AED-AA69-26ABBCB553C6} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} {DD441D1C-1F4A-4631-AA72-015C4FA735D2} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {80C6093C-47D5-41A1-9FA0-E218E82FA666} = {003B008B-F388-4FB5-A081-12C0FBA84B57} - {B7F6A2FF-FD0E-4B44-82B3-371605CD0510} = {003B008B-F388-4FB5-A081-12C0FBA84B57} - {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23} = {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} - {9794CB98-4691-4218-A127-C573C2E7FF83} = {08D2F8D6-1E89-4414-80F5-3607D3174879} - {8994DDA1-E36B-40E5-9F98-C0C75CC61971} = {08D2F8D6-1E89-4414-80F5-3607D3174879} - {9C0678EB-78F2-49C6-91BF-38148FC37FBB} = {08D2F8D6-1E89-4414-80F5-3607D3174879} - {9587937A-A826-4785-9D1E-3A9F4A622B7C} = {08D2F8D6-1E89-4414-80F5-3607D3174879} - {81B3BC65-A499-4E19-8AB4-09C6D874C540} = {08D2F8D6-1E89-4414-80F5-3607D3174879} - {2419900B-1E90-4181-9338-3E84237C3B00} = {08D2F8D6-1E89-4414-80F5-3607D3174879} - {730D4787-C8CF-4FA1-B9F5-DC814DBEAB7A} = {08D2F8D6-1E89-4414-80F5-3607D3174879} - {E34320D9-C822-41CF-B11D-C4B64001748B} = {08D2F8D6-1E89-4414-80F5-3607D3174879} + {8994DDA1-E36B-40E5-9F98-C0C75CC61971} = {AFB3AAC0-E3CE-4DF9-8D52-D958FFADF126} + {2419900B-1E90-4181-9338-3E84237C3B00} = {1664C93C-730D-40B3-8257-B652B26F7EE8} + {E34320D9-C822-41CF-B11D-C4B64001748B} = {97A82A0A-A574-452D-9D89-C6F0840DDDB8} {BA27D218-484B-4F08-BAB9-38C02181BDED} = {003B008B-F388-4FB5-A081-12C0FBA84B57} - {C86E3921-F0B8-4BFE-9EF1-0E9084326B13} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {63227402-2B1E-4BC7-A6DF-362129923CF6} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {9CC914F9-4C3E-43BB-A34B-A12AE4923548} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {21A894EC-B79E-4936-BFF3-ABEAD2E5C44F} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {47A90E97-AD65-4673-91CB-B42065E9C575} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {E46ECA77-8732-4D99-9460-FA5E2CD90266} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {1D58CBBD-56A5-4A10-8DAB-F795D35150EE} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {827FA496-0F49-4E93-8CE9-2246CCD353B8} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {3E44EA28-96AE-4FAC-9E38-ADC2E12930F1} = {164EF13E-7F27-4BC8-92A4-A82B1696B279} - {4CC78350-9E01-465A-AC60-E31A53CEFE24} = {A802BD59-CC36-4CB1-95B1-64CD72E1DC0C} - {744D38A4-773E-4EA3-9DAB-30394AD65678} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} + {47A90E97-AD65-4673-91CB-B42065E9C575} = {F841431C-E84B-4B4A-9CAA-515BCAAB4648} + {E46ECA77-8732-4D99-9460-FA5E2CD90266} = {E29EDD3B-9F68-4F8D-9E38-0E0E38942E4A} + {1D58CBBD-56A5-4A10-8DAB-F795D35150EE} = {E29EDD3B-9F68-4F8D-9E38-0E0E38942E4A} + {827FA496-0F49-4E93-8CE9-2246CCD353B8} = {0AFEB550-56BB-449B-BB3A-0625167B4669} {003B008B-F388-4FB5-A081-12C0FBA84B57} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} = {003B008B-F388-4FB5-A081-12C0FBA84B57} {3960070E-93C9-4852-8A53-F4918D602782} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {A802BD59-CC36-4CB1-95B1-64CD72E1DC0C} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {57631341-C61B-49C6-A6ED-317EC42B1581} = {A802BD59-CC36-4CB1-95B1-64CD72E1DC0C} - {E7A4800F-B2ED-4495-B847-C4BF5654E24E} = {A802BD59-CC36-4CB1-95B1-64CD72E1DC0C} {10E0CB25-B295-4624-BF3D-CA038B73CCCA} = {164EF13E-7F27-4BC8-92A4-A82B1696B279} {35429D4D-65DF-47F5-93BE-BFBF35FBBF3B} = {8842FA42-398D-4C33-B31E-47B264DADF71} - {EDA9F90E-7E03-4869-B341-E56071F70E06} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {F22F5C86-F71F-4E67-BBB7-7F0E837282DD} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {DA95F515-5EED-4A7E-B711-F3B499629DF5} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {46314F7C-49D9-4165-B3CF-15741AA14CF1} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {E06B0D39-2BA8-4AC8-9B58-4C3F0E73128C} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {D4EA4E8B-C0C9-4460-90E6-8CCCFC28B005} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {AB5F2A04-A1CF-4D42-8B26-38EBEBC8319B} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {4DFCA6F0-9892-42DB-A0AE-C833B6071A15} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} - {2A3716B4-785B-44F2-8FF6-423FCDFA2CBB} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} + {2A3716B4-785B-44F2-8FF6-423FCDFA2CBB} = {F841431C-E84B-4B4A-9CAA-515BCAAB4648} {9AF035D9-CFEE-4763-92EB-1741C51306F3} = {3960070E-93C9-4852-8A53-F4918D602782} - {9DC6C14C-FB0E-4B49-9D85-5D41991884FF} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {2CEA538F-D827-4FA2-BA16-3E9E08D8E9A1} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {D4F45208-4A4B-43C0-8640-F338C1DA9699} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} - {148E0E11-3FE5-4BF7-A64F-B919A0A8D9BA} = {A802BD59-CC36-4CB1-95B1-64CD72E1DC0C} - {71C6A4F1-1DF7-4558-A4CF-53699434C6AC} = {003B008B-F388-4FB5-A081-12C0FBA84B57} - {F367DB7F-2170-48C6-9966-D6F9DF1808DB} = {003B008B-F388-4FB5-A081-12C0FBA84B57} - {7BC87AF1-49FC-4822-ADDF-6B9B461B0ADC} = {F367DB7F-2170-48C6-9966-D6F9DF1808DB} - {637870E1-DF27-43CD-B771-3685E3D0BE01} = {003B008B-F388-4FB5-A081-12C0FBA84B57} - {5794AB8A-FF29-4F55-ABC2-9AAFE333BD27} = {F367DB7F-2170-48C6-9966-D6F9DF1808DB} - {0999204F-594C-4996-88A2-93D015EBDE33} = {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} + {FC15197F-4F76-47D4-839E-0F442E1D47CE} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} + {63C33FD7-81D5-4016-A8E9-656266E922B2} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} + {3AA43BA0-EB5E-4CE8-9BA9-2B6A563FDBE0} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} + {772CEB28-D73D-4D6F-9CB4-1FEF4B96FF60} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} + {436A0BCB-3866-4969-A129-CFA03C194E1F} = {08D2F8D6-1E89-4414-80F5-3607D3174879} + {657E6E65-A138-416C-9A60-D366E68D9B6D} = {08D2F8D6-1E89-4414-80F5-3607D3174879} + {6022BBA9-15BF-4CE3-B223-90B167F053D7} = {08D2F8D6-1E89-4414-80F5-3607D3174879} + {6AA98CD9-8E71-4AC4-A3DB-AEF245E60096} = {08D2F8D6-1E89-4414-80F5-3607D3174879} + {075A79C1-B038-46A8-8895-0A9753273B31} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} + {3E75202B-5AAD-4F07-98B5-46B106678CA7} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} + {DC9FAFBB-206C-4D34-A3F0-968CC95BF5BD} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} + {7696CC7F-83B7-434A-9759-4FCACC2FD483} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {B2462A15-B00D-4E4F-98E6-F1F7470507E5} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {23BA5FA7-8BD6-4AE1-9895-54F119DD15FA} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} + {D60FC037-849E-454F-8BED-8B3B349B13D8} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} + {148E0E11-3FE5-4BF7-A64F-B919A0A8D9BA} = {F981A8AC-E660-492B-8BF3-CBF70B66E392} + {B16BEABD-CCC2-4779-BCAE-3F55C43C98AC} = {1664C93C-730D-40B3-8257-B652B26F7EE8} + {700D882F-E19C-41B1-A49E-1D35BC9924BA} = {164EF13E-7F27-4BC8-92A4-A82B1696B279} + {1664C93C-730D-40B3-8257-B652B26F7EE8} = {08D2F8D6-1E89-4414-80F5-3607D3174879} + {E29EDD3B-9F68-4F8D-9E38-0E0E38942E4A} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} + {AFB3AAC0-E3CE-4DF9-8D52-D958FFADF126} = {08D2F8D6-1E89-4414-80F5-3607D3174879} + {F841431C-E84B-4B4A-9CAA-515BCAAB4648} = {FE769B0F-5C0F-4A54-81F6-CF878ACCAB3D} + {D256DE50-DEF8-4076-997D-CB599F9161D3} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {5794AB8A-FF29-4F55-ABC2-9AAFE333BD27} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {DEFCCB64-84E6-45B1-984C-9CAF0BA8CC23} = {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} + {81CCEE73-EE9A-4A7D-899D-A55730E4A60B} = {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} + {55C00722-DE2E-467C-A9BC-D5BCDC0FCC43} = {1664C93C-730D-40B3-8257-B652B26F7EE8} + {0AFEB550-56BB-449B-BB3A-0625167B4669} = {E29EDD3B-9F68-4F8D-9E38-0E0E38942E4A} + {97A82A0A-A574-452D-9D89-C6F0840DDDB8} = {1664C93C-730D-40B3-8257-B652B26F7EE8} + {2DB1B4DC-ABC2-4B8B-B7AE-8C6EB3EDA210} = {E29EDD3B-9F68-4F8D-9E38-0E0E38942E4A} + {7F95E157-C567-451F-A250-9645BE3F9497} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {3CDB91BD-EEF4-4808-83AC-E45B1FE7570C} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {18429710-19E2-480F-8B3A-39FB6FC7AF19} = {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} + {2A235861-B8FC-463A-A774-0C179529881A} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {C3EB9A85-92D6-4201-96AB-959CBAE4BF1B} = {003B008B-F388-4FB5-A081-12C0FBA84B57} + {7A6BAFEA-D159-41CD-A706-EF05E17914E3} = {164EF13E-7F27-4BC8-92A4-A82B1696B279} + {9E2125F8-2367-444A-B5D5-B7C61FCB456B} = {164EF13E-7F27-4BC8-92A4-A82B1696B279} + {60EEDECD-F064-4751-82D9-FCE07FFC8EC1} = {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} + {F1983240-E8C8-2BAD-5588-DC75E719E5F0} = {3AC1A3D4-91D0-471A-AF9C-5EF8442F3F27} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C8C4D9F7-EF86-49A2-83AF-13FA5D4E8DBB} EndGlobalSection + GlobalSection(SharedMSBuildProjectFiles) = preSolution + Shared.NFe.Wsdl\Shared.NFe.Wsdl.projitems*{148e0e11-3fe5-4bf7-a64f-b919a0a8d9ba}*SharedItemsImports = 13 + Shared.NFe.Wsdl\Shared.NFe.Wsdl.projitems*{23ba5fa7-8bd6-4ae1-9895-54f119dd15fa}*SharedItemsImports = 5 + Shared.NFe.Danfe\Shared.NFe.Danfe.projitems*{5794ab8a-ff29-4f55-abc2-9aafe333bd27}*SharedItemsImports = 13 + Shared.NFe.Danfe\Shared.NFe.Danfe.projitems*{7f95e157-c567-451f-a250-9645be3f9497}*SharedItemsImports = 5 + Shared.NFe.Danfe\Shared.NFe.Danfe.projitems*{b2462a15-b00d-4e4f-98e6-f1f7470507e5}*SharedItemsImports = 5 + Shared.NFe.Danfe\Shared.NFe.Danfe.projitems*{d256de50-def8-4076-997d-cb599f9161d3}*SharedItemsImports = 5 + Shared.NFe.Wsdl\Shared.NFe.Wsdl.projitems*{d60fc037-849e-454f-8bed-8b3b349b13d8}*SharedItemsImports = 5 + EndGlobalSection EndGlobal diff --git a/Zeus NFe.sln.DotSettings.user b/Zeus NFe.sln.DotSettings.user deleted file mode 100755 index 7f8bcedf5..000000000 --- a/Zeus NFe.sln.DotSettings.user +++ /dev/null @@ -1,31 +0,0 @@ - - SOLUTION - 2 - True - True - True - - - - - - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - - <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> - - - - - - - <AssemblyExplorer> - <Assembly Path="C:\Windows\Microsoft.NET\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.dll" /> - <Assembly Path="C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Xml.dll" /> -</AssemblyExplorer> - No - 4 - True - (Doc Ln 46 Col 101) - B7F6A2FF-FD0E-4B44-82B3-371605CD0510/d:NFCe/f:DanfeFrNfce.cs - NumberedBookmarkManager \ No newline at end of file diff --git a/Zeus NFe.v11.suo b/Zeus NFe.v11.suo deleted file mode 100644 index 7e1e5eafe..000000000 Binary files a/Zeus NFe.v11.suo and /dev/null differ diff --git a/Zeus NFe.v12.suo b/Zeus NFe.v12.suo deleted file mode 100644 index d578bcb72..000000000 Binary files a/Zeus NFe.v12.suo and /dev/null differ diff --git a/Zeus NFe.vssscc b/Zeus NFe.vssscc deleted file mode 100644 index 6cb031bcf..000000000 --- a/Zeus NFe.vssscc +++ /dev/null @@ -1,10 +0,0 @@ -"" -{ -"FILE_VERSION" = "9237" -"ENLISTMENT_CHOICE" = "NEVER" -"PROJECT_FILE_RELATIVE_PATH" = "" -"NUMBER_OF_EXCLUDED_FILES" = "0" -"ORIGINAL_PROJECT_FILE_PATH" = "" -"NUMBER_OF_NESTED_PROJECTS" = "0" -"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" -} diff --git a/Zeus.Net.CTe.nupkg b/Zeus.Net.CTe.nupkg deleted file mode 100644 index c494c362d..000000000 Binary files a/Zeus.Net.CTe.nupkg and /dev/null differ diff --git a/Zeus.Net.MDFe.nupkg b/Zeus.Net.MDFe.nupkg deleted file mode 100755 index 16d4e3ab6..000000000 Binary files a/Zeus.Net.MDFe.nupkg and /dev/null differ diff --git a/Zeus.Net.NFe.NFCe.nupkg b/Zeus.Net.NFe.NFCe.nupkg deleted file mode 100644 index f06f053a8..000000000 Binary files a/Zeus.Net.NFe.NFCe.nupkg and /dev/null differ