OCA / l10n-brazil

Localização brasileira oficial do Odoo.
https://odoo-community.org/psc-teams/brazil-66
GNU Affero General Public License v3.0
235 stars 244 forks source link

[14.0][IMP] l10n_br_account_withholding: handling of partner_id assignment #3181

Open kaynnan opened 1 month ago

kaynnan commented 1 month ago

cc @marcelsavegnago @douglascstd @WesleyOliveira98 @Matthwhy

Esta PR introduz a lógica para determinar o partner_id com base no campo cidade do ISSQN. Quando a cidade do ISSQN está especificada na linha de itens da fatura, o partner_id é definido pelo partner_wh_id associado a essa cidade no modelo res.city, permitindo identificar entidades como a Prefeitura de São Paulo. Antes de atribuir o partner_id, valida-se se há um partner_wh_id definido para a cidade no modelo res.city. Caso não haja, o partner_id é obtido através do l10n_br_fiscal.tax.group. Se a cidade do ISSQN não estiver preenchida na linha de itens da fatura, o partner_id é obtido com base na cidade do Parceiro da fatura de retenção.

OCA-git-bot commented 1 month ago

Hi @marcelsavegnago, @renatonlima, some modules you are maintaining are being modified, check this out!

marcelsavegnago commented 1 month ago

@rvalyi @antoniospneto @renatonlima .. Para esta questão estamos criando um campo em res.city para informar o parceiro de retenção. Se por acaso ter este dado na cidade ou até mesmo no estado e pais for algo seja valido deixar direto no fiscal, podemos implementar lah... mas por ora estamos implementando pelo modulo wh.

Falo disso porque hoje no fiscal existe o campo partner wh no fiscal group. O que tbm podemos retirar no fiscal e mover para o modulo wh.

marcelsavegnago commented 1 month ago

@Matthwhy faça uma revisão funcional e evidencie aqui por favor

antoniospneto commented 1 month ago

@marcelsavegnago será que não é interessante já aproveitar e exibir no modelo do parceiro, a relação com a cidade do imposto retido? já que essa relação já vai existir no banco de dados

marcelsavegnago commented 1 month ago

@marcelsavegnago será que não é interessante já aproveitar e exibir no modelo do parceiro, a relação com a cidade do imposto retido? já que essa relação já vai existir no banco de dados

Vc fala por exemplo, no cadastro da prefeitura aparecer as cidades que ele é parceiro de imposto retido ?

douglascstd commented 1 month ago

a relação com a cidade do imposto

Olá Neto, não sei se faz sentido cadastrar uma lista de municípios e/ou parceiros em um parceiro, pois não é limitado no momento do cadastro. E pode criar uma restrição na necessidade de outros cadastros.

A proposta desta PR é incluir um parceiro vinculado ao município (res.city), pois quando o tomador seleciona o município em que o serviço foi executado (na guia ISSQN). Este parceiro deverá ser a prefeitura do município.

A questão é que o módulo l10n_br_account_withhoding gera uma fatura para pagar o ISS desta retenção, e o parceiro deve ser o da PREFEITURA do município selecionado na fatura.

Obs. O município não tem uma relação direta com o parceiro (fornecedor) mas ao município em que foi prestado o serviço, que deve ser selecionado na criação da fatura de fornecedor.

Acho que é isso que eu entendi da sua ideia Neto... :-)

douglascstd commented 1 month ago

@kaynnan uma proposta: ainda acho que a proposta de incluir um campo de parceiro no res.city é o mais simples.. mas vejo que podemos separar os modelos: e deixar mais fexivel, poderiar ter um modelo: cityhall.city, dentro dele um city_id e um partner_id (com uma restrição de ter somente um city_id por tabela)

antoniospneto commented 1 month ago

Oi Douglas, entendi a sua explicação e a proposta da PR.

A minha sugestão é aproveitar o vínculo do res_partner (prefeitura) com o city_id para exibi-lo também na visão do res.partner. Com isso, ao abrir o cadastro da Prefeitura, será possível visualizar as cidades associadas a ela para fins de retenção de impostos.

Na PR, está sendo feito:

class ResCity(models.Model):

    _inherit = "res.city"

    partner_wh_id = fields.Many2one(
        comodel_name="res.partner",
        string="WH Partner",
        help="Partner associated with this city for withholding tax purposes",
    )

Para complementar, sugiro adicionar o seguinte código no modelo res.partner:

class ResPartner(models.Model):
    _inherit = 'res.partner'

    city_wh_ids = fields.One2many(
        comodel_name="res.city",
        inverse_name="partner_wh_id",
        string="Cities with WH",
        help="Cities associated with this partner for withholding tax purposes",
    )

Mas é só uma sugestão, não tem necessidade ok

kaynnan commented 1 month ago

Baseado no modelo fsm.wizard, desenvolvi um novo wizard que permite a conversão de um parceiro para um parceiro de retenção (WH). Esta funcionalidade facilitará futuras implementações de questões relacionadas a Estado e Governo para o WH. Implementei uma restrição para garantir que apenas um parceiro seja associado a cada município, visando manter a integridade dos dados.

Gostaria de pedir a revisão e o feedback de vocês sobre esta mudança, incluindo sugestões para melhorar o nome do wizard e quaisquer outras melhorias pertinentes.

antoniospneto commented 1 month ago

fsm.wizard

Baseado no modelo fsm.wizard, desenvolvi um novo wizard que permite a conversão de um parceiro para um parceiro de retenção (WH). Esta funcionalidade facilitará futuras implementações de questões relacionadas a Estado e Governo para o WH. Implementei uma restrição para garantir que apenas um parceiro seja associado a cada município, visando manter a integridade dos dados.

Gostaria de pedir a revisão e o feedback de vocês sobre esta mudança, incluindo sugestões para melhorar o nome do wizard e quaisquer outras melhorias pertinentes.

Achei interessante a proposta, legal do campo ser um boleano, só achei estranho o wizard, sendo que só tem uma opção para selecionar que é Prefeitura.

kaynnan commented 1 month ago

fsm.wizard

Baseado no modelo fsm.wizard, desenvolvi um novo wizard que permite a conversão de um parceiro para um parceiro de retenção (WH). Esta funcionalidade facilitará futuras implementações de questões relacionadas a Estado e Governo para o WH. Implementei uma restrição para garantir que apenas um parceiro seja associado a cada município, visando manter a integridade dos dados. Gostaria de pedir a revisão e o feedback de vocês sobre esta mudança, incluindo sugestões para melhorar o nome do wizard e quaisquer outras melhorias pertinentes.

Achei interessante a proposta, legal do campo ser um boleano, só achei estranho o wizard, sendo que só tem uma opção para selecionar que é Prefeitura.

Essa questão de somente uma seleção existente é por conta de ser uma ideia inicial, então mais para frente permitirá o pessoal adicionar outras seleções como Estado, Governo, tratando essas novas seleções no módulo, por momento seria destinada somente ao Munícipio mesmo

marcelsavegnago commented 1 month ago

@kaynnan nao sei se precisa de wizard para isso nao.. E talvez caberia implementar os campos parceiropara pagamento de tributos na cidade, estado e pais independente do imposto ser retido ou não. Hoje fariamos uso para as retenções mas amanha poderia ser utilizado para geração de pagamentos de tributos por algum outro modulo. Então pensando nisso talvez este campo parceiro nos modelos res.city res.state e res.country junto com um botão no cadastro do parceiro par amostar as cidades, estados e paises que ele está associado neste campo tax_partner_id ou similar e que soh aparece se houver relação.

Em tese o parceiro para quem vou pagar um imposto retido é o mesmo que vou pagar um imposto nao retido.

@rvalyi @antoniospneto oq acham ?

antoniospneto commented 1 month ago

ei se precisa de wizard para isso nao.. E talvez caberia implementar os campos parceiropara pagamento de tributos na cidade, estado e pais independente do imposto ser retido ou não. Hoje fariamos uso para as retenções mas amanha poderia ser utilizado para geração de pagamentos de tributos por algum outro modulo. Então pensando nisso talvez este campo parceiro nos modelos res.city res.state e res.country junto com um botão no cadastro do parceiro par amostar as cidades, estados e paises que ele está associado neste campo tax_partner_id ou similar e que soh aparece se houver relação.

Em tese o parceiro para quem vou pagar um imposto retido é o mesmo que vou pagar um imposto nao retido.

por mim pode ser sim

renatonlima commented 1 month ago

Olá pessoal,

Eu não acho uma boa ideia incluir o um campo partner_id no res.city porque são 5.568 municípios e mesmo que uma empresa prestar serviço que seja para 10, 20, 30 empresas já vai ser um trabalho manual

A minha sugestão

O grupo de impostos atual existe um campo para definir se aquele tributo é federal, estadual ou municipal e existe um campo para definir o parceiro que ira recolher o imposto

image

Ao invés de usar um campo no res.city ou ter algum flag no res.partner, poderíamos aproveitar essas informações no grupo de impostos e no caso do parceiro, ter um parceiro pai "Prefeitura Municipal" E criar outros parceiros filhos desse parceiro para cada prefeitura

image

Inclusive em uma importação de uma NFS-e caso a prefeitura do município não esteja criada, é possível criar automáticamente sem depender de uma configuração manual e nesse caso também é possível ter uma validação para que se o parceiro pai está sendo usado em um grupo de impostos e o tipo de imposto é municipal não deixar gravar dois parceiros com o mesmo estado e município. Essa lógica também poderia ser feita para os impostos estaduais, onde teria um parceiro pai "Secretaria da Fazenda" e ter parceiros filhos "Secretaria da Fazenda ESTADO".

rvalyi commented 1 month ago

tb não sei se ajuda, mas no https://github.com/akretion/nfselib eu consigo jogar no dicionário a relação do município com o provedor, da mesma forma como tou gerindo o README com os script generate.py la. Não sei se ajuda para isso, mas é algo que ta na mão se precisar.

marcelsavegnago commented 1 month ago

tb não sei se ajuda, mas no https://github.com/akretion/nfselib eu consigo jogar no dicionário a relação do município com o provedor, da mesma forma como tou gerindo o README com os script generate.py la. Não sei se ajuda para isso, mas é algo que ta na mão se precisar.

aqui nao sei se ajuda.. porque a questão no caso do pagamento do tributo é independente do provedor utilizado e sim da cidade onde incide o ISS

antoniospneto commented 1 month ago

Pessoal, eu ainda sou a favor de ter o booleano indicando que aquele parceiro é uma prefeitura

marcelsavegnago commented 1 month ago

@renatonlima, eu não gosto muito da ideia de ter que cadastrar a prefeitura vinculada a outro parceiro. Estava pensando na possibilidade de criar uma flag no partner sinalizando se é um parceiro de imposto municipal, estadual, país e criar talvez uma restrição permitindo apenas um parceiro com essa flag ativa para cada cidade, estado ou país.

Assim, deixamos o parceiro padrão configurado no grupo de imposto, mas, na lógica do módulo, colocamos a verificação da cidade onde o imposto incide (no caso ISS). Se houver um parceiro com a flag ativa naquela cidade, a fatura será gerada para esse parceiro, em vez do parceiro padrão.

O que acha ? Se for o caso ainda incluimos um parametro no grupo do imposto sinalizando se esta busca pelo parceiro com base neste flag deve ser feita.

kaynnan commented 3 weeks ago

Pessoal, seguindo a lógica mencionada pelo @marcelsavegnago na última mensagem, atualizei o commit para incluir esse campo booleano. Como inicialmente a ideia seria aplicável para o caso de Cidades, acrescentei um TODO mencionando a possibilidade de incluir campos booleanos para Estadual e Federal.

kaynnan commented 3 weeks ago

image

Commit que subi recente foi para alterar a configuração do campo Boolean para a aba Fiscal, ao invés de um <notebook> do WH

antoniospneto commented 3 weeks ago

image

Commit que subi recente foi para alterar a configuração do campo Boolean para a aba Fiscal, ao invés de um <notebook> do WH

Será que o rotulo do campo não poderia ser apenas "Is City Hall?" e estar ali no grupo "Other Infos"?

kaynnan commented 3 weeks ago

image Commit que subi recente foi para alterar a configuração do campo Boolean para a aba Fiscal, ao invés de um <notebook> do WH

Será que o rotulo do campo não poderia ser apenas "Is City Hall?" e estar ali no grupo "Other Infos"?

Alterado o rótulo e inserido dentro do grupo de "Other Infos"

kaynnan commented 1 week ago

Realizei o rebase aqui, acredito que os testes normalizem, mas o codecov deve reportar um percentual baixo, em breve realizo outro commit para que o percentual seja alcançado corretamente.

kaynnan commented 5 days ago

Finalizado os testes unitários

OCA-git-bot commented 4 days ago

This PR has the approved label and has been created more than 5 days ago. It should therefore be ready to merge by a maintainer (or a PSC member if the concerned addon has no declared maintainer). 🤖

kaynnan commented 4 days ago

Commit para adicionar informações sobre a utilização da Prefeitura para o ISSQN e seu respectivo funcionamento.