TIP: You can type at any time to perform a new search.
SPED Base
l10n_br_sped_base · OCA/l10n-brazil
- Repository
- OCA/l10n-brazil · module folder · Try on Runboat
- Module version
- Category
- Uncategorized
- Folder size
- 0.17 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/l10n-brazil
- Last tracking update
- 2026-08-12 05:09:24
- Authors
- Akretion, Odoo Community Association (OCA)
- Maintainers
- Akretion, Odoo Community Association (OCA)
- Committers
- Raphaël Valyi, OCA-git-bot, oca-ci, CristianoMafraJunior
- Odoo dependencies
- Python dependencies
- erpbrasil.base, email-validator, num2words, phonenumbers
- System dependencies
- None
- Required by
- None
- Description
Este módulo contém algumas abstrações utilizadas pelos módulos de SPED Ele não faz nada sozinho, mas serve dentro dos 4 módulos: - l10n_br_sped_ecd - l10n_br_sped_efd_icms_ipi - l10n_br_sped_efd_pis_cofins - l10n_br_sped_ecf Em especial, cada registro dos módulos de SPED herda do objeto abstrato l10n_br_sped.mixin que conta com visões automáticas e metodos para importar ou escrever registros dos SPED de forma recursiva. Para cada tipo de arquivo SPED, o registro de abertura 0000 herda também do objeto abstrato l10n_br_sped.declaration que conta com métodos para popular os registros do SPED a partir das transações do Odoo entre as datas DT_INI e DT_FIN e permite assim gerir os arquivos do SPED. Para gerir o SPED, basta criar uma declaração do SPED no menu apropriado. Depois clicar em Puxar os Dados do Odoo. Isso vai percorrer a arvore dos registros do SPED e para cada registro vai usar `_odoo_domain` ou `_odoo_query` para ver se tem records Odoo para mapear. Caso tiver vai chamar o método `_map_from_odoo` do registro. Depois vai repetir a operação com os registros filhos. Na declaração é possível escolher se você quer um único arquivo SPED ou se você quer quebrar o arquivo bloco por bloco. Em cada módulo de SPED, existe 2 arquivos principais: - um arquivo com o número do leiaute que contém **os modelos abstratos de todos os registros do SPED com todos os campos**. Este arquivo é gerido gerido pela ferramenta [spedextractor](https://github.com/akretion/sped-extractor) a partir dos pdf das especificações e **não deve ser editado manualmente**. - um segundo arquivo que contém a **lista de todos registros concretos** que herdam desses primeiros modelos abstratos e contém assim todos os campos. Como o mixin de cada registro contém a versão do leiaute dentro do nome dele, temos uma forma de suportar várias versões dos leiautes. Esse arquivo dos registros concretos deve sim ser editado manualmente para completar os mappings. Para mapear um registro, deve se implementar o override desses 3 métodos: - `def _odoo_domain(self, parent_record, declaration):` deve retornar um domain que permite a seleção dos records Odoo a serem mapeados de acordo com o record parente e os dados da declaração (onde tem as datas e a empresa por exemplo). Para usar esse método `_odoo_domain`, deve se definir também o atributo `_odoo_model` - `def _odoo_query(self, parent_record, declaration): ` caso a seleção dos records a serem mapeados não pode ser obtida por um domain, pode ser implementado esse override para retornar a query SQL para selecionar um result set a mapear. Neste caso, o record do método `_map_from_odoo` é um result set do query Postgres. Se você não implementar nem `_odoo_domain` nem `_odoo_query` e implementar o método `_map_from_odoo`, o registro vai ter uma instância gerida para cada declaração. É o caso do registro I010 da ECD por exemplo. - `_map_from_odoo(self, record, parent_record, declaration, index=0)` para facilitar, os overrides dos metodos `_map_from_odoo` de todos os registros, esse já vem geridos de forma comentada com todos os campos do registro. Assim basta descomentar or método e implementar como é mapeado cada campo a partir do record, parent_record e dos dados da declaração.
Code Analysis ⓘ
Views touched (1)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
partner_form |
l10n_br_sped_base.res.partner.form | res.partner | form | Inherits l10n_br_base.l10n_br_base_partner_form |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (3)
New fields (13)
-
DT_FINDatedefault=_get_default_dt_finstring='End Date' -
DT_INIDatedefault=_get_default_dt_inistring='Start Date' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>required=Truestring='Company' -
debugBooleanhelp='If True, will pull draft account moves and draft fiscal documents from a larger date period to help developpers develop and debug the mappings' -
fiscal_comment_idsOne2many → l10n_br_fiscal.commentcomodel_name='l10n_br_fiscal.comment'compute='_compute_fiscal_documents' -
fiscal_document_idsOne2many → l10n_br_fiscal.documentcomodel_name='l10n_br_fiscal.document'compute='_compute_fiscal_documents' -
fiscal_document_line_idsOne2many → l10n_br_fiscal.document.linecomodel_name='l10n_br_fiscal.document.line'compute='_compute_fiscal_documents' -
fiscal_document_partner_idsOne2many → res.partnercomodel_name='res.partner'compute='_compute_fiscal_documents' -
fiscal_operation_idsOne2many → l10n_br_fiscal.operationcomodel_name='l10n_br_fiscal.operation'compute='_compute_fiscal_documents' -
fiscal_product_idsOne2many → product.productcomodel_name='product.product'compute='_compute_fiscal_documents' -
fiscal_uom_idsOne2many → uom.uomcomodel_name='uom.uom'compute='_compute_fiscal_documents' -
split_sped_by_blocoBoolean -
stateSelectioncopy=Falsedefault='draft'help="State of the declaration. When the state is set to 'Done', the parameters become read-only."readonly=Trueselection=[('draft', 'Draft'), ('done', 'Done')]tracking=True
-
button_create_sped_files(self)Generate and attach the SPED file. -
button_done(self) -
button_draft(self) -
button_flush_registers(self) -
button_populate_sped_from_odoo(self)Populate SPED registers from Odoo. -
onchange_company_id(self)@api.onchange('company_id')
New fields (7)
-
brl_currency_idMany2one → res.currencycomodel_name='res.currency'compute='_compute_currency_id'default=<expr>string='Moeda' -
company_idMany2one → res.companydefault=<expr>index=Truerequired=True args: 'res.company', 'Company' -
is_generated_from_odooBoolean -
is_importedBoolean -
referenceCharcompute='_compute_reference'readonly=Truestore=Falsestring='Odoo Reference' -
res_idMany2oneReferencehelp='ID of the target record in the database'model_field='res_model'string='Record ID' -
res_modelCharstring='Odoo Model'
No public methods.
New fields (3)
-
crc_codeCharsize=18string='CRC Code' -
crc_state_idMany2one → res.country.statecomodel_name='res.country.state'string='CRC State' -
is_accountantBooleanstring='Is accountant?'
No public methods.
Loading…
Loading…
Loading…