Dicas sobre desenvolvimento de software, gestão e tributações

Rede Social

12 de outubro de 2015

Algumas particularidades da NFCe


Nesta postagem irei frisar algumas particularidades importantes da NFCe, visando

facilitar para desenvolvedores e interessados descrevendo as em um único local.

Somente como observação não se esqueçam que este post é de outubro de 2015 então aqui estarão

alguns pontos que estão em produção no momento, como são previstas várias alterações no projeto

do NFCe pode ocorrer ao longo do tempo.

- Prazo para cancelamento de uma venda é de 24 horas (anteriormente já foi de 30 minutos).

- Como na NFe pode haver a inutilização de numeração. Após emitir a NFC-e número 100 , foi emitida a NFC-e número 120. Use o programa para inutilizar as NFC-e do número 101 a 119.

- Certificado digital pode ser A1(armazenado no pc) ou A3(cartão).

- Pode ser o mesmo certificado digital da NF-e.

- Arquivos xml devem ser armazenados por (ano corrente + 5 anos) pelo contribuinte.

- Valor máximo da NFCe 10.000,00 sem identificação do destinatário e 200.000,00 com identificação, ambas parametrizáveis por UF (ou seja cada estado pode ter seus próprios valores limite).

- DANFE é uma impressão simplificada da venda com intenção de facilitar a consulta do consumidor final no ambiente da Sefaz. (Documento fiscal).

- Detalhe da Venda é um documento não fiscal, com a finalidade de detalhar para o consumidor final os itens de mercadoria que compõem a operação de venda realizada.

- O contribuinte pode solicitar o envio do arquivo xml por e-mail desde que antes de iniciada a emissão da NFCe.

- Cada estado pode optar por permitir não imprimir o Danfe e enviá-lo apenas por e-mail.

- Detalhe da venda não possui modelo específico, apenas informações obrigatórias por item(código, descrição, quantidade, valor unitário e valor total) e de totalização (valor total, forma de pagamento, valor pago e troco).

- O Danfe tem formato específico e está descrito no manual de especificações técnicas do Danfe NFCe que pode ser acessado aqui

- No Danfe deverá ser exibido o valor aprox dos tributos (valor em reais). Lei de olho no imposto.

- QR code deverá usar no seu hash o algoritmo sha1 e os tipos de caracteres UTF-8.

- NFCe não pode ter PISST, COFINSST, IPI, dados da transportadora e cobrança.

Em caso de contingência

- Em caso de problemas técnicos ou operacionais, o contribuinte poderá utilizar a contingência offline que consiste na emissão da NFC-e, sem a prévia autorização do Fisco,

  devendo, nesse caso, ser transmitida à SEFAZ em um prazo de até 24h após a venda. A decisão da emissão da NFC-e em contingência é exclusiva do contribuinte e não depende de autorização do Fisco.

  (Cada estado pode definir sua forma de contingência, no estado de São Paulo por exemplo a contingência da NFCe é o documento 59 SAT).

  A contingência off-line também tem manual específico.

- Arquivo digital em modo contingência deve conter I - motivo da entrada em contingência; II - data, hora com minutos e segundos do seu início.

- Obrigatoriamente deve ser impressa no DANFE a mensagem “EMITIDA EM CONTINGÊNCIA”.

- Obrigatoriamente devem ser impressas duas vias do DANFE ou o contribuinte deve guardar o arquivo xml(não podendo alegar problemas técnicos em caso de perda do arquivo).

Em caso de denegação

Na hipótese de denegação da Autorização de Uso da NFC-e, prevista no inciso II:

1 - O arquivo digital transmitido ficará arquivado na Secretaria da Fazenda para consulta, identificado como “Denegada a Autorização de Uso”;

2 - Não será possível sanar a irregularidade e solicitar nova Autorização de Uso da NFC-e para NFC-e de mesma série e número.

Aqui vou deixar um vídeo com mais algumas informações interessantes sobre o assunto do respeitado Claudenir da Daruma.

Ler

4 de outubro de 2015

Converter valor inteiro para binario C#


Nesta dica mostrarei como é simples converter um valor inteiro para binario.
Vamos ao método.
Ele terá como parâmetro o int com o valor a ser convertido e retornará uma string com o binário.

public string ConverteParaBinario(int valor)
{
try
{
string retorno = "", resFinal = "";
int restoMod = 0, resParcial = 0;

while (valor >= int.Parse(2.ToString()))
{
restoMod = resParcial % int.Parse(2.ToString());
resParcial = resParcial / int.Parse(2.ToString());
resFinal = caracteres.Substring(restoMod, 1) + resFinal;
}

return retorno;
}
catch { return ""; }
}
Ler

3 de outubro de 2015

Adicionar ícone na área de notificação C#


Na dica de hoje mostrarei como adicionar um ícone na área de notificações do windows (Aquela perto do relógio).

Começando com o objeto do ícone.
System.Windows.Forms.NotifyIcon meuIcone;

Depois indicando o local do arquivo de ícone.
Obs. O .ico é a extensão específica de ícones.
string caminhoIcon = @"D:\meuIcone.ico";

Inicializando e configurando o ícone.
meuIcone = new System.Windows.Forms.NotifyIcon();

Este é o texto que aparecerá quando o usuário colocar o mouse sobre o ícone (tooltip).
meuIcone.Text = "Título do meu ícone";

Setando se o ícone estará visível ou não. É bastante útil quando deseja-se que o ícone apareça em uma determinada situação ou evento.
meuIcone.Visible = true;

Desenhando o ícone com a imagem carregada anteriormente
meuIcone.Icon = new System.Drawing.Icon(caminhoIcon);

Pronto seu ícone será exibido.
Mas podemos adicionar algumas propriedades a mais e mais funcionalidades para ele do que somente exibí-lo.

Como por exemplo adicionar eventos. Este é um evento de duplo clique do mouse.
meuIcone.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(meuIcone_MouseDoubleClick);

Ou então adicionar um menu de contexto (É aquele que aparece quando clicamos com o botão direito do mouse sobre ele).
Vou mostrar um menu com dois itens, um para exibir seu aplicativo e outro para enviar um comando de fechar.
System.Windows.Forms.MenuItem[] items = new System.Windows.Forms.MenuItem[2];
System.Windows.Forms.MenuItem item = new System.Windows.Forms.MenuItem("Abrir o " + Globals.assData.Name);
System.Windows.Forms.MenuItem item2 = new System.Windows.Forms.MenuItem("Sair do " + Globals.assData.Name);
item.Click += item_Click;
item2.Click += item2_Click;
items[0] = item;
items[1] = item2;
meuIcone.ContextMenu = new System.Windows.Forms.ContextMenu(items);

E estes são os eventos de clique simples que serão acionado no menu de contexto.
private void item2_Click(object sender, EventArgs e)
{
Close();
}

private void item_Click(object sender, EventArgs e)
{
this.Show();
this.WindowState = System.Windows.WindowState.Normal;
}

Também é possível adicionar uma mensagem em forma de balloon (Aquelas mensagens que geralmente são temporárias e aparecem em cima do ícone)
meuIcone.BalloonTipText = "Meu aplicativo"; //Texto exibido no balloon
meuIcone.ShowBalloonTip(400); //tempo em que o balloon será exibido
Ler

2 de outubro de 2015

Converter string em hexadecimal C#


Esta dica é para converter facilmente uma string qualquer em seu valor hexadecimal correspondente. O tema surgiu quando eu estava programando
um projeto para NFCe onde alguns valores são utilizados em sua forma hexadecimal para formar uma string do QrCode.
Aqui segue uma forma de obter este valor.
Vou converter o texto "teste" para hexadecimal;

string texto = "teste";

Aqui converto a string em um vetor de bytes (hexadecimal), você deverá ficar atento a qual Encoding deseja utilizar (UTF7, UTF8, UTF32, ASCII etc).
byte[] ba = System.Text.Encoding.UTF8.GetBytes(texto);

Agora vou transformar este vetor de bytes em string novamente, com isso já terei minha string em hexadecimal
var hexString = BitConverter.ToString(ba);
string retorno = hexString;

A string retornada vem com "-" como separador de cada um dos bytes, caso queira removê-lo é só utilizar o método de replace;
retorno.Replace("-", "");
Ler

1 de outubro de 2015

Ler versão de arquivos com C#


Agora é a vez dos arquivos, algumas vezes precisamos conferir a versão de algum arquivo ou dll para saber
se realmente a versão que está sendo utilizada é a desejada ou mais atualizada.
Existe uma forma simples de saber isso dentro do seu aplicativo com C#.

Vamos declarar uma string com a pasta corrente. (somente para o exemplo o arquivo pode estar em qualquer
caminho desde que ele esteja acessível)

string diretorio = System.IO.Directory.GetCurrentDirectory();

Agora vamos verificar se a DLL ou arquivo desejado está neste caminho.
Obs.: o "dll" que se segue deverá ser trocado pelo nome do arquivo.
bool localizada = System.IO.File.Exists(diretorio + @"\" + dll);

Se for localizada iremos capturar a versão
if (localizada)
{
System.Diagnostics.FileVersionInfo arquivo = System.Diagnostics.FileVersionInfo.GetVersionInfo(path + @"\" + dll);
string versaoArquivo = arquivo.FileVersion;
}

Pronto temos uma string "versaoArquivo" com a versão do arquivo.
Ler