No dia 1º de janeiro de 2023, empresas prestadoras de serviços que emitem Nota Fiscal Conjugada (modelos 55 e 65) como documento fiscal para registrar prestação de serviços, no Distrito Federal, devem se adequar a mudança emitida pela Secretaria de Estado de Economia do Distrito Federal.
Essa mudança consiste na adequação ao modelo do Sistema de Gerenciamento do Imposto Sobre Serviços, o ISS. (Padrão ABRASF), ou seja, passam a emitir NFS-e.
Atenção!!! Para Emitir Notas de Serviço no Shop é necessário que possua o sistema ISSEasy (Emissor de Notas de Serviço) integrado. Caso tenha dúvidas quanto a adesão ou instalação do ISS-easy consulte nosso setor comercial ou de suporte. Só pode ser inserido UM Serviço por NFSe. |
Para realizar a geração do XML da Nota Fiscal de Serviços Eletrônica (NFS-e) é necessário que, no documento tenha somente um serviço por nota.
A emissão do Recibo Provisório de Serviços (RPS) ou geração do XML apenas será possível quando o documento:
Se necessário poderá imprimir o Recibo Provisório de Serviços.
| Saiba AQUI como gerar RPS. |
No ISS as configurações são as configurações Padrões.
Nessa parte você deve adicionar os dados da empresa do cliente, como razão social,CNPJ, Inscrição Municipal, endereço. |
Na aba seguinte, em Integração, teremos o ambiente de emissão, dados do provedor e demais configurações (que podem ser vistas detalhadamente no manual ISS-easy). → CLIQUE AQUI PARA VER A IMAGEM!! |
Na tela de configurações encontramos opções como modo de operação que pode ser serviço ou aplicativo, o diretório dos XMLs, configurações do RPS e de smtp. → CLIQUE AQUI PARA VER A IMAGEM!! |
| Lembrando que o ISS-easy não sofreu alterações, o mesmo já atendia a esse provedor (ISSnet), mas precisou ser ajustado para atender as alterações que o provedor fez pra atender Brasília, especificamente. |
Dentro do cadastro de empresa do ISS-easy é necessário cadastrar todas as empresas associadas a principal para que ele possa enviar o xml para a prefeitura, caso contrário o xml da NFS-e irá ficar na
pasta pendente do ISS-easy.
Para colocarmos todos os dados corretos para a emissão de nota, vamos precisar pegar as informações dele no site - https://df.issnetonline.com.br/online/Login/Login.aspx
Pode logar com o usuário e senha que foi cadastrado quando habilitaram pra usar nfse ou conectar com o Certificado Digital.
Passo a Passo:
Vai abrir uma tela com todos os cadastros do cliente no provedor. Lá tem o CNAE cadastrado, os códigos de tributação, Regime tributário, etc.
Se houver qualquer informação diferente do que consta nesse, a nota será rejeitada.
| No caso do NFeasy Emissor se a mesma pessoa fez o cadastro de várias empresas no mesmo CPF, vai abrir uma tela com todas elas. Se o cliente tem por exemplo 3 empresas vai ter que fazer isso pra cada uma das empresas. |
Informações Importantes:
Provedor: ISSNet (Versão 2.04)
DLL: AltNFSEISSNet204.dll
URLs para configuração do ISSEasy
Homologação: https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx
Produção: https://df.issnetonline.com.br/webservicenfse204/nfse.asmx
Site para consultar o cadastro do cliente
https://df.issnetonline.com.br/online/Login/Login.aspx
* Caso o cliente não esteja cadastrado no site acima, solicitar o cadastro em pelo e-mail suporte@notaeletronica.com.br
Chat ISSNET: https://www.notacontrol.com.br/portalnfse/#/home
Para saber sobre a questão no NFEasy Emissor, clique aqui!
Autor do artigo:Rayana.sup.shop (Não remova esse quadro)Descreva o passo a passo para o cliente seguindo os padrões de escrita de artigos, como:
|
(Não remova esse quadro)Essas informações não se tonam parte do conteúdo em sua nova página, elas ficam ocultas e só aprecem para usuário logado e se o artigo/dica estiver em modo de edição! |
<div id="text-end"></div>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-193974933-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag2(){dataLayer.push(arguments);}
gtag2('js', new Date());
gtag2('config', 'UA-193974933-1');
function gtagevents (action,category) {
console.log(category + ':' + action);
gtag2('event',action,{event_category:category,event_label: document.title});
};
</script>
<script src="https://player.vimeo.com/api/player.js"></script>
<script>
(function(){
// RASTREIO DE USO DO VÍDEO
function gtagvideo(action){
gtagevents(action,'Video')
}
var iframe = document.querySelector('iframe');
var player = new Vimeo.Player(iframe);
var seeking = false;
var priorTime = 0;
var currentTime = 0;
var reportouFinalDoConteudo = false;
// se pausar o play é acionado também.
player.on('play', function(data) {
if(data.seconds == 0){
gtagvideo('video-iniciado');
}
priorTime = data.seconds;
});
player.on('ended', function() {
gtagvideo('video-finalizado');
});
//seeking e timeupdate são disparados juntos, logo o tempo dos 2 é atualizado também. Preciso garantir que a variavel starttime seja atualizada ordenadamente (sempre antes ou após o seeking).
// pra isso preciso setar uma variavel no timeupdate e ler no seeking para garantir a ordem. Se ela estiver false será alterada na próxima iteração.
player.on('seeking', function(data) {
seeking = true;
});
player.on('pause',function(data){
gtagvideo('video-pausado');
});
player.on('timeupdate', function(data) {
if(seeking){
if(currentTime < priorTime){
gtagvideo('video-voltando');
}
if(currentTime > priorTime){
gtagvideo('video-avancando')
}
seeking = false;
}
priorTime = currentTime;
currentTime = data.seconds;
var finalDoConteudo = (data.duration - data.seconds) < 5;
if(finalDoConteudo && !reportouFinalDoConteudo){
gtagvideo('conteudo-finalizado')
reportouFinalDoConteudo = true;
}
});
player.on('fullscreenchange', function() {
gtagvideo('video-fullscreen');
});
})();
</script>
<script>
// RASTREIO DO USO DE AUDIO
(function(){
function gtagaudio(action){
gtagevents(action,'Audio')
}
var audio = document.querySelector("audio");
var seeking = false;
var priorTime = 0;
var currentTime = 0;
audio.addEventListener('play',function(){
if(audio.currentTime == 0){
gtagaudio('audio-iniciado');
}
priorTime = audio.currentTime;
});
audio.addEventListener('ended',function(){
gtagaudio('audio-finalizado');
});
audio.addEventListener('pause',function(){
gtagaudio('audio-pausado');
});
audio.addEventListener('seeking', function(data) {
seeking = true;
});
audio.addEventListener('timeupdate', function(data) {
if(seeking){
if(currentTime < priorTime){
gtagaudio('audio-voltando');
}
if(currentTime > priorTime){
gtagaudio('audio-avancando')
}
seeking = false;
}
priorTime = currentTime;
currentTime = audio.currentTime;
});
})();
</script>
<script>
(function(){
var terminou = false;
//RASTREIO DE LEITURA ATÉ O FINAL DA PÁGINA
document.addEventListener('scroll',() => {
if(document.getElementById('text-end').getBoundingClientRect().top < window.innerHeight){
if(!terminou){
terminou = true;
gtagevents('artigo-lido','Pagina')
}
}else{
terminou = false;
}
});
})();
</script>
|
<div id="text-end"></div>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-19PXZY9EEV"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag3(){dataLayer.push(arguments);}
gtag3('js', new Date());
gtag3('config', 'G-19PXZY9EEV');
function gtagevents (action,category) {
console.log(category + ':' + action);
gtag3('event',action,{event_category:category,event_label: document.title});
};
</script>
<script src="https://player.vimeo.com/api/player.js"></script>
<script>
(function(){
// RASTREIO DE USO DO VÍDEO
function gtagvideo(action){
gtagevents(action,'Video')
}
var iframe = document.querySelector('iframe');
var player = new Vimeo.Player(iframe);
var seeking = false;
var priorTime = 0;
var currentTime = 0;
var reportouFinalDoConteudo = false;
var reportouMetadeAssistido = false;
// se pausar o play é acionado também.
player.on('play', function(data) {
if(data.seconds == 0){
gtagvideo('video-iniciado');
}
priorTime = data.seconds;
});
player.on('ended', function() {
gtagvideo('video-finalizado');
});
//seeking e timeupdate são disparados juntos, logo o tempo dos 2 é atualizado também. Preciso garantir que a variavel starttime seja atualizada ordenadamente (sempre antes ou após o seeking).
// pra isso preciso setar uma variavel no timeupdate e ler no seeking para garantir a ordem. Se ela estiver false será alterada na próxima iteração.
player.on('seeking', function(data) {
seeking = true;
});
player.on('pause',function(data){
gtagvideo('video-pausado');
});
player.on('timeupdate', function(data) {
if(seeking){
if(currentTime < priorTime){
gtagvideo('video-voltando');
}
if(currentTime > priorTime){
gtagvideo('video-avancando')
}
seeking = false;
}
priorTime = currentTime;
currentTime = data.seconds;
var finalDoConteudo = (data.duration - data.seconds) < 5;
if(finalDoConteudo && !reportouFinalDoConteudo){
gtagvideo('video-conteudo-finalizado')
reportouFinalDoConteudo = true;
}
var metadeAssistido = data.seconds > (data.duration/2);
if(metadeAssistido && !reportouMetadeAssistido){
gtagvideo('video-metade-assistido')
reportouMetadeAssistido = true;
}
});
player.on('fullscreenchange', function() {
gtagvideo('video-fullscreen');
});
})();
</script>
<script>
// RASTREIO DO USO DE AUDIO
(function(){
function gtagaudio(action){
gtagevents(action,'Audio')
}
var audio = document.querySelector("audio");
var seeking = false;
var priorTime = 0;
var currentTime = 0;
audio.addEventListener('play',function(){
if(audio.currentTime == 0){
gtagaudio('audio-iniciado');
}
priorTime = audio.currentTime;
});
audio.addEventListener('ended',function(){
gtagaudio('audio-finalizado');
});
audio.addEventListener('pause',function(){
gtagaudio('audio-pausado');
});
audio.addEventListener('seeking', function(data) {
seeking = true;
});
audio.addEventListener('timeupdate', function(data) {
if(seeking){
if(currentTime < priorTime){
gtagaudio('audio-voltando');
}
if(currentTime > priorTime){
gtagaudio('audio-avancando')
}
seeking = false;
}
priorTime = currentTime;
currentTime = audio.currentTime;
});
})();
</script>
<script>
(function(){
const tamanhoDaTela = window.innerHeight;
let terminou = false;
let chegouNaMetade = false;
// se não remover o tamanho da tela do meio da página, o evento só será disparado quando o meio da página estiver acima da área visível.
// fazendo dessa forma assim que o meio da página estiver visível na base da janela o evento será disparado.
const meioDoTexto = (document.getElementById('text-end').getBoundingClientRect().top / 2) - tamanhoDaTela;
//RASTREIO DE LEITURA ATÉ O FINAL DA PÁGINA
document.addEventListener('scroll',() => {
if(document.getElementById('text-end').getBoundingClientRect().top < tamanhoDaTela){
if(!terminou){
terminou = true;
gtagevents('artigo-lido','Pagina')
}
}else{
terminou = false;
}
//RASTREIO DE LEITURA ATÉ O MEIO DA PÁGINA
if(meioDoTexto < window.scrollY) {
if(!chegouNaMetade){
gtagevents('artigo-lido-ate-metade','Pagina');
chegouNaMetade = true;
}
} else {
chegouNaMetade = false;
}
});
})();
</script>
|